From df86f6182806613b0b36972af58896979ca13ba1 Mon Sep 17 00:00:00 2001 From: Xander Date: Sat, 21 Sep 2024 13:38:50 +0200 Subject: [PATCH] Add more useful commands --- .idea/.gitignore | 8 ++ .idea/.name | 1 + .idea/artifacts/mc13dtl_main_jar.xml | 9 ++ .idea/compiler.xml | 6 + .idea/gradle.xml | 17 +++ .idea/jarRepositories.xml | 25 ++++ .idea/misc.xml | 10 ++ .idea/modules.xml | 9 ++ .idea/modules/mc13dtl.main.iml | 17 +++ .idea/modules/mc13dtl.test.iml | 18 +++ .idea/uiDesigner.xml | 124 ++++++++++++++++++ .idea/vcs.xml | 6 + src/main/java/gent/zeus/mc13dtl/MC13DTL.java | 8 +- .../java/gent/zeus/mc13dtl/events/Event.java | 4 + .../gent/zeus/mc13dtl/events/EventRunner.java | 15 ++- .../gamestate/ExecuteEventCommand.java | 36 +++++ .../zeus/mc13dtl/gamestate/SetDayCommand.java | 35 +++++ 17 files changed, 341 insertions(+), 7 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/artifacts/mc13dtl_main_jar.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/modules/mc13dtl.main.iml create mode 100644 .idea/modules/mc13dtl.test.iml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/gent/zeus/mc13dtl/gamestate/ExecuteEventCommand.java create mode 100644 src/main/java/gent/zeus/mc13dtl/gamestate/SetDayCommand.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..4892aad --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +mc13dtl \ No newline at end of file diff --git a/.idea/artifacts/mc13dtl_main_jar.xml b/.idea/artifacts/mc13dtl_main_jar.xml new file mode 100644 index 0000000..2860123 --- /dev/null +++ b/.idea/artifacts/mc13dtl_main_jar.xml @@ -0,0 +1,9 @@ + + + $PROJECT_DIR$/../MC/plugins + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7d3b3e8 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..69c6377 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a5a374f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..276caf7 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/mc13dtl.main.iml b/.idea/modules/mc13dtl.main.iml new file mode 100644 index 0000000..9376acd --- /dev/null +++ b/.idea/modules/mc13dtl.main.iml @@ -0,0 +1,17 @@ + + + + + + + PAPER + ADVENTURE + + 1 + + + + + + \ No newline at end of file diff --git a/.idea/modules/mc13dtl.test.iml b/.idea/modules/mc13dtl.test.iml new file mode 100644 index 0000000..fa25e00 --- /dev/null +++ b/.idea/modules/mc13dtl.test.iml @@ -0,0 +1,18 @@ + + + + + + + MCP + PAPER + ADVENTURE + + 1 + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/gent/zeus/mc13dtl/MC13DTL.java b/src/main/java/gent/zeus/mc13dtl/MC13DTL.java index c5cbfa7..c83965c 100644 --- a/src/main/java/gent/zeus/mc13dtl/MC13DTL.java +++ b/src/main/java/gent/zeus/mc13dtl/MC13DTL.java @@ -1,5 +1,6 @@ package gent.zeus.mc13dtl; +import gent.zeus.mc13dtl.gamestate.*; import gent.zeus.mc13dtl.group.GroupAddCommand; import gent.zeus.mc13dtl.group.GroupRemoveCommand; import gent.zeus.mc13dtl.group.SetScoreCommand; @@ -8,9 +9,6 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; import gent.zeus.mc13dtl.events.EventRunner; -import gent.zeus.mc13dtl.gamestate.GameStateHandler; -import gent.zeus.mc13dtl.gamestate.StartGameCommand; -import gent.zeus.mc13dtl.gamestate.TogglePauseCommand; import io.papermc.paper.command.brigadier.Commands; import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; @@ -28,8 +26,10 @@ public class MC13DTL extends JavaPlugin { Commands commands = event.registrar(); commands.register("start-game", "Start a game of 13 days to live", new StartGameCommand()); commands.register("toggle-pause", "Toggle paused state", new TogglePauseCommand()); - commands.register("group-add", "Add player to team", new GroupAddCommand()); commands.register("set-score", "Set the score of a team", new SetScoreCommand()); + commands.register("set-day", "Set the day to the specified number", new SetDayCommand()); + commands.register("execute-event", "Execute given event number now", new ExecuteEventCommand()); + commands.register("group-add", "Add player to team", new GroupAddCommand()); commands.register("group-remove", "Remove player from team", new GroupRemoveCommand()); }); BukkitScheduler scheduler = this.getServer().getScheduler(); diff --git a/src/main/java/gent/zeus/mc13dtl/events/Event.java b/src/main/java/gent/zeus/mc13dtl/events/Event.java index 931ebc0..555bf7f 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/Event.java +++ b/src/main/java/gent/zeus/mc13dtl/events/Event.java @@ -40,6 +40,10 @@ public abstract class Event implements Listener, Runnable { EventRunner.currentEvents.remove(this); } + protected void eventTimeEnded() { + eventFailed(); + } + protected void eventSuccess() { MC13DTL.board.sendMessageToTeam(team, Component.text("Congratulations! You survived this event").color(NamedTextColor.GREEN)); MC13DTL.board.addScore(team, scoreOnSuccess); diff --git a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java index 39586c3..56ed122 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java +++ b/src/main/java/gent/zeus/mc13dtl/events/EventRunner.java @@ -15,6 +15,7 @@ import gent.zeus.mc13dtl.MC13DTL; public class EventRunner implements Runnable { static List currentEvents = new ArrayList<>(); + public static List startTimes = List.of(5000); private long day; @@ -24,11 +25,19 @@ public class EventRunner implements Runnable { NamespacedKey eventKey = new NamespacedKey(MC13DTL.instance, "last-event-day"); long lastRunDay = world.getPersistentDataContainer().get(eventKey, PersistentDataType.LONG); day = Bukkit.getWorld("world").getFullTime() / 24000; - if (day > lastRunDay && Bukkit.getWorld("world").getTime() >= 14000) { - while (!currentEvents.isEmpty()) { - Event event = currentEvents.getFirst(); + + if (day > lastRunDay && !currentEvents.isEmpty()) { + for (Event event : currentEvents) { + event.eventTimeEnded(); + } + + // When event doesn't properly handle eventTimeEnded + for (Event event : currentEvents) { event.eventFailed(); } + } + + if (day > lastRunDay && day < startTimes.size() && Bukkit.getWorld("world").getTime() >= startTimes.get((int) day)) { List teams = MC13DTL.board.getTeams().stream().toList(); List difficulties = getDifficulties(teams); diff --git a/src/main/java/gent/zeus/mc13dtl/gamestate/ExecuteEventCommand.java b/src/main/java/gent/zeus/mc13dtl/gamestate/ExecuteEventCommand.java new file mode 100644 index 0000000..2e3c7cc --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/gamestate/ExecuteEventCommand.java @@ -0,0 +1,36 @@ +package gent.zeus.mc13dtl.gamestate; + +import gent.zeus.mc13dtl.MC13DTL; +import gent.zeus.mc13dtl.events.EventRunner; +import io.papermc.paper.command.brigadier.BasicCommand; +import io.papermc.paper.command.brigadier.CommandSourceStack; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.NotNull; + +public class ExecuteEventCommand implements BasicCommand { + @Override + public void execute(@NotNull CommandSourceStack commandSourceStack, @NotNull String[] args) { + World world = Bukkit.getWorld("world"); + try { + if (args.length == 1) { + int day = Integer.parseInt(args[0]); + world.setFullTime(day * 24000 + EventRunner.startTimes.get(day)); + NamespacedKey eventKey = new NamespacedKey(MC13DTL.instance, "last-event-day"); + world.getPersistentDataContainer().set(eventKey, PersistentDataType.LONG, day - 1L); + commandSourceStack.getSender().sendMessage("Day set to " + day); + } else { + commandSourceStack.getSender().sendMessage("usage: /execute-day "); + } + } catch (NumberFormatException ex) { + commandSourceStack.getSender().sendMessage("usage: /execute-day "); + } + } + + @Override + public String permission() { + return "13dtl.manage-game"; + } +} diff --git a/src/main/java/gent/zeus/mc13dtl/gamestate/SetDayCommand.java b/src/main/java/gent/zeus/mc13dtl/gamestate/SetDayCommand.java new file mode 100644 index 0000000..b198e2f --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/gamestate/SetDayCommand.java @@ -0,0 +1,35 @@ +package gent.zeus.mc13dtl.gamestate; + +import gent.zeus.mc13dtl.MC13DTL; +import io.papermc.paper.command.brigadier.BasicCommand; +import io.papermc.paper.command.brigadier.CommandSourceStack; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.NotNull; + +public class SetDayCommand implements BasicCommand { + @Override + public void execute(@NotNull CommandSourceStack commandSourceStack, @NotNull String[] args) { + World world = Bukkit.getWorld("world"); + try { + if (args.length == 1) { + int day = Integer.parseInt(args[0]); + world.setFullTime(day * 24000); + NamespacedKey eventKey = new NamespacedKey(MC13DTL.instance, "last-event-day"); + world.getPersistentDataContainer().set(eventKey, PersistentDataType.LONG, day - 1L); + commandSourceStack.getSender().sendMessage("Day set to " + day); + } else { + commandSourceStack.getSender().sendMessage("usage: /set-day "); + } + } catch (NumberFormatException ex) { + commandSourceStack.getSender().sendMessage("usage: /set-day "); + } + } + + @Override + public String permission() { + return "13dtl.manage-game"; + } +}