Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
ef26964
Add dialog package
theEvilReaper Nov 4, 2025
249bb8f
Remove old dialog part
theEvilReaper Nov 4, 2025
d52001b
Add listeners for the dialog part
theEvilReaper Nov 4, 2025
fd4b3cd
Add new objects and more to handle the dialogs
theEvilReaper Nov 4, 2025
009bb99
Improve inventory data handling
theEvilReaper Nov 4, 2025
9f1b0db
Update namespace
theEvilReaper Nov 4, 2025
9195ddd
Update tag usage
theEvilReaper Nov 4, 2025
0a80372
Remove unused code parts
theEvilReaper Nov 4, 2025
59bca23
Improve DataType docs and add tests
theEvilReaper Nov 5, 2025
9b2c208
Improve return type usage
theEvilReaper Nov 5, 2025
b3dba5e
Update inventory title
theEvilReaper Nov 5, 2025
b4c1300
Cleanup code
theEvilReaper Nov 5, 2025
720b0c2
chore(command): add usage of the package info file to improve notnull…
theEvilReaper Feb 26, 2026
055bf45
chore(dialog): add usage of the package info file to improve notnull …
theEvilReaper Feb 26, 2026
4a799c6
chore(command): improve builder access
theEvilReaper Feb 26, 2026
09c5ecb
chore(listener): improve notnull usage
theEvilReaper Feb 26, 2026
244cd28
chore(map): enable setup data check to prevent players to create mult…
theEvilReaper Feb 26, 2026
fe1f363
chore(setup): improve tag handling
theEvilReaper Mar 22, 2026
a30bfe6
chore(setup)!: remove confirm inventory usage and add usage of the de…
theEvilReaper Mar 22, 2026
206460e
chore(setup): remove debugs
theEvilReaper Mar 22, 2026
7c83ba8
chore(setup): remove integration test class for the confirm inventory
theEvilReaper Mar 22, 2026
2286ca2
chore(setup): inline file handler creation
theEvilReaper Mar 22, 2026
9335d0b
docs(setup): remove unused parameter documentation
theEvilReaper Mar 22, 2026
6c062ea
chore(setup): remove delete tag
theEvilReaper Mar 22, 2026
9abb7c4
chore(setup): improve wild card usage
theEvilReaper Mar 22, 2026
22fd320
chore(setup): improve file handler usage
theEvilReaper Mar 22, 2026
13ff612
fix(setup): improve constructor usage
theEvilReaper May 12, 2026
6ede853
feat(setup): add pica dependency
theEvilReaper May 12, 2026
c4a279e
chore: bump pica dependency
theEvilReaper May 12, 2026
1fe61b6
feat(setup): add new dialogs based on pica
theEvilReaper May 12, 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
2 changes: 2 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ dependencyResolutionManagement {
version("projectiles", "2.1.6")
version("aonyx", "0.7.1")
version("cyclonedx", "3.2.4")
version("pica", "0.0.3")

library("game.bom", "net.onelitefeather", "aonyx-bom").versionRef("aonyx")

Expand All @@ -40,6 +41,7 @@ dependencyResolutionManagement {
library("junit.params", "org.junit.jupiter", "junit-jupiter-params").withoutVersion()
library("aves", "net.theevilreaper", "aves").withoutVersion()
library("xerus", "net.theevilreaper", "xerus").withoutVersion()
library("pica", "net.onelitefeather", "pica").versionRef("pica")

plugin("shadow", "com.gradleup.shadow").versionRef("shadow")
plugin("cyclonedx", "org.cyclonedx.bom").versionRef("cyclonedx")
Expand Down
1 change: 1 addition & 0 deletions setup/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ dependencies {
implementation(platform(libs.game.bom))
implementation(libs.adventure)
implementation(libs.guira)
implementation(libs.pica)
compileOnly(libs.minestom)
compileOnly(libs.aves)
compileOnly(libs.xerus)
Expand Down
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,19 +44,16 @@

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 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.mapSetupInventory = new MapSetupInventory(this.mapProvider::getEntries);
this.dialogRegistry = new SetupDialogRegistry();
MinecraftServer.getSchedulerManager().buildShutdownTask(this::terminate);
}

Expand All @@ -67,7 +68,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 @@ -78,16 +79,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));
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));
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