mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-01 20:50:41 +01:00
Added WorldGameRuleChangeEvent
This commit is contained in:
parent
086d201184
commit
f3ba3dee05
2 changed files with 211 additions and 0 deletions
103
Spigot-API-Patches/0252-Added-WorldGameRuleChangeEvent.patch
Normal file
103
Spigot-API-Patches/0252-Added-WorldGameRuleChangeEvent.patch
Normal file
|
@ -0,0 +1,103 @@
|
|||
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/io/papermc/paper/event/world/WorldGameRuleChangeEvent.java b/src/main/java/io/papermc/paper/event/world/WorldGameRuleChangeEvent.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..20c25a0f9d65188402e8bb3981348bc6462904bf
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/io/papermc/paper/event/world/WorldGameRuleChangeEvent.java
|
||||
@@ -0,0 +1,91 @@
|
||||
+package io.papermc.paper.event.world;
|
||||
+
|
||||
+import org.bukkit.GameRule;
|
||||
+import org.bukkit.World;
|
||||
+import org.bukkit.command.CommandSender;
|
||||
+import org.bukkit.entity.Player;
|
||||
+import org.bukkit.event.Cancellable;
|
||||
+import org.bukkit.event.HandlerList;
|
||||
+import org.bukkit.event.world.WorldEvent;
|
||||
+import org.jetbrains.annotations.NotNull;
|
||||
+import org.jetbrains.annotations.Nullable;
|
||||
+
|
||||
+/**
|
||||
+ * Called when a world's gamerule is changed, either by command or by api.
|
||||
+ */
|
||||
+public class WorldGameRuleChangeEvent extends WorldEvent implements Cancellable {
|
||||
+
|
||||
+ private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||
+
|
||||
+ private final CommandSender commandSender;
|
||||
+ private final GameRule<?> gameRule;
|
||||
+ private String value;
|
||||
+ private boolean cancelled;
|
||||
+
|
||||
+ public WorldGameRuleChangeEvent(@NotNull World world, @Nullable CommandSender commandSender, @NotNull GameRule<?> gameRule, @NotNull String value) {
|
||||
+ super(world);
|
||||
+ this.commandSender = commandSender;
|
||||
+ this.gameRule = gameRule;
|
||||
+ this.value = value;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Gets the command sender associated with this event.
|
||||
+ *
|
||||
+ * @return {@code null} if the gamerule was changed via api, otherwise the {@link CommandSender}.
|
||||
+ */
|
||||
+ @Nullable
|
||||
+ public CommandSender getCommandSender() {
|
||||
+ return commandSender;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Gets the game rule associated with this event.
|
||||
+ *
|
||||
+ * @return the gamerule being changed.
|
||||
+ */
|
||||
+ @NotNull
|
||||
+ public GameRule<?> getGameRule() {
|
||||
+ return gameRule;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Gets the new value of the gamerule.
|
||||
+ *
|
||||
+ * @return the new value of the gamerule.
|
||||
+ */
|
||||
+ @NotNull
|
||||
+ public String getValue() {
|
||||
+ return value;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Sets the new value of this gamerule.
|
||||
+ *
|
||||
+ * @param value the new value of the gamerule.
|
||||
+ */
|
||||
+ public void setValue(@NotNull String value) {
|
||||
+ this.value = value;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isCancelled() {
|
||||
+ return cancelled;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setCancelled(boolean cancel) {
|
||||
+ this.cancelled = cancel;
|
||||
+ }
|
||||
+
|
||||
+ @NotNull
|
||||
+ @Override
|
||||
+ public HandlerList getHandlers() {
|
||||
+ return HANDLER_LIST;
|
||||
+ }
|
||||
+
|
||||
+ @NotNull
|
||||
+ public static HandlerList getHandlerList() {
|
||||
+ return HANDLER_LIST;
|
||||
+ }
|
||||
+}
|
108
Spigot-Server-Patches/0638-Added-WorldGameRuleChangeEvent.patch
Normal file
108
Spigot-Server-Patches/0638-Added-WorldGameRuleChangeEvent.patch
Normal file
|
@ -0,0 +1,108 @@
|
|||
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 b71316cce3bdbf3485be456f0260c6b3463cff8e..0314cb1270803265dc4bf4268697b09aabf2c612 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -2345,8 +2345,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;
|
||||
}
|
||||
@@ -2381,8 +2386,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;
|
||||
}
|
Loading…
Reference in a new issue