From ababd9000985c38872c121897decc022d9e7928c Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Tue, 21 Jan 2025 07:14:02 -0500 Subject: [PATCH] [ci skip] cleanup --- .../features/0001-Rebrand.patch | 16 +- .../features/0002-Leaf-config.patch | 8 +- ...07-Fix-Pufferfish-and-Purpur-patches.patch | 71 +- .../0010-Remove-vanilla-username-check.patch | 14 +- ...ck-for-broken-BungeeCord-configurat.patch} | 2 +- ...Remove-UseItemOnPacket-Too-Far-Check.patch | 11 +- ...et-Fixes-Use-optimized-RecipeManager.patch | 23 +- ...Akarin-Save-Json-list-asynchronously.patch | 12 +- .../0043-Improve-Purpur-AFK-system.patch | 8 +- ...6-Remove-stream-in-updateFluidOnEyes.patch | 4 +- .../0091-Optimize-Entity-distanceToSqr.patch | 4 +- .../paper-patches/features/0001-Rebrand.patch | 607 +++++++++++++++++- ...05-Fix-Pufferfish-and-Purpur-patches.patch | 28 +- .../ConfigurableMaxUseItemDistance.java | 2 +- 14 files changed, 683 insertions(+), 127 deletions(-) rename leaf-server/minecraft-patches/features/{0011-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch => 0011-Remove-Spigot-check-for-broken-BungeeCord-configurat.patch} (96%) diff --git a/leaf-server/minecraft-patches/features/0001-Rebrand.patch b/leaf-server/minecraft-patches/features/0001-Rebrand.patch index 6f09cec2..93daabf8 100644 --- a/leaf-server/minecraft-patches/features/0001-Rebrand.patch +++ b/leaf-server/minecraft-patches/features/0001-Rebrand.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Rebrand diff --git a/net/minecraft/CrashReport.java b/net/minecraft/CrashReport.java -index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..60afaa49e54ff1a52bc52b99ad160682a68dcd97 100644 +index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..5a9173b6039ee8404529a04904c5f9e9343d74d8 100644 --- a/net/minecraft/CrashReport.java +++ b/net/minecraft/CrashReport.java @@ -30,6 +30,7 @@ public class CrashReport { private boolean trackingStackTrace = true; private StackTraceElement[] uncategorizedStackTrace = new StackTraceElement[0]; private final SystemReport systemReport = new SystemReport(); -+ private List extraInfo = List.of("", "DO NOT REPORT THIS TO PAPER OR GALE! REPORT TO LEAF INSTEAD!", ""); // Leaf - Purpur ++ private List extraInfo = List.of("", "DO NOT REPORT THIS TO PAPER OR GALE! REPORT TO LEAF INSTEAD!", ""); // Leaf - Rebrand public CrashReport(String title, Throwable exception) { io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(exception); // Paper @@ -21,7 +21,7 @@ index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..60afaa49e54ff1a52bc52b99ad160682 public String getFriendlyReport(ReportType type) { - return this.getFriendlyReport(type, List.of()); -+ return this.getFriendlyReport(type, extraInfo); // Leaf - Purpur ++ return this.getFriendlyReport(type, extraInfo); // Leaf - Rebrand } @Nullable @@ -30,12 +30,12 @@ index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..60afaa49e54ff1a52bc52b99ad160682 public boolean saveToFile(Path path, ReportType type) { - return this.saveToFile(path, type, List.of()); -+ return this.saveToFile(path, type, extraInfo); // Leaf - Purpur ++ return this.saveToFile(path, type, extraInfo); // Leaf - Rebrand } public SystemReport getSystemReport() { diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java -index aea139e47a0866c63c0fc6728840e5ad92a26403..3d8d7460ab31e9183e26ada76ad05378f8bb925d 100644 +index aea139e47a0866c63c0fc6728840e5ad92a26403..ac7352a2b264abf4db4b89f39a2c86f390776336 100644 --- a/net/minecraft/world/damagesource/DamageSource.java +++ b/net/minecraft/world/damagesource/DamageSource.java @@ -66,7 +66,7 @@ public class DamageSource { @@ -43,12 +43,12 @@ index aea139e47a0866c63c0fc6728840e5ad92a26403..3d8d7460ab31e9183e26ada76ad05378 public DamageSource customEventDamager(Entity entity) { if (this.directEntity != null) { - throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); // Gale - branding changes -+ throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Gale - branding changes // Leaf ++ throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Gale - branding changes // Leaf - Rebrand } DamageSource damageSource = this.cloneInstance(); damageSource.customEventDamager = entity; diff --git a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index 3abb8aefcca325e28f0af07bd859be74f0aee08d..7fff86a4956f59b2f4a9f7e283256879c034c1b8 100644 +index 3abb8aefcca325e28f0af07bd859be74f0aee08d..320e9e24711d2a326313b3a202c7ef987f71f229 100644 --- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java @@ -288,7 +288,7 @@ public class RegionFileStorage implements AutoCloseable, ca.spottedleaf.moonrise @@ -56,7 +56,7 @@ index 3abb8aefcca325e28f0af07bd859be74f0aee08d..7fff86a4956f59b2f4a9f7e283256879 but we do want people to report thread issues to Gale. */ - org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER OR GALE - You may ask for help on Discord, but do not file an issue. These error messages can not be removed. - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); -+ org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER OR LEAF - You may ask for help on Discord, but do not file an issue. These error messages can not be removed. - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Leaf ++ org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER OR LEAF - You may ask for help on Discord, but do not file an issue. These error messages can not be removed. - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Leaf - Rebrand // Gale end - branding changes } diff --git a/leaf-server/minecraft-patches/features/0002-Leaf-config.patch b/leaf-server/minecraft-patches/features/0002-Leaf-config.patch index 81711623..5f1dfea1 100644 --- a/leaf-server/minecraft-patches/features/0002-Leaf-config.patch +++ b/leaf-server/minecraft-patches/features/0002-Leaf-config.patch @@ -11,26 +11,26 @@ Add per world config Add config reload diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index 9aa664537cc37e44db46d5a2a64ae3116938c681..841546cef2a98427ae78ca2a07693391eb0d3035 100644 +index 9aa664537cc37e44db46d5a2a64ae3116938c681..748816e3f325468f523bdb8dfb94992883ed1989 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java @@ -112,6 +112,7 @@ public class Main { Bootstrap.bootStrap(); Bootstrap.validate(); Util.startTimerHackThread(); -+ org.dreeam.leaf.config.LeafConfig.loadConfig(); // Leaf ++ org.dreeam.leaf.config.LeafConfig.loadConfig(); // Leaf - Leaf config Path path1 = Paths.get("server.properties"); DedicatedServerSettings dedicatedServerSettings = new DedicatedServerSettings(optionSet); // CraftBukkit - CLI argument support dedicatedServerSettings.forceSave(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 0da1eeab6a2f8336283a62ebcb3aa0d1b1933c85..8794ae06ac574b399cc2dbb3fa61b6ef51d8062d 100644 +index 0da1eeab6a2f8336283a62ebcb3aa0d1b1933c85..bef8b563ea638a613c140000e69f53d12e17fb2b 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1175,6 +1175,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entityType, Level level) { + this.type = entityType; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 8728aba69ac24b52e6221ea2ddd8fc6d5a26f3f3..956c1b5422c177e0da5140c4184720d10aa4e790 100644 +index 8728aba69ac24b52e6221ea2ddd8fc6d5a26f3f3..9f36d063168c262fec7e69a96bad375b4eaff797 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -1024,13 +1024,13 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -144,16 +148,16 @@ index 8728aba69ac24b52e6221ea2ddd8fc6d5a26f3f3..956c1b5422c177e0da5140c4184720d1 EntityType type = lookingEntity.getType(); // Purpur start - Mob head visibility percent - if (type == EntityType.SKELETON && itemBySlot.is(Items.SKELETON_SKULL)) { -+ if (type == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL)) { ++ if (type == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL)) { // Leaf - Fix Pufferfish and Purpur patches d *= lookingEntity.level().purpurConfig.skeletonHeadVisibilityPercent; - } else if (type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD)) { -+ } else if (type == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD)) { ++ } else if (type == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD)) { // Leaf - Fix Pufferfish and Purpur patches d *= lookingEntity.level().purpurConfig.zombieHeadVisibilityPercent; - } else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && itemBySlot.is(Items.PIGLIN_HEAD)) { -+ } else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD)) { ++ } else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD)) { // Leaf - Fix Pufferfish and Purpur patches d *= lookingEntity.level().purpurConfig.piglinHeadVisibilityPercent; - } else if (type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) { -+ } else if (type == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) { ++ } else if (type == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) { // Leaf - Fix Pufferfish and Purpur patches d *= lookingEntity.level().purpurConfig.creeperHeadVisibilityPercent; } // Purpur end - Mob head visibility percent @@ -174,15 +178,17 @@ index 7b8804844ab5636323bc8d136c775f1e9591e89c..14d9dceacc82cc6c085dab8f52e59a31 // Purpur - implemented in Entity - API for any mob to burn daylight return super.isSunBurnTick(); diff --git a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index 6f96551ba91da214054b89a255254ca597977cc0..3f1a80db81c0f0cd7bb1d5df4a2c2cb1b6a8d2d9 100644 +index 6f96551ba91da214054b89a255254ca597977cc0..3d5ac6976efd66b29657749f83d03ba77ebea2eb 100644 --- a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -@@ -22,19 +22,15 @@ public class SecondaryPoiSensor extends Sensor { +@@ -22,20 +22,16 @@ public class SecondaryPoiSensor extends Sensor { @Override protected void doTick(ServerLevel level, Villager entity) { -+ // Purpur start - Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off - // Gale start - Lithium - skip secondary POI sensor if absent +- // Gale start - Lithium - skip secondary POI sensor if absent ++ // Leaf start - Fix Pufferfish and Purpur patches ++ // Purpur: Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off ++ // Gale: Lithium - skip secondary POI sensor if absent var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi(); - if (secondaryPoi.isEmpty()) { - entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); @@ -196,12 +202,13 @@ index 6f96551ba91da214054b89a255254ca597977cc0..3f1a80db81c0f0cd7bb1d5df4a2c2cb1 brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); return; } -+ // Gale end - Lithium - skip secondary POI sensor if absent - // Purpur end - Option for Villager Clerics to farm Nether Wart +- // Purpur end - Option for Villager Clerics to farm Nether Wart ++ // Leaf end - Fix Pufferfish and Purpur patches ResourceKey resourceKey = level.dimension(); BlockPos blockPos = entity.blockPosition(); + List list = Lists.newArrayList(); diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 10d2a1138d814b83ce4233205a7f0ab2ed1f399d..e9f683ef9ce55e67748f1a16a45efe26bb4ff331 100644 +index 10d2a1138d814b83ce4233205a7f0ab2ed1f399d..a642533eddd1aca96ad57c2a219f00870a615f71 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -287,8 +287,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -210,12 +217,12 @@ index 10d2a1138d814b83ce4233205a7f0ab2ed1f399d..e9f683ef9ce55e67748f1a16a45efe26 protected void customServerAiStep(ServerLevel level) { - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches this.getBrain().tick(level, this); AllayAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 1323cedcacd3072cdf5f1eac644688cd098b53db..ed15200319d0e50b495f2d0d912093d670fdb309 100644 +index 1323cedcacd3072cdf5f1eac644688cd098b53db..ad19bbd6989bfb98966872b304f6ece0e869f7a4 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -347,8 +347,7 @@ public class Axolotl extends Animal implements VariantHolder, B @@ -224,12 +231,12 @@ index 1323cedcacd3072cdf5f1eac644688cd098b53db..ed15200319d0e50b495f2d0d912093d6 protected void customServerAiStep(ServerLevel level) { - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches this.getBrain().tick(level, this); AxolotlAi.updateActivity(this); if (!this.isNoAi()) { diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 4ecc6b6247a6ab14a5d46f9a05d5df8412ae2a5f..a962b06ac3fc15604b7fbf5e2109f1cc8d238ac7 100644 +index 4ecc6b6247a6ab14a5d46f9a05d5df8412ae2a5f..4aadf347811df904e634ea7ebcc5361ea6cb7e7a 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java @@ -241,8 +241,7 @@ public class Frog extends Animal implements VariantHolder> { @@ -238,12 +245,12 @@ index 4ecc6b6247a6ab14a5d46f9a05d5df8412ae2a5f..a962b06ac3fc15604b7fbf5e2109f1cc protected void customServerAiStep(ServerLevel level) { - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches this.getBrain().tick(level, this); FrogAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index 0ca35514a920dddf230d749bc1a5fe15f1c7940a..8468f7095e1db7a54042ce9a97d991d3105bd535 100644 +index 0ca35514a920dddf230d749bc1a5fe15f1c7940a..ec9db1c12426db80dbf02d704e6c7ec867d59f6f 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java @@ -133,8 +133,7 @@ public class Tadpole extends AbstractFish { @@ -252,12 +259,12 @@ index 0ca35514a920dddf230d749bc1a5fe15f1c7940a..8468f7095e1db7a54042ce9a97d991d3 protected void customServerAiStep(ServerLevel level) { - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches this.getBrain().tick(level, this); TadpoleAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 7107cc2462e7d33bca413a1b051822cc1bd61bfa..2e3ca6b17862494218042e6d84970a60272c2b40 100644 +index 7107cc2462e7d33bca413a1b051822cc1bd61bfa..a1cdb620368fe7f6eb95734af903d66257156b26 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java @@ -223,8 +223,7 @@ public class Goat extends Animal { @@ -266,12 +273,12 @@ index 7107cc2462e7d33bca413a1b051822cc1bd61bfa..2e3ca6b17862494218042e6d84970a60 protected void customServerAiStep(ServerLevel level) { - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches this.getBrain().tick(level, this); GoatAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 24725009d7619b0e9043d7d0039f805c611aedf6..a9d381568625ca871dcaf40b363d46692f45591d 100644 +index 24725009d7619b0e9043d7d0039f805c611aedf6..f89a3c4f75a40981aff7253cd04bcdf3c8c26952 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -203,8 +203,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -280,12 +287,12 @@ index 24725009d7619b0e9043d7d0039f805c611aedf6..a9d381568625ca871dcaf40b363d4669 protected void customServerAiStep(ServerLevel level) { - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches this.getBrain().tick(level, this); HoglinAi.updateActivity(this); if (this.isConverting()) { diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 242b2545b6082f567d0bb7900ef06ded3c0fdcdd..85306d8f0fba3b5dcb244df54c949b45e07ee4e7 100644 +index 242b2545b6082f567d0bb7900ef06ded3c0fdcdd..fe6eb99ea3d2deda317efe90ecb0987bb367313f 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -382,8 +382,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -294,12 +301,12 @@ index 242b2545b6082f567d0bb7900ef06ded3c0fdcdd..85306d8f0fba3b5dcb244df54c949b45 protected void customServerAiStep(ServerLevel level) { - //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches this.getBrain().tick(level, this); PiglinAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java -index bd93ee97982038789114f17ee369208fc6413796..0b1263000f872431e44abfdd57134b6efe245641 100644 +index bd93ee97982038789114f17ee369208fc6413796..aa201bd227dffb7442ec62b86b2435f025be732d 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java @@ -74,7 +74,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -307,7 +314,7 @@ index bd93ee97982038789114f17ee369208fc6413796..0b1263000f872431e44abfdd57134b6e if (maxChunkLoadsPerProjectile >= 0 && this.chunksLoadedByProjectile >= maxChunkLoadsPerProjectile) { if (maxProjectileChunkLoadsConfig.perProjectile.removeFromWorldAfterReachLimit) { - this.discard(); -+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Leaf - Purpur ++ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Leaf - Fix Pufferfish and Purpur patches - Purpur } else if (maxProjectileChunkLoadsConfig.perProjectile.resetMovementAfterReachLimit) { this.setDeltaMovement(0, this.getDeltaMovement().y, 0); } diff --git a/leaf-server/minecraft-patches/features/0010-Remove-vanilla-username-check.patch b/leaf-server/minecraft-patches/features/0010-Remove-vanilla-username-check.patch index 4ebce894..d0380eb6 100644 --- a/leaf-server/minecraft-patches/features/0010-Remove-vanilla-username-check.patch +++ b/leaf-server/minecraft-patches/features/0010-Remove-vanilla-username-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Remove vanilla username check diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 634933a6c98a0043cfe3ff4122dfc53e3c20a192..780d85f4afe221f8861b248457bfe6462f0b8a2a 100644 +index 634933a6c98a0043cfe3ff4122dfc53e3c20a192..fec84afa274f8b7cc3e0e9bf500e672c16be53d4 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -183,7 +183,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @@ -13,13 +13,13 @@ index 634933a6c98a0043cfe3ff4122dfc53e3c20a192..780d85f4afe221f8861b248457bfe646 Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet"); // Paper start - Validate usernames - if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() -+ if (!org.dreeam.leaf.config.modules.misc.RemoveVanillaUsernameCheck.enabled // Leaf - Remove Vanilla username check ++ if (!org.dreeam.leaf.config.modules.misc.RemoveVanillaUsernameCheck.enabled // Leaf - Remove vanilla username check + && io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation && !this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation) { Validate.validState(StringUtil.isReasonablePlayerName(packet.name()), "Invalid characters in username"); diff --git a/net/minecraft/server/players/GameProfileCache.java b/net/minecraft/server/players/GameProfileCache.java -index 6fb3712f33a84a3612752dcfd9e97d67066f610e..c01e998c97e1226e7e10984493d67612dfe7ae15 100644 +index 6fb3712f33a84a3612752dcfd9e97d67066f610e..bf99d901349316382edc3090689ca6c785ed4ba0 100644 --- a/net/minecraft/server/players/GameProfileCache.java +++ b/net/minecraft/server/players/GameProfileCache.java @@ -77,7 +77,7 @@ public class GameProfileCache { @@ -27,25 +27,25 @@ index 6fb3712f33a84a3612752dcfd9e97d67066f610e..c01e998c97e1226e7e10984493d67612 private static Optional lookupGameProfile(GameProfileRepository profileRepo, String name) { - if (!StringUtil.isValidPlayerName(name)) { -+ if (!StringUtil.isValidPlayerName(name, false)) { // Leaf start - Remove Vanilla username check - Directly return, skip unnecessary following logic ++ if (!StringUtil.isValidPlayerName(name, false)) { // Leaf start - Remove vanilla username check - Directly return, skip unnecessary following logic return createUnknownProfile(name); } else { final AtomicReference atomicReference = new AtomicReference<>(); diff --git a/net/minecraft/util/StringUtil.java b/net/minecraft/util/StringUtil.java -index c3a99fe7b49858bc0ca9a7f800b0db40465f6901..43f62ce3d967f534cdc4e388233933a5ad4af762 100644 +index c3a99fe7b49858bc0ca9a7f800b0db40465f6901..0024997e16c1792feb52caf453ec90830ff411b3 100644 --- a/net/minecraft/util/StringUtil.java +++ b/net/minecraft/util/StringUtil.java @@ -64,6 +64,13 @@ public class StringUtil { } public static boolean isValidPlayerName(String playerName) { -+ // Leaf start - Remove Vanilla username check ++ // Leaf start - Remove vanilla username check + return isValidPlayerName(playerName, org.dreeam.leaf.config.modules.misc.RemoveVanillaUsernameCheck.enabled); + } + + public static boolean isValidPlayerName(String playerName, boolean bypassCheck) { + if (bypassCheck) return playerName.length() <= 16; -+ // Leaf end- Remove Vanilla username check ++ // Leaf end- Remove vanilla username check return playerName.length() <= 16 && playerName.chars().filter(i -> i <= 32 || i >= 127).findAny().isEmpty(); } diff --git a/leaf-server/minecraft-patches/features/0011-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch b/leaf-server/minecraft-patches/features/0011-Remove-Spigot-check-for-broken-BungeeCord-configurat.patch similarity index 96% rename from leaf-server/minecraft-patches/features/0011-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch rename to leaf-server/minecraft-patches/features/0011-Remove-Spigot-check-for-broken-BungeeCord-configurat.patch index e560f310..54cfa1e0 100644 --- a/leaf-server/minecraft-patches/features/0011-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch +++ b/leaf-server/minecraft-patches/features/0011-Remove-Spigot-check-for-broken-BungeeCord-configurat.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Wed, 12 Oct 2022 14:48:45 -0400 -Subject: [PATCH] Remove Spigot Check for Broken BungeeCord Configurations +Subject: [PATCH] Remove Spigot check for broken BungeeCord configurations diff --git a/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java b/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java diff --git a/leaf-server/minecraft-patches/features/0012-Remove-UseItemOnPacket-Too-Far-Check.patch b/leaf-server/minecraft-patches/features/0012-Remove-UseItemOnPacket-Too-Far-Check.patch index 14ca4a8c..763b9d6f 100644 --- a/leaf-server/minecraft-patches/features/0012-Remove-UseItemOnPacket-Too-Far-Check.patch +++ b/leaf-server/minecraft-patches/features/0012-Remove-UseItemOnPacket-Too-Far-Check.patch @@ -7,10 +7,10 @@ This Check is added in 1.17.x -> 1.18.x that updated by Mojang. By removing this check, it gives ability for hackers to use some modules of hack clients. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ec6276f3335fd963c8554dbc43adf5bdfe3d2412..162617ea984e54898f19c16ff8e7d759bddcc190 100644 +index ec6276f3335fd963c8554dbc43adf5bdfe3d2412..cb0b9a13d744115f45489677912c854a64afc03a 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1998,8 +1998,14 @@ public class ServerGamePacketListenerImpl +@@ -1998,8 +1998,13 @@ public class ServerGamePacketListenerImpl BlockPos blockPos = hitResult.getBlockPos(); if (this.player.canInteractWithBlock(blockPos, 1.0)) { Vec3 vec3 = location.subtract(Vec3.atCenterOf(blockPos)); @@ -18,10 +18,9 @@ index ec6276f3335fd963c8554dbc43adf5bdfe3d2412..162617ea984e54898f19c16ff8e7d759 - if (Math.abs(vec3.x()) < 1.0000001 && Math.abs(vec3.y()) < 1.0000001 && Math.abs(vec3.z()) < 1.0000001) { + // Leaf start - Remove UseItemOnPacket Too Far Check and make it configurable + //double d = 1.0000001; -+ if (org.dreeam.leaf.config.modules.gameplay.ConfigurableMaxUseItemDistance.maxUseItemDistance <= 0 -+ || (Math.abs(vec3.x()) < org.dreeam.leaf.config.modules.gameplay.ConfigurableMaxUseItemDistance.maxUseItemDistance -+ && Math.abs(vec3.y()) < org.dreeam.leaf.config.modules.gameplay.ConfigurableMaxUseItemDistance.maxUseItemDistance -+ && Math.abs(vec3.z()) < org.dreeam.leaf.config.modules.gameplay.ConfigurableMaxUseItemDistance.maxUseItemDistance) ++ final double maxDistance = org.dreeam.leaf.config.modules.gameplay.ConfigurableMaxUseItemDistance.maxUseItemDistance; ++ if (maxDistance <= 0 ++ || (Math.abs(vec3.x()) < maxDistance && Math.abs(vec3.y()) < maxDistance && Math.abs(vec3.z()) < maxDistance) + ) { + // Leaf end - Remove UseItemOnPacket Too Far Check and make it configurable Direction direction = hitResult.getDirection(); diff --git a/leaf-server/minecraft-patches/features/0015-Carpet-Fixes-Use-optimized-RecipeManager.patch b/leaf-server/minecraft-patches/features/0015-Carpet-Fixes-Use-optimized-RecipeManager.patch index 300a4161..3e446543 100644 --- a/leaf-server/minecraft-patches/features/0015-Carpet-Fixes-Use-optimized-RecipeManager.patch +++ b/leaf-server/minecraft-patches/features/0015-Carpet-Fixes-Use-optimized-RecipeManager.patch @@ -15,7 +15,7 @@ This is a fully vanilla optimization. Improves: [Blast]Furnace/Campfire/Smoker/S This was mostly made for the auto crafting table, since the performance boost is much more visible while using that mod diff --git a/net/minecraft/world/item/crafting/RecipeManager.java b/net/minecraft/world/item/crafting/RecipeManager.java -index aefaac550b58be479cc282f52dea91d4b1e530f6..400d11b0a7266cee642546aa190553e60ad0723b 100644 +index aefaac550b58be479cc282f52dea91d4b1e530f6..4bd1b514f91c0a2c9261b41211a4a341f784a995 100644 --- a/net/minecraft/world/item/crafting/RecipeManager.java +++ b/net/minecraft/world/item/crafting/RecipeManager.java @@ -167,7 +167,7 @@ public class RecipeManager extends SimplePreparableReloadListener imp @@ -23,20 +23,23 @@ index aefaac550b58be479cc282f52dea91d4b1e530f6..400d11b0a7266cee642546aa190553e6 public > Optional> getRecipeFor(RecipeType recipeType, I input, Level level) { // CraftBukkit start - List> list = this.recipes.getRecipesFor(recipeType, input, level).toList(); -+ List> list = this.recipes.getRecipesForList(recipeType, input, level); // Leaf - Carpet-Fixes - Remove streams to be faster ++ List> list = this.recipes.getRecipesForList(recipeType, input, level); // Leaf - Carpet-Fixes - Use optimized RecipeManager - Remove streams to be faster return (list.isEmpty()) ? Optional.empty() : Optional.of(list.getLast()); // CraftBukkit - SPIGOT-4638: last recipe gets priority // CraftBukkit end } diff --git a/net/minecraft/world/item/crafting/RecipeMap.java b/net/minecraft/world/item/crafting/RecipeMap.java -index 098753ddd215b6ef5915fac71d8c4f0b19cf4142..c888daa9a8cdc8168cca173acb69b3c3919c5bda 100644 +index 098753ddd215b6ef5915fac71d8c4f0b19cf4142..68c2b7e532f0cfa373b7c698da7778c58fe98364 100644 --- a/net/minecraft/world/item/crafting/RecipeMap.java +++ b/net/minecraft/world/item/crafting/RecipeMap.java -@@ -75,4 +75,24 @@ public class RecipeMap { +@@ -73,6 +73,26 @@ public class RecipeMap { + } + public > Stream> getRecipesFor(RecipeType type, I input, Level level) { - return input.isEmpty() ? Stream.empty() : this.byType(type).stream().filter(recipeHolder -> recipeHolder.value().matches(input, level)); +- return input.isEmpty() ? Stream.empty() : this.byType(type).stream().filter(recipeHolder -> recipeHolder.value().matches(input, level)); ++ return input.isEmpty() ? Stream.empty() : this.byType(type).stream().filter(recipeHolder -> recipeHolder.value().matches(input, level)); // Leaf - Carpet-Fixes - Use optimized RecipeManager - diff on change } + -+ // Leaf start - Carpet-Fixes - Remove streams to be faster ++ // Leaf start - Carpet-Fixes - Use optimized RecipeManager - Remove streams to be faster + public > java.util.List> getRecipesForList(RecipeType type, I input, Level level) { + java.util.List> list; + @@ -46,13 +49,13 @@ index 098753ddd215b6ef5915fac71d8c4f0b19cf4142..c888daa9a8cdc8168cca173acb69b3c3 + list = new java.util.ArrayList<>(); + } + -+ for (RecipeHolder recipeholder : this.byType(type)) { -+ if (recipeholder.value().matches(input, level)) { -+ list.add(recipeholder); ++ for (RecipeHolder recipeHolder : this.byType(type)) { ++ if (recipeHolder.value().matches(input, level)) { ++ list.add(recipeHolder); + } + } + + return list; + } -+ // Leaf end - Carpet-Fixes - Remove streams to be faster ++ // Leaf end - Carpet-Fixes - Use optimized RecipeManager - Remove streams to be faster } diff --git a/leaf-server/minecraft-patches/features/0016-Akarin-Save-Json-list-asynchronously.patch b/leaf-server/minecraft-patches/features/0016-Akarin-Save-Json-list-asynchronously.patch index 8d1114e1..e84fe00b 100644 --- a/leaf-server/minecraft-patches/features/0016-Akarin-Save-Json-list-asynchronously.patch +++ b/leaf-server/minecraft-patches/features/0016-Akarin-Save-Json-list-asynchronously.patch @@ -8,30 +8,30 @@ Original license: GPL v3 Original project: https://github.com/Akarin-project/Akarin diff --git a/net/minecraft/server/players/StoredUserList.java b/net/minecraft/server/players/StoredUserList.java -index 39483f7b453d6faedeccc1ab1eda76669395ea5a..7f2031559fe84e9b57fb4c3fb55cee022b442ebb 100644 +index 39483f7b453d6faedeccc1ab1eda76669395ea5a..1fe9be5381b43d240593c8394977d7ffccd1132b 100644 --- a/net/minecraft/server/players/StoredUserList.java +++ b/net/minecraft/server/players/StoredUserList.java @@ -97,13 +97,23 @@ public abstract class StoredUserList> { } public void save() throws IOException { -+ Runnable saveTask = () -> {// Leaf - Akarin - Save json list async ++ Runnable saveTask = () -> {// Leaf - Akarin - Save Json list asynchronously this.removeExpired(); // Paper - remove expired values before saving JsonArray jsonArray = new JsonArray(); this.map.values().stream().map(storedEntry -> Util.make(new JsonObject(), storedEntry::serialize)).forEach(jsonArray::add); -+ try { // Leaf - Akarin - Save json list async ++ try { // Leaf - Akarin - Save Json list asynchronously try (BufferedWriter writer = Files.newWriter(this.file, StandardCharsets.UTF_8)) { GSON.toJson(jsonArray, GSON.newJsonWriter(writer)); } + -+ // Leaf start - Akarin - Save json list async ++ // Leaf start - Akarin - Save Json list asynchronously + } catch (Exception e) { -+ StoredUserList.LOGGER.warn("Failed to async save {}", this.file, e); ++ StoredUserList.LOGGER.warn("Failed to save {} asynchronously", this.file, e); + } + }; + io.papermc.paper.util.MCUtil.scheduleAsyncTask(saveTask); -+ // Leaf end - Akarin - Save json list async ++ // Leaf end - Akarin - Save Json list asynchronously } public void load() throws IOException { diff --git a/leaf-server/minecraft-patches/features/0043-Improve-Purpur-AFK-system.patch b/leaf-server/minecraft-patches/features/0043-Improve-Purpur-AFK-system.patch index b80d2de1..54511873 100644 --- a/leaf-server/minecraft-patches/features/0043-Improve-Purpur-AFK-system.patch +++ b/leaf-server/minecraft-patches/features/0043-Improve-Purpur-AFK-system.patch @@ -57,10 +57,10 @@ index 2da6609ab8398c5c537e9065b3a82693f43200e2..9db63f122539134003a5955aabae9706 } else { getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix, true); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 465e34eb906ec78f49ff1183b635e77a1fcaa758..39b01b3d96d03bca4c33eaddfc54edef23c3df0c 100644 +index 356feb908e533d7f1cddf6eb8238823c9bf8250a..3085fa1c463b3652edb03d2b86fd43a564e4d1b4 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2255,6 +2255,8 @@ public class ServerGamePacketListenerImpl +@@ -2254,6 +2254,8 @@ public class ServerGamePacketListenerImpl } } @@ -69,7 +69,7 @@ index 465e34eb906ec78f49ff1183b635e77a1fcaa758..39b01b3d96d03bca4c33eaddfc54edef @Override public void handleChatCommand(ServerboundChatCommandPacket packet) { this.tryHandleChat(packet.command(), () -> { -@@ -2275,6 +2277,32 @@ public class ServerGamePacketListenerImpl +@@ -2274,6 +2276,32 @@ public class ServerGamePacketListenerImpl LOGGER.info("{} issued server command: {}", this.player.getScoreboardName(), prefixedCommand); } @@ -102,7 +102,7 @@ index 465e34eb906ec78f49ff1183b635e77a1fcaa758..39b01b3d96d03bca4c33eaddfc54edef PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(this.getCraftPlayer(), prefixedCommand, new LazyPlayerSet(this.server)); this.cserver.getPluginManager().callEvent(event); -@@ -2312,11 +2340,37 @@ public class ServerGamePacketListenerImpl +@@ -2311,11 +2339,37 @@ public class ServerGamePacketListenerImpl private void performSignedChatCommand(ServerboundChatCommandSignedPacket packet, LastSeenMessages lastSeenMessages) { // CraftBukkit start diff --git a/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch b/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch index d06899ee..221ad1e5 100644 --- a/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch +++ b/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch @@ -46,10 +46,10 @@ index 6c7edbbf3935c40ccb78bee680ea75431718b9bd..a1b4dc70d555cce5e06c0298736d8b89 public String toString() { return "Reference{" + this.key + "=" + this.value + "}"; diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index f7f330758dce7c38e0e0e8ba420df4d83f765cf1..42a6b0b6fe13b448583988b3d2f840540b5670e7 100644 +index 034e10e912ab9b4b5435ad88c0cd4183c8b5c1a1..e6e347cf7e58d5e088057bce60464fab05dcde88 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1982,7 +1982,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1984,7 +1984,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess FluidState fluidState = this.level().getFluidState(blockPos); double d = blockPos.getY() + fluidState.getHeight(this.level(), blockPos); if (d > eyeY) { diff --git a/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch b/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch index 94970e75..d08c99ee 100644 --- a/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch +++ b/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch @@ -8,10 +8,10 @@ avoids multiple casting in Entity#distanceTo, using Math#sqrt directly instead o these methods more able to be inlined by the JIT compiler. diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 42a6b0b6fe13b448583988b3d2f840540b5670e7..35d931407f726b7f8e83f40d220313eb472b20a8 100644 +index e6e347cf7e58d5e088057bce60464fab05dcde88..f344e24faee04c1657affba2a6adb8c27fb2d56b 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -2193,30 +2193,38 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2195,30 +2195,38 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return new Vec3(this.xOld, this.yOld, this.zOld); } diff --git a/leaf-server/paper-patches/features/0001-Rebrand.patch b/leaf-server/paper-patches/features/0001-Rebrand.patch index fc5d4de3..cc158208 100644 --- a/leaf-server/paper-patches/features/0001-Rebrand.patch +++ b/leaf-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 3d8ed4ff9a5a30d123508aeb485250271b528a6e..aa7c5d765114a008e815fcece8c108e95f02293d 100644 +index 3d8ed4ff9a5a30d123508aeb485250271b528a6e..49ac2b52fc134bfa77a108bf58de3e81be38c683 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -592,7 +592,7 @@ public class Metrics { @@ -13,7 +13,7 @@ index 3d8ed4ff9a5a30d123508aeb485250271b528a6e..aa7c5d765114a008e815fcece8c108e9 // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { - Metrics metrics = new Metrics("Gale", serverUUID, logFailedRequests, Bukkit.getLogger()); // Gale - branding changes - metrics -+ Metrics metrics = new Metrics("Leaf", serverUUID, logFailedRequests, Bukkit.getLogger()); // Gale - branding changes - metrics // Leaf ++ Metrics metrics = new Metrics("Leaf", serverUUID, logFailedRequests, Bukkit.getLogger()); // Gale - branding changes - metrics // Leaf - Rebrand metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); @@ -22,23 +22,23 @@ index 3d8ed4ff9a5a30d123508aeb485250271b528a6e..aa7c5d765114a008e815fcece8c108e9 metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); - final String galeVersion; // Gale - branding changes - metrics -+ final String leafVersion; // Gale - branding changes - metrics // Leaf ++ final String leafVersion; // Gale - branding changes - metrics // Leaf - Rebrand final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); if (implVersion != null) { final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); - galeVersion = "git-Gale-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Gale - branding changes - metrics -+ leafVersion = "git-Leaf-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Gale - branding changes - metrics // Leaf ++ leafVersion = "git-Leaf-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Gale - branding changes - metrics // Leaf - Rebrand } else { - galeVersion = "unknown"; // Gale - branding changes - metrics -+ leafVersion = "unknown"; // Gale - branding changes - metrics // Leaf ++ leafVersion = "unknown"; // Gale - branding changes - metrics // Leaf - Rebrand } - metrics.addCustomChart(new Metrics.SimplePie("gale_version", () -> galeVersion)); // Gale - branding changes - metrics -+ metrics.addCustomChart(new Metrics.SimplePie("leaf_version", () -> leafVersion)); // Gale - branding changes - metrics // Leaf ++ metrics.addCustomChart(new Metrics.SimplePie("leaf_version", () -> leafVersion)); // Gale - branding changes - metrics // Leaf - Rebrand metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(2); // Gale - metrics - reduce HashMap capacity diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -index b78828e83d8128eace986aeb73213da3b3f905e4..9869bec65f4d0fbd5ed5aff896a8956e7ea2747f 100644 +index b78828e83d8128eace986aeb73213da3b3f905e4..f59879ae7d3c73cd4c4233d30667988bf22f12f1 100644 --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -20,7 +20,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @@ -46,47 +46,51 @@ index b78828e83d8128eace986aeb73213da3b3f905e4..9869bec65f4d0fbd5ed5aff896a8956e protected LineReader buildReader(LineReaderBuilder builder) { builder - .appName("Gale") // Gale - branding changes -+ .appName("Leaf") // Gale - branding changes // Leaf ++ .appName("Leaf") // Gale - branding changes // Leaf - Rebrand .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -index 2596e0ee4df5b96f181e28a742ef345981fc97e3..ea2bca6e0bbc56156c2f744769abd677e6fb0c18 100644 +index 2596e0ee4df5b96f181e28a742ef345981fc97e3..bbdda3b5263118ec00847e94dde761617db09df2 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -@@ -32,6 +32,7 @@ public record ServerBuildInfoImpl( +@@ -32,6 +32,9 @@ public record ServerBuildInfoImpl( private static final String BRAND_PAPER_NAME = "Paper"; private static final String BRAND_GALE_NAME = "Gale"; // Gale - branding changes -+ private static final String BRAND_LEAF_NAME = "Leaf"; // Leaf ++ // Leaf start - Rebrand ++ private static final String BRAND_LEAF_NAME = "Leaf"; ++ // Leaf end- Rebrand private static final String BUILD_DEV = "DEV"; -@@ -43,9 +44,9 @@ public record ServerBuildInfoImpl( +@@ -43,9 +46,9 @@ public record ServerBuildInfoImpl( this( getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) .map(Key::key) - .orElse(BRAND_GALE_ID), // Gale - branding changes -+ .orElse(BRAND_LEAF_ID), // Gale - branding changes // Leaf ++ .orElse(BRAND_LEAF_ID), // Gale - branding changes // Leaf - Rebrand getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) - .orElse(BRAND_GALE_NAME), // Gale - branding changes -+ .orElse(BRAND_LEAF_NAME), // Gale - branding changes // Leaf ++ .orElse(BRAND_LEAF_NAME), // Gale - branding changes // Leaf - Rebrand SharedConstants.getCurrentVersion().getId(), SharedConstants.getCurrentVersion().getName(), getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) -@@ -62,7 +63,9 @@ public record ServerBuildInfoImpl( +@@ -62,7 +65,11 @@ public record ServerBuildInfoImpl( @Override public boolean isBrandCompatible(final @NotNull Key brandId) { - return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Gale - branding changes + return brandId.equals(this.brandId) + || brandId.equals(BRAND_PAPER_ID) -+ || brandId.equals(BRAND_GALE_ID); // Gale - branding changes // Leaf ++ // Leaf start - Rebrand ++ || brandId.equals(BRAND_GALE_ID); // Gale - branding changes ++ // Leaf end - Rebrand } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index f6bc955c3496b52cda1a20aabd78769803ef471f..bbeb271fb19091897e99970198a8a110a4aa0858 100644 +index f6bc955c3496b52cda1a20aabd78769803ef471f..f6f787db016f4d1ac14648ebf2b8e162a3e85962 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 { @@ -94,12 +98,12 @@ index f6bc955c3496b52cda1a20aabd78769803ef471f..bbeb271fb19091897e99970198a8a110 } else { // this.debugTail = this.debugTail.setNext(new CraftAsyncDebugger(this.currentTick + CraftScheduler.RECENT_TICKS, task.getOwner(), task.getTaskClass())); // Paper - task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Gale"); // Paper // Gale - branding changes -+ task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Leaf"); // Paper // Gale - branding changes // Leaf ++ task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Leaf"); // Paper // Gale - branding changes // Leaf - Rebrand // We don't need to parse pending // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index ebe1136e2487d0d13e5a924a644f2237900a86a6..1b54fb1a321f0538c0ecded9fa14b2bc588416b9 100644 +index ebe1136e2487d0d13e5a924a644f2237900a86a6..bef2ae29856a72344d3d755926f1b2dce4907df1 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -508,7 +508,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -107,12 +111,12 @@ index ebe1136e2487d0d13e5a924a644f2237900a86a6..1b54fb1a321f0538c0ecded9fa14b2bc @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { - return new org.galemc.gale.version.GaleVersionFetcher(); // Gale - branding changes - version fetcher -+ return new org.dreeam.leaf.version.LeafVersionFetcher(); // Gale - branding changes - version fetcher // Leaf ++ return new org.dreeam.leaf.version.LeafVersionFetcher(); // Gale - branding changes - version fetcher // Leaf - Rebrand } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 0b5979723bb30f9011ac64c36d894aa41713ec9b..e220f5601f6b92b7b280ce8ebe64117d30192b0e 100644 +index 0b5979723bb30f9011ac64c36d894aa41713ec9b..c3d45e60e262b8e34d76f0425f6bef79f034e8ab 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java @@ -11,7 +11,7 @@ public final class Versioning { @@ -120,12 +124,12 @@ index 0b5979723bb30f9011ac64c36d894aa41713ec9b..e220f5601f6b92b7b280ce8ebe64117d String result = "Unknown-Version"; - InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.galemc.gale/gale-api/pom.properties"); // Gale - branding changes -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/cn.dreeam.leaf/leaf-api/pom.properties"); // Gale - branding changes // Leaf ++ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/cn.dreeam.leaf/leaf-api/pom.properties"); // Gale - branding changes // Leaf - Rebrand Properties properties = new Properties(); if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 64e3c7bd0a1ff93dd87e688f9e49e213c8f6670e..6bc6a318286cd6a1d5464a9b139fb9b8ca4a219e 100644 +index 64e3c7bd0a1ff93dd87e688f9e49e213c8f6670e..4e226b6f882a306ab18adcf89b096faa7272d12a 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -25,7 +25,7 @@ public class WatchdogThread extends Thread { @@ -133,7 +137,7 @@ index 64e3c7bd0a1ff93dd87e688f9e49e213c8f6670e..6bc6a318286cd6a1d5464a9b139fb9b8 private WatchdogThread(long timeoutTime, boolean restart) { - super("Paper Watchdog Thread"); -+ super("Watchdog Thread"); // Leaf - Purpur - use a generic name ++ super("Watchdog Thread"); // Leaf - Rebrand - Purpur - use a generic name this.timeoutTime = timeoutTime; this.restart = restart; this.earlyWarningEvery = Math.min(GlobalConfiguration.get().watchdog.earlyWarningEvery, timeoutTime); // Paper @@ -142,17 +146,17 @@ index 64e3c7bd0a1ff93dd87e688f9e49e213c8f6670e..6bc6a318286cd6a1d5464a9b139fb9b8 but we do want people to report thread issues to Gale. */ - logger.log(Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug. This could be a Gale bug."); // Paper -+ logger.log(Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug. This could be a Leaf bug."); // Paper // Leaf ++ logger.log(Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug. This could be a Leaf bug."); // Paper // Leaf - Rebrand // Gale end - branding changes logger.log(Level.SEVERE, "If you see a plugin in the Server thread dump below, then please report it to that author"); logger.log(Level.SEVERE, "\t *Especially* if it looks like HTTP or MySQL operations are occurring"); logger.log(Level.SEVERE, "If you see a world save or edit, then it means you did far more than your server can handle at once"); logger.log(Level.SEVERE, "\t If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes"); - logger.log(Level.SEVERE, "If you are unsure or think this is a Gale bug, please report this to https://github.com/GaleMC/Gale/issues - and if you think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues"); // Gale - branding changes -+ logger.log(Level.SEVERE, "If you are unsure or think this is a Leaf bug, please report this to https://github.com/Winds-Studio/Leaf/issues - and if you think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues"); // Gale - branding changes // Leaf ++ logger.log(Level.SEVERE, "If you are unsure or think this is a Leaf bug, please report this to https://github.com/Winds-Studio/Leaf/issues - and if you think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues"); // Gale - branding changes // Leaf - Rebrand logger.log(Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports"); - logger.log(Level.SEVERE, "Gale version: " + Bukkit.getServer().getVersion()); // Gale - branding changes -+ logger.log(Level.SEVERE, "Leaf version: " + Bukkit.getServer().getVersion()); // Gale - branding changes // Leaf ++ logger.log(Level.SEVERE, "Leaf version: " + Bukkit.getServer().getVersion()); // Gale - branding changes // Leaf - Rebrand if (net.minecraft.world.level.Level.lastPhysicsProblem != null) { logger.log(Level.SEVERE, "------------------------------"); @@ -161,14 +165,14 @@ index 64e3c7bd0a1ff93dd87e688f9e49e213c8f6670e..6bc6a318286cd6a1d5464a9b139fb9b8 but we do want people to report thread issues to Gale. */ - logger.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues - THIS IS NOT A PAPER BUG OR CRASH - " + Bukkit.getServer().getVersion() + " ---"); -+ logger.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Leaf ++ logger.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Leaf - Rebrand // Gale end - branding changes logger.log(Level.SEVERE, "The server has not responded for " + (currentTime - lastTick) / 1000 + " seconds! Creating thread dump"); } // Paper end - Different message for short timeout logger.log(Level.SEVERE, "------------------------------"); - logger.log(Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Gale!):"); // Paper // Gale - branding changes -+ logger.log(Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Leaf!):"); // Paper // Gale - branding changes // Leaf ++ logger.log(Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Leaf!):"); // Paper // Gale - branding changes // Leaf - Rebrand FeatureHooks.dumpAllChunkLoadInfo(MinecraftServer.getServer(), isLongTimeout); // Paper - log detailed tick information WatchdogThread.dumpThread(ManagementFactory.getThreadMXBean().getThreadInfo(MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE), logger); logger.log(Level.SEVERE, "------------------------------"); @@ -177,7 +181,550 @@ index 64e3c7bd0a1ff93dd87e688f9e49e213c8f6670e..6bc6a318286cd6a1d5464a9b139fb9b8 but we do want people to report thread issues to Gale. */ - logger.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues - THIS IS NOT A PAPER BUG OR CRASH ---"); -+ logger.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH ---"); // Leaf ++ logger.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH ---"); // Leaf - Rebrand // Gale end - branding changes } +diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png +index e7e9fd9a6077535b89c6c9d7b0164e8b87c54bed..9e698edad90ebcd641fc59ade84643556b427070 100644 +GIT binary patch +literal 19657 +zcmbTdWmFtZ)HOPTyE}sf_W;42;I4zaI|TP2!QI{6-EDvbm!QEJf;&Nj=JLGvd)Ie= +z-yhw*x@&cHRh>F}?{lg;N>y0~9fbr1005xN$x5ofU&sDCkPzO_bvpI=?-w|0aV2p8 +zpeX_M#S|U@K#{YRkWh6~m-$R7Cndqd!Oz3P%E`t70LVt=X?W?RJP?R%KUiXFeO|e0 +z%5VqKY#x9+ne +zm>jZ({{aA8!TNXyx;Kix02`bEFaVb&HX5AKoqwU-s&v`_$|L}k3g-|Nn5YgIW78bN +z1B?*?8Z}xhPynd_fP;_!XDUE7I^gV9P6QsXQkAkn2v{iwRUrZ5fPgFp85$U|9)Jlr +zSe*q1G6X2B6{BKkVJ{W)mIqozpr6O!0 +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 +zh{GqAp*NSxpuHDs-O23fw&RYB! +zIG;O>9Rizs-o&dV38%C6-e31)MhJ6|HpA2RGmUAt5DB%`@J-=6l`MmvBju0puMd~z +z1Umza>W@%^QpzI!So_qtLa~DT)G4(8ac&q@ocPr +zwDt?BC$=PsRn~k}Sbf?58-_x6+$(qJBLp=_5MLNRAh`%GKGt8(2;f#kQU-JHnRblF +z^q@GF7DK-AUS)O!IqU|C5c<9@AG<%Xi{XXiFckyJR<%e@$&D_*%ipW}`dLIiWGeTe +zBSEL2*hx-L>;#_=x3T=PReXfbpx#XT;>>tvYZNMk5M3R!xm9&eR1b0F +zyI{4DexDV*wZUbel6_~&*_5>5i2mc0+;XLUkxOK``-ZGtrk>TN=2-@xJ>caEQ@&dJ^K>c +z0otHiWf>vJ7Y#CK;=({#e0IT2UVBj%2PSwy8O5QDuOIR;%ZC*r?3CEy`H8!!bnKLy +z5aq0g3{txK8xjiYjr*333(CJf&h%BRPiFr058>vlbmU&yQCJ5`&|VYd#u7F>k@jCI-Kb*Ko4Us&mcjd7z!8P^le6mR9iarijfh_ves +z?OcFG*ZCR0LFbs%t3RyMV$E%^=1jYbZ-}| +zN46Bj?jb!1sn#)t98z_<-o#)nwl#N!eMOjDK$%fBCK4tAxT0RELoK64NQw3x5l}G{ +z&s1HA?sjAcO`ly{T)eZn^IH*bf`_*;Gtn`yExpjz1%nY$L82dTq2V%2VoVz|7np#L +z>bKQSQlVSxq-B_hGJ)XfHqTDz&*JGO3KzWRFG;=N)h|d6&c9+ugI{;5l+7^261aj4 +z;!_AjOOG-nST0gBy9Sfw^H-r)T$p?zoJ0hi^&38rx%ycd42*jqM#yzYbH6zAF*=w9 +zT+5ONV^no?YBQ^dvSMZmW#^`Ql!r!UIg3sahm@#JDr!4nY!MQIXq}f>LN|<*DjJ)L +zH1V6F;hj?4P2HtOXAV|2HQK$Jp^eiYzp+^c`NLjef;au9R67R+LY11gm~ytX^Tq0#Un2)U +z!GUyLctgh;#sXt$uY5-~oS)m@aJ+kj3=2Npr0H5vrh*7`kR`L9%G8&6QpfS633oI* +z6tF2ffd5dh=Ccr*4&&#~S-V{Wo?Kk;w6|f|4_RDv#?=vI;x`WfGRRniLZiu+fi76B +zIfxOz4HqxA!drRM2rVlF{)chXq!+Urg;mJ;m6_|(Q8#E%$U5<`j+ +z@ASg}k56bC5#yX=>=03=sX*pvB5tsVujFNjMCz{EBn1@729JC#4=o|Y1?_3Lw!sfL +zdSkeh3YS@4P_hw8U}|Jt%OL(|$Kvbb4dwEQFw_fJzU0TRMDDq?V`-f&x&syFZ^Tns +z@DW*mgP}+h>^U4EdV~n^pIKWBy7r)bUtL<=a+F3F&0X;gx*mO$WfF7Dt5V}UR@Ra? +z4xmMIU*O-{{J`vch~;7v{#e5J^|sUXnII`3i2B$X5Uau^ZMwr@S&D@Hhd$b$* +z>J9>4Q%P+{_+7#c~xu#BH+HAA`dxJWCY#kKlMqxSUtKZV=tv +z7##J?zMIeFA5R2k41>O4V>_KJvoOZCSi~-3qBg83Z0!_myt`Bz6!IMdUWS<^9t2{% +zp@8ALu4^9%BySFQpyg6jdg@Yf0Z?9DN#HL;v6FmhY6OBlQopkDsVr?k8Md|<0{Hk4 +z+C@VjF%aUz<5$v1D=JhtG +zwOpy<{|>gq8pY5{4BTj7FSzTTS&dxalbOIE(1J$^ai2t11|4fKVCLbOjfZcnV$W{! +z!Tdi{{Rnz@9Tw-Mq|nfSkl|Rn@Q&K*)M@mc-VE}Vs&x3TC07hUDo9W8B^eBc%1yUx +zlyj`r#CJ#TX)=A6#L$kc3jV>l8Al#6jfC-~(+Nu_m%S(5Usupj>Q;9oi&_<}Jtaq5C +zRUe!UQ}gg3C}3{yhXvBVRsyaE7@zt~v~$VJL(7;uSO-L}4n{Hy4nJ?h9^@l}=JME~ +zk&WfPbOyzWE)b;k@(%HiE!0{xzs% +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 +zNzQ*D +zY}>?Hr)`DUyE^0tkZx#{_S`~Mf{i$hHq +z_(bZD?1M$|pf?Za>{-oyoXIb0oWVcGJ_RIKSl;59w3JHK-qQ@U*CWXSu|hn%KmUMT +zhqie@*Z-lh=L;IJIr9GgOX6PNQUJzzW4n6ar--KyQ%U_P_&XRou4+5SJjIO +zhj)MnLOlKXBH~S+M3HmliltUIH<{D);QL#VonZ-m^^k1H@$FIL$=|cNv*_{v$h^^i +z&XglLI4E^J+_EvJ@x#evb`}U(YF8t{u~`gHA&6-Sd{d{gsuw%aDR*eGCYlct*8GA- +zjTmsFxE(Yp?q5`pNJX{orr@lMs%@ +z@F!2V%{L>E%inkl00#)<3?C>&zHURa;r0(>H_8(c#3wKL<>J6{w>CA3c;#EnNNWPK +zY*@M+u1l)8Wtoz4*-+{vhi9d<2W9jP+`glcXnd^2_}wqX#Z^oZQ*c^i6aW53m@R`a2)@EHveT2M+sEvq +zL+-$i5?>k#t*z;`#UNgNzbRS2B0_E#Sa1@0AON(XhmWq`Mv@KoB?zWwCZ5(rz(vQT +ze5CiL_w!S%SXibeoLfM5SDpkJ59i5*)B<~=^Bw8~UN)eSH`C^chl54WFo>O`ZV!ZB +zLbAVAUPqx&nn +zkK;4W{oH*YtT7zQwzSZ3yoj{4aJA&hDjDzP+2KWz$fSWk_JeSeIM?j)#UcJCoHDtf +zix^#5-T5d(komj&2yq>pJ=)r55{}D8yMIYx@28}#-9siGX0QKf?&Mzldj+5Ld3_NS +z4AiKwIEh(D;yK|w(SqTE9n%8GtSPKb#h09Z4Su5}t!eD(Q79?|%yRu2XN(PaXA2*s +z71i6PgC|vpxWOcF>x1^Kb#TF0oD3Wt?mp_nB|KW5!a(bex>_ +z3BzXnSRUV4?S>U3oNUa%Oqj +z8OwH5UT5?Ojujj-vCRnqbP;E&9_ik5DSHdY9Aj-{-YonuU2_duuXI;W^WN3+orhb7 +zJRK)S$2%vtD)rKMa$$Q2xEzwD%0$f66Q|lxI-cRFU}3Y97G~cZ-ef#Wt2i;j3h}G& +zPAl4|^*Z>mC(S;^Z>wL{dH^rH(3EjjEYphZH}CB5(U%t~HjStQwWejfS1Om$osi)< +z;NTxys9&(06D1hl{#4^aRM^V0?7`uNnWj(8gqY2XtWt)pJw{&ptr%tL;5d`f>M3`$ +z+QPfTB&E~1subz8-101Fr-UcP(;OUIPo6_QTk2=W9VEW3@xXOiMdyVMFQdr@gJ`+|aOq^W3WiPPh5f2SB17BQS7y+u +znv)_G?e61!>;Z#_6P4nSYYJeGHH<_B7wt?r0+SaVPinhS7F@HQaMwp=3mYl;!&Sg_ +zxqGs`&Q|2q0HbiHSw2nW|X|CK%RDO4-gHNAMK0a~2 +z&YnyKR4pXATU@2@GP9*LB^x)xj$4?u35s!X5=FZ<@h7aVHuJO2@D-S@)`pOw@MfK= +z9CF^x_2TSZNH39)5xmnwrrNyMm8sOfi`p-XD1^(|DKb`=&w7J4jaVCe$QSidF#s%1 +z2_M?LGU>3Ie$)QQaSi->Rbx!*2n4SLU%ZDO2OP|@h;~Cf=R#6$wnx0KNib&@7hwVH +zrC0tpk%Ev>1@u%Kqac3_Z`HZc$Iif<;c6-VoDyVKD4DBALXv;GGa4A4G-u+Vd}iyx +zB?i*=Q`v98}{1Lo29R9EJ +z;#fEkn@a$Q^4g#w1#Xchdc-*jHX%^b^+Ak{jAF9otzN%Qcsl21vs-?4# +z`1Sp0U7=U@=|}k;4dj5T`z_Xdrafi|@k}WzhLHuDqeAZok%mpu#=^ujH60 +zPJz$VQfn*sbP-b{nen&g4td3f_wvG#@ny +zHYrU=OK(@s`Ss%dM~&u%iMYDd%+0Uj@-?AhB!FRbp@4n#lTQA7+zp_Jam2_GK?ALs +zC%*F~Cd1Qn%abt}1LWuT$*?EiN%gk+$O`x-%}bHW!YR(c+FY$Q1q}~&6^mS|a&cpe +z8(lG?*YtqNMA$E&nMm?RdNgGQr#zc`;D<5yE+vAfk0w5c_r +z;BdO-%vP$}c5^q!oh+8_Yqm^~Z!gI6Jd6fDR#|#0zGAzm<1@imsU?LxO(o=M;x@+A +zzie9=Ik{reUvQEqDD)iuVh}PO?mY85Yq5FH-LyaqAsSDEYO4Jh_fS*HF1!GWt3MxJ +z3zSX0M&%NMPsbcLtDVZbt?{F^-EubNzom9@B6#YLC=|vzie+da6tM0-69sovPLx>& +z4B&p$M5BsaX02rwheb}qRSBZ^Gku3fe%BX|+u>{e? +zjYIUHWA}-tWv%ghz~A(vC+Z~-BDc<30vzyffRyph?)$zb16L+~7#lRr8pW3e4i~Vh +ziMjc=N;Gf-plkDC2tqZ1V=OHODAAHMDw<--4-XJw){T901}uhrmrW;#^Ql(1ek}ux1n<4;?~H>{`F368o>iTeX3f5)-2M+3``WhXxR~Jny +ztMzgqE4jLAP?WEw3FZvPd8JJ{P^gT)uzREJX}t8GvJqLDWC$w?W<+bUK? +z!u`)q2aI`8+hd6kZCi{P+4&ybxjXK59CtjkQO~m*4D!wfb|Wjxzby{J#A<4RMQ; +zG-=jvYH6F8Ksv~*w0;snxT8g1F)3x*6En?Z;i~WPFVagD?ZW!4G!XKATt0k}O&;6vS>mnylV42j8t&gkH4lQ3`=&!F!?Sj0snCPePbg}spUx9AqMtMal4F0k^ +z@G-9Yo^_TtuXJu8Lt~Y&Klf1wK6!)xExd7W9u$^rMWti#HL;QV7AYE;f7}z+D%u-g +z#$^vgiw@bdTW<~ct&4uws{uAHt>01HoqGOU6MZfEF8z^3)DyL(yj +z*H6*U9hBoTB8O$6l{)!v{M8@FRzc4|8MzQHw&iV-HDhc`0rH}SrI9{CZ`Mbciwl3Yr^XhGUjDoyq?KiPLPTMb=A_=C~T6*Zo44WS8r645N +z`SK6=aV@P7n*%SFD-6y(!yZ9DKg|-gW46GSY7u^>$A13Sa4K{J**xDSp;v^f_ss#h +zBzr74paSr%d8iECgvB9^4R^)s;IGJ2Pb&B|myOgNg2|se635ispL<;o%VbP)pqLRC +zYt3wyh|&uQNS#rV<8l!&L^#f1Au=P^Hru8m0xPeWq!$$UV>P)SVbka*-E3W+YDXq18G7YdjIaQ}<$;{=L>TGR9&+v&mIOODh50dd75((I&#vt@K`pa8z3) +zmXHXmdQtZGT)V|r?Cg!1ppMSX&eV#Yc&tcU_-$OUi9UX`K(^ao6F$+RAA6>tmA2&Zm(a8%}eP>F-F#Wns}6b>My +zlc(TZX63`3LYH`1Rn$A^Lo +zQOpQ=11EU-M~+JiN{;GD+u#N0 +z9N=Tz6&HQ#P#_#Q)UAj#78e9!MUoS8B(p~xkZd;E69YhL`#-Z0Q>&us3UMD%Puqi{ +z98ST1IEG&+jznizO{j*vg-iqNTU307z;n(CzqjbepqF2#ilyYRf(kVLw!`+g%0Yk^ +zv~~PKIP!gN@c8&>8Lhvnyq|~JW$14NP`u?}5Kxwqbc8u5n_`{Ba6Y-Rc!Z#TM#cG; +zlf~dI%EEStFejfXVH}?AHw)=}#t>fJ~Ii#lQ4#n-Y +zG4h3?Z0fm4%KLo^l2=n`dhY}qbY;WK-~aqgwS=#zETE$Liec61RoaeSodQZ3B-Pb-b)obYYQR3&FartS|1&WVL{w21T#&W4?ihzZ-{$MNPsz=x7+QT0N-owE_WV||Kxg8jQS|BCV=#2~NqYl?5-&Up8JO)Rg1 +z8wWcb7l@#!r240*B6R9#MP>CR`VF$l$VZqy0|34_N_A-rH)O1CgzkgExG-!^uQUt| +zB_wosDOEmp=AhBm@a99NfXRq@scj2c_BRazLxdP<)F2ZQtj}HZ@4x7L)s$?Zuhmxn +zVrpOV5M}r!zveQkc-u(M13D`2+G>M8xuCDsFE@wl*6F&?XukZ9vv-vw%Ru=Did&`j +ztm?iG*He?81eYN*GBwraCTAf~skuVjCUN#w%M@rzqXxr7MVWPv-hs#?D{U6}?Gsig +zQ)c+lTH4LSygUZ*@2`-4`VJT53){H6Iwfg!fm0OCJBpz78oMJ67*Rog*4zXF$5Ov1 +zzN;9By=fyeuV#~hU-eDySRMY-jK{Piv5@&!eMxP>o2Dw1Ag1n%&-Vx;yq_!}vYQ{^ +zCAWH(`pAgNbv;;|sA1F~w_3&S#gvKUbZqphX2)jZ+k&Do#D%%Q0Ey#%O{!eO0mzoc +z#^G{6KGQa_fV?-Vx?>s&C>3KE;m<85en3=lLc}0~PwpGw6GrKUY?5!9TEME%$x<9- +z62wgGZAUMxhj6a<N2Idn)S2P6yHzAA +z31)aU`r9wL{U_VY%E>KV~XJi!9R_>pgRSjy}Wfrj71Zxad*;o=@&WupTWi^ +z^}pZ(Z`sk@6e5tZf{ayf1%nzk5&2ZzuWa#(hfXfgr%^<0=GhR9(l(5Zjr-G7)iXtd +z(|>1eM}+>3<%-m#Vg|o++=8n^ipiSY61zq}qfZdrYKcl;^+UGavu( +z{)DRNtE&-sx)hF*>+*{`ZW5pVJx3U~&VLUw5$IU(Z~es-S{?~-cm`bvAj5175jORz +z6WrL7$?Uiraez-%vGKB@{PQneQKd@juxQ%w21-+Jvk@g)8MXcBpxqm;Hn@3Oo)dja +z-HQit!FmG4!J{cI66~D3^~J39Zx46@_+gh)-DEeyJnbDiRTH&38Ux7taKOAmiCW?y0^Tq{^fWrn9=j)ORPERIlE +zg>JWtuV}k#e8aJyXr=Z0C-vbAqfUaC6EOiNr%n5@T#c_bX&*?P=Fell$4K@>76!w` +z@k@fYS;i2@6QM%vhrAz6z8S>lD@qAoK*GEilyfGTG#!v{GeL-EQ0;(=ucr!NgBftOeYeLYS#61 +z=2ddjfTl(Ea@9&XsQ{Hx`A@v2t{vh;4*2~PI~AYWT6g&dx<Pj4(R10q +zh#DdPTUrl}P$ER7G?y}t5ybwJ-9E#~r+RCey3q0rZc#U$86R(>^e85@KH?1H{rf|N +zo=BKa9k#W|rp+lB|C1RhYZNO^rM?pJ>|Y;zrpwoBQ|6@Z+xp>P5(3N`JPd@BLpr$6 +zXETmwqD5DsWqu#194?$%n)>)B?eD_%9;+|1x3Q8sW|y%DWFneUjEYr&&fkeIS|Gtp +z4}e2!aCLF)i3SpLrDDYG?z7|_aXsy%WL`Es#}o>abhqE;ek3tx$Aa*r7$&WxUBaG2 +z3WU#Dz`jpCIGgBZwbuTVgdxM*q^*<@hOdbB{}X=;fb?2Km`o>J*j(>>&ja92ReiI$ +z{v7by!}eOmbeQ`fIr>FK|9e&aZYY7nuj-n8Paq)`E+5}Wg`j=Y?dT>&--t9fv|R|h +zo9>^-%H9VP*=cj3TGR1j#P~+SSX(365s%cPT%NpIWj$Pxl!)3-RH&jlmFf+GG&>Q& +zles>;tIBr?`e#MyfpB4K14T<8zX3R@sy{>b3AG9E{gqT-EEPB`x>zcfrPl+`RP+vC +zZy-xlefTeC_o-&3zKj#~wP-a!!YOYQIhY|R87jMOg>M} +zd)4Ld;%#5j`fUFt=tn$0o7djyR2|a@7(Q2X4}TE%EMArbVQqVZy~(&&wW?KrRMD?8 +zCEq9_zjtwEhog((#fs@1@ZG>4D0*!S4g;9a&#XymPEN0-QmZfAe~oI>F;%#l$6hM}W|yGOtVFT4ODs7GDqEA(2D-6GIO^s)d6PrB*(tbk +z{hYm7;XQU%ELBy-#?BU-JLSXQ1W@JcK;LAde-ZTU18mDfp`(x>0Dr9Ls}z3K*c@#u +z&EJ_%XQ~QUOmB8yTI!!bL3tbKWtN%k3MfhTCRCCj?k6Z2x_ODzC?9UhN0P%ziBMWJ +z^^|}RNsK<%Zg8DmwByoNni{`(*-I;s-EIReHEnZUX)jV0O1=@32tj; +zfDjj#ARONKKzc}%flCtf%jan&OzLp&&mJ~ium@h3Ct-MkQXRdvXp&QqS`Dul}&kWky +z-CP>Xu_`_LsUrag8uMGD_o%1~2tRsC2h +zk+Muv-T`u_3wD1!PN>OKlOZU6!JQwoO} +zPZ@KnzLBe^Pe4f@Ol-jLcMx9bBRsnY5XtaPLRobxX2y~lWq&ggp-X7515mVJvQol? +zO+V7#bYzkV#lb{=i1=B%N8x3_NBX7pB`Lm30K5rzUco1Tzd_-noyUQW +zBS0Wy{MAf2r8n^S$(;xlg~PP}I`EI$t2{sSlSDVv0;9PO!=_Bc#I`OcB|^2R16y8= +z>iUy{uWcn)hPGNe0OBaHdmPeUb#Hyk2Z2|B-aB*J5LT-dR-+f6RFzs4rS^LrKY;R+ +zxQ`)yCj%ZxJxV&R012pO!sYe#Jbvd<48f97 +zJu;#tRthXwa^X;wYT}}mJttX$XRjp4fmf@d-UelIW6F;pKXx@C-;}yj3SZ5@Z_$hC +zXU>sh;{GP^^T7833q67TFzHwWM42*Tm769{WyA^U{DN~O@B!edxx}1K9wmnPVoB2c +zO;+tFY*iZRN+h7MDXyp_z3fym)4l{(;csi)+q~&`;#u(5+7AQd*23`pK(U1big^n#il$wfF9zVX5%j@e);8+EI8F>ESiu)u+0WhIT6lD#VIcC_L +zR0w~YDkAmEw2^?tv?XzWG7={pZbIVrAl}%xT?bOu_|DNwabFJpI$&WRwz*hzYyl!v +zJZ^jkSJXFBGcINO7dZd^W(Ugu3sx*#IjjV{fcFUl}L#!D*R2y +z7{&cE@DG^l14V=B>9|LRUQf@i`*Eh@@Tf^bZZq&YPSua;0|&V8hRi&6vSYO}IO0^R +z__Qm0q`nxOG`}Gj;@?i&ie-XP!%TcvZ&ZKMc1eB|2J8NR9OP?p>d#!@80h{G+@Tx) +zmP-^Ia7+OLPJ#@ecLHCDJ0~e$k71xvddFT8m5Bh62`BbIMj`4XgONm$dSr8leU6o= +z2sMMLZRIY3?**O<{QjJk%tH!nA7cF%g^n#i=6JZ}lfVmb-jUDyNVjtPP@XIh!nm#u +zAIgQZn{){P!uC@G+oWW=8cV4dSZQB#Bmkcm_&Wl30Po=vaIqc-I>rE*izYbN;WGr@ +zAaEBFGJZ^X=8ZyD?TNzH7D#KzqO8!Kb?5dNN8hDL3d*Em2d5vI6DLqmE +z;%N=|Cx|>9_*=jSAvI!hf~B(!a?l})%gYv%d28-r-)-V(8HT5KmLw>5iWQ-VR)c)61U&@?0EvZUZj!1xiMGKsi%n +zKh(b6JF~V2aZka15a)&ZBuh{n8a0KQ{jXRt0VWZbx{sIMwV)2)6)_1+GLm +z5u4MYd`Mx`$L>A$JGi}rbAo&h_%qzM8b6K$`1zTmThc=4(F~B7#<=fn-%WTr;EKRC +zxCbF`0v?0#c--gPZUn9cuEsqRcBKd>K(4~gt>R85UnM+kX9ov>4V>|O9(V{ijc^Ze +zHzN1o&Z9lgCA`sgsnZf5vuOf6-2C?+6s>To*kvGB0#}J}3I~!C&F>11v9E6Osxjox +zH}!7f0CJ(J|3VWt=oIcH9X`onoOiXPB|TE;k+u)Aq$MqsmH=7Ol6q(fkR>gthn4_Y +z(vo^;36Lc%sfU&TS<;evXbF%dEvbi=09n$KdT0rdB`v9kmH=7Ol6vU>2aPAsPCpqk +Qng9R*07*qoM6N<$g0t|Fy8r+H + +literal 8324 +zcma)CWl&sAu)T{c4!b~b!Xm+46P&Pk(BKXmEVw5SED%`S0>P6I65QQggS)!~celq^ +z_1^#YV{TXV?VjqMxwmKLoC#G^k;B8Lzy<&SPeC58@g#fxYnb4tXQ6IU#*@HulGk$u +z0Mw2D8mK`@;_69B?k1z__SVtT&C|@q0`T7*W32VHtpOsLDw{jRK+%dU4Hf8PDP(tEaY +zVb;TO?zg>+y0e^=)H~9ck{1xzJJsKD<2QMWE<<4w$ku+?Nz~ +z?sw*04{Ntj2t(m?vGNT6Z&4?~J_DA=4@RZ|Hy|?L2baGw-~xOA-T`VLCt&4+Es7dJ +z3rqB1K#)Ht +zM;a6WNe+K~@E)jy^0nkG4{!%88+0X^_i_yf#-MD!UOnz)0W6pOg`AvCsp#J@n!d~L +zCVJ83uVFsD4tN05H1Ti{d&m(pugW$|17?Hwda!DnL8l=`_8ey*(%(4BM7^w__ +z29jw+qAw%K`BPELftPW%&SF96Iq +z_h)d~d@n?_dd(h4B}06FF_)p)nqY@o2W0}0k!fDPNE=n60)9Z1ad$Q2*UaJYIWokv +z-YS-7Pdx#2eP~Ya<+J1YRpR69RWsr44_urWbIB`C{fwD97K&lSNUb+huWn><5yoYB +zJfUnktJt254fv(LN1LG_v8d+K$*{JMVsT|C=wGYwMq)%b#mJ%{U3S +z3eOditQ%g>1&0d*gJeo>(pn)%r<8<&V=*Y6MZ|vjseW!0G4f*AyoOjh^n**XNNygpr52-!$+5s79~Rz!atG0AJ~ +zaLfL^_!UEf*!wv|>{tUMEVChL@bJ7VVyP{&`32M_;g)srdhGDfd*c_n>)Eu<6%~5 +zXz4zr{*Ya1{haF#(VA;Dlz!_!w!vA}mSI?pFpKT}D5t6tuIgcFQ^&`ihd_avR-x

@y(HdF(KVXFH}bp|wUaw6&QXCUa*zVm->M@=&FCKVp97YM|kve_3*VCW46 +zv!#8UFWTMyY4J+6m;I<#=$7m +zvIxO0NZyc8eys_L$J5|l<8aShl<6-W9Ux5Aw;1X-A*d|~znVkzbk~W9NS>&l06W&r +z81yNRW4XxCw4Q;`80-AJ0^JHD+(Ld}1M>T0KVc9A%jak_H8K+KT&aIL$9Yj{OwBsL +zi2A95!ZqP=dZaZjR5`2~3(lW{1Vhz*b*AYMF=(OA6b`(1Ehoh!e(1-&%>?^8@^6A5 +z{;YtsV$bNqlh-7LCkxfTnr1`I0`dcMIZD$kxbZku8$`3YrKX5Uk(spqYh +zz_N=sHsL;;DZ@TN>NwJZ2}p`Ul{vd;|ID)}R50=*NyUdB^$XQk88m|MZmkHOfep#< +zzpW_boa0-TB|CQC=plYSmJNqQ$Q=9@3P7a4zeOQ{L0(gfdR_i*D4RJ}5#WFvhZr#f +zpXZ0^);*ZmA%T458)_hcfwjJ0md)%R6*(R)!cKk-p_wl0EUYhkMtkW6apETFb28WQ +z4Mr#(QduSc1>s5h0i;rz#fJT4`6?ZjPm_lwr{!mvh!p@w7-I%Z_x=86oCm?^|4<)8 +z=$={{fGneBRf<}8)D3UL@M`bMg{F5AwQ4@5G3#t45l==axYJ4x9G47q)($$J@=@VI +z-Y!i+)Uo`F$q=Q3XBA3T_D`PpsL>6Mx4o-;&M{QBLJK6f;^0Rs9W?w@U_H8UL4 +zC<<6>UoFr6a8`MftsZLN7PJe>FpW^b?mA=9bI_jUn!2_yOZ)|xt7s4cHEZ;mY&G&={=sV`v1dU>v(H>0l%EsXcuV*0XE_*?nG +zwAp1c&4Q4%zq04fe%pX0p*k30Hxp~jLW>&P`{whYJ +zzJkFrrGP>Fd{IB8M&J0sk-7EX_Al~AhU4m{BiC-N8e+EFzQE6fx~9#Xf4W +zTRkXFzM{UunB;+Os7PyK|1qdU?R#%myF?+&G(?q&(NroYmBe0wlhR*;mu+A9q3JlL +zCpSCOmC%GJA@7BvKd`Y=s>FS}ixpv(yR$(^u#@RKn_nK} +z>R!=gxS9R?c(a{+!Il+}5&fj$ubAFFpQ}FY8!o@1KFW +zgd#)3#sg)MA-L41dVrsku5bKRmnOzp`GB^EO}3v{9=z{$K;nKL;e}0IQO*28T3TAe +zLoIq^SG`zr6}x1jkj)m}_Qt#{T!{>kA|@qV2g6Y{C;imh<|m$IL$T6>&JZ=XF~(#I +ze$g&Ik%OmSei6-t%`oS8 +z!RzV810Fzdj(4EGfU`l(E9NZg=liA9sdUi;C{pZ1WO&eu8fsKqA$nu2S-r{6F&Nnr +z6}kJoajWZ8Vv;TvpNZyjo3F+F@bu7F++{E8X(N`1D^$Kv@M#m-Ur&ZOoGnwcCJRP1 +zlg4uR==108HF-X4sCF*Na?O&4)YJB7GgIJIWOn3c!WF+a9qN2ra6aFYNrz$p{DPA^ +z)%WY;exJ@RoBMSTBR<;GMA|k%Ty3fhyyaGBm}r5mxQXdja#Mt<+-?hxgXPipb$NES +zxNY84ES)}*GUXnb$wpzf>U2Lj2_O1|TnOPxe5y_)HG19%K +zX8AWbA=>wR(RNYW=oYXGnFc#$)pdBy4>m%aN24jHjQv(GH$(&rK2D#NsQwC24&&)3 +zAuxBs-+rw@L#I()e1C9B(BJH)a7Rm>xjYZe#c~>J&zJ9cyblyII+M9GK$S$tCtg3m +zE!8fjMr(0i8rt-|tA3Us(c9O{=ek<*tL)2nyKoGiw>a8WMK*P2SIzfMt%aAyJcnaf +zbFz?U&!hE&duRl@QUCy1%oxkXPamf +z6-b#Z< +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 +ziumNvw(uoEt?aYT +z^=6lWI(cfI3ocV8i}suxydCuBrc6}0vmoX^RlL-jY?|e%%K#@`zRcD_w9?gY@;Dti +zQ;7WgCz9e>^G}WdWEfz0wRq7}(g^a&BBwOV5g0IOgn1Gx3P+NhdJ84%{oI6KZ6zM1 +z<@smeE%VaxHhObCA2ZB#Sr;!AbPCYB9WU|YTP1JH{Y)(H^+TqL%fQlO%2@aJ{4R-r +zQLf7e!0fCuL1;11?e0+d;9wH6LBdIP@nZHW1kbBoQo&0tb%|brxN5jU#;hhe}L^ +z8{yrF((CTOab2hx#9%q^;kJ2tdpjbZnq~&Ib#nPQz3ORi&y{W(48CqN2i4425serF +zT0jc0XW~8tQp1c@7o{@4<#^fRaGhmyLAueWS7K_#N^q;g_B-DIrt$AB*s2UK#x3d1 +zrrRxVw8)wwx8+T+9rDQ6(J}H(k9&Dt=)LFwuy7>iS@q9WREzNN{k)7~E(e^)&j&mNH)~|l=aEqnT}X9JnpM;f +zC?Fp>HMZ&od}VsTSL8-0@C>%y2?1p850Y`EwNc&^cQQCh;39YXD8?|x_D>NAf +zR>Uqk{l2<96$2)9pfPeMj{EO^{i48!J1YO$czewd*y{V4lY08Y#af;R`DgITuCM=< +ztdai+%WaWFFKX281E;fB7ltTQ3YYkD@8O0E^_zZlT*l`zcbAx;oYIv;1o_kFs)R}R +z+}TFrlV)$2+`}^SbAeQ{QwAeUdjYy4oq|TLllcvr?tLL(FVat0@97^T{Y;iZ3^MiV +z&7SDtG~B1+_hls84daz~0{ufG)Bhf7;D5lEByLuj`8nbHWKM}kS6d7K5oL}I!FlZN +z`02c%X&FrlmlQw^$wHyu>G(kD<-zQD-+?ePsOPJk%BcrI7>FvzCUv1Z*?CN&*s8O8 +z@oUF&db`Q3@mZw7L&Q#Gq1YD!I&M{*ER5~vL2D+iAV5DTVxrjoM}L|{!Bx$Olh=)B +zu0Wnfmr%p0?fC}Vl1xd_IXFiam@s-DuJGh#ObjB6kY3d3o)}8sqxyI=6dNltGMT?S +zBBoh>u62K&DlVIKJiJ^Fl2n{%*um6*EkuhVS;Imi@zcIZ2t-CEIn%n_45A<=)7(`$ +zpg09emChaZ44Y8%OIGmoMF62&F?Gb#;1;%z{V;cluC1sU!a}woOM9%MUS7(kcH2=(5?M +zxX6|{0vM8?MzJ!47}i@^TZx21biBA`K +gx-fwL-(3LIPg|59oc((uo)mzBj0(Kywdv>o0sO6>y#N3J + diff --git a/leaf-server/paper-patches/features/0005-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/paper-patches/features/0005-Fix-Pufferfish-and-Purpur-patches.patch index 7f1e1134..a3f9648b 100644 --- a/leaf-server/paper-patches/features/0005-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/paper-patches/features/0005-Fix-Pufferfish-and-Purpur-patches.patch @@ -5,26 +5,26 @@ Subject: [PATCH] Fix Pufferfish and Purpur patches diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -index ea2bca6e0bbc56156c2f744769abd677e6fb0c18..aa80daab4917e22bc3849eb9b0915b1c705091af 100644 +index bbdda3b5263118ec00847e94dde761617db09df2..3a23bebec1f2b0f61f2ada307a37046c29f8dcbe 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -@@ -32,6 +32,8 @@ public record ServerBuildInfoImpl( - +@@ -33,6 +33,8 @@ public record ServerBuildInfoImpl( private static final String BRAND_PAPER_NAME = "Paper"; private static final String BRAND_GALE_NAME = "Gale"; // Gale - branding changes -+ private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; // Leaf -+ private static final String BRAND_PURPUR_NAME = "Purpur"; // Leaf - Purpur - Rebrand - private static final String BRAND_LEAF_NAME = "Leaf"; // Leaf + // Leaf start - Rebrand ++ private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; ++ private static final String BRAND_PURPUR_NAME = "Purpur"; + private static final String BRAND_LEAF_NAME = "Leaf"; + // Leaf end- Rebrand - private static final String BUILD_DEV = "DEV"; -@@ -65,7 +67,9 @@ public record ServerBuildInfoImpl( - public boolean isBrandCompatible(final @NotNull Key brandId) { +@@ -68,7 +70,9 @@ public record ServerBuildInfoImpl( return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID) -- || brandId.equals(BRAND_GALE_ID); // Gale - branding changes // Leaf -+ || brandId.equals(BRAND_GALE_ID) // Gale - branding changes // Leaf -+ || brandId.equals(BRAND_PUFFERFISH_ID) // Leaf -+ || brandId.equals(BRAND_PURPUR_ID); // Leaf + // Leaf start - Rebrand +- || brandId.equals(BRAND_GALE_ID); // Gale - branding changes ++ || brandId.equals(BRAND_GALE_ID) // Gale - branding changes ++ || brandId.equals(BRAND_PUFFERFISH_ID) ++ || brandId.equals(BRAND_PURPUR_ID); + // Leaf end - Rebrand } - @Override diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/ConfigurableMaxUseItemDistance.java b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/ConfigurableMaxUseItemDistance.java index b1ae10ce..2af81c8c 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/ConfigurableMaxUseItemDistance.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/ConfigurableMaxUseItemDistance.java @@ -9,7 +9,7 @@ public class ConfigurableMaxUseItemDistance extends ConfigModules { return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".player"; } - public static double maxUseItemDistance = 1.0000001D; + public static double maxUseItemDistance = 1.0000001; @Override public void onLoaded() {