事件概论
Yep,你真的以为魔改仅仅只是个改合成的东西吗?它也可以参与mod制作!上文的一堆Getter,可能你会觉得一点用都没有,但在这里将会大量用到。
什么是事件?某个时间点上发生一件值得关注的事。你可以使用 CrT 在一件事发生时,额外执行别的行为。
在匿名函数内部可以编写你想要的行为,这个函数内部的代码将在玩家合成时才会执行,而不像一般配方修改的脚本那样在游戏加载时执行。
比如这样,在玩家合成时,在日志打印信息。
具体游戏逻辑
不对啊,只是在日志打印个消息有啥用。我们需要在游戏有一个具体行为才行啊。我们便需要利用这个匿名函数的 event 参数,当这个事件发生时,这个函数执行时会传入这个参数,这个参数包含了这个事件发生的背景。简单来说,可以利用 event 参数的 ZenGetter 获取各种游戏对象,比如玩家、坐标、世界、方块等等,通过操作这些游戏对象,你就可以在合理的时机做你想要的新的游戏逻辑,限制你的只有想象力而已。
例如下面的例子,每次玩家合成时受到 1 点伤害。
取消事件
有的时候你希望一些原版行为不会发生,你可以使用 cancel
方法取消事件来阻止原版行为。
下面的例子为阻止苦力怕的生成。
后记
本教程不可能列出所有可用的事件,以及所有游戏对象和可供使用的操作。你依旧需要官方 wiki 作为「工具书」来查找。
常用游戏对象:
IPlayer :指定玩家,包含玩家的各种信息。IPlayer继承 IEntityLivingBase 类
IEntityLivingBase:指定一个Mob 继承 IEntity 类
IEntity :指定一个实体
IWorld:包含世界中的一个维度的信息,包含天气效果、方块信息、服务端客户端等信息。可以用来在世界中召唤一个实体
IBlockPos :指定世界中一个坐标,常用这个获取或更改一个IWorld的指定坐标的IBlockState
ICommandSender :指令发送者,如果想用 zs 发送指令需要用这个,但也要注意权限,推荐用直接用
server
关键词,表示服务器发送指令IBlock :方块
IBlockState :方块状态,真正在世界里的方块,包含方块定义和当前的状态,比如草方块是否被雪覆盖,炼药锅装了多少水。
最后更新于
这有帮助吗?