From 7e89480eefd51376de6ebb8fe4e9c587d524bd92 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:56:12 -0500 Subject: [PATCH] Updated Upstream (Paper/Gale/Purpur) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@1004374a Add further information to thread check errors PaperMC/Paper@e2f0efd1 Remove nms.Entity#isChunkLoaded PaperMC/Paper@54b2e9d9 Add buffer to CraftWorld#warnUnsafeChunk PaperMC/Paper@d4a95784 Experimental annotation changes (#12028) PaperMC/Paper@5bcfb12a Fix activation range config and water animal status (#12047) PaperMC/Paper@e0711af5 Deprecate UnsafeValues#getSpawnEggLayerColor (#12041) PaperMC/Paper@8927091a Do not record movement for vehicles/players unaffected by blocks PaperMC/Paper@5395ae37 Fix composter block setting bukkit owner twice (#12058) Gale Changes: Dreeam-qwq/Gale@534623a0 Updated Upstream (Paper) Dreeam-qwq/Gale@7274f287 Updated Upstream (Paper) Dreeam-qwq/Gale@e9ffadfd Updated Upstream (Paper) Dreeam-qwq/Gale@9e6d19de Updated Upstream (Paper) Dreeam-qwq/Gale@f35382c4 Updated Upstream (Paper) Purpur Changes: PurpurMC/Purpur@9b575764 Updated Upstream (Paper) PurpurMC/Purpur@88ed7442 Updated Upstream (Paper) PurpurMC/Purpur@79c11927 only initialize the config once, closes #1637 PurpurMC/Purpur@c7bb955e Updated Upstream (Paper) PurpurMC/Purpur@2fe4cf18 [ci/skip] fix indentation PurpurMC/Purpur@65637fa6 fix(mobs/bee): Set `takes-damage-from-water` back to false by default, closes #1639 PurpurMC/Purpur@16cfd04b feat(mobs/bee): Add `can-instantly-start-drowning` option, defaults to `true` PurpurMC/Purpur@4f481858 fix: correctly call force when sending particles --- gradle.properties | 2 +- ...0006-Purpur-Server-Minecraft-Changes.patch | 118 ++++++++++-------- ...07-Fix-Pufferfish-and-Purpur-patches.patch | 6 +- .../0026-Petal-Async-Pathfinding.patch | 6 +- ...able-movement-speed-of-more-entities.patch | 22 ++-- ...missing-purpur-configuration-options.patch | 20 +-- ...6-Remove-stream-in-updateFluidOnEyes.patch | 4 +- .../0091-Optimize-Entity-distanceToSqr.patch | 6 +- .../0004-Purpur-Server-Paper-Changes.patch | 8 +- .../features/0024-Asynchronous-locator.patch | 4 +- 10 files changed, 106 insertions(+), 90 deletions(-) diff --git a/gradle.properties b/gradle.properties index 746aad63..33a47837 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=cn.dreeam.leaf mcVersion=1.21.4 version=1.21.4-R0.1-SNAPSHOT -galeCommit=2b0a4c09f09e18fa80b1b34366ef0c035b819552 +galeCommit=f35382c4fa4ecf3466bce1476ecc1210c584f149 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch index 4346d119..91d964b3 100644 --- a/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Minecraft Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 5583a3f19b75a9d07367e2ca80adbbafa9af6593 +Commit: 4f481858a32b9636fcd19f539f13fb03e1bbf443 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "net/minecraft/CrashReport.java.patch" @@ -42,7 +42,7 @@ Patches listed below are removed in this patch, They exists in Gale or Leaf: - Rebrand diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index cd2fa33f6e655419f2a1155aed8566742385d922..7ab41616b0c3e3766c13f86920965165ac800ba3 100644 +index a9269356de964585028e69a3713ca64f67ba02bf..9a81a642698ade8a06c3a3bb4766f3c004a0b030 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java @@ -155,6 +155,8 @@ public final class ActivationRange { @@ -490,7 +490,7 @@ index 8b7af734ca4ed3cafa810460b2cea6c1e6342a69..c394e4ea9b066895a8ad370615383a4a ItemEntity itemEntity = serverPlayer.drop(itemStack, false, false, false); // CraftBukkit - SPIGOT-2942: Add boolean to call event if (itemEntity != null) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 30dc45b2201bf7435d7f38866dfa4b5fbbf44957..22b0f33dc3ef9f51ba2ca3cb665b07a16bd1c9d9 100644 +index 30dc45b2201bf7435d7f38866dfa4b5fbbf44957..6e7ac9128378586160230bd33462edb7d6880154 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -106,6 +106,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -521,7 +521,7 @@ index 30dc45b2201bf7435d7f38866dfa4b5fbbf44957..22b0f33dc3ef9f51ba2ca3cb665b07a1 org.galemc.gale.command.GaleCommands.registerCommands(this); // Gale - Gale commands - register commands this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics -+ // Purpur start - Purpur config files ++ /*// Purpur start - Purpur config files // Purpur - Configurable void damage height and damage + try { + org.purpurmc.purpur.PurpurConfig.init((java.io.File) options.valueOf("purpur-settings")); + } catch (Exception e) { @@ -529,7 +529,7 @@ index 30dc45b2201bf7435d7f38866dfa4b5fbbf44957..22b0f33dc3ef9f51ba2ca3cb665b07a1 + return false; + } + org.purpurmc.purpur.PurpurConfig.registerCommands(); -+ // Purpur end - Purpur config files ++ */// Purpur end - Purpur config files // Purpur - Configurable void damage height and damage com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now // Gale start - Pufferfish - SIMD support @@ -1279,7 +1279,7 @@ index ea34bb4913e7357f5b76a64443f7e744abdf7b5e..de115ee71fa240440b54c553e0d3ddaf try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 6a36f6e498fbba976c5f1f48c3648e2e19d46ebc..29b81470ce8cbc8c8c5644b8c07738bf9d90460c 100644 +index 657fbc5e5d81b44fefc2d9d6c6bfe47f179a7843..ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -326,6 +326,20 @@ public class ServerGamePacketListenerImpl @@ -1492,7 +1492,7 @@ index 6a36f6e498fbba976c5f1f48c3648e2e19d46ebc..29b81470ce8cbc8c8c5644b8c07738bf boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { -+ if (this.player.gameMode.shiftClickMended(itemInHand)) return; // Purpur - Shift right click to use exp for mending ++ if (this.player.gameMode.shiftClickMended(itemInHand)) return; // Purpur - Shift right click to use exp for mending org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { @@ -1527,7 +1527,7 @@ index e802cecf30a2bfa4390ca70c45a9840032c8c046..7401200f6a11bf552d128d833f25d825 } } catch (AuthenticationUnavailableException var4) { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index ef533e2038fa110f3ce0936290023d54c0a98471..6ae663ce0b88f1c91425a67f2c765eecf49cdef7 100644 +index e7181a2ce0e3cdbcc05bd602c3c5447d8d1ad143..08a028ac0892552f7e6b95985233c1e625e11e44 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -407,6 +407,7 @@ public abstract class PlayerList { @@ -1877,7 +1877,7 @@ index 1fc9e1ad541c46124183a401b2a7d99aea69cecf..881271f0bc77a8a8a7d31daad9a8188b } diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fced442cf92 100644 +index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27ab94bb41f 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -134,7 +134,7 @@ import net.minecraft.world.scores.Team; @@ -1920,7 +1920,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce public void inactiveTick() { } -@@ -528,10 +530,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -524,10 +526,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end - optimise entity tracker @@ -1960,7 +1960,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce this.position = Vec3.ZERO; this.blockPosition = BlockPos.ZERO; this.chunkPosition = ChunkPos.ZERO; -@@ -912,6 +943,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -908,6 +939,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage @@ -1968,7 +1968,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce this.onBelowWorld(); } } -@@ -1842,7 +1874,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1838,7 +1870,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -1977,7 +1977,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce } public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { -@@ -1911,7 +1943,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1907,7 +1939,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } @@ -1986,7 +1986,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) { this.wasTouchingWater = false; } else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) { -@@ -2547,6 +2579,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2543,6 +2575,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess compound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -2000,7 +2000,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce return compound; } catch (Throwable var9) { CrashReport crashReport = CrashReport.forThrowable(var9, "Saving entity NBT"); -@@ -2696,6 +2735,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2692,6 +2731,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = compound.getBoolean("Paper.FreezeLock"); } // Paper end @@ -2014,7 +2014,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce } catch (Throwable var17) { CrashReport crashReport = CrashReport.forThrowable(var17, "Loading entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); -@@ -2942,6 +2988,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2938,6 +2984,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.isAlive() && this instanceof Leashable leashable) { if (leashable.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -2022,7 +2022,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); -@@ -3148,6 +3195,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3144,6 +3191,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -2036,7 +2036,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3189,6 +3243,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3185,6 +3239,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -2051,7 +2051,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -3267,15 +3329,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3263,15 +3325,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } @@ -2071,7 +2071,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce } } } -@@ -3477,7 +3542,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3473,7 +3538,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -2080,7 +2080,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce } public int getAirSupply() { -@@ -3965,7 +4030,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3961,7 +4026,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowPassengers) { @@ -2089,7 +2089,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce } public boolean canTeleport(Level fromLevel, Level toLevel) { -@@ -4502,6 +4567,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4498,6 +4563,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -2102,7 +2102,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { -@@ -4910,7 +4981,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4906,7 +4977,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -2111,7 +2111,7 @@ index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fce } public void onExplosionHit(@Nullable Entity entity) { -@@ -5108,4 +5179,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5104,4 +5175,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((ServerLevel) this.level).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -3548,7 +3548,7 @@ index e34e3b949676aa28dd7c82a47f2ed3b44ad200e3..fa34e7f1c20dfd569b52a9c8e0a8d4d5 animal.resetLove(); level.broadcastEntityEvent(this, (byte)18); diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df3129285143097303 100644 +index 94244b148533ef026bf5c56abbc2bb5cfa83c938..d5727999eb67ff30dbf47865d59452483338e170 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java @@ -145,6 +145,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -3587,7 +3587,7 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df31292851 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F); - this.setPathfindingMalus(PathType.WATER, -1.0F); -+ if (isSensitiveToWater()) this.setPathfindingMalus(PathType.WATER, -1.0F); // Purpur - Toggle for water sensitive mob damage ++ if (this.level().purpurConfig.beeCanInstantlyStartDrowning || isSensitiveToWater()) this.setPathfindingMalus(PathType.WATER, -1.0F); // Purpur - bee can instantly start drowning in water option // Purpur - Toggle for water sensitive mob damage this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); @@ -3655,6 +3655,15 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df31292851 } public void setStayOutOfHiveCountdown(int stayOutOfHiveCountdown) { +@@ -388,7 +438,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { + @Override + protected void customServerAiStep(ServerLevel level) { + boolean hasStung = this.hasStung(); +- if (this.isInWaterOrBubble()) { ++ if (this.level().purpurConfig.beeCanInstantlyStartDrowning && this.isInWaterOrBubble()) { // Purpur - bee can instantly start drowning in water option + this.underWaterTicks++; + } else { + this.underWaterTicks = 0; @@ -398,6 +448,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.hurtServer(level, this.damageSources().drown(), 1.0F); } @@ -3663,7 +3672,7 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df31292851 if (hasStung) { this.timeSinceSting++; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { -@@ -421,6 +472,33 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -421,6 +472,35 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return beehiveBlockEntity != null && beehiveBlockEntity.isFireNearby(); } @@ -3682,22 +3691,24 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df31292851 + } + // Purpur end - Make entity breeding times configurable + ++ // Purpur start - Toggle for water sensitive mob damage ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level().purpurConfig.beeTakeDamageFromWater; ++ } ++ // Purpur end - Toggle for water sensitive mob damage ++ + // Purpur start - Mobs always drop experience + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level().purpurConfig.beeAlwaysDropExp; + } + // Purpur end - Mobs always drop experience -+ -+ @Override -+ public boolean isSensitiveToWater() { -+ return this.level().purpurConfig.beeTakeDamageFromWater; -+ } + @Override public int getRemainingPersistentAngerTime() { return this.entityData.get(DATA_REMAINING_ANGER_TIME); -@@ -1083,15 +1161,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1083,15 +1163,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -3716,7 +3727,7 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df31292851 } } -@@ -1136,6 +1214,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1136,6 +1216,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { Bee.this.savedFlowerPos = optional.get(); Bee.this.navigation .moveTo(Bee.this.savedFlowerPos.getX() + 0.5, Bee.this.savedFlowerPos.getY() + 0.5, Bee.this.savedFlowerPos.getZ() + 0.5, 1.2F); @@ -3724,7 +3735,7 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df31292851 return true; } else { Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60); -@@ -1182,6 +1261,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1182,6 +1263,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.pollinating = false; Bee.this.navigation.stop(); Bee.this.remainingCooldownBeforeLocatingNewFlower = 200; @@ -3732,7 +3743,7 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..57c50ce5724b073b1aedf4df31292851 } @Override -@@ -1228,6 +1308,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1228,6 +1310,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setWantedPos(); } @@ -11050,7 +11061,7 @@ index cbae85171a1bb64ee3be40ba211d88e68bf672e4..241526239bdbd5d9276f85e7fca46a70 if (isFood && !this.isSilent()) { this.level() diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 7f1cdea810db24182f8f87076c42a19b1b43e98a..0ce9eb1f4108b6afab6df84d5e709be0882e515a 100644 +index af3fef70998cff4e4832adfa2071832324ebd91c..0d9dd9919b2b9902137df861bcac8057e4b741de 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -58,6 +58,72 @@ public class Vex extends Monster implements TraceableEntity { @@ -13881,7 +13892,7 @@ index 57c933af200551162774f1d473437521e5a85833..b3e003694ce0da357e91ab3ce2b1380f } else { player.startUsingItem(hand); diff --git a/net/minecraft/world/item/BucketItem.java b/net/minecraft/world/item/BucketItem.java -index 62d79cb25879e6e48a1541f864d0b3782d926313..4dccebf97b720aa2189d3ae7b8e2d8066fa13573 100644 +index 62d79cb25879e6e48a1541f864d0b3782d926313..b820ecfbe71dd57a0f04b1c3381ffb76b0c16f16 100644 --- a/net/minecraft/world/item/BucketItem.java +++ b/net/minecraft/world/item/BucketItem.java @@ -147,7 +147,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { @@ -13898,7 +13909,7 @@ index 62d79cb25879e6e48a1541f864d0b3782d926313..4dccebf97b720aa2189d3ae7b8e2d806 for (int i = 0; i < 8; i++) { - level.addParticle(ParticleTypes.LARGE_SMOKE, x + Math.random(), y + Math.random(), z + Math.random(), 0.0, 0.0, 0.0); -+ ((net.minecraft.server.level.ServerLevel) level).sendParticlesSource(null, ParticleTypes.LARGE_SMOKE, false, true, x + Math.random(), y + Math.random(), z + Math.random(), 1, 0.0D, 0.0D, 0.0D, 0.0D); // Purpur - Add allow water in end world option ++ ((net.minecraft.server.level.ServerLevel) level).sendParticlesSource(null, ParticleTypes.LARGE_SMOKE, true, false, x + Math.random(), y + Math.random(), z + Math.random(), 1, 0.0D, 0.0D, 0.0D, 0.0D); // Purpur - Add allow water in end world option } return true; @@ -15119,7 +15130,7 @@ index 9ed50f09147984ba8864edabb89669e2f4fc7bea..af4abe255da35e9b7ecfd29914d5e54e return level.getBlockState(blockPos).isRedstoneConductor(level, blockPos); } diff --git a/net/minecraft/world/level/block/ComposterBlock.java b/net/minecraft/world/level/block/ComposterBlock.java -index 0d34839618648bb8c606dd2d9b1f9db93641c742..d71ac1d023cc5a5d00b20c0001a49f52591a3a9b 100644 +index c8ffb634df661a6a4520731be725b51480764976..9fb36207ce829d1a8b952017d3b60db015efdaaf 100644 --- a/net/minecraft/world/level/block/ComposterBlock.java +++ b/net/minecraft/world/level/block/ComposterBlock.java @@ -241,17 +241,27 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @@ -16752,7 +16763,7 @@ index 85148858db1fd5e9da8bbdde4b0d84110d80e373..c9c6e4e460ad8435f12761704bb9b028 } diff --git a/org/purpurmc/purpur/PurpurConfig.java b/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..aca85686fb0b9ec78d4e83574bbfe6313785f40f +index 0000000000000000000000000000000000000000..e0db3230c3912588ed527e131751bef082665294 --- /dev/null +++ b/org/purpurmc/purpur/PurpurConfig.java @@ -0,0 +1,581 @@ @@ -16832,8 +16843,8 @@ index 0000000000000000000000000000000000000000..aca85686fb0b9ec78d4e83574bbfe631 + commands = new HashMap<>(); + commands.put("purpur", new PurpurCommand("purpur")); + -+ version = getInt("config-version", 38); -+ set("config-version", 38); ++ version = getInt("config-version", 40); ++ set("config-version", 40); + + readConfig(PurpurConfig.class, null); + @@ -17339,10 +17350,10 @@ index 0000000000000000000000000000000000000000..aca85686fb0b9ec78d4e83574bbfe631 +} diff --git a/org/purpurmc/purpur/PurpurWorldConfig.java b/org/purpurmc/purpur/PurpurWorldConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..2aac26f50958d8653eb1472daa7761d36093cf4c +index 0000000000000000000000000000000000000000..40ee86981c24b79b209b5a0fb0705ff62fb65863 --- /dev/null +++ b/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -0,0 +1,3440 @@ +@@ -0,0 +1,3445 @@ +package org.purpurmc.purpur; + +import java.util.ArrayList; @@ -17951,7 +17962,7 @@ index 0000000000000000000000000000000000000000..2aac26f50958d8653eb1472daa7761d3 + PurpurConfig.config.set("world-settings.default.tools.axe.weatherables.minecraft:weathered_copper_bulb", Map.of("into", "minecraft:exposed_copper_bulb", "drops", new HashMap())); + PurpurConfig.config.set("world-settings.default.tools.axe.weatherables.minecraft:oxidized_copper_bulb", Map.of("into", "minecraft:weathered_copper_bulb", "drops", new HashMap())); + } -+ if (PurpurConfig.version < 38) { ++ if (PurpurConfig.version < 39) { + PurpurConfig.config.set("world-settings.default.tools.axe.strippables.minecraft:pale_oak_wood", Map.of("into", "minecraft:stripped_pale_oak_wood", "drops", new HashMap())); + PurpurConfig.config.set("world-settings.default.tools.axe.strippables.minecraft:pale_oak_log", Map.of("into", "minecraft:stripped_pale_oak_log", "drops", new HashMap())); + } @@ -18567,7 +18578,8 @@ index 0000000000000000000000000000000000000000..2aac26f50958d8653eb1472daa7761d3 + public double beeMaxHealth = 10.0D; + public double beeScale = 1.0D; + public int beeBreedingTicks = 6000; -+ public boolean beeTakeDamageFromWater = true; ++ public boolean beeTakeDamageFromWater = false; ++ public boolean beeCanInstantlyStartDrowning = true; + public boolean beeCanWorkAtNight = false; + public boolean beeCanWorkInRain = false; + public boolean beeAlwaysDropExp = false; @@ -18585,9 +18597,13 @@ index 0000000000000000000000000000000000000000..2aac26f50958d8653eb1472daa7761d3 + beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); + beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); + beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); ++ if (PurpurConfig.version < 40) { ++ set("mobs.bee.takes-damage-from-water", false); ++ } + beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); + beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); + beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); ++ beeCanInstantlyStartDrowning = getBoolean("mobs.bee.can-instantly-start-drowning", beeCanInstantlyStartDrowning); + beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); + beeDiesAfterSting = getBoolean("mobs.bee.dies-after-sting", beeDiesAfterSting); + } @@ -21882,7 +21898,7 @@ index 0000000000000000000000000000000000000000..9660716f4162a4441c6e1b0baddef8f5 +} diff --git a/org/purpurmc/purpur/entity/projectile/DolphinSpit.java b/org/purpurmc/purpur/entity/projectile/DolphinSpit.java new file mode 100644 -index 0000000000000000000000000000000000000000..8ffacde0417d29bb2de12d58fe42fd0717735f9d +index 0000000000000000000000000000000000000000..e489b16983b8eea75726baf6323b41af0929bdec --- /dev/null +++ b/org/purpurmc/purpur/entity/projectile/DolphinSpit.java @@ -0,0 +1,105 @@ @@ -21945,7 +21961,7 @@ index 0000000000000000000000000000000000000000..8ffacde0417d29bb2de12d58fe42fd07 + Vec3 motDouble = mot.scale(2.0); + for (int i = 0; i < 5; i++) { + ((ServerLevel) level()).sendParticlesSource(null, ParticleTypes.BUBBLE, -+ false, true, ++ true, false, + getX() + random.nextFloat() / 2 - 0.25F, + getY() + random.nextFloat() / 2 - 0.25F, + getZ() + random.nextFloat() / 2 - 0.25F, @@ -21993,7 +22009,7 @@ index 0000000000000000000000000000000000000000..8ffacde0417d29bb2de12d58fe42fd07 +} diff --git a/org/purpurmc/purpur/entity/projectile/PhantomFlames.java b/org/purpurmc/purpur/entity/projectile/PhantomFlames.java new file mode 100644 -index 0000000000000000000000000000000000000000..580d8dc556da951e2e1ab4e199317e2f5b166f2f +index 0000000000000000000000000000000000000000..bac5eee2d101fa286285747170ba3365c47c87c3 --- /dev/null +++ b/org/purpurmc/purpur/entity/projectile/PhantomFlames.java @@ -0,0 +1,127 @@ @@ -22058,7 +22074,7 @@ index 0000000000000000000000000000000000000000..580d8dc556da951e2e1ab4e199317e2f + Vec3 motDouble = mot.scale(2.0); + for (int i = 0; i < 5; i++) { + ((ServerLevel) level()).sendParticlesSource(null, ParticleTypes.FLAME, -+ false, true, ++ true, false, + getX() + random.nextFloat() / 2 - 0.25F, + getY() + random.nextFloat() / 2 - 0.25F, + getZ() + random.nextFloat() / 2 - 0.25F, diff --git a/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch index 5bb79d6d..54f4a8a4 100644 --- a/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch @@ -78,7 +78,7 @@ index 72cdd8f72fb3f552d9729f21de438405abe3acdb..90a8494840faa0e7f605c904c657a953 // Gale end - MultiPaper - skip unnecessary mob spawning computations int _int = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 29b81470ce8cbc8c8c5644b8c07738bf9d90460c..e3fa94538ec5756e39ca55ba2216971d499215cc 100644 +index ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1..64841780b8fb037e730d947b21b1469e3f86229f 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1232,7 +1232,7 @@ public class ServerGamePacketListenerImpl @@ -91,10 +91,10 @@ index 29b81470ce8cbc8c8c5644b8c07738bf9d90460c..e3fa94538ec5756e39ca55ba2216971d this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 1ee098b10548de763f7df0c494876fced442cf92..df0b6d21a7d629ba759e322d3e886fbc0cc53173 100644 +index 3be4556a14b61fad5690a4e664e9e27ab94bb41f..761b3806ddec0675935dc2e24d36e4b221c53c9b 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -536,23 +536,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -532,23 +532,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Purpur end - Add canSaveToDisk to Entity diff --git a/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch b/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch index 4b06e65c..f9c0b103 100644 --- a/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch +++ b/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch @@ -558,10 +558,10 @@ index 1f96fd5085bacb4c584576c7cb9f51e7898e9b03..8819717c5307a90abc493cf801b4e795 + // Leaf end - Kaiiju - await on async path processing } diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 57c50ce5724b073b1aedf4df3129285143097303..91635b344ac02b66e51aa5620acf9ca481004853 100644 +index d5727999eb67ff30dbf47865d59452483338e170..6fffa2e98e54ab015762417af8507d11c164e765 100644 --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -934,7 +934,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -936,7 +936,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } else { Bee.this.pathfindRandomlyTowards(Bee.this.hivePos); } @@ -570,7 +570,7 @@ index 57c50ce5724b073b1aedf4df3129285143097303..91635b344ac02b66e51aa5620acf9ca4 boolean flag = this.pathfindDirectlyTowards(Bee.this.hivePos); if (!flag) { this.dropAndBlacklistHive(); -@@ -988,7 +988,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -990,7 +990,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return true; } else { Path path = Bee.this.navigation.getPath(); diff --git a/leaf-server/minecraft-patches/features/0030-Configurable-movement-speed-of-more-entities.patch b/leaf-server/minecraft-patches/features/0030-Configurable-movement-speed-of-more-entities.patch index d823cb47..c394898e 100644 --- a/leaf-server/minecraft-patches/features/0030-Configurable-movement-speed-of-more-entities.patch +++ b/leaf-server/minecraft-patches/features/0030-Configurable-movement-speed-of-more-entities.patch @@ -83,10 +83,10 @@ index fddbbffafea275dad187b7908386cf4c05c86743..89a67db9bbdb31661fa4f71f1270198b } diff --git a/org/purpurmc/purpur/PurpurWorldConfig.java b/org/purpurmc/purpur/PurpurWorldConfig.java -index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb713163fa 100644 +index 40ee86981c24b79b209b5a0fb0705ff62fb65863..53f7d89a68e3e05c2303d4ef5185b2ad41135380 100644 --- a/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1563,6 +1563,7 @@ public class PurpurWorldConfig { +@@ -1568,6 +1568,7 @@ public class PurpurWorldConfig { public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; public boolean drownedAlwaysDropExp = false; @@ -94,7 +94,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1581,6 +1582,7 @@ public class PurpurWorldConfig { +@@ -1586,6 +1587,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); @@ -102,7 +102,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb } public boolean elderGuardianRidable = false; -@@ -1955,6 +1957,7 @@ public class PurpurWorldConfig { +@@ -1960,6 +1962,7 @@ public class PurpurWorldConfig { public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; public boolean huskAlwaysDropExp = false; @@ -110,7 +110,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1972,6 +1975,7 @@ public class PurpurWorldConfig { +@@ -1977,6 +1980,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); @@ -118,7 +118,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb } public boolean illusionerRidable = false; -@@ -3269,6 +3273,7 @@ public class PurpurWorldConfig { +@@ -3274,6 +3278,7 @@ public class PurpurWorldConfig { public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; public double zombieHeadVisibilityPercent = 0.5D; @@ -126,7 +126,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -3289,6 +3294,7 @@ public class PurpurWorldConfig { +@@ -3294,6 +3299,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); @@ -134,7 +134,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb } public boolean zombieHorseRidable = false; -@@ -3338,6 +3344,7 @@ public class PurpurWorldConfig { +@@ -3343,6 +3349,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; public boolean zombieVillagerAlwaysDropExp = false; @@ -142,7 +142,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -3358,6 +3365,7 @@ public class PurpurWorldConfig { +@@ -3363,6 +3370,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); @@ -150,7 +150,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb } public boolean zombifiedPiglinRidable = false; -@@ -3372,6 +3380,7 @@ public class PurpurWorldConfig { +@@ -3377,6 +3385,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; public boolean zombifiedPiglinAlwaysDropExp = false; @@ -158,7 +158,7 @@ index e58be75264a319bc09988ce4f26cce95b41f9b50..14a2a57126279bb3f12d77773fe036eb private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -3390,6 +3399,7 @@ public class PurpurWorldConfig { +@@ -3395,6 +3404,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/leaf-server/minecraft-patches/features/0035-Plazma-Add-missing-purpur-configuration-options.patch b/leaf-server/minecraft-patches/features/0035-Plazma-Add-missing-purpur-configuration-options.patch index 5e9c9097..8c4b5938 100644 --- a/leaf-server/minecraft-patches/features/0035-Plazma-Add-missing-purpur-configuration-options.patch +++ b/leaf-server/minecraft-patches/features/0035-Plazma-Add-missing-purpur-configuration-options.patch @@ -244,7 +244,7 @@ index b230955ae880d84fde40b4feffa5caf3c4449eb7..c8bdfaaf41e2309e4865806b42677064 @Override diff --git a/org/purpurmc/purpur/PurpurConfig.java b/org/purpurmc/purpur/PurpurConfig.java -index aca85686fb0b9ec78d4e83574bbfe6313785f40f..c168e9d2c395044a662efd2d9ccde8b20c070b22 100644 +index e0db3230c3912588ed527e131751bef082665294..e58c5c338000218a0ed200987870c8c79193d5b1 100644 --- a/org/purpurmc/purpur/PurpurConfig.java +++ b/org/purpurmc/purpur/PurpurConfig.java @@ -322,6 +322,7 @@ public class PurpurConfig { @@ -264,7 +264,7 @@ index aca85686fb0b9ec78d4e83574bbfe6313785f40f..c168e9d2c395044a662efd2d9ccde8b2 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/org/purpurmc/purpur/PurpurWorldConfig.java b/org/purpurmc/purpur/PurpurWorldConfig.java -index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96292b72fc 100644 +index 53f7d89a68e3e05c2303d4ef5185b2ad41135380..06fb46236023d7d73de40583c20e96656f3ace19 100644 --- a/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1137,12 +1137,20 @@ public class PurpurWorldConfig { @@ -288,7 +288,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 } public boolean armadilloRidable = false; -@@ -1292,6 +1300,10 @@ public class PurpurWorldConfig { +@@ -1297,6 +1305,10 @@ public class PurpurWorldConfig { public double camelMovementSpeedMin = 0.09D; public double camelMovementSpeedMax = 0.09D; public int camelBreedingTicks = 6000; @@ -299,7 +299,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 private void camelSettings() { camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin); -@@ -1301,6 +1313,10 @@ public class PurpurWorldConfig { +@@ -1306,6 +1318,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); @@ -310,7 +310,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 } public boolean catRidable = false; -@@ -1447,12 +1463,20 @@ public class PurpurWorldConfig { +@@ -1452,12 +1468,20 @@ public class PurpurWorldConfig { public boolean creakingControllable = true; public double creakingMaxHealth = 1.0D; public double creakingScale = 1.0D; @@ -331,7 +331,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 } public boolean creeperRidable = false; -@@ -1759,12 +1783,22 @@ public class PurpurWorldConfig { +@@ -1764,12 +1788,22 @@ public class PurpurWorldConfig { public boolean frogControllable = true; public float frogRidableJumpHeight = 0.65F; public int frogBreedingTicks = 6000; @@ -354,7 +354,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 } public boolean ghastRidable = false; -@@ -2773,6 +2807,10 @@ public class PurpurWorldConfig { +@@ -2778,6 +2812,10 @@ public class PurpurWorldConfig { public double snifferMaxHealth = 14.0D; public double snifferScale = 1.0D; public int snifferBreedingTicks = 6000; @@ -365,7 +365,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 private void snifferSettings() { snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable); snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater); -@@ -2780,6 +2818,10 @@ public class PurpurWorldConfig { +@@ -2785,6 +2823,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); @@ -376,7 +376,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 } public boolean squidRidable = false; -@@ -2881,10 +2923,20 @@ public class PurpurWorldConfig { +@@ -2886,10 +2928,20 @@ public class PurpurWorldConfig { public boolean tadpoleRidable = false; public boolean tadpoleRidableInWater = true; public boolean tadpoleControllable = true; @@ -397,7 +397,7 @@ index 14a2a57126279bb3f12d77773fe036eb713163fa..306998eeba4bbb0311697b42ae5e1b96 } public boolean traderLlamaRidable = false; -@@ -3113,10 +3165,20 @@ public class PurpurWorldConfig { +@@ -3118,10 +3170,20 @@ public class PurpurWorldConfig { public boolean wardenRidable = false; public boolean wardenRidableInWater = true; public boolean wardenControllable = true; 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 f318c13b..36be7e6b 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 02e13e84da7424598b329cf34b7203658f1ff0af..b79e27f03f67ecc01547163c053cdb96c16ce1bb 100644 +index 8bb2abb01f1af34d6829cbbf759a425d871f3e3f..40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1987,7 +1987,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1983,7 +1983,7 @@ 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 5cbac372..faa58202 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 b79e27f03f67ecc01547163c053cdb96c16ce1bb..0daece03b8b14dfa9198952064545b50a0de7d1c 100644 +index 40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6..3beb2b05265cf274f52170018cc22243b06c05e9 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -2197,31 +2197,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2193,31 +2193,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return new Vec3(this.xOld, this.yOld, this.zOld); } @@ -43,7 +43,7 @@ index b79e27f03f67ecc01547163c053cdb96c16ce1bb..0daece03b8b14dfa9198952064545b50 public void playerTouch(Player player) { } -@@ -5233,4 +5208,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5229,4 +5204,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // Purpur end - Ridables diff --git a/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch b/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch index 05f75ae5..57ac61f0 100644 --- a/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch +++ b/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Paper Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 5583a3f19b75a9d07367e2ca80adbbafa9af6593 +Commit: 4f481858a32b9636fcd19f539f13fb03e1bbf443 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "Rebrand.patch" @@ -707,10 +707,10 @@ index 5ad91693178b5645c98804ab04a56e85a28eb426..60389075b86a7c030e59fbc4c493a4f3 + // Purpur end - Lagging threshold } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 20f709a4e8d7756375dc7742a87bdac57f1b4d1f..fca96230406e49afef4c55eb4e1b7fd4478ccbab 100644 +index 284b58ece65d9cf6411a79abb748f1dfa52edc92..ba5797e9e518d7a1054bad0c7a1fb10b9eaf32bd 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2372,6 +2372,50 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2373,6 +2373,50 @@ public class CraftWorld extends CraftRegionAccessor implements World { return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } @@ -931,7 +931,7 @@ index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..3604d92c122b5c8be823098ce7b91e57 // Paper start @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 6d81a19741868983c54aff6c2c4c0e2bf690ba0d..dca2761fe4765c6e95b5db0d0cb5c818eb8697b4 100644 +index 659f0f9c7e45e5174f4736c4878a78d330b1d4ee..0d46585c0128cea7265870de5fe260681c65d7c3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -90,6 +90,25 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { diff --git a/leaf-server/paper-patches/features/0024-Asynchronous-locator.patch b/leaf-server/paper-patches/features/0024-Asynchronous-locator.patch index b33c7952..cd3b7ec8 100644 --- a/leaf-server/paper-patches/features/0024-Asynchronous-locator.patch +++ b/leaf-server/paper-patches/features/0024-Asynchronous-locator.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/thebrightspark/AsyncLocator diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java -index 157e5edb507d6d2a922833c70a1c27abc93c9c34..0e2f43598575d3ed80ebfcd35144d56e6affe1a7 100644 +index 69cdd304d255d52c9b7dc9b6a33ffdb630b79abe..a4aa2615823d77920ff55b8aa0bcc27a54b8c3e1 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java -@@ -101,6 +101,12 @@ public class TickThread extends Thread { +@@ -105,6 +105,12 @@ public class TickThread extends Thread { this(null, run, name); }