📅  最后修改于: 2023-12-03 15:40:42.506000             🧑  作者: Mango
在游戏开发中,通常需要在游戏中创建怪物或其他可交互的实体。这就需要使用 Spawn Mob 功能。不过,有时候我们不需要怪物有 AI,即只需要它们存在而不进行任何行动。下面是一些实现这一需求的方法。
在创建实体的过程中,可以通过设置 AI 属性为 null 来取消默认的 AI 行为。以下是一个简单示例:
Entity zombie = new EntityZombie(world);
zombie.goalSelector = new GoalSelector(); //取消默认 Goal Selector
zombie.targetSelector = new TargetSelector(); //取消默认 Target Selector
zombie.goalSelector.addGoal(0, new RandomWalkingGoal(zombie, 1.0)); //手动添加行走行为
zombie.ai = null; //设置 AI 为 null
zombie.setCustomName(new TextComponent("No AI Zombie")); //给实体起个名字
world.spawnEntity(zombie);
这段代码会创建一个没有 AI 行为的 Zombie 实体,并命名为“No AI Zombie”。
在创建实体时,也可以添加自定义的 NBT 数据。通过添加 NoAI
属性并设置为 1
,可以禁用默认的 AI 行为。以下是示例代码:
CompoundNBT nbt = new CompoundNBT();
nbt.putBoolean("NoAI", true);
Entity zombie = EntityType.ZOMBIE.create(world);
zombie.readAdditional(nbt);
world.spawnEntity(zombie);
这段代码会创建一个没有 AI 行为的 Zombie 实体。请注意,这种方式创建的实体不能手动添加行为。
如果需要控制实体的行为,可以手动添加自定义的 NBT 数据。以下是一个简单示例:
CompoundNBT nbt = new CompoundNBT();
nbt.putBoolean("NoAI", true);
nbt.putBoolean("CanMove", true);
nbt.putBoolean("CanAttack", false);
Entity zombie = EntityType.ZOMBIE.create(world);
zombie.readAdditional(nbt);
zombie.goalSelector.addGoal(0, new RandomWalkingGoal(zombie, 1.0));
zombie.goalSelector.addGoal(1, new MeleeAttackGoal(zombie, 1.0, false));
zombie.goalSelector.addGoal(2, new LookAtGoal(zombie, PlayerEntity.class, 8.0F));
zombie.goalSelector.addGoal(3, new LookRandomlyGoal(zombie));
world.spawnEntity(zombie);
这段代码会创建一个可以移动但不能攻击的 Zombie 实体,并将目标设置为最近的玩家。
以上三种方法都可以用于创建没有 AI 行为的实体。根据需要选择其中一种方法即可。