PaperMC/Spigot-Server-Patches/0636-Added-WorldGameRuleChangeEvent.patch
Aikar 088fa6f28b
[Auto] Updated Upstream (Bukkit/CraftBukkit/Spigot)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
5b289e69 SPIGOT-5778: Added World.getGameTime method

CraftBukkit Changes:
d97d91871 SPIGOT-6347: Nether Portals Default to Nether, even in Nether
8aa6a953f SPIGOT-5778: Added World.getGameTime method

Spigot Changes:
73fb6094 #107: Add async catching to chunk entity add/remove
2021-02-12 18:42:12 -05:00

108 lines
6.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
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<CommandListenerWrapper> commandcontext, String s) {
- this.b = BoolArgumentType.getBool(commandcontext, s);
+ protected void a(CommandContext<CommandListenerWrapper> commandcontext, String s, GameRules.GameRuleKey<GameRuleBoolean> gameRuleKey) { // Paper start
+ WorldGameRuleChangeEvent event = new WorldGameRuleChangeEvent(commandcontext.getSource().getBukkitWorld(), commandcontext.getSource().getBukkitSender(), (org.bukkit.GameRule<Boolean>) 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<CommandListenerWrapper> commandcontext, String s) {
- this.b = IntegerArgumentType.getInteger(commandcontext, s);
+ protected void a(CommandContext<CommandListenerWrapper> commandcontext, String s, GameRules.GameRuleKey<GameRuleInt> gameRuleKey) { // Paper start
+ WorldGameRuleChangeEvent event = new WorldGameRuleChangeEvent(commandcontext.getSource().getBukkitWorld(), commandcontext.getSource().getBukkitSender(), (org.bukkit.GameRule<Integer>) 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<CommandListenerWrapper> commandcontext, String s);
+ protected void updateValue(CommandContext<CommandListenerWrapper> commandcontext, String s, GameRules.GameRuleKey<T> gameRuleKey) { this.a(commandcontext, s, gameRuleKey); } // Paper - OBFHELPER
+ protected abstract void a(CommandContext<CommandListenerWrapper> commandcontext, String s, GameRules.GameRuleKey<T> gameRuleKey); // Paper
- public void b(CommandContext<CommandListenerWrapper> commandcontext, String s) {
- this.a(commandcontext, s);
+ public void setValue(CommandContext<CommandListenerWrapper> commandcontext, String s, GameRules.GameRuleKey<T> gameRuleKey) { this.b(commandcontext, s, gameRuleKey); } // Paper - OBFHELPER
+ public void b(CommandContext<CommandListenerWrapper> commandcontext, String s, GameRules.GameRuleKey<T> 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;
}