diff --git a/gradle.properties b/gradle.properties index 2538f8144..62492b2ac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ group = org.purpurmc.purpur -version = 1.21.11-pre3-R0.1-SNAPSHOT +version = 1.21.11-rc1-R0.1-SNAPSHOT -mcVersion = 1.21.11-pre3 +mcVersion = 1.21.11-rc1 apiVersion=1.21.11 -paperCommit = fb7bd2f18c2fdd4484ce2d84ae5bdd450b3a297a +paperCommit = 51c1b16b5b67396b32692d779d019183875f004c org.gradle.configuration-cache = true org.gradle.caching = true diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch index 24bf01726..02f7f5abb 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/Material.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -3707,4 +_,40 @@ +@@ -3708,4 +_,40 @@ return this.asItemType().getDefaultDataTypes(); } // Paper end - data component API diff --git a/purpur-server/minecraft-patches/features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch index ce5415c48..7f7c88fd3 100644 --- a/purpur-server/minecraft-patches/features/0001-Ridables.patch +++ b/purpur-server/minecraft-patches/features/0001-Ridables.patch @@ -18,19 +18,19 @@ index 05eb0c3273ffa1b5a1ebd8f8ae42c11830d755c7..49d3154afe2ca5789e63bdf972c79196 public boolean isClientAuthoritative() { return false; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 2b18da0e98ff30a81e88d0e99baa67acb339e4e5..c494e06e040f9335806279abd336564fe0f5e5f3 100644 +index fb65832d3d820aa48bb8fc0efecfd659bb8e2755..cf817b5bab8e936bd40477d40359c35f2bf1d5fc 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1831,6 +1831,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent +@@ -1832,6 +1832,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent serverLevel.updateLagCompensationTick(); // Paper - lag compensation + net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = serverLevel.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers + serverLevel.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - Ridables profilerFiller.push(() -> serverLevel + " " + serverLevel.dimension().identifier()); /* Drop global time updates if (this.tickCount % 20 == 0) { diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 008053d564869f208823f4d107823fed5fbaab66..6f86d2d29afa79ebe5c29d1d062089f1769b7767 100644 +index 394e5baaec5ae7730833d07cc4140ac498d7e4b1..f8fece07c5e1a721cfc826b48b0b4944b4859be9 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -230,6 +230,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -42,10 +42,10 @@ index 008053d564869f208823f4d107823fed5fbaab66..6f86d2d29afa79ebe5c29d1d062089f1 @Override public @Nullable LevelChunk getChunkIfLoaded(int x, int z) { diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index fba5c4e2ea656df6f487644f1c76e4245b0ba4ca..8d32717e8cc3c6880cb9ff10904114269dff7d67 100644 +index 9ec896ad8e95d7822095c42054e76e7a5db91481..2eba1b0ac8b4a0bb34d04b81c4c279db6e716b3b 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -767,6 +767,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -772,6 +772,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this, true); @@ -75,10 +75,10 @@ index 4b4a4698673725b058072034fb525eeb941c0489..b89c73e74216333f5ac70ee9c80bdbea if (itemType == Items.WATER_BUCKET && target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && resendData) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 4100869ad757a784a1096c1997707b1b8715ce0b..56a066c5452ee9fc16d176df46ecfbd9584a3783 100644 +index c133b6796c0251500801b2e41df9ae4b38d111a1..468df93a0302f200c2bd5e9bc65feccdd8649bf3 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3369,6 +3369,13 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -3371,6 +3371,13 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name this.passengers = ImmutableList.copyOf(list); } @@ -92,7 +92,7 @@ index 4100869ad757a784a1096c1997707b1b8715ce0b..56a066c5452ee9fc16d176df46ecfbd9 } } -@@ -3409,6 +3416,14 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -3411,6 +3418,14 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name return false; } // CraftBukkit end @@ -107,7 +107,7 @@ index 4100869ad757a784a1096c1997707b1b8715ce0b..56a066c5452ee9fc16d176df46ecfbd9 if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -5460,4 +5475,44 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -5462,4 +5477,44 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -153,7 +153,7 @@ index 4100869ad757a784a1096c1997707b1b8715ce0b..56a066c5452ee9fc16d176df46ecfbd9 + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index cc5d69971d56b3f78284a03b885e3539b228a10a..63e847182bb030322e1e4b17b5f886ef58d975bb 100644 +index 64e15642d556700b1ff4c6ab3a4acea48b3d8edd..be73b3c4c071e4094e55b30bc10278fdcee21ba7 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -244,9 +244,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -2025,7 +2025,7 @@ index c474b69dd4e2c7893d51627403425e9fd38042ef..d8a3b7d329757bb84ee4d53671c89f21 } diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index ba31826f81d91d0c2d1a377d4e855a0be4206d7b..805efd86b09b2d1dbb5f2d51f3f5bfe67a1c0387 100644 +index 5a4a96895c1d2f7538bf644dd133645bc831b582..0a75d3790a4bf4812e4f3b27ec50d67fdccf812d 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java @@ -126,6 +126,13 @@ public class HappyGhast extends Animal { @@ -2222,10 +2222,10 @@ index 0337ddcd664cd0329d98286214d1aa4daf83e1ea..6a4d170cd1e4dde2af30895f9fbac9dd this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0, 5.0F, 1.0F)); diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index 481d365f6f1f60ca0870a8de2ffc25d4fac11059..afae5546eae084bafaa164705d4e6f09af3bc43a 100644 +index 943bd459554e9f3374978e595ba369a479d44941..2a3fc6ad3a12a3cc9815b66b659e3c9ce2afa7a8 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -67,9 +67,27 @@ public class Pig extends Animal implements ItemSteerable { +@@ -63,9 +63,27 @@ public class Pig extends Animal implements ItemSteerable { super(type, level); } @@ -5020,10 +5020,10 @@ index c86fb77485a038b600877432c828dc7940cf26f4..b2d322bee9343079c0c21cc7b47493df } diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index ffcf14288d40b9bbff7f1d1d4c2e19a88e248365..65fa64cc24b6968c6f09a78d5f00750587bf9ef0 100644 +index c73419613c67685dd78d7aa0a959267b4b9c1ae8..d91a1aec302a93326a357311f1743fa87ec92fa3 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -72,6 +72,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -85,6 +85,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { super(type, level); } diff --git a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch index 9e41ad901..bae5136c2 100644 --- a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch +++ b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 63e847182bb030322e1e4b17b5f886ef58d975bb..a2879705bf847dfc1453206746377895beac5b4b 100644 +index be73b3c4c071e4094e55b30bc10278fdcee21ba7..983aea0bb8c581f06030adf74f0f7962f99c3c2a 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -295,6 +295,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -675,7 +675,7 @@ index d8a3b7d329757bb84ee4d53671c89f211e8581ab..ab44bc401438d589696d9f25ebaca0fc protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index 805efd86b09b2d1dbb5f2d51f3f5bfe67a1c0387..7f45de1bbabc711eaf9d9c33afac47687b75da45 100644 +index 0a75d3790a4bf4812e4f3b27ec50d67fdccf812d..cd888e070a72ff46d35a4425a0013c617b31e159 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java @@ -133,6 +133,19 @@ public class HappyGhast extends Animal { @@ -760,10 +760,10 @@ index 6a4d170cd1e4dde2af30895f9fbac9dd599d0602..7480a491533a47882eaf4b36c320adf4 public @Nullable SpawnGroupData finalizeSpawn( ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index afae5546eae084bafaa164705d4e6f09af3bc43a..55a862844907d7663323fb9c8de823aff5109c30 100644 +index 2a3fc6ad3a12a3cc9815b66b659e3c9ce2afa7a8..aeb9e57db2233bff20fa5208a679ac9bcb8d5026 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -84,6 +84,14 @@ public class Pig extends Animal implements ItemSteerable { +@@ -80,6 +80,14 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Ridables @@ -1753,10 +1753,10 @@ index b2d322bee9343079c0c21cc7b47493df9cfd861e..d873ca9873e95f3a5869cb63a93b0643 class ZombieAttackTurtleEggGoal extends RemoveBlockGoal { diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 65fa64cc24b6968c6f09a78d5f00750587bf9ef0..8c7eb8518a845efb344eba02e9fe804a5dcd5cb5 100644 +index d91a1aec302a93326a357311f1743fa87ec92fa3..0a02684ec00540b91a2a68e5787e51d15b3743a7 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -89,6 +89,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -102,6 +102,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Ridables diff --git a/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch index 088846069..e5dafad45 100644 --- a/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch +++ b/purpur-server/minecraft-patches/features/0006-Minecart-settings-and-WASD-controls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 8d32717e8cc3c6880cb9ff10904114269dff7d67..9cb83c71cb0afa8dc862d06ae9da643874ce2c95 100644 +index 2eba1b0ac8b4a0bb34d04b81c4c279db6e716b3b..5569223c99ad6563687f67f899d43189fd81776e 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1306,6 +1306,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1311,6 +1311,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } else { // Purpur start - Add boat fall damage config if (damageSource.is(net.minecraft.tags.DamageTypeTags.IS_FALL)) { diff --git a/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch index 5a61ede01..0857bb625 100644 --- a/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch +++ b/purpur-server/minecraft-patches/features/0009-Configurable-jockey-options.patch @@ -120,10 +120,10 @@ index d873ca9873e95f3a5869cb63a93b0643a9c867dc..638642628c3dc9fa25d25c589029219c } } diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 8c7eb8518a845efb344eba02e9fe804a5dcd5cb5..a80788fc6c537fb0d1f400819c7910d11aeda8d5 100644 +index 0a02684ec00540b91a2a68e5787e51d15b3743a7..62f55763d95e496da8b8fcf7d95752777e323b48 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -101,6 +101,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -114,6 +114,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable entity base attributes diff --git a/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch index 5f1c423d8..14d3af828 100644 --- a/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch +++ b/purpur-server/minecraft-patches/features/0012-Make-entity-breeding-times-configurable.patch @@ -22,10 +22,10 @@ index 35aec6c3aa2f09f13954fda67902b3c975f566e3..fff139abc9341f3ab2dac568a922235d // CraftBukkit end - call EntityBreedEvent level.broadcastEntityEvent(breedOffspring, EntityEvent.LOVE_HEARTS); diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java -index ad90b0cce0e0a3e30d882c24a7286b9892ba4214..56979ad8fd7ebb15a6fc4e2144a8bfade4ca2969 100644 +index 2e7e7c1913f5cbc20ce116c5ae3e185fc83094c0..53d04c412d36015a30ae2680f61651db6acbf2f2 100644 --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java -@@ -40,6 +40,7 @@ public abstract class Animal extends AgeableMob { +@@ -46,6 +46,7 @@ public abstract class Animal extends AgeableMob { public int inLove = 0; public @Nullable EntityReference loveCause; public @Nullable ItemStack breedItem; // CraftBukkit - Add breedItem variable @@ -33,7 +33,7 @@ index ad90b0cce0e0a3e30d882c24a7286b9892ba4214..56979ad8fd7ebb15a6fc4e2144a8bfad protected Animal(EntityType type, Level level) { super(type, level); -@@ -265,8 +266,10 @@ public abstract class Animal extends AgeableMob { +@@ -271,8 +272,10 @@ public abstract class Animal extends AgeableMob { player.awardStat(Stats.ANIMALS_BRED); CriteriaTriggers.BRED_ANIMALS.trigger(player, this, animal, baby); } // Paper - Call EntityBreedEvent @@ -402,7 +402,7 @@ index 6e4d611c959960e8d13f79704c176b41ea5c12c4..07ba57ae845024e0f2fa03a68e126ec7 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index 7f45de1bbabc711eaf9d9c33afac47687b75da45..d1b6f627860163b3e977e794720dbf36fcd83001 100644 +index cd888e070a72ff46d35a4425a0013c617b31e159..30204224ed83f6d3cfd64640b332b23cb74d379f 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java @@ -146,6 +146,13 @@ public class HappyGhast extends Animal { @@ -456,10 +456,10 @@ index 7480a491533a47882eaf4b36c320adf45ebfb190..0d62046cb33ed750ab27229fe4f0b43c public @Nullable SpawnGroupData finalizeSpawn( ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index 55a862844907d7663323fb9c8de823aff5109c30..824704bdf2412f142dd260633bc8e56f079f5ea4 100644 +index aeb9e57db2233bff20fa5208a679ac9bcb8d5026..0cb09a058c2d21b10677482792b230464ed9f951 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -92,6 +92,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -88,6 +88,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Configurable entity base attributes diff --git a/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch b/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch index 6002a8bfe..7b3c65d12 100644 --- a/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch +++ b/purpur-server/minecraft-patches/features/0017-Toggle-for-water-sensitive-mob-damage.patch @@ -459,7 +459,7 @@ index f011369a67809d54230984a22a909bfea44f47f3..0fe7f18390490ccf4e944ac3378150eb @Override diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index d1b6f627860163b3e977e794720dbf36fcd83001..bba0dc5e0fd28ce05adb2d4edb9c0c4366dd580e 100644 +index 30204224ed83f6d3cfd64640b332b23cb74d379f..828793aaa2992fd1077040309154f814b302476a 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java @@ -153,6 +153,13 @@ public class HappyGhast extends Animal { @@ -513,10 +513,10 @@ index 0d62046cb33ed750ab27229fe4f0b43c3a1dd5f4..e97782bc8232120d4e7d1feeb8ca87fd public @Nullable SpawnGroupData finalizeSpawn( ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index 824704bdf2412f142dd260633bc8e56f079f5ea4..8d3ab29cd3eff0cbe08742201836382ba75ad50e 100644 +index 0cb09a058c2d21b10677482792b230464ed9f951..020932539727739b54ed2f7899cbf11ad940f4df 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -99,6 +99,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -95,6 +95,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Make entity breeding times configurable @@ -1299,10 +1299,10 @@ index 638642628c3dc9fa25d25c589029219c23d1e602..dfdf9ee98a25ec1f7a1f41326c981551 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index a80788fc6c537fb0d1f400819c7910d11aeda8d5..8ed04b75cc0a2fa0d18eb7929be8f14dc5fb38b8 100644 +index 62f55763d95e496da8b8fcf7d95752777e323b48..3da4f757d879f8b855c5d36688f1f5dd50fc88a0 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -118,6 +118,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -131,6 +131,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Configurable jockey options diff --git a/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch index 5023c6bad..fc6ed740c 100644 --- a/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch +++ b/purpur-server/minecraft-patches/features/0020-Mobs-always-drop-experience.patch @@ -455,7 +455,7 @@ index 0fe7f18390490ccf4e944ac3378150ebcc53991d..846b1a064398b455dbb2f05521870b45 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java -index bba0dc5e0fd28ce05adb2d4edb9c0c4366dd580e..ababd0d6b83963f8a9129c1a4de801dcf966db1a 100644 +index 828793aaa2992fd1077040309154f814b302476a..8034ce67266b6baab35c72eaebf5ad67fc1a29c6 100644 --- a/net/minecraft/world/entity/animal/happyghast/HappyGhast.java +++ b/net/minecraft/world/entity/animal/happyghast/HappyGhast.java @@ -160,6 +160,13 @@ public class HappyGhast extends Animal { @@ -509,10 +509,10 @@ index e97782bc8232120d4e7d1feeb8ca87fd37a1fcf9..bbe3977939004b7d77e38b14d48c9c26 public @Nullable SpawnGroupData finalizeSpawn( ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData diff --git a/net/minecraft/world/entity/animal/pig/Pig.java b/net/minecraft/world/entity/animal/pig/Pig.java -index 8d3ab29cd3eff0cbe08742201836382ba75ad50e..5b1ff534815217ba2a235df0f33f5fbfcd34bb10 100644 +index 020932539727739b54ed2f7899cbf11ad940f4df..45142ce558ef28455f9b74ca81d51b3ecdb7a458 100644 --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -106,6 +106,13 @@ public class Pig extends Animal implements ItemSteerable { +@@ -102,6 +102,13 @@ public class Pig extends Animal implements ItemSteerable { } // Purpur end - Toggle for water sensitive mob damage @@ -1265,10 +1265,10 @@ index d32a831ba76f65c4719c2672ffaec81a861cc7e6..f14fc03577a94dc6bd6e536e819a32c2 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 8ed04b75cc0a2fa0d18eb7929be8f14dc5fb38b8..d5c6db7e598bf03ae1d61ecbf6a003372b96a1db 100644 +index 3da4f757d879f8b855c5d36688f1f5dd50fc88a0..a9a04a4c9cedf33b68c99b2aec12289e63fa156b 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -125,6 +125,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -138,6 +138,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end - Toggle for water sensitive mob damage diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch index 7a8b46efe..12a061b6a 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch @@ -88,7 +88,7 @@ continue; } ServerPlayer entityplayer = (ServerPlayer) entityhuman; -@@ -1952,7 +_,7 @@ +@@ -1953,7 +_,7 @@ @DontObfuscate public String getServerModName() { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GiveCommand.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GiveCommand.java.patch index e7a366475..8037f0654 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GiveCommand.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GiveCommand.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/commands/GiveCommand.java +++ b/net/minecraft/server/commands/GiveCommand.java -@@ -69,6 +_,7 @@ +@@ -68,6 +_,7 @@ i1 -= min; ItemStack itemStack1 = item.createItemStack(min, false); boolean flag = serverPlayer.getInventory().add(itemStack1); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch index f8784857f..e61821aca 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -428,6 +_,9 @@ +@@ -433,6 +_,9 @@ public boolean isRealPlayer; // Paper public com.destroystokyo.paper.event.entity.@Nullable PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public org.bukkit.event.player.PlayerQuitEvent.@Nullable QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event @@ -10,7 +10,7 @@ // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -501,6 +_,9 @@ +@@ -506,6 +_,9 @@ this.respawnConfig = input.read("respawn", ServerPlayer.RespawnConfig.CODEC).orElse(null); this.spawnExtraParticlesOnFall = input.getBooleanOr("spawn_extra_particles_on_fall", false); this.raidOmenPosition = input.read("raid_omen_position", BlockPos.CODEC).orElse(null); @@ -20,7 +20,7 @@ // Paper start - Expand PlayerGameModeChangeEvent this.loadGameTypes(input); } -@@ -542,6 +_,9 @@ +@@ -547,6 +_,9 @@ output.store("ShoulderEntityRight", CompoundTag.CODEC, this.getShoulderEntityRight()); } this.getBukkitEntity().setExtraData(output); // CraftBukkit @@ -30,7 +30,7 @@ } private void saveParentVehicle(ValueOutput output) { -@@ -1178,6 +_,7 @@ +@@ -1183,6 +_,7 @@ // Paper - moved up to sendClientboundPlayerCombatKillPacket() sendClientboundPlayerCombatKillPacket(event.getShowDeathMessages(), deathScreenMessage); // Paper - Expand PlayerDeathEvent Team team = this.getTeam(); @@ -38,7 +38,7 @@ if (team == null || team.getDeathMessageVisibility() == Team.Visibility.ALWAYS) { this.server.getPlayerList().broadcastSystemMessage(deathMessage, false); } else if (team.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) { -@@ -1285,6 +_,13 @@ +@@ -1290,6 +_,13 @@ if (this.isInvulnerableTo(level, damageSource)) { return false; } else { @@ -52,7 +52,7 @@ Entity entity = damageSource.getEntity(); if (!( // Paper - split the if statement. If below statement is false, hurtServer would not have been evaluated. Return false. !(entity instanceof Player player && !this.canHarmPlayer(player)) -@@ -1539,6 +_,7 @@ +@@ -1544,6 +_,7 @@ profilerFiller.pop(); profilerFiller.push("placing"); @@ -60,7 +60,7 @@ this.setServerLevel(level); this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); -@@ -1647,7 +_,7 @@ +@@ -1652,7 +_,7 @@ new AABB(vec3.x() - 8.0, vec3.y() - 5.0, vec3.z() - 8.0, vec3.x() + 8.0, vec3.y() + 5.0, vec3.z() + 8.0), monster -> monster.isPreventingPlayerRest(this.level(), this) ); @@ -69,7 +69,7 @@ return Either.left(Player.BedSleepingProblem.NOT_SAFE); } } -@@ -1687,8 +_,19 @@ +@@ -1692,8 +_,19 @@ CriteriaTriggers.SLEPT_IN_BED.trigger(this); }); if (!this.level().canSleepThroughNights()) { @@ -90,7 +90,7 @@ this.level().updateSleepingPlayerList(); return either; -@@ -1779,6 +_,7 @@ +@@ -1784,6 +_,7 @@ @Override public void openTextEdit(SignBlockEntity signEntity, boolean isFrontText) { @@ -98,7 +98,7 @@ this.connection.send(new ClientboundBlockUpdatePacket(this.level(), signEntity.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(signEntity.getBlockPos(), isFrontText)); } -@@ -2116,6 +_,26 @@ +@@ -2121,6 +_,26 @@ this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -125,7 +125,7 @@ @Override public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); -@@ -2350,6 +_,20 @@ +@@ -2355,6 +_,20 @@ ); } @@ -146,7 +146,7 @@ public void sendSystemMessage(Component message) { this.sendSystemMessage(message, false); } -@@ -2487,7 +_,67 @@ +@@ -2492,7 +_,67 @@ public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -215,7 +215,7 @@ public ServerStatsCounter getStats() { return this.stats; -@@ -3123,4 +_,65 @@ +@@ -3128,4 +_,65 @@ return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch index 0d1209682..b7c623e53 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -364,6 +_,7 @@ +@@ -365,6 +_,7 @@ } return false; } @@ -8,7 +8,7 @@ } // CraftBukkit end -@@ -481,6 +_,7 @@ +@@ -482,6 +_,7 @@ public InteractionHand interactHand; public ItemStack interactItemStack; public InteractionResult useItemOn(ServerPlayer player, Level level, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) { @@ -16,7 +16,7 @@ BlockPos blockPos = hitResult.getBlockPos(); BlockState blockState = level.getBlockState(blockPos); boolean cancelledBlock = false; -@@ -523,7 +_,7 @@ +@@ -524,7 +_,7 @@ boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty(); boolean flag1 = player.isSecondaryUseActive() && flag; ItemStack itemStack = stack.copy(); @@ -25,7 +25,7 @@ InteractionResult interactionResult = blockState.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult); if (interactionResult.consumesAction()) { CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockPos, itemStack); -@@ -569,4 +_,18 @@ +@@ -570,4 +_,18 @@ public void setLevel(ServerLevel level) { this.level = level; } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch index 1566f6877..77a30ef9a 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -68,7 +68,7 @@ this.onBelowWorld(); } } -@@ -1956,7 +_,7 @@ +@@ -1960,7 +_,7 @@ } public boolean fireImmune() { @@ -77,7 +77,7 @@ } public boolean causeFallDamage(double fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2654,6 +_,11 @@ +@@ -2658,6 +_,11 @@ output.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -89,7 +89,7 @@ } catch (Throwable var7) { CrashReport crashReport = CrashReport.forThrowable(var7, "Saving entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being saved"); -@@ -2774,6 +_,9 @@ +@@ -2778,6 +_,9 @@ } freezeLocked = input.getBooleanOr("Paper.FreezeLock", false); // Paper end @@ -99,7 +99,7 @@ } catch (Throwable var7) { CrashReport crashReport = CrashReport.forThrowable(var7, "Loading entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); -@@ -3039,6 +_,7 @@ +@@ -3041,6 +_,7 @@ if (this.isAlive() && this instanceof Leashable leashable2) { if (leashable2.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -107,7 +107,7 @@ // Paper start - EntityUnleashEvent if (!org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerUnleashEntityEvent( leashable2, player, hand, !player.hasInfiniteMaterials(), true -@@ -3469,15 +_,18 @@ +@@ -3471,15 +_,18 @@ return Vec3.directionFromRotation(this.getRotationVector()); } @@ -127,7 +127,7 @@ } } } -@@ -3683,7 +_,7 @@ +@@ -3685,7 +_,7 @@ } public int getMaxAirSupply() { @@ -136,7 +136,7 @@ } public int getAirSupply() { -@@ -4218,7 +_,7 @@ +@@ -4220,7 +_,7 @@ } public boolean canUsePortal(boolean allowPassengers) { @@ -145,7 +145,7 @@ } public boolean canTeleport(Level fromLevel, Level toLevel) { -@@ -4737,6 +_,12 @@ +@@ -4739,6 +_,12 @@ return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -158,7 +158,7 @@ // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { -@@ -5157,7 +_,7 @@ +@@ -5159,7 +_,7 @@ } public float maxUpStep() { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch index 359006756..a99629671 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch @@ -173,7 +173,7 @@ this.hurt(this.damageSources().flyIntoWall(), f); } } -@@ -4671,6 +_,12 @@ +@@ -4666,6 +_,12 @@ ? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND) : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch index 200e9463c..c6916a32a 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java -@@ -140,7 +_,7 @@ +@@ -146,7 +_,7 @@ ItemStack itemInHand = player.getItemInHand(hand); if (this.isFood(itemInHand)) { int age = this.getAge(); @@ -9,7 +9,7 @@ final ItemStack breedCopy = itemInHand.copy(); // Paper - Fix EntityBreedEvent copying this.usePlayerItem(player, hand, itemInHand); this.setInLove(serverPlayer, breedCopy); // Paper - Fix EntityBreedEvent copying -@@ -221,10 +_,20 @@ +@@ -227,10 +_,20 @@ public void spawnChildFromBreeding(ServerLevel level, Animal partner) { AgeableMob breedOffspring = this.getBreedOffspring(level, partner); if (breedOffspring != null) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/pig/Pig.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/pig/Pig.java.patch index 0f01dac09..3b45f4fdc 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/pig/Pig.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/pig/Pig.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -142,6 +_,19 @@ +@@ -138,6 +_,19 @@ @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { boolean isFood = this.isFood(player.getItemInHand(hand)); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch index 0a695a1e8..fd9bd006c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -137,10 +_,10 @@ +@@ -159,10 +_,10 @@ public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemInHand = player.getItemInHand(hand); if (itemInHand.is(Items.GOLDEN_APPLE)) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch index c68595320..34741405d 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch @@ -43,7 +43,7 @@ public int getDamageValue() { return Mth.clamp(this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } -@@ -1241,6 +_,12 @@ +@@ -1247,6 +_,12 @@ public boolean isEnchanted() { return !this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY).isEmpty(); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/crafting/Ingredient.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/crafting/Ingredient.java.patch index 5c451611e..fcee0a726 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/crafting/Ingredient.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/crafting/Ingredient.java.patch @@ -3,13 +3,13 @@ @@ -36,6 +_,7 @@ // CraftBukkit start @javax.annotation.Nullable - private java.util.List itemStacks; + private java.util.Set itemStacks; // Paper - Improve exact choice recipe ingredients + public Predicate predicate; // Purpur - Add predicate to recipe's ExactChoice ingredient public boolean isExact() { return this.itemStacks != null; -@@ -90,6 +_,11 @@ - return false; +@@ -88,6 +_,11 @@ + return this.itemStacks.contains(stack); // Paper - Improve exact choice recipe ingredients (hashing FTW!) } // CraftBukkit end + // Purpur start - Add predicate to recipe's ExactChoice ingredient diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch index da377b9dc..4994c6ae6 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -165,11 +_,55 @@ +@@ -166,11 +_,55 @@ } // Paper end - add paper world config @@ -56,7 +56,7 @@ public CraftWorld getWorld() { return this.world; } -@@ -844,6 +_,8 @@ +@@ -846,6 +_,8 @@ // Paper end - getblock optimisations - cache world height/sections this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config @@ -65,11 +65,11 @@ this.generator = generator; this.world = new CraftWorld((ServerLevel) this, generator, biomeProvider, environment); -@@ -2071,4 +_,14 @@ - return this.id; - } +@@ -2081,4 +_,14 @@ + return this.moonrise$getEntityLookup().getEntityCount(); // Paper - rewrite chunk system } -+ + // Paper end - allow patching this logic ++ + // Purpur start - Add allow water in end world option + public boolean isNether() { + return getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch index cd3f187c2..447d32bc2 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java -@@ -209,7 +_,7 @@ +@@ -264,7 +_,7 @@ mutableBlockPos.set(x, y, z); double d = x + 0.5; double d1 = z + 0.5; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch index c61800e4d..a59bbfece 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/net/minecraft/world/level/block/entity/BlockEntity.java -@@ -104,6 +_,10 @@ +@@ -105,6 +_,10 @@ input.read("PublicBukkitValues", CompoundTag.CODEC) .ifPresent(this.persistentDataContainer::putAll); // Paper end - read persistent data container @@ -11,7 +11,7 @@ } public final void loadWithComponents(ValueInput input) { -@@ -116,6 +_,11 @@ +@@ -117,6 +_,11 @@ } protected void saveAdditional(ValueOutput output) { @@ -23,7 +23,7 @@ } public final CompoundTag saveWithFullMetadata(HolderLookup.Provider registries) { -@@ -400,4 +_,16 @@ +@@ -402,4 +_,16 @@ return this.blockEntity.getNameForReporting() + "@" + this.blockEntity.getBlockPos(); } } diff --git a/purpur-server/paper-patches/features/0002-Ridables.patch b/purpur-server/paper-patches/features/0002-Ridables.patch index a4a5ff225..79c94bb84 100644 --- a/purpur-server/paper-patches/features/0002-Ridables.patch +++ b/purpur-server/paper-patches/features/0002-Ridables.patch @@ -36,7 +36,7 @@ index 2f940ec42f4d657e40f4da1d974f46c87837a48c..da588e4622aac635ecc2205ea09ceb97 + // Purpur end - Ridables } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index b950465debc2ec2551dd862302bf196f9339a412..2fbd7aa65b3808253297f0982692c05bfe53b44c 100644 +index 0cc84ce2074734a910599cdc66d7ddad3b081a76..690181c032667326c2e9c7edf678b2cdcd319c64 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -653,6 +653,15 @@ public class CraftEventFactory { @@ -55,7 +55,7 @@ index b950465debc2ec2551dd862302bf196f9339a412..2fbd7aa65b3808253297f0982692c05b return event; } -@@ -1175,6 +1184,7 @@ public class CraftEventFactory { +@@ -1174,6 +1183,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch index 7fc08de58..d13886470 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -1937,6 +_,52 @@ +@@ -1931,6 +_,52 @@ return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); }