【翻译】McJty教程之1.9Tile entity(计时操作)
三三的小狐狸
2018年02月08日 14:10
收录于文集
共20篇

想要看代码高亮的可以去原文地址或者我的微信公众号(

)查看。

原文链接:https://wiki.mcjty.eu/modding/index.php?title=TileEntity_Blinking_Light-1.9


在这个tile entity的例子中,我们将演示如何使用tile entity做一些运算并在此基础上做一些事情。这个tile entity的运算相当简单。

在每一个tick,我们将计算在方块周围的一个20x20x20的立方体内有多少实体。然后我们让方块依据实体数量闪烁。所以如果你的方块边上有超级多的兔子的话,它会闪的非常快。需要注意的是每一个tick做一次并不是很有效率。所以我们每10个tick数一次(每秒2次)。由于方块只需要在客户端闪烁所以我们只在客户端进行计算。这意味着这个tile entity没有数据需要保存(不从NBT读取),服务端也没有数据。如果你想要制作有效率的mod而不是在服务器端或者客户端造成滞后的话,这件事是你必须要考虑的。

首先是方块。我们使用一个虚拟的方块状态属性(通过getActualState()方法)。它并不以metadata表示。这个属性是为了把我们方块的“闪烁”状态表达为json状态(这样方块可以转换材质)。需要注意的是这个方块是半透明的,所以我们需要重写getBlockLayer()和isOpaqueCube()这两个方法。

我们还要定义我们的tile entity。由于这个tile entity需要“tick”(也就是每一秒调用20次),我们必须实现ITickable接口:

最后是我们的blockstate的json(blockstates/blinkingblock.json):

还有我们的模型(models/block/blinkingblock.json):