为了便于管理,首先创建一个Event包,在包内写我们的时间,FabricAPi事件系统有很多类型,这是第一种,攻击事件。
首先我们需要实现他的接口,像这样
public class AttackHandler implements AttackEntityCallback { @Override public ActionResult interact( PlayerEntity playerEntity, // 攻击的玩家 World world, // 当前世界 Hand hand, // 使用的(主手/副手) Entity entity, // 被攻击的实体 @Nullable EntityHitResult entityHitResult // 攻击命中结果(可为空) ) { return null; } }
这样就可以在内部去写我们的代码了。
像以往的一样,我们需要跳过客户端事件
if (world.isClient) { return ActionResult.PASS; // 客户端直接跳过 }
就像这样,接下来就可以去写我们的事件了
ItemStack stack = playerEntity.getStackInHand(hand); if (stack.getItem() == Items.DIAMOND_SWORD) { // 移除实体(服务端生效) entity.remove(Entity.RemovalReason.KILLED); world.sendEntityStatus(entity, (byte) 60); // 触发爆炸粒子 return ActionResult.SUCCESS; // 阻止原版攻击逻辑 } return ActionResult.PASS; // 其他情况放行
就达成了,当我们使用钻石剑的时候可以秒杀所有生物了。 最后去我们的mod主类注册这个事件系统。
AttackEntityCallback.EVENT.register(new AttackHandler());
最后我们总结一下我们的操作