From be8314cf6389aa4c0bdcef24b30c13ed47458d9d Mon Sep 17 00:00:00 2001 From: Steven Lawson Date: Mon, 29 Jul 2013 21:09:20 -0400 Subject: [PATCH] Added TFM_GameRuleHandler for easy setting of game rule parameters. --- appinfo.properties | 6 +- buildnumber.properties | 4 +- src/config.yml | 1 + .../Commands/Command_firespread.java | 14 +-- .../Commands/Command_moblimiter.java | 3 + .../TotalFreedomMod/TFM_GameRuleHandler.java | 118 ++++++++++++++++++ .../TotalFreedomMod/TFM_Heartbeat.java | 17 --- .../TotalFreedomMod/TotalFreedomMod.java | 16 ++- 8 files changed, 142 insertions(+), 37 deletions(-) create mode 100644 src/me/StevenLawson/TotalFreedomMod/TFM_GameRuleHandler.java diff --git a/appinfo.properties b/appinfo.properties index f5ba9de1..c6ddfc3b 100644 --- a/appinfo.properties +++ b/appinfo.properties @@ -1,6 +1,6 @@ -#Sun, 28 Jul 2013 20:48:17 -0400 +#Mon, 29 Jul 2013 20:32:38 -0400 program.VERSION=2.21 -program.BUILDNUM=355 -program.BUILDDATE=07/28/2013 08\:48 PM +program.BUILDNUM=370 +program.BUILDDATE=07/29/2013 08\:32 PM diff --git a/buildnumber.properties b/buildnumber.properties index 3d573ea1..e5310d12 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sun Jul 28 20:48:17 EDT 2013 -build.number=356 +#Mon Jul 29 20:32:38 EDT 2013 +build.number=371 diff --git a/src/config.yml b/src/config.yml index 2c9b9abe..c2b28173 100644 --- a/src/config.yml +++ b/src/config.yml @@ -53,6 +53,7 @@ blocked_commands: - n:b:/time:Server-side time changing is disabled. Please use /ptime to set your own personal time. - n:b:/md:This server now uses DisguiseCraft instead of MobDisguise. Type /d to disguise and /u to undisguise. - n:b:/gamemode:Use /creative and /survival to set your gamemode. + - n:b:/gamerule:_ - n:b:/ban:_ - n:b:/pardon:_ - n:b:/toggledownfall:_ diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_firespread.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_firespread.java index d390345f..bd9d12e9 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_firespread.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_firespread.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.Commands; +import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -17,16 +18,9 @@ public class Command_firespread extends TFM_Command return false; } - if (args[0].equalsIgnoreCase("on")) - { - TotalFreedomMod.allowFireSpread = true; - playerMsg("Fire spread is now enabled."); - } - else - { - TotalFreedomMod.allowFireSpread = false; - playerMsg("Fire spread is now disabled."); - } + playerMsg("Fire spread is now " + ((TotalFreedomMod.allowFireSpread = !args[0].equalsIgnoreCase("off")) ? "enabled" : "disabled") + "."); + + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, TotalFreedomMod.allowFireSpread); return true; } diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_moblimiter.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_moblimiter.java index 88cc32b0..b4e309d6 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_moblimiter.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_moblimiter.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.Commands; +import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -74,6 +75,8 @@ public class Command_moblimiter extends TFM_Command playerMsg("Moblimiter is disabled. No mob restrictions are in effect."); } + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !TotalFreedomMod.mobLimiterEnabled); + return true; } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_GameRuleHandler.java b/src/me/StevenLawson/TotalFreedomMod/TFM_GameRuleHandler.java new file mode 100644 index 00000000..1e172420 --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_GameRuleHandler.java @@ -0,0 +1,118 @@ +package me.StevenLawson.TotalFreedomMod; + +import java.util.EnumMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.bukkit.Bukkit; +import org.bukkit.World; + +public class TFM_GameRuleHandler +{ + private static final EnumMap GAME_RULES = new EnumMap(TFM_GameRule.class); + + static + { + for (TFM_GameRule gameRule : TFM_GameRule.values()) + { + GAME_RULES.put(gameRule, gameRule.getDefaultValue()); + } + } + + private TFM_GameRuleHandler() + { + throw new AssertionError(); + } + + public static void setGameRule(TFM_GameRule gameRule, boolean value) + { + setGameRule(gameRule, value, true); + } + + public static void setGameRule(TFM_GameRule gameRule, boolean value, boolean doCommit) + { + GAME_RULES.put(gameRule, TFM_GameRule_Value.fromBoolean(value)); + if (doCommit) + { + commitGameRules(); + } + } + + public static void commitGameRules() + { + List worlds = Bukkit.getWorlds(); + Iterator> it = GAME_RULES.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry gameRuleEntry = it.next(); + String gameRuleName = gameRuleEntry.getKey().getGameRuleName(); + String gameRuleValue = gameRuleEntry.getValue().toString(); + for (World world : worlds) + { + world.setGameRuleValue(gameRuleName, gameRuleValue); + if (gameRuleEntry.getKey() == TFM_GameRule.DO_DAYLIGHT_CYCLE && !gameRuleEntry.getValue().toBoolean()) + { + TFM_Util.setWorldTime(world, 6000L); + } + } + } + } + + public enum TFM_GameRule + { + DO_FIRE_TICK("doFireTick", TFM_GameRule_Value.TRUE), + MOB_GRIEFING("mobGriefing", TFM_GameRule_Value.TRUE), + KEEP_INVENTORY("keepInventory", TFM_GameRule_Value.FALSE), + DO_MOB_SPAWNING("doMobSpawning", TFM_GameRule_Value.TRUE), + DO_MOB_LOOT("doMobLoot", TFM_GameRule_Value.TRUE), + DO_TILE_DROPS("doTileDrops", TFM_GameRule_Value.TRUE), + COMMAND_BLOCK_OUTPUT("commandBlockOutput", TFM_GameRule_Value.TRUE), + NATURAL_REGENERATION("naturalRegeneration", TFM_GameRule_Value.TRUE), + DO_DAYLIGHT_CYCLE("doDaylightCycle", TFM_GameRule_Value.TRUE); + private final String gameRuleName; + private final TFM_GameRule_Value defaultValue; + + private TFM_GameRule(String gameRuleName, TFM_GameRule_Value defaultValue) + { + this.gameRuleName = gameRuleName; + this.defaultValue = defaultValue; + } + + public String getGameRuleName() + { + return gameRuleName; + } + + public TFM_GameRule_Value getDefaultValue() + { + return defaultValue; + } + } + + public enum TFM_GameRule_Value + { + TRUE("true"), FALSE("false"); + private final String value; + + private TFM_GameRule_Value(String value) + { + this.value = value; + } + + @Override + public String toString() + { + return this.value; + } + + public boolean toBoolean() + { + return (this.value.equals(TFM_GameRule_Value.TRUE.value) ? true : false); + } + + public static TFM_GameRule_Value fromBoolean(boolean in) + { + return (in ? TFM_GameRule_Value.TRUE : TFM_GameRule_Value.FALSE); + } + } +} diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java index d29c1aa6..d39e692d 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Heartbeat.java @@ -32,23 +32,6 @@ public class TFM_Heartbeat extends BukkitRunnable TFM_Util.wipeEntities(!TotalFreedomMod.allowExplosions, false); } - if (TotalFreedomMod.disableNight) - { - try - { - for (World world : server.getWorlds()) - { - if (world.getTime() > 12000L) - { - TFM_Util.setWorldTime(world, 1000L); - } - } - } - catch (NullPointerException ex) - { - } - } - if (TotalFreedomMod.disableWeather) { for (World world : server.getWorlds()) diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index f7ae94d4..d3ecdb48 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -6,11 +6,7 @@ import java.io.InputStream; import java.util.*; import me.StevenLawson.TotalFreedomMod.Commands.TFM_Command; import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader; -import me.StevenLawson.TotalFreedomMod.Listener.TFM_BlockListener; -import me.StevenLawson.TotalFreedomMod.Listener.TFM_EntityListener; -import me.StevenLawson.TotalFreedomMod.Listener.TFM_PlayerListener; -import me.StevenLawson.TotalFreedomMod.Listener.TFM_ServerListener; -import me.StevenLawson.TotalFreedomMod.Listener.TFM_WeatherListener; +import me.StevenLawson.TotalFreedomMod.Listener.*; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.bukkit.Bukkit; @@ -98,6 +94,16 @@ public class TotalFreedomMod extends JavaPlugin } } + // Initialize game rules + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_DAYLIGHT_CYCLE, !disableNight, false); + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, allowFireSpread, false); + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_MOB_LOOT, false, false); + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !mobLimiterEnabled, false); + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_TILE_DROPS, false, false); + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.MOB_GRIEFING, false, false); + TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.NATURAL_REGENERATION, true, false); + TFM_GameRuleHandler.commitGameRules(); + if (TotalFreedomMod.protectedAreasEnabled) { TFM_ProtectedArea.loadProtectedAreas();