diff --git a/gradle.properties b/gradle.properties index efb863c..004fc43 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group = gq.bxteam.divinemc version = 1.20.4-R0.1-SNAPSHOT -purpurRef = 3d52f066c1bf1fc61d86164993fd7cac94ca5dce +purpurRef = 236b06a2a30dd4dc3850251d902b1a790c130366 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0001-Divine-Branding.patch b/patches/server/0001-Divine-Branding.patch index 96752e7..15f52ee 100644 --- a/patches/server/0001-Divine-Branding.patch +++ b/patches/server/0001-Divine-Branding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Divine Branding diff --git a/build.gradle.kts b/build.gradle.kts -index 5b8a28969451b12c4fc66976afd052ffa5805932..7aeb4fa6a8342b81558c657120504848c5e32775 100644 +index 0c92d10f334f82d196e065c0811d0c1f48887377..6964b6235bed4455b85aa69cef0049a769c5daad 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ val alsoShade: Configuration by configurations.creating @@ -27,7 +27,7 @@ index 5b8a28969451b12c4fc66976afd052ffa5805932..7aeb4fa6a8342b81558c657120504848 "Specification-Title" to "Bukkit", "Specification-Version" to project.version, diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..ad62e0b7deb141d22be4f19ea30f61440b192af2 100644 +index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..8b06174a9c42ea1d5a1cc5a423a0d6f7304a06c4 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -3,6 +3,7 @@ package com.destroystokyo.paper; @@ -154,7 +154,7 @@ index 3cb56595822799926a8141e60a42f5d1edfc6de5..05478a1ea04ec0396bc8c97090edef4a .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java -index 64e12201e164f4dc8070711605dcfcb6e56421f6..ad5c7d2f133834fd587ab0b8b5835313b52e6fa2 100644 +index 7f07ffab0835d45d4d170fe171d7fa996d5913d9..fde3e7ef352474566e7259555a5f8ffb2272e98b 100644 --- a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java +++ b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java @@ -56,7 +56,7 @@ public class MinecraftServerGui extends JComponent { @@ -170,10 +170,10 @@ index 64e12201e164f4dc8070711605dcfcb6e56421f6..ad5c7d2f133834fd587ab0b8b5835313 jframe.pack(); jframe.setLocationRelativeTo((Component) null); jframe.setVisible(true); -- jframe.setName("Purpur Minecraft server"); // Paper // Purpur -+ jframe.setName("DivineMC Minecraft server"); // Paper // Purpur // DivineMC +- jframe.setName("Purpur Minecraft server"); // Paper - Improve ServerGUI // Purpur ++ jframe.setName("DivineMC Minecraft server"); // Paper - Improve ServerGUI // Purpur // DivineMC - // Paper start - Add logo as frame image + // Paper start - Improve ServerGUI try { @@ -76,7 +76,7 @@ public class MinecraftServerGui extends JComponent { jframe.addWindowListener(new WindowAdapter() { @@ -185,7 +185,7 @@ index 64e12201e164f4dc8070711605dcfcb6e56421f6..ad5c7d2f133834fd587ab0b8b5835313 servergui.runFinalizers(); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index fd754fc9ff313421d221eea8d21fbde98be24914..ddf481ef8e70a4441e33d26b8acb8f618096c017 100644 +index 679f7874931bf068da800a8e8aa68285971b6996..173a17db3a1ab2582b645077013df91981685755 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper diff --git a/patches/server/0002-Divine-Configuration.patch b/patches/server/0002-Divine-Configuration.patch index 77fe770..4004801 100644 --- a/patches/server/0002-Divine-Configuration.patch +++ b/patches/server/0002-Divine-Configuration.patch @@ -326,7 +326,7 @@ index 0000000000000000000000000000000000000000..5d16d2250bae9c982a0af9ad2580a635 +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 7cc19060c24ad191b7dca779a18fbfbb65763189..eb301cf5e68914980829b1d3c72163ddf337958d 100644 +index 043a48d8c90e2e008b06fb5a643378a0fa948aaa..3f29a112c781790577d2857aee18c66ff3593673 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -235,6 +235,16 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -347,7 +347,7 @@ index 7cc19060c24ad191b7dca779a18fbfbb65763189..eb301cf5e68914980829b1d3c72163dd this.setFlightAllowed(dedicatedserverproperties.allowFlight); this.setMotd(dedicatedserverproperties.motd); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index b58402221840a9e72b30a31d884b0fb2d86883fd..bc0590fd38837cf6be67d56e5e00078ce0c6f11b 100644 +index f638224f8ae018030fa00962cd3c75fc31ab2488..25e0eb83fbec9c4a7a2f822e652b16431c6be7e3 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -15,6 +15,8 @@ import java.util.function.Consumer; @@ -359,7 +359,7 @@ index b58402221840a9e72b30a31d884b0fb2d86883fd..bc0590fd38837cf6be67d56e5e00078c import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; import net.minecraft.ReportedException; -@@ -180,6 +182,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -179,6 +181,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur @@ -367,7 +367,7 @@ index b58402221840a9e72b30a31d884b0fb2d86883fd..bc0590fd38837cf6be67d56e5e00078c public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -263,6 +266,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -262,6 +265,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur @@ -376,7 +376,7 @@ index b58402221840a9e72b30a31d884b0fb2d86883fd..bc0590fd38837cf6be67d56e5e00078c this.generator = gen; this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ddf481ef8e70a4441e33d26b8acb8f618096c017..ce842043c0f69e4a090f0a170fcffa1f51e1895c 100644 +index 173a17db3a1ab2582b645077013df91981685755..faec95807f8a2fb3c6e3481584fffef30ac5825e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -14,6 +14,7 @@ import com.mojang.brigadier.tree.CommandNode; @@ -426,7 +426,7 @@ index ddf481ef8e70a4441e33d26b8acb8f618096c017..ce842043c0f69e4a090f0a170fcffa1f public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index c7f8f85ad6cb76413275ebe64385a3ec7051257e..3cf225840194eedeadc40f5b370ff51c7ea0c89a 100644 +index 3511c7361e2287bb47a74aa3426234b0054c405d..0ce1640e9b1dc2fb64e3c816eda4709956d19ea5 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -188,6 +188,14 @@ public class Main { diff --git a/patches/server/0007-Fix-entity-serialization.patch b/patches/server/0007-Fix-entity-serialization.patch index 6c639d3..604c615 100644 --- a/patches/server/0007-Fix-entity-serialization.patch +++ b/patches/server/0007-Fix-entity-serialization.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix entity serialization diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 93e558e1cfcdee33abf6f1c57e4cf47c7f53f750..c83c3ceebe2c6fd0d6645a604a8e2a35e6ac3ac0 100644 +index f10933fc78cbb0ead042c1870d93d0447f640896..28a22466a155364816dc70d9d4d94fbaaa8551d1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2342,15 +2342,6 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2341,15 +2341,6 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } @@ -20,12 +20,12 @@ index 93e558e1cfcdee33abf6f1c57e4cf47c7f53f750..c83c3ceebe2c6fd0d6645a604a8e2a35 - this.passengers = ImmutableList.copyOf(pass); - return result; - } -- // Paper end +- // Paper end - Entity serialization api public boolean save(CompoundTag nbt) { return this.isPassenger() ? false : this.saveAsPassenger(nbt); } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 6eeebfaf577263316f3562a8f968310acd616763..af3407902e010b6cfe88751634e2c2fafbc23e04 100644 +index 2331190c476a2bfe3797aa61a4a792a9cc42ff59..0a713160ff0a0708c5bc4d578d265dbf7922dc07 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -508,8 +508,13 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0010-Remove-Spigot-tick-limiter.patch b/patches/server/0010-Remove-Spigot-tick-limiter.patch index cd495c6..47193fd 100644 --- a/patches/server/0010-Remove-Spigot-tick-limiter.patch +++ b/patches/server/0010-Remove-Spigot-tick-limiter.patch @@ -7,10 +7,10 @@ Original code by Titaniumtown, modified by NONPLAYT You can find the original code on https://gitlab.com/Titaniumtown/JettPack diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 20f760e678b3b9c5d5b2184f5b92f05932fb1256..8bd3c55dab2f637ad3e0b3043e560ac62a052cdd 100644 +index 25e0eb83fbec9c4a7a2f822e652b16431c6be7e3..ecd6694dd34dbade5386cd1c244327a6fc4ef9ef 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -185,8 +185,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -184,8 +184,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public final gq.bxteam.divinemc.configuration.DivineWorldConfig divinemcConfig; // DivineMC public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot @@ -19,7 +19,7 @@ index 20f760e678b3b9c5d5b2184f5b92f05932fb1256..8bd3c55dab2f637ad3e0b3043e560ac6 private int tileTickPosition; public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Move from Map in BlockRedstoneTorch to here -@@ -349,8 +347,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -348,8 +346,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // CraftBukkit end this.timings = new co.aikar.timings.WorldTimingsHandler(this); // Paper - code below can generate new world and access timings this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper diff --git a/patches/server/0019-Fix-MC-2025.patch b/patches/server/0019-Fix-MC-2025.patch index 8531b62..61655f6 100644 --- a/patches/server/0019-Fix-MC-2025.patch +++ b/patches/server/0019-Fix-MC-2025.patch @@ -7,10 +7,10 @@ Original post on Mojira: https://bugs.mojang.com/browse/MC-2025 Fix taken from Reddit: https://redd.it/8pgd4q diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index c83c3ceebe2c6fd0d6645a604a8e2a35e6ac3ac0..7213d7ad92f42bf8b35f388a6d56e80bcc4a0858 100644 +index 28a22466a155364816dc70d9d4d94fbaaa8551d1..0216c91bba40f4f3ae4103ec856b65a4bd27e015 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2508,6 +2508,17 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2507,6 +2507,17 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S nbttagcompound.putBoolean("Purpur.FireImmune", immuneToFire); } // Purpur end @@ -28,7 +28,7 @@ index c83c3ceebe2c6fd0d6645a604a8e2a35e6ac3ac0..7213d7ad92f42bf8b35f388a6d56e80b return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2585,6 +2596,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2584,6 +2595,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.reapplyPosition(); } diff --git a/patches/server/0026-Do-not-process-chat-commands-before-player-has-joine.patch b/patches/server/0026-Do-not-process-chat-commands-before-player-has-joine.patch index a109c84..a21ea63 100644 --- a/patches/server/0026-Do-not-process-chat-commands-before-player-has-joine.patch +++ b/patches/server/0026-Do-not-process-chat-commands-before-player-has-joine.patch @@ -19,7 +19,7 @@ index fa7ee2b2778a26d0e466bdc05ade26a5ae0c17f4..11dc1af9f8d8ce8c0a855d14a35077f5 + } } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 0b37acd48517d28efec716b93c33da6aa97c54f2..e2e3d5a4285760eb8b931223677411a0bdf3aa14 100644 +index d7ff08767fe6b14f18386651666c42903a52ec1c..ed921885c80b7d98aae323fa60764f6d77f48fe9 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -6,6 +6,7 @@ import com.mojang.authlib.GameProfile; @@ -30,7 +30,7 @@ index 0b37acd48517d28efec716b93c33da6aa97c54f2..e2e3d5a4285760eb8b931223677411a0 import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry; import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -@@ -2344,6 +2345,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2339,6 +2340,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales this.send(new ClientboundSystemChatPacket(Component.translatable("chat.disabled.options").withStyle(ChatFormatting.RED), false)); return Optional.empty(); diff --git a/patches/server/0028-Implement-Linear-region-format.patch b/patches/server/0028-Implement-Linear-region-format.patch index 12ba478..6754f87 100644 --- a/patches/server/0028-Implement-Linear-region-format.patch +++ b/patches/server/0028-Implement-Linear-region-format.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement Linear region format diff --git a/build.gradle.kts b/build.gradle.kts -index 7aeb4fa6a8342b81558c657120504848c5e32775..571e01cd7ed706593289427fe71e04d0182ac314 100644 +index 6964b6235bed4455b85aa69cef0049a769c5daad..771ac26bd2ad64ad2861881d6cb223c8cd3a0fc3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,10 @@ dependencies { @@ -658,7 +658,7 @@ index 8a11e10b01fa012b2f98b1c193c53251e848f909..2b3c6d11421bb0f5131eeaae362ee44b } } diff --git a/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java b/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java -index 513833c2ea23df5b079d157bc5cb89d5c9754c0b..b48b7d538132ad3d51d373292e36a8a10a9c0361 100644 +index 9017907c0ec67a37a506f09b7e4499cef7885279..281c810237603e667ad0345a3c93e735ee531ac0 100644 --- a/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java +++ b/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java @@ -2,22 +2,23 @@ package io.papermc.paper.world; @@ -706,7 +706,7 @@ index 513833c2ea23df5b079d157bc5cb89d5c9754c0b..b48b7d538132ad3d51d373292e36a8a1 long expectedChunks = (long)regionFiles.length * (32L * 32L); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6f94f01da0a2294f6fdc564653dde1fdbf508153..bc85de1adc8404278ac590872015137e8ac1667e 100644 +index 16b5f59dd3658bb9fc5be629aa4e1bc0ce356243..d25c896247093725e594223b6667c349db1e6a45 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -887,7 +887,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop(Entity.class, new ServerLevel.EntityCallbacks(), entitypersistentstorage, this.entitySliceManager); // Paper // Paper - rewrite chunk system StructureTemplateManager structuretemplatemanager = minecraftserver.getStructureManager(); diff --git a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -index 47636aad5fa20d1c28d3520beb0729df9b30cf6c..33f22f2c9c80808109539fa595479dafab4a9f07 100644 +index 77dd632a266f4abed30b87b7909d77857c01e316..1c7c987cf39b9341c3a0d4083a00c67bb707c15e 100644 --- a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java +++ b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java @@ -8,6 +8,9 @@ import com.google.common.collect.UnmodifiableIterator; @@ -983,7 +983,7 @@ index 47636aad5fa20d1c28d3520beb0729df9b30cf6c..33f22f2c9c80808109539fa595479daf } ImmutableMap, ChunkStorage> immutablemap1 = builder1.build(); -@@ -235,7 +243,7 @@ public class WorldUpgrader { +@@ -241,7 +249,7 @@ public class WorldUpgrader { File file = this.levelStorage.getDimensionPath(world).toFile(); File file1 = new File(file, "region"); File[] afile = file1.listFiles((file2, s) -> { @@ -992,7 +992,7 @@ index 47636aad5fa20d1c28d3520beb0729df9b30cf6c..33f22f2c9c80808109539fa595479daf }); if (afile == null) { -@@ -254,7 +262,11 @@ public class WorldUpgrader { +@@ -260,7 +268,11 @@ public class WorldUpgrader { int l = Integer.parseInt(matcher.group(2)) << 5; try { @@ -1036,7 +1036,7 @@ index 12a7aaeaa8b4b788b620b1985591c3b93253ccd5..ab1d0f6b7a4d29a073798d7782777c56 } 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 8ebecb588058da174b0e0e19e54fcddfeeca1422..15658d929294f24ca8e1d2b9ef11b64c8deb1ed7 100644 +index 2f7c9e0e62599688c0ed2e05444bce5040035a99..a00622c7097cf8b60cdb374151327628c0a25b39 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java @@ -8,13 +8,14 @@ import java.util.Optional; @@ -1064,13 +1064,13 @@ index 8ebecb588058da174b0e0e19e54fcddfeeca1422..15658d929294f24ca8e1d2b9ef11b64c this.fixerUpper = dataFixer; // Paper start - async chunk io // remove IO worker -- this.regionFileCache = new RegionFileStorage(directory, dsync, true); // Paper - nuke IOWorker // Paper -+ this.regionFileCache = new RegionFileStorage(format, linearCompression, linearCrashOnBrokenSymlink, directory, dsync, true); // Paper - nuke IOWorker // Paper // DivineMC - Implement Linear region +- this.regionFileCache = new RegionFileStorage(directory, dsync, true); // Paper - nuke IOWorker // Paper - Attempt to recalculate regionfile header if it is corrupt ++ this.regionFileCache = new RegionFileStorage(format, linearCompression, linearCrashOnBrokenSymlink, directory, dsync, true); // Paper - nuke IOWorker // Paper - Attempt to recalculate regionfile header if it is corrupt // DivineMC - Implement Linear region // Paper end - async chunk io } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index 9248769e6d357f6eec68945fd7700e79b2942c41..4d9dd194d9754103579c15884f799f051402b6fb 100644 +index 0761096829e2afc5f8dd88b9a693874fc2f1bb8b..d6345d440c790d0029238dd0e6885093f8a56f27 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java @@ -20,13 +20,15 @@ import java.nio.file.StandardCopyOption; @@ -1090,11 +1090,12 @@ index 9248769e6d357f6eec68945fd7700e79b2942c41..4d9dd194d9754103579c15884f799f05 private static final Logger LOGGER = LogUtils.getLogger(); private static final int SECTOR_BYTES = 4096; -@@ -50,6 +52,16 @@ public class RegionFile implements AutoCloseable { +@@ -50,7 +52,17 @@ public class RegionFile implements AutoCloseable { public final java.util.concurrent.locks.ReentrantLock fileLock = new java.util.concurrent.locks.ReentrantLock(); // Paper public final Path regionFile; // Paper -+ // DivineMC start - Implement Linear region +- // Paper start - Attempt to recalculate regionfile header if it is corrupt ++ // DivineMC start - Implement Linear region // Paper - Attempt to recalculate regionfile header if it is corrupt + public Path getRegionFile() { + return this.regionFile; + } @@ -1104,9 +1105,10 @@ index 9248769e6d357f6eec68945fd7700e79b2942c41..4d9dd194d9754103579c15884f799f05 + } + // DivineMC end + - // Paper start - try to recover from RegionFile header corruption ++ // Paper start - try to recover from RegionFile header corruption private static long roundToSectors(long bytes) { long sectors = bytes >>> 12; // 4096 = 2^12 + long remainingBytes = bytes & 4095; @@ -128,7 +140,7 @@ public class RegionFile implements AutoCloseable { } @@ -1140,7 +1142,7 @@ index 9248769e6d357f6eec68945fd7700e79b2942c41..4d9dd194d9754103579c15884f799f05 try (DataInputStream out = new DataInputStream(new java.io.BufferedInputStream(new InflaterInputStream(Files.newInputStream(file))))) { return NbtIo.read((java.io.DataInput) out); diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e867c6161a0 100644 +index a25e7183da64f726773aa279707ae67941246b46..580ed1dd9b702ae7dd07454140fedccfbeedd397 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java @@ -1,5 +1,8 @@ @@ -1308,16 +1310,16 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 } // Paper end return regionfile1; -@@ -172,7 +218,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -156,7 +202,7 @@ public class RegionFileStorage implements AutoCloseable { + org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER - You may ask for help on Discord, but do not file an issue. These error messages can not be removed."); } - - private static CompoundTag readOversizedChunk(RegionFile regionfile, ChunkPos chunkCoordinate) throws IOException { + private static CompoundTag readOversizedChunk(AbstractRegionFile regionfile, ChunkPos chunkCoordinate) throws IOException { // DivineMC - Implement Linear region synchronized (regionfile) { try (DataInputStream datainputstream = regionfile.getChunkDataInputStream(chunkCoordinate)) { CompoundTag oversizedData = regionfile.getOversizedData(chunkCoordinate.x, chunkCoordinate.z); -@@ -219,14 +265,15 @@ public class RegionFileStorage implements AutoCloseable { +@@ -191,14 +237,15 @@ public class RegionFileStorage implements AutoCloseable { @Nullable public CompoundTag read(ChunkPos pos) throws IOException { // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing @@ -1335,7 +1337,7 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 // We add the regionfile parameter to avoid the potential deadlock (on fileLock) if we went back to obtain a regionfile // if we decide to re-read // Paper end -@@ -236,7 +283,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -208,7 +255,7 @@ public class RegionFileStorage implements AutoCloseable { // Paper start if (regionfile.isOversized(pos.x, pos.z)) { @@ -1344,7 +1346,7 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 return readOversizedChunk(regionfile, pos); } // Paper end -@@ -250,12 +297,12 @@ public class RegionFileStorage implements AutoCloseable { +@@ -222,12 +269,12 @@ public class RegionFileStorage implements AutoCloseable { if (this.isChunkData) { ChunkPos chunkPos = ChunkSerializer.getChunkCoordinate(nbttagcompound); if (!chunkPos.equals(pos)) { @@ -1360,7 +1362,7 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 return null; } } -@@ -289,13 +336,13 @@ public class RegionFileStorage implements AutoCloseable { +@@ -261,13 +308,13 @@ public class RegionFileStorage implements AutoCloseable { return nbttagcompound; } finally { // Paper start @@ -1376,7 +1378,7 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 if (regionfile == null) { return; } -@@ -325,7 +372,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -297,7 +344,7 @@ public class RegionFileStorage implements AutoCloseable { } protected void write(ChunkPos pos, @Nullable CompoundTag nbt) throws IOException { @@ -1385,7 +1387,7 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 if (nbt == null && regionfile == null) { return; } -@@ -375,7 +422,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -347,7 +394,7 @@ public class RegionFileStorage implements AutoCloseable { } // Paper end } finally { // Paper start @@ -1394,7 +1396,7 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 } // Paper end } -@@ -384,7 +431,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -356,7 +403,7 @@ public class RegionFileStorage implements AutoCloseable { ObjectIterator objectiterator = this.regionCache.values().iterator(); while (objectiterator.hasNext()) { @@ -1403,7 +1405,7 @@ index 6eaeb2db0da59611501f2b1a63b5b48816a0ba48..0e61161d7d8d714bb7a7c3f68e018e86 try { regionfile.close(); -@@ -400,7 +447,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -372,7 +419,7 @@ public class RegionFileStorage implements AutoCloseable { ObjectIterator objectiterator = this.regionCache.values().iterator(); while (objectiterator.hasNext()) { @@ -1446,7 +1448,7 @@ index 4aac1979cf57300825a999c876fcf24d3170e68e..b81636c1aa5b39e1696fdf30a7e2b270 this.factory = factory; this.fixerUpper = dataFixer; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index ae01fa8872c138afbd2d3f2b036392c3f47845c1..e586e451a6836f02e06352e5410d0bcc66b1a682 100644 +index 45897c60bde16500a72efd9c926d815689af4b1c..a45410ca3aa0670e4dcd673285c0c3c7c28ddf50 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -5,7 +5,7 @@ import com.google.common.base.Predicates;