made turtle movement clean

This commit is contained in:
2025-10-03 18:47:11 +02:00
parent eabbb312b9
commit abcb23d96a
2 changed files with 9 additions and 9 deletions

View File

@@ -9,7 +9,7 @@ import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.EntityCreature; import net.minestom.server.entity.EntityCreature;
import net.minestom.server.entity.Player; import net.minestom.server.entity.Player;
import net.minestom.server.entity.attribute.Attribute; import net.minestom.server.entity.attribute.Attribute;
import net.minestom.server.event.player.PlayerMoveEvent; import net.minestom.server.event.player.PlayerTickEvent;
import net.minestom.server.item.ItemStack; import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material; import net.minestom.server.item.Material;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -22,22 +22,22 @@ class TurtleGame extends StatelessGame {
private final Map<Player, TurtleGameInstance> gameInstances = new WeakHashMap<>(); private final Map<Player, TurtleGameInstance> gameInstances = new WeakHashMap<>();
public TurtleGame(boolean firstPerson) { public TurtleGame(boolean firstPerson) {
super(Dimension.OVERWORLD.key, "Tetris", new PointsWinScore()); super(Dimension.OVERWORLD.key, "Turtle Game", new PointsWinScore());
this.firstPerson = firstPerson; this.firstPerson = firstPerson;
this.eventNode() this.eventNode()
.addListener(PlayerMoveEvent.class, this::onPlayerMove); .addListener(PlayerTickEvent.class, this::onPlayerTick);
} }
protected void onPlayerMove(@NotNull PlayerMoveEvent event) { protected void onPlayerTick(@NotNull PlayerTickEvent event) {
TurtleGameInstance gameInstance = this.gameInstances.get(event.getPlayer()); TurtleGameInstance gameInstance = this.gameInstances.get(event.getPlayer());
gameInstance.getTurtle().setView(event.getPlayer().getPosition().yaw(), gameInstance.getTurtle().getPosition().pitch()); gameInstance.getTurtle().teleport(gameInstance.getTurtle().getPosition().withView(event.getPlayer().getPosition()));
if(this.isRunning()) gameInstance.moveTurtle(event.getPlayer().getPosition().direction()); if(this.isRunning()) gameInstance.moveTurtle(event.getPlayer().getPosition().direction());
} }
@Override @Override
protected boolean onPlayerJoin(Player p) { protected boolean onPlayerJoin(Player p) {
p.getInventory().setItemStack(0, ItemStack.builder(Material.BARRIER).customName(Component.text("Reset")).build()); p.getInventory().setItemStack(0, ItemStack.builder(Material.BARRIER).customName(Component.text("Reset Snack")).build());
if(this.gameInstances.get(p) == null) { if(this.gameInstances.get(p) == null) {
this.gameInstances.put(p, new TurtleGameInstance( this.gameInstances.put(p, new TurtleGameInstance(

View File

@@ -15,6 +15,7 @@ public class TurtleGameInstance {
private final StatelessGame instance; private final StatelessGame instance;
private final Pos startPosition; private final Pos startPosition;
private final EntityCreature turtle = new EntityCreature(EntityType.TURTLE); private final EntityCreature turtle = new EntityCreature(EntityType.TURTLE);
private double speed = 2;
public TurtleGameInstance(StatelessGame instance, Pos startPosition) { public TurtleGameInstance(StatelessGame instance, Pos startPosition) {
this.instance = instance; this.instance = instance;
@@ -22,9 +23,8 @@ public class TurtleGameInstance {
} }
public void moveTurtle(Vec direction) { public void moveTurtle(Vec direction) {
Vec targetDirection = direction.withY(0).normalize().mul(100); Vec targetDirection = direction.withY(0).normalize().mul(speed);
Pos targetPosition = this.turtle.getPosition().add(targetDirection); this.turtle.setVelocity(targetDirection);
this.turtle.getNavigator().setPathTo(targetPosition);
} }
public void generate() { public void generate() {