3,351
个编辑
MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
(→模型文件的书写: // Edit via Wikiplus) |
(→模型文件的书写: // Edit via Wikiplus) |
||
甚至于和方块没什么关系的普通物品我们也可以写在blockstates文件中,只需要把transform改成forge:default-item,再指定一下textures即可。不过并不推荐这么做,因为普通的物品和方块既然没关系,那么放在blockstates文件中既多此一举,也容易造成歧义。
== 方块的Meta-hack ==
类似于ItemStack,方块也是可以有Meta-hack的——实际上是用同一个Block的不同BlockState及其对应的meta代表设定上不同的多种方块(实际上在代码层面都对应同一个Block对象)。和ItemStack的Meta-hack类似,方块的Meta-hack也是不推荐使用的。
首先我们需要一个区分方块类型的IProperty,一般是用PropertyEnum,用到的枚举类一般作为静态内部类的形式出现在方块类中;再设定该方块的hasSubtypes为true;然后在blockstates文件中,针对这个variant分别指定各自不同的模型文件路径,即可。没错,你没看错,就这么简单。
然而使用Meta-hack的方块对应的物品却不是这么简单——因为ItemBlock类的默认实现很可能不能满足我们的需求,为何?因为ItemBlock的默认逻辑是:若传入的Block的hasSubtypes为true,那么使用ItemBlock对应的某个ItemStack放置该方块时,该ItemStack的meta值和放置的BlockState对应的meta值,是相等的。因此如果你的方块只有这一个区分类型的IProperty,倒还没问题;但如果你同时还有其他几个IProperty呢,比如一个决定朝向的PropertyDirection?那就糟了,该ItemBlock的meta会影响到放置出来的方块的朝向,这显然不是我们所期望的,我们所期望的应当是:由放置该方块的实体的朝向来决定该方块的朝向。因此这个时候你就得覆写<code>Block#getStateForPlacement</code>才行,这个方法会传入对应的ItemStack,由此我们就可以手动指定符合我们自己的需求的BlockState和ItemStack的各自的metadata的正确对应关系。
另外,我们还得覆写<code>Block#getSubBlocks</code>方法,它的用途和之前提到过的getSubItems差不多,实际上ItemBlock类中的getSubItems方法就是代理给了getSubBlocks的。
|