From 4c46bb4ed62e1eca25df5c3220073a39474b42ec Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sat, 2 May 2026 17:10:23 +0200 Subject: [PATCH 1/3] chore(setup): overhaul item handling --- .../tamias/setup/TamiasSetup.java | 8 ++--- .../entity/EntityAddToInstanceListener.java | 8 ++--- .../tamias/setup/util/SetupItems.java | 30 +++++++++++-------- .../tamias/setup/util/SetupItemsTest.java | 16 ++-------- 4 files changed, 25 insertions(+), 37 deletions(-) diff --git a/setup/src/main/java/net/theevilreaper/tamias/setup/TamiasSetup.java b/setup/src/main/java/net/theevilreaper/tamias/setup/TamiasSetup.java index 1793312b..99815882 100644 --- a/setup/src/main/java/net/theevilreaper/tamias/setup/TamiasSetup.java +++ b/setup/src/main/java/net/theevilreaper/tamias/setup/TamiasSetup.java @@ -46,14 +46,12 @@ public final class TamiasSetup implements ListenerHandling { private final SetupDataService setupDataService; private final FileHandler fileHandler; private final MapProvider mapProvider; - private final SetupItems setupItems; private final MapSetupInventory mapSetupInventory; public TamiasSetup() { this.fileHandler = new GsonFileHandler(GsonUtil.GSON); this.mapProvider = new SetupMapProvider(Paths.get(""), this.fileHandler); this.setupDataService = SetupDataService.create(); - this.setupItems = new SetupItems(); this.mapSetupInventory = new MapSetupInventory(this.mapProvider::getEntries); MinecraftServer.getSchedulerManager().buildShutdownTask(this::terminate); } @@ -74,16 +72,16 @@ private void registerListener() { SetupMapProvider setupMapProvider = (SetupMapProvider) mapProvider; PlayerConsumer initialSpawnSupplier = player -> { setupMapProvider.teleportToSpawn(player, false); - setupItems.setOverViewItem(player); + SetupItems.setOverViewItem(player); }; PlayerConsumer instanceSwitcher = player -> { setupMapProvider.teleportToSpawn(player, true); - setupItems.setOverViewItem(player); + SetupItems.setOverViewItem(player); }; manager.addListener(PlayerDisconnectEvent.class, new PlayerDisconnectListener(setupDataService::remove)); manager.addListener(AsyncPlayerConfigurationEvent.class, new PlayerConfigurationListener(instanceSupplier)); manager.addListener(PlayerSpawnEvent.class, new PlayerSpawnListener(initialSpawnSupplier)); - manager.addListener(AddEntityToInstanceEvent.class, new EntityAddToInstanceListener(instanceSupplier, setupItems)); + manager.addListener(AddEntityToInstanceEvent.class, new EntityAddToInstanceListener(instanceSupplier)); manager.addListener(MapSetupSelectEvent.class, new MapSetupSelectListener(this.fileHandler, this.setupDataService)); manager.addListener(SetupFinishEvent.class, new SetupFinishListener(instanceSwitcher)); manager.addListener(PlayerChatEvent.class, new PlayerChatListener(this.setupDataService)); diff --git a/setup/src/main/java/net/theevilreaper/tamias/setup/listener/entity/EntityAddToInstanceListener.java b/setup/src/main/java/net/theevilreaper/tamias/setup/listener/entity/EntityAddToInstanceListener.java index 611f7bc4..c879da1c 100644 --- a/setup/src/main/java/net/theevilreaper/tamias/setup/listener/entity/EntityAddToInstanceListener.java +++ b/setup/src/main/java/net/theevilreaper/tamias/setup/listener/entity/EntityAddToInstanceListener.java @@ -12,11 +12,9 @@ public class EntityAddToInstanceListener implements Consumer { private final Supplier instanceSupplier; - private final SetupItems items; - public EntityAddToInstanceListener(@NotNull Supplier instanceSupplier, @NotNull SetupItems items) { + public EntityAddToInstanceListener(@NotNull Supplier instanceSupplier) { this.instanceSupplier = instanceSupplier; - this.items = items; } @Override @@ -24,9 +22,9 @@ public void accept(@NotNull AddEntityToInstanceEvent event) { if (!(event.getEntity() instanceof Player player)) return; Instance mainInstance = this.instanceSupplier.get(); if (event.getInstance().getUuid().equals(mainInstance.getUuid())) { - items.setOverViewItem(player); + SetupItems.setOverViewItem(player); return; } - items.setSaveItem(player); + SetupItems.setSaveItem(player); } } diff --git a/setup/src/main/java/net/theevilreaper/tamias/setup/util/SetupItems.java b/setup/src/main/java/net/theevilreaper/tamias/setup/util/SetupItems.java index 52be2f8b..1252060f 100644 --- a/setup/src/main/java/net/theevilreaper/tamias/setup/util/SetupItems.java +++ b/setup/src/main/java/net/theevilreaper/tamias/setup/util/SetupItems.java @@ -9,7 +9,7 @@ import net.theevilreaper.tamias.common.util.Tags; /** - * The class holds all item reference which are required in the setup process of a map. + * The class holds all item references that are required in the setup process of a map. * Each item uses a {@link Tag} to identify which functionality the item has. * This behaviour is easier to use because it doesn't require additional references in the event class to check the item. * @@ -26,20 +26,20 @@ public final class SetupItems { .customName(Component.empty()) .build(); - private final ItemStack overview; - private final ItemStack save; - private final ItemStack viewItem; + private static final ItemStack OVERVIEW; + private static final ItemStack SAVE; + private static final ItemStack VIEW_ITEM; - public SetupItems() { - this.overview = ItemStack.builder(Material.CHEST) + static { + OVERVIEW = ItemStack.builder(Material.CHEST) .customName(Component.text("Maps", NamedTextColor.GREEN)) .set(Tags.ITEM_TAG, (byte) 0x00) .build(); - this.save = ItemStack.builder(Material.BELL) + SAVE = ItemStack.builder(Material.BELL) .customName(Component.text("Save map", NamedTextColor.RED)) .set(Tags.ITEM_TAG, (byte) 0x01) .build(); - this.viewItem = ItemStack.builder(Material.COMPASS) + VIEW_ITEM = ItemStack.builder(Material.COMPASS) .customName(Component.text("View data", NamedTextColor.AQUA)) .set(Tags.ITEM_TAG, OVERVIEW_FLAG) .build(); @@ -50,9 +50,9 @@ public SetupItems() { * * @param player the player to set the item */ - public void setOverViewItem(Player player) { + public static void setOverViewItem(Player player) { player.getInventory().clear(); - player.getInventory().setItemStack(0x00, this.overview); + player.getInventory().setItemStack(0x00, OVERVIEW); player.setHeldItemSlot((byte) 0); } @@ -61,10 +61,14 @@ public void setOverViewItem(Player player) { * * @param player the player to set the item */ - public void setSaveItem(Player player) { + public static void setSaveItem(Player player) { player.getInventory().clear(); - player.getInventory().setItemStack(0x06, this.save); - player.getInventory().setItemStack(0x02, this.viewItem); + player.getInventory().setItemStack(0x06, SAVE); + player.getInventory().setItemStack(0x02, VIEW_ITEM); player.setHeldItemSlot((byte) 0); } + + private SetupItems() { + + } } diff --git a/setup/src/test/java/net/theevilreaper/tamias/setup/util/SetupItemsTest.java b/setup/src/test/java/net/theevilreaper/tamias/setup/util/SetupItemsTest.java index ddb96fcf..b0c07833 100644 --- a/setup/src/test/java/net/theevilreaper/tamias/setup/util/SetupItemsTest.java +++ b/setup/src/test/java/net/theevilreaper/tamias/setup/util/SetupItemsTest.java @@ -20,25 +20,13 @@ @ExtendWith(MicrotusExtension.class) class SetupItemsTest { - private static SetupItems setupItems; - - @BeforeAll - static void setUp() { - setupItems = new SetupItems(); - } - - @AfterAll - static void tearDown() { - setupItems = null; - } - @Test void testOverViewItem(@NotNull Env env) { Instance instance = env.createFlatInstance(); Player player = env.createPlayer(instance); assertNotNull(player); - setupItems.setOverViewItem(player); + SetupItems.setOverViewItem(player); ItemStack overViewItem = player.getInventory().getItemStack(0x00); assertNotNull(overViewItem); assertNotEquals(Material.AIR, overViewItem.material()); @@ -56,7 +44,7 @@ void testSaveMapItem(@NotNull Env env) { Player player = env.createPlayer(instance); assertNotNull(player); - setupItems.setSaveItem(player); + SetupItems.setSaveItem(player); ItemStack saveItem = player.getInventory().getItemStack(0x06); assertNotNull(saveItem); assertNotEquals(Material.AIR, saveItem.material()); From 6ba2a2fbfa6f6f4a20d586266011c06f034c046c Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sat, 2 May 2026 17:10:29 +0200 Subject: [PATCH 2/3] chore(game): overhaul item handling --- .../net/theevilreaper/tamias/game/Tamias.java | 5 +-- .../listener/game/BomberReviveListener.java | 9 ++--- .../game/phase/playing/PrePlayingPhase.java | 7 ++-- .../theevilreaper/tamias/game/util/Items.java | 35 +++++++++++-------- .../tamias/game/util/ItemsTest.java | 18 ++-------- 5 files changed, 29 insertions(+), 45 deletions(-) diff --git a/game/src/main/java/net/theevilreaper/tamias/game/Tamias.java b/game/src/main/java/net/theevilreaper/tamias/game/Tamias.java index 464df61a..7c5c1656 100644 --- a/game/src/main/java/net/theevilreaper/tamias/game/Tamias.java +++ b/game/src/main/java/net/theevilreaper/tamias/game/Tamias.java @@ -85,7 +85,6 @@ public class Tamias implements ListenerHandling { private final TeamService teamService; private final StaminaService staminaService; private final GameConfig gameConfig; - private final Items items; private final IntConsumer timeUpdater; private final Scoreboard scoreboard; private final MapProvider mapProvider; @@ -100,7 +99,6 @@ public Tamias() { this.mapProvider = new GameMapProvider(path); TeamHelper.loadTeams(this.gameConfig.teamSize(), this.teamService); this.staminaService = new StaminaService(); - this.items = new Items(); this.scoreboard = new LobbyScoreboard(GameMessages.getTitleTime(this.gameConfig.lobbyTime())); this.timeUpdater = value -> { Component time = Component.text("Time:", NamedTextColor.GOLD).append(Component.space()) @@ -143,7 +141,6 @@ private void createPhaseStructure() { gameSeries.add(new PrePlayingPhase( this.teamService, - this.items::setItemToPlayer, () -> staminaService.createStaminaObjects(this.teamService) )); @@ -182,7 +179,7 @@ private void createPhaseStructure() { Supplier randomPos = () -> Pos.ZERO;//gameMapProvider.getGameArea()::getRandomPosition; listenerMap.put(PlayerUseItemEvent.class, new PlayerInteractItemListener(staminaService::getStaminaBar)); - listenerMap.put(BomberRequireSpawnEvent.class, new BomberReviveListener(this.staminaService::getStaminaBar, randomPos, items::setBombItem)); + listenerMap.put(BomberRequireSpawnEvent.class, new BomberReviveListener(this.staminaService::getStaminaBar, randomPos)); listenerMap.put(BomberExplodeEvent.class, new BomberExplodeListener()); listenerMap.put(ProjectileCollideWithBlockEvent.class, new ProjectileBlockListener()); PlayerConsumer teamUpdater = player -> TeamHelper.switchToTNTTeam(this.teamService.getTeams()::get, player); diff --git a/game/src/main/java/net/theevilreaper/tamias/game/listener/game/BomberReviveListener.java b/game/src/main/java/net/theevilreaper/tamias/game/listener/game/BomberReviveListener.java index 605eb980..940f2519 100644 --- a/game/src/main/java/net/theevilreaper/tamias/game/listener/game/BomberReviveListener.java +++ b/game/src/main/java/net/theevilreaper/tamias/game/listener/game/BomberReviveListener.java @@ -1,6 +1,5 @@ package net.theevilreaper.tamias.game.listener.game; -import net.theevilreaper.aves.util.functional.PlayerConsumer; import net.kyori.adventure.sound.Sound; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.Player; @@ -14,6 +13,7 @@ import net.theevilreaper.tamias.game.event.BomberRequireSpawnEvent; import net.theevilreaper.tamias.game.stamina.ExplodeBar; import net.theevilreaper.tamias.game.stamina.StaminaBar; +import net.theevilreaper.tamias.game.util.Items; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -29,16 +29,13 @@ public final class BomberReviveListener implements Consumer barGetter; private final Supplier spawnPos; - private final PlayerConsumer itemSetter; public BomberReviveListener( @NotNull Function barGetter, - @NotNull Supplier spawnPos, - @NotNull PlayerConsumer itemSetter + @NotNull Supplier spawnPos ) { this.barGetter = barGetter; this.spawnPos = spawnPos; - this.itemSetter = itemSetter; } @Override @@ -72,6 +69,6 @@ public void accept(@NotNull BomberRequireSpawnEvent event) { player.teleport(newSpawnPos.add(0.5, 1, 0.5)); player.playSound(RESPAWN); AttributeHelper.enableMovement(player); - this.itemSetter.accept(player); + Items.setBombItem(player); } } diff --git a/game/src/main/java/net/theevilreaper/tamias/game/phase/playing/PrePlayingPhase.java b/game/src/main/java/net/theevilreaper/tamias/game/phase/playing/PrePlayingPhase.java index e07476db..e09d135c 100644 --- a/game/src/main/java/net/theevilreaper/tamias/game/phase/playing/PrePlayingPhase.java +++ b/game/src/main/java/net/theevilreaper/tamias/game/phase/playing/PrePlayingPhase.java @@ -1,6 +1,7 @@ package net.theevilreaper.tamias.game.phase.playing; import net.theevilreaper.aves.util.functional.VoidConsumer; +import net.theevilreaper.tamias.game.util.Items; import net.theevilreaper.xerus.api.phase.TickDirection; import net.theevilreaper.xerus.api.phase.TimedPhase; import net.theevilreaper.xerus.api.team.Team; @@ -26,25 +27,21 @@ public final class PrePlayingPhase extends TimedPhase { private final TeamService teamService; - private final BiConsumer itemConsumer; private final VoidConsumer staminaCreation; /** * Creates a new instance from the phase * * @param teamService the service which provides access to the teams - * @param itemConsumer the consumer which triggers the item set logic */ public PrePlayingPhase( @NotNull TeamService teamService, - @NotNull BiConsumer itemConsumer, @NotNull VoidConsumer staminaCreation ) { super("Pre-Playing", ChronoUnit.SECONDS, 1); this.setCurrentTicks(5); this.setTickDirection(TickDirection.DOWN); this.teamService = teamService; - this.itemConsumer = itemConsumer; this.staminaCreation = staminaCreation; } @@ -75,7 +72,7 @@ public void onUpdate() { private void updatePlayer(@NotNull Player player) { byte id = player.getTag(Tags.TEAM_ID); - this.itemConsumer.accept(player, ((int) id)); + Items.setItemToPlayer(player, id); Team team = this.teamService.getTeams().get(id); diff --git a/game/src/main/java/net/theevilreaper/tamias/game/util/Items.java b/game/src/main/java/net/theevilreaper/tamias/game/util/Items.java index b497403d..40dba4e1 100644 --- a/game/src/main/java/net/theevilreaper/tamias/game/util/Items.java +++ b/game/src/main/java/net/theevilreaper/tamias/game/util/Items.java @@ -16,17 +16,14 @@ @SuppressWarnings("java:S3252") public final class Items { - private final ItemStack shootItem; - private final ItemStack bombItem; + private static final ItemStack SHOOT_ITEM; + private static final ItemStack BOMB_ITEM; - /** - * Constructs a new instance from this class. - */ - public Items() { - this.shootItem = ItemStack.builder(Material.IRON_HOE) + static { + SHOOT_ITEM = ItemStack.builder(Material.IRON_HOE) .set(Tags.ITEM_TAG, (byte) 0) .build(); - this.bombItem = ItemStack.builder(Material.TNT) + BOMB_ITEM = ItemStack.builder(Material.TNT) .set(Tags.ITEM_TAG, (byte) 1).build(); } @@ -35,9 +32,9 @@ public Items() { * * @param player the player to set the item */ - public void setShootItem(Player player) { + public static void setShootItem(Player player) { player.getInventory().clear(); - player.getInventory().addItemStack(shootItem); + player.getInventory().addItemStack(SHOOT_ITEM); } /** @@ -45,16 +42,26 @@ public void setShootItem(Player player) { * * @param player the player to set the item */ - public void setBombItem(Player player) { + public static void setBombItem(Player player) { player.getInventory().clear(); - player.getInventory().addItemStack(this.bombItem); + player.getInventory().addItemStack(BOMB_ITEM); } - public void setItemToPlayer(Player player, int teamId) { + /** + * Sets the item to the player based on the team id. + * + * @param player who should get the item + * @param teamId the team id + */ + public static void setItemToPlayer(Player player, int teamId) { if (teamId == GameConfig.SURVIVOR_ID) { setShootItem(player); } else { - setBombItem(player); + setBombItem(player); } } + + private Items() { + throw new UnsupportedOperationException("Utility class"); + } } diff --git a/game/src/test/java/net/theevilreaper/tamias/game/util/ItemsTest.java b/game/src/test/java/net/theevilreaper/tamias/game/util/ItemsTest.java index 4421e809..35afb811 100644 --- a/game/src/test/java/net/theevilreaper/tamias/game/util/ItemsTest.java +++ b/game/src/test/java/net/theevilreaper/tamias/game/util/ItemsTest.java @@ -8,8 +8,6 @@ import net.minestom.testing.extension.MicrotusExtension; import net.theevilreaper.tamias.common.util.Tags; import org.jetbrains.annotations.NotNull; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -18,25 +16,13 @@ @ExtendWith(MicrotusExtension.class) class ItemsTest { - private static Items items; - - @BeforeAll - static void setUp() { - items = new Items(); - } - - @AfterAll - static void tearDown() { - items = null; - } - @Test void testShootItemSet(@NotNull Env env) { Instance instance = env.createFlatInstance(); Player player = env.createPlayer(instance); assertNotNull(player); - items.setShootItem(player); + Items.setShootItem(player); ItemStack eye = player.getInventory().getItemStack(0x00); assertNotNull(eye); assertNotEquals(Material.AIR, eye.material()); @@ -52,7 +38,7 @@ void testBombItemSet(@NotNull Env env) { Player player = env.createPlayer(instance); assertNotNull(player); - items.setBombItem(player); + Items.setBombItem(player); ItemStack bomb = player.getInventory().getItemStack(0x00); assertNotNull(bomb); assertNotEquals(Material.AIR, bomb.material()); From 997c66972c012bf7db20fb85bb84013cdb8daa0e Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sat, 2 May 2026 17:14:12 +0200 Subject: [PATCH 3/3] fix(game): update item usage to avoid compile issues --- .../net/theevilreaper/tamias/game/commands/TestCommand.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/game/src/main/java/net/theevilreaper/tamias/game/commands/TestCommand.java b/game/src/main/java/net/theevilreaper/tamias/game/commands/TestCommand.java index 58f71089..f41bbcc7 100644 --- a/game/src/main/java/net/theevilreaper/tamias/game/commands/TestCommand.java +++ b/game/src/main/java/net/theevilreaper/tamias/game/commands/TestCommand.java @@ -24,14 +24,12 @@ public class TestCommand extends Command { private final ArgumentWord argumentWord; - private final Items items; private StaminaBar staminaBar; public TestCommand() { super("test", "t"); this.argumentWord = ArgumentType.Word("test").from("A", "B"); - this.items = new Items(); addSyntax(this::onCommand, argumentWord); MinecraftServer.getGlobalEventHandler().addListener(PlayerUseItemEvent.class, new PlayerInteractItemListener(unused -> this.staminaBar)); } @@ -41,11 +39,11 @@ private void onCommand(@NotNull CommandSender sender, @NotNull CommandContext co var argument = context.get(argumentWord); if ("A".equals(argument)) { - this.items.setBombItem(player); + Items.setBombItem(player); player.sendMessage("Test A"); this.staminaBar = StaminaFactory.createExplodeBar(player); } else { - this.items.setShootItem(player); + Items.setShootItem(player); player.sendMessage("Test B"); this.staminaBar = StaminaFactory.createShootBar(player); }