Skip to content

Commit 5ed4c2e

Browse files
chore: improve item handling (#78)
* chore(setup): overhaul item handling * chore(game): overhaul item handling * fix(game): update item usage to avoid compile issues --------- Co-authored-by: theEvilReaper <theEvilReaper@users.noreply.github.com>
1 parent 89069f7 commit 5ed4c2e

10 files changed

Lines changed: 56 additions & 86 deletions

File tree

game/src/main/java/net/theevilreaper/tamias/game/Tamias.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ public class Tamias implements ListenerHandling {
8585
private final TeamService teamService;
8686
private final StaminaService staminaService;
8787
private final GameConfig gameConfig;
88-
private final Items items;
8988
private final IntConsumer timeUpdater;
9089
private final Scoreboard scoreboard;
9190
private final MapProvider mapProvider;
@@ -100,7 +99,6 @@ public Tamias() {
10099
this.mapProvider = new GameMapProvider(path);
101100
TeamHelper.loadTeams(this.gameConfig.teamSize(), this.teamService);
102101
this.staminaService = new StaminaService();
103-
this.items = new Items();
104102
this.scoreboard = new LobbyScoreboard(GameMessages.getTitleTime(this.gameConfig.lobbyTime()));
105103
this.timeUpdater = value -> {
106104
Component time = Component.text("Time:", NamedTextColor.GOLD).append(Component.space())
@@ -143,7 +141,6 @@ private void createPhaseStructure() {
143141

144142
gameSeries.add(new PrePlayingPhase(
145143
this.teamService,
146-
this.items::setItemToPlayer,
147144
() -> staminaService.createStaminaObjects(this.teamService)
148145
));
149146

@@ -182,7 +179,7 @@ private void createPhaseStructure() {
182179

183180
Supplier<Pos> randomPos = () -> Pos.ZERO;//gameMapProvider.getGameArea()::getRandomPosition;
184181
listenerMap.put(PlayerUseItemEvent.class, new PlayerInteractItemListener(staminaService::getStaminaBar));
185-
listenerMap.put(BomberRequireSpawnEvent.class, new BomberReviveListener(this.staminaService::getStaminaBar, randomPos, items::setBombItem));
182+
listenerMap.put(BomberRequireSpawnEvent.class, new BomberReviveListener(this.staminaService::getStaminaBar, randomPos));
186183
listenerMap.put(BomberExplodeEvent.class, new BomberExplodeListener());
187184
listenerMap.put(ProjectileCollideWithBlockEvent.class, new ProjectileBlockListener());
188185
PlayerConsumer teamUpdater = player -> TeamHelper.switchToTNTTeam(this.teamService.getTeams()::get, player);

game/src/main/java/net/theevilreaper/tamias/game/commands/TestCommand.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,12 @@ public class TestCommand extends Command {
2424

2525
private final ArgumentWord argumentWord;
2626

27-
private final Items items;
2827

2928
private StaminaBar staminaBar;
3029

3130
public TestCommand() {
3231
super("test", "t");
3332
this.argumentWord = ArgumentType.Word("test").from("A", "B");
34-
this.items = new Items();
3533
addSyntax(this::onCommand, argumentWord);
3634
MinecraftServer.getGlobalEventHandler().addListener(PlayerUseItemEvent.class, new PlayerInteractItemListener(unused -> this.staminaBar));
3735
}
@@ -41,11 +39,11 @@ private void onCommand(@NotNull CommandSender sender, @NotNull CommandContext co
4139
var argument = context.get(argumentWord);
4240

4341
if ("A".equals(argument)) {
44-
this.items.setBombItem(player);
42+
Items.setBombItem(player);
4543
player.sendMessage("Test A");
4644
this.staminaBar = StaminaFactory.createExplodeBar(player);
4745
} else {
48-
this.items.setShootItem(player);
46+
Items.setShootItem(player);
4947
player.sendMessage("Test B");
5048
this.staminaBar = StaminaFactory.createShootBar(player);
5149
}

game/src/main/java/net/theevilreaper/tamias/game/listener/game/BomberReviveListener.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package net.theevilreaper.tamias.game.listener.game;
22

3-
import net.theevilreaper.aves.util.functional.PlayerConsumer;
43
import net.kyori.adventure.sound.Sound;
54
import net.minestom.server.coordinate.Pos;
65
import net.minestom.server.entity.Player;
@@ -14,6 +13,7 @@
1413
import net.theevilreaper.tamias.game.event.BomberRequireSpawnEvent;
1514
import net.theevilreaper.tamias.game.stamina.ExplodeBar;
1615
import net.theevilreaper.tamias.game.stamina.StaminaBar;
16+
import net.theevilreaper.tamias.game.util.Items;
1717
import org.jetbrains.annotations.NotNull;
1818

1919
import java.util.ArrayList;
@@ -29,16 +29,13 @@ public final class BomberReviveListener implements Consumer<BomberRequireSpawnEv
2929

3030
private final Function<Player, StaminaBar> barGetter;
3131
private final Supplier<Pos> spawnPos;
32-
private final PlayerConsumer itemSetter;
3332

3433
public BomberReviveListener(
3534
@NotNull Function<Player, StaminaBar> barGetter,
36-
@NotNull Supplier<Pos> spawnPos,
37-
@NotNull PlayerConsumer itemSetter
35+
@NotNull Supplier<Pos> spawnPos
3836
) {
3937
this.barGetter = barGetter;
4038
this.spawnPos = spawnPos;
41-
this.itemSetter = itemSetter;
4239
}
4340

4441
@Override
@@ -72,6 +69,6 @@ public void accept(@NotNull BomberRequireSpawnEvent event) {
7269
player.teleport(newSpawnPos.add(0.5, 1, 0.5));
7370
player.playSound(RESPAWN);
7471
AttributeHelper.enableMovement(player);
75-
this.itemSetter.accept(player);
72+
Items.setBombItem(player);
7673
}
7774
}

game/src/main/java/net/theevilreaper/tamias/game/phase/playing/PrePlayingPhase.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.theevilreaper.tamias.game.phase.playing;
22

33
import net.theevilreaper.aves.util.functional.VoidConsumer;
4+
import net.theevilreaper.tamias.game.util.Items;
45
import net.theevilreaper.xerus.api.phase.TickDirection;
56
import net.theevilreaper.xerus.api.phase.TimedPhase;
67
import net.theevilreaper.xerus.api.team.Team;
@@ -26,25 +27,21 @@
2627
public final class PrePlayingPhase extends TimedPhase {
2728

2829
private final TeamService teamService;
29-
private final BiConsumer<Player, Integer> itemConsumer;
3030
private final VoidConsumer staminaCreation;
3131

3232
/**
3333
* Creates a new instance from the phase
3434
*
3535
* @param teamService the service which provides access to the teams
36-
* @param itemConsumer the consumer which triggers the item set logic
3736
*/
3837
public PrePlayingPhase(
3938
@NotNull TeamService teamService,
40-
@NotNull BiConsumer<Player, Integer> itemConsumer,
4139
@NotNull VoidConsumer staminaCreation
4240
) {
4341
super("Pre-Playing", ChronoUnit.SECONDS, 1);
4442
this.setCurrentTicks(5);
4543
this.setTickDirection(TickDirection.DOWN);
4644
this.teamService = teamService;
47-
this.itemConsumer = itemConsumer;
4845
this.staminaCreation = staminaCreation;
4946
}
5047

@@ -75,7 +72,7 @@ public void onUpdate() {
7572
private void updatePlayer(@NotNull Player player) {
7673
byte id = player.getTag(Tags.TEAM_ID);
7774

78-
this.itemConsumer.accept(player, ((int) id));
75+
Items.setItemToPlayer(player, id);
7976

8077
Team team = this.teamService.getTeams().get(id);
8178

game/src/main/java/net/theevilreaper/tamias/game/util/Items.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,14 @@
1616
@SuppressWarnings("java:S3252")
1717
public final class Items {
1818

19-
private final ItemStack shootItem;
20-
private final ItemStack bombItem;
19+
private static final ItemStack SHOOT_ITEM;
20+
private static final ItemStack BOMB_ITEM;
2121

22-
/**
23-
* Constructs a new instance from this class.
24-
*/
25-
public Items() {
26-
this.shootItem = ItemStack.builder(Material.IRON_HOE)
22+
static {
23+
SHOOT_ITEM = ItemStack.builder(Material.IRON_HOE)
2724
.set(Tags.ITEM_TAG, (byte) 0)
2825
.build();
29-
this.bombItem = ItemStack.builder(Material.TNT)
26+
BOMB_ITEM = ItemStack.builder(Material.TNT)
3027
.set(Tags.ITEM_TAG, (byte) 1).build();
3128
}
3229

@@ -35,26 +32,36 @@ public Items() {
3532
*
3633
* @param player the player to set the item
3734
*/
38-
public void setShootItem(Player player) {
35+
public static void setShootItem(Player player) {
3936
player.getInventory().clear();
40-
player.getInventory().addItemStack(shootItem);
37+
player.getInventory().addItemStack(SHOOT_ITEM);
4138
}
4239

4340
/**
4441
* Sets the bomb item for the given player
4542
*
4643
* @param player the player to set the item
4744
*/
48-
public void setBombItem(Player player) {
45+
public static void setBombItem(Player player) {
4946
player.getInventory().clear();
50-
player.getInventory().addItemStack(this.bombItem);
47+
player.getInventory().addItemStack(BOMB_ITEM);
5148
}
5249

53-
public void setItemToPlayer(Player player, int teamId) {
50+
/**
51+
* Sets the item to the player based on the team id.
52+
*
53+
* @param player who should get the item
54+
* @param teamId the team id
55+
*/
56+
public static void setItemToPlayer(Player player, int teamId) {
5457
if (teamId == GameConfig.SURVIVOR_ID) {
5558
setShootItem(player);
5659
} else {
57-
setBombItem(player);
60+
setBombItem(player);
5861
}
5962
}
63+
64+
private Items() {
65+
throw new UnsupportedOperationException("Utility class");
66+
}
6067
}

game/src/test/java/net/theevilreaper/tamias/game/util/ItemsTest.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import net.minestom.testing.extension.MicrotusExtension;
99
import net.theevilreaper.tamias.common.util.Tags;
1010
import org.jetbrains.annotations.NotNull;
11-
import org.junit.jupiter.api.AfterAll;
12-
import org.junit.jupiter.api.BeforeAll;
1311
import org.junit.jupiter.api.Test;
1412
import org.junit.jupiter.api.extension.ExtendWith;
1513

@@ -18,25 +16,13 @@
1816
@ExtendWith(MicrotusExtension.class)
1917
class ItemsTest {
2018

21-
private static Items items;
22-
23-
@BeforeAll
24-
static void setUp() {
25-
items = new Items();
26-
}
27-
28-
@AfterAll
29-
static void tearDown() {
30-
items = null;
31-
}
32-
3319
@Test
3420
void testShootItemSet(@NotNull Env env) {
3521
Instance instance = env.createFlatInstance();
3622
Player player = env.createPlayer(instance);
3723
assertNotNull(player);
3824

39-
items.setShootItem(player);
25+
Items.setShootItem(player);
4026
ItemStack eye = player.getInventory().getItemStack(0x00);
4127
assertNotNull(eye);
4228
assertNotEquals(Material.AIR, eye.material());
@@ -52,7 +38,7 @@ void testBombItemSet(@NotNull Env env) {
5238
Player player = env.createPlayer(instance);
5339
assertNotNull(player);
5440

55-
items.setBombItem(player);
41+
Items.setBombItem(player);
5642
ItemStack bomb = player.getInventory().getItemStack(0x00);
5743
assertNotNull(bomb);
5844
assertNotEquals(Material.AIR, bomb.material());

setup/src/main/java/net/theevilreaper/tamias/setup/TamiasSetup.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,12 @@ public final class TamiasSetup implements ListenerHandling {
4646
private final SetupDataService setupDataService;
4747
private final FileHandler fileHandler;
4848
private final MapProvider mapProvider;
49-
private final SetupItems setupItems;
5049
private final MapSetupInventory mapSetupInventory;
5150

5251
public TamiasSetup() {
5352
this.fileHandler = new GsonFileHandler(GsonUtil.GSON);
5453
this.mapProvider = new SetupMapProvider(Paths.get(""), this.fileHandler);
5554
this.setupDataService = SetupDataService.create();
56-
this.setupItems = new SetupItems();
5755
this.mapSetupInventory = new MapSetupInventory(this.mapProvider::getEntries);
5856
MinecraftServer.getSchedulerManager().buildShutdownTask(this::terminate);
5957
}
@@ -74,16 +72,16 @@ private void registerListener() {
7472
SetupMapProvider setupMapProvider = (SetupMapProvider) mapProvider;
7573
PlayerConsumer initialSpawnSupplier = player -> {
7674
setupMapProvider.teleportToSpawn(player, false);
77-
setupItems.setOverViewItem(player);
75+
SetupItems.setOverViewItem(player);
7876
};
7977
PlayerConsumer instanceSwitcher = player -> {
8078
setupMapProvider.teleportToSpawn(player, true);
81-
setupItems.setOverViewItem(player);
79+
SetupItems.setOverViewItem(player);
8280
};
8381
manager.addListener(PlayerDisconnectEvent.class, new PlayerDisconnectListener(setupDataService::remove));
8482
manager.addListener(AsyncPlayerConfigurationEvent.class, new PlayerConfigurationListener(instanceSupplier));
8583
manager.addListener(PlayerSpawnEvent.class, new PlayerSpawnListener(initialSpawnSupplier));
86-
manager.addListener(AddEntityToInstanceEvent.class, new EntityAddToInstanceListener(instanceSupplier, setupItems));
84+
manager.addListener(AddEntityToInstanceEvent.class, new EntityAddToInstanceListener(instanceSupplier));
8785
manager.addListener(MapSetupSelectEvent.class, new MapSetupSelectListener(this.fileHandler, this.setupDataService));
8886
manager.addListener(SetupFinishEvent.class, new SetupFinishListener(instanceSwitcher));
8987
manager.addListener(PlayerChatEvent.class, new PlayerChatListener(this.setupDataService));

setup/src/main/java/net/theevilreaper/tamias/setup/listener/entity/EntityAddToInstanceListener.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,19 @@
1212
public class EntityAddToInstanceListener implements Consumer<AddEntityToInstanceEvent> {
1313

1414
private final Supplier<Instance> instanceSupplier;
15-
private final SetupItems items;
1615

17-
public EntityAddToInstanceListener(@NotNull Supplier<Instance> instanceSupplier, @NotNull SetupItems items) {
16+
public EntityAddToInstanceListener(@NotNull Supplier<Instance> instanceSupplier) {
1817
this.instanceSupplier = instanceSupplier;
19-
this.items = items;
2018
}
2119

2220
@Override
2321
public void accept(@NotNull AddEntityToInstanceEvent event) {
2422
if (!(event.getEntity() instanceof Player player)) return;
2523
Instance mainInstance = this.instanceSupplier.get();
2624
if (event.getInstance().getUuid().equals(mainInstance.getUuid())) {
27-
items.setOverViewItem(player);
25+
SetupItems.setOverViewItem(player);
2826
return;
2927
}
30-
items.setSaveItem(player);
28+
SetupItems.setSaveItem(player);
3129
}
3230
}

setup/src/main/java/net/theevilreaper/tamias/setup/util/SetupItems.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import net.theevilreaper.tamias.common.util.Tags;
1010

1111
/**
12-
* The class holds all item reference which are required in the setup process of a map.
12+
* The class holds all item references that are required in the setup process of a map.
1313
* Each item uses a {@link Tag<Byte>} to identify which functionality the item has.
1414
* This behaviour is easier to use because it doesn't require additional references in the event class to check the item.
1515
*
@@ -26,20 +26,20 @@ public final class SetupItems {
2626
.customName(Component.empty())
2727
.build();
2828

29-
private final ItemStack overview;
30-
private final ItemStack save;
31-
private final ItemStack viewItem;
29+
private static final ItemStack OVERVIEW;
30+
private static final ItemStack SAVE;
31+
private static final ItemStack VIEW_ITEM;
3232

33-
public SetupItems() {
34-
this.overview = ItemStack.builder(Material.CHEST)
33+
static {
34+
OVERVIEW = ItemStack.builder(Material.CHEST)
3535
.customName(Component.text("Maps", NamedTextColor.GREEN))
3636
.set(Tags.ITEM_TAG, (byte) 0x00)
3737
.build();
38-
this.save = ItemStack.builder(Material.BELL)
38+
SAVE = ItemStack.builder(Material.BELL)
3939
.customName(Component.text("Save map", NamedTextColor.RED))
4040
.set(Tags.ITEM_TAG, (byte) 0x01)
4141
.build();
42-
this.viewItem = ItemStack.builder(Material.COMPASS)
42+
VIEW_ITEM = ItemStack.builder(Material.COMPASS)
4343
.customName(Component.text("View data", NamedTextColor.AQUA))
4444
.set(Tags.ITEM_TAG, OVERVIEW_FLAG)
4545
.build();
@@ -50,9 +50,9 @@ public SetupItems() {
5050
*
5151
* @param player the player to set the item
5252
*/
53-
public void setOverViewItem(Player player) {
53+
public static void setOverViewItem(Player player) {
5454
player.getInventory().clear();
55-
player.getInventory().setItemStack(0x00, this.overview);
55+
player.getInventory().setItemStack(0x00, OVERVIEW);
5656
player.setHeldItemSlot((byte) 0);
5757
}
5858

@@ -61,10 +61,14 @@ public void setOverViewItem(Player player) {
6161
*
6262
* @param player the player to set the item
6363
*/
64-
public void setSaveItem(Player player) {
64+
public static void setSaveItem(Player player) {
6565
player.getInventory().clear();
66-
player.getInventory().setItemStack(0x06, this.save);
67-
player.getInventory().setItemStack(0x02, this.viewItem);
66+
player.getInventory().setItemStack(0x06, SAVE);
67+
player.getInventory().setItemStack(0x02, VIEW_ITEM);
6868
player.setHeldItemSlot((byte) 0);
6969
}
70+
71+
private SetupItems() {
72+
73+
}
7074
}

0 commit comments

Comments
 (0)