From 0a70ecc56e1b35bdddd6f414b1e1ac1e382587d8 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 May 2021 01:46:38 -0600 Subject: [PATCH 01/18] Check FireTick during match load and start Signed-off-by: Patrick --- .../java/tc/oc/pgm/listeners/PGMListener.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 8304063591..ae25a8034f 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -5,6 +5,7 @@ import static net.kyori.adventure.text.Component.text; import static net.kyori.adventure.text.Component.translatable; +import com.google.common.collect.ImmutableMap; import java.util.Collection; import java.util.Random; import java.util.concurrent.ExecutionException; @@ -60,6 +61,7 @@ import tc.oc.pgm.util.text.TextTranslations; public class PGMListener implements Listener { + private static final String DO_FIRE_TICK = "doFireTick"; private static final String DO_DAYLIGHT_CYCLE = "doDaylightCycle"; /* 1000 /time set day @@ -258,6 +260,21 @@ public void handleItemPickup(final PlayerPickupItemEvent event) { if (nearestPlayer != event.getPlayer()) event.setCancelled(true); } + @EventHandler + public void lockFireTick(final MatchLoadEvent event) { + event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(false)); + } + + // unlock firespread if not disabled by + @EventHandler + public void unlockFireTick(final MatchStartEvent event) { + ImmutableMap lockFireTick = + event.getMatch().getModule(GameRulesMatchModule.class).getGameRules(); + if (lockFireTick.isEmpty() || Boolean.parseBoolean(lockFireTick.get(DO_FIRE_TICK))) { + event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(true)); + } + } + // // Time Lock // lock time before, during (if time lock enabled), and after the match From e072f9e884507d1c33a4a9d389e4ba3f27fa34a5 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 May 2021 01:57:01 -0600 Subject: [PATCH 02/18] Disable fire spread when match ends Signed-off-by: Patrick --- core/src/main/java/tc/oc/pgm/listeners/PGMListener.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index ae25a8034f..2c7c80169e 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -275,6 +275,11 @@ public void unlockFireTick(final MatchStartEvent event) { } } + @EventHandler + public void lockFireTick(final MatchFinishEvent event) { + event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(false)); + } + // // Time Lock // lock time before, during (if time lock enabled), and after the match From ed4d0fac5848892215ed3ca90bc7cf947ee34e00 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 May 2021 17:48:30 -0600 Subject: [PATCH 03/18] Evaluate original map setting of doFireTick Signed-off-by: Patrick --- .../main/java/tc/oc/pgm/listeners/PGMListener.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 2c7c80169e..353168ede6 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -79,6 +79,7 @@ public class PGMListener implements Listener { // Single-write, multi-read lock used to create the first match private final ReentrantReadWriteLock lock; + private boolean oldFireTick = true; public PGMListener(Plugin parent, MatchManager mm, VanishManager vm) { this.parent = parent; @@ -262,16 +263,19 @@ public void handleItemPickup(final PlayerPickupItemEvent event) { @EventHandler public void lockFireTick(final MatchLoadEvent event) { + oldFireTick = Boolean.parseBoolean(event.getMatch().getWorld().getGameRuleValue(DO_FIRE_TICK)); event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(false)); } - // unlock firespread if not disabled by + // if no doFireTick is found, then use doFireTick setting saved in world @EventHandler public void unlockFireTick(final MatchStartEvent event) { - ImmutableMap lockFireTick = - event.getMatch().getModule(GameRulesMatchModule.class).getGameRules(); - if (lockFireTick.isEmpty() || Boolean.parseBoolean(lockFireTick.get(DO_FIRE_TICK))) { - event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(true)); + ImmutableMap gameRules = event.getMatch().getModule(GameRulesMatchModule.class).getGameRules(); + if (!gameRules.isEmpty()) { + event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, gameRules.get(DO_FIRE_TICK)); + } + else { + event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(oldFireTick)); } } From 5c68abbf5140324927737282318937fad6bb8068 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 May 2021 18:19:25 -0600 Subject: [PATCH 04/18] Add additional checker Signed-off-by: Patrick --- .../main/java/tc/oc/pgm/listeners/PGMListener.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 353168ede6..4f370447e7 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -270,11 +270,12 @@ public void lockFireTick(final MatchLoadEvent event) { // if no doFireTick is found, then use doFireTick setting saved in world @EventHandler public void unlockFireTick(final MatchStartEvent event) { - ImmutableMap gameRules = event.getMatch().getModule(GameRulesMatchModule.class).getGameRules(); - if (!gameRules.isEmpty()) { - event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, gameRules.get(DO_FIRE_TICK)); - } - else { + ImmutableMap gameRules = + event.getMatch().getModule(GameRulesMatchModule.class).getGameRules(); + String newFireTick = gameRules.get(DO_FIRE_TICK); + if (!gameRules.isEmpty() && newFireTick != null) { + event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, newFireTick); + } else { event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(oldFireTick)); } } From 8cd810f93e3e9b52b049c76c59fe54eb133a5d25 Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 8 Jun 2021 00:48:56 -0600 Subject: [PATCH 05/18] Store gamerules from level.dat, simplify FireTick evaluation Signed-off-by: Patrick --- .../tc/oc/pgm/gamerules/GameRulesMatchModule.java | 10 ++++++++++ .../main/java/tc/oc/pgm/listeners/PGMListener.java | 14 +++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index 5d5a538a3b..fc06bf0443 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -2,6 +2,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; + +import java.util.HashMap; import java.util.Map; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchModule; @@ -10,6 +12,7 @@ public class GameRulesMatchModule implements MatchModule { private final Match match; private final Map gameRules; + private Map mapGameRules = new HashMap<>(); public GameRulesMatchModule(Match match, Map gameRules) { this.match = match; @@ -18,6 +21,10 @@ public GameRulesMatchModule(Match match, Map gameRules) { @Override public void load() { + for (String gameRule : this.match.getWorld().getGameRules()) { + mapGameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); + } + for (Map.Entry gameRule : this.gameRules.entrySet()) { this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); } @@ -26,4 +33,7 @@ public void load() { public ImmutableMap getGameRules() { return ImmutableMap.copyOf(gameRules); } + public ImmutableMap getMapGameRules() { + return ImmutableMap.copyOf(mapGameRules); + } } diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 4f370447e7..e43336187a 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -5,7 +5,6 @@ import static net.kyori.adventure.text.Component.text; import static net.kyori.adventure.text.Component.translatable; -import com.google.common.collect.ImmutableMap; import java.util.Collection; import java.util.Random; import java.util.concurrent.ExecutionException; @@ -79,7 +78,6 @@ public class PGMListener implements Listener { // Single-write, multi-read lock used to create the first match private final ReentrantReadWriteLock lock; - private boolean oldFireTick = true; public PGMListener(Plugin parent, MatchManager mm, VanishManager vm) { this.parent = parent; @@ -263,21 +261,15 @@ public void handleItemPickup(final PlayerPickupItemEvent event) { @EventHandler public void lockFireTick(final MatchLoadEvent event) { - oldFireTick = Boolean.parseBoolean(event.getMatch().getWorld().getGameRuleValue(DO_FIRE_TICK)); event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(false)); } // if no doFireTick is found, then use doFireTick setting saved in world @EventHandler public void unlockFireTick(final MatchStartEvent event) { - ImmutableMap gameRules = - event.getMatch().getModule(GameRulesMatchModule.class).getGameRules(); - String newFireTick = gameRules.get(DO_FIRE_TICK); - if (!gameRules.isEmpty() && newFireTick != null) { - event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, newFireTick); - } else { - event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(oldFireTick)); - } + String farts = event.getMatch().getModule(GameRulesMatchModule.class).getMapGameRules().get(DO_FIRE_TICK); + String newFireTick = event.getMatch().getModule(GameRulesMatchModule.class).getGameRules().get(DO_FIRE_TICK); + event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, newFireTick != null ? newFireTick : farts); } @EventHandler From 753150e922e4c18671390335f5771b6f72e645f8 Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 8 Jun 2021 00:50:03 -0600 Subject: [PATCH 06/18] reformat code Signed-off-by: Patrick --- .../tc/oc/pgm/gamerules/GameRulesMatchModule.java | 2 +- .../main/java/tc/oc/pgm/listeners/PGMListener.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index fc06bf0443..793a22a96f 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -2,7 +2,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; - import java.util.HashMap; import java.util.Map; import tc.oc.pgm.api.match.Match; @@ -33,6 +32,7 @@ public void load() { public ImmutableMap getGameRules() { return ImmutableMap.copyOf(gameRules); } + public ImmutableMap getMapGameRules() { return ImmutableMap.copyOf(mapGameRules); } diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index e43336187a..1483e5b7b5 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -267,9 +267,14 @@ public void lockFireTick(final MatchLoadEvent event) { // if no doFireTick is found, then use doFireTick setting saved in world @EventHandler public void unlockFireTick(final MatchStartEvent event) { - String farts = event.getMatch().getModule(GameRulesMatchModule.class).getMapGameRules().get(DO_FIRE_TICK); - String newFireTick = event.getMatch().getModule(GameRulesMatchModule.class).getGameRules().get(DO_FIRE_TICK); - event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, newFireTick != null ? newFireTick : farts); + String farts = + event.getMatch().getModule(GameRulesMatchModule.class).getMapGameRules().get(DO_FIRE_TICK); + String newFireTick = + event.getMatch().getModule(GameRulesMatchModule.class).getGameRules().get(DO_FIRE_TICK); + event + .getMatch() + .getWorld() + .setGameRuleValue(DO_FIRE_TICK, newFireTick != null ? newFireTick : farts); } @EventHandler From 848fc58fa10e1cdd54a8f3e9e8745fff2dc3b130 Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 8 Jun 2021 00:54:49 -0600 Subject: [PATCH 07/18] Rename String values Signed-off-by: Patrick --- core/src/main/java/tc/oc/pgm/listeners/PGMListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 1483e5b7b5..93ea6049cd 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -267,14 +267,14 @@ public void lockFireTick(final MatchLoadEvent event) { // if no doFireTick is found, then use doFireTick setting saved in world @EventHandler public void unlockFireTick(final MatchStartEvent event) { - String farts = + String oldFireTick = event.getMatch().getModule(GameRulesMatchModule.class).getMapGameRules().get(DO_FIRE_TICK); String newFireTick = event.getMatch().getModule(GameRulesMatchModule.class).getGameRules().get(DO_FIRE_TICK); event .getMatch() .getWorld() - .setGameRuleValue(DO_FIRE_TICK, newFireTick != null ? newFireTick : farts); + .setGameRuleValue(DO_FIRE_TICK, newFireTick != null ? newFireTick : oldFireTick); } @EventHandler From 76ab092d85ac9aae53b2fa9276f03707d437511b Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 8 Jun 2021 22:47:46 -0600 Subject: [PATCH 08/18] Simplify evaluation Signed-off-by: Patrick --- .../main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java | 5 +++-- core/src/main/java/tc/oc/pgm/listeners/PGMListener.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index 793a22a96f..6c3524dbe9 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -20,6 +20,7 @@ public GameRulesMatchModule(Match match, Map gameRules) { @Override public void load() { + // gets values stored in world's level.dat file for (String gameRule : this.match.getWorld().getGameRules()) { mapGameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); } @@ -33,7 +34,7 @@ public ImmutableMap getGameRules() { return ImmutableMap.copyOf(gameRules); } - public ImmutableMap getMapGameRules() { - return ImmutableMap.copyOf(mapGameRules); + public String getMapGameRule(String gameRule) { + return mapGameRules.get(gameRule); } } diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 93ea6049cd..32dd76e89c 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -268,9 +268,9 @@ public void lockFireTick(final MatchLoadEvent event) { @EventHandler public void unlockFireTick(final MatchStartEvent event) { String oldFireTick = - event.getMatch().getModule(GameRulesMatchModule.class).getMapGameRules().get(DO_FIRE_TICK); + event.getMatch().needModule(GameRulesMatchModule.class).getMapGameRule(DO_FIRE_TICK); String newFireTick = - event.getMatch().getModule(GameRulesMatchModule.class).getGameRules().get(DO_FIRE_TICK); + event.getMatch().needModule(GameRulesMatchModule.class).getGameRules().get(DO_FIRE_TICK); event .getMatch() .getWorld() From 005d4e43f7f9f7b1416dcf62b9b6e8d6541738d9 Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 11 Jun 2021 23:43:53 -0600 Subject: [PATCH 09/18] Add gamerule values from level.dat into GameRulesMatchModule, adjust unlocktime calcluation in PGMListener Signed-off-by: Patrick --- .../pgm/gamerules/GameRulesMatchModule.java | 28 +++++++++++++------ .../java/tc/oc/pgm/listeners/PGMListener.java | 17 +++++------ 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index 6c3524dbe9..b2adff48ed 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -2,7 +2,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import java.util.HashMap; import java.util.Map; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchModule; @@ -11,7 +10,7 @@ public class GameRulesMatchModule implements MatchModule { private final Match match; private final Map gameRules; - private Map mapGameRules = new HashMap<>(); + private boolean doDaylightCycle = false; public GameRulesMatchModule(Match match, Map gameRules) { this.match = match; @@ -20,13 +19,20 @@ public GameRulesMatchModule(Match match, Map gameRules) { @Override public void load() { - // gets values stored in world's level.dat file - for (String gameRule : this.match.getWorld().getGameRules()) { - mapGameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); + for (Map.Entry gameRule : this.gameRules.entrySet()) { + if (gameRule.getKey().equals("doDaylightCycle")) { + doDaylightCycle = Boolean.parseBoolean(gameRule.getValue()); + } else { + this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); + } } - for (Map.Entry gameRule : this.gameRules.entrySet()) { - this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); + // gets gamerule values from level.dat after being set + // does not save doDaylightCycle to gamerules + for (String gameRule : this.match.getWorld().getGameRules()) { + if (!gameRule.equals("doDaylightCycle")) { + gameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); + } } } @@ -34,7 +40,11 @@ public ImmutableMap getGameRules() { return ImmutableMap.copyOf(gameRules); } - public String getMapGameRule(String gameRule) { - return mapGameRules.get(gameRule); + public String getGameRule(String gameRule) { + return gameRules.get(gameRule); + } + + public boolean getDoDaylightCycle() { + return doDaylightCycle; } } diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 32dd76e89c..43517c3361 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -264,17 +264,14 @@ public void lockFireTick(final MatchLoadEvent event) { event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(false)); } - // if no doFireTick is found, then use doFireTick setting saved in world @EventHandler public void unlockFireTick(final MatchStartEvent event) { - String oldFireTick = - event.getMatch().needModule(GameRulesMatchModule.class).getMapGameRule(DO_FIRE_TICK); - String newFireTick = - event.getMatch().needModule(GameRulesMatchModule.class).getGameRules().get(DO_FIRE_TICK); event .getMatch() .getWorld() - .setGameRuleValue(DO_FIRE_TICK, newFireTick != null ? newFireTick : oldFireTick); + .setGameRuleValue( + DO_FIRE_TICK, + event.getMatch().needModule(GameRulesMatchModule.class).getGameRule(DO_FIRE_TICK)); } @EventHandler @@ -296,11 +293,11 @@ public void unlockTime(final MatchStartEvent event) { // if there is a timelock module and it is off, unlock time boolean unlockTime = !event.getMatch().getModule(WorldTimeModule.class).isTimeLocked(); - GameRulesMatchModule gameRulesModule = event.getMatch().getModule(GameRulesMatchModule.class); - if (gameRulesModule != null && gameRulesModule.getGameRules().containsKey(DO_DAYLIGHT_CYCLE)) { - unlockTime = Boolean.parseBoolean(gameRulesModule.getGameRules().get(DO_DAYLIGHT_CYCLE)); + GameRulesMatchModule gameRulesMatchModule = + event.getMatch().getModule(GameRulesMatchModule.class); + if (gameRulesMatchModule != null && gameRulesMatchModule.getDoDaylightCycle()) { + unlockTime = gameRulesMatchModule.getDoDaylightCycle(); } - event.getMatch().getWorld().setGameRuleValue(DO_DAYLIGHT_CYCLE, Boolean.toString(unlockTime)); } From 6fe2a9b26442c00f25385c299477d59d09ba610f Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 11 Jun 2021 23:56:51 -0600 Subject: [PATCH 10/18] Simplify evaluation Signed-off-by: Patrick --- .../main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index b2adff48ed..289979e638 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -20,10 +20,9 @@ public GameRulesMatchModule(Match match, Map gameRules) { @Override public void load() { for (Map.Entry gameRule : this.gameRules.entrySet()) { + this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); if (gameRule.getKey().equals("doDaylightCycle")) { doDaylightCycle = Boolean.parseBoolean(gameRule.getValue()); - } else { - this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); } } From 1035c6e34c106629bbdf9fc5a457d95741984447 Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 12 Jun 2021 21:29:42 -0600 Subject: [PATCH 11/18] Fix daylightcycle evaluation Signed-off-by: Patrick --- .../java/tc/oc/pgm/gamerules/GameRulesMatchModule.java | 8 -------- core/src/main/java/tc/oc/pgm/listeners/PGMListener.java | 5 +++-- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index 289979e638..cfc61a1d31 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -10,7 +10,6 @@ public class GameRulesMatchModule implements MatchModule { private final Match match; private final Map gameRules; - private boolean doDaylightCycle = false; public GameRulesMatchModule(Match match, Map gameRules) { this.match = match; @@ -21,9 +20,6 @@ public GameRulesMatchModule(Match match, Map gameRules) { public void load() { for (Map.Entry gameRule : this.gameRules.entrySet()) { this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); - if (gameRule.getKey().equals("doDaylightCycle")) { - doDaylightCycle = Boolean.parseBoolean(gameRule.getValue()); - } } // gets gamerule values from level.dat after being set @@ -42,8 +38,4 @@ public ImmutableMap getGameRules() { public String getGameRule(String gameRule) { return gameRules.get(gameRule); } - - public boolean getDoDaylightCycle() { - return doDaylightCycle; - } } diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 43517c3361..917a45ce25 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -295,8 +295,9 @@ public void unlockTime(final MatchStartEvent event) { GameRulesMatchModule gameRulesMatchModule = event.getMatch().getModule(GameRulesMatchModule.class); - if (gameRulesMatchModule != null && gameRulesMatchModule.getDoDaylightCycle()) { - unlockTime = gameRulesMatchModule.getDoDaylightCycle(); + if (gameRulesMatchModule != null + && Boolean.parseBoolean(gameRulesMatchModule.getGameRule(DO_DAYLIGHT_CYCLE))) { + unlockTime = true; } event.getMatch().getWorld().setGameRuleValue(DO_DAYLIGHT_CYCLE, Boolean.toString(unlockTime)); } From bf743a24a506aa5b9c163ce19dda700361dd5cfb Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 12 Jun 2021 21:34:33 -0600 Subject: [PATCH 12/18] Remove getGameRules function Signed-off-by: Patrick --- .../java/tc/oc/pgm/gamerules/GameRulesMatchModule.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index cfc61a1d31..40b33a7334 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -1,7 +1,6 @@ package tc.oc.pgm.gamerules; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; import java.util.Map; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchModule; @@ -23,7 +22,7 @@ public void load() { } // gets gamerule values from level.dat after being set - // does not save doDaylightCycle to gamerules + // does not save doDaylightCycle to gameRules for (String gameRule : this.match.getWorld().getGameRules()) { if (!gameRule.equals("doDaylightCycle")) { gameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); @@ -31,10 +30,6 @@ public void load() { } } - public ImmutableMap getGameRules() { - return ImmutableMap.copyOf(gameRules); - } - public String getGameRule(String gameRule) { return gameRules.get(gameRule); } From 50d08712ef5aa19fd4426f98f5cf2e25c300342e Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 15 Jul 2021 19:56:32 -0600 Subject: [PATCH 13/18] Add epic comment Signed-off-by: Patrick --- .../main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index 40b33a7334..bc1584d0ad 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -21,8 +21,9 @@ public void load() { this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); } - // gets gamerule values from level.dat after being set - // does not save doDaylightCycle to gameRules + /* Gets gamerule values from level.dat after being set + Maps have doDaylightCycle set in XML to be turned on, so doDayLightCycle from level.dat is not saved + */ for (String gameRule : this.match.getWorld().getGameRules()) { if (!gameRule.equals("doDaylightCycle")) { gameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); From 00ac84e8ef0bc611d1eec2f0046f04916bab1a15 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 15 Jul 2021 20:37:19 -0600 Subject: [PATCH 14/18] Add GameRule eneum, update PGMListener to work with eneum Signed-off-by: Patrick --- .../main/java/tc/oc/pgm/api/map/GameRule.java | 40 +++++++++++++++++++ .../java/tc/oc/pgm/listeners/PGMListener.java | 38 +++++++++++++----- 2 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 core/src/main/java/tc/oc/pgm/api/map/GameRule.java diff --git a/core/src/main/java/tc/oc/pgm/api/map/GameRule.java b/core/src/main/java/tc/oc/pgm/api/map/GameRule.java new file mode 100644 index 0000000000..32cafb8dd1 --- /dev/null +++ b/core/src/main/java/tc/oc/pgm/api/map/GameRule.java @@ -0,0 +1,40 @@ +package tc.oc.pgm.api.map; + +public enum GameRule { + DO_DAYLIGHT_CYCLE("doDaylightCycle"), + DO_FIRE_TICK("doFireTick"), + DO_MOB_LOOT("doMobLoot"), + DO_TILE_DROPS("doTileDrops"), + MOB_GRIEFING("mobGriefing"), + NATURAL_REGENERATION("naturalRegeneration"); + + /* Unsupported Gamerules: + doMobSpawning + keepInventory + commandBlockOutput + logAdminCommands + randomTickSpeed + reducedDebugInfo + sendCommandFeedback + showDeathMessages + */ + + private final String id; + + GameRule(String id) { + this.id = id; + } + + public static GameRule byId(String gameRuleID) { + for (GameRule gameRule : GameRule.values()) { + if (gameRule.getId().equals(gameRuleID)) { + return gameRule; + } + } + return null; + } + + public String getId() { + return id; + } +} diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 917a45ce25..1f3355529c 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -39,6 +39,7 @@ import tc.oc.pgm.api.PGM; import tc.oc.pgm.api.Permissions; import tc.oc.pgm.api.event.BlockTransformEvent; +import tc.oc.pgm.api.map.GameRule; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchManager; import tc.oc.pgm.api.match.event.MatchFinishEvent; @@ -60,8 +61,6 @@ import tc.oc.pgm.util.text.TextTranslations; public class PGMListener implements Listener { - private static final String DO_FIRE_TICK = "doFireTick"; - private static final String DO_DAYLIGHT_CYCLE = "doDaylightCycle"; /* 1000 /time set day 6000 noon, sun is at its peak @@ -261,7 +260,10 @@ public void handleItemPickup(final PlayerPickupItemEvent event) { @EventHandler public void lockFireTick(final MatchLoadEvent event) { - event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(false)); + event + .getMatch() + .getWorld() + .setGameRuleValue(GameRule.DO_FIRE_TICK.getId(), Boolean.toString(false)); } @EventHandler @@ -270,13 +272,19 @@ public void unlockFireTick(final MatchStartEvent event) { .getMatch() .getWorld() .setGameRuleValue( - DO_FIRE_TICK, - event.getMatch().needModule(GameRulesMatchModule.class).getGameRule(DO_FIRE_TICK)); + GameRule.DO_FIRE_TICK.getId(), + event + .getMatch() + .needModule(GameRulesMatchModule.class) + .getGameRule(GameRule.DO_FIRE_TICK.getId())); } @EventHandler public void lockFireTick(final MatchFinishEvent event) { - event.getMatch().getWorld().setGameRuleValue(DO_FIRE_TICK, Boolean.toString(false)); + event + .getMatch() + .getWorld() + .setGameRuleValue(GameRule.DO_FIRE_TICK.getId(), Boolean.toString(false)); } // @@ -285,7 +293,10 @@ public void lockFireTick(final MatchFinishEvent event) { // @EventHandler public void lockTime(final MatchLoadEvent event) { - event.getMatch().getWorld().setGameRuleValue(DO_DAYLIGHT_CYCLE, Boolean.toString(false)); + event + .getMatch() + .getWorld() + .setGameRuleValue(GameRule.DO_DAYLIGHT_CYCLE.getId(), Boolean.toString(false)); } @EventHandler @@ -296,15 +307,22 @@ public void unlockTime(final MatchStartEvent event) { GameRulesMatchModule gameRulesMatchModule = event.getMatch().getModule(GameRulesMatchModule.class); if (gameRulesMatchModule != null - && Boolean.parseBoolean(gameRulesMatchModule.getGameRule(DO_DAYLIGHT_CYCLE))) { + && Boolean.parseBoolean( + gameRulesMatchModule.getGameRule(GameRule.DO_DAYLIGHT_CYCLE.getId()))) { unlockTime = true; } - event.getMatch().getWorld().setGameRuleValue(DO_DAYLIGHT_CYCLE, Boolean.toString(unlockTime)); + event + .getMatch() + .getWorld() + .setGameRuleValue(GameRule.DO_DAYLIGHT_CYCLE.getId(), Boolean.toString(unlockTime)); } @EventHandler public void lockTime(final MatchFinishEvent event) { - event.getMatch().getWorld().setGameRuleValue(DO_DAYLIGHT_CYCLE, Boolean.toString(false)); + event + .getMatch() + .getWorld() + .setGameRuleValue(GameRule.DO_DAYLIGHT_CYCLE.getId(), Boolean.toString(false)); } @EventHandler From ba42dcfe5810fbfb38d999b3d817c3a132b7c40b Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 15 Jul 2021 20:51:57 -0600 Subject: [PATCH 15/18] Fix Comment Signed-off-by: Patrick --- .../src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index bc1584d0ad..7ee40420fa 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -22,7 +22,7 @@ public void load() { } /* Gets gamerule values from level.dat after being set - Maps have doDaylightCycle set in XML to be turned on, so doDayLightCycle from level.dat is not saved + Maps need doDaylightCycle set in XML for it to be turned on, so doDayLightCycle from level.dat is not saved */ for (String gameRule : this.match.getWorld().getGameRules()) { if (!gameRule.equals("doDaylightCycle")) { From ab0c1c3e877b038504cb16754e6d5790a2028c58 Mon Sep 17 00:00:00 2001 From: Patrick Date: Mon, 2 Aug 2021 20:39:38 -0600 Subject: [PATCH 16/18] Fix evaluation of gamemodes from level.dat and XML Signed-off-by: Patrick --- .../main/java/tc/oc/pgm/api/map/GameRule.java | 4 ++-- .../pgm/gamerules/GameRulesMatchModule.java | 20 ++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/api/map/GameRule.java b/core/src/main/java/tc/oc/pgm/api/map/GameRule.java index 32cafb8dd1..8457ae2f2d 100644 --- a/core/src/main/java/tc/oc/pgm/api/map/GameRule.java +++ b/core/src/main/java/tc/oc/pgm/api/map/GameRule.java @@ -25,9 +25,9 @@ public enum GameRule { this.id = id; } - public static GameRule byId(String gameRuleID) { + public static GameRule byId(String gameRuleId) { for (GameRule gameRule : GameRule.values()) { - if (gameRule.getId().equals(gameRuleID)) { + if (gameRule.getId().equals(gameRuleId)) { return gameRule; } } diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index 7ee40420fa..9429afb881 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -2,8 +2,10 @@ import com.google.common.base.Preconditions; import java.util.Map; +import tc.oc.pgm.api.map.GameRule; import tc.oc.pgm.api.match.Match; import tc.oc.pgm.api.match.MatchModule; +import tc.oc.pgm.modules.WorldTimeModule; public class GameRulesMatchModule implements MatchModule { @@ -17,17 +19,21 @@ public GameRulesMatchModule(Match match, Map gameRules) { @Override public void load() { + // saves gamerules from world (level.dat) as fallback + for (String gameRule : this.match.getWorld().getGameRules()) { + gameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); + } + + // saves and sets gamerules from XML for (Map.Entry gameRule : this.gameRules.entrySet()) { + gameRules.put(gameRule.getKey(), this.match.getWorld().getGameRuleValue(gameRule.getValue())); this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); } - /* Gets gamerule values from level.dat after being set - Maps need doDaylightCycle set in XML for it to be turned on, so doDayLightCycle from level.dat is not saved - */ - for (String gameRule : this.match.getWorld().getGameRules()) { - if (!gameRule.equals("doDaylightCycle")) { - gameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); - } + // if timelock is off, save doDayLightCycle as true + WorldTimeModule wtm = this.match.getModule(WorldTimeModule.class); + if (wtm != null && !wtm.isTimeLocked()) { + gameRules.put(GameRule.DO_DAYLIGHT_CYCLE.getId(), Boolean.toString(true)); } } From b3a397e4ee66fbb2d235a2e0eda7398b6a124f59 Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 28 Aug 2021 17:58:12 -0600 Subject: [PATCH 17/18] Fix application order of gamerules in XML Signed-off-by: Patrick --- .../tc/oc/pgm/gamerules/GameRulesMatchModule.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java index 9429afb881..dc20a82111 100644 --- a/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java +++ b/core/src/main/java/tc/oc/pgm/gamerules/GameRulesMatchModule.java @@ -19,17 +19,17 @@ public GameRulesMatchModule(Match match, Map gameRules) { @Override public void load() { - // saves gamerules from world (level.dat) as fallback - for (String gameRule : this.match.getWorld().getGameRules()) { - gameRules.put(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); - } - // saves and sets gamerules from XML for (Map.Entry gameRule : this.gameRules.entrySet()) { - gameRules.put(gameRule.getKey(), this.match.getWorld().getGameRuleValue(gameRule.getValue())); + gameRules.put(gameRule.getKey(), gameRule.getValue()); this.match.getWorld().setGameRuleValue(gameRule.getKey(), gameRule.getValue()); } + // saves gamerules from world (level.dat) as fallback + for (String gameRule : this.match.getWorld().getGameRules()) { + gameRules.putIfAbsent(gameRule, this.match.getWorld().getGameRuleValue(gameRule)); + } + // if timelock is off, save doDayLightCycle as true WorldTimeModule wtm = this.match.getModule(WorldTimeModule.class); if (wtm != null && !wtm.isTimeLocked()) { From 84caf3db1432d9fa1f31c2af78e09a05d2743c8e Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 28 Aug 2021 20:19:58 -0600 Subject: [PATCH 18/18] Add functions for timesetting Signed-off-by: Patrick --- .../java/tc/oc/pgm/listeners/PGMListener.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java index 1f3355529c..641b062e6c 100644 --- a/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java +++ b/core/src/main/java/tc/oc/pgm/listeners/PGMListener.java @@ -260,10 +260,7 @@ public void handleItemPickup(final PlayerPickupItemEvent event) { @EventHandler public void lockFireTick(final MatchLoadEvent event) { - event - .getMatch() - .getWorld() - .setGameRuleValue(GameRule.DO_FIRE_TICK.getId(), Boolean.toString(false)); + setGameRule(event, GameRule.DO_FIRE_TICK.getId(), false); } @EventHandler @@ -281,10 +278,7 @@ public void unlockFireTick(final MatchStartEvent event) { @EventHandler public void lockFireTick(final MatchFinishEvent event) { - event - .getMatch() - .getWorld() - .setGameRuleValue(GameRule.DO_FIRE_TICK.getId(), Boolean.toString(false)); + setGameRule(event, GameRule.DO_DAYLIGHT_CYCLE.getId(), false); } // @@ -293,10 +287,7 @@ public void lockFireTick(final MatchFinishEvent event) { // @EventHandler public void lockTime(final MatchLoadEvent event) { - event - .getMatch() - .getWorld() - .setGameRuleValue(GameRule.DO_DAYLIGHT_CYCLE.getId(), Boolean.toString(false)); + setGameRule(event, GameRule.DO_DAYLIGHT_CYCLE.getId(), false); } @EventHandler @@ -319,10 +310,7 @@ public void unlockTime(final MatchStartEvent event) { @EventHandler public void lockTime(final MatchFinishEvent event) { - event - .getMatch() - .getWorld() - .setGameRuleValue(GameRule.DO_DAYLIGHT_CYCLE.getId(), Boolean.toString(false)); + setGameRule(event, GameRule.DO_DAYLIGHT_CYCLE.getId(), false); } @EventHandler @@ -445,4 +433,12 @@ public void storeSkinOnMatchJoin(PlayerJoinMatchEvent event) { final MatchPlayer player = event.getPlayer(); PGM.get().getDatastore().setSkin(player.getId(), NMSHacks.getPlayerSkin(player.getBukkit())); } + + public void setGameRule(MatchLoadEvent event, String gameRule, boolean gameRuleValue) { + event.getMatch().getWorld().setGameRuleValue(gameRule, Boolean.toString(gameRuleValue)); + } + + public void setGameRule(MatchFinishEvent event, String gameRule, boolean gameRuleValue) { + event.getMatch().getWorld().setGameRuleValue(gameRule, Boolean.toString(gameRuleValue)); + } }