diff --git a/src/main/java/net/minestom/server/entity/ai/EntityAI.java b/src/main/java/net/minestom/server/entity/ai/EntityAI.java index 914e34bb0..545a1dc89 100644 --- a/src/main/java/net/minestom/server/entity/ai/EntityAI.java +++ b/src/main/java/net/minestom/server/entity/ai/EntityAI.java @@ -50,7 +50,7 @@ public interface EntityAI { * @return a builder to create and add an {@link EntityAIGroup}. */ default EntityAIGroupBuilder newAIGroupBuilder() { - return new EntityAIGroupBuilder(this); + return new EntityAIGroupBuilder(); } default void aiTick(long time) { diff --git a/src/main/java/net/minestom/server/entity/ai/EntityAIGroupBuilder.java b/src/main/java/net/minestom/server/entity/ai/EntityAIGroupBuilder.java index 7bc492704..f41c7b6e7 100644 --- a/src/main/java/net/minestom/server/entity/ai/EntityAIGroupBuilder.java +++ b/src/main/java/net/minestom/server/entity/ai/EntityAIGroupBuilder.java @@ -1,17 +1,8 @@ package net.minestom.server.entity.ai; -import java.util.ArrayList; -import java.util.List; - public class EntityAIGroupBuilder { - private final EntityAI ai; - private final List goalSelectors = new ArrayList<>(); - private final List targetSelectors = new ArrayList<>(); - - EntityAIGroupBuilder(EntityAI ai) { - this.ai = ai; - } + private final EntityAIGroup group = new EntityAIGroup(); /** * Adds {@link GoalSelector} to the list of goal selectors of the building {@link EntityAIGroup}. @@ -21,7 +12,7 @@ public class EntityAIGroupBuilder { * @return this builder. */ public EntityAIGroupBuilder addGoalSelector(GoalSelector goalSelector) { - this.goalSelectors.add(goalSelector); + this.group.getGoalSelectors().add(goalSelector); return this; } @@ -33,15 +24,17 @@ public class EntityAIGroupBuilder { * @return this builder. */ public EntityAIGroupBuilder addTargetSelector(TargetSelector targetSelector) { - this.targetSelectors.add(targetSelector); + this.group.getTargetSelectors().add(targetSelector); return this; } /** - * Creates new {@link EntityAIGroup} and adds it to the owning {@link EntityAI} of this builder. + * Creates new {@link EntityAIGroup}. + * + * @return new {@link EntityAIGroup}. */ - public void build() { - this.ai.addAIGroup(this.goalSelectors, this.targetSelectors); + public EntityAIGroup build() { + return this.group; } } diff --git a/src/test/java/demo/entity/ChickenCreature.java b/src/test/java/demo/entity/ChickenCreature.java index 12a15c9c9..46433a423 100644 --- a/src/test/java/demo/entity/ChickenCreature.java +++ b/src/test/java/demo/entity/ChickenCreature.java @@ -33,13 +33,15 @@ public class ChickenCreature extends EntityChicken { ); // Another way to register previously added EntityAIGroup, using specialized builder: -// newAIGroupBuilder() -// .addGoalSelector(new DoNothingGoal(this, 500, .1F)) -// .addGoalSelector(new MeleeAttackGoal(this, 500, 2, TimeUnit.MILLISECOND)) -// .addGoalSelector(new RandomStrollGoal(this, 2)) -// .addTargetSelector(new LastEntityDamagerTarget(this, 15)) -// .addTargetSelector(new ClosestEntityTarget(this, 15, LivingEntity.class)) -// .build(); +// addAIGroup( +// newAIGroupBuilder() +// .addGoalSelector(new DoNothingGoal(this, 500, .1F)) +// .addGoalSelector(new MeleeAttackGoal(this, 500, 2, TimeUnit.MILLISECOND)) +// .addGoalSelector(new RandomStrollGoal(this, 2)) +// .addTargetSelector(new LastEntityDamagerTarget(this, 15)) +// .addTargetSelector(new ClosestEntityTarget(this, 15, LivingEntity.class)) +// .build() +// ); getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.1f); diff --git a/src/test/java/demo/entity/ZombieCreature.java b/src/test/java/demo/entity/ZombieCreature.java index 1b7ff500f..1511f8174 100644 --- a/src/test/java/demo/entity/ZombieCreature.java +++ b/src/test/java/demo/entity/ZombieCreature.java @@ -1,18 +1,17 @@ package demo.entity; -import com.google.common.collect.ImmutableList; import net.minestom.server.entity.ai.goal.RandomLookAroundGoal; import net.minestom.server.entity.type.monster.EntityZombie; import net.minestom.server.utils.Position; -import java.util.Collections; - public class ZombieCreature extends EntityZombie { public ZombieCreature(Position spawnPosition) { super(spawnPosition); - newAIGroupBuilder() - .addGoalSelector(new RandomLookAroundGoal(this, 20)) - .build(); + addAIGroup( + newAIGroupBuilder() + .addGoalSelector(new RandomLookAroundGoal(this, 20)) + .build() + ); } }