附加包很好玩,可以看出一些功能的实现很有创意,不过我发现了一个稍微有点大的问题和一些很小的bug——其实都不是很大啦,如下:
1.在给方块使用minecraft:material_instances组件时,会指定渲染方法(也就是render_method字段),这个渲染方法在一个minecraft:material_instances组件里必须是一样的,就是说,不能出现一个minecraft:material_instances组件中既有opaque又有blend的情况。既然这里使用了blend,说明有渲染半透明材料的需求,所以要把opaque换成blend;
2.在/行为包根目录/blocks/cobble.json这个定义了一个方块的文件中,有一条命令“setblock ~~-1~ cobblestone 0 keep”无法解析,因为这是旧版语法。附加包中命令的语法是根据清单文件中min_engine_version的值决定的,因此这里应该是新版语法,去掉“0 ”变成“setblock ~~-1~ cobblestone keep”;
3.按照设定,储液罐是可以合并为任意形状的大储液罐的,如果把水泵用“球——单”输液管连接到一个大储液罐的底部,那么连接的这部分储液罐方块满了之后,就不会继续向上输送液体了。我不确定这是不是bug,如果这是一个固有设定,本条无效。
以上是三个小bug,下面是我的一些建议:
1.关于水泵,我认为它可能存在一个比较严重的设计问题,因为它抽取液体时,那些液体被转化成了固体方块,虽然这样可能会更容易实现这个功能,但现实里的水泵可不会这样。这也有点影响其他原版特性了,比如在下界遇到熔岩海,可以用几个水泵轻松走过去而不受伤害,这样炽足兽就几乎没有它存在的意义了。我的建议是要么重做这个系统,要么修改被锁定液体的属性,让它尽可能与原来的液体一致,比如修改成没有判定箱的方块,这样玩家就不能用这个快速跨越熔岩海了(然而还是可以钻空子);修改成半透明渲染并引用原版纹理,这样看起来更真实;玩家位于被锁定的熔岩中时对其施加伤害,这样几乎杜绝了快速跨越熔岩海的问题;
2.之前有个愚人节快照叫“One Block At a Time”,这其实是MC设计玩法时需要遵循的原则之一,即——玩家不能同时修改多个方块,所以原版MC永远不会出现可以大范围破坏方块的工具。当然,设计附加包可以不遵循这个原则,不过为了平衡,还是需要从其他方面把破坏方块的成本找回来。每个方块都有它的硬度,这个属性和挖掘情况(如在水下的影响、急迫状态效果的影响等)影响着挖掘时间,而现在,它需要通过另一个方面体现出来,不过这确实很难,也相当不好处理;
3.传送带会传输除玩家以外的所有实体,也就是说,即使往传送带上射箭、投掷三叉戟,箭和三叉戟也会被传输。有时候,它还会改变末影珍珠、雪球、风弹等投掷物的运动轨迹。可能有些玩家就会制作基于这个特性的机器,这是一方面的影响。另外一方面,有些附加包添加的实体是功能性的,比如现在的“更多箱子”附加包,大多数是在箱子方块处生成一个实体。如果把这种箱子放在传送带上,那么这个容器实体也会被传送,可能会导致一些意外情况。对此,一个解决办法是使用“family=!inanimate”选择器反选所有不属于inanimate族的实体。正规制作的附加包一般会给功能性实体添加这个族,所以不会出现上述意外;但同时,原版的箭、三叉戟等等也有这个族,它们也不能被传输了;
4.水平传送带的美中不足之处是它不会把实体传送到这个方块之外,它不像原版的水流会把生物完全推出自身,这就需要一个“向下的传送带”。我的附加包中的向下的传送带(叫“下滑槽”)的作用是给附近的实体缓降效果,这样它们被运输下来时不会受到伤害,我认为这是下滑槽的真正意义。如果水平传送带像原版水流一样运作,那么这个向下的传送带就只有“缓降”这一个意义了。然而实际上,现在的这个附加包里,水平传送带的运作方式还是不同于水流,而在我测试时,向下的传送带总是会卡住一些生物。我的解决方法是既然利用重力,那就完全利用它,不要用teleport(tp)命令了。说直白一点,就是注册一个方块状态控制它是否有碰撞箱,生物走上它时将它传送到方块中心,关掉碰撞箱,给个缓降,然后它自然会下落,方块在一段时间后恢复碰撞箱。如果水平传送带其实可以像水流一样把生物推下方块,那么本条无效;
5.向上的传送带会直接把实体传送到方块内部,这样生物可能会窒息。短程没什么问题,但是很长的向上传送带会让生物窒息,所以让这个方块不再窒息生物会是好的决定;
6.这一条非常主观,因此可以忽略。水平传送带的摆放逻辑,在我第一次放下时,是不符合我的预期的。摆放之后,它会把实体传送到我这里来,而不是把实体从我这里传送走;它传输的方向总是面向我,让我觉得奇怪。不过这有很大的主观色彩,大部分玩家适应几次就习惯了;
7.这一条也很主观,因此可以忽略。单向输液管的摆放逻辑也有些奇怪。细心的玩家可以发现,楼梯这种方块的朝向根据玩家的朝向决定,而原木类方块的朝向根据放置的方块面决定。在方块特征(Block Traits)中,前者是minecraft:placement_direction,后者是minecraft:placement_position。我认为管道的逻辑应该是minecraft:placement_position,即根据方块面放置管道,因为我更喜欢水平看着管道连接,而不是沿着管道那条线摆放;
8.从这条开始,就是代码(数据)层面的东西了,它并不直接影响游戏。首先,我注意到有些方块用1.16.100格式版本,有些则是1.20.0。后来我发现这个附加包是有前身的,那1.16.100的方块应该是前身的内容,所以我建议把它们全部提升到1.20.0的格式版本。不过不提升也没关系,只是我看着有点难受;
9.那些文件的缩进——有点乱……好吧,实际上是非常乱。有些缩进还在空格中混杂着制表符,也许其他人看不到,但我这里连续多个空格会显示为点,制表符会显示为水平的线,所以看得很清楚。可以看出旧版的写法被手动替换成了新版的,比如minecraft:destroy_time,还有menu_category,它们前面都是制表符,而其他地方则是空格。缩进大小也不固定,有时候4格,有时候2格,还有3格、1格的,总之不太美观。事件系统有独特的结构,让我感觉像标准的JSON却不是,大概只有熟悉之后才能看懂;
10.对于方块和物品的命名,可以看出是“自己能看懂”的原则。旧版方块,比如磁铁,ID是“citie”,直接用了拼音;而有些ID则有共同点。单向输液管是sendtank,球形输液管是globaltank,水泵是takeintank,总之离不开一个词——tank。这个词本义是“贮存液体的箱、罐、槽”,后来嘛……你猜它为什么读着像“坦克”?因为后来它有了坦克的意思,历史教材上说坦克因为形似水柜(tank)而得名;
以上是十条建议,下面是那个稍微有点大的bug:
他们已经废弃了物品事件,也就是说现在minecraft:on_use、minecraft:on_use_on之类的触发器组件都消失了,不能用了。不过仍然可以通过回退格式版本来使用它们,但唯独minecraft:on_use_on不行,他们好像在1.21.10.20完全移除了minecraft:on_use_on,不能再通过任何方式使用这个组件了。这个组件显然在这个附加包中占据相当重要的地位,简直是激光钻头这种物品的“命根子”,这一点开发者肯定很清楚。如果要在高版本实现这个功能,那就要用脚本自定义新的组件,然后用minecraft:custom_components这个组件引用这些新组件。更何况物品的minecraft:custom_components还可能有致命漏洞,导致它无法使用……说简单点,就是如果坚持不用脚本(SAPI)而且不删减内容的话,这个附加包支持的版本最多到1.21.0,支持的版本范围就是1.20.0到1.21.0,不能写“1.20+”了。这是个大问题,他们向来维护后向兼容,现在却完全移除minecraft:on_use_on,导致所有用到这个组件的旧版附加包全都不能用了。总之,影响很大,但我希望我判断错了,或者他们重新在旧版本加回来这个组件。
TLDR(太长不看):
三个bug:1.render_method不能混用;2.命令语法要用对;3.满载储液罐不向上输液体。
十条建议:1.水泵锁定液体的设计不好;2.适当遵循一次一方块原则;3.传送带传输哪些实体需斟酌;4.水平传送带工作原理可改进;5.向上传送带可改成不窒息生物;6.水平传送带摆放方向可调整;7.单向输液管的方向依据可调整;8.格式版本混杂且有些太低;9.数据缩进很乱;10.给方块设置ID需要慎重。
一个问题:他们在1.21.10.20彻底移除了minecraft:on_use_on物品组件,因此如果不用脚本不删功能,附加包支持的版本应该是1.20.0到1.21.0。
最后,(叠甲 ~_~)这些建议仅供参考,我在这里写的不一定正确,可能会有错字、错拼和语法问题,也许逻辑不清楚,请多多包涵。
|