| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  | 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/commands/GameRuleCommand.java b/src/main/java/net/minecraft/server/commands/GameRuleCommand.java
 | 
					
						
							|  |  |  | index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
					
						
							|  |  |  | --- a/src/main/java/net/minecraft/server/commands/GameRuleCommand.java
 | 
					
						
							|  |  |  | +++ b/src/main/java/net/minecraft/server/commands/GameRuleCommand.java
 | 
					
						
							|  |  |  | @@ -0,0 +0,0 @@ public class GameRuleCommand {
 | 
					
						
							|  |  |  |          CommandSourceStack commandlistenerwrapper = (CommandSourceStack) context.getSource(); | 
					
						
							|  |  |  |          T t0 = commandlistenerwrapper.getLevel().getGameRules().getRule(key); // CraftBukkit | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  | -        t0.setFromArgument(context, "value");
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  | +        t0.setFromArgument(context, "value", key); // Paper
 | 
					
						
							| 
									
										
										
										
											2022-06-08 00:30:41 -07:00
										 |  |  |          commandlistenerwrapper.sendSuccess(Component.translatable("commands.gamerule.set", key.getId(), t0.toString()), true); | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |          return t0.getCommandResult(); | 
					
						
							|  |  |  |      } | 
					
						
							|  |  |  | diff --git a/src/main/java/net/minecraft/world/level/GameRules.java b/src/main/java/net/minecraft/world/level/GameRules.java
 | 
					
						
							|  |  |  | index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
					
						
							|  |  |  | --- a/src/main/java/net/minecraft/world/level/GameRules.java
 | 
					
						
							|  |  |  | +++ b/src/main/java/net/minecraft/world/level/GameRules.java
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  | @@ -0,0 +0,0 @@ public class GameRules {
 | 
					
						
							|  |  |  |              this.type = type; | 
					
						
							|  |  |  |          } | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |   | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  | -        protected abstract void updateFromArgument(CommandContext<CommandSourceStack> context, String name);
 | 
					
						
							|  |  |  | +        protected abstract void updateFromArgument(CommandContext<CommandSourceStack> context, String name, GameRules.Key<T> gameRuleKey); // Paper
 | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  | -        public void setFromArgument(CommandContext<CommandSourceStack> context, String name) {
 | 
					
						
							|  |  |  | -            this.updateFromArgument(context, name);
 | 
					
						
							|  |  |  | +        public void setFromArgument(CommandContext<CommandSourceStack> context, String name, GameRules.Key<T> gameRuleKey) { // Paper
 | 
					
						
							|  |  |  | +            this.updateFromArgument(context, name, gameRuleKey); // Paper
 | 
					
						
							|  |  |  |              this.onChanged(((CommandSourceStack) context.getSource()).getServer()); | 
					
						
							|  |  |  |          } | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |   | 
					
						
							|  |  |  | @@ -0,0 +0,0 @@ public class GameRules {
 | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |          @Override | 
					
						
							|  |  |  | -        protected void updateFromArgument(CommandContext<CommandSourceStack> context, String name) {
 | 
					
						
							|  |  |  | -            this.value = BoolArgumentType.getBool(context, name);
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  | +        protected void updateFromArgument(CommandContext<CommandSourceStack> context, String name, GameRules.Key<BooleanValue> gameRuleKey) { // Paper start
 | 
					
						
							|  |  |  | +            io.papermc.paper.event.world.WorldGameRuleChangeEvent event = new io.papermc.paper.event.world.WorldGameRuleChangeEvent(context.getSource().getBukkitWorld(), context.getSource().getBukkitSender(), (org.bukkit.GameRule<Boolean>) org.bukkit.GameRule.getByName(gameRuleKey.toString()), String.valueOf(BoolArgumentType.getBool(context, name)));
 | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  | +            if (!event.callEvent()) return;
 | 
					
						
							|  |  |  | +            this.value = Boolean.parseBoolean(event.getValue());
 | 
					
						
							|  |  |  | +            // Paper end
 | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |          public boolean get() { | 
					
						
							|  |  |  | @@ -0,0 +0,0 @@ public class GameRules {
 | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |          @Override | 
					
						
							|  |  |  | -        protected void updateFromArgument(CommandContext<CommandSourceStack> context, String name) {
 | 
					
						
							|  |  |  | -            this.value = IntegerArgumentType.getInteger(context, name);
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  | +        protected void updateFromArgument(CommandContext<CommandSourceStack> context, String name, GameRules.Key<IntegerValue> gameRuleKey) { // Paper start
 | 
					
						
							|  |  |  | +            io.papermc.paper.event.world.WorldGameRuleChangeEvent event = new io.papermc.paper.event.world.WorldGameRuleChangeEvent(context.getSource().getBukkitWorld(), context.getSource().getBukkitSender(), (org.bukkit.GameRule<Integer>) org.bukkit.GameRule.getByName(gameRuleKey.toString()), String.valueOf(IntegerArgumentType.getInteger(context, name)));
 | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  | +            if (!event.callEvent()) return;
 | 
					
						
							|  |  |  | +            this.value = Integer.parseInt(event.getValue());
 | 
					
						
							|  |  |  | +            // Paper end
 | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |          public int get() { | 
					
						
							|  |  |  | diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 | 
					
						
							|  |  |  | index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
					
						
							|  |  |  | --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 | 
					
						
							|  |  |  | +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 | 
					
						
							| 
									
										
										
										
											2021-08-25 09:59:26 +02:00
										 |  |  | @@ -0,0 +0,0 @@ public class CraftWorld extends CraftRegionAccessor implements World {
 | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |   | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  |          if (!this.isGameRule(rule)) return false; | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |   | 
					
						
							|  |  |  | +        // 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
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  |          GameRules.Value<?> handle = this.getHandle().getGameRules().getRule(CraftWorld.getGameRulesNMS().get(rule)); | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  | -        handle.deserialize(value);
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  | +        handle.deserialize(event.getValue()); // Paper
 | 
					
						
							|  |  |  |          handle.onChanged(this.getHandle().getServer()); | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |          return true; | 
					
						
							|  |  |  |      } | 
					
						
							| 
									
										
										
										
											2021-08-25 09:59:26 +02:00
										 |  |  | @@ -0,0 +0,0 @@ public class CraftWorld extends CraftRegionAccessor implements World {
 | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |   | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  |          if (!this.isGameRule(rule.getName())) return false; | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |   | 
					
						
							|  |  |  | +        // 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
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  |          GameRules.Value<?> handle = this.getHandle().getGameRules().getRule(CraftWorld.getGameRulesNMS().get(rule.getName())); | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  | -        handle.deserialize(newValue.toString());
 | 
					
						
							| 
									
										
										
										
											2021-06-14 11:50:22 -07:00
										 |  |  | +        handle.deserialize(event.getValue()); // Paper
 | 
					
						
							|  |  |  |          handle.onChanged(this.getHandle().getServer()); | 
					
						
							| 
									
										
										
										
											2021-06-11 14:02:28 +02:00
										 |  |  |          return true; | 
					
						
							|  |  |  |      } |