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";
+ }
+}