diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spaceSnake/SpaceSnake.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spaceSnake/SpaceSnake.java index 2589e89..6e2ab4e 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spaceSnake/SpaceSnake.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spaceSnake/SpaceSnake.java @@ -37,7 +37,7 @@ public class SpaceSnake extends StatelessGame { } } - private final Map playerBlocks = new WeakHashMap<>(); + private final Map playerStates = new WeakHashMap<>(); private int mapSize; private final Supplier posInBoundsW = () -> this.rnd.nextInt(-this.mapSize/2, this.mapSize/2); private final Supplier posInBoundsH = () -> this.rnd.nextInt(-60, 300); @@ -79,6 +79,11 @@ public class SpaceSnake extends StatelessGame { }); } + @Override + protected void onStop() { + this.getPlayers().forEach(player -> this.getScore().insertResult(player, this.playerStates.get(player).length.get())); + } + @Override protected boolean onPlayerJoin(Player p) { Pos spawn = new Pos(this.posInBoundsW.get(), -60, this.posInBoundsW.get()); @@ -88,7 +93,7 @@ public class SpaceSnake extends StatelessGame { MaterialUtil.getRandomFullBlock(material -> !material.equals(Material.DIAMOND_BLOCK)), spawn ); - this.playerBlocks.put(p, state); + this.playerStates.put(p, state); this.setBlock(spawn, state.blockType.block()); MinecraftServer.getSchedulerManager().scheduleNextTick( () -> p.teleport(this.getSaveSpawn(spawn)) @@ -98,7 +103,7 @@ public class SpaceSnake extends StatelessGame { @Override protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { - PlayState state = this.playerBlocks.get(playerMoveEvent.getPlayer()); + PlayState state = this.playerStates.get(playerMoveEvent.getPlayer()); if(this.isBeforeBeginning) { boolean falling = state.blocks.stream().anyMatch(pos -> pos.y() > playerMoveEvent.getNewPosition().y()); if(falling) playerMoveEvent.getPlayer().teleport(this.getSaveSpawn(state.spawn)); @@ -109,6 +114,11 @@ public class SpaceSnake extends StatelessGame { this.getScore().insertResult(playerMoveEvent.getPlayer(), state.length.get()); playerMoveEvent.getPlayer().teleport(this.getSpawn()); playerMoveEvent.getPlayer().setGameMode(GameMode.SPECTATOR); + long livingPlayers = this.getPlayers().stream() + .filter(p -> this.getScore().hasResult(p)) + .count(); + if(livingPlayers == 1) this.setTimeLimit(10); + if(livingPlayers == 0) this.stop(); } } @@ -119,7 +129,7 @@ public class SpaceSnake extends StatelessGame { return; } - PlayState state = this.playerBlocks.get(playerBlockPlaceEvent.getPlayer()); + PlayState state = this.playerStates.get(playerBlockPlaceEvent.getPlayer()); state.blocks.add(playerBlockPlaceEvent.getBlockPosition().asVec().asPosition()); state.cutToLength(pos -> this.setBlock(pos, Block.AIR)); @@ -135,7 +145,7 @@ public class SpaceSnake extends StatelessGame { PlayerInventory inventory = player.getInventory(); inventory.clear(); inventory.addItemStack(ItemStack.of(Material.STICK, 1).with(builder -> builder.glowing(true))); - inventory.addItemStack(ItemStack.of(this.playerBlocks.get(player).blockType, 64)); + inventory.addItemStack(ItemStack.of(this.playerStates.get(player).blockType, 64)); } private void spawnPowerUp() { @@ -164,7 +174,7 @@ public class SpaceSnake extends StatelessGame { } private void onPowerup(Player player) { - PlayState state = this.playerBlocks.get(player); + PlayState state = this.playerStates.get(player); state.length.incrementAndGet(); player.setLevel(player.getLevel() + 1); player.playSound(Sound.sound(SoundEvent.ENTITY_EXPERIENCE_ORB_PICKUP, Sound.Source.PLAYER, 1f, 1f));