// onPlayerCrafted 当玩家合成时
events.onPlayerCrafted(function(event){
// ...
});
// onPlayerCrafted 当玩家合成时
events.onPlayerCrafted(function(event){
print("A player crafted something.");
});
不对啊,只是在日志打印个消息有啥用。我们需要在游戏有一个具体行为才行啊。我们便需要利用这个匿名函数的 event 参数,当这个事件发生时,这个函数执行时会传入这个参数,这个参数包含了这个事件发生的背景。简单来说,可以利用 event 参数的 ZenGetter 获取各种游戏对象,比如玩家、坐标、世界、方块等等,通过操作这些游戏对象,你就可以在合理的时机做你想要的新的游戏逻辑,限制你的只有想象力而已。
import crafttweaker.event.PlayerCraftedEvent; //导入玩家合成事件的类
// onPlayerCrafted 当玩家合成时
// 由于 ZenScript 的限制,在这里你需要给 event 指定对应的事件类,否则你无法获取事件包含的信息
// 这里就是 PlayerCraftedEvent 玩家合成事件,记得在脚本最前面导入该类
events.onPlayerCrafted(function(event as PlayerCraftedEvent) {
// 获取是哪个玩家合成了物品
var player = event.player;
// 让玩家受到 1 点魔法伤害
player.attackEntityFrom(<damageSource:MAGIC>, 1.0f);
});
import crafttweaker.event.EntityJoinWorldEvent; //导入实体进入世界事件
// onPlayerCrafted 当玩家合成时
// 由于 ZenScript 的限制,在这里你必须要给 event 参数指定对应的事件类,否则你无法获取事件包含的信息
// 这里就是 PlayerCraftedEvent 玩家合成事件,记得在脚本最前面导入该类
events.onEntityJoinWorld(function(event as EntityJoinWorldEvent) {
// 获取将被加入的实体的定义
val definition = event.entity.definition;
// 如果该实体为玩家,definition 会返回 null,需要先进行判空
// 然后再判断这个实体的 ID 是否是苦力怕
if (!isNull(definition) && definition.id == "minecraft:creeper") {
// 取消该事件
// 取消实体加入世界的结果自然是阻止实体加入世界
event.cancel();
}
});