From 01646546a308328dd544e70436b8c70abba0fe88 Mon Sep 17 00:00:00 2001 From: jannis Date: Sun, 26 Jul 2026 22:03:11 +0200 Subject: [PATCH] fixen issues with playerrace and changed the item selection in pillars --- .../game/stateless/types/pillars/Pillars.java | 46 +++++++++++++++++-- .../types/playerRace/PlayerRace.java | 24 ++++++---- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/pillars/Pillars.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/pillars/Pillars.java index 7c3e68d..53d6ef6 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/pillars/Pillars.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/pillars/Pillars.java @@ -19,7 +19,9 @@ import net.minestom.server.item.Material; import net.minestom.server.timer.TaskSchedule; import org.jetbrains.annotations.NotNull; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.ThreadLocalRandom; class Pillars extends StatelessGame { @@ -27,6 +29,43 @@ class Pillars extends StatelessGame { private int spawnPosz = 0; private final int pillarSpacing = 10; private final int pillarRowCount = 5; + private final int timeToNextItem = 5; + + private static final Set IGNORED_SUFFIXES = Set.of( + "_SWORD", "_PICKAXE", "_AXE", "_SHOVEL", "_HOE", + "_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS", + "_BOAT", "_MINECART", "_BUCKET", "_SPAWN_EGG", + "_BANNER", "_CANDLE", "_PRESSURE_PLATE", "_TEMPLATE", + "_BUTTON", "_HARNESS" + ); + + private static final Set IGNORED_EXACT = Set.of( + Material.BOW, Material.CROSSBOW, Material.TRIDENT, Material.MACE, Material.SHIELD, + Material.SHEARS, Material.FLINT_AND_STEEL, Material.FISHING_ROD, Material.SADDLE, + Material.TURTLE_HELMET, Material.ELYTRA, + Material.LADDER, Material.VINE, Material.SCAFFOLDING, Material.TWISTING_VINES, Material.WEEPING_VINES, + Material.BAMBOO_RAFT, + Material.TNT, Material.SPAWNER, Material.END_PORTAL_FRAME, + Material.COMMAND_BLOCK, Material.CHAIN_COMMAND_BLOCK, Material.REPEATING_COMMAND_BLOCK, + Material.STRUCTURE_BLOCK, Material.STRUCTURE_VOID, Material.JIGSAW, + Material.BARRIER, Material.LIGHT, Material.DEBUG_STICK, Material.KNOWLEDGE_BOOK, + Material.BEDROCK, Material.AIR + ); + + private static final Set IGNORED_MATERIALS = new HashSet<>(); + + static { + for (Material material : Material.values()) { + String id = material.key().asString(); + + for (String suffix : IGNORED_SUFFIXES) { + if (id.endsWith(suffix.toLowerCase())) { + IGNORED_MATERIALS.add(material); + break; + } + } + } + } public Pillars() { super(Dimension.THE_END.key, "Pillars", new LastWinsScore()); @@ -90,14 +129,15 @@ class Pillars extends StatelessGame { MinecraftServer.getSchedulerManager().submitTask(() -> { List materials = Material.values().stream() - .filter(material -> !material.equals(Material.AIR)) + .filter(material -> !IGNORED_EXACT.contains(material)) + .filter(material -> !IGNORED_MATERIALS.contains(material)) .toList(); this.getPlayers().forEach(player -> { - ItemStack item = ItemStack.of(materials.get(ThreadLocalRandom.current().nextInt(Material.values().toArray().length))); + ItemStack item = ItemStack.of(materials.get(ThreadLocalRandom.current().nextInt(materials.size()))); player.getInventory().addItemStack(item); }); - return TaskSchedule.seconds(5); + return TaskSchedule.seconds(this.timeToNextItem); }); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/playerRace/PlayerRace.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/playerRace/PlayerRace.java index aaab347..5f6545a 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/playerRace/PlayerRace.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/playerRace/PlayerRace.java @@ -2,7 +2,7 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.playerRace; import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; -import eu.mhsl.minenet.minigames.score.LastWinsScore; +import eu.mhsl.minenet.minigames.score.FirstWinsScore; import eu.mhsl.minenet.minigames.util.BatchUtil; import eu.mhsl.minenet.minigames.util.CommonProperties; import net.minestom.server.coordinate.Pos; @@ -13,16 +13,18 @@ import net.minestom.server.instance.batch.AbsoluteBlockBatch; import net.minestom.server.instance.block.Block; import org.jetbrains.annotations.NotNull; +import java.util.Map; +import java.util.WeakHashMap; import java.util.concurrent.CompletableFuture; public class PlayerRace extends StatelessGame { private final int height = 64; - private double zLine = 32; - private double zSpawnPoint = 14.5; + private final Map zLine = new WeakHashMap<>(); + private final Map zSpawnPoint = new WeakHashMap<>(); private final int obstacleCount; public PlayerRace(int obstacleCount) { - super(Dimension.THE_END.key, "PlayerRace", new LastWinsScore()); + super(Dimension.THE_END.key, "PlayerRace", new FirstWinsScore()); this.setGenerator(new PlayerRaceChunkgenerator(this.height, obstacleCount)); this.obstacleCount = obstacleCount; } @@ -30,6 +32,8 @@ public class PlayerRace extends StatelessGame { @Override protected boolean onPlayerJoin(Player p) { p.setGameMode(GameMode.ADVENTURE); + this.zLine.put(p, 32.0); + this.zSpawnPoint.put(p, 14.5); return false; } @@ -54,19 +58,19 @@ public class PlayerRace extends StatelessGame { return new Pos(8, this.height + 1.5, 8); } - public Pos getNewSpawn() { - return new Pos(8, this.height + 1.5, this.zSpawnPoint); + public Pos getNewSpawn(Player player) { + return new Pos(8, this.height + 1.5, this.zSpawnPoint.get(player)); } @Override protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { var player = playerMoveEvent.getPlayer(); if(playerMoveEvent.getNewPosition().y() < this.height - 5) - player.teleport(this.isBeforeBeginning ? this.getSpawn() : this.getNewSpawn()); + player.teleport(this.isBeforeBeginning ? this.getSpawn() : this.getNewSpawn(player)); - if(playerMoveEvent.getNewPosition().z() >= this.zLine && this.isRunning) { - this.zLine += 19; - this.zSpawnPoint += 19; + if(playerMoveEvent.getNewPosition().z() >= this.zLine.get(player) && this.isRunning) { + this.zLine.merge(player, 19.0, Double::sum); + this.zSpawnPoint.merge(player, 19.0, Double::sum); } if(playerMoveEvent.getNewPosition().z() >= 16 + this.obstacleCount * 19 && this.isRunning) {