Skip to content

Commit 82eaf8f

Browse files
authored
rework(setup): update survivor setup to a click based approach (#104)
* fix(setup): update range and layout usage * feat(setup): add new listener * feat(setup): add new item layout * chore(setup): remove command structure * chore(game): store survivor positions in a tree set * feat(setup): add surivivor mode * chore(setup): adjust slot * fix(setup): adjust index value
1 parent 95a3544 commit 82eaf8f

11 files changed

Lines changed: 134 additions & 126 deletions

File tree

common/src/main/java/net/onelitefeather/cygnus/common/map/GameMapBuilder.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
import net.theevilreaper.aves.map.BaseMapBuilder;
88
import org.jetbrains.annotations.Nullable;
99

10+
import java.util.Comparator;
1011
import java.util.HashSet;
1112
import java.util.Set;
13+
import java.util.TreeSet;
1214

1315
public final class GameMapBuilder extends BaseMapBuilder {
1416

@@ -22,7 +24,11 @@ public final class GameMapBuilder extends BaseMapBuilder {
2224
public GameMapBuilder() {
2325
super();
2426
this.pageFaces = new HashSet<>();
25-
this.survivorSpawns = new HashSet<>();
27+
this.survivorSpawns = new TreeSet<>(
28+
Comparator.comparingInt(Pos::blockX)
29+
.thenComparingInt(Pos::blockY)
30+
.thenComparingInt(Pos::blockZ)
31+
);
2632
}
2733

2834
/**
@@ -33,7 +39,11 @@ public GameMapBuilder() {
3339
public GameMapBuilder(GameMap gameMap) {
3440
super(gameMap);
3541
this.slenderSpawn = gameMap.getSlenderSpawn();
36-
this.survivorSpawns = gameMap.getSurvivorSpawns();
42+
this.survivorSpawns = new TreeSet<>(
43+
Comparator.comparingInt(Pos::blockX)
44+
.thenComparingInt(Pos::blockY)
45+
.thenComparingInt(Pos::blockZ)
46+
);
3747
this.pageFaces = gameMap.getPageFaces();
3848
}
3949

setup/src/main/java/net/onelitefeather/cygnus/setup/SetupExtension.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.minestom.server.MinecraftServer;
44
import net.minestom.server.coordinate.Pos;
5+
import net.minestom.server.event.EventListener;
56
import net.minestom.server.event.GlobalEventHandler;
67
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
78
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
@@ -13,7 +14,6 @@
1314
import net.minestom.server.event.player.PlayerUseItemEvent;
1415
import net.onelitefeather.cygnus.common.ListenerHandling;
1516
import net.minestom.server.instance.Instance;
16-
import net.onelitefeather.cygnus.setup.command.SetupCommand;
1717
import net.onelitefeather.cygnus.setup.event.MapSetupSaveEvent;
1818
import net.onelitefeather.cygnus.setup.event.MapSetupSelectEvent;
1919
import net.onelitefeather.cygnus.setup.event.PositionSetEvent;
@@ -25,6 +25,7 @@
2525
import net.onelitefeather.cygnus.setup.listener.PageCreationListener;
2626
import net.onelitefeather.cygnus.setup.listener.PlayerSpawnListener;
2727
import net.onelitefeather.cygnus.setup.listener.SetupItemListener;
28+
import net.onelitefeather.cygnus.setup.listener.SpawnCreationListener;
2829
import net.onelitefeather.cygnus.setup.listener.dialog.DialogPayloadListener;
2930
import net.onelitefeather.cygnus.setup.listener.dialog.DialogRequestListener;
3031
import net.onelitefeather.cygnus.setup.listener.map.MapSetupSaveListener;
@@ -56,7 +57,6 @@ private void registerSetupComponents() {
5657
var manager = MinecraftServer.getGlobalEventHandler();
5758
var commandManager = MinecraftServer.getCommandManager();
5859
var spawnPos = new Pos(0, 150, 0);
59-
commandManager.register(new SetupCommand(setupData));
6060

6161
Supplier<Instance> instanceSupplier = this.mapProvider.getActiveInstance();
6262
UUID instanceUUID = instanceSupplier.get().getUuid();
@@ -71,7 +71,10 @@ private void registerSetupComponents() {
7171
this.dataService.remove(event.getPlayer().getUuid());
7272
});
7373
manager.addListener(PlayerBlockBreakEvent.class, new PageCreationListener(this.dataService));
74-
74+
manager.addListener(EventListener.builder(PlayerBlockBreakEvent.class)
75+
.ignoreCancelled(false)
76+
.handler(new SpawnCreationListener(this.dataService))
77+
.build());
7578
manager.addListener(AddEntityToInstanceEvent.class, new InstanceAddListener(instanceUUID));
7679
manager.addListener(RemoveEntityFromInstanceEvent.class, new InstanceRemoveListener(instanceUUID));
7780
registerCancelListener(manager);

setup/src/main/java/net/onelitefeather/cygnus/setup/command/SetupCommand.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

setup/src/main/java/net/onelitefeather/cygnus/setup/command/package-info.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

setup/src/main/java/net/onelitefeather/cygnus/setup/command/parts/SetupSurvivorSpawnCommand.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

setup/src/main/java/net/onelitefeather/cygnus/setup/command/parts/package-info.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

setup/src/main/java/net/onelitefeather/cygnus/setup/data/GameData.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class GameData extends InstanceSetupData {
2727
private final SurvivorViewInventory survivorInventory;
2828
private GameMapBuilder gameMapBuilder;
2929
private boolean pageMode;
30+
private boolean survivorMode;
3031

3132
/**
3233
* Constructs a new GameData instance.
@@ -42,7 +43,6 @@ public GameData(UUID uuid, MapEntry mapEntry) {
4243
throw new IllegalArgumentException("Player with UUID " + uuid + " is not online.");
4344
}
4445

45-
System.out.println("After loadData: " + System.identityHashCode(this.gameMapBuilder));
4646
this.inventory = new MapDataOverviewInventory(player, this.gameMapBuilder, InventoryMode.GAME);
4747
this.survivorInventory = new SurvivorViewInventory(player, this.gameMapBuilder);
4848
}
@@ -54,6 +54,8 @@ public void swapPageMode() {
5454
this.pageMode = !this.pageMode;
5555
}
5656

57+
public void swapSurvivorMode() { this.survivorMode = !this.survivorMode; }
58+
5759
/**
5860
* {@inheritDoc}
5961
*/
@@ -97,6 +99,17 @@ public void setPosition(MapDataCategory category, Player player) {
9799
((GameMapBuilder) getMapBuilder()).setSlenderSpawn(pos);
98100
triggerUpdate(InventoryTarget.GENERAL);
99101
}
102+
case SURVIVOR -> {
103+
Pos spawnPos = new Pos(
104+
pos.blockX(),
105+
pos.blockY() + 1,
106+
pos.blockZ(),
107+
player.getPosition().yaw(),
108+
0f
109+
);
110+
this.gameMapBuilder.addSurvivorSpawn(spawnPos);
111+
triggerUpdate(InventoryTarget.SURVIVOR);
112+
}
100113
default -> {}
101114
}
102115
}
@@ -121,6 +134,24 @@ public void handleItemInteraction(Player player, byte tagValue) {
121134
SetupItems.setGameLayout(player);
122135
return;
123136
}
137+
138+
if (5 == tagValue) {
139+
this.swapSurvivorMode();
140+
SetupItems.setSurvivorSpawn(player);
141+
return;
142+
}
143+
144+
if (6 == tagValue) {
145+
this.openInventory(InventoryTarget.SURVIVOR);
146+
return;
147+
}
148+
149+
if (7 == tagValue) {
150+
this.swapSurvivorMode();
151+
SetupItems.setGameLayout(player);
152+
return;
153+
}
154+
124155
super.handleItemInteraction(player, tagValue);
125156
}
126157

