本篇教程由作者设定未经允许禁止转载。
游戏中事件具有很多,可以在这里查看,但大多为英文,所以我再说明一下。
本教程将说明两个例子。
在这里强烈推荐youyihj大佬写的Zen Utils模组,加入后可以热重载游戏事件。
例1:只有当玩家经验等级大于等于两级时,才能破坏铁矿石。
导包:挖掘方块事件包,事件取消包,IBlock对象,IPlayer对象
import crafttweaker.event.BlockBreakEvent;
import crafttweaker.event.IEventCancelable;
import crafttweaker.block.IBlock;
import crafttweaker.player.IPlayer;
实例代码:(不要双击关键字,不然会按java格式告诉你全报错了)
events.onBlockBreak(function(event as BlockBreakEvent){ //建立方块破坏事件,用event获取
var block as IBlock = event.block; //建立IBlock对象
var player as IPlayer = event.player; //建立IPlayer对象
if(!isNull(block) && block.definition.id == "minecraft:iron_ore"){ //如果方块不为空,并且是铁矿石
if(player.creative){
return; //创造模式无视限制
}
if(player.xp <2){ //经验等级低于2
event.cancel(); //取消事件(只有部分实现了取消事件的接口,要注意查看)
event.player.sendStatusMessage(format.red("你至少需要2级才能破坏铁矿石")); //给予提示
}
}
});
例2:只有当玩家经验等级大于等于30级时,才能攻击BOSS(有血条都算)
导包
import crafttweaker.event.PlayerAttackEntityEvent;
import crafttweaker.event.IEventCancelable;
import crafttweaker.entity.IEntity;
import crafttweaker.player.IPlayer;
实现代码:(IPlayer类继承IEntity类)
events.onPlayerAttackEntity(function(event as PlayerAttackEntityEvent){
var entity as IEntity = event.target; //建立IEntity对象,这里指的是攻击目标
var player as IPlayer = event.player; //建立IPlayer对象,这里指的是攻击玩家
if(!isNull(entity) && player.creative){
return ; //创造模式忽略
}
if(!isNull(entity) && entity.dimension!=7 && entity.isBoss){ //判断是否为boss[注1]
if(player.xp <30){ //判断玩家经验是否小于30
event.cancel(); //取消事件
event.player.sendStatusMessage(format.red("你至少需要30级才能攻击"+entity.definition.name)); //给予提示
}
}
});
注1:为什么要排除dim=7的所有boss?
这里只是个例子,如果一个boss由多个实体组成(例如:娜迦,九头蛇),当玩家等级不足要求时,如果攻击非能直接造成伤害部位(例如:头部),将会 ERROR:java.lang.NullPointerException。
对于这种情况,可以使用print进行分析,得知这些boss对应的部位实体对象的definition为null值,所以把上述代码第7排改成如下这样:
if(!isNull(entity.definition) && entity.isBoss)
这样就可以选中暮色森林的boss了。