Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
f9d55a7
Add dialog package
theEvilReaper Nov 4, 2025
bd1f889
Remove old dialog part
theEvilReaper Nov 4, 2025
3e43b63
Add listeners for the dialog part
theEvilReaper Nov 4, 2025
1f8db6b
Add new objects and more to handle the dialogs
theEvilReaper Nov 4, 2025
9863ae4
Improve inventory data handling
theEvilReaper Nov 4, 2025
63be07f
Update namespace
theEvilReaper Nov 4, 2025
7117995
Update tag usage
theEvilReaper Nov 4, 2025
7375660
Remove unused code parts
theEvilReaper Nov 4, 2025
8ef07d3
Improve DataType docs and add tests
theEvilReaper Nov 5, 2025
e8950bd
Improve return type usage
theEvilReaper Nov 5, 2025
5c19689
Update inventory title
theEvilReaper Nov 5, 2025
e71fa8c
Cleanup code
theEvilReaper Nov 5, 2025
90adcd2
chore(command): add usage of the package info file to improve notnull…
theEvilReaper Feb 26, 2026
5779f6f
chore(dialog): add usage of the package info file to improve notnull …
theEvilReaper Feb 26, 2026
06b03fd
chore(command): improve builder access
theEvilReaper Feb 26, 2026
32739c8
chore(listener): improve notnull usage
theEvilReaper Feb 26, 2026
42ea6b3
chore(map): enable setup data check to prevent players to create mult…
theEvilReaper Feb 26, 2026
ff88404
chore(setup): improve tag handling
theEvilReaper Mar 22, 2026
b70bcdb
chore(setup)!: remove confirm inventory usage and add usage of the de…
theEvilReaper Mar 22, 2026
4ce577d
chore(setup): remove debugs
theEvilReaper Mar 22, 2026
68bc70b
chore(setup): remove integration test class for the confirm inventory
theEvilReaper Mar 22, 2026
b0e6809
chore(setup): inline file handler creation
theEvilReaper Mar 22, 2026
bef7046
docs(setup): remove unused parameter documentation
theEvilReaper Mar 22, 2026
bb53e10
chore(setup): remove delete tag
theEvilReaper Mar 22, 2026
9b87a09
chore(setup): improve wild card usage
theEvilReaper Mar 22, 2026
7daf696
chore(setup): improve file handler usage
theEvilReaper Mar 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 26 additions & 19 deletions setup/src/main/java/net/theevilreaper/tamias/setup/TamiasSetup.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package net.theevilreaper.tamias.setup;

import net.minestom.server.event.player.PlayerCustomClickEvent;
import net.onelitefeather.guira.SetupDataService;
import net.onelitefeather.guira.event.SetupFinishEvent;
import net.theevilreaper.aves.file.FileHandler;
import net.theevilreaper.aves.file.GsonFileHandler;
import net.theevilreaper.aves.map.provider.MapProvider;
import net.theevilreaper.aves.util.functional.PlayerConsumer;
import net.minestom.server.MinecraftServer;
Expand All @@ -17,16 +16,21 @@
import net.minestom.server.event.player.PlayerSpawnEvent;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.instance.Instance;
import net.minestom.server.tag.Tag;
import net.theevilreaper.tamias.common.ListenerHandling;
import net.theevilreaper.tamias.common.gson.GsonUtil;
import net.theevilreaper.tamias.setup.commands.SetupCommand;
import net.theevilreaper.tamias.setup.dialog.DialogRegistry;
import net.theevilreaper.tamias.setup.dialog.SetupDialogRegistry;
import net.theevilreaper.tamias.setup.dialog.event.PlayerDeletePromptEvent;
import net.theevilreaper.tamias.setup.dialog.event.PlayerDialogRequestEvent;
import net.theevilreaper.tamias.setup.event.MapSetupSelectEvent;
import net.theevilreaper.tamias.setup.inventory.MapSetupInventory;
import net.theevilreaper.tamias.setup.listener.PlayerChatListener;
import net.theevilreaper.tamias.setup.listener.PlayerConfigurationListener;
import net.theevilreaper.tamias.setup.listener.PlayerDisconnectListener;
import net.theevilreaper.tamias.setup.listener.PlayerSpawnListener;
import net.theevilreaper.tamias.setup.listener.dialog.PlayerCustomClickEventListener;
import net.theevilreaper.tamias.setup.listener.dialog.PlayerDeletePromptListener;
import net.theevilreaper.tamias.setup.listener.dialog.PlayerDialogRequestListener;
import net.theevilreaper.tamias.setup.listener.item.PlayerUseItemListener;
import net.theevilreaper.tamias.setup.listener.entity.EntityAddToInstanceListener;
import net.theevilreaper.tamias.setup.listener.map.SetupFinishListener;
Expand All @@ -40,21 +44,18 @@