@@ -185,6 +216,10 @@ public boolean hasPageMode() {
185216
return pageMode;
186217
}
187218

219+
public boolean hasSurvivorMode() {
220+
return this.survivorMode;
221+
}
222+
188223
/**
189224
* Returns the GameMapBuilder instance used for building the game map.
190225
*

setup/src/main/java/net/onelitefeather/cygnus/setup/inventory/view/SurvivorViewInventory.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
public class SurvivorViewInventory extends PersonalInventoryBuilder {
1818

19-
private static final int[] SLOTS = LayoutCalculator.quad(InventoryType.CHEST_1_ROW.getSize() + 1, InventoryType.CHEST_5_ROW.getSize());
19+
private static final int[] SLOTS = LayoutCalculator.quad(InventoryType.CHEST_1_ROW.getSize(), InventoryType.CHEST_5_ROW.getSize() - 1);
2020
private final GameMapBuilder mapBuilder;
2121

2222
/**
@@ -35,19 +35,19 @@ public SurvivorViewInventory(Player player, GameMapBuilder mapBuilder) {
3535
setLayout(layout);
3636

3737
this.setDataLayoutFunction(dataLayout -> {
38-
dataLayout = dataLayout != null ? dataLayout : InventoryLayout.fromType(getType());
39-
40-
if (this.mapBuilder.getSurvivorSpawns().isEmpty()) return dataLayout;
41-
38+
InventoryLayout internalLayout = dataLayout != null ? dataLayout : InventoryLayout.fromType(getType());
39+
if (this.mapBuilder.getSurvivorSpawns().isEmpty()) {
40+
return internalLayout;
41+
}
4242
Iterator<Pos> iterator = mapBuilder.getSurvivorSpawns().iterator();
4343

4444
for (int i = 0; i < SLOTS.length && iterator.hasNext(); i++) {
4545
Pos pos = iterator.next();
46-
dataLayout.setItem(SLOTS[i], new PositionSlot(MapDataCategory.SPAWN, pos));
46+
internalLayout.setItem(SLOTS[i], new PositionSlot(MapDataCategory.SURVIVOR, pos));
4747
}
48-
return dataLayout;
48+
return internalLayout;
4949
});
50-
50+
this.invalidateLayout();
5151
register();
5252
}
5353
}

setup/src/main/java/net/onelitefeather/cygnus/setup/item/SetupItems.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public final class SetupItems {
2626
private static final HotBarLayout lobbySetupLayout;
2727
private static final HotBarLayout gameSetupLayout;
2828
private static final HotBarLayout pageLayout;
29+
private static final HotBarLayout survivorSpawnLayout;
2930

3031
static {
3132
DECORATION_PANE = ItemStack.builder(Material.BLACK_STAINED_GLASS_PANE).customName(Component.empty()).build();
@@ -48,24 +49,42 @@ public final class SetupItems {
4849
lobbySetupLayout.set(6, saveItem);
4950

5051
gameSetupLayout = new HotBarLayout();
51-
gameSetupLayout.set(2, ItemStack.builder(Material.COMPASS)
52+
gameSetupLayout.set(1, ItemStack.builder(Material.COMPASS)
5253
.customName(Component.text("Data", NamedTextColor.AQUA))
5354
.set(Tags.ITEM_TAG, (byte) 0x02)
5455
.build()
5556
);
56-
gameSetupLayout.set(4, ItemStack.builder(Material.PAPER)
57+
gameSetupLayout.set(3, ItemStack.builder(Material.PAPER)
5758
.customName(Component.text("Page", NamedTextColor.AQUA))
5859
.set(Tags.ITEM_TAG, (byte) 0x03)
5960
.build()
6061
);
61-
gameSetupLayout.set(6, saveItem);
62+
gameSetupLayout.set(5, ItemStack.builder(Material.MINECART)
63+
.customName(Component.text("Survivor", NamedTextColor.YELLOW))
64+
.set(Tags.ITEM_TAG, (byte) 0x05)
65+
.build()
66+
);
67+
gameSetupLayout.set(7, saveItem);
6268

6369
pageLayout = new HotBarLayout();
64-
pageLayout.set(2, ItemStack.builder(Material.BARRIER)
70+
pageLayout.set(4, ItemStack.builder(Material.BARRIER)
6571
.customName(Component.text("Leave page mode", NamedTextColor.RED))
6672
.set(Tags.ITEM_TAG, (byte) 0x04)
6773
.build()
6874
);
75+
76+
survivorSpawnLayout = new HotBarLayout();
77+
survivorSpawnLayout.set(2, ItemStack.builder(Material.CHEST)
78+
.customName(Component.text("Spawns", NamedTextColor.AQUA))
79+
.set(Tags.ITEM_TAG, (byte) 0x06)
80+
.build()
81+
);
82+
survivorSpawnLayout.set(6
83+
, ItemStack.builder(Material.BARRIER)
84+
.customName(Component.text("Leave mode", NamedTextColor.RED))
85+
.set(Tags.ITEM_TAG, (byte) 0x07)
86+
.build()
87+
);
6988
}
7089

7190
/**
@@ -98,6 +117,16 @@ public static void setGameLayout(Player player) {
98117
player.setHeldItemSlot(FOURTH_INDEX);
99118
}
100119

120+
/**
121+
* Set's the {@link ItemStack} which are required for the survivor setup.
122+
*
123+
* @param player who should receive the items
124+
*/
125+
public static void setSurvivorSpawn(Player player) {
126+
survivorSpawnLayout.apply(player);
127+
player.setHeldItemSlot(ZERO_INDEX);
128+
}
129+
101130
/**
102131
* Set's the {@link ItemStack} which are required for the page setup.
103132
*

0 commit comments

Comments
 (0)