diff --git a/gradle.properties b/gradle.properties index 76d317e4..bc191f44 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = cn.dreeam.leaf mcVersion = 1.21.3 version = 1.21.3-R0.1-SNAPSHOT -galeCommit = 3ec901d62b70f97c091a7557d17d05272270f367 +galeCommit = f2c8aafc2707715a1b68c95d6f179509ab1640ba org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch b/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch index 952d0ebf..5710f4d4 100644 --- a/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -69,7 +69,7 @@ index c8c2394558952d7ca57d29874485251b8f2b3400..24eaa9a2e6f0cf198a307058e655d5eb @Nullable private Component description; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index ba1fc908290db310bec38c8eb1a3e464dd105bf6..fdeb3e58de44bba282cc5aa37f744a9e8c27ed46 100644 +index 3b10055c589575078bed8c79b3a0967d3f237957..97e63541e76d0dfeb18d69c08114e9652ab30c96 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -237,10 +237,10 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -258,10 +258,10 @@ index 9d9d58ab055b5bccedd6ebc9f6853ca8206cde65..64f3204b4b6ac0c57d0eb833a959f666 super.customServerAiStep(world); if ((this.tickCount + this.getId()) % 120 == 0) { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index de542de264d2a4ffa84699c34d3c576578c3d2a5..99f1c604a2e67043cbc53092a50d84b745640069 100644 +index 08c780e9e1e167b84f70dce691bb564c8420b286..bb5a924c203be427e3faf84917b86622fdec5f25 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -140,6 +140,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return holder.is(PoiTypes.MEETING); }); @@ -270,7 +270,7 @@ index de542de264d2a4ffa84699c34d3c576578c3d2a5..99f1c604a2e67043cbc53092a50d84b7 public Villager(EntityType entityType, Level world) { this(entityType, world, VillagerType.PLAINS); } -@@ -245,6 +247,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -243,6 +245,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Spigot End @@ -278,7 +278,7 @@ index de542de264d2a4ffa84699c34d3c576578c3d2a5..99f1c604a2e67043cbc53092a50d84b7 @Override protected void customServerAiStep(ServerLevel world) { // Paper start - EAR 2 -@@ -252,7 +255,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -250,7 +253,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } protected void customServerAiStep(ServerLevel world, final boolean inactive) { // Paper end - EAR 2 diff --git a/patches/server/0010-Purpur-Server-Changes.patch b/patches/server/0010-Purpur-Server-Changes.patch index f971ae60..80e4d4a8 100644 --- a/patches/server/0010-Purpur-Server-Changes.patch +++ b/patches/server/0010-Purpur-Server-Changes.patch @@ -2890,7 +2890,7 @@ index 167d164d07285bfff6eb8076d7abe17ca9543df9..260e9b0398ddaacacfe5de352ac686ef return slot != EquipmentSlot.HEAD && slot != EquipmentSlot.MAINHAND && slot != EquipmentSlot.OFFHAND ? SlotAccess.forEquipmentSlot(entity, slot, (itemstack) -> { return itemstack.isEmpty() || entity.getEquipmentSlotForItem(itemstack) == slot; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 45c6001811a45f989464c7d5bb27f1362f6a84de..dfae42ed76d11438ac79d083c82914c60f0e606e 100644 +index 92e38600c64fa8311a191f76aa9c7654ce10c5b4..a2ab53e70328b4ac0d019ebbd3d3cffeeb29d76b 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -146,6 +146,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -3005,16 +3005,15 @@ index 45c6001811a45f989464c7d5bb27f1362f6a84de..dfae42ed76d11438ac79d083c82914c6 return flag; } -@@ -1722,28 +1752,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1722,27 +1752,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab // Gale end - JettPack - optimize sun burn tick - cache eye blockpos public boolean isSunBurnTick() { - if (this.level().isDay() && !this.level().isClientSide) { - // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos -- int positionHashCode = this.position.hashCode(); -- if (this.cached_position_hashcode != positionHashCode) { +- if (this.cached_position != this.position) { - this.cached_eye_blockpos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -- this.cached_position_hashcode = positionHashCode; +- this.cached_position = this.position; - } - - float f = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness @@ -3036,7 +3035,7 @@ index 45c6001811a45f989464c7d5bb27f1362f6a84de..dfae42ed76d11438ac79d083c82914c6 } @Override -@@ -1805,4 +1815,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1804,4 +1815,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab public float[] getArmorDropChances() { return this.armorDropChances; } @@ -3290,11 +3289,11 @@ index 18dad0825616c4167a0a7555689ee64910a87e09..6945992491027d43eca4f1ca697ad45c && this.lookTime > 0 && entity.getBrain().getMemory(MemoryModuleType.INTERACTION_TARGET).isPresent(); diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -index 90ae43979e05839d676ab51feb489955ecbee50e..1acf55dd527ac06a46f7e29a720ec53565ddcb9d 100644 +index 8508ac7de8cda3127b73e11ff4aee62502e65ead..b1544e028d5a9b84b944e1fb5a12bb163067fb54 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -@@ -62,6 +62,12 @@ public class TradeWithVillager extends Behavior { - throwHalfStack(entity, WHEAT_SINGLETON_ARRAY, villager); // Gale - optimize villager data storage +@@ -59,6 +59,12 @@ public class TradeWithVillager extends Behavior { + throwHalfStack(entity, ImmutableSet.of(Items.WHEAT), villager); } + // Purpur start @@ -3303,9 +3302,9 @@ index 90ae43979e05839d676ab51feb489955ecbee50e..1acf55dd527ac06a46f7e29a720ec535 + } + // Purpur end + - // Gale start - optimize villager data storage - if (this.trades != null && entity.getInventory().hasAnyOf(this.trades)) { + if (!this.trades.isEmpty() && entity.getInventory().hasAnyOf(this.trades)) { throwHalfStack(entity, this.trades, villager); + } diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java index bb65d46967cb04f611b3c9c97d5732cfb21ede9b..7f4156e4690bbd57f9e9141f008851062cae733d 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java @@ -3516,7 +3515,7 @@ index 92731b6b593289e9f583c9b705b219e81fcd8e73..9104d7010bda6f9f73b478c11490ef9c // Paper end - optimise POI access if (path != null && path.canReach()) { diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index 8bed5992f639f805ccdec56a90101004570dc265..675126d9ab94b6c69d0436a42b9594a567aca6e4 100644 +index 1595568f3140a62b0f2236644ac2da11db12af05..d548d1b2686667d809f363cd0ae4444bc3918bf2 100644 --- a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java @@ -29,6 +29,13 @@ public class SecondaryPoiSensor extends Sensor { @@ -3532,16 +3531,16 @@ index 8bed5992f639f805ccdec56a90101004570dc265..675126d9ab94b6c69d0436a42b9594a5 + // Purpur end ResourceKey resourceKey = world.dimension(); BlockPos blockPos = entity.blockPosition(); - @org.jetbrains.annotations.Nullable java.util.ArrayList list = null; // Gale - optimize villager data storage -@@ -50,7 +57,7 @@ public class SecondaryPoiSensor extends Sensor { + List list = Lists.newArrayList(); +@@ -45,7 +52,7 @@ public class SecondaryPoiSensor extends Sensor { } } - Brain brain = entity.getBrain(); + //Brain brain = entity.getBrain(); // Purpur - moved up - // Gale start - optimize villager data storage - if (list != null) { - list.trimToSize(); + if (!list.isEmpty()) { + brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); + } else { diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java index b51a04d3e006bc770006cff790791bc0f6bee77d..886ca1c8a22714bc299ad08659e5279281669bb3 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -12094,10 +12093,10 @@ index b0236c7bf9441aa84d3795ffed05dd6099f29636..796dcc0dcf9022b455b8847e045266b8 } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810e6569d85 100644 +index bb5a924c203be427e3faf84917b86622fdec5f25..fd373d98f836c057c30c4fbd5d7618cc4e757b78 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -141,6 +141,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -139,6 +139,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler }, MemoryModuleType.MEETING_POINT, (entityvillager, holder) -> { return holder.is(PoiTypes.MEETING); }); @@ -12106,7 +12105,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 public long nextGolemPanic = -1; // Pufferfish -@@ -158,6 +160,93 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -156,6 +158,93 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); } @@ -12200,7 +12199,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -192,7 +281,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -190,7 +279,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F)); } else { brain.setSchedule(Schedule.VILLAGER_DEFAULT); @@ -12209,7 +12208,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -219,7 +308,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -217,7 +306,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public static AttributeSupplier.Builder createAttributes() { @@ -12218,7 +12217,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 } public boolean assignProfessionWhenSpawned() { -@@ -253,10 +342,18 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -251,10 +340,18 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper start - EAR 2 this.customServerAiStep(world, false); } @@ -12239,7 +12238,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 this.getBrain().tick(world, this); // Paper } // Pufferfish end -@@ -315,7 +412,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -313,7 +410,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { if (this.isBaby()) { this.setUnhappy(); @@ -12248,7 +12247,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 } else { if (!this.level().isClientSide) { boolean flag = this.getOffers().isEmpty(); -@@ -329,9 +426,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -327,9 +424,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (flag) { @@ -12261,7 +12260,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 this.startTrading(player); } -@@ -496,7 +595,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -494,7 +593,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler while (iterator.hasNext()) { MerchantOffer merchantrecipe = (MerchantOffer) iterator.next(); @@ -12270,7 +12269,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 } } -@@ -729,7 +828,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -727,7 +826,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -12279,7 +12278,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 } private boolean hungry() { -@@ -931,6 +1030,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -906,6 +1005,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean hasFarmSeeds() { return this.getInventory().hasAnyMatching((itemstack) -> { @@ -12291,7 +12290,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 return itemstack.is(ItemTags.VILLAGER_PLANTABLE_SEEDS); }); } -@@ -988,6 +1092,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -963,6 +1067,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { @@ -12299,7 +12298,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 if (this.wantsToSpawnGolem(time)) { AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D); List list = world.getEntitiesOfClass(Villager.class, axisalignedbb); -@@ -1052,6 +1157,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1027,6 +1132,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -12313,7 +12312,7 @@ index 99f1c604a2e67043cbc53092a50d84b745640069..4767cd3a59155f643d95211c71c19810 this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level().getGameTime()); // CraftBukkit - decompile error this.brain.eraseMemory(MemoryModuleType.WALK_TARGET); diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -index 35c4638f5c46310c75b27548223fcaf5f8702113..4f3ce7ff387835b8a14eb36c90700fdb837a933c 100644 +index 8734ab1bd8299bbf43906d81a349c2a13e0981a7..3ca83269311cbc18c9ef3ce62cff6a2d4dc0a683 100644 --- a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java +++ b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java @@ -31,7 +31,7 @@ public record VillagerProfession( diff --git a/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch b/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch index c3596bc7..3dd742e2 100644 --- a/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch +++ b/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch @@ -131,16 +131,16 @@ index eb8ea4df3996a22d46a6fdc1df2fa1f26aa95aec..7434eac75587ed82e60a25145f42ec3e 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/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 68f94543395c143234957cd5e33600a0c4b1c87d..3665fa73fb0bd788335a8bbbdaa8f5aba0b45d8b 100644 +index 68f94543395c143234957cd5e33600a0c4b1c87d..ee64667e5c33afd68d4458bffd858c66db4c1421 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -579,13 +579,29 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -579,13 +579,28 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Purpur end // Purpur start - copied from Mob - API for any mob to burn daylight + // Gale start - JettPack - optimize sun burn tick - cache eye blockpos - copied from Mob#isSunBurnTick + private BlockPos cached_eye_blockpos; -+ private int cached_position_hashcode; ++ private net.minecraft.world.phys.Vec3 cached_position; + // Gale end - JettPack - optimize sun burn tick - cache eye blockpos - copied from Mob#isSunBurnTick + public boolean isSunBurnTick() { @@ -148,10 +148,9 @@ index 68f94543395c143234957cd5e33600a0c4b1c87d..3665fa73fb0bd788335a8bbbdaa8f5ab - float f = this.getLightLevelDependentMagicValue(); - BlockPos blockposition = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); + // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - copied from Mob#isSunBurnTick -+ int positionHashCode = this.position.hashCode(); -+ if (this.cached_position_hashcode != positionHashCode) { ++ if (this.cached_position != this.position) { + this.cached_eye_blockpos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -+ this.cached_position_hashcode = positionHashCode; ++ this.cached_position = this.position; + } + + float f = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness @@ -197,7 +196,7 @@ index 260e9b0398ddaacacfe5de352ac686ef273a6167..6f3986ba57ce794a1f78b8960a7c8de8 // Purpur start if (entity instanceof LivingEntity entityliving) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index dfae42ed76d11438ac79d083c82914c60f0e606e..6c603c83d9caeed480f5d67854e40c3fa8ff20dd 100644 +index a2ab53e70328b4ac0d019ebbd3d3cffeeb29d76b..6c603c83d9caeed480f5d67854e40c3fa8ff20dd 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1746,11 +1746,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -206,35 +205,14 @@ index dfae42ed76d11438ac79d083c82914c60f0e606e..6c603c83d9caeed480f5d67854e40c3f - // Gale start - JettPack - optimize sun burn tick - cache eye blockpos - private BlockPos cached_eye_blockpos; -- private int cached_position_hashcode; +- private net.minecraft.world.phys.Vec3 cached_position; - // Gale end - JettPack - optimize sun burn tick - cache eye blockpos - public boolean isSunBurnTick() { // Purpur - implemented in Entity - API for any mob to burn daylight return super.isSunBurnTick(); -diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -index b96e596fb123f5b69d2b2f5b4a65537beaab33e6..0f6ff2fb3c5df42a44e5082c2408d5262c187870 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -@@ -21,6 +21,7 @@ public class TradeWithVillager extends Behavior { - private static final Item[] WHEAT_SINGLETON_ARRAY = {Items.WHEAT}; - private @org.jetbrains.annotations.NotNull Item @org.jetbrains.annotations.Nullable [] trades = null; - // Gale end - optimize villager data storage -+ private static final Item[] NETHER_WART_SINGLETON_ARRAY = {Items.NETHER_WART}; // Leaf - sync with Gale's Optimize-villager-data-storage.patch - - public TradeWithVillager() { - super( -@@ -64,7 +65,7 @@ public class TradeWithVillager extends Behavior { - - // Purpur start - if (world.purpurConfig.villagerClericsFarmWarts && world.purpurConfig.villagerClericFarmersThrowWarts && entity.getVillagerData().getProfession() == VillagerProfession.CLERIC && entity.getInventory().countItem(Items.NETHER_WART) > Items.NETHER_WART.getDefaultMaxStackSize() / 2) { -- throwHalfStack(entity, ImmutableSet.of(Items.NETHER_WART), villager); -+ throwHalfStack(entity, NETHER_WART_SINGLETON_ARRAY, villager); // Leaf - sync with Gale's Optimize-villager-data-storage.patch - } - // Purpur end - diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index 675126d9ab94b6c69d0436a42b9594a567aca6e4..67f16bd710e0c04b4e2dac2c2cf5862853f3f4f4 100644 +index d548d1b2686667d809f363cd0ae4444bc3918bf2..c3519eb6b28d180c9a5bf673037f1c4324ba5685 100644 --- a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java @@ -22,19 +22,15 @@ public class SecondaryPoiSensor extends Sensor { @@ -244,7 +222,7 @@ index 675126d9ab94b6c69d0436a42b9594a567aca6e4..67f16bd710e0c04b4e2dac2c2cf58628 + // Purpur start - make sure clerics don't wander to soul sand when the option is off // Gale start - Lithium - skip secondary POI sensor if absent var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi(); -- if (secondaryPoi == null) { // Gale - optimize villager data storage +- if (secondaryPoi.isEmpty()) { - entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); - return; - } @@ -252,7 +230,7 @@ index 675126d9ab94b6c69d0436a42b9594a567aca6e4..67f16bd710e0c04b4e2dac2c2cf58628 - // Purpur start - make sure clerics don't wander to soul sand when the option is off Brain brain = entity.getBrain(); - if (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC) { -+ if (secondaryPoi == null || (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { ++ if (secondaryPoi.isEmpty() || (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); return; } @@ -293,19 +271,6 @@ index 07db4557ab0d7a4a0f5432257bd18195d2de7255..c334f0bdd4d5e1e5468216b13e6f5350 @Override protected void registerGoals() { -diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -index 4f3ce7ff387835b8a14eb36c90700fdb837a933c..6dd64c56581fcf42ceafaeed557ee5214f67184f 100644 ---- a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -+++ b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -@@ -31,7 +31,7 @@ public record VillagerProfession( - public static final VillagerProfession ARMORER = register("armorer", PoiTypes.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER); - public static final VillagerProfession BUTCHER = register("butcher", PoiTypes.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER); - public static final VillagerProfession CARTOGRAPHER = register("cartographer", PoiTypes.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER); -- public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, ImmutableSet.of(Items.NETHER_WART), ImmutableSet.of(Blocks.SOUL_SAND), SoundEvents.VILLAGER_WORK_CLERIC); // Purpur -+ public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, new Item[] {Items.NETHER_WART}, Blocks.SOUL_SAND, SoundEvents.VILLAGER_WORK_CLERIC); // Purpur // Leaf - sync with Gale's Optimize-villager-data-storage.patch - public static final VillagerProfession FARMER = register( - "farmer", - PoiTypes.FARMER, diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java index a7fe724fd2aec7a72781e7b3ab74ff317cec8fbf..fd22b5374fe5de11474f495ea941b8dd10e2d41f 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java diff --git a/patches/server/0084-Remove-stream-in-updateFluidOnEyes.patch b/patches/server/0084-Remove-stream-in-updateFluidOnEyes.patch index 397f79dd..48d14562 100644 --- a/patches/server/0084-Remove-stream-in-updateFluidOnEyes.patch +++ b/patches/server/0084-Remove-stream-in-updateFluidOnEyes.patch @@ -46,10 +46,10 @@ index e91c4e26c25980645941ca8fbdcc3a9d02e31063..006044af19cb70f6bd1dbda31bc13e60 public String toString() { return "Reference{" + this.key + "=" + this.value + "}"; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e7423f95187098ab99e05e16f6b76549a0b0a1b9..48fe472dc60f2133fd5ac838eaa882d2ab8baeb2 100644 +index 8ac2b3a17d1a9df6695c8034b71544704be23036..d203ab8cd02432e05d6e3b8766d5a733e570173d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2097,11 +2097,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2096,11 +2096,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess double d1 = (double) ((float) blockposition.getY() + fluid.getHeight(this.level(), blockposition)); if (d1 > d0) { diff --git a/patches/server/0103-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch b/patches/server/0103-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch index a42cde96..4deb89a8 100644 --- a/patches/server/0103-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch +++ b/patches/server/0103-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch @@ -24,10 +24,10 @@ index eb547af300d8ecea19b3e02e5ebe6139330c9d62..1e4729be4a245a811fd15ea1c02179b3 if (this.goalSelector.inactiveTick(this.activatedPriority, true) && !isThrottled) { // Pufferfish - pass activated priroity // Pufferfish - throttle inactive goal selector ticking this.goalSelector.tick(); diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 4767cd3a59155f643d95211c71c19810e6569d85..f09042fc07dd1fdbff9dc89b413858d29ffacc83 100644 +index fd373d98f836c057c30c4fbd5d7618cc4e757b78..50f080e91c0701b635b918ff15e07052052afb47 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -323,7 +323,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -321,7 +321,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (this.getUnhappyCounter() > 0) { this.setUnhappyCounter(this.getUnhappyCounter() - 1); } diff --git a/patches/server/0117-Optimize-Entity-distanceToSqr.patch b/patches/server/0117-Optimize-Entity-distanceToSqr.patch index 0e0c5c04..c5ffb49a 100644 --- a/patches/server/0117-Optimize-Entity-distanceToSqr.patch +++ b/patches/server/0117-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/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4683482bf8a6b3e0bc7837d199dcba8ace43c6e1..c01851dda58fcee26516c512882b81f6bc19ccf9 100644 +index d203ab8cd02432e05d6e3b8766d5a733e570173d..c1a7799dc4c44e5988b15f878633dafb20e257eb 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2311,33 +2311,41 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2310,33 +2310,41 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return new Vec3(this.xOld, this.yOld, this.zOld); }