From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sun, 20 Dec 2020 16:41:44 -0800 Subject: [PATCH] Added WorldGameRuleChangeEvent diff --git a/src/main/java/net/minecraft/server/CommandGamerule.java b/src/main/java/net/minecraft/server/CommandGamerule.java index 1ae60aae1d2017226c1f3ea39148d24aaf40cdde..f8ce9be8527111786c233c98e45f6d8fe183c70e 100644 --- a/src/main/java/net/minecraft/server/CommandGamerule.java +++ b/src/main/java/net/minecraft/server/CommandGamerule.java @@ -27,7 +27,7 @@ public class CommandGamerule { CommandListenerWrapper commandlistenerwrapper = (CommandListenerWrapper) commandcontext.getSource(); T t0 = commandlistenerwrapper.getWorld().getGameRules().get(gamerules_gamerulekey); // CraftBukkit - t0.b(commandcontext, "value"); + t0.setValue(commandcontext, "value", gamerules_gamerulekey); // Paper commandlistenerwrapper.sendMessage(new ChatMessage("commands.gamerule.set", new Object[]{gamerules_gamerulekey.a(), t0.toString()}), true); return t0.getIntValue(); } diff --git a/src/main/java/net/minecraft/server/GameRules.java b/src/main/java/net/minecraft/server/GameRules.java index b245428604e2a432fa3bab4836a5ca1fb35c3f64..53b40f8947c9380ef57ecc7edca203c5bc894013 100644 --- a/src/main/java/net/minecraft/server/GameRules.java +++ b/src/main/java/net/minecraft/server/GameRules.java @@ -18,6 +18,7 @@ import java.util.function.Supplier; import javax.annotation.Nullable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import io.papermc.paper.event.world.WorldGameRuleChangeEvent; // Paper public class GameRules { @@ -170,8 +171,11 @@ public class GameRules { } @Override - protected void a(CommandContext commandcontext, String s) { - this.b = BoolArgumentType.getBool(commandcontext, s); + protected void a(CommandContext commandcontext, String s, GameRules.GameRuleKey gameRuleKey) { // Paper start + WorldGameRuleChangeEvent event = new WorldGameRuleChangeEvent(commandcontext.getSource().getBukkitWorld(), commandcontext.getSource().getBukkitSender(), (org.bukkit.GameRule) org.bukkit.GameRule.getByName(gameRuleKey.toString()), String.valueOf(BoolArgumentType.getBool(commandcontext, s))); + if (!event.callEvent()) return; + this.b = Boolean.parseBoolean(event.getValue()); + // Paper end } public boolean a() { @@ -230,8 +234,11 @@ public class GameRules { } @Override - protected void a(CommandContext commandcontext, String s) { - this.b = IntegerArgumentType.getInteger(commandcontext, s); + protected void a(CommandContext commandcontext, String s, GameRules.GameRuleKey gameRuleKey) { // Paper start + WorldGameRuleChangeEvent event = new WorldGameRuleChangeEvent(commandcontext.getSource().getBukkitWorld(), commandcontext.getSource().getBukkitSender(), (org.bukkit.GameRule) org.bukkit.GameRule.getByName(gameRuleKey.toString()), String.valueOf(IntegerArgumentType.getInteger(commandcontext, s))); + if (!event.callEvent()) return; + this.b = Integer.parseInt(event.getValue()); + // Paper end } public int a() { @@ -284,10 +291,12 @@ public class GameRules { this.a = gamerules_gameruledefinition; } - protected abstract void a(CommandContext commandcontext, String s); + protected void updateValue(CommandContext commandcontext, String s, GameRules.GameRuleKey gameRuleKey) { this.a(commandcontext, s, gameRuleKey); } // Paper - OBFHELPER + protected abstract void a(CommandContext commandcontext, String s, GameRules.GameRuleKey gameRuleKey); // Paper - public void b(CommandContext commandcontext, String s) { - this.a(commandcontext, s); + public void setValue(CommandContext commandcontext, String s, GameRules.GameRuleKey gameRuleKey) { this.b(commandcontext, s, gameRuleKey); } // Paper - OBFHELPER + public void b(CommandContext commandcontext, String s, GameRules.GameRuleKey gameRuleKey) { // Paper + this.updateValue(commandcontext, s, gameRuleKey); // Paper this.onChange(((CommandListenerWrapper) commandcontext.getSource()).getServer()); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index fe21b612f9bd2cf85670eeffa25998130b543339..22eba9372d334c65d009721e808c958dfc271308 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2350,8 +2350,13 @@ public class CraftWorld implements World { if (!isGameRule(rule)) return false; + // Paper start + GameRule gameRule = GameRule.getByName(rule); + io.papermc.paper.event.world.WorldGameRuleChangeEvent event = new io.papermc.paper.event.world.WorldGameRuleChangeEvent(this, null, gameRule, value); + if (!event.callEvent()) return false; + // Paper end GameRules.GameRuleValue handle = getHandle().getGameRules().get(getGameRulesNMS().get(rule)); - handle.setValue(value); + handle.setValue(event.getValue().toString()); // Paper handle.onChange(getHandle().getMinecraftServer()); return true; } @@ -2386,8 +2391,12 @@ public class CraftWorld implements World { if (!isGameRule(rule.getName())) return false; + // Paper start + io.papermc.paper.event.world.WorldGameRuleChangeEvent event = new io.papermc.paper.event.world.WorldGameRuleChangeEvent(this, null, rule, String.valueOf(newValue)); + if (!event.callEvent()) return false; + // Paper end GameRules.GameRuleValue handle = getHandle().getGameRules().get(getGameRulesNMS().get(rule.getName())); - handle.setValue(newValue.toString()); + handle.setValue(event.getValue().toString()); // Paper handle.onChange(getHandle().getMinecraftServer()); return true; }