From bc3f5f58a45f7476168c0e2d6ed3e389315584a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Wed, 15 Oct 2025 19:28:48 +0200 Subject: [PATCH] prevent diamond block as building block in SpaceSnake --- .../types/spaceSnake/SpaceSnake.java | 16 ++-------------- .../minenet/minigames/util/MaterialUtil.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 14 deletions(-) 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 904d147..5f8af96 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 @@ -3,6 +3,7 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.spaceSnake; import eu.mhsl.minenet.minigames.instance.Dimension; import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; import eu.mhsl.minenet.minigames.score.PointsWinScore; +import eu.mhsl.minenet.minigames.util.MaterialUtil; import io.github.togar2.pvp.events.FinalAttackEvent; import io.github.togar2.pvp.events.PrepareAttackEvent; import io.github.togar2.pvp.feature.CombatFeatures; @@ -16,7 +17,6 @@ import net.minestom.server.event.player.PlayerBlockPlaceEvent; import net.minestom.server.event.player.PlayerMoveEvent; import net.minestom.server.instance.WorldBorder; import net.minestom.server.instance.block.Block; -import net.minestom.server.instance.block.BlockFace; import net.minestom.server.inventory.PlayerInventory; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; @@ -85,7 +85,7 @@ public class SpaceSnake extends StatelessGame { PlayState state = new PlayState( new AtomicInteger(3), new ArrayDeque<>(List.of(spawn)), - this.getRandomBlock(), + MaterialUtil.getRandomFullBlock(material -> !material.equals(Material.DIAMOND_BLOCK)), spawn ); this.playerBlocks.put(p, state); @@ -138,18 +138,6 @@ public class SpaceSnake extends StatelessGame { inventory.addItemStack(ItemStack.of(this.playerBlocks.get(player).blockType, 64)); } - private Material getRandomBlock() { - List blocks = Material.values().stream() - .filter(Material::isBlock) - .filter(material -> material.registry().block() != null) - .filter(material -> material.block().isSolid()) - .filter(material -> Arrays.stream(BlockFace.values()) - .allMatch(face -> material.block().registry().collisionShape().isFaceFull(face)) - ) - .toList(); - return blocks.get(this.rnd.nextInt(blocks.size())); - } - private void spawnPowerUp() { Pos spawnPos = new Pos(this.posInBoundsW.get(), this.posInBoundsH.get(), this.posInBoundsW.get()); Entity display = new Entity(EntityType.BLOCK_DISPLAY); diff --git a/src/main/java/eu/mhsl/minenet/minigames/util/MaterialUtil.java b/src/main/java/eu/mhsl/minenet/minigames/util/MaterialUtil.java index 6effaf9..3fbfa90 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/util/MaterialUtil.java +++ b/src/main/java/eu/mhsl/minenet/minigames/util/MaterialUtil.java @@ -1,9 +1,28 @@ package eu.mhsl.minenet.minigames.util; +import net.minestom.server.instance.block.BlockFace; import net.minestom.server.item.Material; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; +import java.util.function.Predicate; + public class MaterialUtil { public static Material fromString(String name, Material def) { return Material.values().stream().filter(material -> material.name().equals(name)).findFirst().orElse(def); } + + public static Material getRandomFullBlock(Predicate filter) { + List blocks = Material.values().stream() + .filter(filter) + .filter(Material::isBlock) + .filter(material -> material.block().isSolid()) + .filter(material -> Arrays.stream(BlockFace.values()) + .allMatch(face -> material.block().registry().collisionShape().isFaceFull(face)) + ) + .toList(); + + return blocks.get(ThreadLocalRandom.current().nextInt(blocks.size())); + } }