From a95e023ed22e4aba25c715d4e11eab680d719487 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Mon, 18 Apr 2022 05:46:21 -0400 Subject: [PATCH] Pass ServerLevel for gamerule callbacks (#7668) --- ...s-ServerLevel-for-gamerule-callbacks.patch | 181 ++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 patches/server/Pass-ServerLevel-for-gamerule-callbacks.patch diff --git a/patches/server/Pass-ServerLevel-for-gamerule-callbacks.patch b/patches/server/Pass-ServerLevel-for-gamerule-callbacks.patch new file mode 100644 index 0000000000..312a041d86 --- /dev/null +++ b/patches/server/Pass-ServerLevel-for-gamerule-callbacks.patch @@ -0,0 +1,181 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> +Date: Sun, 27 Mar 2022 13:51:09 -0400 +Subject: [PATCH] Pass ServerLevel for gamerule callbacks + + +diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java ++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +@@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + + //DedicatedServer.LOGGER.info("Done ({})! For help, type \"help\"", s); // Paper moved to after init + if (dedicatedserverproperties.announcePlayerAchievements != null) { +- ((GameRules.BooleanValue) this.getGameRules().getRule(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)).set(dedicatedserverproperties.announcePlayerAchievements, this); ++ ((GameRules.BooleanValue) this.getGameRules().getRule(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)).set(dedicatedserverproperties.announcePlayerAchievements, null); // Paper + } + + if (dedicatedserverproperties.enableQuery) { +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser + this.player = this.server.getPlayerList().respawn(this.player, false); + if (this.server.isHardcore()) { + this.player.setGameMode(GameType.SPECTATOR, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.HARDCORE_DEATH, null); // Paper +- ((GameRules.BooleanValue) this.player.getLevel().getGameRules().getRule(GameRules.RULE_SPECTATORSGENERATECHUNKS)).set(false, this.server); ++ ((GameRules.BooleanValue) this.player.getLevel().getGameRules().getRule(GameRules.RULE_SPECTATORSGENERATECHUNKS)).set(false, this.player.getLevel()); // Paper + } + } + break; +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 +@@ -0,0 +0,0 @@ public class GameRules { + public static final GameRules.Key RULE_SENDCOMMANDFEEDBACK = GameRules.register("sendCommandFeedback", GameRules.Category.CHAT, GameRules.BooleanValue.create(true)); + public static final GameRules.Key RULE_REDUCEDDEBUGINFO = GameRules.register("reducedDebugInfo", GameRules.Category.MISC, GameRules.BooleanValue.create(false, (minecraftserver, gamerules_gameruleboolean) -> { + int i = gamerules_gameruleboolean.get() ? 22 : 23; +- Iterator iterator = minecraftserver.getPlayerList().getPlayers().iterator(); ++ Iterator iterator = minecraftserver.players().iterator(); // Paper + + while (iterator.hasNext()) { + ServerPlayer entityplayer = (ServerPlayer) iterator.next(); +@@ -0,0 +0,0 @@ public class GameRules { + public static final GameRules.Key RULE_DISABLE_RAIDS = GameRules.register("disableRaids", GameRules.Category.MOBS, GameRules.BooleanValue.create(false)); + public static final GameRules.Key RULE_DOINSOMNIA = GameRules.register("doInsomnia", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(true)); + public static final GameRules.Key RULE_DO_IMMEDIATE_RESPAWN = GameRules.register("doImmediateRespawn", GameRules.Category.PLAYER, GameRules.BooleanValue.create(false, (minecraftserver, gamerules_gameruleboolean) -> { +- Iterator iterator = minecraftserver.getPlayerList().getPlayers().iterator(); ++ Iterator iterator = minecraftserver.players().iterator(); // Paper + + while (iterator.hasNext()) { + ServerPlayer entityplayer = (ServerPlayer) iterator.next(); +@@ -0,0 +0,0 @@ public class GameRules { + ((GameRules.Type) type).callVisitor(consumer, (GameRules.Key) key); // CraftBukkit - decompile error + } + +- public void assignFrom(GameRules rules, @Nullable MinecraftServer server) { ++ public void assignFrom(GameRules rules, @Nullable net.minecraft.server.level.ServerLevel server) { // Paper + rules.rules.keySet().forEach((gamerules_gamerulekey) -> { + this.assignCap(gamerules_gamerulekey, rules, server); + }); + } + +- private > void assignCap(GameRules.Key key, GameRules rules, @Nullable MinecraftServer server) { ++ private > void assignCap(GameRules.Key key, GameRules rules, @Nullable net.minecraft.server.level.ServerLevel server) { // Paper + T t0 = rules.getRule(key); + + this.getRule(key).setFrom(t0, server); +@@ -0,0 +0,0 @@ public class GameRules { + + private final Supplier> argument; + private final Function, T> constructor; +- final BiConsumer callback; ++ final BiConsumer callback; // Paper + private final GameRules.VisitorCaller visitorCaller; + +- Type(Supplier> argumentType, Function, T> ruleFactory, BiConsumer changeCallback, GameRules.VisitorCaller ruleAcceptor) { ++ Type(Supplier> argumentType, Function, T> ruleFactory, BiConsumer changeCallback, GameRules.VisitorCaller ruleAcceptor) { // Paper + this.argument = argumentType; + this.constructor = ruleFactory; + this.callback = changeCallback; +@@ -0,0 +0,0 @@ public class GameRules { + + public void setFromArgument(CommandContext context, String name, GameRules.Key gameRuleKey) { // Paper + this.updateFromArgument(context, name, gameRuleKey); // Paper +- this.onChanged(((CommandSourceStack) context.getSource()).getServer()); ++ this.onChanged(((CommandSourceStack) context.getSource()).getLevel()); // Paper + } + +- public void onChanged(@Nullable MinecraftServer server) { ++ public void onChanged(@Nullable net.minecraft.server.level.ServerLevel server) { // Paper + if (server != null) { + this.type.callback.accept(server, this.getSelf()); + } +@@ -0,0 +0,0 @@ public class GameRules { + + protected abstract T copy(); + +- public abstract void setFrom(T rule, @Nullable MinecraftServer server); ++ public abstract void setFrom(T rule, @Nullable net.minecraft.server.level.ServerLevel level); // Paper + } + + public interface GameRuleTypeVisitor { +@@ -0,0 +0,0 @@ public class GameRules { + + private boolean value; + +- static GameRules.Type create(boolean initialValue, BiConsumer changeCallback) { ++ static GameRules.Type create(boolean initialValue, BiConsumer changeCallback) { // Paper + return new GameRules.Type<>(BoolArgumentType::bool, (gamerules_gameruledefinition) -> { + return new GameRules.BooleanValue(gamerules_gameruledefinition, initialValue); + }, changeCallback, GameRules.GameRuleTypeVisitor::visitBoolean); +@@ -0,0 +0,0 @@ public class GameRules { + return this.value; + } + +- public void set(boolean value, @Nullable MinecraftServer server) { ++ public void set(boolean value, @Nullable net.minecraft.server.level.ServerLevel server) { // Paper + this.value = value; + this.onChanged(server); + } +@@ -0,0 +0,0 @@ public class GameRules { + return new GameRules.BooleanValue(this.type, this.value); + } + +- public void setFrom(GameRules.BooleanValue rule, @Nullable MinecraftServer server) { ++ public void setFrom(GameRules.BooleanValue rule, @Nullable net.minecraft.server.level.ServerLevel server) { // Paper + this.value = rule.value; + this.onChanged(server); + } +@@ -0,0 +0,0 @@ public class GameRules { + + private int value; + +- private static GameRules.Type create(int initialValue, BiConsumer changeCallback) { ++ private static GameRules.Type create(int initialValue, BiConsumer changeCallback) { // Paper + return new GameRules.Type<>(IntegerArgumentType::integer, (gamerules_gameruledefinition) -> { + return new GameRules.IntegerValue(gamerules_gameruledefinition, initialValue); + }, changeCallback, GameRules.GameRuleTypeVisitor::visitInteger); +@@ -0,0 +0,0 @@ public class GameRules { + return this.value; + } + +- public void set(int value, @Nullable MinecraftServer server) { ++ public void set(int value, @Nullable net.minecraft.server.level.ServerLevel server) { // Paper + this.value = value; + this.onChanged(server); + } +@@ -0,0 +0,0 @@ public class GameRules { + return new GameRules.IntegerValue(this.type, this.value); + } + +- public void setFrom(GameRules.IntegerValue rule, @Nullable MinecraftServer server) { ++ public void setFrom(GameRules.IntegerValue rule, @Nullable net.minecraft.server.level.ServerLevel server) { // Paper + this.value = rule.value; + this.onChanged(server); + } +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 +@@ -0,0 +0,0 @@ public class CraftWorld extends CraftRegionAccessor implements World { + // Paper end + GameRules.Value handle = this.getHandle().getGameRules().getRule(CraftWorld.getGameRulesNMS().get(rule)); + handle.deserialize(event.getValue()); // Paper +- handle.onChanged(this.getHandle().getServer()); ++ handle.onChanged(this.getHandle()); // Paper + return true; + } + +@@ -0,0 +0,0 @@ public class CraftWorld extends CraftRegionAccessor implements World { + // Paper end + GameRules.Value handle = this.getHandle().getGameRules().getRule(CraftWorld.getGameRulesNMS().get(rule.getName())); + handle.deserialize(event.getValue()); // Paper +- handle.onChanged(this.getHandle().getServer()); ++ handle.onChanged(this.getHandle()); // Paper + return true; + } +