public final class TamiasSetup implements ListenerHandling {

public static final Tag<Byte> SETUP_TAG = Tag.Transient("setup");
public static final Tag<Boolean> DELETE_TAG = Tag.Boolean("delete").defaultValue(false);

private final SetupDataService setupDataService;
private final FileHandler fileHandler;
private final MapProvider mapProvider;
private final SetupItems setupItems;
private final MapSetupInventory mapSetupInventory;
private final DialogRegistry dialogRegistry;

public TamiasSetup() {
this.fileHandler = new GsonFileHandler(GsonUtil.GSON);
this.mapProvider = new SetupMapProvider(Paths.get(""), this.fileHandler);
this.mapProvider = new SetupMapProvider(Paths.get(""));
this.setupDataService = SetupDataService.create();
this.setupItems = new SetupItems();
this.mapSetupInventory = new MapSetupInventory(this.mapProvider::getEntries);
this.dialogRegistry = new SetupDialogRegistry();
MinecraftServer.getSchedulerManager().buildShutdownTask(this::terminate);
}

Expand All @@ -69,7 +70,7 @@ public void terminate() {
}

private void registerListener() {
GlobalEventHandler manager = MinecraftServer.getGlobalEventHandler();
GlobalEventHandler node = MinecraftServer.getGlobalEventHandler();
Supplier<Instance> instanceSupplier = mapProvider.getActiveInstance();
SetupMapProvider setupMapProvider = (SetupMapProvider) mapProvider;
PlayerConsumer initialSpawnSupplier = player -> {
Expand All @@ -80,16 +81,22 @@ private void registerListener() {
setupMapProvider.teleportToSpawn(player, true);
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(MapSetupSelectEvent.class, new MapSetupSelectListener(this.fileHandler, this.setupDataService));
manager.addListener(SetupFinishEvent.class, new SetupFinishListener(instanceSwitcher));
manager.addListener(PlayerChatEvent.class, new PlayerChatListener(this.setupDataService));
node.addListener(PlayerDisconnectEvent.class, new PlayerDisconnectListener(setupDataService::remove));
node.addListener(AsyncPlayerConfigurationEvent.class, new PlayerConfigurationListener(instanceSupplier));
node.addListener(PlayerSpawnEvent.class, new PlayerSpawnListener(initialSpawnSupplier));
node.addListener(AddEntityToInstanceEvent.class, new EntityAddToInstanceListener(instanceSupplier, setupItems));
node.addListener(MapSetupSelectEvent.class, new MapSetupSelectListener(this.setupDataService));
node.addListener(SetupFinishEvent.class, new SetupFinishListener(instanceSwitcher));
node.addListener(PlayerChatEvent.class, new PlayerChatListener(this.setupDataService));

// Item listener
manager.addListener(PlayerUseItemEvent.class, new PlayerUseItemListener(this::updateMapInventory, setupDataService::get));
node.addListener(PlayerUseItemEvent.class, new PlayerUseItemListener(this::updateMapInventory, setupDataService::get));

//Dialogs
node.addListener(PlayerDeletePromptEvent.class, new PlayerDeletePromptListener(dialogRegistry));
node.addListener(PlayerCustomClickEvent.class, new PlayerCustomClickEventListener(this.dialogRegistry, this.setupDataService::get));
node.addListener(PlayerDialogRequestEvent.class, new PlayerDialogRequestListener(this.dialogRegistry));

}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@
import net.minestom.server.command.builder.condition.Conditions;
import net.onelitefeather.guira.SetupDataService;
import net.theevilreaper.tamias.setup.commands.parts.SetupAreaCommand;
import net.theevilreaper.tamias.setup.commands.parts.SetupBuildersCommand;
import net.theevilreaper.tamias.setup.commands.parts.SetupNameCommand;
import net.theevilreaper.tamias.setup.commands.parts.SetupPositionCommand;
import org.jetbrains.annotations.NotNull;

/**
* The {@link SetupCommand} is the main command for the setup process.
Expand All @@ -19,11 +16,9 @@
*/
public final class SetupCommand extends Command {

public SetupCommand(@NotNull SetupDataService dataService) {
public SetupCommand(SetupDataService dataService) {
super("setup");
this.setCondition(Conditions::playerOnly);
this.addSubcommand(new SetupNameCommand(dataService::get));
this.addSubcommand(new SetupBuildersCommand(dataService::get));
this.addSubcommand(new SetupPositionCommand(dataService::get));
this.addSubcommand(new SetupAreaCommand(dataService::get));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@NotNullByDefault
package net.theevilreaper.tamias.setup.event.dialog;
package net.theevilreaper.tamias.setup.commands;

import org.jetbrains.annotations.NotNullByDefault;
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
import net.minestom.server.utils.Direction;
import net.onelitefeather.guira.data.SetupData;
import net.theevilreaper.aves.util.Components;
import net.theevilreaper.tamias.common.map.builder.GameMapBuilder;
import net.theevilreaper.tamias.common.util.Messages;
import net.theevilreaper.tamias.setup.TamiasSetup;
import net.theevilreaper.tamias.setup.data.GameData;
import net.theevilreaper.tamias.setup.util.DirectionUtil;
import org.jetbrains.annotations.NotNull;
import net.theevilreaper.tamias.setup.util.SetupTags;

import java.util.Optional;
import java.util.UUID;
Expand All @@ -36,7 +36,7 @@ public class SetupAreaCommand extends Command {
private final Function<UUID, Optional<SetupData>> setupDataFunction;
private final ArgumentWord argumentWord;

public SetupAreaCommand(@NotNull Function<UUID, Optional<SetupData>> setupDataFunction) {
public SetupAreaCommand(Function<UUID, Optional<SetupData>> setupDataFunction) {
super("area");
this.setCondition(Conditions::playerOnly);
this.setupDataFunction = setupDataFunction;
Expand All @@ -48,8 +48,8 @@ public SetupAreaCommand(@NotNull Function<UUID, Optional<SetupData>> setupDataFu
this.addSyntax(this::handleStateChange, stateChange);
}

private void handleStateChange(@NotNull CommandSender sender, @NotNull CommandContext context) {
if (!sender.hasTag(TamiasSetup.SETUP_TAG)) {
private void handleStateChange(CommandSender sender, CommandContext context) {
if (!sender.hasTag(SetupTags.SETUP_TAG)) {
sender.sendMessage(SELECT_MAP_FIRST);
return;
}
Expand All @@ -71,8 +71,8 @@ private void handleStateChange(@NotNull CommandSender sender, @NotNull CommandCo
}
}

private void handlePositionSet(@NotNull CommandSender sender, @NotNull CommandContext context) {
if (!sender.hasTag(TamiasSetup.SETUP_TAG)) {
private void handlePositionSet(CommandSender sender, CommandContext context) {
if (!sender.hasTag(SetupTags.SETUP_TAG)) {
sender.sendMessage(SELECT_MAP_FIRST);
return;
}
Expand Down Expand Up @@ -107,15 +107,17 @@ private void handlePositionSet(@NotNull CommandSender sender, @NotNull CommandCo
* @param player the player who executed the command
* @param setupData the game data containing the map builder
*/
private void setLeftCorner(@NotNull Player player, @NotNull GameData setupData) {
private void setLeftCorner(Player player, GameData setupData) {
Optional<Direction> directionOptional = DirectionUtil.parseDirection(player);
if (directionOptional.isEmpty()) return;

Vec vec = player.getPosition().asVec().sub(0, -1, 0);
Direction direction = directionOptional.get();

setupData.getGameMapBuilder().areaLowerCorner(vec);
setupData.getGameMapBuilder().areaFacing(direction);
GameMapBuilder mapBuilder = (GameMapBuilder) setupData.getMapBuilder();

mapBuilder.areaLowerCorner(vec);
mapBuilder.areaFacing(direction);

Component component = Messages.withPrefix(Component.text("Left area corner is: ", NamedTextColor.GRAY)
.append(Components.convertPoint(vec).style(Style.style(NamedTextColor.GOLD)))
Expand All @@ -131,10 +133,12 @@ private void setLeftCorner(@NotNull Player player, @NotNull GameData setupData)
* @param player the player who executed the command
* @param setupData the game data containing the map builder
*/
private void setRightCorner(@NotNull Player player, @NotNull GameData setupData) {
private void setRightCorner(Player player, GameData setupData) {
Vec vec = player.getPosition().asVec();

setupData.getGameMapBuilder().areaUpperCorner(vec);
GameMapBuilder mapBuilder = (GameMapBuilder) setupData.getMapBuilder();

mapBuilder.areaUpperCorner(vec);
Component component = Messages.withPrefix(Component.text("Right area corner is: ", NamedTextColor.GRAY)
.append(Components.convertPoint(vec).style(Style.style(NamedTextColor.GOLD))));
player.sendMessage(component);
Expand Down

This file was deleted.

This file was deleted.

Loading
Loading