From f0409edcd736f7357cdb5d1248cf73ec8aa61139 Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 8 Jun 2020 17:07:23 -0400 Subject: [PATCH] Drop Close region files patch, doesn't add any value. Upon further knowledge of the system, it is known that region files are closing properly, as well as this didn't help native memory use anyways. This patch also caused issues compiling on a newer JDK being able to release the jar to java 8 users. --- ...-Region-Files-Direct-Memory-on-close.patch | 84 ------------------- ...per-thread-native-byte-buffer-cache.patch} | 0 ...atch => 0500-Implement-Mob-Goal-API.patch} | 0 ...ance-map-to-optimise-entity-tracker.patch} | 0 ...isOutsideRange-to-use-distance-maps.patch} | 0 ...e-operations-for-updating-light-dat.patch} | 0 ...o-Tick-view-distance-implementation.patch} | 2 +- ...=> 0505-Add-villager-reputation-API.patch} | 0 ...and.patch => 0506-Fix-Light-Command.patch} | 0 ...07-Fix-CraftServer.unloadWorld-Leak.patch} | 0 ...-Fix-PotionEffect-ignores-icon-flag.patch} | 0 ...brigadier-child-sorting-performance.patch} | 0 ...enerate-Carving-Masks-BitSet-unless.patch} | 2 +- ...ock-unless-actually-showing-the-mes.patch} | 0 ...uid-s-Entity-Collision-optimisation.patch} | 0 ...e-Streams-usage-in-Entity-Collision.patch} | 0 ...ure-Entity-AABB-s-are-never-invalid.patch} | 0 ...API.patch => 0515-Potential-bed-API.patch} | 0 ...ait-for-Async-Tasks-during-shutdown.patch} | 2 +- ...orldBorder-collision-checks-and-air.patch} | 0 ...er-respects-game-and-entity-rules-f.patch} | 0 ...er-Remove-Streams-Optimized-collect.patch} | 0 ...nd-End-Portal-Frames-from-being-des.patch} | 2 +- ...e-NibbleArray-to-use-pooled-buffers.patch} | 0 ...leInt-allocations-from-light-engine.patch} | 0 ...location-of-Vec3D-by-entity-tracker.patch} | 0 ...> 0524-Ensure-safe-gateway-teleport.patch} | 0 ...5-Add-permission-for-command-blocks.patch} | 2 +- ...-for-console-having-all-permissions.patch} | 0 ...und-for-Client-Lag-Spikes-MC-162253.patch} | 4 +- ...-Priority-Urgency-System-for-Chunks.patch} | 0 ...n-Full-Status-Chunk-NBT-Memory-Leak.patch} | 0 ...packets-to-nearby-locations-sounds-.patch} | 2 +- ...rs.patch => 0531-Optimize-Villagers.patch} | 0 ...prove-Chunk-Status-Transition-Speed.patch} | 0 ...x-villager-trading-demand-MC-163962.patch} | 0 ... => 0534-Maps-shouldn-t-load-chunks.patch} | 0 ...okup-for-Treasure-Maps-Fixes-lag-fr.patch} | 0 ...Optimize-Bit-Operations-by-inlining.patch} | 0 ...patch => 0537-Optimize-Light-Engine.patch} | 0 40 files changed, 8 insertions(+), 92 deletions(-) delete mode 100644 Spigot-Server-Patches/0499-Cleanup-Region-Files-Direct-Memory-on-close.patch rename Spigot-Server-Patches/{0500-Set-cap-on-JDK-per-thread-native-byte-buffer-cache.patch => 0499-Set-cap-on-JDK-per-thread-native-byte-buffer-cache.patch} (100%) rename Spigot-Server-Patches/{0501-Implement-Mob-Goal-API.patch => 0500-Implement-Mob-Goal-API.patch} (100%) rename Spigot-Server-Patches/{0502-Use-distance-map-to-optimise-entity-tracker.patch => 0501-Use-distance-map-to-optimise-entity-tracker.patch} (100%) rename Spigot-Server-Patches/{0503-Optimize-isOutsideRange-to-use-distance-maps.patch => 0502-Optimize-isOutsideRange-to-use-distance-maps.patch} (100%) rename Spigot-Server-Patches/{0504-Stop-copy-on-write-operations-for-updating-light-dat.patch => 0503-Stop-copy-on-write-operations-for-updating-light-dat.patch} (100%) rename Spigot-Server-Patches/{0505-No-Tick-view-distance-implementation.patch => 0504-No-Tick-view-distance-implementation.patch} (99%) rename Spigot-Server-Patches/{0506-Add-villager-reputation-API.patch => 0505-Add-villager-reputation-API.patch} (100%) rename Spigot-Server-Patches/{0507-Fix-Light-Command.patch => 0506-Fix-Light-Command.patch} (100%) rename Spigot-Server-Patches/{0508-Fix-CraftServer.unloadWorld-Leak.patch => 0507-Fix-CraftServer.unloadWorld-Leak.patch} (100%) rename Spigot-Server-Patches/{0509-Fix-PotionEffect-ignores-icon-flag.patch => 0508-Fix-PotionEffect-ignores-icon-flag.patch} (100%) rename Spigot-Server-Patches/{0510-Optimize-brigadier-child-sorting-performance.patch => 0509-Optimize-brigadier-child-sorting-performance.patch} (100%) rename Spigot-Server-Patches/{0511-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch => 0510-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch} (96%) rename Spigot-Server-Patches/{0512-Don-t-toString-block-unless-actually-showing-the-mes.patch => 0511-Don-t-toString-block-unless-actually-showing-the-mes.patch} (100%) rename Spigot-Server-Patches/{0513-Implement-JellySquid-s-Entity-Collision-optimisation.patch => 0512-Implement-JellySquid-s-Entity-Collision-optimisation.patch} (100%) rename Spigot-Server-Patches/{0514-Remove-some-Streams-usage-in-Entity-Collision.patch => 0513-Remove-some-Streams-usage-in-Entity-Collision.patch} (100%) rename Spigot-Server-Patches/{0515-Ensure-Entity-AABB-s-are-never-invalid.patch => 0514-Ensure-Entity-AABB-s-are-never-invalid.patch} (100%) rename Spigot-Server-Patches/{0516-Potential-bed-API.patch => 0515-Potential-bed-API.patch} (100%) rename Spigot-Server-Patches/{0517-Wait-for-Async-Tasks-during-shutdown.patch => 0516-Wait-for-Async-Tasks-during-shutdown.patch} (96%) rename Spigot-Server-Patches/{0518-Optimize-WorldBorder-collision-checks-and-air.patch => 0517-Optimize-WorldBorder-collision-checks-and-air.patch} (100%) rename Spigot-Server-Patches/{0519-Ensure-EntityRaider-respects-game-and-entity-rules-f.patch => 0518-Ensure-EntityRaider-respects-game-and-entity-rules-f.patch} (100%) rename Spigot-Server-Patches/{0520-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch => 0519-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch} (100%) rename Spigot-Server-Patches/{0521-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch => 0520-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch} (98%) rename Spigot-Server-Patches/{0522-Optimize-NibbleArray-to-use-pooled-buffers.patch => 0521-Optimize-NibbleArray-to-use-pooled-buffers.patch} (100%) rename Spigot-Server-Patches/{0523-Reduce-MutableInt-allocations-from-light-engine.patch => 0522-Reduce-MutableInt-allocations-from-light-engine.patch} (100%) rename Spigot-Server-Patches/{0524-Reduce-allocation-of-Vec3D-by-entity-tracker.patch => 0523-Reduce-allocation-of-Vec3D-by-entity-tracker.patch} (100%) rename Spigot-Server-Patches/{0525-Ensure-safe-gateway-teleport.patch => 0524-Ensure-safe-gateway-teleport.patch} (100%) rename Spigot-Server-Patches/{0526-Add-permission-for-command-blocks.patch => 0525-Add-permission-for-command-blocks.patch} (98%) rename Spigot-Server-Patches/{0527-Add-option-for-console-having-all-permissions.patch => 0526-Add-option-for-console-having-all-permissions.patch} (100%) rename Spigot-Server-Patches/{0528-Workaround-for-Client-Lag-Spikes-MC-162253.patch => 0527-Workaround-for-Client-Lag-Spikes-MC-162253.patch} (97%) rename Spigot-Server-Patches/{0529-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch => 0528-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch} (100%) rename Spigot-Server-Patches/{0530-Fix-Non-Full-Status-Chunk-NBT-Memory-Leak.patch => 0529-Fix-Non-Full-Status-Chunk-NBT-Memory-Leak.patch} (100%) rename Spigot-Server-Patches/{0531-Optimize-sending-packets-to-nearby-locations-sounds-.patch => 0530-Optimize-sending-packets-to-nearby-locations-sounds-.patch} (97%) rename Spigot-Server-Patches/{0532-Optimize-Villagers.patch => 0531-Optimize-Villagers.patch} (100%) rename Spigot-Server-Patches/{0533-Improve-Chunk-Status-Transition-Speed.patch => 0532-Improve-Chunk-Status-Transition-Speed.patch} (100%) rename Spigot-Server-Patches/{0534-Fix-villager-trading-demand-MC-163962.patch => 0533-Fix-villager-trading-demand-MC-163962.patch} (100%) rename Spigot-Server-Patches/{0535-Maps-shouldn-t-load-chunks.patch => 0534-Maps-shouldn-t-load-chunks.patch} (100%) rename Spigot-Server-Patches/{0536-Use-seed-based-lookup-for-Treasure-Maps-Fixes-lag-fr.patch => 0535-Use-seed-based-lookup-for-Treasure-Maps-Fixes-lag-fr.patch} (100%) rename Spigot-Server-Patches/{0537-Optimize-Bit-Operations-by-inlining.patch => 0536-Optimize-Bit-Operations-by-inlining.patch} (100%) rename Spigot-Server-Patches/{0538-Optimize-Light-Engine.patch => 0537-Optimize-Light-Engine.patch} (100%) diff --git a/Spigot-Server-Patches/0499-Cleanup-Region-Files-Direct-Memory-on-close.patch b/Spigot-Server-Patches/0499-Cleanup-Region-Files-Direct-Memory-on-close.patch deleted file mode 100644 index 6fbf1686d9..0000000000 --- a/Spigot-Server-Patches/0499-Cleanup-Region-Files-Direct-Memory-on-close.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Mon, 4 May 2020 00:38:13 -0400 -Subject: [PATCH] Cleanup Region Files Direct Memory on close - -Mojang was semi leaking native memory here by relying on finalizers -to clean up the direct memory. - -Finalizers have no guarantee on when they will be ran, and since this is -old generation memory, it might be a while before its called. - -diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java -index df728e2c0a2bf660a91e0bd6342c4b4b1471dcb7..20927d55c6700f66f0931bfe3d20fd8959c87989 100644 ---- a/src/main/java/net/minecraft/server/RegionFile.java -+++ b/src/main/java/net/minecraft/server/RegionFile.java -@@ -30,7 +30,7 @@ public class RegionFile implements AutoCloseable { - private final FileChannel dataFile; - private final java.nio.file.Path d; - private final RegionFileCompression e; -- private final ByteBuffer f; -+ private final ByteBuffer f; private ByteBuffer getFileBuffer() { return f; } // Paper - clean up direct buffers on close - private final IntBuffer g; - private final IntBuffer h; - private final RegionFileBitSet freeSectors; -@@ -403,10 +403,59 @@ public class RegionFile implements AutoCloseable { - } - } finally { // Paper start - Prevent regionfiles from being closed during use - this.fileLock.unlock(); -+ if (getFileBuffer().isDirect()) cleanDirectByteBuffer(getFileBuffer()); // Paper - clean up direct buffers on close - } - } // Paper end - - } -+ // Paper start -+ private static int getVersion() { -+ String version = System.getProperty("java.version"); -+ if(version.startsWith("1.")) { -+ version = version.substring(2, 3); -+ } else { -+ int dot = version.indexOf("."); -+ if(dot != -1) { version = version.substring(0, dot); } -+ } return Integer.parseInt(version); -+ } -+ static java.lang.reflect.Method unsafeClean; -+ static sun.misc.Unsafe unsafe = com.destroystokyo.paper.utils.UnsafeUtils.getUnsafe(); -+ static java.util.function.Consumer cleaner; -+ static { -+ try { -+ if (unsafe != null) { -+ unsafeClean = unsafe.getClass().getMethod("invokeCleaner", ByteBuffer.class); -+ if (unsafeClean != null) { -+ cleaner = (buf) -> { -+ try { -+ unsafeClean.invoke(unsafe, buf); -+ } catch (Exception ex) { -+ com.destroystokyo.paper.util.SneakyThrow.sneaky(ex); -+ } -+ }; -+ LOGGER.info("[RegionFile] Using Java 9+ invokeCleaner DirectByteBuffer cleanup method"); -+ } -+ } -+ } catch (java.lang.NoSuchMethodException e) {} -+ if (cleaner == null && getVersion() <= 8) { -+ cleaner = (buf) -> { -+ ((sun.nio.ch.DirectBuffer) buf).cleaner().clean(); -+ }; -+ LOGGER.info("[RegionFile] Using Java 8 DirectByteBuffer cleanup method"); -+ } -+ } -+ public static void cleanDirectByteBuffer(ByteBuffer toBeDestroyed) { -+ try { -+ if (cleaner != null) { -+ cleaner.accept(toBeDestroyed); -+ } -+ } catch (Exception ex) { -+ LOGGER.warn("Failed automatically cleaning DirectByteBuffer"); -+ ex.printStackTrace(); -+ cleaner = null; -+ } -+ } -+ // Paper end - - private void c() throws IOException { - int i = (int) this.dataFile.size(); diff --git a/Spigot-Server-Patches/0500-Set-cap-on-JDK-per-thread-native-byte-buffer-cache.patch b/Spigot-Server-Patches/0499-Set-cap-on-JDK-per-thread-native-byte-buffer-cache.patch similarity index 100% rename from Spigot-Server-Patches/0500-Set-cap-on-JDK-per-thread-native-byte-buffer-cache.patch rename to Spigot-Server-Patches/0499-Set-cap-on-JDK-per-thread-native-byte-buffer-cache.patch diff --git a/Spigot-Server-Patches/0501-Implement-Mob-Goal-API.patch b/Spigot-Server-Patches/0500-Implement-Mob-Goal-API.patch similarity index 100% rename from Spigot-Server-Patches/0501-Implement-Mob-Goal-API.patch rename to Spigot-Server-Patches/0500-Implement-Mob-Goal-API.patch diff --git a/Spigot-Server-Patches/0502-Use-distance-map-to-optimise-entity-tracker.patch b/Spigot-Server-Patches/0501-Use-distance-map-to-optimise-entity-tracker.patch similarity index 100% rename from Spigot-Server-Patches/0502-Use-distance-map-to-optimise-entity-tracker.patch rename to Spigot-Server-Patches/0501-Use-distance-map-to-optimise-entity-tracker.patch diff --git a/Spigot-Server-Patches/0503-Optimize-isOutsideRange-to-use-distance-maps.patch b/Spigot-Server-Patches/0502-Optimize-isOutsideRange-to-use-distance-maps.patch similarity index 100% rename from Spigot-Server-Patches/0503-Optimize-isOutsideRange-to-use-distance-maps.patch rename to Spigot-Server-Patches/0502-Optimize-isOutsideRange-to-use-distance-maps.patch diff --git a/Spigot-Server-Patches/0504-Stop-copy-on-write-operations-for-updating-light-dat.patch b/Spigot-Server-Patches/0503-Stop-copy-on-write-operations-for-updating-light-dat.patch similarity index 100% rename from Spigot-Server-Patches/0504-Stop-copy-on-write-operations-for-updating-light-dat.patch rename to Spigot-Server-Patches/0503-Stop-copy-on-write-operations-for-updating-light-dat.patch diff --git a/Spigot-Server-Patches/0505-No-Tick-view-distance-implementation.patch b/Spigot-Server-Patches/0504-No-Tick-view-distance-implementation.patch similarity index 99% rename from Spigot-Server-Patches/0505-No-Tick-view-distance-implementation.patch rename to Spigot-Server-Patches/0504-No-Tick-view-distance-implementation.patch index f8260ddb57..9b24616353 100644 --- a/Spigot-Server-Patches/0505-No-Tick-view-distance-implementation.patch +++ b/Spigot-Server-Patches/0504-No-Tick-view-distance-implementation.patch @@ -37,7 +37,7 @@ index 4612697569fd6e3683b0e58453b61a9a8d077229..5c8a946d5c895fc2622c7df656cc462c + } } diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index d73987ffc416f47eb6231013a76420bc71c34f0e..fc332dd824ecb4237edbf2974cfe036309d9765c 100644 +index cf86ce24e12068d6ff7ae43cb1fd6fe665c24932..c80a55ee53eac128c94d74b78c5641854e974750 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -245,7 +245,51 @@ public class Chunk implements IChunkAccess { diff --git a/Spigot-Server-Patches/0506-Add-villager-reputation-API.patch b/Spigot-Server-Patches/0505-Add-villager-reputation-API.patch similarity index 100% rename from Spigot-Server-Patches/0506-Add-villager-reputation-API.patch rename to Spigot-Server-Patches/0505-Add-villager-reputation-API.patch diff --git a/Spigot-Server-Patches/0507-Fix-Light-Command.patch b/Spigot-Server-Patches/0506-Fix-Light-Command.patch similarity index 100% rename from Spigot-Server-Patches/0507-Fix-Light-Command.patch rename to Spigot-Server-Patches/0506-Fix-Light-Command.patch diff --git a/Spigot-Server-Patches/0508-Fix-CraftServer.unloadWorld-Leak.patch b/Spigot-Server-Patches/0507-Fix-CraftServer.unloadWorld-Leak.patch similarity index 100% rename from Spigot-Server-Patches/0508-Fix-CraftServer.unloadWorld-Leak.patch rename to Spigot-Server-Patches/0507-Fix-CraftServer.unloadWorld-Leak.patch diff --git a/Spigot-Server-Patches/0509-Fix-PotionEffect-ignores-icon-flag.patch b/Spigot-Server-Patches/0508-Fix-PotionEffect-ignores-icon-flag.patch similarity index 100% rename from Spigot-Server-Patches/0509-Fix-PotionEffect-ignores-icon-flag.patch rename to Spigot-Server-Patches/0508-Fix-PotionEffect-ignores-icon-flag.patch diff --git a/Spigot-Server-Patches/0510-Optimize-brigadier-child-sorting-performance.patch b/Spigot-Server-Patches/0509-Optimize-brigadier-child-sorting-performance.patch similarity index 100% rename from Spigot-Server-Patches/0510-Optimize-brigadier-child-sorting-performance.patch rename to Spigot-Server-Patches/0509-Optimize-brigadier-child-sorting-performance.patch diff --git a/Spigot-Server-Patches/0511-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch b/Spigot-Server-Patches/0510-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch similarity index 96% rename from Spigot-Server-Patches/0511-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch rename to Spigot-Server-Patches/0510-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch index 590e026afe..613fea34fe 100644 --- a/Spigot-Server-Patches/0511-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch +++ b/Spigot-Server-Patches/0510-MC-183249-Don-t-generate-Carving-Masks-BitSet-unless.patch @@ -28,7 +28,7 @@ index fa893b14bcef9bab6891dea2c4375b09d74ac038..e625842e524f18e469f7695b27d52d4d nbttagcompound1.set("CarvingMasks", nbttagcompound3); diff --git a/src/main/java/net/minecraft/server/ProtoChunk.java b/src/main/java/net/minecraft/server/ProtoChunk.java -index deb7fb090196c4a33c0bb224f1c4e899aa3cd8c3..9223ef9545be4a87b421e25ebe3f5b7ad72c4726 100644 +index a78b240621e0407fff67b018224c39fc4f97f4e5..2eb14bbf888f5e5601441743cb7642da6ee1249c 100644 --- a/src/main/java/net/minecraft/server/ProtoChunk.java +++ b/src/main/java/net/minecraft/server/ProtoChunk.java @@ -43,7 +43,8 @@ public class ProtoChunk implements IChunkAccess { diff --git a/Spigot-Server-Patches/0512-Don-t-toString-block-unless-actually-showing-the-mes.patch b/Spigot-Server-Patches/0511-Don-t-toString-block-unless-actually-showing-the-mes.patch similarity index 100% rename from Spigot-Server-Patches/0512-Don-t-toString-block-unless-actually-showing-the-mes.patch rename to Spigot-Server-Patches/0511-Don-t-toString-block-unless-actually-showing-the-mes.patch diff --git a/Spigot-Server-Patches/0513-Implement-JellySquid-s-Entity-Collision-optimisation.patch b/Spigot-Server-Patches/0512-Implement-JellySquid-s-Entity-Collision-optimisation.patch similarity index 100% rename from Spigot-Server-Patches/0513-Implement-JellySquid-s-Entity-Collision-optimisation.patch rename to Spigot-Server-Patches/0512-Implement-JellySquid-s-Entity-Collision-optimisation.patch diff --git a/Spigot-Server-Patches/0514-Remove-some-Streams-usage-in-Entity-Collision.patch b/Spigot-Server-Patches/0513-Remove-some-Streams-usage-in-Entity-Collision.patch similarity index 100% rename from Spigot-Server-Patches/0514-Remove-some-Streams-usage-in-Entity-Collision.patch rename to Spigot-Server-Patches/0513-Remove-some-Streams-usage-in-Entity-Collision.patch diff --git a/Spigot-Server-Patches/0515-Ensure-Entity-AABB-s-are-never-invalid.patch b/Spigot-Server-Patches/0514-Ensure-Entity-AABB-s-are-never-invalid.patch similarity index 100% rename from Spigot-Server-Patches/0515-Ensure-Entity-AABB-s-are-never-invalid.patch rename to Spigot-Server-Patches/0514-Ensure-Entity-AABB-s-are-never-invalid.patch diff --git a/Spigot-Server-Patches/0516-Potential-bed-API.patch b/Spigot-Server-Patches/0515-Potential-bed-API.patch similarity index 100% rename from Spigot-Server-Patches/0516-Potential-bed-API.patch rename to Spigot-Server-Patches/0515-Potential-bed-API.patch diff --git a/Spigot-Server-Patches/0517-Wait-for-Async-Tasks-during-shutdown.patch b/Spigot-Server-Patches/0516-Wait-for-Async-Tasks-during-shutdown.patch similarity index 96% rename from Spigot-Server-Patches/0517-Wait-for-Async-Tasks-during-shutdown.patch rename to Spigot-Server-Patches/0516-Wait-for-Async-Tasks-during-shutdown.patch index 1144778af6..90826ec509 100644 --- a/Spigot-Server-Patches/0517-Wait-for-Async-Tasks-during-shutdown.patch +++ b/Spigot-Server-Patches/0516-Wait-for-Async-Tasks-during-shutdown.patch @@ -10,7 +10,7 @@ Adds a 5 second grace period for any async tasks to finish and warns if any are still running after that delay just as reload does. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d1a1c4a89d7148c58d1e60843f233f026a6d9f0e..b853d50a4a23de87a87d674cd7e01484d750c352 100644 +index a70492f617408597230a39e49fa311822171851d..a03dc230521673a21872d70836903a2c2d15220e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -746,6 +746,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant