[EMF] Entity Model Features 1.3
on 2024 Dec 01- 添加了
EMFAnimationApi
,它允许其他模组向 EMF 注册自己的自定义动画变量和函数。- 可以通过
FloatSupplier
为简单数字变量向EMFAnimationApi
添加变量。- 通过
BooleanSupplier
为简单布尔变量添加变量。 - 如果你的变量需要更复杂的逻辑,例如读取复杂的变量名或在不同上下文中给出不同的结果,可以通过自定义变量工厂添加变量。
- 通过
- 可以通过
Function<Float, Float>
为具有 1 个参数的简单函数向EMFAnimationApi
添加函数。- 通过
BiFunction<Float, Float, Float>
为具有 2 个参数的简单函数添加函数。 - 通过
TriFunction<Float, Float, Float, Float>
为具有 3 个参数的简单函数添加函数。 - 通过
Function<List<Float>, Float>
为具有通过List<Float>
提供的可变数量参数的函数添加函数。 - 如果你的函数需要更复杂的逻辑,例如将参数字符串读取为除浮点数之外的值,可以通过自定义函数工厂添加函数。
- 通过
- 可以通过
- 将
未知模型打印
选项更改为模型导出
,并添加了将所有模型信息导出到.jem 文件或日志的选项,而不仅仅是未知/已修改的模型。- 模型现在以正确的枢轴、盒子和 UV 导出为
Blockbench
格式。 - 模型现在导出到
.minecraft/emf/export/
。
- 模型现在以正确的枢轴、盒子和 UV 导出为
- 实现了
is_on_head
、is_in_hand
和is_in_item_frame
,它们之前没有任何作用。 - 修复了一个
"newstate" is null
崩溃。 - 添加了
Animation LOD 距离
设置,允许你设置 EMF 开始跳过动画帧以节省性能的距离。 - 添加了
在低 fps 时保留 LOD
设置,当游戏运行在 60 fps 以下时,它将按比例减少上述 LOD 设置的影响,因为在较低的 fps 下跳过的帧可能会更明显。 - 重新设计了配置屏幕,在适当的地方使用滑块。
- 将
wolf_armor
添加到 OptiFine 名称映射中。 - 无效的纹理覆盖将不再导致模型无法加载,而是记录错误并使用原始纹理。
- EMF 日志消息现在以更短的
[EMF]
为前缀。 - 暂时禁用了三叉戟的纹理覆盖,因为它们存在问题且难以排查。
- 添加了调试渲染选项
纹理上的线框
,它同时渲染模型的线框和纹理。 - 添加了调试渲染选项
纹理上的闪烁线框
,它同时渲染模型的线框和纹理,但线框会淡入淡出。 - EMF 现在可以正确读取 OptiFine 设置的各种相对路径的所有纹理覆盖,例如
./
、~/
等。 - 添加了一个配置设置(默认启用),允许 EMF 修改
增强块实体(EBE)
模组的配置,以便在加载自定义 EMF 模型的块实体时禁用它。 - 修复了纹理覆盖与特征渲染器配合异常的问题(修复了 Ewan 的带有村民的实体健康条 cem 模型)。
- 将
left_ear
和right_ear
添加到head_piglin.jem
中,这似乎是正确的,但在 OptiFine 的文档中缺失了:/ - 减少并重新措辞了一些会让用户担心的加载日志垃圾信息(例如,Fresh Animations 1.9 现在在加载时不再发送日志错误)。
- 添加了仅适用于 EMF 的弧度和度的旋转逻辑函数
wrapdeg() wraprad() degdiff() raddiff()
。wrap
函数将旋转值向下包裹到其最小的相同值,例如wrapdeg(370)
将返回10
,wrapdeg(350)
将返回-10
。diff
函数将返回两个旋转值之间的结果差异,考虑到旋转,例如degdiff(10, 350)
将返回-20
,degdiff(10, 370)
将返回0
。
- 添加了许多仅适用于 EMF 的插值动画函数。
catmullrom() quadbezier() cubicbezier() hermite() easeinoutexpo() easeinexpo() easeoutexpo() easeinoutcirc() easeincirc() easeoutcirc() easeinoutelastic() easeinelastic() easeoutelastic() easeinoutback() easeinback() easeoutback() easeinoutbounce() easeinbounce() easeoutbounce() easeinquad() easeoutquad() easeinoutquad() easeincubic() easeoutcubic() easeinoutcubic() easeinquart() easeoutquart() easeinoutquart() easeinquint() easeoutquint() easeinoutquint() easeinsine() easeoutsine() easeinoutsine()
。- hermite 和 catmullrom 有 5 个参数,bezier 有 4 个参数,其余的有 3 个参数,并且都以与
lerp()
相同的方式使用,其中增量值是第一个参数。 - 这是一个了解这些函数大部分外观的好网站 https://easings.net/。
- 添加了
e
变量。 - 修复了某个 mixin 导致崩溃的问题。
- EMF 现在支持修改使用原始块实体模型的已修改块实体模型,与原始模型分开。
- (例如,
lootr
模组的箱子现在尝试读取modded/lootr/special_loot_chest.jem
,而不是与chest.jem
冲突)。 - 启用
打印未知模型
设置将在日志中打印这些示例。
- (例如,
- 完全重写了动画变量和函数的创建,这应该减少内存使用,并允许其他模组添加自己的变量和函数。
- 重新措辞了一些翻译。
[EMF] Entity Model Features 1.3
on 2024 Dec 01- 添加了
EMFAnimationApi
,它允许其他模组向 EMF 注册自己的自定义动画变量和函数。- 可以通过
FloatSupplier
为简单数字变量向EMFAnimationApi
添加变量。- 通过
BooleanSupplier
为简单布尔变量添加变量。 - 如果你的变量需要更复杂的逻辑,例如读取复杂的变量名或在不同上下文中给出不同的结果,可以通过自定义变量工厂添加变量。
- 通过
- 可以通过以下方式向
EMFAnimationApi
添加函数:- 通过
Function<Float, Float>
为具有 1 个参数的简单函数添加函数。 - 通过
BiFunction<Float, Float, Float>
为具有 2 个参数的简单函数添加函数。 - 通过
TriFunction<Float, Float, Float, Float>
为具有 3 个参数的简单函数添加函数。 - 通过
Function<List<Float>, Float>
为具有可变数量参数的函数添加函数,这些参数通过List<Float>
提供。 - 如果你的函数需要更复杂的逻辑,例如将参数字符串读取为除浮点数之外的值,可以通过自定义函数工厂添加函数。
- 通过
- 可以通过
- 将
未知模型打印
选项更改为模型导出
,并添加了将所有模型信息导出到.jem 文件或日志的选项,不仅仅是未知/修改过的模型。- 模型现在以正确的枢轴、盒子和 UV 导出为
Blockbench
准备好的格式。 - 模型现在导出到
.minecraft/emf/export/
。
- 模型现在以正确的枢轴、盒子和 UV 导出为
- 实现了
is_on_head
、is_in_hand
和is_in_item_frame
,它们之前没有任何作用。 - 修复了一个
"newstate" is null
崩溃。 - 添加了
Animation LOD 距离
设置,允许你设置 EMF 开始跳过动画帧以节省性能的距离。 - 添加了
在低 fps 时保留 LOD
设置,当游戏运行在 60 fps 以下时,该设置将成比例地减少上述 LOD 设置的影响,因为在较低的 fps 下跳过的帧可能会更明显。 - 重新设计了配置屏幕,在适当的地方使用滑块。
- 将
wolf_armor
添加到 OptiFine 名称映射中。 - 无效的纹理覆盖将不再导致模型无法加载,而是记录错误并使用原版纹理。
- EMF 日志消息现在以更短的
[EMF]
为前缀。 - 暂时禁用带有三叉戟的纹理覆盖,因为它们有问题且难以排查。
- 添加了调试渲染选项
纹理上的线框
,它同时渲染模型的线框和纹理。 - 添加了调试渲染选项
纹理上闪烁的线框
,它同时渲染模型的线框和纹理,但线框会淡入淡出。 - EMF 现在可以正确读取 OptiFine 设置的各种相对路径的所有纹理覆盖,例如
./
、~/
等。 - 添加了一个配置设置(默认启用),允许 EMF 修改
增强块实体 (EBE)
模组的配置,以禁用为加载了自定义 EMF 模型的块实体启用该设置。 - 修复了纹理覆盖与特征渲染器配合时出现的奇怪行为(修复了 Ewan 的带有村民的实体健康条 cem 模型)。
- 将
left_ear
和right_ear
添加到head_piglin.jem
中,这似乎是正确的,但在 OptiFine 的文档中缺失了:/ - 减少并重新措辞了一些会让用户担心的加载日志垃圾信息(例如,Fresh Animations 1.9 现在在加载时不会发送任何日志错误)。
- 添加了仅用于 EMF 的弧度和度的旋转逻辑函数
wrapdeg() wraprad() degdiff() raddiff()
。wrap
函数将旋转值向下包装到其最小的相同值,例如wrapdeg(370)
将返回10
,wrapdeg(350)
将返回-10
。diff
函数将返回两个旋转值之间的结果差异,并考虑旋转,例如degdiff(10, 350)
将返回-20
,degdiff(10, 370)
将返回0
。
- 添加了许多仅用于 EMF 的插值动画函数。
catmullrom() quadbezier() cubicbezier() hermite() easeinoutexpo() easeinexpo() easeoutexpo() easeinoutcirc() easeincirc() easeoutcirc() easeinoutelastic() easeinelastic() easeoutelastic() easeinoutback() easeinback() easeoutback() easeinoutbounce() easeinbounce() easeoutbounce() easeinquad() easeoutquad() easeinoutquad() easeincubic() easeoutcubic() easeinoutcubic() easeinquart() easeoutquart() easeinoutquart() easeinquint() easeoutquint() easeinoutquint() easeinsine() easeoutsine() easeinoutsine()
。- hermite 和 catmullrom 有 5 个参数,bezier 有 4 个参数,其余的有 3 个参数,并且都以与
lerp()
相同的方式使用,其中增量值是第一个参数。 - 这是一个了解这些函数外观的好网站:https://easings.net/。
- 添加了
e
变量。 - 修复了某个混入导致的崩溃。
- EMF 现在支持修改使用原版块实体模型的修改过的块实体模型,与原版模型分开。
- (例如,
lootr
模组的箱子现在尝试读取modded/lootr/special_loot_chest.jem
,而不是与chest.jem
冲突)。 - 启用
打印未知模型
设置将在日志中打印这些示例。
- (例如,
- 完全重写了动画变量和函数的创建,这应该减少内存使用,并允许其他模组添加自己的变量和函数。
- 重新措辞了一些翻译。
[EMF] Entity Model Features 1.2.3
on 2024 Dec 011.2.3
- 添加了以下动画插值方法
easein
、easeout
、easeinout
、cubiceasein
、cubiceaseout
、cubiceaseinout
。它们的功能与lerp
相同,但提供了不同的插值行为 - 模型.jem 文件中的
shadow_size
现在应该适用 - 更健壮的狼项圈.jem 实现
- 修复了一个崩溃
layer is null
- 修复了由于完全不相关的 forge 模组缺少其依赖项而导致的
cannot inherit from final class
崩溃。 - 将新蝙蝠模型的
feet
部分添加到 optifine 名称映射中(如果 optifine 也不这样做,可能会还原) - 修复了一个问题,该问题阻止了
mob2.jem
在没有mob.jem
的情况下正确加载(修复了重新构想的船只纹理) - 自定义动画变量现在应该可以在不同部分之间正确寻址(OptiFine 对等)
- 允许 emf 动画多次声明相同的变量,以便在同一帧内多次更新它(OptiFine 对等)
- emf 更新为使用 etf 5.2
[EMF] Entity Model Features 1.2.3
on 2024 Dec 011.2.3
- 添加了以下动画插值方法
easein
、easeout
、easeinout
、cubiceasein
、cubiceaseout
、cubiceaseinout
。它们的功能与lerp
相同,但提供了不同的插值行为 - 模型.jem 文件中的
shadow_size
现在应该适用 - 更健壮的 wolf_collar.jem 实现
- 修复了一个崩溃
layer is null
- 修复了由完全不相关的 forge 模组缺失其依赖项导致的
cannot inherit from final class
崩溃。 - 将新蝙蝠模型的
feet
部分添加到 optifine 名称映射中(如果 optifine 也不这样做,可能会还原) - 修复了一个问题,该问题阻止了
mob2.jem
在没有mob.jem
的情况下正确加载(修复了 reimagined 的船纹理) - 自定义动画变量现在应该可以在不同部分之间正确寻址(OptiFine 对等)
- 允许 emf 动画多次声明相同的变量,以在同一帧内多次更新它(OptiFine 对等)
- emf 更新为使用 etf 5.2
[EMF] Entity Model Features 1.2.3
on 2024 Dec 011.2.3
- 添加了以下动画插值方法
easein
、easeout
、easeinout
、cubiceasein
、cubiceaseout
、cubiceaseinout
。它们的功能与lerp
相同,但提供了不同的插值行为 - 模型.jem 文件中的
shadow_size
现在应该适用 - 更健壮的 wolf_collar.jem 实现
- 修复了一个崩溃
layer is null
- 修复了由于完全不相关的 forge 模组缺少其依赖项而导致的
cannot inherit from final class
崩溃。 - 将新蝙蝠模型的
feet
部分添加到 optifine 名称映射中(如果 optifine 也不这样做,可能会回滚) - 修复了一个问题,该问题阻止了
mob2.jem
在没有mob.jem
的情况下正确加载(修复了重新想象的船只纹理) - 自定义动画变量现在应该在不同部分之间正确可寻址(OptiFine 对等)
- 允许 emf 动画多次声明相同的变量,以便在同一帧内多次更新它(OptiFine 对等)
- emf 更新为使用 etf 5.2
[EMF] Entity Model Features 1.2.1
on 2024 Dec 01现在与 ETF 5.1+ 一起工作并需要它,包括相同的稳定性修复
in()
动画方法现在允许 2 个或更多参数,而不是之前的 3 个或更多(OptiFine 兼容性)
[EMF] Entity Model Features 1.2.1
on 2024 Dec 01- 现在可与并需要 ETF 5.1+ 一起使用,包括相同的稳定性修复
in()
动画方法现在允许 2 个或更多参数,而不是之前的 3 个或更多 (OptiFine 同等功能)
[EMF] Entity Model Features 1.2.1
on 2024 Dec 01- 现在可与 ETF 5.1+ 配合使用并需要它,包括相同的稳定性修复
in()
动画方法现在允许 2 个或更多参数,而不是之前的 3 个或更多 (OptiFine 兼容性)
[EMF] Entity Model Features 1.2
on 2024 Dec 01-
添加了仅 EMF 的随机属性,以使模型变体在通常不需要 ETF 属性的情况下更易于处理。 例如,在 ETF 中不需要属性来检查猫变体,因为您已经直接使用了黑猫纹理。 属性名称为
variant
或variants
。 该属性允许使用正则表达式、模式或简单的变体名称列表。 如果属性以"print:"
开头,它将在游戏日志中打印为实体找到的变体,并像往常一样使用属性文本的其余部分。 此属性将适用于任何实现了VariantHolder<T>
类的修改实体,并将使用类型的字符串表示形式,例如猫的“black”,船的“oak”。 此属性还与以下块实体独特地配合使用: 标志(木材)、床(颜色)、鞘翅箱(颜色)、装饰罐(所有 4 种碎片面类型)。 对于所有其他常规和块实体,它将返回EntityType
或BlockEntityType
注册表 ID。这允许分离可能使用相同模型名称的不同实体类型,例如各种修改实体所做的那样。 -
添加了 NeoForge 1.20.2 支持,所有先前版本都不会有单独的 forge 和 neoforge jars。
-
修复了布尔反相方法
-
修复了大多数(如果不是全部)模型变体问题
-
更好的纹理覆盖代码
-
覆盖中的自发光纹理现在可以正确工作
-
为 ETF 重写进行了返工
-
在 EMF 设置中添加了模型变体率设置
-
修复了配置 GUI 屏幕变黑且不显示 mob 的问题
-
添加了一个调试打印设置,当右键单击实体时,它将在聊天和日志中打印调试信息
-
EMF 现在可以接受没有.properties 文件的模型变体,您甚至不需要声明“default”模型, 您只需创建 villager2.jem,变体 #1 将自动成为香草模型。
-
修复了持有实体(如玩家持有箱子)的问题,该问题会干扰为该实体渲染的其他模型,例如 Elytra
-
修复了其他几个小问题
-
还修复了纹理覆盖也影响村民服装层的问题
-
纹理覆盖现在使用基础模型的渲染层工厂*(修复了基础模型有纹理覆盖时的村民服装层和其他一些问题)*
-
确保纹理覆盖不会在实体多次重用模型时再次应用*(例如,村民服装重用基础村民模型)*
-
修复了 sodium 0.5.4 兼容性
[EMF] Entity Model Features 1.2
on 2024 Dec 01-
添加了仅 EMF 的随机属性,以使模型变体在通常不需要 ETF 属性的情况下更易于处理。 例如,在 ETF 中不需要属性来检查猫变体,因为您已经直接使用黑猫纹理。 属性名称为
variant
或variants
。 该属性允许使用正则表达式、模式或简单的变体名称列表。 如果属性以"print:"
开头,它将在游戏日志中打印为实体找到的变体,并将属性文本的其余部分用作常规内容。 此属性将适用于任何实现了 VariantHolder<T>类的修改实体,并将使用类型的字符串表示形式,例如“黑色”表示猫,“橡木”表示船。 此属性还与以下块实体独特地配合使用: 标志(木材)、床(颜色)、箱子(颜色)、装饰罐(所有 4 种碎片面类型)。 对于所有其他常规和块实体,它将返回 EntityType 或 BlockEntityType 注册表 ID。这允许分离可能使用相同模型名称的不同实体类型,例如各种修改实体所做的那样。 -
添加了 NeoForge 1.20.2 支持,所有先前版本都不会有单独的 forge 和 neoforge jar。
-
修复了布尔反转方法
-
修复了大多数(如果不是全部)模型变体问题
-
更好的纹理覆盖代码
-
覆盖中的自发光纹理现在可以正确工作
-
为 ETF 重写进行了返工
-
在 EMF 设置中添加了模型变体率设置
-
修复了配置 GUI 屏幕变黑且不显示怪物的问题
-
添加了一个调试打印设置,当实体被右键单击时,它将在聊天和日志中打印调试信息
-
EMF 现在可以接受没有.properties 文件的模型变体,您甚至不需要声明“默认”模型, 您可以只创建 villager2.jem,变体 #1 将自动成为香草模型。
-
修复了持有实体(如持有箱子的玩家)的问题,该问题会干扰该实体要渲染的其他模型,例如 Elytra
-
修复了其他几个小问题
-
修复了纹理覆盖也影响村民服装层的问题
-
纹理覆盖现在使用基础模型的渲染层工厂*(修复了基础模型有纹理覆盖时的村民服装层和其他一些问题)*
-
确保纹理覆盖不会在实体多次重用模型时再次应用*(例如,村民服装重用基础村民模型)*
-
修复了与 sodium 0.5.4 的兼容性
[EMF] Entity Model Features 1.1.0
on 2024 Dec 011.1.0
- 修复了使用错误值的
rule_index
变量 - 修复了
random()
方法在未使用参数时的中断问题 - 修复了带有模型 ID 的模组实体导致的
Non [a-z0-9/._-] character in path
崩溃问题,这些模型 ID 不会创建有效的标识符/资源位置 - 修复了只有在存在
wolf_collar.jem
时狼项圈模型才与基础模型分离的问题*(在原版中,狼与项圈渲染器共享它们的基础模型)* - 修复了
!
布尔值反转未应用于varb
变量布尔值的问题 - 添加了
keyframe()
和keyframeloop()
动画方法,以简化关键帧格式动画,格式为keyframe(k, a, b, c,...)
,其中k
是关键帧的线性进度(通常是一个计时器),所有其他值是各个关键帧的值。实际上,k = 0 将输出关键帧a
的值,k = 1 将输出关键帧b
的值,k = 1.5 将在b
和c
之间给出线性输出。实际上,k
是播放通过关键帧的计时器,每个关键帧值为整数,a
为 0。keyframeloop()
将从最后一帧回绕到帧a
,依此类推,随着k
超过最后一帧。而keyframe()
对于较高的k
值将仅显示最后一帧。即使k
为负数,也将将其视为正数。 - 修复了
print()
和printb()
方法仅在x
值逻辑上解析为常量时才打印一次的问题 - 现在需要
ETF 4.6.1
或更高版本 - 添加了
nan
变量,在运行时解析为Float.NaN
,主要用于调试目的,使用它应该会使任何数学函数/方程给出其失败结果。
[EMF] Entity Model Features 1.1.0
on 2024 Dec 011.1.0
- 使用错误值修复了
rule_index
变量 - 修复了在未使用参数时
random()
方法中断的问题 - 修复了带有模型 ID 的模组实体导致的路径中出现非
[a-z0-9/._-]
字符的崩溃问题,这些模型 ID 不会创建有效的标识符/资源位置 - 修复了仅在存在
wolf_collar.jem
时狼项圈模型才与基础模型分离的问题*(在原版中,狼与项圈渲染器共享其基础模型)* - 修复了
!
布尔值反转未应用于varb
变量布尔值的问题 - 添加了
keyframe()
和keyframeloop()
动画方法,以简化关键帧格式的动画,格式为keyframe(k, a, b, c,...)
,其中k
是关键帧的线性进度(通常是计时器),所有其他值是各个关键帧的值。实际上,k=0
将输出关键帧a
的值,k=1
将输出关键帧b
的值,k=1.5
将在b
和c
之间给出线性输出。实际上,k
是通过关键帧播放的计时器,每个关键帧值为整数,a
为 0。keyframeloop()
将从最后一帧回绕到帧a
,依此类推,随着k
超过最后一帧。而keyframe()
对于较高的k
值将仅显示最后一帧。即使k
为负数,也将将其视为正数。 - 修复了
print()
和printb()
方法仅在x
值逻辑上解析为常量时打印一次的问题 - 现在需要
ETF 4.6.1
或更高版本 - 添加了
nan
变量,在运行时解析为Float.NaN
,主要用于调试目的,使用它应使任何数学函数/方程给出其失败结果。
[EMF] Entity Model Features 1.0.2
on 2024 Dec 01- 修复了块实体代码中的一个错误,该错误导致了不必要的延迟
[EMF] Entity Model Features 1.0.1
on 2024 Dec 01修复了资源重载在 1.19.2 和 1.19.3 上破坏自定义模型的问题
[EMF] Entity Model Features 1.0
on 2024 Dec 01是时候了,EMF 已经走了很长的路,在 9.5 个月的时间里,现在似乎与 OptiFine CEM 非常接近,因为它实际上不是 OptiFine,总会有一些小问题或差异,请继续在发现时报告这些问题。
然而,总体而言,EMF 似乎已经准备就绪。
一些需要注意的事情:EMF 1.0 实际上与最后一个测试版 0.2.13 和旧的私人 alpha 是不同的模组,几乎整个模型创建代码都不同,并且几乎所有使用旧测试版报告的问题在未来都将不相关。(特别是如果是关于损坏的模型)
话虽如此,如果问题是我预期在开发过程中会被动解决的问题,我已经忽略了许多 GitHub 问题,在接下来的几个月里,我将仔细检查这些问题,以剔除任何现在不相关的问题。
(与上一个测试版的更改)
- 模型创建已完全重写,OptiFine CEM 在 EMF 中似乎处于平等地位,并且似乎对几乎每个模型都完全有效
- 动画代码和模型变体检查的大规模返工、重新实现和内部化。防止所有动画不同步的情况,并为所有修改/替换的实体/模型和块实体修复动画。
- 各种模型变体的稳定性修复,包括纹理支持。
- 块实体完全支持
- 物理模组兼容性现在可以选择尝试渲染原版模型部分或自定义 EMF 模型部分
- 不应再导致“未找到部分”崩溃或模型故障
- 减少了模型加载错误的日志消息长度
- 修复了 emf/和 mobName/mobName 目录问题
- 动画现在支持模型部分名称层次结构,就像 OptiFine 一样。即
left_arm:hand:finger1
可以将left_arm
模型组中的finger1
部分与right_arm
部分分开 - 在“防止模型覆盖”设置中添加了警告,提示用户如果导致崩溃则禁用设置,或警告用户其他模组正在修改模型
- 为所有以前缺失的实体添加了 OptiFine 名称格式支持,包括嗅探器和骆驼以及块实体
- 在动画中添加了对渲染变量的支持
e.g. render.shadow_size
- 将动画模型变量支持扩展到块实体,似乎与 OptiFine 的输出匹配。
- 块实体动画支持变量“var.???”
- 为自定义部分添加了各种渲染模式,
NORMAL, GREEN FLASHING, WIREFRAME, OFF
,不会影响原版部分。 - 我可能忘记了很多其他的。
- 删除了现在不必要的配置设置
- 现在仅在设置更改时才触发资源重新加载离开配置屏幕
- 在配置屏幕中添加了随机实体显示
- 各种小的优化和代码清理
- 由于之前的测试版没有 OptiFine 对等性而导致的无数修复