mirror of https://github.com/Minestom/Minestom.git
75 lines
1.9 KiB
Java
75 lines
1.9 KiB
Java
package net.minestom.server.entity.ai.goal;
|
|
|
|
import net.minestom.server.entity.EntityCreature;
|
|
import net.minestom.server.entity.ai.GoalSelector;
|
|
import net.minestom.server.utils.coordinate.Vec;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
public class RandomStrollGoal extends GoalSelector {
|
|
|
|
private static final long DELAY = 2500;
|
|
|
|
private final int radius;
|
|
private final List<Vec> closePositions;
|
|
|
|
private long lastStroll;
|
|
|
|
public RandomStrollGoal(@NotNull EntityCreature entityCreature, int radius) {
|
|
super(entityCreature);
|
|
this.radius = radius;
|
|
this.closePositions = getNearbyBlocks(radius);
|
|
}
|
|
|
|
@Override
|
|
public boolean shouldStart() {
|
|
return System.currentTimeMillis() - lastStroll >= DELAY;
|
|
}
|
|
|
|
@Override
|
|
public void start() {
|
|
Collections.shuffle(closePositions);
|
|
for (var position : closePositions) {
|
|
final var target = entityCreature.getPosition().add(position);
|
|
final boolean result = entityCreature.getNavigator().setPathTo(target);
|
|
if (result) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void tick(long time) {
|
|
}
|
|
|
|
@Override
|
|
public boolean shouldEnd() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void end() {
|
|
this.lastStroll = System.currentTimeMillis();
|
|
}
|
|
|
|
public int getRadius() {
|
|
return radius;
|
|
}
|
|
|
|
@NotNull
|
|
private List<Vec> getNearbyBlocks(int radius) {
|
|
List<Vec> blocks = new ArrayList<>();
|
|
for (int x = -radius; x <= radius; x++) {
|
|
for (int y = -radius; y <= radius; y++) {
|
|
for (int z = -radius; z <= radius; z++) {
|
|
blocks.add(new Vec(x, y, z));
|
|
}
|
|
}
|
|
}
|
|
return blocks;
|
|
}
|
|
}
|