From ee4e8d60b5727756c91a5a4203a622b6502de0b1 Mon Sep 17 00:00:00 2001 From: granny Date: Wed, 17 Jun 2026 18:13:32 -0700 Subject: [PATCH] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@59797420 26.2 PaperMC/Paper@389befc2 drop old ATs PaperMC/Paper@14bb579b fix bad exhaustion reasons for player movement PaperMC/Paper@0b4fed78 fix misc issues PaperMC/Paper@384ff989 fix contract of ItemContainerContents#contents PaperMC/Paper@af55c9de Fix Geyser particle options waterBlocks precondition (#13961) PaperMC/Paper@1daadd58 Prevent EnderDragon and Wither from receiving effect of vanilla sources (#13956) PaperMC/Paper@ca8eb49f Mention MOJIRA issue for correct stacktrace fix in FileFixerUpper [ci/skip] (#13962) PaperMC/Paper@80d10989 Expose Entity Source for EntityPotionEffectEvent (#13957) PaperMC/Paper@2c0341f9 Update adventure to 5.1.1 PaperMC/Paper@649002a4 fix IOOB for '..' namespace PaperMC/Paper@783b6f09 add preconditions to particles --- build-data/purpur.at | 2 + gradle.properties | 4 +- purpur-api/build.gradle.kts.patch | 8 +- .../entity/EntityPotionEffectEvent.java.patch | 2 +- .../features/0001-Ridables.patch | 76 +++++++++---------- ...-Configurable-entity-base-attributes.patch | 36 ++++----- ...-Minecart-settings-and-WASD-controls.patch | 4 +- .../0008-Implement-elytra-settings.patch | 8 +- ...e-entity-breeding-times-configurable.patch | 12 +-- ...fing-override-to-everything-affected.patch | 18 ++--- ...oggle-for-water-sensitive-mob-damage.patch | 48 ++++++------ ...017-API-for-any-mob-to-burn-daylight.patch | 10 +-- .../0019-Mobs-always-drop-experience.patch | 46 +++++------ .../server/level/ServerLevel.java.patch | 22 +++--- .../server/level/ServerPlayer.java.patch | 30 ++++---- .../ServerGamePacketListenerImpl.java.patch | 40 +++++----- .../effect/SaturationMobEffect.java.patch | 2 +- .../minecraft/world/entity/Entity.java.patch | 6 +- .../world/entity/LivingEntity.java.patch | 18 ++--- .../boss/enderdragon/EnderDragon.java.patch | 2 +- .../entity/boss/wither/WitherBoss.java.patch | 2 +- .../world/entity/monster/Creeper.java.patch | 9 +-- .../projectile/arrow/AbstractArrow.java.patch | 2 +- .../world/level/block/ChestBlock.java.patch | 2 +- .../features/0002-Ridables.patch | 6 +- ...004-API-for-any-mob-to-burn-daylight.patch | 6 +- .../bukkit/craftbukkit/CraftWorld.java.patch | 2 +- .../CraftConsoleCommandSender.java.patch | 2 +- .../craftbukkit/entity/CraftPlayer.java.patch | 8 +- .../craftbukkit/entity/CraftWither.java.patch | 2 +- .../org/spigotmc/WatchdogThread.java.patch | 2 +- .../controller/WaterMoveControllerWASD.java | 2 +- 32 files changed, 220 insertions(+), 219 deletions(-) diff --git a/build-data/purpur.at b/build-data/purpur.at index 27f9eda68..097f3cb4e 100644 --- a/build-data/purpur.at +++ b/build-data/purpur.at @@ -1,6 +1,7 @@ # This file is auto generated, any changes may be overridden! # See CONTRIBUTING.md on how to add access transformers. protected net.minecraft.world.entity.Entity dimensions +public net.minecraft.server.MinecraftServer playerDataStorage public net.minecraft.world.entity.LivingEntity canGlide()Z public net.minecraft.world.entity.monster.Shulker MAX_SCALE public net.minecraft.world.entity.player.Player canGlide()Z @@ -8,6 +9,7 @@ public net.minecraft.world.level.block.ShulkerBoxBlock canOpen(Lnet/minecraft/wo public net.minecraft.world.level.block.entity.BeehiveBlockEntity$BeeData public net.minecraft.world.level.block.entity.BeehiveBlockEntity$BeeData occupant public net.minecraft.world.level.block.entity.FuelValues values +public net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity openCount public net.minecraft.world.level.portal.PortalShape FRAME public-f net.minecraft.world.entity.EntityType dimensions public-f net.minecraft.world.level.block.state.BlockBehaviour explosionResistance diff --git a/gradle.properties b/gradle.properties index 8260af34b..83c078977 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ group = org.purpurmc.purpur -mcVersion = 26.2-rc-2 +mcVersion = 26.2 apiVersion = 26.2 channel=EXPERIMENTAL -paperCommit = 03b30e077aee14c7fb639583cab46a446ef69d73 +paperCommit = 783b6f09726d339fd1578797a30ae8d9ab3ea1d9 org.gradle.configuration-cache = true org.gradle.caching = true diff --git a/purpur-api/build.gradle.kts.patch b/purpur-api/build.gradle.kts.patch index a6cbd1f97..c8d6a3e23 100644 --- a/purpur-api/build.gradle.kts.patch +++ b/purpur-api/build.gradle.kts.patch @@ -1,6 +1,6 @@ --- a/paper-api/build.gradle.kts +++ b/paper-api/build.gradle.kts -@@ -91,7 +_,7 @@ +@@ -94,7 +_,7 @@ testRuntimeOnly("org.junit.platform:junit-platform-launcher:6.0.3") } @@ -9,7 +9,7 @@ idea { module { generatedSourceDirs.add(generatedDir.toFile()) -@@ -101,6 +_,18 @@ +@@ -104,6 +_,18 @@ main { java { srcDir(generatedDir) @@ -28,7 +28,7 @@ } } } -@@ -182,8 +_,9 @@ +@@ -185,8 +_,9 @@ val services = objects.newInstance() tasks.withType().configureEach { @@ -39,7 +39,7 @@ options.use() options.isDocFilesSubDirs = true options.links( -@@ -217,11 +_,11 @@ +@@ -214,11 +_,11 @@ } // workaround for https://github.com/gradle/gradle/issues/4046 diff --git a/purpur-api/paper-patches/files/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java.patch b/purpur-api/paper-patches/files/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java.patch index 2676d9629..8e67b1ee8 100644 --- a/purpur-api/paper-patches/files/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java.patch +++ b/purpur-api/paper-patches/files/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java -@@ -218,6 +_,12 @@ +@@ -230,6 +_,12 @@ * When all effects are removed due to a bucket of milk. */ MILK, diff --git a/purpur-server/minecraft-patches/features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch index f4e90e162..2916681dd 100644 --- a/purpur-server/minecraft-patches/features/0001-Ridables.patch +++ b/purpur-server/minecraft-patches/features/0001-Ridables.patch @@ -18,7 +18,7 @@ index ec6dd9de7b82841b1403b1bb851392132be5275b..146c404ac0471ed7df6d3740859663aa public boolean isClientAuthoritative() { return false; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index a45518c47e178540d186c6ac530e7f26fae7edc9..8a5c7ac71613316951f0c9b32f8beab9300e63f6 100644 +index 99f1c3d82e632e7328366dc8b02e8f26500f80ce..bc2be2db242d4cc5ad857ad97f32e42072f09f09 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1865,6 +1865,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop level + " " + level.dimension().identifier()); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index f7e3e4c84a4a9d37834ddbadc2df80eb0ee4c3fc..0bb1ea204c012fc6e65c50454f3387b92b551cc6 100644 +index 72ce2b03561af86db2059dfa05f381278af56f64..ca39cddc5d7bccbea4ce8ed95354c7529dd93072 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -237,6 +237,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet - public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent - public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent +@@ -239,6 +239,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet + private static final org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry(); + public final org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer persistentDataContainer = new org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer(DATA_TYPE_REGISTRY); private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) + public boolean hasRidableMoveEvent = false; // Purpur - Ridables @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 d1a126b6a34c48a3218b14e7b6fc30c30bce8e8a..4a9297f43e33df1838ad75543ec0080c833fb078 100644 +index 9529e56d83964589a1e55b64e666f66b4148c315..c7e81ed584a3da2521fad58049ee44c18947ca23 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -784,6 +784,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -775,6 +775,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this, true); @@ -62,10 +62,10 @@ index d1a126b6a34c48a3218b14e7b6fc30c30bce8e8a..4a9297f43e33df1838ad75543ec0080c private void updatePlayerAttributes() { diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index e383c953df7569e2536a968c851b234e33b88813..45a509558d10825df46c521804611f809828958b 100644 +index c975f82d59c19d1bc8d1bce776af59ea5271e019..df58df768c938def010d2d215c61c906eda77429 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3013,6 +3013,8 @@ public class ServerGamePacketListenerImpl +@@ -2983,6 +2983,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); final boolean resendData = event.isCancelled() || !ServerGamePacketListenerImpl.this.player.getItemInHand(hand).is(itemType); @@ -75,7 +75,7 @@ index e383c953df7569e2536a968c851b234e33b88813..45a509558d10825df46c521804611f80 if (itemType == Items.WATER_BUCKET && target instanceof net.minecraft.world.entity.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 d7bcaa9366c8b88d70778adb08b57046878af789..8ca29762d465ba8ebeaa450bd6e1c4f77db5464c 100644 +index 4ae58d6d8b6bd9510b6caf1e6618da4e9bed28bf..a4b74837096b4653b8504dbf446ad42277975e7e 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -3463,6 +3463,13 @@ public abstract class Entity @@ -153,13 +153,13 @@ index d7bcaa9366c8b88d70778adb08b57046878af789..8ca29762d465ba8ebeaa450bd6e1c4f7 + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index f80bf4e822b67e3fd655c72d7f1fa601e45c51a8..a714d12aa9f8b3b36d0cf334c744dd7751cb68b3 100644 +index 8ec2032ed8e7586b14c3184ba03f9dfea9afc765..e9d53d0708cd1c49d1ed1257d10d22f7201873a0 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -258,9 +258,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected int noActionTime; public float lastHurt; - public boolean jumping; + protected boolean jumping; - public float xxa; - public float yya; - public float zza; @@ -186,7 +186,7 @@ index f80bf4e822b67e3fd655c72d7f1fa601e45c51a8..a714d12aa9f8b3b36d0cf334c744dd77 @Override protected void checkFallDamage(final double ya, final boolean onGround, final BlockState onState, final BlockPos pos) { -@@ -3159,6 +3160,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3141,6 +3142,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.5)); } else { @@ -207,7 +207,7 @@ index f80bf4e822b67e3fd655c72d7f1fa601e45c51a8..a714d12aa9f8b3b36d0cf334c744dd77 this.moveRelative(airSpeed, input); this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.91F)); -@@ -3887,8 +3902,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3869,8 +3884,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.pushEntities(); profiler.pop(); // Paper start - Add EntityMoveEvent @@ -220,7 +220,7 @@ index f80bf4e822b67e3fd655c72d7f1fa601e45c51a8..a714d12aa9f8b3b36d0cf334c744dd77 Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3898,6 +3915,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3880,6 +3897,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.absSnapTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -243,7 +243,7 @@ index f80bf4e822b67e3fd655c72d7f1fa601e45c51a8..a714d12aa9f8b3b36d0cf334c744dd77 // Paper end - Add EntityMoveEvent if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 40480b578035af29f510ec5ef4611b1a33d1c394..a5885bc19fe469a0c810e241d570d9ab62295492 100644 +index 481d882c8ba5ffd046b98709497f37d89f41e19e..4e1fadf8ea105d1d5ceaef5b5f9ce4f3f356608d 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -161,8 +161,8 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs @@ -384,7 +384,7 @@ index 0dac24960ce1e04a1962def9dc49315998b79e25..b828332b3e5db2722ca2193721da996f .put(EntityTypes.PIGLIN, Piglin.createAttributes().build()) .put(EntityTypes.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()) diff --git a/net/minecraft/world/entity/ai/control/MoveControl.java b/net/minecraft/world/entity/ai/control/MoveControl.java -index ca8932589bb59d8d12cc7838a026255fc2914715..f179455b90140a4663c46f19dcb39abfaf3bf4f4 100644 +index 2c9b7ef8ed87b42807f5adc9545d692105c91c6b..d2faf838dbf8160afa83919db707fa2ff352a413 100644 --- a/net/minecraft/world/entity/ai/control/MoveControl.java +++ b/net/minecraft/world/entity/ai/control/MoveControl.java @@ -29,6 +29,20 @@ public class MoveControl implements Control { @@ -517,7 +517,7 @@ index 5dd0c83e44eb68d90cda5743bc24d97044a02f6e..9861837c1d10e5ffe5dada9f4a75fb9a BlockPos pos = this.blockPosition(); BlockPos above = pos.above(); diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 03627acb68d22232f6f6552ba4dfeeebe83152fd..408a0048686dd2f3b48dee53087504ffc4dfc42c 100644 +index 69d8a10f524dd4db683a00f194e8d1a26c996f43..c6ed1f00fd931ecff13dfb3309470afab2f0852d 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -101,10 +101,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -678,7 +678,7 @@ index fa774ac8f3eea281c9b684c76dd12d4e66d3ee24..ed0d11c8048c3c6b25a003633684b893 super.tick(); } diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index cadd762e86868adcaafe1ad138b221495c906389..ec110b0dcef5ae0923cdda8aa43720f10b9f826e 100644 +index c33e18d572463f5d457516bc4bd64826cf7c3acc..ee732f4462cc69070beffdbc7a3a310d3c369a10 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java @@ -151,6 +151,7 @@ public class Bee extends Animal implements NeutralMob { @@ -2319,7 +2319,7 @@ index 5de97090f68c5a371f0b196c211941d7a5e503b1..250401cef7c93375235ef275165f1e0d public float getStandingAnimationScale(final float a) { diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 3c43ae68e2510505773e36bf7b051835986e3df0..2d2078ca3adeb78b6ec2633c35d3c622184cc3b2 100644 +index 353866566a00143f138a0a460613af381f507fcf..2d1fd11121d3e6293f35e4e7838cbe59a8b27dc4 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -109,6 +109,7 @@ public class Rabbit extends Animal { @@ -2380,7 +2380,7 @@ index 3c43ae68e2510505773e36bf7b051835986e3df0..2d2078ca3adeb78b6ec2633c35d3c622 + // Purpur end - Ridables + @Override - public void registerGoals() { + protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); + this.goalSelector.addGoal(1, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables this.goalSelector.addGoal(1, new ClimbOnTopOfPowderSnowGoal(this, this.level())); @@ -2543,7 +2543,7 @@ index ecc3fb073a3e40c590527f0aec8b23a7aee04a71..bde43e42ba7eec863fd0e2cd9b8068e8 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index e0db02e7f2166e894137190252f28a3f02386207..e2273ce904e2c95491caec67d36d37b4b5e0fe67 100644 +index e0db02e7f2166e894137190252f28a3f02386207..9166e9f3606c6a96cbf0ddddabb57e2d91d2aa18 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -74,9 +74,32 @@ public class Squid extends AgeableWaterCreature { @@ -2586,7 +2586,7 @@ index e0db02e7f2166e894137190252f28a3f02386207..e2273ce904e2c95491caec67d36d37b4 + // Purpur start - Ridables + net.minecraft.world.entity.player.Player rider = squid.getRider(); + if (rider != null && squid.isControllable()) { -+ if (rider.jumping) { ++ if (rider.isJumping()) { + squid.onSpacebar(); + } + float forward = rider.getForwardMot(); @@ -2618,7 +2618,7 @@ index e0db02e7f2166e894137190252f28a3f02386207..e2273ce904e2c95491caec67d36d37b4 if (noActionTime > 100) { this.squid.movementVector = Vec3.ZERO; diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index 05ec359df5bc0803adcd954721e7cefaf8b867d8..23d566b39a1484b54e2b893da5a2d2cbaeb822fd 100644 +index 7ee9d2f25178ac97b74d0f2c3619ddfaf2004bea..d08d2d275b1268abe2548352e15890b04536a3ed 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java @@ -88,6 +88,23 @@ public class Turtle extends Animal { @@ -2730,7 +2730,7 @@ index 5d1e0d44163b9f29dc824b46b7b983456a273419..f54a14a1e434cbfedf709d3b1495f2ae this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers()); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index b3e19812063596d600ae50555d0ff92deae3e890..ccb28f6f5e02972c32ac5f3390a72b78f17b28dd 100644 +index dc332c72a6684cf65441343395d99fea129ce2ab..60c02127a504a5130a202a3b532b63bef4c47a31 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -92,6 +92,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -2904,7 +2904,7 @@ index a8e3df21c27b9c86f9f03ea436ef4099a0805b71..a677aed54e16f3150ea1eabe22935a3d protected void defineSynchedData(final SynchedEntityData.Builder entityData) { } diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 6669dd5ea935cce9d0df89986237aa068b1899ff..1f32d0d87727009a8ca671415159566c10f79f7e 100644 +index 73d1a839c541d089e51e547c29bbb239a1a5ef9b..ab1c7889e7742c27589c72d1f73960eda9091078 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -73,6 +73,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -3076,7 +3076,7 @@ index 6669dd5ea935cce9d0df89986237aa068b1899ff..1f32d0d87727009a8ca671415159566c if (this.getInvulnerableTicks() > 0) { int newCount = this.getInvulnerableTicks() - 1; this.bossEvent.setProgress(1.0F - newCount / 220.0F); -@@ -581,11 +705,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -586,11 +710,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { } public int getAlternativeTarget(final int headIndex) { @@ -3174,11 +3174,11 @@ index d48e066e8c43494aa74158452da369e5617d6a7e..c1acc0a648493ec33ef4fc4a48b52fe0 if (this.nextHeightOffsetChangeTick <= 0) { this.nextHeightOffsetChangeTick = 100; diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index 8e32e9a24f98d962a7c90ec400526d1711d8e97e..ac98cd1702fb9ef2b82226d2ee459cb18ebce017 100644 +index 5b56fa1f7dadc63e7edbf54576327bbcb7f5f2a2..81031650d914c5d973d5bd89547ce58e92b1acc6 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java @@ -57,21 +57,98 @@ public class Creeper extends Monster { - public boolean droppedSkulls; + private boolean droppedSkulls; public @Nullable Entity entityIgniter; // CraftBukkit private boolean exploding = false; // Purpur - Config to make Creepers explode on death + // Purpur start - Ridables @@ -3276,7 +3276,7 @@ index 8e32e9a24f98d962a7c90ec400526d1711d8e97e..ac98cd1702fb9ef2b82226d2ee459cb1 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); } -@@ -314,6 +391,7 @@ public class Creeper extends Monster { +@@ -313,6 +390,7 @@ public class Creeper extends Monster { com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), ignited); if (event.callEvent()) { this.entityData.set(DATA_IS_IGNITED, event.isIgnited()); @@ -3511,7 +3511,7 @@ index 5f8074c93d2ad3d163bb416b16711d82edd7dacc..1b7a75a2be45928093382fa2f2da079f return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index a22a5b20b4ceb666e09aea74882362cc9c5af758..af865e3a6549f008826ed7469b2ecb4c92598863 100644 +index d4d295b0fe663a7747a7c7b44a08ab1e192f26b1..e6b3bc45f36b438a7164c4be2e97ffa22f39979d 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -65,14 +65,35 @@ public class Guardian extends Monster { @@ -3924,7 +3924,7 @@ index ea4a025b6054fc43d9b5272cac6055c475875d3e..cd35797eff1ec2881e72b0fc44bd9a09 if (hasFood && !this.isSilent()) { diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index a03067833e27fb5b97b8c77a1ed4386338c16a53..3ddf4ba1d809e62e4a1f7cc54f44738b1c129145 100644 +index 3c3cef88f503db93b2c097096c505577b945fa76..a5fe9509e3e3ee56ef0cd222e8fe92ce8316769f 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -60,6 +60,50 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { @@ -4507,7 +4507,7 @@ index f4b93c3dd12d762f280c7b52af5d3b5f58cb9cef..9ea4745eb0d72c25ac5b89a6bfa5ba28 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true).setUnseenMemoryTicks(300)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false).setUnseenMemoryTicks(300)); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index 26e179d146a3b363d0c96a6d113c613bbaf263b2..a0e926bedb5000a8e3d8e37207916cc06ad01090 100644 +index 2fb3b7f3928a459d089bd8680673aa589118f464..bc1b7ffce2de2b0835e69c93aad3f00fef025c89 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -65,16 +65,35 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -4586,7 +4586,7 @@ index 061d08fd2451a7bbd020edbd4035b1e793f552ba..7caebb032e03ce54463c1e1050dc2bfe this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 0c27543e9d48e0d0cf067ccb9ab5d5ca49223d10..a688c7ab300753f373af1de3471dce2a2249456e 100644 +index dbfe791f45ddb77be7487d16325f56eb3a5d094d..dc8e8379ab43e2f1ef26a8a0cea9a17f796434d4 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -109,6 +109,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -4705,7 +4705,7 @@ index faff25abf54e00f38b10bdb47e37ab2d100f32fb..6bb58edc4317e33da1d6053b1c66a9ac protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index e260ed1bf0238e9cb32f84e30ca642d433ae239c..a0bc5a61bfada6cc391078cf29456db64e90b35d 100644 +index d9cb4a5b989ce684bbaf4eee3f642d29d6bf9d45..d92db02786ce6989ca5d8a2d7647e4f60a66ce82 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java @@ -27,6 +27,23 @@ public class Skeleton extends AbstractSkeleton { @@ -4999,7 +4999,7 @@ index b3ba75be06325db01b97a35b0e91bbcb61faa41c..2dc09198f7bc86f5837c30e7e85eeb4c public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 2b58954cabda006adc0023831af520f4d5eb7275..d231dbf446c4e28df3512918ae50c1fc5e4db402 100644 +index 4a74692e1dc3f6e94f046e0c5941a59893174c32..cbea2f30f20859f03f3b4667c22b380c8d45e7ab 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java @@ -113,11 +113,30 @@ public class Zombie extends Monster { @@ -5034,7 +5034,7 @@ index 2b58954cabda006adc0023831af520f4d5eb7275..d231dbf446c4e28df3512918ae50c1fc } diff --git a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -index 32cf40d4254bc7be406b3cfea728b01259dbd83f..67031d93d9f59cf616c7ed1a3fcb18182148c6e6 100644 +index 2942cf895a145c8d0bd962f765fc8e21079d0cc6..f62603ef4b76d2966d8e70a7ab9bdc2592cf41fb 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java @@ -87,6 +87,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -5193,7 +5193,7 @@ index 0b668baf3fca348d9e3755c114bd109fe7736a80..45279d3473f42dd0f75315961bd178c1 if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading this.setTradingPlayer(player); diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 1cb7700824d608380301e5ff524d17fd7420ec16..def90b5105edb0303eecc4424ff7d6e2cb050791 100644 +index 49709c2cb9c8804f13bf992e771254e0d7d83cf5..c12d88851552a5ac0b4c2e9c19d049e0a52dc578 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -194,6 +194,19 @@ public abstract class Player extends Avatar implements ContainerUser { 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 ee505ad1f..84a38c51a 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 a714d12aa9f8b3b36d0cf334c744dd7751cb68b3..45ab2a35a27b35b682cf90a14c587a50ad2f6ce5 100644 +index e9d53d0708cd1c49d1ed1257d10d22f7201873a0..abb90115fc17722bebf5b7c50301ba570f7949e0 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -310,6 +310,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -52,7 +52,7 @@ index 9861837c1d10e5ffe5dada9f4a75fb9adaccc161..cb242c69be97e0927dd62714f1a9b112 public boolean isFlapping() { return !this.isResting() && this.tickCount % 10.0F == 0.0F; diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 408a0048686dd2f3b48dee53087504ffc4dfc42c..80c86131486c7392481def252fa74d18ce76beb0 100644 +index c6ed1f00fd931ecff13dfb3309470afab2f0852d..cdca0b9d8765b760b132d65f4141779fd0278324 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -155,6 +155,14 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -109,7 +109,7 @@ index ed0d11c8048c3c6b25a003633684b89376b76be9..2752e906f2a98540d6fd33cd5f080f37 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index ec110b0dcef5ae0923cdda8aa43720f10b9f826e..6022df0a91e46b0a7a0102b959a1eb2b18c1de63 100644 +index ee732f4462cc69070beffdbc7a3a310d3c369a10..d49a95e4fa51d3bae3c4949936eb358d7bb2346b 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java @@ -477,6 +477,14 @@ public class Bee extends Animal implements NeutralMob { @@ -842,7 +842,7 @@ index 250401cef7c93375235ef275165f1e0d9684d42a..85c6b17bbf490315b76612c4a8ab50b0 public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 2d2078ca3adeb78b6ec2633c35d3c622184cc3b2..38fa1c0b79e3dc11e830af95be4bed1e74910108 100644 +index 2d1fd11121d3e6293f35e4e7838cbe59a8b27dc4..b313fb9383b927a2c0254d784d3124ae64ada0dd 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -163,6 +163,14 @@ public class Rabbit extends Animal { @@ -858,7 +858,7 @@ index 2d2078ca3adeb78b6ec2633c35d3c622184cc3b2..38fa1c0b79e3dc11e830af95be4bed1e + // Purpur end - Configurable entity base attributes + @Override - public void registerGoals() { + protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java index cf20e9a64fee6512c14f1b757f435fd4fc3394fc..d3d5168fdafa7afe5813e1c0ea99ab17c8eddcc3 100644 @@ -917,7 +917,7 @@ index bde43e42ba7eec863fd0e2cd9b8068e8cefaaa1c..86b8f30bc9c98423e2e5bbb2a7548ea3 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index e2273ce904e2c95491caec67d36d37b4b5e0fe67..66477755d3ee8293a8bd79baa01214954b792898 100644 +index 9166e9f3606c6a96cbf0ddddabb57e2d91d2aa18..d5da8cb94df80d5190da10070e7733871c101687 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -96,6 +96,14 @@ public class Squid extends AgeableWaterCreature { @@ -936,7 +936,7 @@ index e2273ce904e2c95491caec67d36d37b4b5e0fe67..66477755d3ee8293a8bd79baa0121495 protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index 23d566b39a1484b54e2b893da5a2d2cbaeb822fd..aea12003ef838f8f4d1e1c6b83a527e6c812a3c8 100644 +index d08d2d275b1268abe2548352e15890b04536a3ed..99f665f44ccd23563b0824e4c149443081767a16 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java @@ -105,6 +105,14 @@ public class Turtle extends Animal { @@ -974,7 +974,7 @@ index f54a14a1e434cbfedf709d3b1495f2ae9ae4f11f..acf623ba0ab1f1d6c98af1a83cddd634 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index ccb28f6f5e02972c32ac5f3390a72b78f17b28dd..163afb24f856b75528a362e899548a1515a47aca 100644 +index 60c02127a504a5130a202a3b532b63bef4c47a31..33005c82880f7e765e9a16d7630edaf4657b4bb8 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -165,6 +165,13 @@ public class EnderDragon extends Mob implements Enemy { @@ -991,7 +991,7 @@ index ccb28f6f5e02972c32ac5f3390a72b78f17b28dd..163afb24f856b75528a362e899548a15 public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } -@@ -1061,7 +1068,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -1066,7 +1073,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected float sanitizeScale(final float scale) { @@ -1001,7 +1001,7 @@ index ccb28f6f5e02972c32ac5f3390a72b78f17b28dd..163afb24f856b75528a362e899548a15 // CraftBukkit start - SPIGOT-2420: Special case, the ender dragon drops 12000 xp for the first kill and 500 xp for every other kill and this over time. diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 1f32d0d87727009a8ca671415159566c10f79f7e..7a80afbe7d1c5ff2ea0e26eb1c59123705dc1aef 100644 +index ab1c7889e7742c27589c72d1f73960eda9091078..a6327fbd4eb57421abbff3b7a155c05483208834 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -213,6 +213,14 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -1048,7 +1048,7 @@ index c1acc0a648493ec33ef4fc4a48b52fe0b3dc04b2..b553c6dd60bd23fba7ee3df9886561fc 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/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index ac98cd1702fb9ef2b82226d2ee459cb18ebce017..ada74699fcc5a50694cf4b651f42011dd3ade2d4 100644 +index 81031650d914c5d973d5bd89547ce58e92b1acc6..893adb6acdb292c618753d12f6f891e0cce0f207 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java @@ -137,6 +137,14 @@ public class Creeper extends Monster { @@ -1164,7 +1164,7 @@ index 1b7a75a2be45928093382fa2f2da079ffc5d190d..7b6952f13e18548d0e71035d6cd6cfb2 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index af865e3a6549f008826ed7469b2ecb4c92598863..a803e9b43758b7bad9bb1f9b577a2c9c7bc040d2 100644 +index e6b3bc45f36b438a7164c4be2e97ffa22f39979d..fdba60041c4a41191e397d1dddea625348f243e1 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -89,6 +89,14 @@ public class Guardian extends Monster { @@ -1310,7 +1310,7 @@ index cd35797eff1ec2881e72b0fc44bd9a098d795a74..4f4f01941e66880113dd80626030a635 final EntityType ignoredType, final LevelAccessor level, diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 3ddf4ba1d809e62e4a1f7cc54f44738b1c129145..854c78d567a446479a704fbf459885f2b164e54d 100644 +index a5fe9509e3e3ee56ef0cd222e8fe92ce8316769f..c8fd079f0b6726f4136b7c645a6d720fd1c97265 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -104,6 +104,14 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { @@ -1585,7 +1585,7 @@ index 9ea4745eb0d72c25ac5b89a6bfa5ba2846740f07..0150ebdcbb681bcf8128eec34fd6e3fb protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index a0e926bedb5000a8e3d8e37207916cc06ad01090..81d956085667b7564588b54b54c1150b8a082c97 100644 +index bc1b7ffce2de2b0835e69c93aad3f00fef025c89..59a6dac61c5b2ff57c53d2f79779d6432f9f2396 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -82,6 +82,14 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -1623,7 +1623,7 @@ index 7caebb032e03ce54463c1e1050dc2bfe14cb16ee..d06f6bf930277f08756752f7f259a57f protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index a688c7ab300753f373af1de3471dce2a2249456e..702f9d6512357a79834f6e8a882e5fbb680bad4e 100644 +index dc8e8379ab43e2f1ef26a8a0cea9a17f796434d4..5f2e20367e932566a268765707d91d58be42b90f 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -126,6 +126,14 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1680,7 +1680,7 @@ index 6bb58edc4317e33da1d6053b1c66a9ac10fb6ad9..dd55f35c828beb57ae1f995ecbbacb95 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index a0bc5a61bfada6cc391078cf29456db64e90b35d..f9551eeb0190c5dafc550d657115173a265f1c5e 100644 +index d92db02786ce6989ca5d8a2d7647e4f60a66ce82..c48e758fe08b753bbc5fd1e9fe2568a220f7368e 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java @@ -44,6 +44,13 @@ public class Skeleton extends AbstractSkeleton { @@ -1820,7 +1820,7 @@ index 2dc09198f7bc86f5837c30e7e85eeb4c85b8d114..7a3747d67f1ce93e0703965144e32d13 public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index d231dbf446c4e28df3512918ae50c1fc5e4db402..51e9175cf7f0c487d063247dca4e700012283431 100644 +index cbea2f30f20859f03f3b4667c22b380c8d45e7ab..3a6fb7734b725afd932c5d066ff512a72bc2d854 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java @@ -130,6 +130,14 @@ public class Zombie extends Monster { @@ -1848,7 +1848,7 @@ index d231dbf446c4e28df3512918ae50c1fc5e4db402..51e9175cf7f0c487d063247dca4e7000 private 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 67031d93d9f59cf616c7ed1a3fcb18182148c6e6..2323ef6faec7bc62b28240e6dcc9f350de427c8e 100644 +index f62603ef4b76d2966d8e70a7ab9bdc2592cf41fb..da190239c12da5150b1bcd48ad6649e8d5fe0fbe 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java @@ -104,6 +104,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { 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 11ed002fe..90a989d3a 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 4a9297f43e33df1838ad75543ec0080c833fb078..ce07d6a8d49e5f538f61955394c20f880863885d 100644 +index c7e81ed584a3da2521fad58049ee44c18947ca23..77e8d62979b421d1fddc0c4d2b224ceec14a297f 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1324,6 +1324,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1315,6 +1315,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc // Purpur start - Add boat fall damage config if (source.is(net.minecraft.tags.DamageTypeTags.IS_FALL)) { diff --git a/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch b/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch index 02df13fdc..96800b8e6 100644 --- a/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch +++ b/purpur-server/minecraft-patches/features/0008-Implement-elytra-settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement elytra settings diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 45ab2a35a27b35b682cf90a14c587a50ad2f6ce5..7ec097b3be4fa2ad99de2891fa5507af92ebbeab 100644 +index abb90115fc17722bebf5b7c50301ba570f7949e0..dd38ed1e2a94aa86e8b564a109b3b132eaa65381 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3968,7 +3968,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3950,7 +3950,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (freeFallInterval % 2 == 0) { List slotsWithGliders = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList(); EquipmentSlot slotToDamage = Util.getRandom(slotsWithGliders, this.random); @@ -49,7 +49,7 @@ index b3443ff2d06af328493046e723efc11d299a2824..3c001b3810097d5cb60ad64e0727d8d9 itemStack.shrink(1); // Moved up from below } else { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index 92d4a8ea07e96f84df655c63e21716549f52d8b9..abaa39135d3025a4ef066428d46af814a4854de4 100644 +index 56ace1be8e29ff1c06a550b15769c3cfcad41466..c0fce943b33ebe63798a35ea17ec3ceb9cf6209a 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java @@ -666,6 +666,14 @@ public final class ItemStack implements DataComponentHolder, ItemInstance { @@ -68,7 +68,7 @@ index 92d4a8ea07e96f84df655c63e21716549f52d8b9..abaa39135d3025a4ef066428d46af814 onBreak.accept(item); } diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java -index 0321dffbbea8bf35640680eedd21cd9f9daa6c04..91f81dbf4e1fbf029c8f70ad3a80a489e1188a54 100644 +index 9f833f16d02e778b0361744ba409a3096248836c..7ebf88560e431a07cf4c1417dfd5a71fdd73e557 100644 --- a/net/minecraft/world/item/TridentItem.java +++ b/net/minecraft/world/item/TridentItem.java @@ -127,6 +127,16 @@ public class TridentItem extends Item implements ProjectileItem { 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 7d5a9036c..4e6cc705f 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,11 +22,11 @@ index 979b537bb459898a501af86280fa313ac58510b2..9aefa11fcc336c5c98c63301b7f9a51b // CraftBukkit end - call EntityBreedEvent level.broadcastEntityEvent(child, EntityEvent.LOVE_HEARTS); diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java -index 44f34214b53a8ea754e3c62f5db652ea944a95f6..79de24884cb5862a4af6dd9a9067434d72a91fa8 100644 +index e18462f9e3353957eb3079112fe7e81986b36491..066bec0f5ed154dea08287ff6d4653a4623f956a 100644 --- a/net/minecraft/world/entity/animal/Animal.java +++ b/net/minecraft/world/entity/animal/Animal.java @@ -46,6 +46,7 @@ public abstract class Animal extends AgeableMob { - public int inLove = 0; + private int inLove = 0; public @Nullable EntityReference loveCause; public @Nullable ItemStack breedItem; // CraftBukkit - Add breedItem variable + public abstract int getPurpurBreedTime(); // Purpur - Make entity breeding times configurable @@ -83,7 +83,7 @@ index 2752e906f2a98540d6fd33cd5f080f376e6e3f86..11b3d0706a89b21251b5a045fbb34b1c public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index 6022df0a91e46b0a7a0102b959a1eb2b18c1de63..c871d6e0140fae4e15bf07ba86ed7c67615e9ce6 100644 +index d49a95e4fa51d3bae3c4949936eb358d7bb2346b..fb47fcd4aef388821f6189d65ccdc7a62dd936aa 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java @@ -485,6 +485,13 @@ public class Bee extends Animal implements NeutralMob { @@ -528,7 +528,7 @@ index 85c6b17bbf490315b76612c4a8ab50b03e9d14a3..8041beeb5bb039f0aec0b59ba45806cf public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 38fa1c0b79e3dc11e830af95be4bed1e74910108..f0c4ad3715322bf1a5a60edd870b34a15949a77f 100644 +index b313fb9383b927a2c0254d784d3124ae64ada0dd..54b53fea95f9ce98e8e204b36de2c3a8318697b7 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -171,6 +171,13 @@ public class Rabbit extends Animal { @@ -543,7 +543,7 @@ index 38fa1c0b79e3dc11e830af95be4bed1e74910108..f0c4ad3715322bf1a5a60edd870b34a1 + // Purpur end - Make entity breeding times configurable + @Override - public void registerGoals() { + protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java index d3d5168fdafa7afe5813e1c0ea99ab17c8eddcc3..01220c13a3f5cd920bcbbd23f66d73e597fee97f 100644 @@ -582,7 +582,7 @@ index 9246c76131c02832d96eeb6d3899e0050abce938..33eb3e6b312ef32c6ae94a7ef5333ab6 protected void defineSynchedData(final SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index aea12003ef838f8f4d1e1c6b83a527e6c812a3c8..4104787b7cc9e746f88969cad3a5b6d86b9f184b 100644 +index 99f665f44ccd23563b0824e4c149443081767a16..dd04eab7357c35f8a240994e42b2dc2330d40c77 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java @@ -113,6 +113,13 @@ public class Turtle extends Animal { diff --git a/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch b/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch index ac6649a12..efecbb182 100644 --- a/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch +++ b/purpur-server/minecraft-patches/features/0015-Add-mobGriefing-override-to-everything-affected.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Add mobGriefing override to everything affected diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 7ec097b3be4fa2ad99de2891fa5507af92ebbeab..166c8d92937d534646d7a7521529d30afaa6f618 100644 +index dd38ed1e2a94aa86e8b564a109b3b132eaa65381..afad3bdd336280ab7d90f6447b486a059a4966e9 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1961,7 +1961,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1943,7 +1943,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel) { boolean var6 = false; - if (this.dead && killer instanceof WitherBoss) { // Paper + if (killer instanceof WitherBoss) { - if (serverLevel.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.witherMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected BlockPos pos = this.blockPosition(); BlockState state = Blocks.WITHER_ROSE.defaultBlockState(); if (this.level().getBlockState(pos).isAir() && state.canSurvive(this.level(), pos)) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index a5885bc19fe469a0c810e241d570d9ab62295492..460ba9d3a192c5f17a1b5c4682bbbba3d2f8ebe2 100644 +index 4e1fadf8ea105d1d5ceaef5b5f9ce4f3f356608d..3902dddb25c8d96390caf7bcda19db85f07f67ba 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -571,7 +571,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs @@ -118,7 +118,7 @@ index c614c61424199cb2105e84b85fe67f66dd6aa248..da0e4f830b708a5f1046aff48de525c7 } diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index f0c4ad3715322bf1a5a60edd870b34a15949a77f..80a65dba81ab82cdb9bd43d1878e74550e61d634 100644 +index 54b53fea95f9ce98e8e204b36de2c3a8318697b7..4dec5d3aaadd8045b5c66fd09b66ad612e928d59 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -695,7 +695,7 @@ public class Rabbit extends Animal { @@ -131,7 +131,7 @@ index f0c4ad3715322bf1a5a60edd870b34a15949a77f..80a65dba81ab82cdb9bd43d1878e7455 } diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 163afb24f856b75528a362e899548a1515a47aca..56f3c0b9d1f34f9dff5db46d441d1d4f86f4668e 100644 +index 33005c82880f7e765e9a16d7630edaf4657b4bb8..404b894a80c2400a1ca6d495049157637c0418f4 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -537,7 +537,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -144,7 +144,7 @@ index 163afb24f856b75528a362e899548a1515a47aca..56f3c0b9d1f34f9dff5db46d441d1d4f //flag1 = level.removeBlock(blockPos, false) || flag1; destroyedBlock = true; diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 7a80afbe7d1c5ff2ea0e26eb1c59123705dc1aef..543ea15e63316564aa6c699863d952570d7e0df7 100644 +index a6327fbd4eb57421abbff3b7a155c05483208834..22f075e040f80e8cb0764056c456625b614855cb 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -492,7 +492,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -227,7 +227,7 @@ index 73ebf1ac5d814399887e4e8e717ee8fb41404969..4b077693e8749b6d2440b12f0aa1d7d6 } diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 702f9d6512357a79834f6e8a882e5fbb680bad4e..96fd5f5139a12c59277cf0a86d571551b1113f35 100644 +index 5f2e20367e932566a268765707d91d58be42b90f..919cdb5087d484642deb871f7536f9fcc5f11dd0 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -415,7 +415,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -294,7 +294,7 @@ index a2aab8db9826e0b4607f54914af43918a7e35512..e5cf3ec08e134e24fbcc31d903219130 // CraftBukkit end } diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java -index 7eb20e1ea16136116e1979eb3a17b31f4cc3cc75..457acdb4f5893303a4eea3d5e97404f1dcec8195 100644 +index 9d242f24c37fec196f06b8ef6fa29a66b2781c68..fb25bceaf1535a1a07eef6188b4c3656512415bb 100644 --- a/net/minecraft/world/entity/raid/Raider.java +++ b/net/minecraft/world/entity/raid/Raider.java @@ -396,7 +396,7 @@ public abstract class Raider extends PatrollingMonster { diff --git a/purpur-server/minecraft-patches/features/0016-Toggle-for-water-sensitive-mob-damage.patch b/purpur-server/minecraft-patches/features/0016-Toggle-for-water-sensitive-mob-damage.patch index 66e486b93..9e060dd4a 100644 --- a/purpur-server/minecraft-patches/features/0016-Toggle-for-water-sensitive-mob-damage.patch +++ b/purpur-server/minecraft-patches/features/0016-Toggle-for-water-sensitive-mob-damage.patch @@ -41,7 +41,7 @@ index 11b3d0706a89b21251b5a045fbb34b1c3e3d77b8..523358fb9bfb393dde41fb90fed40ab8 public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index c871d6e0140fae4e15bf07ba86ed7c67615e9ce6..f4e063e0fe64e26f926523765eba83a8a61d6404 100644 +index fb47fcd4aef388821f6189d65ccdc7a62dd936aa..b3a47763c4dcb84cd5fc1003268582184fd595c2 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java @@ -183,7 +183,7 @@ public class Bee extends Animal implements NeutralMob { @@ -68,7 +68,7 @@ index c871d6e0140fae4e15bf07ba86ed7c67615e9ce6..f4e063e0fe64e26f926523765eba83a8 public long getPersistentAngerEndTime() { return this.entityData.get(DATA_ANGER_END_TIME); diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index b27e52819fa244d93f70177b19898ab6399e2d3f..fed0cce13f0b75395ba4398e2cc79b142c289e68 100644 +index 0393438650f54689fe031b3bccfaea90db816969..71db913c66ae1efa9d335d45ab70c63ddfae3a91 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java @@ -118,6 +118,13 @@ public class Chicken extends Animal { @@ -374,7 +374,7 @@ index e9692aacca5f32c4280b16b4eabecf87c2ed5aeb..dc2800dd2f4c9f71c79d9f012be17398 return "entity.minecraft.tropical_fish.predefined." + index; } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index bf9ff90916733110a249912d7aeabc2e45f63b01..4553c0d7528f3aea8434e353e4daf78b53ac831d 100644 +index 9e113deaf6aa50380e20271b66daad566d40b08e..f5ee70d674fea7975aa1bfd206fb303907362c59 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java @@ -214,6 +214,13 @@ public class Fox extends Animal { @@ -410,7 +410,7 @@ index 49cfa8f360aac209106052e15ae0a6d88b3cc3ff..9744d757ae7dcc31291db469539ebd58 protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/golem/CopperGolem.java b/net/minecraft/world/entity/animal/golem/CopperGolem.java -index 5337c65d317299df2ac0dfd9b7ea12fc7debcdb6..53e17b3ebb5f66f00870c45fb0389ace08a2c144 100644 +index e26a2fb1f59540d853806dfdece97d574f0eebc0..31053ae3e64c3cbcfafd8d33a692022b8f2f821e 100644 --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java @@ -144,6 +144,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab @@ -446,7 +446,7 @@ index 9fd7366157c7e6d3d75469c33599560c5045abf7..0d47b1d7ffb09a883edde3c5c0a8e6ea protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java -index ad300631146959f158cbabddac12fda4deb33360..efd9770fb2401650e4459fab8066cb0da9870e58 100644 +index da0e4f830b708a5f1046aff48de525c7ecd4f05b..4aa522299a3194c569e8f7660fb44606931026da 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -124,7 +124,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab @@ -477,7 +477,7 @@ index a70806026e1c664bd45f9992a2c28dc7bbfb01eb..f37773ac8ec943744a8989b443e91371 protected void ageBoundaryReached() { if (this.isBaby()) { diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java -index 9328cb71c88efc13afc203da1c0bff7cd305fb3c..af66c192d57d4f5b49b7a0e4c00cfbce6616eb9b 100644 +index 4166894bee228546f6e4e991a3cf2a1380abe367..70d1e64f50c86c6ece9ecb8f3237a925068e76c5 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java +++ b/net/minecraft/world/entity/animal/panda/Panda.java @@ -154,6 +154,13 @@ public class Panda extends Animal { @@ -495,7 +495,7 @@ index 9328cb71c88efc13afc203da1c0bff7cd305fb3c..af66c192d57d4f5b49b7a0e4c00cfbce protected boolean canDispenserEquipIntoSlot(final EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java -index 22962f57daf5c274fa0ec46170f36dcaa1c8bed3..e43fe2c45e79526ba954dba2260c49075ae1c556 100644 +index d3bb7e7162fc9e3be1a5d84e95fe78c7a9ed423a..d6ea604c3cc557d42afeb4fef7bcc7b06a60b475 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java @@ -214,6 +214,13 @@ public class Parrot extends ShoulderRidingEntity { @@ -549,7 +549,7 @@ index 8041beeb5bb039f0aec0b59ba45806cf6eb57582..c47640ebcf2db48bb27b671c907f3270 public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index 80a65dba81ab82cdb9bd43d1878e74550e61d634..d7b287459fb0633470efffd70dda67ad8177615a 100644 +index 4dec5d3aaadd8045b5c66fd09b66ad612e928d59..4d5870acc631e18a070cfb12f8b2d4b5b06619ee 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -178,6 +178,13 @@ public class Rabbit extends Animal { @@ -564,10 +564,10 @@ index 80a65dba81ab82cdb9bd43d1878e74550e61d634..d7b287459fb0633470efffd70dda67ad + // Purpur end - Toggle for water sensitive mob damage + @Override - public void registerGoals() { + protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index cd53e9540856c53b9aae961ee0303b592a513684..0116de3318e769076481d3e5d479a810e235f0c0 100644 +index 01220c13a3f5cd920bcbbd23f66d73e597fee97f..d9f17420cc8e291896d51484d0f12473735a5f43 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java @@ -103,6 +103,13 @@ public class Sheep extends Animal implements Shearable { @@ -603,7 +603,7 @@ index 86b8f30bc9c98423e2e5bbb2a7548ea36c0854b6..e11e4e9134db7e59bd7f3112605206ad protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index 66477755d3ee8293a8bd79baa01214954b792898..6d6981635b4029a09ccc6115f0d17451089e09d4 100644 +index d5da8cb94df80d5190da10070e7733871c101687..cd8ef74ec5662b01b295f41a33834b65d51b7fd5 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -104,6 +104,13 @@ public class Squid extends AgeableWaterCreature { @@ -621,7 +621,7 @@ index 66477755d3ee8293a8bd79baa01214954b792898..6d6981635b4029a09ccc6115f0d17451 protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index bbee5d60204cf7c6e77cf337044e608d79d8462e..1080f96351535e4caa29120c65727280e361a042 100644 +index dd04eab7357c35f8a240994e42b2dc2330d40c77..5cf4449f48c9f46cc277ce080992c8acaead4173 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java @@ -120,6 +120,13 @@ public class Turtle extends Animal { @@ -657,7 +657,7 @@ index 66e58482f8422e5478b29f82271489d0449ceddb..cdc12cabee85c7090ff317068a98b0ac protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 2597ee3ca93653af04b5e620f3909c3791369bf0..f445c81d1054b897f8489cdb9cc9bb04096e3835 100644 +index 404b894a80c2400a1ca6d495049157637c0418f4..773351cd6c40e57a9c81d3d1b25161f282ad09c2 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -172,6 +172,13 @@ public class EnderDragon extends Mob implements Enemy { @@ -675,7 +675,7 @@ index 2597ee3ca93653af04b5e620f3909c3791369bf0..f445c81d1054b897f8489cdb9cc9bb04 return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0).add(Attributes.CAMERA_DISTANCE, 16.0); } diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 543ea15e63316564aa6c699863d952570d7e0df7..7032f6b01ee36422952ce564a388c4e1ffeb05c5 100644 +index 22f075e040f80e8cb0764056c456625b614855cb..874d347797b1aea439dc5cde2d5da679479cc352 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -221,6 +221,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -715,10 +715,10 @@ index b553c6dd60bd23fba7ee3df9886561fc7640f104..7f0e76437798f1bab7956722382e1517 @Override diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index 01c722932aaed2221badaa6231d8a20d005b087b..2d60c5e6426097302464e04bcfdd60abd08b96b9 100644 +index 893adb6acdb292c618753d12f6f891e0cce0f207..5b188b7121c62dc5c6ded6128e8f3b6a4d930fb0 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -266,6 +266,13 @@ public class Creeper extends Monster { +@@ -265,6 +265,13 @@ public class Creeper extends Monster { } // Purpur end - Config to make Creepers explode on death @@ -827,7 +827,7 @@ index c39031e8fdfb0dff7867d9525dbddde110242647..43ebfe06ce2a8c15787d72a8ef54cd6c return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index a803e9b43758b7bad9bb1f9b577a2c9c7bc040d2..04d092ad64f58b898f210266a2aba758ccc0577b 100644 +index fdba60041c4a41191e397d1dddea625348f243e1..6487f78d08d33dbbe325c148470850401b01d662 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -97,6 +97,13 @@ public class Guardian extends Monster { @@ -939,7 +939,7 @@ index 6017c3865c685c55ecf304af34b07e64563c5969..584aee58a1319da937eeb78d3015bc48 @Override diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index 854c78d567a446479a704fbf459885f2b164e54d..e361d1ecf9e9a27491bb8195fee6272dc903615c 100644 +index c8fd079f0b6726f4136b7c645a6d720fd1c97265..59c643c01c83a082710fc418768f3812a19c0fdb 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -112,6 +112,13 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { @@ -1029,7 +1029,7 @@ index 22c20e4360473cdbe9cda8bb7b3b30be85f16fe6..3c09f472ba54f8929782ac6a080ceabf public SoundEvent getHurtSound(final DamageSource source) { return this.isTiny() ? SoundEvents.SLIME_HURT_SMALL : SoundEvents.SLIME_HURT; diff --git a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java -index a966d253af27d5a8cc89a2454cf60377bdf7ce62..f43d33605e8d0d4ade0a5c6269bccb4d10668543 100644 +index a74793c70daa6c4f1bbdd41044026033bf86c860..076a0ab563dd3b7e41eb6c7d229634a3b3016a15 100644 --- a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +++ b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java @@ -165,6 +165,13 @@ public class SulfurCube extends AbstractCubeMob implements Bucketable, Shearable @@ -1101,7 +1101,7 @@ index 0150ebdcbb681bcf8128eec34fd6e3fbfb85a79f..bfd1a61d43fcc1293592a6199d7bab03 protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index 81d956085667b7564588b54b54c1150b8a082c97..18c177bd17873d87769dbcdd4ee3794fb828905c 100644 +index 59a6dac61c5b2ff57c53d2f79779d6432f9f2396..20881d924a4e69a2419b76e902f6e708bd2ac235 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -90,6 +90,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -1137,7 +1137,7 @@ index d06f6bf930277f08756752f7f259a57f456e7c38..db2ca5e6f5c5a0968e1fb76369ad2efd protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 013550c72a194977b1874f30aeda60d27b682853..f7e8b26f3acaff88aeb3e2cde93ec7922859e1ae 100644 +index 919cdb5087d484642deb871f7536f9fcc5f11dd0..c9bbbaaaf21f5e08b5cf3f6befb03cbf79595ad3 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -134,6 +134,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1173,7 +1173,7 @@ index 3cbb6f2ee343e6d3851e84e53cb1aafa55418b0f..5f25162930b7d18385d84715f4f72962 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index 12f87667ddeda1f57fe89f137b2df6cebef35c74..0890eb175438eb1dd39ca511c9ac332ef2a32e02 100644 +index c48e758fe08b753bbc5fd1e9fe2568a220f7368e..cd9bbc34fa32629065170154eee303a7db8e8ab8 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java @@ -51,6 +51,13 @@ public class Skeleton extends AbstractSkeleton { @@ -1299,7 +1299,7 @@ index 91800961ba5b724aac905ccd4fd1d0f915c93803..83c2d21587fc490eb7eb60c43a21da73 public boolean isSunSensitive() { return false; diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index f47f4a3f8e0f4f5a40f520a25e87e0068a564b4c..26f0ac03eaa3d33fa593ce65bc944872864a66a9 100644 +index d15c29736ddc0ceb27eb91c8d2e10016d8e9084c..9dac1e1bc0250122ac8d3a5c7fd0933660f2783c 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java @@ -152,6 +152,13 @@ public class Zombie extends Monster { @@ -1317,7 +1317,7 @@ index f47f4a3f8e0f4f5a40f520a25e87e0068a564b4c..26f0ac03eaa3d33fa593ce65bc944872 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 155ba4d03e7864b21e7a3dab854315b62d3b9e5b..b704a24142f79f40e72a2dd76d1448501d9f7f59 100644 +index d5abbe6c4d33a327e4f34a33c5e50a01ee72739e..72b8fd534aa4b3d62e5f063bf51692a97a91156e 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java @@ -133,6 +133,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { diff --git a/purpur-server/minecraft-patches/features/0017-API-for-any-mob-to-burn-daylight.patch b/purpur-server/minecraft-patches/features/0017-API-for-any-mob-to-burn-daylight.patch index eb8835019..a8b2600f9 100644 --- a/purpur-server/minecraft-patches/features/0017-API-for-any-mob-to-burn-daylight.patch +++ b/purpur-server/minecraft-patches/features/0017-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 8ca29762d465ba8ebeaa450bd6e1c4f77db5464c..0f5961a9fb49dbd77b682cf922cc14be48fe3397 100644 +index a4b74837096b4653b8504dbf446ad42277975e7e..ccb470d85b3f78939a27d8ed87a3745bf338db6d 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -558,6 +558,21 @@ public abstract class Entity @@ -32,7 +32,7 @@ index 8ca29762d465ba8ebeaa450bd6e1c4f77db5464c..0f5961a9fb49dbd77b682cf922cc14be this.type = type; this.level = level; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 166c8d92937d534646d7a7521529d30afaa6f618..82705d97a520ffd6b4b4a1e5c7bf5439d93bf269 100644 +index afad3bdd336280ab7d90f6447b486a059a4966e9..17c7619409249024bf436ac0b9d6fb569e6a76da 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -305,6 +305,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -59,7 +59,7 @@ index 166c8d92937d534646d7a7521529d30afaa6f618..82705d97a520ffd6b4b4a1e5c7bf5439 this.lastHurtByPlayer = EntityReference.read(input, "last_hurt_by_player"); this.lastHurtByPlayerMemoryTime = input.getIntOr("last_hurt_by_player_memory_time", 0); this.lastHurtByMob = EntityReference.read(input, "last_hurt_by_mob"); -@@ -3938,6 +3941,37 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3920,6 +3923,37 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F); } @@ -98,7 +98,7 @@ index 166c8d92937d534646d7a7521529d30afaa6f618..82705d97a520ffd6b4b4a1e5c7bf5439 protected void applyInput() { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 460ba9d3a192c5f17a1b5c4682bbbba3d2f8ebe2..00353f1668e4fb3d97c57175a5f141d6a39d70f7 100644 +index 3902dddb25c8d96390caf7bcda19db85f07f67ba..3402444417535121cc9da4924ef9c4dbfb134b0e 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -561,9 +561,9 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs @@ -265,7 +265,7 @@ index 83c2d21587fc490eb7eb60c43a21da73f144140c..afca08cfa58a25a7fa257eebf66dd888 @Override diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index 26f0ac03eaa3d33fa593ce65bc944872864a66a9..f104394d49989fe80462602cb06b2f58c4282fbb 100644 +index 9dac1e1bc0250122ac8d3a5c7fd0933660f2783c..947cfa465063246dfea805b0bdee1bed582b38aa 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java @@ -102,11 +102,12 @@ public class Zombie extends Monster { diff --git a/purpur-server/minecraft-patches/features/0019-Mobs-always-drop-experience.patch b/purpur-server/minecraft-patches/features/0019-Mobs-always-drop-experience.patch index e612430fa..c2baa31a4 100644 --- a/purpur-server/minecraft-patches/features/0019-Mobs-always-drop-experience.patch +++ b/purpur-server/minecraft-patches/features/0019-Mobs-always-drop-experience.patch @@ -41,7 +41,7 @@ index 523358fb9bfb393dde41fb90fed40ab8a54ba107..57b34d61c972123a2871da5abba851fb public float getWalkTargetValue(final BlockPos pos, final LevelReader level) { return 0.0F; diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java -index f4e063e0fe64e26f926523765eba83a8a61d6404..2a623511d609cfd3b4a9e056e12f18d19c2d8a96 100644 +index b3a47763c4dcb84cd5fc1003268582184fd595c2..f4483f893c301e338595cc2e79e9fe9915b7bedd 100644 --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java @@ -499,6 +499,13 @@ public class Bee extends Animal implements NeutralMob { @@ -59,7 +59,7 @@ index f4e063e0fe64e26f926523765eba83a8a61d6404..2a623511d609cfd3b4a9e056e12f18d1 public long getPersistentAngerEndTime() { return this.entityData.get(DATA_ANGER_END_TIME); diff --git a/net/minecraft/world/entity/animal/chicken/Chicken.java b/net/minecraft/world/entity/animal/chicken/Chicken.java -index fed0cce13f0b75395ba4398e2cc79b142c289e68..4c1ee5c54b882c85b122fcb0909b92204798d0ce 100644 +index 71db913c66ae1efa9d335d45ab70c63ddfae3a91..31dda8f31967e1e02c2a9e32cc0586afa9c416e1 100644 --- a/net/minecraft/world/entity/animal/chicken/Chicken.java +++ b/net/minecraft/world/entity/animal/chicken/Chicken.java @@ -125,6 +125,13 @@ public class Chicken extends Animal { @@ -365,7 +365,7 @@ index dc2800dd2f4c9f71c79d9f012be17398263d033d..adb530b59ce6080e281aad21e2165fd1 return "entity.minecraft.tropical_fish.predefined." + index; } diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java -index 4553c0d7528f3aea8434e353e4daf78b53ac831d..ca5b0b8081c4943bfbfba4f0f9284f0fdda3cf9f 100644 +index f5ee70d674fea7975aa1bfd206fb303907362c59..a5c8c4cd7fb80ee0fb87eba85b6a3095223b849c 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java @@ -221,6 +221,13 @@ public class Fox extends Animal { @@ -401,7 +401,7 @@ index 9744d757ae7dcc31291db469539ebd58db7b08a2..363a6f9e8d13312f93562cf3a2b1668b protected Brain makeBrain(final Brain.Packed packedBrain) { return BRAIN_PROVIDER.makeBrain(this, packedBrain); diff --git a/net/minecraft/world/entity/animal/golem/CopperGolem.java b/net/minecraft/world/entity/animal/golem/CopperGolem.java -index 53e17b3ebb5f66f00870c45fb0389ace08a2c144..646f5ce1df4b125427f2020788369549befb2694 100644 +index 31053ae3e64c3cbcfafd8d33a692022b8f2f821e..55bf908402a01f0f93538f2707d60dd1f59013bd 100644 --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java @@ -151,6 +151,13 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab @@ -437,7 +437,7 @@ index 0d47b1d7ffb09a883edde3c5c0a8e6eadec08642..e7114a76761bc89c76871868c8ed9d6d protected void registerGoals() { if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur - Iron golem calm anger options diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java -index efd9770fb2401650e4459fab8066cb0da9870e58..db2e018781f941a38c93b0aae27570ba1cf2048d 100644 +index 4aa522299a3194c569e8f7660fb44606931026da..11a89fe92567c9c7074ee53ecbd58e66530401f8 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -87,6 +87,13 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab @@ -509,7 +509,7 @@ index da60906faaca79efbfd29ed05b01a0c07978bab2..9aed9eb7a7c3b3fb653d6fed5f8d79f7 return AbstractNautilus.createAttributes().add(Attributes.MOVEMENT_SPEED, 1.1F); } diff --git a/net/minecraft/world/entity/animal/panda/Panda.java b/net/minecraft/world/entity/animal/panda/Panda.java -index af66c192d57d4f5b49b7a0e4c00cfbce6616eb9b..29569ad09390775aaa47b1da89aff061786137d6 100644 +index 70d1e64f50c86c6ece9ecb8f3237a925068e76c5..b1f680ffb815d57e717c59b0c44a2e0b27f5a94e 100644 --- a/net/minecraft/world/entity/animal/panda/Panda.java +++ b/net/minecraft/world/entity/animal/panda/Panda.java @@ -161,6 +161,13 @@ public class Panda extends Animal { @@ -527,7 +527,7 @@ index af66c192d57d4f5b49b7a0e4c00cfbce6616eb9b..29569ad09390775aaa47b1da89aff061 protected boolean canDispenserEquipIntoSlot(final EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND && this.canPickUpLoot(); diff --git a/net/minecraft/world/entity/animal/parrot/Parrot.java b/net/minecraft/world/entity/animal/parrot/Parrot.java -index e43fe2c45e79526ba954dba2260c49075ae1c556..0204a35ab612a6f59543d29efc6443fa9ecbffca 100644 +index d6ea604c3cc557d42afeb4fef7bcc7b06a60b475..3d80a83e7cfba3403cc1007734035e07d63e9de1 100644 --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java @@ -221,6 +221,13 @@ public class Parrot extends ShoulderRidingEntity { @@ -581,7 +581,7 @@ index c47640ebcf2db48bb27b671c907f3270eac3c126..46276e32dcc7884758e333c45f65ce03 public @Nullable AgeableMob getBreedOffspring(final ServerLevel level, final AgeableMob partner) { return EntityTypes.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING); diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -index d7b287459fb0633470efffd70dda67ad8177615a..c83df47628d63cafa5d47f76948b80e303a9ef0b 100644 +index 4d5870acc631e18a070cfb12f8b2d4b5b06619ee..e48446be1ba64a46232966efcd9e5d1e90d7938a 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -185,6 +185,13 @@ public class Rabbit extends Animal { @@ -596,10 +596,10 @@ index d7b287459fb0633470efffd70dda67ad8177615a..c83df47628d63cafa5d47f76948b80e3 + // Purpur end - Mobs always drop experience + @Override - public void registerGoals() { + protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/animal/sheep/Sheep.java b/net/minecraft/world/entity/animal/sheep/Sheep.java -index 0116de3318e769076481d3e5d479a810e235f0c0..341b88eae6d56911a3e3da71609fab4c15714de9 100644 +index d9f17420cc8e291896d51484d0f12473735a5f43..146003f7429be6668366e85955fff259b06781b3 100644 --- a/net/minecraft/world/entity/animal/sheep/Sheep.java +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java @@ -110,6 +110,13 @@ public class Sheep extends Animal implements Shearable { @@ -635,7 +635,7 @@ index e11e4e9134db7e59bd7f3112605206ad1f36cab6..079d7dfd726670a5e3ed2811813190ba protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/animal/squid/Squid.java b/net/minecraft/world/entity/animal/squid/Squid.java -index 6d6981635b4029a09ccc6115f0d17451089e09d4..cd1f9133775633eeeb12bbab0d4bb48f42b7efb0 100644 +index cd8ef74ec5662b01b295f41a33834b65d51b7fd5..dcb597337bc69be21f0924dda89a5299aa8d0f21 100644 --- a/net/minecraft/world/entity/animal/squid/Squid.java +++ b/net/minecraft/world/entity/animal/squid/Squid.java @@ -111,6 +111,13 @@ public class Squid extends AgeableWaterCreature { @@ -653,7 +653,7 @@ index 6d6981635b4029a09ccc6115f0d17451089e09d4..cd1f9133775633eeeb12bbab0d4bb48f protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/net/minecraft/world/entity/animal/turtle/Turtle.java b/net/minecraft/world/entity/animal/turtle/Turtle.java -index 1080f96351535e4caa29120c65727280e361a042..0481a0deeb6053ddc9be9bc835d2b95fba712982 100644 +index 5cf4449f48c9f46cc277ce080992c8acaead4173..779ae828cee17430bfa5f469d88c69a8f121eb4e 100644 --- a/net/minecraft/world/entity/animal/turtle/Turtle.java +++ b/net/minecraft/world/entity/animal/turtle/Turtle.java @@ -127,6 +127,13 @@ public class Turtle extends Animal { @@ -689,7 +689,7 @@ index cdc12cabee85c7090ff317068a98b0acc973fdbe..af82e593ac58eaa0e7e8b4abd0d152cf protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 7032f6b01ee36422952ce564a388c4e1ffeb05c5..44a9f5a1af987f4541a6848a92732df46dd1b2f5 100644 +index 874d347797b1aea439dc5cde2d5da679479cc352..cc17c8d1615e6f5a0cf164e05abad566722444bd 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -228,6 +228,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -725,10 +725,10 @@ index 7f0e76437798f1bab7956722382e1517f8f71121..257563b578762837cbea855fa42831f3 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/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index 2d60c5e6426097302464e04bcfdd60abd08b96b9..56cfc2b7cf9bd7edc966f59de091d2793c6adfb3 100644 +index 5b188b7121c62dc5c6ded6128e8f3b6a4d930fb0..9d8b9e3e21ee721f5ea9339143839eeaebd341ae 100644 --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -273,6 +273,13 @@ public class Creeper extends Monster { +@@ -272,6 +272,13 @@ public class Creeper extends Monster { } // Purpur end - Toggle for water sensitive mob damage @@ -833,7 +833,7 @@ index 43ebfe06ce2a8c15787d72a8ef54cd6c7cac2bfc..07dfe0e6fd431b8417fc7f823962e4d4 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 100.0) diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java -index 04d092ad64f58b898f210266a2aba758ccc0577b..f7c67e129d70012705e8d649995b8f82bf7b0796 100644 +index 6487f78d08d33dbbe325c148470850401b01d662..4e09d4f219a47de116e10821e79afaae66d01b4a 100644 --- a/net/minecraft/world/entity/monster/Guardian.java +++ b/net/minecraft/world/entity/monster/Guardian.java @@ -104,6 +104,13 @@ public class Guardian extends Monster { @@ -941,7 +941,7 @@ index 584aee58a1319da937eeb78d3015bc48e705bd64..929bd327f01ed28462c4ce4e7d2f3e18 final EntityType ignoredType, final LevelAccessor level, diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java -index e361d1ecf9e9a27491bb8195fee6272dc903615c..b93cc363a2d411f4ea2d70984fecc549417f098c 100644 +index 59c643c01c83a082710fc418768f3812a19c0fdb..942adc01489e9f6864c77ed57cd8eeafb731c856 100644 --- a/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java @@ -119,6 +119,13 @@ public class Vex extends Monster implements TraceableEntity, OwnableEntity { @@ -1031,7 +1031,7 @@ index 3c09f472ba54f8929782ac6a080ceabf10f09699..1faab89a0c6febdbbb15c8f1345fbd8e public SoundEvent getHurtSound(final DamageSource source) { return this.isTiny() ? SoundEvents.SLIME_HURT_SMALL : SoundEvents.SLIME_HURT; diff --git a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java -index f777ed1de1ec159fed3019bd5bfb711b9aad6146..611501ed6a141bf656e69f9248794b499393cc43 100644 +index 076a0ab563dd3b7e41eb6c7d229634a3b3016a15..ac302c326ea5dfa5826ff85197f147123b8a83bf 100644 --- a/net/minecraft/world/entity/monster/cubemob/SulfurCube.java +++ b/net/minecraft/world/entity/monster/cubemob/SulfurCube.java @@ -172,6 +172,13 @@ public class SulfurCube extends AbstractCubeMob implements Bucketable, Shearable @@ -1103,7 +1103,7 @@ index bfd1a61d43fcc1293592a6199d7bab0346f40c7f..05c0a84a2eb41ab9c19fd95e6745037d protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/illager/Pillager.java b/net/minecraft/world/entity/monster/illager/Pillager.java -index 18c177bd17873d87769dbcdd4ee3794fb828905c..9d6629c29dc471ef1db672cce4260a983d452cbd 100644 +index 20881d924a4e69a2419b76e902f6e708bd2ac235..b0a79d1c96362e2a50d4b3215f7449a7a5fb6e04 100644 --- a/net/minecraft/world/entity/monster/illager/Pillager.java +++ b/net/minecraft/world/entity/monster/illager/Pillager.java @@ -97,6 +97,13 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve @@ -1139,7 +1139,7 @@ index db2ca5e6f5c5a0968e1fb76369ad2efdee57e480..d42afe275f7a917d5784da2838972dff protected void registerGoals() { super.registerGoals(); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index f7e8b26f3acaff88aeb3e2cde93ec7922859e1ae..9246caa06976c258c15c95b52a156aebf63d89d7 100644 +index c9bbbaaaf21f5e08b5cf3f6befb03cbf79595ad3..e3ceb6f928fa428f80c6b2680564c8124b8e888d 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -141,6 +141,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1175,7 +1175,7 @@ index 5f25162930b7d18385d84715f4f72962c1efa93d..ee1a87f7811d22b5b33b3ae6b22fc533 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/net/minecraft/world/entity/monster/skeleton/Skeleton.java b/net/minecraft/world/entity/monster/skeleton/Skeleton.java -index 0890eb175438eb1dd39ca511c9ac332ef2a32e02..675faf3f02447fd73f48acc08c4b224114a0dc2e 100644 +index cd9bbc34fa32629065170154eee303a7db8e8ab8..f7fe246c39f8588037171f16b6cd80be87b21547 100644 --- a/net/minecraft/world/entity/monster/skeleton/Skeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/Skeleton.java @@ -58,6 +58,13 @@ public class Skeleton extends AbstractSkeleton { @@ -1301,7 +1301,7 @@ index afca08cfa58a25a7fa257eebf66dd888ccc1c734..75b57de8caf55d795ce10e115d657998 public boolean isSunSensitive() { return this.shouldBurnInDay; // Purpur - moved to LivingEntity; keep methods for ABI compatibility - API for any mob to burn daylight diff --git a/net/minecraft/world/entity/monster/zombie/Zombie.java b/net/minecraft/world/entity/monster/zombie/Zombie.java -index f104394d49989fe80462602cb06b2f58c4282fbb..0671b7c2a77d1173d58812abcfcad2461a42d240 100644 +index 947cfa465063246dfea805b0bdee1bed582b38aa..d4b92e44f9c211378f332398e2fc4233b55acf2d 100644 --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java @@ -160,6 +160,13 @@ public class Zombie extends Monster { @@ -1319,7 +1319,7 @@ index f104394d49989fe80462602cb06b2f58c4282fbb..0671b7c2a77d1173d58812abcfcad246 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 b704a24142f79f40e72a2dd76d1448501d9f7f59..e4be264d71c7980047194a86c5681020e822a67a 100644 +index 72b8fd534aa4b3d62e5f063bf51692a97a91156e..e797ac2444e7ec5c880db0a747ad301be5d3a94e 100644 --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java @@ -140,6 +140,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch index 3b74f5a36..9dda6c946 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch @@ -9,7 +9,7 @@ private final LevelDebugSynchronizers debugSynchronizers = new LevelDebugSynchronizers(this); // CraftBukkit start -@@ -644,8 +_,25 @@ +@@ -646,8 +_,25 @@ // CraftBukkit end this.tickTime = tickTime; this.server = server; @@ -36,7 +36,7 @@ ChunkGenerator generator = levelStem.generator(); // CraftBukkit start // Paper start - per-world time -@@ -739,6 +_,7 @@ +@@ -741,6 +_,7 @@ this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler); // Paper end - rewrite chunk system this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit @@ -44,7 +44,7 @@ } // Paper start -@@ -807,7 +_,7 @@ +@@ -809,7 +_,7 @@ } int percentage = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE); @@ -53,7 +53,7 @@ Optional> defaultClock = this.dimensionType().defaultClock(); org.bukkit.event.world.ClockTimeSkipEvent event = null; // Paper - per-world time if (this.getGameRules().get(GameRules.ADVANCE_TIME) && defaultClock.isPresent()) { -@@ -1048,9 +_,18 @@ +@@ -1050,9 +_,18 @@ && this.random.nextDouble() < difficulty.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses && !this.getBlockState(pos.below()).is(BlockTags.LIGHTNING_RODS); if (isTrap) { @@ -73,7 +73,7 @@ horse.setAge(0); horse.setPos(pos.getX(), pos.getY(), pos.getZ()); this.addFreshEntity(horse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit -@@ -1085,9 +_,35 @@ +@@ -1087,9 +_,35 @@ if (state.is(Blocks.SNOW)) { int currentLayers = state.getValue(SnowLayerBlock.LAYERS); if (currentLayers < Math.min(maxHeight, 8)) { @@ -109,7 +109,7 @@ } } else { org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockFormEvent(this, topPos, Blocks.SNOW.defaultBlockState(), Block.UPDATE_ALL, null); // CraftBukkit -@@ -1108,7 +_,7 @@ +@@ -1110,7 +_,7 @@ p -> p.is(PoiTypes.LIGHTNING_ROD), lightningRodPos -> lightningRodPos.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, lightningRodPos.getX(), lightningRodPos.getZ()) - 1, center, @@ -118,7 +118,7 @@ PoiManager.Occupancy.ANY ); return nearbyLightningRod.map(blockPos -> blockPos.above(1)); -@@ -1156,8 +_,26 @@ +@@ -1158,8 +_,26 @@ int percentage = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE); Component message; if (this.sleepStatus.areEnoughSleeping(percentage)) { @@ -145,7 +145,7 @@ message = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(percentage)); } -@@ -1323,6 +_,7 @@ +@@ -1325,6 +_,7 @@ public void resetWeatherCycle() { WeatherData weatherData = this.getWeatherData(); // CraftBukkit start @@ -153,7 +153,7 @@ weatherData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1330,6 +_,7 @@ +@@ -1332,6 +_,7 @@ weatherData.setRainTime(0); } // CraftBukkit end @@ -161,7 +161,7 @@ weatherData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. -@@ -2001,7 +_,7 @@ +@@ -2003,7 +_,7 @@ Explosion.BlockInteraction blockInteraction = switch (interactionType) { case NONE -> Explosion.BlockInteraction.KEEP; case BLOCK -> this.getDestroyType(GameRules.BLOCK_EXPLOSION_DROP_DECAY); @@ -170,7 +170,7 @@ ? this.getDestroyType(GameRules.MOB_EXPLOSION_DROP_DECAY) : Explosion.BlockInteraction.KEEP; case TNT -> this.getDestroyType(GameRules.TNT_EXPLOSION_DROP_DECAY); -@@ -2920,7 +_,7 @@ +@@ -2922,7 +_,7 @@ // Spigot start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message // Paper start - Fix merchant inventory not closing on entity removal 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 1c0fb8c91..2a9ca238d 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 @@ -17,10 +17,10 @@ + this.tpsBar = input.getBooleanOr("Purpur.TPSBar", false); // Purpur - Implement TPSBar + this.compassBar = input.getBooleanOr("Purpur.CompassBar", false); // Purpur - Add compass command + this.ramBar = input.getBooleanOr("Purpur.RamBar", false); // Purpur - Implement rambar command - // Paper start - Expand PlayerGameModeChangeEvent - this.loadGameTypes(input); - } -@@ -557,6 +_,9 @@ + this.loadGameTypes(input); // Paper - Expand PlayerGameModeChangeEvent + this.setShoulderEntityLeft(input.read("ShoulderEntityLeft", CompoundTag.CODEC).orElseGet(CompoundTag::new)); + this.setShoulderEntityRight(input.read("ShoulderEntityRight", CompoundTag.CODEC).orElseGet(CompoundTag::new)); +@@ -558,6 +_,9 @@ output.store("ShoulderEntityRight", CompoundTag.CODEC, this.getShoulderEntityRight()); } this.getBukkitEntity().setExtraData(output); // CraftBukkit @@ -30,7 +30,7 @@ } private void saveParentVehicle(final ValueOutput playerOutput) { -@@ -1194,6 +_,7 @@ +@@ -1185,6 +_,7 @@ // Paper - moved up to sendClientboundPlayerCombatKillPacket() this.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) { -@@ -1303,6 +_,13 @@ +@@ -1294,6 +_,13 @@ return false; } @@ -52,7 +52,7 @@ Entity entity = source.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)) -@@ -1544,7 +_,7 @@ +@@ -1535,7 +_,7 @@ } if (newLevel.dimension() == lastDimension) { @@ -61,7 +61,7 @@ this.connection.resetPosition(); transition.postTeleportTransition().onTransition(this); return this; -@@ -1567,6 +_,7 @@ +@@ -1558,6 +_,7 @@ profiler.pop(); profiler.push("placing"); @@ -69,7 +69,7 @@ this.setServerLevel(newLevel); this.connection.internalTeleport(PositionMoveRotation.of(transition), transition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); -@@ -1679,7 +_,7 @@ +@@ -1670,7 +_,7 @@ new AABB(bedCenter.x() - 8.0, bedCenter.y() - 5.0, bedCenter.z() - 8.0, bedCenter.x() + 8.0, bedCenter.y() + 5.0, bedCenter.z() + 8.0), monster -> monster.isPreventingPlayerRest(this.level(), this) ); @@ -78,7 +78,7 @@ return Either.left(Player.BedSleepingProblem.NOT_SAFE); } } -@@ -1715,7 +_,17 @@ +@@ -1706,7 +_,17 @@ CriteriaTriggers.SLEPT_IN_BED.trigger(this); }); if (!this.level().canSleepThroughNights()) { @@ -97,7 +97,7 @@ } this.level().updateSleepingPlayerList(); -@@ -1810,6 +_,7 @@ +@@ -1801,6 +_,7 @@ @Override public void openTextEdit(final SignBlockEntity sign, final boolean isFrontText) { @@ -105,7 +105,7 @@ this.connection.send(new ClientboundBlockUpdatePacket(this.level(), sign.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos(), isFrontText)); } -@@ -2154,6 +_,26 @@ +@@ -2145,6 +_,26 @@ this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -132,7 +132,7 @@ @Override public void completeUsingItem() { if (!this.useItem.isEmpty() && this.isUsingItem()) { -@@ -2391,6 +_,20 @@ +@@ -2382,6 +_,20 @@ ); } @@ -153,7 +153,7 @@ @Override public void sendSystemMessage(final Component message) { this.sendSystemMessage(message, false); -@@ -2542,7 +_,67 @@ +@@ -2533,7 +_,67 @@ public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -222,7 +222,7 @@ public ServerStatsCounter getStats() { return this.stats; -@@ -3167,4 +_,65 @@ +@@ -3158,4 +_,65 @@ return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index f6731007a..2ee754395 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -357,6 +_,20 @@ +@@ -356,6 +_,20 @@ } // Paper end - configuration phase API @@ -21,7 +21,7 @@ @Override public void tick() { if (this.ackBlockChangesUpTo > -1) { -@@ -375,6 +_,12 @@ +@@ -374,6 +_,12 @@ && this.server.playerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > TimeUnit.MINUTES.toMillis(this.server.playerIdleTimeout()) && !this.player.wonGame) { @@ -34,16 +34,16 @@ this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } } -@@ -696,6 +_,8 @@ - this.lastYaw = to.getYaw(); - this.lastPitch = to.getPitch(); +@@ -695,6 +_,8 @@ + this.lastYRot = to.getYaw(); + this.lastXRot = to.getPitch(); + if (!to.getWorld().getUID().equals(from.getWorld().getUID()) || to.getBlockX() != from.getBlockX() || to.getBlockY() != from.getBlockY() || to.getBlockZ() != from.getBlockZ() || to.getYaw() != from.getYaw() || to.getPitch() != from.getPitch()) this.player.resetLastActionTime(); // Purpur - AFK API + Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -775,6 +_,7 @@ +@@ -774,6 +_,7 @@ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { @@ -51,7 +51,7 @@ this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1346,6 +_,10 @@ +@@ -1345,6 +_,10 @@ final int maxBookPageSize = pageMax.intValue(); final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; @@ -62,7 +62,7 @@ for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1370,7 +_,8 @@ +@@ -1369,7 +_,8 @@ } if (byteTotal > byteAllowed) { @@ -72,7 +72,7 @@ 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; } -@@ -1389,31 +_,45 @@ +@@ -1388,31 +_,45 @@ Optional title = packet.title(); title.ifPresent(contents::add); contents.addAll(packet.pages()); @@ -122,7 +122,7 @@ writtenBook.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getPlainTextName(), 0, pages, true) ); -@@ -1426,6 +_,16 @@ +@@ -1425,6 +_,16 @@ return this.player.isTextFilteringEnabled() ? Filterable.passThrough(text.filteredOrEmpty()) : Filterable.from(text); } @@ -139,7 +139,7 @@ @Override public void handleEntityTagQuery(final ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); -@@ -1465,7 +_,15 @@ +@@ -1464,7 +_,15 @@ @Override public void handleMovePlayer(final ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -156,7 +156,7 @@ this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel level = this.player.level(); -@@ -1650,7 +_,7 @@ +@@ -1633,7 +_,7 @@ movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -165,16 +165,16 @@ } // Paper } -@@ -1715,6 +_,8 @@ - this.lastYaw = to.getYaw(); - this.lastPitch = to.getPitch(); +@@ -1685,6 +_,8 @@ + this.lastYRot = to.getYaw(); + this.lastXRot = to.getPitch(); + if (!to.getWorld().getUID().equals(from.getWorld().getUID()) || to.getBlockX() != from.getBlockX() || to.getBlockY() != from.getBlockY() || to.getBlockZ() != from.getBlockZ() || to.getYaw() != from.getYaw() || to.getPitch() != from.getPitch()) this.player.resetLastActionTime(); // Purpur - AFK API + Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1770,6 +_,13 @@ +@@ -1740,6 +_,13 @@ this.player.tryResetCurrentImpulseContext(); } @@ -188,7 +188,7 @@ this.player.checkMovementStatistics(this.player.getX() - startX, this.player.getY() - startY, this.player.getZ() - startZ); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1790,6 +_,17 @@ +@@ -1760,6 +_,17 @@ } } @@ -206,7 +206,7 @@ private boolean shouldCheckPlayerMovement(final boolean isFallFlying) { if (this.isSingleplayerOwner()) { return false; -@@ -2231,6 +_,7 @@ +@@ -2201,6 +_,7 @@ boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -214,7 +214,7 @@ org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemStack, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2874,6 +_,7 @@ +@@ -2844,6 +_,7 @@ ItemStack mainHandItem = this.player.getMainHandItem(); if (this.player.isWithinAttackRange(mainHandItem, targetBounds, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience if (!mainHandItem.has(DataComponents.PIERCING_WEAPON)) { @@ -222,7 +222,7 @@ if (target instanceof ItemEntity || target instanceof ExperienceOrb || target == this.player -@@ -3656,7 +_,7 @@ +@@ -3626,7 +_,7 @@ @Override public void handleChangeGameMode(final ServerboundChangeGameModePacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/SaturationMobEffect.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/SaturationMobEffect.java.patch index e68a5cbfc..80c5b39cd 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/SaturationMobEffect.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/SaturationMobEffect.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/effect/SaturationMobEffect.java +++ b/net/minecraft/world/effect/SaturationMobEffect.java @@ -16,7 +_,8 @@ - int oldFoodLevel = player.getFoodData().foodLevel; + int oldFoodLevel = player.getFoodData().getFoodLevel(); org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(player, amplification + 1 + oldFoodLevel); if (!event.isCancelled()) { - player.getFoodData().eat(event.getFoodLevel() - oldFoodLevel, 1.0F); 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 3bde4174b..f4a0bfabf 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 @@ -14,14 +14,14 @@ public double zOld; + public float maxUpStep; // Purpur - Add option to set armorstand step height public boolean noPhysics; -- public final RandomSource random = SHARED_RANDOM; // Paper - Share random for entities to make them more random +- protected final RandomSource random = SHARED_RANDOM; // Paper - Share random for entities to make them more random + public final RandomSource random; // Paper - Share random for entities to make them more random // Purpur - Add toggle for RNG manipulation public int tickCount; private int remainingFireTicks; private final EntityFluidInteraction fluidInteraction = new EntityFluidInteraction(Set.of(FluidTags.WATER, FluidTags.LAVA)); @@ -331,8 +_,8 @@ public @Nullable PortalProcessor portalProcess; - public int portalCooldown; + private int portalCooldown; private boolean invulnerable; - protected UUID uuid = Mth.createInsecureUUID(this.random); - protected String stringUUID = this.uuid.toString(); @@ -66,7 +66,7 @@ && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage -+ if (this.level.purpurConfig.teleportOnNetherCeilingDamage && this.level.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER && this instanceof ServerPlayer player) player.teleport(org.bukkit.craftbukkit.util.CraftLocation.toBukkit(this.level.levelData.getRespawnData().pos(), this.level)); else // Purpur - Add option to teleport to spawn on nether ceiling damage ++ if (this.level.purpurConfig.teleportOnNetherCeilingDamage && this.level.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER && this instanceof ServerPlayer player) player.teleport(org.bukkit.craftbukkit.util.CraftLocation.toBukkit(this.level.getLevelData().getRespawnData().pos(), this.level)); else // Purpur - Add option to teleport to spawn on nether ceiling damage this.onBelowWorld(); } } 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 8dfd1a436..265db8577 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 @@ -6,7 +6,7 @@ if (damagePerBlock > 0.0) { + // Purpur start - Add option to teleport to spawn if outside world border + if (this.level().purpurConfig.teleportIfOutsideBorder && this instanceof ServerPlayer serverPlayer) { -+ serverPlayer.teleport(org.bukkit.craftbukkit.util.CraftLocation.toBukkit(this.level().levelData.getRespawnData().pos(), this.level())); ++ serverPlayer.teleport(org.bukkit.craftbukkit.util.CraftLocation.toBukkit(this.level().getLevelData().getRespawnData().pos(), this.level())); + return; + } + // Purpur end - Add option to teleport to spawn if outside world border @@ -31,7 +31,7 @@ } @Override -@@ -1070,14 +_,32 @@ +@@ -1046,14 +_,32 @@ if (targetingEntity != null) { ItemStack itemStack = this.getItemBySlot(EquipmentSlot.HEAD); @@ -72,7 +72,7 @@ return visibilityPercent; } -@@ -1127,6 +_,7 @@ +@@ -1103,6 +_,7 @@ Iterator iterator = this.activeEffects.values().iterator(); while (iterator.hasNext()) { MobEffectInstance effect = iterator.next(); @@ -80,7 +80,7 @@ EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED); if (event.isCancelled()) { continue; -@@ -1459,7 +_,23 @@ +@@ -1441,7 +_,23 @@ this.stopSleeping(); } @@ -105,7 +105,7 @@ if (damage < 0.0F) { damage = 0.0F; } -@@ -1722,10 +_,10 @@ +@@ -1704,10 +_,10 @@ protected @Nullable Player resolvePlayerResponsibleForDamage(final DamageSource source) { Entity sourceEntity = source.getEntity(); if (sourceEntity instanceof Player playerSource) { @@ -118,7 +118,7 @@ } else { this.lastHurtByPlayer = null; this.lastHurtByPlayerMemoryTime = 0; -@@ -1777,6 +_,17 @@ +@@ -1759,6 +_,17 @@ } } @@ -136,7 +136,7 @@ final org.bukkit.inventory.EquipmentSlot handSlot = (usedHand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(usedHand) : null; final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(protectionItem == null); -@@ -1930,8 +_,10 @@ +@@ -1912,8 +_,10 @@ protected void dropAllDeathLoot(final ServerLevel level, final DamageSource source) { boolean playerKilled = this.lastHurtByPlayerMemoryTime > 0; if (this.shouldDropLoot(level)) { @@ -147,7 +147,7 @@ } this.dropEquipment(level); -@@ -3280,6 +_,7 @@ +@@ -3262,6 +_,7 @@ float dmg = (float)(diff * 10.0 - 3.0); if (dmg > 0.0F) { this.playSound(this.getFallDamageSound((int)dmg), 1.0F, 1.0F); @@ -155,7 +155,7 @@ this.hurt(this.damageSources().flyIntoWall(), dmg); } } -@@ -4773,6 +_,12 @@ +@@ -4755,6 +_,12 @@ ? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND) : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.typeHolder()); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch index 53bb270e0..b70d4cbfc 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch @@ -9,7 +9,7 @@ xpCount = 12000; } xpCount = this.expToDrop; // CraftBukkit - SPIGOT-2420: Moved up to #getExpReward method -@@ -960,6 +_,7 @@ +@@ -965,6 +_,7 @@ @Override protected boolean canRide(final Entity vehicle) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch index 2bb81f841..692bc6439 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch @@ -63,7 +63,7 @@ } this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); -@@ -579,6 +_,7 @@ +@@ -584,6 +_,7 @@ @Override protected boolean canRide(final Entity vehicle) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Creeper.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Creeper.java.patch index 56740ff90..cdcb340ac 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Creeper.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Creeper.java.patch @@ -2,13 +2,13 @@ +++ b/net/minecraft/world/entity/monster/Creeper.java @@ -56,6 +_,7 @@ public int explosionRadius = 3; - public boolean droppedSkulls; + private boolean droppedSkulls; public @Nullable Entity entityIgniter; // CraftBukkit + private boolean exploding = false; // Purpur - Config to make Creepers explode on death public Creeper(final EntityType type, final Level level) { super(type, level); -@@ -159,6 +_,27 @@ +@@ -159,6 +_,26 @@ return false; // CraftBukkit } @@ -25,11 +25,10 @@ + + // Purpur start - Config to make Creepers explode on death + @Override -+ protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel world, DamageSource damageSource) { -+ if (!this.exploding && this.level().purpurConfig.creeperExplodeWhenKilled && damageSource.getEntity() instanceof net.minecraft.server.level.ServerPlayer) { ++ protected void dropAllDeathLoot(final ServerLevel level, final DamageSource source) { ++ if (!this.exploding && this.level().purpurConfig.creeperExplodeWhenKilled && source.getEntity() instanceof net.minecraft.server.level.ServerPlayer) { + this.explodeCreeper(); + } -+ return super.dropAllDeathLoot(world, damageSource); + } + // Purpur end - Config to make Creepers explode on death + diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch index 41affda87..d5e84e94c 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch @@ -2,7 +2,7 @@ +++ b/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java @@ -79,6 +_,7 @@ private @Nullable List piercedAndKilledEntities; - public ItemStack pickupItemStack = this.getDefaultPickupItem(); + private ItemStack pickupItemStack = this.getDefaultPickupItem(); public @Nullable ItemStack firedFromWeapon = null; + public net.minecraft.world.item.enchantment.ItemEnchantments actualEnchantments = net.minecraft.world.item.enchantment.ItemEnchantments.EMPTY; // Purpur - Add an option to fix MC-3304 projectile looting diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChestBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChestBlock.java.patch index e14b756bf..08317456b 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChestBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChestBlock.java.patch @@ -3,7 +3,7 @@ @@ -348,6 +_,7 @@ } - public static boolean isBlockedChestByBlock(final BlockGetter level, final BlockPos pos) { + private static boolean isBlockedChestByBlock(final BlockGetter level, final BlockPos pos) { + if (level instanceof Level level1 && level1.purpurConfig.chestOpenWithBlockOnTop) return false; // Purpur - Option for chests to open even with a solid block on top BlockPos above = pos.above(); return level.getBlockState(above).isRedstoneConductor(level, above); diff --git a/purpur-server/paper-patches/features/0002-Ridables.patch b/purpur-server/paper-patches/features/0002-Ridables.patch index 682b6d834..2d351189f 100644 --- a/purpur-server/paper-patches/features/0002-Ridables.patch +++ b/purpur-server/paper-patches/features/0002-Ridables.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index de6fe0b783a145f6571bf73665e7107430f22592..612e3457d537d6129437443753cad3e48590d542 100644 +index 58f49ecba21b2cc06dfe5c0aa931bfef6aece46f..de9bdce25392d8df4cdf2037d4fad07b469a7d9e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1344,4 +1344,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1341,4 +1341,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return this.entity.get(io.papermc.paper.datacomponent.PaperDataComponentType.bukkitToMinecraft(type)) != null; } @@ -36,7 +36,7 @@ index de6fe0b783a145f6571bf73665e7107430f22592..612e3457d537d6129437443753cad3e4 + // 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 72bc687efb64e0b3b3802775b2d1b8b133b092fb..dfe878e2bcbf10c8b148b755db3e3ba05b575d8f 100644 +index a5ea91906abebf44cfbfa120c535b8c391ab1acd..f3fd610c520dfe4b854a0cca7df0f4e3e1ef0da2 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -656,6 +656,15 @@ public class CraftEventFactory { diff --git a/purpur-server/paper-patches/features/0004-API-for-any-mob-to-burn-daylight.patch b/purpur-server/paper-patches/features/0004-API-for-any-mob-to-burn-daylight.patch index 66dd97a67..9db0a1feb 100644 --- a/purpur-server/paper-patches/features/0004-API-for-any-mob-to-burn-daylight.patch +++ b/purpur-server/paper-patches/features/0004-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 612e3457d537d6129437443753cad3e48590d542..a188eb750d6371f7e550a8971135a81de5823032 100644 +index de9bdce25392d8df4cdf2037d4fad07b469a7d9e..71d14d016e97e3fb93d2c10862afd0c314b9a367 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -127,6 +127,13 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -24,10 +24,10 @@ index 612e3457d537d6129437443753cad3e48590d542..a188eb750d6371f7e550a8971135a81d Preconditions.checkArgument(entity != null, "Unknown entity"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 033f0bc33c7a1fb5d16f354953242f9eeb30d309..46b1ee090e483206846fddc1cd273b389753b042 100644 +index eb8d43f86726bc3c4d917f9244a71effd6203337..a7fd65554e269615fd3502b9232a91c542307c88 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -1138,4 +1138,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1137,4 +1137,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { manager.untrackWaypoint(getHandle()); manager.trackWaypoint(getHandle()); } 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 0185ed344..9bdfd3963 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 -@@ -1951,6 +_,52 @@ +@@ -1944,6 +_,52 @@ return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java.patch index 18d1a9162..f18d47958 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java.patch @@ -17,7 +17,7 @@ @@ -88,7 +_,7 @@ @Override - public void sendMessage(final net.kyori.adventure.identity.Identity identity, final net.kyori.adventure.text.Component message, final net.kyori.adventure.audience.MessageType type) { + public void sendMessage(final net.kyori.adventure.text.Component message) { - this.sendRawMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serialize(message)); + this.sendMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serialize(message)); // Purpur - Rebrand } diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch index 665626d93..ef0ce31a7 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch @@ -15,7 +15,7 @@ - this.getHandle().listName = name.equals(this.getName()) ? null : CraftChatMessage.fromStringOrNull(name); + this.getHandle().listName = name.equals(this.getName()) ? null : useMM ? io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(name)) : CraftChatMessage.fromStringOrNull(name); // Purpur - AFK API if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined - for (ServerPlayer player : this.server.getHandle().players) { + for (ServerPlayer player : this.server.getHandle().getPlayers()) { if (player.getBukkitEntity().canSee(this)) { @@ -987,6 +_,80 @@ } @@ -98,9 +98,9 @@ @Override public void sendBlockDamage(Location loc, float progress, org.bukkit.entity.Entity source) { Preconditions.checkArgument(source != null, "source must not be null"); -@@ -2491,6 +_,28 @@ +@@ -2490,6 +_,28 @@ public float getWalkSpeed() { - return this.getHandle().getAbilities().walkingSpeed * 2f; + return this.getHandle().getAbilities().getWalkingSpeed() * 2.0F; } + + // Purpur start - OfflinePlayer API @@ -126,4 +126,4 @@ + // Purpur end - OfflinePlayer API private void validateSpeed(float value) { - Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); + Preconditions.checkArgument(value <= 1.0F && value >= -1.0F, "Speed value (%s) need to be between -1 and 1", value); diff --git a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch index 61556048d..f9633a6c0 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch @@ -1,6 +1,6 @@ --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -@@ -92,4 +_,18 @@ +@@ -89,4 +_,18 @@ public void enterInvulnerabilityPhase() { this.getHandle().makeInvulnerable(); } diff --git a/purpur-server/paper-patches/files/src/main/java/org/spigotmc/WatchdogThread.java.patch b/purpur-server/paper-patches/files/src/main/java/org/spigotmc/WatchdogThread.java.patch index 7dc409927..483f0efa5 100644 --- a/purpur-server/paper-patches/files/src/main/java/org/spigotmc/WatchdogThread.java.patch +++ b/purpur-server/paper-patches/files/src/main/java/org/spigotmc/WatchdogThread.java.patch @@ -40,7 +40,7 @@ - logger.log(Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):"); // Paper + logger.log(Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Purpur!):"); // Paper // Purpur - Rebrand FeatureHooks.dumpAllChunkLoadInfo(MinecraftServer.getServer(), isLongTimeout); // Paper - log detailed tick information - WatchdogThread.dumpThread(ManagementFactory.getThreadMXBean().getThreadInfo(MinecraftServer.getServer().serverThread.threadId(), Integer.MAX_VALUE), logger); + WatchdogThread.dumpThread(ManagementFactory.getThreadMXBean().getThreadInfo(MinecraftServer.getServer().getRunningThread().threadId(), Integer.MAX_VALUE), logger); logger.log(Level.SEVERE, "------------------------------"); @@ -120,7 +_,7 @@ WatchdogThread.dumpThread(thread, logger); diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java b/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java index 28b790cb6..65301b22a 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/controller/WaterMoveControllerWASD.java @@ -36,7 +36,7 @@ public class WaterMoveControllerWASD extends MoveControllerWASD