Skip to content

Commit 39b81c0

Browse files
chore: improve item handling (#68)
* feat(setup): make SetupItems a full utility class * chore(setup): update item handling * chore(setup): add package info file * feat(game): convert ItemUtil class to a utility class * chore(game): update item handling --------- Co-authored-by: theEvilReaper <theEvilReaper@users.noreply.github.com>
1 parent 8cdc0de commit 39b81c0

12 files changed

Lines changed: 52 additions & 73 deletions

File tree

setup/src/main/java/net/theevilreaper/bounce/setup/BounceSetup.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ public final class BounceSetup implements ListenerHandling {
5656
private final MapProvider mapProvider;
5757
private final SetupDataService setupDataService;
5858
private final InventoryService inventoryService;
59-
private final SetupItems setupItems;
6059
private final FileHandler fileHandler;
6160
private final DialogRegistry dialogRegistry;
6261

@@ -66,7 +65,6 @@ public BounceSetup() {
6665
this.mapProvider = new BounceSetupMapProvider(this.fileHandler, path);
6766
this.setupDataService = SetupDataService.create();
6867
this.inventoryService = new InventoryService(this.mapProvider::getEntries);
69-
this.setupItems = new SetupItems();
7068
this.dialogRegistry = new SetupDialogRegistry();
7169
MinecraftServer.getSchedulerManager().buildShutdownTask(this::onShutdown);
7270
}
@@ -89,15 +87,14 @@ private void registerListener(@NotNull EventNode<Event> node) {
8987
node.addListener(AsyncPlayerConfigurationEvent.class, new PlayerConfigurationListener(instanceSupplier));
9088
node.addListener(PlayerUseItemEvent.class, new PlayerItemListener(this.inventoryService::openMapSetupInventory, this.setupDataService::get));
9189
node.addListener(PlayerSpawnEvent.class, new PlayerSpawnListener(
92-
this.setupItems::setOverViewItem,
9390
player -> this.mapProvider.teleportToSpawn(player, false))
9491
);
9592
node.addListener(PlayerDisconnectEvent.class, new PlayerDisconnectListener(this.setupDataService::remove));
9693
node.addListener(MapSetupSelectEvent.class, new MapSetupSelectListener(this.fileHandler, this.setupDataService));
9794

9895
PlayerConsumer instanceSwitcher = player -> {
9996
mapProvider.teleportToSpawn(player, true);
100-
setupItems.setOverViewItem(player);
97+
SetupItems.setOverViewItem(player);
10198
};
10299

103100
node.addListener(SetupFinishEvent.class, new SetupFinishListener(instanceSwitcher));
@@ -109,7 +106,7 @@ private void registerListener(@NotNull EventNode<Event> node) {
109106
node.addListener(PlayerDeletePromptEvent.class, new PlayerDeletePromptListener(dialogRegistry));
110107
node.addListener(PlayerCustomClickEvent.class, new PlayerCustomClickEventListener(this.dialogRegistry, this.setupDataService::get));
111108
node.addListener(PlayerDialogRequestEvent.class, new PlayerDialogRequestListener(this.dialogRegistry));
112-
node.addListener(AddEntityToInstanceEvent.class, new EntityAddToInstanceListener(instanceSupplier, setupItems));
109+
node.addListener(AddEntityToInstanceEvent.class, new EntityAddToInstanceListener(instanceSupplier));
113110

114111
}
115112
}

setup/src/main/java/net/theevilreaper/bounce/setup/listener/PlayerSpawnListener.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,16 @@
88
import net.minestom.server.event.player.PlayerSpawnEvent;
99
import net.theevilreaper.aves.util.functional.PlayerConsumer;
1010
import net.theevilreaper.bounce.common.util.Messages;
11+
import net.theevilreaper.bounce.setup.util.SetupItems;
1112
import org.jetbrains.annotations.NotNull;
1213

1314
import java.util.function.Consumer;
1415

1516
public class PlayerSpawnListener implements Consumer<PlayerSpawnEvent> {
1617

17-
private final PlayerConsumer itemConsumer;
1818
private final PlayerConsumer teleportConsumer;
1919

20-
public PlayerSpawnListener(@NotNull PlayerConsumer itemConsumer, @NotNull PlayerConsumer teleportConsumer) {
21-
this.itemConsumer = itemConsumer;
20+
public PlayerSpawnListener(@NotNull PlayerConsumer teleportConsumer) {
2221
this.teleportConsumer = teleportConsumer;
2322
}
2423

@@ -32,7 +31,7 @@ public void accept(@NotNull PlayerSpawnEvent event) {
3231
.append(Component.text("joined the server", NamedTextColor.GRAY));
3332
Audience.audience(MinecraftServer.getConnectionManager().getOnlinePlayers())
3433
.sendMessage(joinMessage);
35-
this.itemConsumer.accept(player);
34+
SetupItems.setOverViewItem(player);
3635
this.teleportConsumer.accept(player);
3736
}
3837
}

setup/src/main/java/net/theevilreaper/bounce/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.setSetupItems(player);
28+
SetupItems.setSetupItems(player);
3129
}
3230
}

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

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66
import net.minestom.server.item.ItemStack;
77
import net.minestom.server.item.Material;
88
import net.minestom.server.tag.Tag;
9-
import org.jetbrains.annotations.NotNull;
109

1110
/**
12-
* The class holds all item reference which are required in the setup process of a map.
11+
* The class holds all item references that are required in the setup process of a map.
1312
* Each item uses a {@link Tag<Byte>} to identify which functionality the item has.
1413
* This behaviour is easier to use because it doesn't require additional references in the event class to check the item.
1514
*
@@ -26,25 +25,25 @@ public final class SetupItems {
2625
.customName(Component.empty())
2726
.build();
2827

29-
private final ItemStack overview;
30-
private final ItemStack save;
31-
private final ItemStack viewItem;
32-
private final ItemStack groundItem;
28+
private static final ItemStack OVERVIEW;
29+
private static final ItemStack SAVE;
30+
private static final ItemStack VIEW_ITEM;
31+
private static final ItemStack GROUND_ITEM;
3332

34-
public SetupItems() {
35-
this.overview = ItemStack.builder(Material.CHEST)
33+
static {
34+
OVERVIEW = ItemStack.builder(Material.CHEST)
3635
.customName(Component.text("Maps", NamedTextColor.GREEN))
3736
.set(ITEM_TAG, 0x00)
3837
.build();
39-
this.save = ItemStack.builder(Material.BELL)
38+
SAVE = ItemStack.builder(Material.BELL)
4039
.customName(Component.text("Save map", NamedTextColor.RED))
4140
.set(ITEM_TAG, 0x01)
4241
.build();
43-
this.viewItem = ItemStack.builder(Material.COMPASS)
42+
VIEW_ITEM = ItemStack.builder(Material.COMPASS)
4443
.customName(Component.text("View data", NamedTextColor.AQUA))
4544
.set(ITEM_TAG, OVERVIEW_FLAG)
4645
.build();
47-
this.groundItem = ItemStack.builder(Material.CARTOGRAPHY_TABLE)
46+
GROUND_ITEM = ItemStack.builder(Material.CARTOGRAPHY_TABLE)
4847
.customName(Component.text("Ground Layer", NamedTextColor.GREEN))
4948
.set(ITEM_TAG, 0x04)
5049
.build();
@@ -55,9 +54,9 @@ public SetupItems() {
5554
*
5655
* @param player the player to set the item
5756
*/
58-
public void setOverViewItem(@NotNull Player player) {
57+
public static void setOverViewItem(Player player) {
5958
player.getInventory().clear();
60-
player.getInventory().setItemStack(0x00, this.overview);
59+
player.getInventory().setItemStack(0x00, OVERVIEW);
6160
player.setHeldItemSlot((byte) 0);
6261
}
6362

@@ -66,11 +65,15 @@ public void setOverViewItem(@NotNull Player player) {
6665
*
6766
* @param player the player to set the item
6867
*/
69-
public void setSetupItems(@NotNull Player player) {
68+
public static void setSetupItems(Player player) {
7069
player.getInventory().clear();
71-
player.getInventory().setItemStack(0x06, this.save);
72-
player.getInventory().setItemStack(0x04, this.groundItem);
73-
player.getInventory().setItemStack(0x02, this.viewItem);
70+
player.getInventory().setItemStack(0x06, SAVE);
71+
player.getInventory().setItemStack(0x04, GROUND_ITEM);
72+
player.getInventory().setItemStack(0x02, VIEW_ITEM);
7473
player.setHeldItemSlot((byte) 0);
7574
}
75+
76+
private SetupItems() {
77+
// Nothing do to here
78+
}
7679
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@NotNullByDefault
2+
package net.theevilreaper.bounce.setup.util;
3+
4+
import org.jetbrains.annotations.NotNullByDefault;

setup/src/test/java/net/theevilreaper/bounce/setup/item/GroundSetupItemTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import net.onelitefeather.guira.data.SetupData;
1313
import net.theevilreaper.bounce.setup.data.BounceData;
1414
import net.theevilreaper.bounce.setup.listener.PlayerItemListener;
15+
import net.theevilreaper.bounce.setup.util.SetupItems;
1516
import org.jetbrains.annotations.NotNull;
1617
import org.junit.jupiter.api.Test;
1718

@@ -33,7 +34,7 @@ void testGroundItemLogic(@NotNull Env env) {
3334

3435
env.process().eventHandler().addListener(PlayerUseItemEvent.class, playerItemListener);
3536

36-
setupItems.setSetupItems(player);
37+
SetupItems.setSetupItems(player);
3738
player.setTag(SETUP_TAG, 1);
3839
ItemStack stack = player.getInventory().getItemStack(0x04);
3940
assertNotEquals(ItemStack.AIR, stack);

setup/src/test/java/net/theevilreaper/bounce/setup/item/SetupItemTestBase.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import net.theevilreaper.aves.util.functional.PlayerConsumer;
88
import net.theevilreaper.bounce.common.util.GsonUtil;
99
import net.theevilreaper.bounce.setup.inventory.MapDataTestBase;
10-
import net.theevilreaper.bounce.setup.util.SetupItems;
1110
import org.junit.jupiter.api.BeforeAll;
1211
import org.junit.jupiter.api.extension.ExtendWith;
1312

@@ -23,7 +22,6 @@
2322
public abstract class SetupItemTestBase extends MapDataTestBase {
2423

2524
protected static FileHandler fileHandler;
26-
protected static SetupItems setupItems;
2725
protected static SetupDataService setupDataService;
2826
protected static PlayerConsumer nopFunction = player -> {
2927
// No operation function for player
@@ -32,7 +30,6 @@ public abstract class SetupItemTestBase extends MapDataTestBase {
3230
@BeforeAll
3331
static void setUp() {
3432
fileHandler = new GsonFileHandler(GsonUtil.GSON);
35-
setupItems = new SetupItems();
3633
setupDataService = SetupDataService.create();
3734
}
3835
}

setup/src/test/java/net/theevilreaper/bounce/setup/util/SetupItemsIntegrationTest.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import net.minestom.testing.Env;
88
import net.minestom.testing.extension.MicrotusExtension;
99
import org.jetbrains.annotations.NotNull;
10-
import org.junit.jupiter.api.AfterAll;
11-
import org.junit.jupiter.api.BeforeAll;
1210
import org.junit.jupiter.api.Test;
1311
import org.junit.jupiter.api.extension.ExtendWith;
1412

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

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

39-
setupItems.setOverViewItem(player);
25+
SetupItems.setOverViewItem(player);
4026
ItemStack overViewItem = player.getInventory().getItemStack(0x00);
4127
assertNotNull(overViewItem);
4228
assertNotEquals(Material.AIR, overViewItem.material());
@@ -54,7 +40,7 @@ void testSetupItems(@NotNull Env env) {
5440
Player player = env.createPlayer(instance);
5541
assertNotNull(player);
5642

57-
setupItems.setSetupItems(player);
43+
SetupItems.setSetupItems(player);
5844
ItemStack saveItem = player.getInventory().getItemStack(0x06);
5945
assertNotNull(saveItem);
6046
assertNotEquals(Material.AIR, saveItem.material());

src/main/java/net/theevilreaper/bounce/Bounce.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,9 @@
1414
import net.minestom.server.event.player.PlayerChatEvent;
1515
import net.minestom.server.event.player.PlayerDisconnectEvent;
1616
import net.minestom.server.event.player.PlayerSpawnEvent;
17-
import net.minestom.server.instance.block.Block;
18-
import net.minestom.server.instance.block.BlockHandler;
1917
import net.minestom.server.instance.block.BlockManager;
2018
import net.theevilreaper.aves.map.provider.MapProvider;
2119
import net.theevilreaper.bounce.block.BlockLoader;
22-
import net.theevilreaper.bounce.block.BlockLoaderBuilder;
2320
import net.theevilreaper.bounce.block.type.lantern.LanternBlockFactory;
2421
import net.theevilreaper.bounce.commands.StartCommand;
2522
import net.theevilreaper.bounce.common.ListenerHandling;
@@ -47,7 +44,6 @@
4744
import net.theevilreaper.bounce.timer.LobbyPhase;
4845
import net.theevilreaper.bounce.timer.RestartPhase;
4946
import net.theevilreaper.bounce.timer.TeleportPhase;
50-
import net.theevilreaper.bounce.util.ItemUtil;
5147
import net.theevilreaper.bounce.util.PlayerUtil;
5248
import net.theevilreaper.bounce.util.BounceScoreboard;
5349
import net.theevilreaper.xerus.api.phase.LinearPhaseSeries;
@@ -62,7 +58,6 @@ public class Bounce implements ListenerHandling {
6258
private ProfileService profileService;
6359
private final GameConfig gameConfig;
6460
private final BounceScoreboard scoreboard;
65-
private final ItemUtil itemUtil;
6661
private final MapProvider mapProvider;
6762
private final LinearPhaseSeries<Phase> phaseSeries;
6863
private final PlayerUtil playerUtil;
@@ -71,7 +66,6 @@ public Bounce() {
7166
Path path = Paths.get("");
7267
this.gameConfig = new GameConfigReader(path.resolve("config")).getConfig();
7368
this.mapProvider = new BounceMapProvider(path);
74-
this.itemUtil = new ItemUtil();
7569
this.phaseSeries = new LinearPhaseSeries<>("Game");
7670
this.profileService = new ProfileService();
7771
this.playerUtil = new PlayerUtil(this.profileService, ((BounceMapProvider) this.mapProvider).getActiveMap().getPushData());
@@ -108,7 +102,7 @@ public void unload() {
108102

109103
private void registerPhases() {
110104
this.phaseSeries.add(new LobbyPhase(this.gameConfig.minPlayers(), this.gameConfig.lobbyTime()));
111-
this.phaseSeries.add(new TeleportPhase(this.itemUtil, ((BounceMapProvider) this.mapProvider)::teleportToGameSpawn, this.scoreboard::initGameScoreboard));
105+
this.phaseSeries.add(new TeleportPhase(((BounceMapProvider) this.mapProvider)::teleportToGameSpawn, this.scoreboard::initGameScoreboard));
112106
this.phaseSeries.add(new PlayingPhase(this.scoreboard::updateGameScoreboardDisplayName, () -> {
113107
this.profileService.start(((BounceMapProvider) this.mapProvider).getActiveMap(), scoreboard::createPlayerLine);
114108
}));

src/main/java/net/theevilreaper/bounce/timer/TeleportPhase.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414

1515
public class TeleportPhase extends TimedPhase {
1616

17-
private final ItemUtil itemUtil;
1817
private final PlayerConsumer teleport;
1918
private final VoidConsumer startTrigger;
2019

21-
public TeleportPhase(@NotNull ItemUtil itemUtil, @NotNull PlayerConsumer teleport, @NotNull VoidConsumer startTrigger) {
20+
public TeleportPhase(@NotNull PlayerConsumer teleport, @NotNull VoidConsumer startTrigger) {
2221
super("Teleport", ChronoUnit.SECONDS, 1);
2322
this.setCurrentTicks(3);
24-
this.itemUtil = itemUtil;
2523
this.teleport = teleport;
2624
this.startTrigger = startTrigger;
2725
}
@@ -40,7 +38,7 @@ public void onUpdate() {
4038
protected void onFinish() {
4139
Collection<@NotNull Player> onlinePlayers = MinecraftServer.getConnectionManager().getOnlinePlayers();
4240
for (Player onlinePlayer : onlinePlayers) {
43-
itemUtil.setItem(onlinePlayer);
41+
ItemUtil.setItem(onlinePlayer);
4442
teleport.accept(onlinePlayer);
4543
AttributeHelper.disableJumpStrength(onlinePlayer);
4644
}

0 commit comments

Comments
 (0)