From 7045b2ad2d3f7a9af07193c29d81f81845829541 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Tue, 3 Dec 2024 15:21:36 -0700 Subject: Update DataConverter --- .../server/1034-Rewrite-dataconverter-system.patch | 205 +++++++++++++++++++-- .../1035-Moonrise-optimisation-patches.patch | 26 +-- .../server/1040-Improved-Watchdog-Support.patch | 24 +-- patches/server/1044-Bundle-spark.patch | 12 +- .../1046-Incremental-chunk-and-player-saving.patch | 6 +- patches/server/1049-Lag-compensation-ticks.patch | 6 +- ...s-with-certain-tasks-not-processing-durin.patch | 4 +- ...65-API-to-check-if-the-server-is-sleeping.patch | 4 +- .../1066-API-to-allow-disallow-tick-sleeping.patch | 8 +- ...t-to-find-spawn-position-if-there-isn-t-a.patch | 6 +- 10 files changed, 237 insertions(+), 64 deletions(-) diff --git a/patches/server/1034-Rewrite-dataconverter-system.patch b/patches/server/1034-Rewrite-dataconverter-system.patch index 1b1e4ffebc..6b9ead3f85 100644 --- a/patches/server/1034-Rewrite-dataconverter-system.patch +++ b/patches/server/1034-Rewrite-dataconverter-system.patch @@ -196,10 +196,10 @@ index 0000000000000000000000000000000000000000..a27d3d41109271834b6c37fa22d4b80d +} diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersionRegistry.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersionRegistry.java new file mode 100644 -index 0000000000000000000000000000000000000000..9a5cdd68bf03c3e126601126f576ce57d4d1ac8c +index 0000000000000000000000000000000000000000..344c8c4f3207b6c8b565e5ad6db2470a272b77c3 --- /dev/null +++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersionRegistry.java -@@ -0,0 +1,445 @@ +@@ -0,0 +1,447 @@ +package ca.spottedleaf.dataconverter.minecraft; + +import ca.spottedleaf.dataconverter.converters.DataConverter; @@ -455,8 +455,10 @@ index 0000000000000000000000000000000000000000..9a5cdd68bf03c3e126601126f576ce57 + 4175, + 4176, + 4180, -+ 4181 -+ // All up to 1.21.4-pre2 ++ 4181, ++ 4185, ++ 4187 ++ // All up to 1.21.4 + }; + Arrays.sort(converterVersions); + @@ -647,10 +649,10 @@ index 0000000000000000000000000000000000000000..9a5cdd68bf03c3e126601126f576ce57 +} diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersions.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersions.java new file mode 100644 -index 0000000000000000000000000000000000000000..5e345b961186325496d63057cbb4c9487f87bdf4 +index 0000000000000000000000000000000000000000..94da5d6d2f43dae07cfc6750b23689fd4a175d2a --- /dev/null +++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersions.java -@@ -0,0 +1,563 @@ +@@ -0,0 +1,568 @@ +package ca.spottedleaf.dataconverter.minecraft; + +@SuppressWarnings("unused") @@ -1211,6 +1213,11 @@ index 0000000000000000000000000000000000000000..5e345b961186325496d63057cbb4c948 + public static final int V24W46A = 4178; + public static final int V1_21_4_PRE1 = 4179; + public static final int V1_21_4_PRE2 = 4182; ++ public static final int V1_21_4_PRE3 = 4183; ++ public static final int V1_21_4_RC1 = 4184; ++ public static final int V1_21_4_RC2 = 4186; ++ public static final int V1_21_4_RC3 = 4188; ++ public static final int V1_21_4 = 4189; + + private MCVersions() {} +} @@ -1425,6 +1432,57 @@ index 0000000000000000000000000000000000000000..1b871c78e77015d0216a0ecc61aa0568 + + private ConverterAbstractOldAttributesRename() {} +} +diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/attributes/ConverterEntityAttributesBaseValueUpdater.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/attributes/ConverterEntityAttributesBaseValueUpdater.java +new file mode 100644 +index 0000000000000000000000000000000000000000..f64b7a1999f9f81ed752626f46803174a9889e9d +--- /dev/null ++++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/attributes/ConverterEntityAttributesBaseValueUpdater.java +@@ -0,0 +1,45 @@ ++package ca.spottedleaf.dataconverter.minecraft.converters.attributes; ++ ++import ca.spottedleaf.dataconverter.converters.DataConverter; ++import ca.spottedleaf.dataconverter.types.ListType; ++import ca.spottedleaf.dataconverter.types.MapType; ++import ca.spottedleaf.dataconverter.types.ObjectType; ++import ca.spottedleaf.dataconverter.util.NamespaceUtil; ++import java.util.function.DoubleUnaryOperator; ++ ++public final class ConverterEntityAttributesBaseValueUpdater extends DataConverter, MapType> { ++ ++ private final String targetId; ++ private final DoubleUnaryOperator updater; ++ ++ public ConverterEntityAttributesBaseValueUpdater(final int toVersion, final String targetId, final DoubleUnaryOperator updater) { ++ this(toVersion, 0, targetId, updater); ++ } ++ ++ public ConverterEntityAttributesBaseValueUpdater(final int toVersion, final int versionStep, final String targetId, ++ final DoubleUnaryOperator updater) { ++ super(toVersion, versionStep); ++ this.targetId = targetId; ++ this.updater = updater; ++ } ++ ++ @Override ++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) { ++ final ListType modifiers = data.getList("attributes", ObjectType.MAP); ++ if (modifiers == null) { ++ return null; ++ } ++ ++ for (int i = 0, len = modifiers.size(); i < len; ++i) { ++ final MapType modifier = modifiers.getMap(i); ++ ++ if (!this.targetId.equals(NamespaceUtil.correctNamespace(modifier.getString("id", "")))) { ++ continue; ++ } ++ ++ modifier.setDouble("base", this.updater.applyAsDouble(modifier.getDouble("base", 0.0))); ++ } ++ ++ return null; ++ } ++} diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/blockname/ConverterAbstractBlockRename.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/blockname/ConverterAbstractBlockRename.java new file mode 100644 index 0000000000000000000000000000000000000000..7b47879a7c2e8c21fae43bf5247585c716d75565 @@ -9349,10 +9407,10 @@ index 0000000000000000000000000000000000000000..075574f33476882ddc6787e3b8bac864 +} diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/datatypes/MCTypeRegistry.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/datatypes/MCTypeRegistry.java new file mode 100644 -index 0000000000000000000000000000000000000000..ddc19b5f5e469327ed8374fda1ee5a7a91280782 +index 0000000000000000000000000000000000000000..d42bff4fec99eb0b19d132794f4e3306b6dddb0f --- /dev/null +++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/datatypes/MCTypeRegistry.java -@@ -0,0 +1,331 @@ +@@ -0,0 +1,335 @@ +package ca.spottedleaf.dataconverter.minecraft.datatypes; + +import ca.spottedleaf.dataconverter.minecraft.versions.*; @@ -9424,6 +9482,8 @@ index 0000000000000000000000000000000000000000..ddc19b5f5e469327ed8374fda1ee5a7a + LOGGER.info("Finished initialising converters for DataConverter in " + oneDecimalFormat.format((double)(end - start) / 1.0E6) + "ms"); + } + ++ public static void init() {} ++ + private static void registerAll() { + // General notes: + // - Structure converters run before everything. @@ -9680,6 +9740,8 @@ index 0000000000000000000000000000000000000000..ddc19b5f5e469327ed8374fda1ee5a7a + V4176.register(); + V4180.register(); + V4181.register(); ++ V4185.register(); ++ V4187.register(); + } + + private MCTypeRegistry() {} @@ -24234,10 +24296,10 @@ index 0000000000000000000000000000000000000000..855c5a99951996ffe4eabb24a6932104 +} diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4068.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4068.java new file mode 100644 -index 0000000000000000000000000000000000000000..3de9862f083e6a2a687b42eef36746aa846cc745 +index 0000000000000000000000000000000000000000..817682bb5830242eca25cc1939ed2bda9f1c460b --- /dev/null +++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4068.java -@@ -0,0 +1,64 @@ +@@ -0,0 +1,65 @@ +package ca.spottedleaf.dataconverter.minecraft.versions; + +import ca.spottedleaf.dataconverter.converters.DataConverter; @@ -24265,11 +24327,12 @@ index 0000000000000000000000000000000000000000..3de9862f083e6a2a687b42eef36746aa + + final TypeUtil typeUtil = root.getTypeUtil(); + -+ final MapType newLock = typeUtil.createEmptyMap(); + root.remove(srcPath); -+ root.setMap(dstPath, newLock); + -+ if (lockGeneric instanceof String lock) { ++ if (lockGeneric instanceof String lock && !lock.isEmpty()) { ++ final MapType newLock = typeUtil.createEmptyMap(); ++ root.setMap(dstPath, newLock); ++ + final MapType lockComponents = typeUtil.createEmptyMap(); + newLock.setMap("components", lockComponents); + @@ -24546,7 +24609,7 @@ index 0000000000000000000000000000000000000000..c8eb7ba000310d1165c63fb9eef37878 +} diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4181.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4181.java new file mode 100644 -index 0000000000000000000000000000000000000000..f31c79adeddc4c1b8a82d1b0f122cc1d64c24440 +index 0000000000000000000000000000000000000000..9119204ef25d78b04c5afc58965df56725ac7079 --- /dev/null +++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4181.java @@ -0,0 +1,36 @@ @@ -24570,9 +24633,9 @@ index 0000000000000000000000000000000000000000..f31c79adeddc4c1b8a82d1b0f122cc1d + RenameHelper.renameSingle(data, "CookTimeTotal", "cooking_total_time"); + RenameHelper.renameSingle(data, "BurnTime", "lit_time_remaining"); + -+ final Object litTotalTime = data.getGeneric("lit_total_time"); ++ final Object litTotalTime = data.getGeneric("lit_time_remaining"); + if (litTotalTime != null) { -+ data.setGeneric("lit_time_remaining", litTotalTime); ++ data.setGeneric("lit_total_time", litTotalTime); + } + + return null; @@ -24586,6 +24649,104 @@ index 0000000000000000000000000000000000000000..f31c79adeddc4c1b8a82d1b0f122cc1d + + private V4181() {} +} +diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4185.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4185.java +new file mode 100644 +index 0000000000000000000000000000000000000000..8b4041d3d3a4a001bf06eaedbddad1b297122b12 +--- /dev/null ++++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4185.java +@@ -0,0 +1,17 @@ ++package ca.spottedleaf.dataconverter.minecraft.versions; ++ ++import ca.spottedleaf.dataconverter.minecraft.MCVersions; ++import ca.spottedleaf.dataconverter.minecraft.converters.chunk.ConverterAddBlendingData; ++import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry; ++ ++public final class V4185 { ++ ++ private static final int VERSION = MCVersions.V1_21_4_RC1 + 1; ++ ++ public static void register() { ++ // See V3088 for why this converter is duplicated in here, V3441, and V3088 ++ MCTypeRegistry.CHUNK.addStructureConverter(new ConverterAddBlendingData(VERSION)); ++ } ++ ++ private V4185() {} ++} +diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4187.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4187.java +new file mode 100644 +index 0000000000000000000000000000000000000000..7d09c4218d0db8119d1681bf95900be830557fa3 +--- /dev/null ++++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V4187.java +@@ -0,0 +1,69 @@ ++package ca.spottedleaf.dataconverter.minecraft.versions; ++ ++import ca.spottedleaf.dataconverter.minecraft.MCVersions; ++import ca.spottedleaf.dataconverter.minecraft.converters.attributes.ConverterEntityAttributesBaseValueUpdater; ++import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry; ++ ++public final class V4187 { ++ ++ private static final int VERSION = MCVersions.V1_21_4_RC2 + 1; ++ ++ public static void register() { ++ MCTypeRegistry.ENTITY.addConverterForId( ++ "minecraft:villager", ++ new ConverterEntityAttributesBaseValueUpdater( ++ VERSION, "minecraft:follow_range", ++ (final double curr) -> { ++ return curr == 48.0 ? 16.0 : curr; ++ } ++ ) ++ ); ++ MCTypeRegistry.ENTITY.addConverterForId( ++ "minecraft:bee", ++ new ConverterEntityAttributesBaseValueUpdater( ++ VERSION, "minecraft:follow_range", ++ (final double curr) -> { ++ return curr == 48.0 ? 16.0 : curr; ++ } ++ ) ++ ); ++ MCTypeRegistry.ENTITY.addConverterForId( ++ "minecraft:allay", ++ new ConverterEntityAttributesBaseValueUpdater( ++ VERSION, "minecraft:follow_range", ++ (final double curr) -> { ++ return curr == 48.0 ? 16.0 : curr; ++ } ++ ) ++ ); ++ MCTypeRegistry.ENTITY.addConverterForId( ++ "minecraft:llama", ++ new ConverterEntityAttributesBaseValueUpdater( ++ VERSION, "minecraft:follow_range", ++ (final double curr) -> { ++ return curr == 48.0 ? 16.0 : curr; ++ } ++ ) ++ ); ++ MCTypeRegistry.ENTITY.addConverterForId( ++ "minecraft:piglin_brute", ++ new ConverterEntityAttributesBaseValueUpdater( ++ VERSION, "minecraft:follow_range", ++ (final double curr) -> { ++ return curr == 16.0 ? 12.0 : curr; ++ } ++ ) ++ ); ++ MCTypeRegistry.ENTITY.addConverterForId( ++ "minecraft:warden", ++ new ConverterEntityAttributesBaseValueUpdater( ++ VERSION, "minecraft:follow_range", ++ (final double curr) -> { ++ return curr == 16.0 ? 24.0 : curr; ++ } ++ ) ++ ); ++ } ++ ++ private V4187() {} ++} diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V501.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V501.java new file mode 100644 index 0000000000000000000000000000000000000000..a7a4d6446b7765ac485af82df660aafab05955bf @@ -30459,6 +30620,18 @@ index 96aea6d8cb68dd033c31cbde9d73ee490f320501..c51d71dd24cd28c22cda83cc3128c414 structureTemplate.load(BuiltInRegistries.BLOCK, compoundTag); return structureTemplate.save(new CompoundTag()); } +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 8d9ddcb1652526c21c4004c6b0e1c83bc33d3934..e6f9fab80b1c3402c96e7c118d0fde5957ee9845 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -330,6 +330,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { ++ ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system + AtomicReference atomicreference = new AtomicReference(); + Thread thread = new Thread(() -> { + ((MinecraftServer) atomicreference.get()).runServer(); diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java index 7d5e2e6e96ea9017334dddade54a9dcb37518642..092f7b6bba4e1291f76c2c09155f33803e93eb04 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java diff --git a/patches/server/1035-Moonrise-optimisation-patches.patch b/patches/server/1035-Moonrise-optimisation-patches.patch index 43178f114f..09e8cc67bc 100644 --- a/patches/server/1035-Moonrise-optimisation-patches.patch +++ b/patches/server/1035-Moonrise-optimisation-patches.patch @@ -23108,7 +23108,7 @@ index 731bdabd53fd4a3d17494f26781223097a5d6e16..42d46c7a7437bea5335a23cbee5708ac DedicatedServer dedicatedserver1 = new DedicatedServer(optionset, worldLoader.get(), thread, convertable_conversionsession, resourcepackrepository, worldstem, dedicatedserversettings, DataFixers.getDataFixer(), services, LoggerChunkProgressListener::createFromGameruleRadius); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 8d9ddcb1652526c21c4004c6b0e1c83bc33d3934..6de6f76e8385c50bd18ef9caaca68a79e1e797ca 100644 +index e6f9fab80b1c3402c96e7c118d0fde5957ee9845..98a7bcb7bf356c4a0894b7e12ccd676f5e4d2f5e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -204,7 +204,7 @@ import org.bukkit.event.server.ServerLoadEvent; @@ -23120,16 +23120,16 @@ index 8d9ddcb1652526c21c4004c6b0e1c83bc33d3934..6de6f76e8385c50bd18ef9caaca68a79 private static MinecraftServer SERVER; // Paper public static final Logger LOGGER = LogUtils.getLogger(); -@@ -331,7 +331,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { + ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system AtomicReference atomicreference = new AtomicReference(); - Thread thread = new Thread(() -> { + Thread thread = new ca.spottedleaf.moonrise.common.util.TickThread(() -> { // Paper - rewrite chunk system ((MinecraftServer) atomicreference.get()).runServer(); }, "Server thread"); -@@ -350,6 +350,77 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return false; } : this::haveTime); @@ -23296,7 +23296,7 @@ index 8d9ddcb1652526c21c4004c6b0e1c83bc33d3934..6de6f76e8385c50bd18ef9caaca68a79 this.tickFrame.end(); gameprofilerfiller.popPush("nextTickWait"); this.mayHaveDelayedTasks = true; -@@ -1425,6 +1504,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { + ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system AtomicReference atomicreference = new AtomicReference(); - Thread thread = new ca.spottedleaf.moonrise.common.util.TickThread(() -> { // Paper - rewrite chunk system -@@ -502,6 +505,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= j) { @@ -329,7 +329,7 @@ index 8549292b4e96c7b09e2a9707f2d8a75b870ee35b..aa0a693af442a791ad8e5ec5a9e11594 new com.destroystokyo.paper.event.server.ServerTickStartEvent(this.tickCount+1).callEvent(); // Paper - Server Tick Events ++this.tickCount; this.tickRateManager.tick(); -@@ -1654,11 +1662,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { - AtomicReference atomicreference = new AtomicReference(); -@@ -1841,6 +1842,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers diff --git a/patches/server/1053-Avoid-issues-with-certain-tasks-not-processing-durin.patch b/patches/server/1053-Avoid-issues-with-certain-tasks-not-processing-durin.patch index e52ca4da86..2a84e33ec5 100644 --- a/patches/server/1053-Avoid-issues-with-certain-tasks-not-processing-durin.patch +++ b/patches/server/1053-Avoid-issues-with-certain-tasks-not-processing-durin.patch @@ -11,10 +11,10 @@ sleep by default, which avoids the problem and makes it more obvious to check if enabled. We also unload chunks during sleep to prevent memory leaks caused by plugin chunk loads. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b5c5e9d9279e61e2476319e9ce8a829743d56267..6a4f99c56f8f49f5087a582a8c77be2c261537bb 100644 +index c851133115328f0508f65a7b7d79326ff2106b1c..a2f274504a5ce13b491d4a5d77b3e26fcf7a85a6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1638,6 +1638,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public static S spin(Function serverFactory) { - AtomicReference atomicreference = new AtomicReference(); -@@ -1623,8 +1624,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.emptyTicks >= this.pauseWhileEmptySeconds() * 20; } diff --git a/patches/server/1069-Only-attempt-to-find-spawn-position-if-there-isn-t-a.patch b/patches/server/1069-Only-attempt-to-find-spawn-position-if-there-isn-t-a.patch index 7f878f33b1..e878cdca42 100644 --- a/patches/server/1069-Only-attempt-to-find-spawn-position-if-there-isn-t-a.patch +++ b/patches/server/1069-Only-attempt-to-find-spawn-position-if-there-isn-t-a.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Only attempt to find spawn position if there isn't a fixed diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c352c6717835d92cadc2bd131fba432714fe56e5..40eddfb94d85834b384ae34445c6159f904ae577 100644 +index 3ea668e3b33353d8a6353ebc4f18e7103b573353..ab4f1bd1ebf0af54f3fa88ee9e2007d20445e7e9 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -816,7 +816,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop