diff --git a/divinemc-api/build.gradle.kts.patch b/divinemc-api/build.gradle.kts.patch index 49ef487..020d737 100644 --- a/divinemc-api/build.gradle.kts.patch +++ b/divinemc-api/build.gradle.kts.patch @@ -1,8 +1,8 @@ --- a/purpur-api/build.gradle.kts +++ b/purpur-api/build.gradle.kts -@@ -13,8 +_,8 @@ - // Keep in sync with paper-server adventure-text-serializer-ansi dep - val adventureVersion = "4.24.0" +@@ -12,8 +_,8 @@ + val annotationsVersion = "26.0.2" + val adventureVersion = "4.25.0" val bungeeCordChatVersion = "1.21-R0.2-deprecated+build.21" -val slf4jVersion = "2.0.16" -val log4jVersion = "2.24.1" @@ -11,7 +11,7 @@ val apiAndDocs: Configuration by configurations.creating { attributes { -@@ -41,9 +_,9 @@ +@@ -40,9 +_,9 @@ dependencies { // api dependencies are listed transitively to API consumers @@ -24,7 +24,7 @@ api("org.joml:joml:1.10.8") { isTransitive = false // https://github.com/JOML-CI/JOML/issues/352 } -@@ -51,6 +_,7 @@ +@@ -50,6 +_,7 @@ api("org.apache.logging.log4j:log4j-api:$log4jVersion") api("org.slf4j:slf4j-api:$slf4jVersion") api("com.mojang:brigadier:1.3.10") @@ -32,7 +32,7 @@ // Deprecate bungeecord-chat in favor of adventure api("net.md-5:bungeecord-chat:$bungeeCordChatVersion") { -@@ -65,9 +_,11 @@ +@@ -64,9 +_,11 @@ apiAndDocs("net.kyori:adventure-text-serializer-plain") apiAndDocs("net.kyori:adventure-text-logger-slf4j") @@ -47,7 +47,7 @@ // Annotations - Slowly migrate to jspecify val annotations = "org.jetbrains:annotations:$annotationsVersion" -@@ -83,11 +_,13 @@ +@@ -82,11 +_,13 @@ // Test dependencies testImplementation("org.apache.commons:commons-lang3:3.17.0") testImplementation("org.junit.jupiter:junit-jupiter:5.12.2") @@ -64,7 +64,7 @@ } val generatedDir: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-api/src/generated/java").asFile.toPath() -@@ -101,17 +_,21 @@ +@@ -100,17 +_,21 @@ java { srcDir(generatedDir) srcDir(file("../paper-api/src/main/java")) @@ -86,7 +86,7 @@ } } } -@@ -159,6 +_,16 @@ +@@ -158,6 +_,16 @@ } } @@ -103,7 +103,7 @@ tasks.jar { from(generateApiVersioningFile.map { it.outputs.files.singleFile }) { into("META-INF/maven/${project.group}/${project.name}") -@@ -177,14 +_,13 @@ +@@ -176,14 +_,13 @@ val services = objects.newInstance() tasks.withType().configureEach { @@ -114,22 +114,22 @@ options.isDocFilesSubDirs = true options.links( - "https://guava.dev/releases/33.3.1-jre/api/docs/", -- "https://javadoc.io/doc/org.yaml/snakeyaml/2.2/", +- //"https://javadoc.io/doc/org.yaml/snakeyaml/2.2/", + "https://guava.dev/releases/33.4.0-jre/api/docs/", // DivineMC - Bump dependencies + "https://javadoc.io/doc/org.yaml/snakeyaml/2.3/", // DivineMC - Bump dependencies - "https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", - "https://javadoc.io/doc/org.joml/joml/1.10.8/", - "https://www.javadoc.io/doc/com.google.code.gson/gson/2.11.0", -@@ -198,7 +_,7 @@ + //"https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", + //"https://javadoc.io/doc/org.joml/joml/1.10.8/", + //"https://www.javadoc.io/doc/com.google.code.gson/gson/2.11.0", +@@ -197,7 +_,7 @@ "https://jd.advntr.dev/text-logger-slf4j/$adventureVersion/", - "https://javadoc.io/doc/org.slf4j/slf4j-api/$slf4jVersion/", + //"https://javadoc.io/doc/org.slf4j/slf4j-api/$slf4jVersion/", "https://logging.apache.org/log4j/2.x/javadoc/log4j-api/", -- "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.7.3", +- //"https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.7.3", + "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.9.22", // DivineMC - Bump dependencies ) options.tags("apiNote:a:API Note:") -@@ -222,6 +_,9 @@ +@@ -221,6 +_,9 @@ into("build/docs/javadoc") } } diff --git a/divinemc-api/paper-patches/features/0002-Delete-Timings.patch b/divinemc-api/paper-patches/features/0002-Delete-Timings.patch index af20d8c..8f3c79c 100644 --- a/divinemc-api/paper-patches/features/0002-Delete-Timings.patch +++ b/divinemc-api/paper-patches/features/0002-Delete-Timings.patch @@ -736,10 +736,10 @@ index 199789d56d22fcb1b77ebd56805cc28aa5a5ab0a..00000000000000000000000000000000 -} diff --git a/src/main/java/co/aikar/timings/TimingHistory.java b/src/main/java/co/aikar/timings/TimingHistory.java deleted file mode 100644 -index c8287776ad585d04fb4fa3290cd73d7097035ea0..0000000000000000000000000000000000000000 +index 143fb3623a3fcf4be2d30dafb330584cb61ffe50..0000000000000000000000000000000000000000 --- a/src/main/java/co/aikar/timings/TimingHistory.java +++ /dev/null -@@ -1,357 +0,0 @@ +@@ -1,356 +0,0 @@ -/* - * This file is licensed under the MIT License (MIT). - * @@ -793,8 +793,7 @@ index c8287776ad585d04fb4fa3290cd73d7097035ea0..00000000000000000000000000000000 -import static co.aikar.util.JSONUtil.*; - -/** -- * Internal. -- * +- * @hidden - * @deprecated Timings will be removed in the future - */ -@Deprecated(forRemoval = true) @@ -2378,7 +2377,7 @@ index 5753b9bce89db2ac378ec41f1b61907cc2e23335..00000000000000000000000000000000 -} diff --git a/src/main/java/co/aikar/util/LoadingMap.java b/src/main/java/co/aikar/util/LoadingMap.java deleted file mode 100644 -index 1786eeb5cbeaad75602c9c5649bbcd9b2af5cf81..0000000000000000000000000000000000000000 +index 207b6853a0cb0185492b62c0c5d9602d48b7959c..0000000000000000000000000000000000000000 --- a/src/main/java/co/aikar/util/LoadingMap.java +++ /dev/null @@ -1,369 +0,0 @@ @@ -2466,9 +2465,9 @@ index 1786eeb5cbeaad75602c9c5649bbcd9b2af5cf81..00000000000000000000000000000000 - /** - * Creates a LoadingMap with an auto instantiating loader. - * -- * Will auto construct class of of Value when not found +- * Will auto construct class of Value when not found - * -- * Since this uses Reflection, It is more effecient to define your own static loader +- * Since this uses Reflection, It is more efficient to define your own static loader - * than using this helper, but if performance is not critical, this is easier. - * - * @param backingMap Actual map being used. @@ -2486,9 +2485,9 @@ index 1786eeb5cbeaad75602c9c5649bbcd9b2af5cf81..00000000000000000000000000000000 - /** - * Creates a LoadingMap with an auto instantiating loader. - * -- * Will auto construct class of of Value when not found +- * Will auto construct class of Value when not found - * -- * Since this uses Reflection, It is more effecient to define your own static loader +- * Since this uses Reflection, It is more efficient to define your own static loader - * than using this helper, but if performance is not critical, this is easier. - * - * @param backingMap Actual map being used. @@ -2870,7 +2869,7 @@ index 3e61a926620a67daec3af54b72a1b911eaef2ed4..00000000000000000000000000000000 - } -} diff --git a/src/main/java/org/bukkit/command/Command.java b/src/main/java/org/bukkit/command/Command.java -index 27a7c69f23084e821d945d5e97e51a94ddd94e58..d645ee8470a2dd9f7b8eff2b7ff2211aba9c342f 100644 +index e387ba67f0b6cde8ee2be7acba8f791792802ad4..06402e9d811b62ea59c67ecbffe9272c73f2040d 100644 --- a/src/main/java/org/bukkit/command/Command.java +++ b/src/main/java/org/bukkit/command/Command.java @@ -32,16 +32,6 @@ public abstract class Command { diff --git a/divinemc-api/paper-patches/features/0009-Smooth-teleport-API.patch b/divinemc-api/paper-patches/features/0009-Smooth-teleport-API.patch index a68bf12..4a96d5c 100644 --- a/divinemc-api/paper-patches/features/0009-Smooth-teleport-API.patch +++ b/divinemc-api/paper-patches/features/0009-Smooth-teleport-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Smooth teleport API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 078cb0b4ff04bdae006af913d8b4ecd68fe30637..3b0998aefa32244bd03abdd668cc614f930802f1 100644 +index b221735602f669ef984b44d73605095460316753..8f627547e05242314f34b876fda0b4121ef3e32f 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -4051,4 +4051,18 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -4122,4 +4122,18 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM sendDeathScreen(message); } // Purpur end diff --git a/divinemc-api/paper-patches/features/0010-Vectorized-map-color-conversion.patch b/divinemc-api/paper-patches/features/0010-Vectorized-map-color-conversion.patch index 1805003..2db70f8 100644 --- a/divinemc-api/paper-patches/features/0010-Vectorized-map-color-conversion.patch +++ b/divinemc-api/paper-patches/features/0010-Vectorized-map-color-conversion.patch @@ -13,7 +13,7 @@ This patch does not add any API that should be used by plugins. Any classes and methods added by this patch should NOT be used in plugins. diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java -index 204860b32b4958a2804b2e5bc82f5be099e461f3..b3933fea40c5902f545fa0230b818d2ef3c2a675 100644 +index 477b8cd1820259bc3726fed7674402a9e705e681..849edf46647cac386338382388291ac442918e85 100644 --- a/src/main/java/org/bukkit/map/MapPalette.java +++ b/src/main/java/org/bukkit/map/MapPalette.java @@ -35,7 +35,7 @@ public final class MapPalette { @@ -23,9 +23,9 @@ index 204860b32b4958a2804b2e5bc82f5be099e461f3..b3933fea40c5902f545fa0230b818d2e - static final Color[] colors = { + public static final Color[] colors = { // DivineMC - Vectorized map color conversion - package -> public // Start generate - MapPalette#colors - // @GeneratedFrom 1.21.8 new Color(0x00000000, true), -@@ -395,9 +395,15 @@ public final class MapPalette { + new Color(0x00000000, true), +@@ -394,9 +394,15 @@ public final class MapPalette { temp.getRGB(0, 0, temp.getWidth(), temp.getHeight(), pixels, 0, temp.getWidth()); byte[] result = new byte[temp.getWidth() * temp.getHeight()]; diff --git a/divinemc-server/build.gradle.kts.patch b/divinemc-server/build.gradle.kts.patch index 3b26334..f35ecaa 100644 --- a/divinemc-server/build.gradle.kts.patch +++ b/divinemc-server/build.gradle.kts.patch @@ -7,7 +7,7 @@ +val bxTeamMavenPublicUrl = "https://repo.bxteam.org/snapshots/" dependencies { - mache("io.papermc:mache:1.21.8+build.2") + mache("io.papermc:mache:1.21.10+build.1") @@ -29,6 +_,7 @@ // Purpur start - Rebrand @@ -44,7 +44,7 @@ + spigot { enabled = true - buildDataRef = "436eac9815c211be1a2a6ca0702615f995e81c44" + buildDataRef = "42d18d4c4653ffc549778dbe223f6994a031d69e" @@ -62,6 +_,7 @@ libraryRepositories.addAll( "https://repo.maven.apache.org/maven2/", @@ -72,7 +72,7 @@ } } val log4jPlugins = sourceSets.create("log4jPlugins") { -@@ -156,10 +_,22 @@ +@@ -157,10 +_,22 @@ } dependencies { @@ -90,14 +90,14 @@ + implementation("org.agrona:agrona:2.2.4") + // DivineMC end - Dependencies + - implementation("ca.spottedleaf:concurrentutil:0.0.3") + implementation("ca.spottedleaf:concurrentutil:0.0.5") - implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ - implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 + implementation("org.jline:jline-terminal-ffm:3.29.0") // use ffm on java 22+ // DivineMC - Bump dependencies + implementation("org.jline:jline-terminal-jni:3.29.0") // fall back to jni on java 21 // DivineMC - Bump dependencies implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("net.kyori:adventure-text-serializer-ansi") - runtimeConfiguration(sourceSets.main.map { it.runtimeClasspath }) + @@ -170,16 +_,16 @@ all its classes to check if they are plugins. Scanning takes about 1-2 seconds so adding this speeds up the server start. diff --git a/divinemc-server/minecraft-patches/features/0001-Rebrand.patch b/divinemc-server/minecraft-patches/features/0001-Rebrand.patch index 3d5a28a..067ce32 100644 --- a/divinemc-server/minecraft-patches/features/0001-Rebrand.patch +++ b/divinemc-server/minecraft-patches/features/0001-Rebrand.patch @@ -31,10 +31,10 @@ index 97844ec1ccc986eb3d3a185d78a03ceeca49fc1a..5e40ec3fbe6e6d5f98ad98df7d4c27d6 @Override diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index b06c2c4aa77edafb374f7cf0406cf4d29c6e7f9f..0e07db9311d480c97251be6277f9d5d103ee9f22 100644 +index 2c85607bcc62b227485972707c3541247a626524..9e25b6412fadbbecda0430f8554eaa48dbe8c151 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java -@@ -69,36 +69,29 @@ public class Main { +@@ -67,36 +67,29 @@ public class Main { ) @DontObfuscate public static void main(final OptionSet optionSet) { // CraftBukkit - replaces main(String[] args) @@ -90,7 +90,7 @@ index b06c2c4aa77edafb374f7cf0406cf4d29c6e7f9f..0e07db9311d480c97251be6277f9d5d1 Path path = (Path) optionSet.valueOf("pidFile"); // CraftBukkit if (path != null) { writePidFile(path); -@@ -124,8 +117,6 @@ public class Main { +@@ -122,8 +115,6 @@ public class Main { DedicatedServerSettings dedicatedServerSettings = new DedicatedServerSettings(optionSet); // CraftBukkit - CLI argument support dedicatedServerSettings.forceSave(); RegionFileVersion.configure(dedicatedServerSettings.getProperties().regionFileComression); @@ -99,7 +99,7 @@ index b06c2c4aa77edafb374f7cf0406cf4d29c6e7f9f..0e07db9311d480c97251be6277f9d5d1 // Paper start - load config files early for access below if needed org.bukkit.configuration.file.YamlConfiguration bukkitConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionSet.valueOf("bukkit-settings")); org.bukkit.configuration.file.YamlConfiguration spigotConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionSet.valueOf("spigot-settings")); -@@ -148,19 +139,6 @@ public class Main { +@@ -146,19 +137,6 @@ public class Main { return; } @@ -120,10 +120,10 @@ index b06c2c4aa77edafb374f7cf0406cf4d29c6e7f9f..0e07db9311d480c97251be6277f9d5d1 String awtException = io.papermc.paper.util.ServerEnvironment.awtDependencyCheck(); if (awtException != null) { diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index b68749354f2a55e41f2b39f96ac9d1190092d672..e04be8b21514db5b7ecb2419b4b37caf29960c5a 100644 +index c3366c13f2227c25126ae1458621e4579be51435..42a8e32dbba4a369406b3cfe4bd64696c875693d 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1184,6 +1184,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, AutoCl +@@ -166,6 +166,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl // Paper end - add paper world config public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files @@ -37,7 +37,7 @@ index 848f936a26429d844ad439ca336dbcb8d81f09e8..2c60b1c8ecb54c4c9526a2b2f6e6698b public static @Nullable BlockPos lastPhysicsProblem; // Spigot private int tileTickPosition; public final Map explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions -@@ -885,6 +886,14 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -890,6 +891,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).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) levelData).getLevelName(), environment); // Purpur - Purpur config files diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/core/BlockPos.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/core/BlockPos.java.patch index fb2c309..c0563d1 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/core/BlockPos.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/core/BlockPos.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/BlockPos.java +++ b/net/minecraft/core/BlockPos.java -@@ -347,7 +_,18 @@ +@@ -348,7 +_,18 @@ }; } diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch index cfe26cd..c8cc88c 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -989,6 +_,13 @@ +@@ -973,6 +_,13 @@ if (this.hasStopped) return; this.hasStopped = true; } @@ -14,7 +14,7 @@ if (!hasLoggedStop && isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper - Debugging shutdownThread = Thread.currentThread(); // Paper - Improved watchdog support org.spigotmc.WatchdogThread.doStop(); // Paper - Improved watchdog support -@@ -1080,6 +_,7 @@ +@@ -1065,6 +_,7 @@ // Paper end - rewrite chunk system // Paper start - Improved watchdog support - move final shutdown items here Util.shutdownExecutors(); diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch index 9ca57ed..b048419 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -1,9 +1,10 @@ --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -195,6 +_,26 @@ +@@ -287,6 +_,26 @@ + org.purpurmc.purpur.PurpurConfig.registerCommands(); // Purpur end - Purpur config files com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now - ++ + // DivineMC start - Pufferfish: SIMD Support + try { + gg.pufferfish.pufferfish.simd.SIMDDetection.isEnabled = gg.pufferfish.pufferfish.simd.SIMDDetection.canEnable(LOGGER); @@ -23,11 +24,10 @@ + LOGGER.warn("Debug: Java: {}, test run: {}", System.getProperty("java.version"), gg.pufferfish.pufferfish.simd.SIMDDetection.testRun); + } + // DivineMC end - Pufferfish: SIMD Support -+ - this.setPvpAllowed(properties.pvp); - this.setFlightAllowed(properties.allowFlight); - this.setMotd(properties.motd); -@@ -275,7 +_,7 @@ + + // this.worldData.setGameType(properties.gameMode.get()); // CraftBukkit - moved to world loading + LOGGER.info("Default game type: {}", properties.gameMode.get()); +@@ -363,7 +_,7 @@ String proxyFlavor = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "Velocity" : "BungeeCord"; String proxyLink = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "https://docs.papermc.io/velocity/security" : "http://www.spigotmc.org/wiki/firewall-guide/"; // Paper end - Add Velocity IP Forwarding Support diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ChunkMap.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ChunkMap.java.patch index 567cd83..1639ffb 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ChunkMap.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ChunkMap.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java -@@ -1302,7 +_,7 @@ +@@ -1345,7 +_,7 @@ flag = flag && this.entity.broadcastToPlayer(player) && ChunkMap.this.isChunkTracked(player, this.entity.chunkPosition().x, this.entity.chunkPosition().z); // Paper end - Configurable entity tracking range by Y // CraftBukkit start - respect vanish API diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch index c60c563..5be2531 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -2237,6 +_,7 @@ +@@ -2353,6 +_,7 @@ this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.CHANGE_GAME_MODE, gameMode.getId())); if (gameMode == GameType.SPECTATOR) { this.removeEntitiesOnShoulder(); diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index 11d79d4..6a82c62 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -313,6 +_,7 @@ +@@ -315,6 +_,7 @@ private static final int MAX_SIGN_LINE_LENGTH = Integer.getInteger("Paper.maxSignLength", 80); // Paper - Limit client sign length private final io.papermc.paper.event.packet.ClientTickEndEvent tickEndEvent; // Paper - add client tick end event public final io.papermc.paper.connection.PaperPlayerGameConnection playerGameConnection; // Paper @@ -8,7 +8,7 @@ public ServerGamePacketListenerImpl(MinecraftServer server, Connection connection, ServerPlayer player, CommonListenerCookie cookie) { super(server, connection, cookie); -@@ -324,6 +_,7 @@ +@@ -326,6 +_,7 @@ this.chatMessageChain = new FutureChain(server.chatExecutor); // CraftBukkit - async chat this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event this.playerGameConnection = new io.papermc.paper.connection.PaperPlayerGameConnection(this); // Paper diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch index a81dc57..5559d6e 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1141,6 +_,7 @@ +@@ -1070,6 +_,7 @@ player.connection.send(new ClientboundInitializeBorderPacket(worldBorder)); player.connection.send(new ClientboundSetTimePacket(level.getGameTime(), level.getDayTime(), level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); - player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getSharedSpawnPos(), level.getSharedSpawnAngle())); + player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getRespawnData())); + org.leavesmc.leaves.protocol.XaeroMapProtocol.onSendWorldInfo(player); // DivineMC - Leaves: Xaero's Map Protocol if (level.isRaining()) { // CraftBukkit start - handle player weather diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch index 6d0935d..f4f5e8f 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -374,6 +_,7 @@ +@@ -376,6 +_,7 @@ public boolean isTemporarilyActive; public long activatedImmunityTick = Integer.MIN_VALUE; public @Nullable Boolean immuneToFire = null; // Purpur - Fire immune API @@ -8,7 +8,7 @@ public void inactiveTick() { } -@@ -1125,6 +_,7 @@ +@@ -1131,6 +_,7 @@ // Paper end - detailed watchdog information public void move(MoverType type, Vec3 movement) { @@ -16,7 +16,7 @@ final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main"); -@@ -2576,6 +_,7 @@ +@@ -2633,6 +_,7 @@ } this.addAdditionalSaveData(output, includeAll); // CraftBukkit - pass on includeAll @@ -24,7 +24,7 @@ if (this.isVehicle()) { ValueOutput.ValueOutputList valueOutputList = output.childrenList("Passengers"); -@@ -2684,6 +_,7 @@ +@@ -2741,6 +_,7 @@ this.tags.clear(); input.read("Tags", TAG_LIST_CODEC).ifPresent(this.tags::addAll); this.readAdditionalSaveData(input); @@ -32,7 +32,7 @@ if (this.repositionEntityAfterLoad()) { this.reapplyPosition(); } -@@ -4219,6 +_,7 @@ +@@ -4298,6 +_,7 @@ } public boolean canTeleport(Level fromLevel, Level toLevel) { @@ -40,7 +40,7 @@ if (!this.isAlive() || !this.valid) return false; // Paper - Fix item duplication and teleport issues if (fromLevel.dimension() == Level.END && toLevel.dimension() == Level.OVERWORLD) { for (Entity entity : this.getPassengers()) { -@@ -4448,6 +_,7 @@ +@@ -4527,6 +_,7 @@ } public final void setBoundingBox(AABB bb) { diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch index 27fed65..e079576 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1425,7 +_,7 @@ +@@ -1431,7 +_,7 @@ player.setRealHealth(health); } @@ -9,7 +9,7 @@ return; } // CraftBukkit end -@@ -2762,6 +_,7 @@ +@@ -2793,6 +_,7 @@ } protected void updateSwingTime() { @@ -17,11 +17,11 @@ int currentSwingDuration = this.getCurrentSwingDuration(); if (this.swinging) { this.swingTime++; -@@ -3278,7 +_,13 @@ +@@ -3309,7 +_,13 @@ } protected float getFlyingSpeed() { -- return this.getControllingPassenger() instanceof net.minecraft.world.entity.player.Player ? this.getSpeed() * 0.1F : 0.02F; +- return this.getControllingPassenger() instanceof Player ? this.getSpeed() * 0.1F : 0.02F; + // DivineMC start - Fix MC-172801 + float flyingSpeed = 0.02F; + if (this.getAttributes().hasAttribute(Attributes.FLYING_SPEED)) { @@ -32,10 +32,10 @@ } public float getSpeed() { -@@ -3727,6 +_,7 @@ +@@ -3758,6 +_,7 @@ protected void updateFallFlying() { this.checkFallDistanceAccumulation(); - if (!this.level().isClientSide) { + if (!this.level().isClientSide()) { + if (!this.isFallFlying() && this.fallFlyTicks == 0) return; // DivineMC - lithium: entity.fast_elytra_check if (!this.canGlide()) { if (this.getSharedFlag(7) != false && !CraftEventFactory.callToggleGlideEvent(this, false).isCancelled()) // CraftBukkit diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch index 9a9a844..78df11b 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -329,6 +_,8 @@ +@@ -339,6 +_,8 @@ this.playAmbientSound(); } diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch index 89342f4..3ecd489 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -292,6 +_,12 @@ +@@ -301,6 +_,12 @@ if (!this.isSilent()) { level.levelEvent(null, 1027, this.blockPosition(), 0); } diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch index 6fa3074..224a4ac 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch @@ -1,14 +1,10 @@ --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -1817,6 +_,11 @@ +@@ -1669,6 +_,7 @@ } public void causeFoodExhaustion(float exhaustion, org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason reason) { -+ // DivineMC start - Fix MC-31819 -+ if (this.level().getDifficulty() == Difficulty.PEACEFUL) { -+ return; -+ } -+ // DivineMC end - Fix MC-31819 ++ if (this.level().getDifficulty() == Difficulty.PEACEFUL) return; // DivineMC - Fix MC-31819 // CraftBukkit end if (!this.abilities.invulnerable) { - if (!this.level().isClientSide) { + if (!this.level().isClientSide()) { diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raid.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raid.java.patch index a92e04d..54e045c 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raid.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raid.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/raid/Raid.java +++ b/net/minecraft/world/entity/raid/Raid.java -@@ -511,7 +_,7 @@ +@@ -533,7 +_,7 @@ double d1 = vec3.z + 13.0 / squareRoot * (vec31.z - vec3.z); if (squareRoot <= 64.0 || players.contains(serverPlayer)) { serverPlayer.connection diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/GameRules.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/GameRules.java.patch index 41f02ac..240198b 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/GameRules.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/GameRules.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/GameRules.java +++ b/net/minecraft/world/level/GameRules.java -@@ -288,7 +_,7 @@ +@@ -301,7 +_,7 @@ } private GameRules(Map, GameRules.Value> rules, FeatureFlagSet enabledFeatures) { diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch index 5432eec..a03204c 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -106,7 +_,7 @@ - public static final int TICKS_PER_DAY = 24000; - public static final int MAX_ENTITY_SPAWN_Y = 20000000; - public static final int MIN_ENTITY_SPAWN_Y = -20000000; +@@ -111,7 +_,7 @@ + .add(new ExplosionParticleInfo(ParticleTypes.POOF, 0.5F, 1.0F)) + .add(new ExplosionParticleInfo(ParticleTypes.SMOKE, 1.0F, 1.0F)) + .build(); - public final List blockEntityTickers = Lists.newArrayList(); -+ public final org.bxteam.divinemc.util.BlockEntityTickersList blockEntityTickers = new org.bxteam.divinemc.util.BlockEntityTickersList(); // Paper - public // DivineMC - optimize block entity removals - Fix MC-117075 - protected final NeighborUpdater neighborUpdater; ++ public final org.bxteam.divinemc.util.BlockEntityTickersList blockEntityTickers = new org.bxteam.divinemc.util.BlockEntityTickersList(); // DivineMC - optimize block entity removals - Fix MC-117075 + protected final CollectingNeighborUpdater neighborUpdater; private final List pendingBlockEntityTickers = Lists.newArrayList(); private boolean tickingBlockEntities; -@@ -1501,13 +_,11 @@ +@@ -1452,13 +_,11 @@ boolean runsNormally = this.tickRateManager().runsNormally(); int tickedEntities = 0; // Paper - rewrite chunk system @@ -24,7 +24,7 @@ } else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) { tickingBlockEntity.tick(); // Paper start - rewrite chunk system -@@ -1517,7 +_,7 @@ +@@ -1468,7 +_,7 @@ // Paper end - rewrite chunk system } } @@ -32,4 +32,4 @@ + this.blockEntityTickers.removeMarkedEntries(); // DivineMC - optimize block entity removals - Fix MC-117075 this.tickingBlockEntities = false; - profilerFiller.pop(); + this.spigotConfig.currentPrimedTnt = 0; // Spigot diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch index e8548e3..9d69d2b 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/net/minecraft/world/level/block/entity/BlockEntity.java -@@ -386,7 +_,7 @@ +@@ -392,7 +_,7 @@ // CraftBukkit start - add method public org.bukkit.inventory.InventoryHolder getOwner() { diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch index 032fe81..8c29acd 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java -@@ -423,6 +_,11 @@ +@@ -424,6 +_,11 @@ } else { Direction opposite = blockEntity.facing.getOpposite(); if (isFullContainer(attachedContainer, opposite)) { diff --git a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/chunk/LevelChunk.java.patch b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/chunk/LevelChunk.java.patch index 564feb3..435134e 100644 --- a/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/chunk/LevelChunk.java.patch +++ b/divinemc-server/minecraft-patches/sources/net/minecraft/world/level/chunk/LevelChunk.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -272,11 +_,18 @@ +@@ -279,11 +_,18 @@ public BlockState getBlockStateFinal(final int x, final int y, final int z) { // Copied and modified from below final int sectionIndex = this.getSectionIndex(y); diff --git a/divinemc-server/paper-patches/features/0001-Rebrand.patch b/divinemc-server/paper-patches/features/0001-Rebrand.patch index 705d33d..6480785 100644 --- a/divinemc-server/paper-patches/features/0001-Rebrand.patch +++ b/divinemc-server/paper-patches/features/0001-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index dc49ba7b833b0d2edc8959ebe8cbecdad720bf06..5736b550ad3f1e7dd9fd1a1f985be2974278e7a9 100644 +index 6194d6d8952864c71cc4017a639b818e4ecccea9..46e62dead64e18691122a6dfaa1df77acbd46b27 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -593,7 +593,7 @@ public class Metrics { @@ -141,7 +141,7 @@ index d543b1b107ab8d3eeb1fc3c1cadf489928d2786e..e77078e54efdfe931202ecf8c8550840 } } diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -index b678ca41f7fb1f4aa10c012fb2b432f5e65b2a91..b0b05383838f2ebb42791a1fca8d3ce0d361e477 100644 +index 1b0ee48e28aaa68ddb1f28c23d3c5f5f40505c98..4d3518795a238d87ca4f3df0bee074ab5bcc2734 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java @@ -23,15 +23,18 @@ public record ServerBuildInfoImpl( @@ -197,7 +197,7 @@ index 62e2d5704c348955bc8284dc2d54c933b7bcdd06..341f13e57896f03058ea3ec68e69b7cb public void executeAsync(final Runnable runnable) { MCUtil.scheduleAsyncTask(this.catching(runnable, "asynchronous")); diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index 2e7c3d4befeb6256ce81ecaa9ed4e8fbcb21651e..a839dbbb72f48b8f8736d9f4693c528686570732 100644 +index 554fc2c53b5028c8f89a0ae69a75e075ba4f4435..a3e4065916f2aa2971f4e19f0702c7a052af2090 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -491,7 +491,7 @@ public class CraftScheduler implements BukkitScheduler { @@ -223,7 +223,7 @@ index e34ceaa77c7e538c8d6bc341c4c6f450488ce426..4aef151bd162c4c99a3eaec1854b5463 if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 39493810336442e74c0fc99fdeb5e073a8f4e95e..dffff76bf6df39dd26892edc2b4988fafab282e7 100644 +index bf0cda94d87e46149a21505fc67ddb9ad9af0838..0e5b10153821fda6056791e1c216d05a9ac8e5bc 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -75,14 +75,14 @@ public class WatchdogThread extends ca.spottedleaf.moonrise.common.util.TickThre @@ -279,311 +279,326 @@ diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png index 518591dd83289e041a16e2c2e7d7e7640d4b2e1b..f54753531b3bf2e8b5377f342465e727c7da98f2 100644 GIT binary patch literal 6677 -zcmZ`ecT^MIvk65y(vr|S0wD$n1T=z3m0m+wF=$9cr3j%}P!W;dMd>0)Cy6mZP(Xpu -z`KXEn5Jf2hLO#R>ih{iOJMX-A-XCxG+?_jjX7=vRopyIq-Cd813CjzEKp-&(dmB#> -z2#omK1bMk5u9dOJxq$DSrHds9#LO1i@#p8_sw8_)7Z51s00J|A35u(#^8|4ULRXr{u5ar-vE3hmqE3r=>bw!l> -zCLnNFgew+2R&lAAi)cmJ0#RrDqXICbhyX4Cp$t%{gN6nNQN~z96O4fg24$*eV1O|& -z`24~m`2Pr82s;ya_R9Y+a5FP`iYwq7063g=aRI@(eL)aESPJx4yI}4K0?UK`s+8LU -zIf51br|${Y`EMQ`5Qs-kkkt%z@DqvQS0OciO<6(B~X-Ttj8^Ly;I -zo6TV6_jdf1w>dz}4f>(bF>w9Nl+(tmyuNjboV5a{jFW#sdhZ3z{C6FC!V#*o?@AZ* -z6@#2M7W4S(D=_e$&8q=XmdM!qgOR%?ntYTjPFBys6aK5aZOW9A-@mVhM4$Tn#+hCB -zNpgxYSKw4B-@=Ml8HJRuwG70o3_~8YcHFp3NRQPixJk)8jWlBG`$)0fR?<9ouc(Iq -z@M>AWUQmUPC;T+To4^Nb6>2S#hFq7L&p%!1Cs%tkSst0NNYZm;6BFuVg$q)J!)F7( -z%(e_;?{knc?~C+ODT}S?y_c3y-kj+)Wgt5{`{U-T!|fUc+rlYhRs);U0u{fq@D7>$ -z_>Lp=enScNrA5b3pV^mFIh4g1^)G(S4aMb`J2kRvHwN--6UVxbA8uFjF<}pE*7ZMK -zD7IlonkOy3AIJvqJ+^v3B{iHk+09aQ#>kl{ -zmaISJQBQP8%5~(PD4NTU;H% -zN4-1eLAj|t8F9I*tOJKM3*6eu_ik{zyQXVr`+F=q1YAwrdHH=#%BbwO{yyyY;)#O9 -zGoK`Ujx6-fNTj483E1!FGtYVz6zXJkTq}>qH=7wK@z<-uMz+lx_|+jFzKR&rwU*h7 -z-SX~-k+=i6A(lrB*0r`9T8GUNIhfO&-z;_$ZArSIsvPp?xN$s|$dHe^`OM^F>B%4e -z+B+^26JapEmg)E{;0#))&Eg{uHb-Q`84A;T-g<0_D1txOzm@fAkH7Bi)a>I9KNL*w -z8u{ixFO8tyq?{r4KmQm -zSNiE?)c%L{xJxhP4&5oKhr-|T5c1%mU!3b24|v+PPTx7XiKE<3_og)W8hwd4bQ{h> -zw@BZ$Vn;F^AsxsUQYH4)WS37yHJ(jv^McSfJ!KYWI{j#p^1Z|(l4aXFHm%b)_D;p6 -zeK-F2{zQ2YFT{AfE%kmcleZA9 -zmujwY7rUA^wck?=KmRZL&VyCf#rO}){K)5E`+yI=l9Y}ctF9gtg(oT>q(z-%>r+DF -zn{-;VUxR+9B~Sb8RDV(I_k9?;D(8Gj$fHRTu6IN%?`EkCa{IH0=Sw41*UgZwulPmn -z)laGv2^e*bcaeZY?uLkYS|UaAAk@XKvKj$Q#dtIDN(~iqeqPuo)DqqwP}x9whzk*E -z)NIrkYyrM~c0&+-xfVm0sHynpwS>3uWK3zFR@OKpKT68yUK+jEWMymEb@OX(VqRCZ -zco5SyxoF6ae@doaqTnW6VQ3Jd$a`kjNV=eO@Zm$xZF6G}7ghtgdVi5!%XnRn%eXw- -z5iK<2&Q31*PFo0_vOm)B@jz8@r(e!mQfMwD=&?h;ZzRnDPg}ScJk3G;N{Twj!p|gP -zZ1NJDPDRo}kV&8^LC@`mm!?g5{Tm`pfl(A^nzA4%Aly)})h>skcaj#dh-WUB+2v)j -zr95b|Q+IN*So~Kd)bW>BXBm)nA4YzIBN`l>!5-{FPw;~?1hk@%>!qrYPf1$tE?pFO -zR(1GIYDWAQ2|+onsA2wkJGv%3*?Z~)U_KQDSyW$#ffv=J6c6A``RiloHWXzl{V~&* -z&V~V*Q_`REbq*sw5LhB1AB)yLbGR_mdQ53v;X9z)~53wn#^ -zhY>6hMd{+ahRAWu&JX=eM}xe;S4x+E`U2F-MVhwq3$bl6tAdP#!*Q#rrb=PvH*R#*&lq@s -zX-}W#0!mYyVBv!INAOqqnnSQTPBlFE`K%FwcSl|yCbF%4rsak5(c8l<0|B)Wcnq5b -z;qZ#jE*)l^din^5G{0FHZdjz6H_Zrec>!FyViZ*%hx6hIKAA!_w~WU-FWRLUK+M}s -z&5}N$I)jR>0Ig;`n;K!5sc^81J5~A2&&QeWdELc>{Q7I^uvg7OwuOV?sn{?c+$)*B -z8QeC$v1qV4G*@HNZ_CAf((f$bV#JG!Hl+XLiK%Y#@}Sie32{*PFZ_*S1y+g7;i{{F299LdV- -zt=1$T@Z7b<@1rPlc1ua?PK5P~ih4zQIUB|H=+IdkHnFWElD69}f$R77-p1elK4(L@ -zKV-kTwe@F|x%E39IEPG%K2+FJ@fv&4&$-g`BnJcOnb{B_t@F`}n$J(hLMf7*<_?KT -zQGAry`2+CeXtPriR0G&2@TfhTq?8ToYlwWfIjk9v_?J+L-R5aa8nyhmwNEWVs`qQVt|6;3F8s7O6OWRPGL -zZA@%BSq|u50S>~t9apT3%Ds`89)E=-_d3~pj+{CzRza4tq@^Iz(|;TZD?%b8UUnLB -zxPrC}d>`1q<>4_}sHTa^kjhCF6-jz&U+?my5q-yBP=50^sl^#56D&Jl7LO)hzh=`s -zsyB%5$`rJuZ$%&Q9%15n&C{07W;yq)H6sAjl-ep?><1=2&7Zxw#I<-6L@H!fhEC7b^>|R<>!C4mhUdkjh+LNZ%J|%ty%H-cJRe6Y;427PH?td -zdXro(qo(HkAzXhi1D?grRmzh67%+V#iFBgg?hb+`wT;M%US0ruLy);kyxtm;>YYP2JXBAWeEP7Y^my -zYXNvj{uB>TsCR$jfy?hh`BrE!wOw?Qd_WyBz~6V{Zk70k0M{k#9t`$TIO+b;c)nnK -z+`gfns;r5?3FZus4z>uGbxZRmvaGm%{+cmUAj7GYVqlP9s(zdmq&N4SY%Gz6syrf} -zKb7Wx6Kw`vB|d{3&e!7-J1N#+rlVNmDnNQ>9N*h)Ultw`Cy5AS>tIK_t1~2VehSRN -zOofI~k+m&ZrXXz92oC&FOaNTEnQz@~e19ssc3R?I=*ckp{xp)!dq(uLmRd9sr=MEW -zu5&pge3Wsoh7%Ga(d{2R>2@q0e7RT+VcUeahll^`d~VMbVD^9@E>-tX -zj+T|~-zErreB@U5m64RGN^2e1L7=@C-;_@Dr9>~I2)Dfw-Ioa4BOuzR%-7sBV2v=Q -z!P7RMtN@pnyHp8wyb536D8DO48TO=TxlnZzmPRd8Y-_K4$4+X9DwXrsI>f`?uWiW*uF_OqO=E=V+Wc^KhHSdWr -zZm9Z+ED>0IGDwULbEkdLg%_?>0E^dIA_S#u#b6!XKAz*#3N@_;`FcCO%$YLU(hKeq -zMd9VC`hOCczshK~gG~F`Xb*(NhH!yFRQD@U013Dy`?Kv3u|9w#?Phx3=kjn{CXQ-M -zV^+}wN>kZ?P|~>mfKJa}W{T962LH}njNYD;X!_XwFCC*v(aR0~y1Ri{?1&Q#vV#Dn -zQc`3~%sl^hfE}&7Go_l3TahgQja9sPVj`ES>erdt*vs4pmt3^Mvq(QFQX(-a`>n@lv=SVs;4kaY-sY6PPep8F~-g -zQgBMDVkT*k{{dDu4E!JD3b*_)m}D9f<@S;jTi2xsp5R_t_I-XImdpCvJ)v) -zw>Y#Hk4QbRbbgVW?Y{!Yb<5DS!t830X1KQ|wBM>M3h?^F^!@k4LYR)2&%DqRD??2n5d!c1yKT9OsEZ -zFmFEgOx|Du`q~L)Tz_7=7TMcT5a?b%g2~5z0Of&)uKSow7U`*^hX(>|9BZw)f)`po -zU`f&8rX*1CW>D{p!vQEu0Fh}VNxE7|Svvo@a$T%B^jXpq=4+Y0+~$uO2a`1DbLZ{M=x<2ZLQ&Ob8-J3X&*xUTe$D!E2I!8j(atSZO62+_N-WbxQkJyi$~6X4Z1+W86N&e4c>?g{XF9eX7*0hyBh_omBt^uQ8Gj^-Z3+_t -zs&jo6z7eCV{iE|FMMRe`YyQwH3J>fXEFWYwI3Lbsj4t^DpPuUAvu7D91siR*el5@qzBKGX1L3jBzot|R8f -zOghP<*WXDf=oRu9qax~wuD6^DLnj42-NSs#lY*|+n00Y*Z`OgX5Qjc$ -z+aWFtdZ6+jl}9jY0+gQYMiszi-#qN<%}-=}&^lTBZK70*$9|}P} -zL1bvT9F}?m$U}qNtBKWS6Xg`>ml9>Uk0L^XMD;zOX@4%$w)>L$Ho$IA?Ln7^Ut@y=i<=6`!lo*YCm-mo`gO+r4}D86(0j*eZ|*J -zOEX6CiHtdGgLpuV(gpCsbbs<8PVFrb=Czaf7+u&q4DQqR2biXkUIqtapx2+Lr9mpc -z0%M2&+DG*AOeiD|fp{D0)GNLPKrB#255Aa)+Ll!u!2!~;-@IA{9` -z&twsmLc_lXsMexXDC6^Xoy&hN#To~4`q$pA97VW-Y`pHkQI&LN1+{Psu+33s53Tzx_I~=cZ51O5zD3q|%l{lPufGVQ%>V -zc9Jjc;PWozkX7+AoNr#-!27Y-gJue*2J#_}KEyrvs!_jGXN4D#R}7vb77W=SUZ6Gs -z7Y)KXZ)A=Tq#u5)I#Nkocxpv^o_H{6Oa?Krs5W~x0i89Q0W2V}7T+q(^7^6=>EO#W -z`DpX-^DK4qz{Ir-et}j+Xc=(gmYnT3_kZw%i$RC-!!A91v3jnPs4JfsG&~GKU@Uk% -zENNX>DcG=i<rB<}b8O6NIoLHgvK2Tj%WZ=ep`+B)qH1538Kw(zLYpwj?RL -zKQC*8IZKJ85gXf`D@XmrZ}z0B4$-% -z#5u_aJlT~Rz#nDlIJ6PugYP20>(80*@KTjt2Lvz5mZ0M7$)CcUk@p_s$^h?o_rF$>!zEoV+I-e)}5CY2o9PEjay* -zV>Cj8ZChL}gx7qpb>?}aNx}GS69W2l#$e=$@mq@2rNQ3ZaqlTtH2F0b9YVEg_&cmp -z9vx$cf7u~q1PkZir56Xw60;6fM=X)hnQ`bvgB}QZiFos!aZPc!EHRvJhPYeZiG3_? -zjZbnKVSm#-9*)S}?Zz7Ix5mdiDb3_8pG#x{I61G8qoRfu1(?S9zqVOT5UPa0RFVoy -zxGZG6EN57Ym|95?5w#v3susU+2$|LdW!O*>lhl?!cqW?wb$~FN*e&rbyxv*?dCe5X -zA3X1$($YNfAX74Uu7Tv&Y0zVaUwg5SyFa7>J}6Pc<8{{Dz36a2cWZ@ziU|3oYtGnA -znJD06B5HU9wr-RKbRVXY{N@dMhVhN*V%+a3VjRb0wX;hVazYu=%el;UduXEp%w^7< -zb|+!8yUq+Ya!HO6tIB5eqD~poR2H$D+@pe77pwERgEIA -z0!|y>AQ6FFu;Cr?4;OGC36S8`-RHRs!ojv|9~nbh^^c7~^@OJH?SB5}xeQZzNnGTp -zU${G$vNFg^JlLjxT2*m!{P!2zieBFsmDoj7By5jYgbdVWx_kcpnE-OIb+w^e5#s*~ -DA-Nv< +zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4rT@h2EWC1?hFhJEa{HEjtmSN`?>!lvNA9* +zC?tCX`7$t6sWC7#v@kIIVqjosc)`F>YQVtoDuIE)Y6b&?c)^@qfi?^b46y+|A+8Jz +z4AzE*1{#{~F76Sb5mpvfPWDb-4o==4-paCa1{xY-Lc;2bN^+7?DspmG=2rST`W|i` +z=BDO)>Kgib`Z`)VdK#K$#%3zYDt1+tPBi3T(HkZ(U6;;l9^VC +zTSH@S`*j8ehN#pC&op0O1}z2#1`Y;RMj-}J=rS@eGB7YoF@S=Uk%581i%}ZR4r0`R +zs$pVaU=oJ1L8=(Qzyst71_lN&Eg$sVgn>cA)YHW=q~g}wyDyzqTL~~ccwP48O4Nnm +zH%YbsukT6qoMAe%CE%4&{gx>~pEwm~viy0!|Nf6&d13SC5moa0Jnryp{8CrbxPx)y +zmwhpncP2zs)vvS2JI}cC)^+dqm!}?kD=^{Jbnl*M5Y>G&S7qA0{n}hb3U}|#eLPJj +z%lrM~sVplOS!o^lTAf=}Pc+G&5nZ@ze|<$lcb&%c##O!Xdd64v!-cN;Kko|q +zTd7d^J$UD%kX!|=OD#VPW6ZQpxJoa#Z#(VxbVtVa=f?|{25xnF1d*Q{{9zVFI(}8GFZ@uogp}^Jh$6k5icQ0O_u$t^4QDNUcK +zb;MQshoG|0*Q+~(R+#ABDmfsLxN7~8(%EjRnHLkx3|B9=uiwWcKG!+4rE5;<#?2pA +z{=c)e_~OmVqbnHv*VNTZ*;k*9DY=&(xT;b8T2aNJ`TN84Y%;%nn-;psf66OOH`m|i +z`*RqVCjGhi<$;j#{NMU)Azx-)nckZ6P9WU+(a~E19bI|}Azw0j(}JhZ(CFJ=v!E$v +zhmCq-Ujvp;P&u_}o^`NVCqPW9Q<$A_f?EcL?F!cHFutP1g4epqZpNFTTEgdNj% +z@HUz{Cg&>1<@|FuX$nc&AXU=1+w8^M=~~tMDe5RqyFPu~yevtsJGM{;#Tb +z{Je8gU((FiOtr@ZLbr2gvYvhHwNBnLe98HUCT+K`E_#_xQNr6RjQH2C3@g7VX)$^B +zN-?cFObJu9@;>^k*rFEXy6eW|=&xa`CU%Fe+HutQW0A!~tplbzg{L@OE#BxQx?k^t +z&}@&T1-|c$mj!Lz`;bHI_L2GaDFpFiBZ_L9tS0^ugd7!N6$um~HJ&YcyPoe}@?XQ377r07#oBR`D9&d@29XU-~HFm1s +zWcc0Hek1(P(vLF7qt@oVl=La*4BRTHrESeSwQ;V9-p>!*K^Kh`{J!QK`V{k6{pCA_ +zRRZFxA22^o2-EwU!yDwN$30ba_2WbHm$6$dy0jzWvZ7H=#zU^~JV&kLsf#xyuMNxL +z-lDQa`P9yc&ma7ClA>xBG_4a@w&>(dfl#h%RdbK2_FdXAtwbn%PS?7lX3xK!@%#E| +zQtQ-1OZl=k`nAtI?Z$dtWTn9LMlI>nr$l9#Q~nwYPoH~g?b@K9wkCnT2R0Qf<)7)c +z^U{hVzL%t~dYN*b4!GJr`^%a~dDlIxH@#3>l6^3C!mGBtNupVsJfuknmo^QbKQ +z#%rBlZ6&$~Vs5osxlC={8dtm~N3V_HI!DmYO&86#PCfpfduwLNDxWoS9LcGLh8(-x +zCaltqUQ_fqX5+K@Zc}@&3I(o_xITG8-vQQY0i~FVmv=Xaz75|nZIhQNV|LHgQ-@5i +zurl_rtCr}!ovR@Fu1z(-_s}Y>zNLkYt9zP03UElOmYiW->9$Tqt3C93WQ6VYEYZhG +zZ^aoOD+=M8)^t^Dfu-w;qK#I1U8cRS +z=l7dvZO~f%AXV$Y(RI!%-g>V1wDDYwjQ0H3@?9pY8oNzpOI9^@Z!Pd}o*UqMFlsMX +zgqfb1&hLIVsjJNf6Hc%G8j;oiHH+h_$(rlojN0d}zLh*%$hPxQ$d>nqR^BoQWL&d- +z`=kij>#wu9rr)=Ysb<-c6EeYj8B@%|zOxCT`==hWD&D*A*3JuZb`#I+JdwJ*D8}mQ +z0nyjYe0QH(Ziw5yK1|QHadDyHOogd8Hl+Gqh$yc#E}1SF7R;0#-Lcx%u_?yqv0Imc +zsO>&;o3?jG2eW25MX2tGxw^W@uvc35P{;)D1-E`|?hTlFc-ARa{Z~rjmv?Zw&Nx-r +z8IsQwc3I@ut+1alTV|fxkvB>CTI@I9fNQa75x&OEVWo!aelS%n-5MOYX4y>6*G4fP +zS-0>`cWT`@E6r`q&z+CBGu|uoawVCbJrnV{=&1OGx^%6p9al}n51e`?WF+)osJZT+ +z{@J&#D`l?z{w)(>-8c2=(Gk6H{W7p{CVdY7-~0+Ccmr<2jG3$+G?8$2JwO +zeR+Z{d)cLbMV70UJ&ZWMxZ$eF=cLG;*It`0niTc5IIwWd5IVKtYLP78%9y$~zb)Oq +z%62>p17)R^ucZaEtbVQ(Aur$VtR+6&4PE6kE6DE=^@o;{VX+dp`%Z_u}r(zEEayYL0 +zR;m_yc4G{)ZP(MZKA$76cIZSHT~~a$j`zD&cUR)ouTM9gi!sybeEnzM&vm>%teU$L +zu6{L&u+|oP{_39T-K~zwGr1D4Zf&?4BPn)v8Q=S2orN>IoMt?fU&s_us+(YXRwv?} +z){NHHoqwd9_^V|XJ&G{Y>OZ4-+OJPM%bLJ14+*lx}O>? +zF;3k2G%bQ%`PzxrTWg*8tJel5>Trj)AAMD3vP0_dtVyL0BHEh;Uq5y}&=j+evFuPt +z-KIC*T302zw@Oahuxwd|McDD98?^ea7H^ajJZ{Cf?rd9fhzU9dlX@^ +z`to}H1WUb+r#p82RgWlJe#B+-HD|!EZH#)Y^RSb>ARA7W#cU-jgXlUcm2CUlMXl?vnsy1;nsAK +z*NcTVSm`mY)^BhUJv!;0L|xJvqs7)z)2??VHk#Uqy-eCIYB^22!AbPsDrd%xUc9X@ +zBa(NUG#%aHF~2aUK~N|Esz%7U!%KSv!(yd3p6Zp}bdLMgH;IiL;xCQ0BL2y=MED-w +zcqhOm>W7TqLC3HQ+9Df{{o7Jtd*rNs-_xBcI`P|`*VG=~ct;>yF6{D|meyj^eNTec +zxgB7NS-`t2;inn%5hm784<{X|jJT`D5!R{czQukov+DFBQ@1sJ-HCfSB3`WbU-4-} +zTd%^JT_^tNn1(*SJ@?A7j?!mF2@```1D+=QJj<}=UGL3}QR|#_Ox9?1eckpvqT<;h +zg#*=d+IbO#e +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 literal 9260 -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 -z<wCdy-3tTl}j4kzaCmrni9Diizn#a{@0 -zu;<>ZBofe$`#ML)Z*Aj8mbPS3-(VgSdF3LA8LJgBPj{3IaB~uLBuylKO*>ev*i|tuS(Wff3`Ogj^{GsE -zb-&NcY_)d|4#vv+AW}skSWrN{p$KOp?oug)BPoM*O}*h=wrr-PGYCt{qwP-&I!~hn -z&+*{EI5^09slk8i%kFcTjCcO6Oc}M9iiS}cuLLw0fyMPfjZ_M`;HWDHP^ke=f*5^! -z(0!2p!N9nZ8J+AP5sfunmbw64l@2)3@53_`Q@g&4FYKeDLbz2F-Pl@Er#INAtM()n -z<;MFT;osC}L2=Y4P1?cm)V{7nauSgh -zx4)k@#lLT}(uM?{Z&NvzT8pnJk@-MDvv4wOKsY+l9S8OdOw}cex#$t*B6ppAEloQy -z8u`9L`Ky$*$*G}A=)h6BjVn=_YuPie5epXe0vLKZP=Pxps%a&uGrdg4y#R{YobnDn -zWlMl5J;9|5ev`f`BO3Uh(yuK%@i^`+fAimq+_>*)z(;wrFdXn2nVJw1y_>PcV%p-) -zt#ZCU`}~DIE5y1BiI$qSd5XIebq(uRB-FnL#^x=bDHO-ls3({4R}-PgePOPH8ggGN -z^EAdT|N11qATWCZQ}ZY#=hum&;_xeyp*|O{VN?%jM$?&+DK=8LzLP4?U!YQ_JT0`M -z`m!W@TCB5mlr9&jJ{^cX4Ye=uf(7g!BDG1LQfZM#P5u-^$L1K~rOMk7oWI24W>ZJVoZ8!*NX>jC%2pgw@7$v*amGL8JnA`*TjN)y=JPix$ -zHom^xjfr~ZFvhO?xbJHg&jfEZgboIqN@pk*%G-#&cX5DM>_>dMo{P<(#6bOBlgEyG -zzi7pMrVsz<*TT+n%Xo*+rUVN -ztJqe<9EEg`YU)i$PQ+gn%oA5sG>b*6QUjZVf+Ju4QKWr32^B^>#t1pQ*dNT#SxuC8 -zGNJ9mH6R-92O+m#!DECXMrB|3+|cZ$?^qoag;w8-vr)Z5hx@2MVoazOwqdLo2-lu( -ziwF(a3SNH{+U_=d6KFp}-N^eInrfTZ{p%Yc;K{NXO^Sl0qy(%)%sUXL -zA6Ic}&$4}O+ulD-?|#%otX@aO$zD_RW;|WXeL`u5;iz`2Ja937zabkT*wwyB&2HIU -z%>tpNcvDWCsG=IjRr(V|Z7N`9^tphbhiC}fIrVcS>=>)uMStm;g&z-HK{fFz2ud&X -zKo;y87PhB3IZGZ&D%bJ2dZ<-Z7I$fCrPWl6O0ir})>f~+rM8k@!Q(EpWCD9f!k>me -zRhs@Q3_eZ!{s3QHUMaN0uShhn$y!N+)a -z6F#K#O21}#Wz2NGar1LUq3S|3=0~&VTjxVeqcysO1QIGwgglMcjXc3^9R9i556MW! -zA%G1+Y)mPX16RcVB#B?R~Xl -zIeR6G9EBEoU+Sk|=Q=4gQdT~j9ecG~G45m|E+IkhfuBxT`M%^wZkNkXpL0AjS!$%u -zg-={lr6QW@$p<#-f}T{y|0rAEpY~$9`Ffd=BP+`1#;?ge=@mLGkdmI~u?Dai2i+}> -zr-d}7M&xTHsK7@<3$tPd^Yg3fLzxDa!oOJ_N!hGt&$}5!9&TOIuzhIP>)^&CM1CIF -zY>A-293)fzq2lbB(1wKk=>#3=G1eTT&8(iBSJab=V@AGnDSwOhxKg{m8sa~TR||^x -zH?*-f-l|Zq;GkYEt~~O`56i(Z6gi`*^TxMZuc-f=NMlvry~%u2a>kz*@R^tJ@{7%-A@wfa)Z -z0~dL|Z*tTjEX7ED(M%2gZ|Zi_L4TWr%=BR=y4%;?-COo)8t(xaW)#f?Uhc9^d-1?K -z=UDW-cu8J#%~t1$>T7o{K5NXC7Z^ -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 -zWZQ?eQkgCCqwANoAm&K4|fw*k7ipV -zB1v2pR!seE-oV-2@pAb2ne;%k;&0+LB7z16@)VH1MO9)MHU9kSp)dCNVB91j?4mmO -zv3NP2%#IeX=+W7Ni#8IjoTpc(!3T*dt7!EX8VlAzQq6uvFcs%W{$71OuAvW8Wpseg+*PVYLv?WMN=C|H@$;E_S5fVp$L;GyupU7jZ$kfvC58X?uLqEZijH!v -HqBZh=dic2S +zcmeAS@N?(olHy`uVBq!ia0y~yU^oH79Lx+1471we)-W(I{SEL5ab;j&*zEAXF5~}E +zga0u-|5FKJPi^?W!SR1V#sAsC|8uJUhfe&z&gK7d&;R>O|DV(NKOy%25rhB6YyQs+`9DA4 +z|3%gRmz4isR{DQe>fa*2|M`{wv+6)wkRP|JySE-tqjO5%zzj`~TS?|Lqq2Kd$@#pwa(% +zK_K^^)%c&<_`fa(q-#?2|HS5hrA7aNBJ|DTBbKWy~hY5xDD=KocB|K|q%k8l5Pz4U*0FUT=Ftw17C-5?)LivHi7_e`Bnd?M*c4@1G)K< +z%Kw6LP<~1toyYy8jhL|I->k9$D%QN-E1e|Cbj3KcW3UvE_eqGbnBJ#s1%828y_a +zejqE>JN>UJ_bNd +z`hTk}DC9%?{@s=Q7ux~y;~~TU&xHS5FZ;jC0u+Nf8~@j5|Np@C|AF{F*SY_Frv2Y! +z|GzT{l;pm${STV>za{PeW6}R_c>kL(|9?~FpZ}EqvqJydEdHNf_wS|P|MG@^Zp|@8 +z3=9k#N`m}?894b^+5QP>J1X;wRB*Y=c539fqD_#g}^n4fMaf +zTwj +z#M$P{hj&}bKU_GuzAohLgIm|8M*Dw#{P5<&1x@jv-(0#bA-bp +z_CUjo4HG0)n3W!|@7LHaqA~ZtsTl{DIC{Ey4vFniS-`F4qL6m}^Bg6vFK=&)iT;a! +zHaq9s{O5npSI+xi{NUa$o5knU)3tY)>Oa46XwIA`-gl&?o2=SXoRqX^_wEk{+ow&9 +zy~ioTz_d&A@wHWa;$=$i4||{FT}ioetE9_h=VXf{(S#p|JTG)_3chnII7hQk#OigJ +zy0Amso*nN_uGN)2C+X5Rr}eVeqcApw;Na=1cWzC5{?qZn42|=3pB46T$}Hd!-0t?o +zzC&j2ze}pGr*O(FUR;=cSnH;%!^OL`at700h1_}Z;>F+JJHOq@y8h59rtf1?ZTQZV +z^gFcy*HbmO&w4t?%$h^1`|0oUzOuXTUrBYBJq}x|vT^B=i8&AQZ{K5gIChM$rC@ci +zc^AjxfV3GF7KJ%EDK4)cA6aWx`HW{#*CtEFpdxn`O64 +zsd!7XFSP8LuAx)qw>Ip0d*S=|f0r+3^rv)o*7GvH`t|GAsjBjKf3NCanIKi!AkAle?Qm}5i@1Yg7_yr$&IOQSxYBq +zYlp6yewEMchbn)+<&Sq{^t=AU +zmQ&QH#T)&)6B-t_N=y55MmVdPusctKO;yR!S=GBg=}0<=#y&~vTw)yA);%TGZ)3)? +z<$+VDZ4&xobh>k$>-)C0Hv9H_5_}hx4PZmb!XcniA^R;BqHuGdHrQ%newK` +zTg={-@xAZNgGPcOl~?=hCe50td?)jwqreVnhk3RiA|h97Y`b&lsl*MXST#A<`TkRO +zdQNz)){vm3^-%wgqnA;8FLPpr{$uvpC(_T)v#q!wwWUeMoa@%a#V*_a%sajCnc%;xZUtNjM>h7&uw}0y#O>#YSxa`W>h<^+D&K0Vu +zFV1+)dOUGowf*%YwKh#UzTg|v!nbYFH?L@D +z9G+?S$l$)L=a!lNbxS2gkv2xtX*g&zIz;Y`nB&UO8{^*sui^N!6e +zm}zn%art_k@*J1jmx>hZ4+I%657fRJImPvFW$}W-Z(F-(%zXL!_2;`;dn^Nv9!uPy +z++A}nE$CY(LsI5S#!>*k?8N=zM7id^DZ@1d*)evhwpUZ>o(7= +zsctdi=j`=PpU`6OaF$JQPteihynlYC0=GLuW;VC40OvaQ4AWcNXULSty3Ou)Ij%iH +zTizkY`GicR)|5+6e%0JIR9Lx^(^gq5tY5&r({knP$@~*CwstBC#jxE@_|wk2gy+VM +zwwncN-Z@img#-r|m!H==x8M?o@>v<4D!B)XuVzIr;&i;;nDAdv&)m3D{QZpz@he|i +z4`%lkzF5V*S&X&z-QtR?O$zO&826pM(syCEudi<%+xn(xj-Ux?@BV+7;_vO=W_9^Wi%c8;gYJ+p&7?^C +zh@@G;Z%#hfwR>~o)FMZ}rE5FZIp=3_EL?5m8vo(I$kbb +zw{G#`WNCYj(!h?O9u;QR_Fl`?d_6sk?hJp~4ti!iIiO+~vGUNrX4QAUliL);YKx9` +zgvHb>(os{F*X?m%eng+U6gD@ZTC%|mb_T>u5w+e0<*$_z&myfNz2zCntzXx=a)9i%w(S1 +z{Tb1$wijmv@3$=9w)@r{hOWf0pP4TN+4hLD%zV7sET;d$+B2Fh54SIToXO75q0{CP +z=I}F*FIV&Yp-7o0Q{tycn7H4O_!juteI1)+LAY*4y~WQzchVkNedl1lx0&sCc;O-2 +zCo4REaGaeO5Z$f7dF?mDkyde*>QzieR+~>9RWdtac_zQ_h~bkD7oRFmliKRG_epM> +zi=4CD|IWy#Dy(~+$5a@8YZY?aWh%Ebf$vJ&*9ViA`_GqRc{peL22Ky1T+RPMRr{+i +zNA9=m>uYr5+Y#tB-;g~>`|0VW*6i&k0T +z4~wJ!_6P`A)n@()tZH5w_NKOakCVUcrK_!{1^wlJu8}_@{4z6gJ&!Hp+`Y#x_N>}3 +zUv%-VxXQ0v{7*RkI`+uF+`47$iW7@Of6hLxobV-lx{d7*$t#hn?QE7$Z=ODz&6i+r +zF{!(5!W^$F0rnZ^C%>Ch+tO9CsDJWWi4XI(L@kr^v?zLiZ|}BQELOLLoH`F@+b(DR +z`8(fEpy21D_F99|a{KR$py>+&}TNm&qR4jJPP;<4L-?4~!D(jxff%&tV4Q{LxN_AMsvC@Cvl?N$* +z)j$1wr@+0Xi@j;fw`Cpi=hyGgZn>Iqdv|wV%zCvaH$GRL-0f+>VO@K3hVksPOXBu4 +zgly5Nt8>>bV`96Z?CfQmxJA`tvigHxOJ<7PdiIu1FG6jL)=aecwy|IB +zk%#()R?(lY_2VYIJSv-P`Lm`@jaA`8(EknZPVDVhNa4#`!oa+3hQdW3uDgOS4+UL} +z>u{|uVPb!<)z?aYF?Tf=^Sz6wxz5>5{dtGfdwpilDSnG3@I`37yK^w$N1~yG_MzC`{}soHM_8HO{w6K +zJC4iO-}rcfXP0vAY`s*63B7uA%@AW`bimY +z16x0pZaKz(yu)t&*)YqSx$>LH+9YRvtD?Qm1l?LnG4U> +zACL_dt=``CFzBXR{jRSsb8|0vw7%l6HT(OK{eG82?a}Z@mu3`e2`h?OZ22ivY;fai +zd+{8}BCeUt*O)9W=~~21;P+utJUaR8ZoSui>he!E*c_d?b_&;w$6sXQU$8f_92T;h +zQ2*~D|0Dj;MGF_qJ-2%C8*LS-&qChC^%<{zbao{MbalkOUU-B5mt@CE^S_^0zf@2; +z?-DV|rSGIB17F;P-I5YzaiJ$3THA+hUUl#wW9^6LKc|?PuIi-+*cq&?4OMDq$WK9iO)S +zw|KM@5=(jd@5OG|7}L`5CtL5t#dU@;6EiHzb2IfaxH~y*^3NOp64>@@UDvBgkKc&2 +zeN&coIPfy8&GFyg>GDe^8?U%y$TBgjFmHm$nKe!aS6s4K-LcKMM*8$t|KI+^Y*5m4@$EceJ` +zrNOA6tju#nh~?XcrMjx&mkxYe)q5fKYO{i1*n{$op)96B44VWUX0bH>NoQCRtkGdC +zwx?2;A?W?7OU}`vwr4nm6GW$b=!mZNW9cm29MvPaCn&o_VXKovU3{bH#YbHSidc#d +zuKUv0ldCDs{;luLgoEsodu=z!iLP1t=|irIfWCNlGS8B2VG<|aYqKqC+~y^6rmpYk +z!A@Q-!w0$FwmmmJ{!&h)y5i?c!HgvdrVpHXie(sXD)Kxjuba@B$EXm+B6!gD#IM5! +zs=PTjr&)1g!>f^YAuah9&{a; +zxYRmtuFQ$&SBt8?%6BL@`!k7F&71hp+NeU>`PmC*(>ApiWihYrsxhq;X8APxrUE0& +zBOZ7CrU`E*zmSdGk*DVR^WDwVv>-Wwgo8~JEUzU-FuiX4t8mhZJxHD9$?W?-92T{# +z_2^!zy@sQQw?rZ5jHliHRkJ-W{{B|noyHdJui&1)gjd_IO;EXXp|#LY)3p*F<=ZES +zM)Ejq;>%fPxqQwYK@a|~^Wz2g-n0F>$nV9ciFOqp*D9WTtx1_%s8IgyLz53zgrGNX +zE#VlwGsz)nO3g7`$NyM&uBswOQh9g +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 +z%E>H+(#~Iu39^6niZ{|Ww56~q +z$YpnIJIK=%X4+B1GwtS7!N$o~V*XX+zs)&u&(5JFe6`dOcY*%&_GP!Ww6&!<1%b$L7G+Fg|x$!6_mNq|G;Vt&LYl417v`Bqn +zlHvrurUiKmCJ1hic5++hoMYN7bIf_2lP(M2k=o0O%jYY4EN4==d|j~N#Wl%^0#~w& +zm!EgHkUcf`@CSWA8Mg&$rks{_)=Qw@ +z-N|oNN=inDV%+;}2WnEL$XFjfs&w?~C(DN2*S$Qn9ZlAp6aB?;O}@Cbf_cKGxooQ-BbXFYi}*YwPRnv{#lH{C2Y9Q^(57{d}*MdiAVU``_=rwJbm^93b3KHfT- +zej+w-y7xZgj{=SxYL`x!*l6jz=ka6fn}I3f=^6o(l|00qH`J%{b{?p+cD}V%F-b}J +z@sS(3!s!N1_nVsg54UcU32Jd+zO;_dGtE7AoyFn8w{AVVzcVydy>-7PAhN_v(|ON5 +zE5)2Ri&IA;JEq4~h^Gozo4LIYZL|nAUi9{3)kML)8Rav5=j^?}mlz$w_^2evO-f2c +zq4eIzyN}kmtGw;Lm&57EXgf=B({gi8&uM+w9XY~x8K3b +zu9W2{P(5+F%+;-Bh3^(AOjP*Wd9!Uo8(VRQT-;f{Gw$bdYo=Vc@A>uMo9XAK1);qY +zlr;w)32R%b-4x}&GL^pxH|6}IQ6}X*{E`8-=uS?KdeqQJH6t3#KE>voVS-D +zD0X${QX$sc4?mPVNj=kcgQvy)}(K{kW6u)1>G!J8-?Hl%jjkjEJPf +z^&dV|woN*bIibpaNww9HFy-j0W*b?U)s5K%S}$IkVDw$UaYN+}6J@3L^Iw;)o6S`y +zu%uc`rTn@;(vq~5MjDH_=870j+^qP`;rWdNJ-bwIu2MT3*VMeegKKw-h0JB+Ndb?` +z4hP0+Ppi3c>A`~c4@yqR$<<|-PfUI?=e+wBCF7~@SEt@waH!Ctt>^8=;O7rYayE2+ +zR$Zk1vnqFv7{7;}^Q179+*eYgDy5PiD4>%l- +z-4Sv1&bC`5wsUHN!is*6V{M-&9(>PqL?~se-l~p`>772;p1XS9-_U(&gH>jD%)6h4 +sPuTcv7jDytWnQr+YqnZRA=~46q4sdGkFvem3=9kmp00i_>zopr0DAbi?*IS* diff --git a/divinemc-server/paper-patches/features/0002-Configuration.patch b/divinemc-server/paper-patches/features/0002-Configuration.patch index 956de68..bf14af0 100644 --- a/divinemc-server/paper-patches/features/0002-Configuration.patch +++ b/divinemc-server/paper-patches/features/0002-Configuration.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Configuration diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 043d8c902c07769b72233e286e94271b135875f2..3ce12d384561fc36ad957c4a298eb9701ed8c977 100644 +index 0d2ba00b359ebc4f487a1029730518e741fc5f9f..916cca90459831c12b988ca10a0f53cb1befc058 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1063,6 +1063,7 @@ public final class CraftServer implements Server { +@@ -1008,6 +1008,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur - Purpur config files + org.bxteam.divinemc.config.DivineConfig.init((File) console.options.valueOf("divinemc-settings")); // DivineMC - Configuration for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty - world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1079,6 +1080,13 @@ public final class CraftServer implements Server { + world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && world.getGameRules().getBoolean(GameRules.RULE_SPAWN_MONSTERS)); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) +@@ -1024,6 +1025,13 @@ public final class CraftServer implements Server { } world.spigotConfig.init(); // Spigot world.purpurConfig.init(); // Purpur - Purpur config files @@ -31,7 +31,7 @@ index 043d8c902c07769b72233e286e94271b135875f2..3ce12d384561fc36ad957c4a298eb970 Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 3a4239d6f5768f7e2b6025477670dd2eb9f8cbc4..0838fcfaa950300f7a394295509be86cab824f99 100644 +index 7e99752be20868606ab31b9db831c9940f970c9b..4cf0a09594e72193a452215c50ed1cce309d5cc7 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -172,6 +172,14 @@ public class Main { diff --git a/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch b/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch index 4b34233..5b716c2 100644 --- a/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch +++ b/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -975,7 +_,7 @@ +@@ -922,7 +_,7 @@ @Override public List getWorlds() { diff --git a/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch b/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch index 054d95e..b332f24 100644 --- a/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch +++ b/divinemc-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java -@@ -185,7 +_,7 @@ +@@ -186,7 +_,7 @@ } public static BlockState getBlockState(Block block) { diff --git a/divinemc-server/purpur-patches/features/0002-Add-missing-purpur-config-options.patch b/divinemc-server/purpur-patches/features/0002-Add-missing-purpur-config-options.patch index 555a786..78e046b 100644 --- a/divinemc-server/purpur-patches/features/0002-Add-missing-purpur-config-options.patch +++ b/divinemc-server/purpur-patches/features/0002-Add-missing-purpur-config-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add missing purpur config options diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e5244941506e99a8a2450e798483fed6fc328b85..657776f124e761fd2017cd43c73cd94a4abb20e6 100644 +index 7080b83c251e20ddf4fef69de42697aeeb1c2eda..f84cffd066c3ba13f0fc729b6bea0a51c65b41e7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -333,6 +333,7 @@ public class PurpurConfig { @@ -25,10 +25,10 @@ index e5244941506e99a8a2450e798483fed6fc328b85..657776f124e761fd2017cd43c73cd94a org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27); enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85ddd7b80d 100644 +index 6a9717b8ffed00bb524689cecc544219bc08874c..c7acfd74ac66a3a15e001ce49d7de26ecc6a04fa 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1184,12 +1184,20 @@ public class PurpurWorldConfig { +@@ -1229,12 +1229,20 @@ public class PurpurWorldConfig { public boolean allayControllable = true; public double allayMaxHealth = 20.0D; public double allayScale = 1.0D; @@ -49,7 +49,7 @@ index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85 } public boolean armadilloRidable = false; -@@ -1344,6 +1352,10 @@ public class PurpurWorldConfig { +@@ -1389,6 +1397,10 @@ public class PurpurWorldConfig { public double camelMovementSpeedMin = 0.09D; public double camelMovementSpeedMax = 0.09D; public int camelBreedingTicks = 6000; @@ -60,7 +60,7 @@ index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85 private void camelSettings() { camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin); -@@ -1353,6 +1365,10 @@ public class PurpurWorldConfig { +@@ -1398,6 +1410,10 @@ public class PurpurWorldConfig { camelMovementSpeedMin = getDouble("mobs.camel.attributes.movement_speed.min", camelMovementSpeedMin); camelMovementSpeedMax = getDouble("mobs.camel.attributes.movement_speed.max", camelMovementSpeedMax); camelBreedingTicks = getInt("mobs.camel.breeding-delay-ticks", camelBreedingTicks); @@ -71,7 +71,7 @@ index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85 } public boolean catRidable = false; -@@ -1834,12 +1850,22 @@ public class PurpurWorldConfig { +@@ -1904,12 +1920,22 @@ public class PurpurWorldConfig { public boolean frogControllable = true; public float frogRidableJumpHeight = 0.65F; public int frogBreedingTicks = 6000; @@ -94,7 +94,7 @@ index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85 } public boolean ghastRidable = false; -@@ -2925,6 +2951,10 @@ public class PurpurWorldConfig { +@@ -2995,6 +3021,10 @@ public class PurpurWorldConfig { public double snifferMaxHealth = 14.0D; public double snifferScale = 1.0D; public int snifferBreedingTicks = 6000; @@ -105,7 +105,7 @@ index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85 private void snifferSettings() { snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable); snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater); -@@ -2932,6 +2962,10 @@ public class PurpurWorldConfig { +@@ -3002,6 +3032,10 @@ public class PurpurWorldConfig { snifferMaxHealth = getDouble("mobs.sniffer.attributes.max_health", snifferMaxHealth); snifferScale = Mth.clamp(getDouble("mobs.sniffer.attributes.scale", snifferScale), 0.0625D, 16.0D); snifferBreedingTicks = getInt("mobs.sniffer.breeding-delay-ticks", snifferBreedingTicks); @@ -116,7 +116,7 @@ index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85 } public boolean squidRidable = false; -@@ -3033,10 +3067,20 @@ public class PurpurWorldConfig { +@@ -3103,10 +3137,20 @@ public class PurpurWorldConfig { public boolean tadpoleRidable = false; public boolean tadpoleRidableInWater = true; public boolean tadpoleControllable = true; @@ -137,7 +137,7 @@ index a03e166b490952534e8050654c1afa975795f731..1b17643fffecd7af6ec60ef8a24eac85 } public boolean traderLlamaRidable = false; -@@ -3270,10 +3314,20 @@ public class PurpurWorldConfig { +@@ -3340,10 +3384,20 @@ public class PurpurWorldConfig { public boolean wardenRidable = false; public boolean wardenRidableInWater = true; public boolean wardenControllable = true; diff --git a/divinemc-server/purpur-patches/features/0003-Optimize-default-values-for-configs.patch b/divinemc-server/purpur-patches/features/0003-Optimize-default-values-for-configs.patch index 8224a62..44665d1 100644 --- a/divinemc-server/purpur-patches/features/0003-Optimize-default-values-for-configs.patch +++ b/divinemc-server/purpur-patches/features/0003-Optimize-default-values-for-configs.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Optimize default values for configs diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 657776f124e761fd2017cd43c73cd94a4abb20e6..6e0174abe76c43a2114cc36e2a3b865b5dbf8cce 100644 +index f84cffd066c3ba13f0fc729b6bea0a51c65b41e7..b08887e45e2818e5687712ea4e0939ea77ef036e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -246,7 +246,7 @@ public class PurpurConfig { @@ -18,10 +18,10 @@ index 657776f124e761fd2017cd43c73cd94a4abb20e6..6e0174abe76c43a2114cc36e2a3b865b useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1b17643fffecd7af6ec60ef8a24eac85ddd7b80d..225d3fab20ef461c87b260b2674229806649bc56 100644 +index c7acfd74ac66a3a15e001ce49d7de26ecc6a04fa..bafe8dee4872aa8c32063146e10713c2c07266e4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3208,8 +3208,8 @@ public class PurpurWorldConfig { +@@ -3278,8 +3278,8 @@ public class PurpurWorldConfig { public boolean villagerDisplayTradeItem = true; public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; diff --git a/divinemc-server/purpur-patches/features/0004-Configurable-movement-speed-for-entities.patch b/divinemc-server/purpur-patches/features/0004-Configurable-movement-speed-for-entities.patch index 0e5ead5..bcbed49 100644 --- a/divinemc-server/purpur-patches/features/0004-Configurable-movement-speed-for-entities.patch +++ b/divinemc-server/purpur-patches/features/0004-Configurable-movement-speed-for-entities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable movement speed for entities diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd6312a238fce 100644 +index bafe8dee4872aa8c32063146e10713c2c07266e4..fc3b82234c0aa87a288b72b466de9fcb7652c07f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1636,6 +1636,7 @@ public class PurpurWorldConfig { +@@ -1706,6 +1706,7 @@ public class PurpurWorldConfig { public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; public boolean drownedAlwaysDropExp = false; @@ -16,7 +16,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1654,6 +1655,7 @@ public class PurpurWorldConfig { +@@ -1724,6 +1725,7 @@ public class PurpurWorldConfig { drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); drownedAlwaysDropExp = getBoolean("mobs.drowned.always-drop-exp", drownedAlwaysDropExp); @@ -24,7 +24,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 } public boolean elderGuardianRidable = false; -@@ -2081,6 +2083,7 @@ public class PurpurWorldConfig { +@@ -2151,6 +2153,7 @@ public class PurpurWorldConfig { public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; public boolean huskAlwaysDropExp = false; @@ -32,7 +32,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -2098,6 +2101,7 @@ public class PurpurWorldConfig { +@@ -2168,6 +2171,7 @@ public class PurpurWorldConfig { huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); huskAlwaysDropExp = getBoolean("mobs.husk.always-drop-exp", huskAlwaysDropExp); @@ -40,7 +40,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 } public boolean illusionerRidable = false; -@@ -3489,6 +3493,7 @@ public class PurpurWorldConfig { +@@ -3559,6 +3563,7 @@ public class PurpurWorldConfig { public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; public double zombieHeadVisibilityPercent = 0.5D; @@ -48,7 +48,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -3514,6 +3519,7 @@ public class PurpurWorldConfig { +@@ -3584,6 +3589,7 @@ public class PurpurWorldConfig { zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp); zombieHeadVisibilityPercent = getDouble("mobs.zombie.head-visibility-percent", zombieHeadVisibilityPercent); @@ -56,7 +56,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 } public boolean zombieHorseRidable = false; -@@ -3563,6 +3569,7 @@ public class PurpurWorldConfig { +@@ -3633,6 +3639,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; public boolean zombieVillagerAlwaysDropExp = false; @@ -64,7 +64,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -3583,6 +3590,7 @@ public class PurpurWorldConfig { +@@ -3653,6 +3660,7 @@ public class PurpurWorldConfig { zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled); zombieVillagerAlwaysDropExp = getBoolean("mobs.zombie_villager.always-drop-exp", zombieVillagerAlwaysDropExp); @@ -72,7 +72,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 } public boolean zombifiedPiglinRidable = false; -@@ -3597,6 +3605,7 @@ public class PurpurWorldConfig { +@@ -3667,6 +3675,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = false; public boolean zombifiedPiglinTakeDamageFromWater = false; public boolean zombifiedPiglinAlwaysDropExp = false; @@ -80,7 +80,7 @@ index 225d3fab20ef461c87b260b2674229806649bc56..16baa76725af475ee1c27843ebfbd631 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -3618,6 +3627,7 @@ public class PurpurWorldConfig { +@@ -3688,6 +3697,7 @@ public class PurpurWorldConfig { zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); zombifiedPiglinAlwaysDropExp = getBoolean("mobs.zombified_piglin.always-drop-exp", zombifiedPiglinAlwaysDropExp); diff --git a/gradle.properties b/gradle.properties index 92d1180..aefc162 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ group = org.bxteam.divinemc -version=1.21.8-R0.1-SNAPSHOT +version=1.21.10-R0.1-SNAPSHOT -mcVersion=1.21.8 -purpurRef=9030575af3aad201072770067d7fba5abc745312 -experimental=false +mcVersion=1.21.10 +purpurRef=82ecaae274ff2a1842f162dc754407c0fd5f7541 +experimental=true org.gradle.configuration-cache=true org.gradle.caching = true diff --git a/divinemc-server/minecraft-patches/features/0003-Completely-remove-Mojang-profiler.patch b/patches/todo/minecraft-patches/0003-Completely-remove-Mojang-profiler.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0003-Completely-remove-Mojang-profiler.patch rename to patches/todo/minecraft-patches/0003-Completely-remove-Mojang-profiler.patch diff --git a/divinemc-server/minecraft-patches/features/0004-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch b/patches/todo/minecraft-patches/0004-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0004-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch rename to patches/todo/minecraft-patches/0004-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch diff --git a/divinemc-server/minecraft-patches/features/0005-Paper-PR-Throttle-failed-spawn-attempts.patch b/patches/todo/minecraft-patches/0005-Paper-PR-Throttle-failed-spawn-attempts.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0005-Paper-PR-Throttle-failed-spawn-attempts.patch rename to patches/todo/minecraft-patches/0005-Paper-PR-Throttle-failed-spawn-attempts.patch diff --git a/divinemc-server/minecraft-patches/features/0006-Raytrace-AntiXray-SDK-integration.patch b/patches/todo/minecraft-patches/0006-Raytrace-AntiXray-SDK-integration.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0006-Raytrace-AntiXray-SDK-integration.patch rename to patches/todo/minecraft-patches/0006-Raytrace-AntiXray-SDK-integration.patch diff --git a/divinemc-server/minecraft-patches/features/0007-Paper-PR-Add-ticket-on-player-join-to-avoid-chunk-lo.patch b/patches/todo/minecraft-patches/0007-Paper-PR-Add-ticket-on-player-join-to-avoid-chunk-lo.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0007-Paper-PR-Add-ticket-on-player-join-to-avoid-chunk-lo.patch rename to patches/todo/minecraft-patches/0007-Paper-PR-Add-ticket-on-player-join-to-avoid-chunk-lo.patch diff --git a/divinemc-server/minecraft-patches/features/0008-Smooth-teleport-API.patch b/patches/todo/minecraft-patches/0008-Smooth-teleport-API.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0008-Smooth-teleport-API.patch rename to patches/todo/minecraft-patches/0008-Smooth-teleport-API.patch diff --git a/divinemc-server/minecraft-patches/features/0009-lithium-fast_util.patch b/patches/todo/minecraft-patches/0009-lithium-fast_util.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0009-lithium-fast_util.patch rename to patches/todo/minecraft-patches/0009-lithium-fast_util.patch diff --git a/divinemc-server/minecraft-patches/features/0010-C2ME-Optimize-world-gen-math.patch b/patches/todo/minecraft-patches/0010-C2ME-Optimize-world-gen-math.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0010-C2ME-Optimize-world-gen-math.patch rename to patches/todo/minecraft-patches/0010-C2ME-Optimize-world-gen-math.patch diff --git a/divinemc-server/minecraft-patches/features/0011-Async-locate-command.patch b/patches/todo/minecraft-patches/0011-Async-locate-command.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0011-Async-locate-command.patch rename to patches/todo/minecraft-patches/0011-Async-locate-command.patch diff --git a/divinemc-server/minecraft-patches/features/0012-Carpet-Fixes-RecipeManager-Optimize.patch b/patches/todo/minecraft-patches/0012-Carpet-Fixes-RecipeManager-Optimize.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0012-Carpet-Fixes-RecipeManager-Optimize.patch rename to patches/todo/minecraft-patches/0012-Carpet-Fixes-RecipeManager-Optimize.patch diff --git a/divinemc-server/minecraft-patches/features/0013-lithium-faster-chunk-serialization.patch b/patches/todo/minecraft-patches/0013-lithium-faster-chunk-serialization.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0013-lithium-faster-chunk-serialization.patch rename to patches/todo/minecraft-patches/0013-lithium-faster-chunk-serialization.patch diff --git a/divinemc-server/minecraft-patches/features/0014-C2ME-optimize-noise-generation.patch b/patches/todo/minecraft-patches/0014-C2ME-optimize-noise-generation.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0014-C2ME-optimize-noise-generation.patch rename to patches/todo/minecraft-patches/0014-C2ME-optimize-noise-generation.patch diff --git a/divinemc-server/minecraft-patches/features/0015-Use-Java-s-Math-functions.patch b/patches/todo/minecraft-patches/0015-Use-Java-s-Math-functions.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0015-Use-Java-s-Math-functions.patch rename to patches/todo/minecraft-patches/0015-Use-Java-s-Math-functions.patch diff --git a/divinemc-server/minecraft-patches/features/0016-Disable-leaf-decay.patch b/patches/todo/minecraft-patches/0016-Disable-leaf-decay.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0016-Disable-leaf-decay.patch rename to patches/todo/minecraft-patches/0016-Disable-leaf-decay.patch diff --git a/divinemc-server/minecraft-patches/features/0017-Optimize-entities.patch b/patches/todo/minecraft-patches/0017-Optimize-entities.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0017-Optimize-entities.patch rename to patches/todo/minecraft-patches/0017-Optimize-entities.patch diff --git a/divinemc-server/minecraft-patches/features/0018-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch b/patches/todo/minecraft-patches/0018-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0018-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch rename to patches/todo/minecraft-patches/0018-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch diff --git a/divinemc-server/minecraft-patches/features/0019-Carpet-Fixes-Optimized-getBiome-method.patch b/patches/todo/minecraft-patches/0019-Carpet-Fixes-Optimized-getBiome-method.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0019-Carpet-Fixes-Optimized-getBiome-method.patch rename to patches/todo/minecraft-patches/0019-Carpet-Fixes-Optimized-getBiome-method.patch diff --git a/divinemc-server/minecraft-patches/features/0020-Carpet-Fixes-Sheep-Optimization.patch b/patches/todo/minecraft-patches/0020-Carpet-Fixes-Sheep-Optimization.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0020-Carpet-Fixes-Sheep-Optimization.patch rename to patches/todo/minecraft-patches/0020-Carpet-Fixes-Sheep-Optimization.patch diff --git a/divinemc-server/minecraft-patches/features/0021-Carpet-AMS-Addition-Optimized-dragon-respawn.patch b/patches/todo/minecraft-patches/0021-Carpet-AMS-Addition-Optimized-dragon-respawn.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0021-Carpet-AMS-Addition-Optimized-dragon-respawn.patch rename to patches/todo/minecraft-patches/0021-Carpet-AMS-Addition-Optimized-dragon-respawn.patch diff --git a/divinemc-server/minecraft-patches/features/0022-ModernFix-compact_bit_storage.patch b/patches/todo/minecraft-patches/0022-ModernFix-compact_bit_storage.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0022-ModernFix-compact_bit_storage.patch rename to patches/todo/minecraft-patches/0022-ModernFix-compact_bit_storage.patch diff --git a/divinemc-server/minecraft-patches/features/0023-Option-to-disable-disconnect.spam.patch b/patches/todo/minecraft-patches/0023-Option-to-disable-disconnect.spam.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0023-Option-to-disable-disconnect.spam.patch rename to patches/todo/minecraft-patches/0023-Option-to-disable-disconnect.spam.patch diff --git a/divinemc-server/minecraft-patches/features/0024-Option-to-disable-saving-of-snowball-and-firework.patch b/patches/todo/minecraft-patches/0024-Option-to-disable-saving-of-snowball-and-firework.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0024-Option-to-disable-saving-of-snowball-and-firework.patch rename to patches/todo/minecraft-patches/0024-Option-to-disable-saving-of-snowball-and-firework.patch diff --git a/divinemc-server/minecraft-patches/features/0025-Snowball-and-Egg-knockback.patch b/patches/todo/minecraft-patches/0025-Snowball-and-Egg-knockback.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0025-Snowball-and-Egg-knockback.patch rename to patches/todo/minecraft-patches/0025-Snowball-and-Egg-knockback.patch diff --git a/divinemc-server/minecraft-patches/features/0026-Optimize-suffocation.patch b/patches/todo/minecraft-patches/0026-Optimize-suffocation.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0026-Optimize-suffocation.patch rename to patches/todo/minecraft-patches/0026-Optimize-suffocation.patch diff --git a/divinemc-server/minecraft-patches/features/0027-Reduce-chunk-loading-lookups.patch b/patches/todo/minecraft-patches/0027-Reduce-chunk-loading-lookups.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0027-Reduce-chunk-loading-lookups.patch rename to patches/todo/minecraft-patches/0027-Reduce-chunk-loading-lookups.patch diff --git a/divinemc-server/minecraft-patches/features/0028-Configurable-movement-speed-for-entities.patch b/patches/todo/minecraft-patches/0028-Configurable-movement-speed-for-entities.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0028-Configurable-movement-speed-for-entities.patch rename to patches/todo/minecraft-patches/0028-Configurable-movement-speed-for-entities.patch diff --git a/divinemc-server/minecraft-patches/features/0029-Option-to-allow-weird-movement-and-disable-teleporti.patch b/patches/todo/minecraft-patches/0029-Option-to-allow-weird-movement-and-disable-teleporti.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0029-Option-to-allow-weird-movement-and-disable-teleporti.patch rename to patches/todo/minecraft-patches/0029-Option-to-allow-weird-movement-and-disable-teleporti.patch diff --git a/divinemc-server/minecraft-patches/features/0030-Optimize-Raids.patch b/patches/todo/minecraft-patches/0030-Optimize-Raids.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0030-Optimize-Raids.patch rename to patches/todo/minecraft-patches/0030-Optimize-Raids.patch diff --git a/divinemc-server/minecraft-patches/features/0031-Small-optimization-to-LinearPalette.patch b/patches/todo/minecraft-patches/0031-Small-optimization-to-LinearPalette.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0031-Small-optimization-to-LinearPalette.patch rename to patches/todo/minecraft-patches/0031-Small-optimization-to-LinearPalette.patch diff --git a/divinemc-server/minecraft-patches/features/0032-Optimize-VarInt-and-VarLong-write.patch b/patches/todo/minecraft-patches/0032-Optimize-VarInt-and-VarLong-write.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0032-Optimize-VarInt-and-VarLong-write.patch rename to patches/todo/minecraft-patches/0032-Optimize-VarInt-and-VarLong-write.patch diff --git a/divinemc-server/minecraft-patches/features/0033-Optimize-Fluids.patch b/patches/todo/minecraft-patches/0033-Optimize-Fluids.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0033-Optimize-Fluids.patch rename to patches/todo/minecraft-patches/0033-Optimize-Fluids.patch diff --git a/divinemc-server/minecraft-patches/features/0034-Optimize-Structure-Generation.patch b/patches/todo/minecraft-patches/0034-Optimize-Structure-Generation.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0034-Optimize-Structure-Generation.patch rename to patches/todo/minecraft-patches/0034-Optimize-Structure-Generation.patch diff --git a/divinemc-server/minecraft-patches/features/0035-Implement-NoChatReports.patch b/patches/todo/minecraft-patches/0035-Implement-NoChatReports.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0035-Implement-NoChatReports.patch rename to patches/todo/minecraft-patches/0035-Implement-NoChatReports.patch diff --git a/divinemc-server/minecraft-patches/features/0036-Lag-compensation.patch b/patches/todo/minecraft-patches/0036-Lag-compensation.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0036-Lag-compensation.patch rename to patches/todo/minecraft-patches/0036-Lag-compensation.patch diff --git a/divinemc-server/minecraft-patches/features/0037-Virtual-Threads.patch b/patches/todo/minecraft-patches/0037-Virtual-Threads.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0037-Virtual-Threads.patch rename to patches/todo/minecraft-patches/0037-Virtual-Threads.patch diff --git a/divinemc-server/minecraft-patches/features/0038-Async-Chunk-Sending.patch b/patches/todo/minecraft-patches/0038-Async-Chunk-Sending.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0038-Async-Chunk-Sending.patch rename to patches/todo/minecraft-patches/0038-Async-Chunk-Sending.patch diff --git a/divinemc-server/minecraft-patches/features/0039-Command-block-parse-results-caching.patch b/patches/todo/minecraft-patches/0039-Command-block-parse-results-caching.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0039-Command-block-parse-results-caching.patch rename to patches/todo/minecraft-patches/0039-Command-block-parse-results-caching.patch diff --git a/divinemc-server/minecraft-patches/features/0040-Player-ProfileResult-caching.patch b/patches/todo/minecraft-patches/0040-Player-ProfileResult-caching.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0040-Player-ProfileResult-caching.patch rename to patches/todo/minecraft-patches/0040-Player-ProfileResult-caching.patch diff --git a/divinemc-server/minecraft-patches/features/0041-Implement-Secure-Seed.patch b/patches/todo/minecraft-patches/0041-Implement-Secure-Seed.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0041-Implement-Secure-Seed.patch rename to patches/todo/minecraft-patches/0041-Implement-Secure-Seed.patch diff --git a/divinemc-server/minecraft-patches/features/0042-Dynamic-Activation-of-Brain.patch b/patches/todo/minecraft-patches/0042-Dynamic-Activation-of-Brain.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0042-Dynamic-Activation-of-Brain.patch rename to patches/todo/minecraft-patches/0042-Dynamic-Activation-of-Brain.patch diff --git a/divinemc-server/minecraft-patches/features/0043-Petal-Async-Pathfinding.patch b/patches/todo/minecraft-patches/0043-Petal-Async-Pathfinding.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0043-Petal-Async-Pathfinding.patch rename to patches/todo/minecraft-patches/0043-Petal-Async-Pathfinding.patch diff --git a/divinemc-server/minecraft-patches/features/0044-Petal-Multithreaded-Tracker.patch b/patches/todo/minecraft-patches/0044-Petal-Multithreaded-Tracker.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0044-Petal-Multithreaded-Tracker.patch rename to patches/todo/minecraft-patches/0044-Petal-Multithreaded-Tracker.patch diff --git a/divinemc-server/minecraft-patches/features/0045-Pufferfish-Optimize-mob-spawning.patch b/patches/todo/minecraft-patches/0045-Pufferfish-Optimize-mob-spawning.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0045-Pufferfish-Optimize-mob-spawning.patch rename to patches/todo/minecraft-patches/0045-Pufferfish-Optimize-mob-spawning.patch diff --git a/divinemc-server/minecraft-patches/features/0046-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch b/patches/todo/minecraft-patches/0046-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0046-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch rename to patches/todo/minecraft-patches/0046-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch diff --git a/divinemc-server/minecraft-patches/features/0047-C2ME-Density-Function-Compiler.patch b/patches/todo/minecraft-patches/0047-C2ME-Density-Function-Compiler.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0047-C2ME-Density-Function-Compiler.patch rename to patches/todo/minecraft-patches/0047-C2ME-Density-Function-Compiler.patch diff --git a/divinemc-server/minecraft-patches/features/0048-Clump-experience-orbs.patch b/patches/todo/minecraft-patches/0048-Clump-experience-orbs.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0048-Clump-experience-orbs.patch rename to patches/todo/minecraft-patches/0048-Clump-experience-orbs.patch diff --git a/divinemc-server/minecraft-patches/features/0049-SparklyPaper-Parallel-world-ticking.patch b/patches/todo/minecraft-patches/0049-SparklyPaper-Parallel-world-ticking.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0049-SparklyPaper-Parallel-world-ticking.patch rename to patches/todo/minecraft-patches/0049-SparklyPaper-Parallel-world-ticking.patch diff --git a/divinemc-server/minecraft-patches/features/0050-MSPT-Tracking-for-each-world.patch b/patches/todo/minecraft-patches/0050-MSPT-Tracking-for-each-world.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0050-MSPT-Tracking-for-each-world.patch rename to patches/todo/minecraft-patches/0050-MSPT-Tracking-for-each-world.patch diff --git a/divinemc-server/minecraft-patches/features/0051-Catch-update-suppressors.patch b/patches/todo/minecraft-patches/0051-Catch-update-suppressors.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0051-Catch-update-suppressors.patch rename to patches/todo/minecraft-patches/0051-Catch-update-suppressors.patch diff --git a/divinemc-server/minecraft-patches/features/0052-Regionized-Chunk-Ticking.patch b/patches/todo/minecraft-patches/0052-Regionized-Chunk-Ticking.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0052-Regionized-Chunk-Ticking.patch rename to patches/todo/minecraft-patches/0052-Regionized-Chunk-Ticking.patch diff --git a/divinemc-server/minecraft-patches/features/0053-C2ME-Limit-NBT-cache.patch b/patches/todo/minecraft-patches/0053-C2ME-Limit-NBT-cache.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0053-C2ME-Limit-NBT-cache.patch rename to patches/todo/minecraft-patches/0053-C2ME-Limit-NBT-cache.patch diff --git a/divinemc-server/minecraft-patches/features/0054-C2ME-Optimize-Aquifer-and-Beardifier.patch b/patches/todo/minecraft-patches/0054-C2ME-Optimize-Aquifer-and-Beardifier.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0054-C2ME-Optimize-Aquifer-and-Beardifier.patch rename to patches/todo/minecraft-patches/0054-C2ME-Optimize-Aquifer-and-Beardifier.patch diff --git a/divinemc-server/minecraft-patches/features/0055-Copper-Bulb-1gt-delay.patch b/patches/todo/minecraft-patches/0055-Copper-Bulb-1gt-delay.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0055-Copper-Bulb-1gt-delay.patch rename to patches/todo/minecraft-patches/0055-Copper-Bulb-1gt-delay.patch diff --git a/divinemc-server/minecraft-patches/features/0056-Crafter-1gt-delay.patch b/patches/todo/minecraft-patches/0056-Crafter-1gt-delay.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0056-Crafter-1gt-delay.patch rename to patches/todo/minecraft-patches/0056-Crafter-1gt-delay.patch diff --git a/divinemc-server/minecraft-patches/features/0057-Raytrace-Entity-Tracker.patch b/patches/todo/minecraft-patches/0057-Raytrace-Entity-Tracker.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0057-Raytrace-Entity-Tracker.patch rename to patches/todo/minecraft-patches/0057-Raytrace-Entity-Tracker.patch diff --git a/divinemc-server/minecraft-patches/features/0058-Async-Join-Thread.patch b/patches/todo/minecraft-patches/0058-Async-Join-Thread.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0058-Async-Join-Thread.patch rename to patches/todo/minecraft-patches/0058-Async-Join-Thread.patch diff --git a/divinemc-server/minecraft-patches/features/0059-Leaves-Protocol-Core.patch b/patches/todo/minecraft-patches/0059-Leaves-Protocol-Core.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0059-Leaves-Protocol-Core.patch rename to patches/todo/minecraft-patches/0059-Leaves-Protocol-Core.patch diff --git a/divinemc-server/minecraft-patches/features/0060-Paper-PR-Optimise-non-flush-packet-sending.patch b/patches/todo/minecraft-patches/0060-Paper-PR-Optimise-non-flush-packet-sending.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0060-Paper-PR-Optimise-non-flush-packet-sending.patch rename to patches/todo/minecraft-patches/0060-Paper-PR-Optimise-non-flush-packet-sending.patch diff --git a/divinemc-server/minecraft-patches/features/0061-Linear-region-file-format.patch b/patches/todo/minecraft-patches/0061-Linear-region-file-format.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0061-Linear-region-file-format.patch rename to patches/todo/minecraft-patches/0061-Linear-region-file-format.patch diff --git a/divinemc-server/minecraft-patches/features/0062-Cleanup-dead-code-from-Paper.patch b/patches/todo/minecraft-patches/0062-Cleanup-dead-code-from-Paper.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0062-Cleanup-dead-code-from-Paper.patch rename to patches/todo/minecraft-patches/0062-Cleanup-dead-code-from-Paper.patch diff --git a/divinemc-server/minecraft-patches/features/0063-C2ME-The-End-Biome-Cache.patch b/patches/todo/minecraft-patches/0063-C2ME-The-End-Biome-Cache.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0063-C2ME-The-End-Biome-Cache.patch rename to patches/todo/minecraft-patches/0063-C2ME-The-End-Biome-Cache.patch diff --git a/divinemc-server/minecraft-patches/features/0064-Euclidean-distance-squared-option.patch b/patches/todo/minecraft-patches/0064-Euclidean-distance-squared-option.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0064-Euclidean-distance-squared-option.patch rename to patches/todo/minecraft-patches/0064-Euclidean-distance-squared-option.patch diff --git a/divinemc-server/minecraft-patches/features/0065-Do-not-send-spectator-change-packet.patch b/patches/todo/minecraft-patches/0065-Do-not-send-spectator-change-packet.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0065-Do-not-send-spectator-change-packet.patch rename to patches/todo/minecraft-patches/0065-Do-not-send-spectator-change-packet.patch diff --git a/divinemc-server/minecraft-patches/features/0066-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch b/patches/todo/minecraft-patches/0066-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0066-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch rename to patches/todo/minecraft-patches/0066-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch diff --git a/divinemc-server/minecraft-patches/features/0067-Configurable-player-spawn-tracking-range.patch b/patches/todo/minecraft-patches/0067-Configurable-player-spawn-tracking-range.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0067-Configurable-player-spawn-tracking-range.patch rename to patches/todo/minecraft-patches/0067-Configurable-player-spawn-tracking-range.patch diff --git a/divinemc-server/minecraft-patches/features/0068-Optimize-collections.patch b/patches/todo/minecraft-patches/0068-Optimize-collections.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0068-Optimize-collections.patch rename to patches/todo/minecraft-patches/0068-Optimize-collections.patch diff --git a/divinemc-server/minecraft-patches/features/0069-Optimize-level-ticking.patch b/patches/todo/minecraft-patches/0069-Optimize-level-ticking.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0069-Optimize-level-ticking.patch rename to patches/todo/minecraft-patches/0069-Optimize-level-ticking.patch diff --git a/divinemc-server/minecraft-patches/features/0070-Optimize-Moonrise.patch b/patches/todo/minecraft-patches/0070-Optimize-Moonrise.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0070-Optimize-Moonrise.patch rename to patches/todo/minecraft-patches/0070-Optimize-Moonrise.patch diff --git a/divinemc-server/minecraft-patches/features/0071-lithium-combined_heightmap_update.patch b/patches/todo/minecraft-patches/0071-lithium-combined_heightmap_update.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0071-lithium-combined_heightmap_update.patch rename to patches/todo/minecraft-patches/0071-lithium-combined_heightmap_update.patch diff --git a/divinemc-server/minecraft-patches/features/0072-Entity-Status-Lock.patch b/patches/todo/minecraft-patches/0072-Entity-Status-Lock.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0072-Entity-Status-Lock.patch rename to patches/todo/minecraft-patches/0072-Entity-Status-Lock.patch diff --git a/divinemc-server/minecraft-patches/features/0073-lithium-sleeping_block_entity.patch b/patches/todo/minecraft-patches/0073-lithium-sleeping_block_entity.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0073-lithium-sleeping_block_entity.patch rename to patches/todo/minecraft-patches/0073-lithium-sleeping_block_entity.patch diff --git a/divinemc-server/minecraft-patches/features/0074-lithium-equipment_tracking.patch b/patches/todo/minecraft-patches/0074-lithium-equipment_tracking.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0074-lithium-equipment_tracking.patch rename to patches/todo/minecraft-patches/0074-lithium-equipment_tracking.patch diff --git a/divinemc-server/minecraft-patches/features/0075-Configurable-Files-Locations.patch b/patches/todo/minecraft-patches/0075-Configurable-Files-Locations.patch similarity index 100% rename from divinemc-server/minecraft-patches/features/0075-Configurable-Files-Locations.patch rename to patches/todo/minecraft-patches/0075-Configurable-Files-Locations.patch diff --git a/divinemc-server/paper-patches/features/0003-Delete-timings.patch b/patches/todo/paper-patches/0003-Delete-timings.patch similarity index 100% rename from divinemc-server/paper-patches/features/0003-Delete-timings.patch rename to patches/todo/paper-patches/0003-Delete-timings.patch diff --git a/divinemc-server/paper-patches/features/0004-Delete-ReloadCommand.patch b/patches/todo/paper-patches/0004-Delete-ReloadCommand.patch similarity index 100% rename from divinemc-server/paper-patches/features/0004-Delete-ReloadCommand.patch rename to patches/todo/paper-patches/0004-Delete-ReloadCommand.patch diff --git a/divinemc-server/paper-patches/features/0005-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch b/patches/todo/paper-patches/0005-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch similarity index 100% rename from divinemc-server/paper-patches/features/0005-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch rename to patches/todo/paper-patches/0005-Paper-PR-Add-FillBottleEvents-for-player-and-dispens.patch diff --git a/divinemc-server/paper-patches/features/0006-Paper-PR-Player-standing-on-position-API.patch b/patches/todo/paper-patches/0006-Paper-PR-Player-standing-on-position-API.patch similarity index 100% rename from divinemc-server/paper-patches/features/0006-Paper-PR-Player-standing-on-position-API.patch rename to patches/todo/paper-patches/0006-Paper-PR-Player-standing-on-position-API.patch diff --git a/divinemc-server/paper-patches/features/0007-Paper-PR-Throttle-failed-spawn-attempts.patch b/patches/todo/paper-patches/0007-Paper-PR-Throttle-failed-spawn-attempts.patch similarity index 100% rename from divinemc-server/paper-patches/features/0007-Paper-PR-Throttle-failed-spawn-attempts.patch rename to patches/todo/paper-patches/0007-Paper-PR-Throttle-failed-spawn-attempts.patch diff --git a/divinemc-server/paper-patches/features/0008-Optimize-default-values-for-configs.patch b/patches/todo/paper-patches/0008-Optimize-default-values-for-configs.patch similarity index 100% rename from divinemc-server/paper-patches/features/0008-Optimize-default-values-for-configs.patch rename to patches/todo/paper-patches/0008-Optimize-default-values-for-configs.patch diff --git a/divinemc-server/paper-patches/features/0009-Configurable-files-locations-and-plugin-loading.patch b/patches/todo/paper-patches/0009-Configurable-files-locations-and-plugin-loading.patch similarity index 100% rename from divinemc-server/paper-patches/features/0009-Configurable-files-locations-and-plugin-loading.patch rename to patches/todo/paper-patches/0009-Configurable-files-locations-and-plugin-loading.patch diff --git a/divinemc-server/paper-patches/features/0010-Smooth-teleport-API.patch b/patches/todo/paper-patches/0010-Smooth-teleport-API.patch similarity index 100% rename from divinemc-server/paper-patches/features/0010-Smooth-teleport-API.patch rename to patches/todo/paper-patches/0010-Smooth-teleport-API.patch diff --git a/divinemc-server/paper-patches/features/0011-SparklyPaper-Optimize-canSee-checks.patch b/patches/todo/paper-patches/0011-SparklyPaper-Optimize-canSee-checks.patch similarity index 100% rename from divinemc-server/paper-patches/features/0011-SparklyPaper-Optimize-canSee-checks.patch rename to patches/todo/paper-patches/0011-SparklyPaper-Optimize-canSee-checks.patch diff --git a/divinemc-server/paper-patches/features/0012-Virtual-Threads.patch b/patches/todo/paper-patches/0012-Virtual-Threads.patch similarity index 100% rename from divinemc-server/paper-patches/features/0012-Virtual-Threads.patch rename to patches/todo/paper-patches/0012-Virtual-Threads.patch diff --git a/divinemc-server/paper-patches/features/0013-Implement-Secure-Seed.patch b/patches/todo/paper-patches/0013-Implement-Secure-Seed.patch similarity index 100% rename from divinemc-server/paper-patches/features/0013-Implement-Secure-Seed.patch rename to patches/todo/paper-patches/0013-Implement-Secure-Seed.patch diff --git a/divinemc-server/paper-patches/features/0014-Petal-Multithreaded-Tracker.patch b/patches/todo/paper-patches/0014-Petal-Multithreaded-Tracker.patch similarity index 100% rename from divinemc-server/paper-patches/features/0014-Petal-Multithreaded-Tracker.patch rename to patches/todo/paper-patches/0014-Petal-Multithreaded-Tracker.patch diff --git a/divinemc-server/paper-patches/features/0015-Pufferfish-Optimize-mob-spawning.patch b/patches/todo/paper-patches/0015-Pufferfish-Optimize-mob-spawning.patch similarity index 100% rename from divinemc-server/paper-patches/features/0015-Pufferfish-Optimize-mob-spawning.patch rename to patches/todo/paper-patches/0015-Pufferfish-Optimize-mob-spawning.patch diff --git a/divinemc-server/paper-patches/features/0016-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch b/patches/todo/paper-patches/0016-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch similarity index 100% rename from divinemc-server/paper-patches/features/0016-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch rename to patches/todo/paper-patches/0016-Pufferfish-Simpler-ShapelessRecipes-comparison-for-V.patch diff --git a/divinemc-server/paper-patches/features/0017-SparklyPaper-Parallel-world-ticking.patch b/patches/todo/paper-patches/0017-SparklyPaper-Parallel-world-ticking.patch similarity index 100% rename from divinemc-server/paper-patches/features/0017-SparklyPaper-Parallel-world-ticking.patch rename to patches/todo/paper-patches/0017-SparklyPaper-Parallel-world-ticking.patch diff --git a/divinemc-server/paper-patches/features/0018-Leaves-Protocol-Core.patch b/patches/todo/paper-patches/0018-Leaves-Protocol-Core.patch similarity index 100% rename from divinemc-server/paper-patches/features/0018-Leaves-Protocol-Core.patch rename to patches/todo/paper-patches/0018-Leaves-Protocol-Core.patch diff --git a/divinemc-server/paper-patches/features/0019-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch b/patches/todo/paper-patches/0019-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch similarity index 100% rename from divinemc-server/paper-patches/features/0019-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch rename to patches/todo/paper-patches/0019-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch diff --git a/divinemc-server/paper-patches/features/0020-Optimize-Moonrise.patch b/patches/todo/paper-patches/0020-Optimize-Moonrise.patch similarity index 100% rename from divinemc-server/paper-patches/features/0020-Optimize-Moonrise.patch rename to patches/todo/paper-patches/0020-Optimize-Moonrise.patch