Updated Upstream (Paper)

Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@9b9de827 Update Alternate Current patch to v1.9.1 (#12115)
PaperMC/Paper@c62252e1 Add lore content guard (#12116)
PaperMC/Paper@40416784 [ci/skip] Mention missing World#regenerateChunk implementation in jd (#12109)
PaperMC/Paper@a6e82d90 [ci/skip] Clarify getChunkAtAsyncUrgently javadocs (#12125)
PaperMC/Paper@cb25c0cf [ci/skip] Fix annotation fields used in NMS getBukkitEntity (#12120)
PaperMC/Paper@00701267 [ci/skip] improvement example in javadoc for DatapackRegistrar (#12122)
PaperMC/Paper@608f004a add method on ItemStack to edit pdc (#12022)
PaperMC/Paper@7bee9971 Cleanup damage source a bit (#12106)
PaperMC/Paper@b9023b5d Add EntityAttemptSmashAttackEvent (#12113)
PaperMC/Paper@a3781ff3 Separate tick count to ensure vanilla parity (#12077)
PaperMC/Paper@2a4a1154 Add EntityEquipmentChangedEvent (#12011)
PaperMC/Paper@06f96dd6 Improvement in /plugins command (#12121)
PaperMC/Paper@28d07dc5 use correct spigot plugin count
PaperMC/Paper@60394c5b Fix PlayerReadyArrowEvent cancellation desync (#12111)
PaperMC/Paper@b27e11cc Fix bad world to chunk coordinate example in javadocs (#12131)
PaperMC/Paper@88cdd220 Fixup luck and random implementation in CB loot-tables (#11926)
PaperMC/Paper@84609dc0 Don't auto-create any brig redirects (#11954)
PaperMC/Paper@8eb8e44a Allow For Default Titles in InventoryView Builders (#12013)
This commit is contained in:
granny
2025-02-17 17:19:02 -08:00
parent 22bd4186ca
commit b0d36caeda
27 changed files with 144 additions and 153 deletions

View File

@@ -2,7 +2,7 @@ group = org.purpurmc.purpur
version = 1.21.4-R0.1-SNAPSHOT version = 1.21.4-R0.1-SNAPSHOT
mcVersion = 1.21.4 mcVersion = 1.21.4
paperCommit = 6cfa2f7f315cbad23d7b12984b751f2721b496b6 paperCommit = 8eb8e44ac32a99f53da7af50e800ac8831030580
org.gradle.configuration-cache = true org.gradle.configuration-cache = true
org.gradle.caching = true org.gradle.caching = true

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/org/bukkit/World.java --- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java
@@ -4255,6 +_,86 @@ @@ -4278,6 +_,86 @@
@Nullable @Nullable
public DragonBattle getEnderDragonBattle(); public DragonBattle getEnderDragonBattle();

View File

@@ -1,7 +1,7 @@
--- a/src/main/java/org/bukkit/inventory/ItemStack.java --- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -21,6 +_,13 @@ @@ -21,6 +_,13 @@
import org.bukkit.material.MaterialData; import org.bukkit.persistence.PersistentDataContainer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
+// Purpur start - ItemStack convenience methods +// Purpur start - ItemStack convenience methods
@@ -14,7 +14,7 @@
/** /**
* Represents a stack of items. * Represents a stack of items.
@@ -1329,4 +_,482 @@ @@ -1345,4 +_,482 @@
return this.craftDelegate.matchesWithoutData(item, excludeTypes, ignoreCount); return this.craftDelegate.matchesWithoutData(item, excludeTypes, ignoreCount);
} }
// Paper end - data component API // Paper end - data component API

View File

@@ -30,7 +30,7 @@ index 121b57c7f5345f5d8884eaa1d36dac79fb7d42ef..9afbfe9bf493e09ca1963e8956ab7573
/* Drop global time updates /* Drop global time updates
if (this.tickCount % 20 == 0) { if (this.tickCount % 20 == 0) {
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 5cf2c7f8fb05a91ed17f1d9c07f7d3e748738058..3770dc90d9412c6378c0bd57a651b9c3e62b9a72 100644 index 412472b3f6d27ca65759f8422e17b536912e3a99..59d03ddc42d53e2b825abe0cf2ab24e85d586a19 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -217,6 +217,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -217,6 +217,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -62,7 +62,7 @@ index a6f771cbee878eb383b67c61fa2469f2916413b5..d77381237f8a7d1b2f280a5032f5e1c8
private void updatePlayerAttributes() { private void updatePlayerAttributes() {
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index d681e14d33a8de6ca2c7f0a2e1ff9bb9d55adbbb..ee002c2cef9d4810fdacac71de77e948f5b0e89d 100644 index e5ffb15ac5faa0e863af624091dcd35ffa4ffe94..b45b37fcdfe0d3877b368444f8f6a376d6373f59 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2835,6 +2835,8 @@ public class ServerGamePacketListenerImpl @@ -2835,6 +2835,8 @@ public class ServerGamePacketListenerImpl
@@ -75,10 +75,10 @@ index d681e14d33a8de6ca2c7f0a2e1ff9bb9d55adbbb..ee002c2cef9d4810fdacac71de77e948
if ((target instanceof Bucketable && target instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { if ((target instanceof Bucketable && target instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it 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 diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 43a4427a8f327fbb224cb25e63a5c6b244eb9b09..62a38ecedbd579b32a8fd9cff5a433bfe635fc62 100644 index ff2e8a40035c8e268733f87c17566b28d5baa22a..f02723a017d2c21c425fb11d2814052185960b97 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -3151,6 +3151,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -3152,6 +3152,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.passengers = ImmutableList.copyOf(list); this.passengers = ImmutableList.copyOf(list);
} }
@@ -92,7 +92,7 @@ index 43a4427a8f327fbb224cb25e63a5c6b244eb9b09..62a38ecedbd579b32a8fd9cff5a433bf
this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); this.gameEvent(GameEvent.ENTITY_MOUNT, passenger);
} }
} }
@@ -3192,6 +3199,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -3193,6 +3200,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return false; return false;
} }
// CraftBukkit end // CraftBukkit end
@@ -107,7 +107,7 @@ index 43a4427a8f327fbb224cb25e63a5c6b244eb9b09..62a38ecedbd579b32a8fd9cff5a433bf
if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) {
this.passengers = ImmutableList.of(); this.passengers = ImmutableList.of();
} else { } else {
@@ -5115,4 +5130,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -5116,4 +5131,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return ((ServerLevel) this.level).isPositionEntityTicking(this.blockPosition()); return ((ServerLevel) this.level).isPositionEntityTicking(this.blockPosition());
} }
// Paper end - Expose entity id counter // Paper end - Expose entity id counter
@@ -177,7 +177,7 @@ index 95d78dcdb6777df73898694367ee17b1cb76d7a2..d0313fd5368baa53ec511c8c07fc78a1
protected ParticleOptions getInkParticle() { protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK; return ParticleTypes.GLOW_SQUID_INK;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index f41d5ffe83e3cfb4c30d150f8b66f8f2568ae20c..8c2bdb1775f7c4110c5f967b1052eba6a8fcbbfa 100644 index c370bc7fa01e13bcd4a0be83dc5387367d2bf28d..98abba1edeb43f026795db6da10517f9561137db 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -250,9 +250,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -250,9 +250,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -210,7 +210,7 @@ index f41d5ffe83e3cfb4c30d150f8b66f8f2568ae20c..8c2bdb1775f7c4110c5f967b1052eba6
@Override @Override
protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) {
@@ -3537,8 +3538,10 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3555,8 +3556,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.pushEntities(); this.pushEntities();
profilerFiller.pop(); profilerFiller.pop();
// Paper start - Add EntityMoveEvent // Paper start - Add EntityMoveEvent
@@ -223,7 +223,7 @@ index f41d5ffe83e3cfb4c30d150f8b66f8f2568ae20c..8c2bdb1775f7c4110c5f967b1052eba6
Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); 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()); 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()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone());
@@ -3548,6 +3551,21 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3566,6 +3569,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch());
} }
} }
@@ -568,7 +568,7 @@ index c0997c8c0f8ee4474d3acdd5938b1879c4e589a2..28ae152125ed83d8917674b6068f227f
double d = this.wantedX - this.fish.getX(); double d = this.wantedX - this.fish.getX();
double d1 = this.wantedY - this.fish.getY(); double d1 = this.wantedY - this.fish.getY();
diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java
index 3793570827eb6ca21c6b990d76c679c00ad100f4..af0cf64b4c74d290dec8032f8a6127867e301130 100644 index 646bdd1c5d5a8b6459ee8b94e887d3d19442ea05..1c27e44ca6744150e8a107a00bb00fb4784acf3b 100644
--- a/net/minecraft/world/entity/animal/Bee.java --- a/net/minecraft/world/entity/animal/Bee.java
+++ b/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java
@@ -145,6 +145,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -145,6 +145,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -966,7 +966,7 @@ index 8be0dd148d88dfdfb9efab91124c829e60b5dea5..35bce598bb5857356823594d2a001006
this.setAirSupply(this.getMaxAirSupply()); this.setAirSupply(this.getMaxAirSupply());
} else { } else {
diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java
index ddc252c76cedec0a0e9e268d8a874015a5ad52fe..8b0a813f9dd001c6dd108ba7aac04d134a20fbc1 100644 index 2455324b49e28c57e1b154fd6d9a4d82ee289234..d31ffaba61098568c3134d0a10e1513b10dc8728 100644
--- a/net/minecraft/world/entity/animal/Fox.java --- a/net/minecraft/world/entity/animal/Fox.java
+++ b/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java
@@ -129,6 +129,44 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> { @@ -129,6 +129,44 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
@@ -1701,7 +1701,7 @@ index e686c500e4b5f3e7b0e808af8b2e43ddbd163bef..c27bb9e8a4a5e8fdc8ae28dae8203859
this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0));
this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, stack -> stack.is(ItemTags.SHEEP_FOOD), false)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, stack -> stack.is(ItemTags.SHEEP_FOOD), false));
diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java
index 29427515b648b84248f486c156c5cd7a0995ba14..52de92b118b613217b8f92ff672c01ddf798a1fc 100644 index a26d57a16d06adb7fbf7abf1baeda2ab1824853d..6a4a43b86d4b3812bba7b7d8bdb95eb06d234355 100644
--- a/net/minecraft/world/entity/animal/SnowGolem.java --- a/net/minecraft/world/entity/animal/SnowGolem.java
+++ b/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java
@@ -61,12 +61,31 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -61,12 +61,31 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
@@ -1861,7 +1861,7 @@ index fa5f7f7d54083f9ea2095dd44362069d00e0b9a5..1e31a39b276e1c5ae767da7af0b53600
return "entity.minecraft.tropical_fish.predefined." + variantId; return "entity.minecraft.tropical_fish.predefined." + variantId;
} }
diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java
index 354ec2b987882d8f40ef4ac5257183d2fda73bb8..98cb91574c8d2bdb6d180256f657ecc67987a6fe 100644 index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..cf8daa9897b978ffb89e01d63257a9ea35dcc8a4 100644
--- a/net/minecraft/world/entity/animal/Turtle.java --- a/net/minecraft/world/entity/animal/Turtle.java
+++ b/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java
@@ -84,6 +84,23 @@ public class Turtle extends Animal { @@ -84,6 +84,23 @@ public class Turtle extends Animal {
@@ -4377,7 +4377,7 @@ index ce690b564ea8ee055823928169fe605893498f3d..78671f02ef28f4a3b796b357d21fb4c9
if (isFood && !this.isSilent()) { if (isFood && !this.isSilent()) {
this.level() this.level()
diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java diff --git a/net/minecraft/world/entity/monster/Vex.java b/net/minecraft/world/entity/monster/Vex.java
index 7f1cdea810db24182f8f87076c42a19b1b43e98a..26528bc9a9cffb68f82917a3e70900cfb65304d7 100644 index af3fef70998cff4e4832adfa2071832324ebd91c..f5d3b8e3a84ffb2fe1c0620edd8857362cf696f5 100644
--- a/net/minecraft/world/entity/monster/Vex.java --- a/net/minecraft/world/entity/monster/Vex.java
+++ b/net/minecraft/world/entity/monster/Vex.java +++ b/net/minecraft/world/entity/monster/Vex.java
@@ -58,6 +58,50 @@ public class Vex extends Monster implements TraceableEntity { @@ -58,6 +58,50 @@ public class Vex extends Monster implements TraceableEntity {
@@ -5047,7 +5047,7 @@ index fab309dc34eb88f2b9c844078f167885121675c1..0f8ec3abead11c46205cd21290c65ec2
if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading
this.setTradingPlayer(player); this.setTradingPlayer(player);
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index 3ca4dd7fdb3b8205d72593c13a0fe76e86f76095..ca998a8a480af63d4a5f58a1f4490528a7b33c69 100644 index 87aabf903e64a9ab241917967616cf78938658f4..d972774332836c91a2cc31bfd89a21889cb9954b 100644
--- a/net/minecraft/world/entity/player/Player.java --- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java
@@ -220,6 +220,19 @@ public abstract class Player extends LivingEntity { @@ -220,6 +220,19 @@ public abstract class Player extends LivingEntity {
@@ -5088,7 +5088,7 @@ index 4880db97135d54fa72f64c108b2bd4ded096438b..bc102b049047d6e2a1d29e10f92cdf5a
protected double getDefaultGravity() { protected double getDefaultGravity() {
return 0.06; return 0.06;
diff --git a/net/minecraft/world/entity/projectile/WitherSkull.java b/net/minecraft/world/entity/projectile/WitherSkull.java diff --git a/net/minecraft/world/entity/projectile/WitherSkull.java b/net/minecraft/world/entity/projectile/WitherSkull.java
index c7a76d45b5749cf054607808610eb710493f80ea..9af37bd40649f602d700fc7b683c646ae9189eb9 100644 index 70a6f4f8aaebf4e3fc40676480a9e8cbb115c107..a0b909c745ea60cae73def06f9d947345911c5e4 100644
--- a/net/minecraft/world/entity/projectile/WitherSkull.java --- a/net/minecraft/world/entity/projectile/WitherSkull.java
+++ b/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/WitherSkull.java
@@ -110,6 +110,14 @@ public class WitherSkull extends AbstractHurtingProjectile { @@ -110,6 +110,14 @@ public class WitherSkull extends AbstractHurtingProjectile {

View File

@@ -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 diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index d1f7da0f4adc4609247c349d7ccdb0e6bba9b8f8..6de5f527c018201d874e06a45c9509fa12125766 100644 index 893a1448bca5e06a7ebb42eed20899dbe0732006..4388a1e3d409a55cffd66fc32cae8753c39dd064 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -3595,7 +3595,18 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3613,7 +3613,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (i1 % 2 == 0) { if (i1 % 2 == 0) {
List<EquipmentSlot> list = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList(); List<EquipmentSlot> list = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList();
EquipmentSlot equipmentSlot = Util.getRandom(list, this.random); EquipmentSlot equipmentSlot = Util.getRandom(list, this.random);

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 6de5f527c018201d874e06a45c9509fa12125766..2dc588e2d503c16ccd2589ce18abd2ecebbc8e74 100644 index 4388a1e3d409a55cffd66fc32cae8753c39dd064..611732d56e5bb71973cb33a41507f61195c4cd2d 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -1818,7 +1818,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1818,7 +1818,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -92,7 +92,7 @@ index 579ca031d461ed4327fe4fb45c5289565322e64e..95fa516910a3834bbd4db6d11279e13a
} else if (this.nextStartTick > 0) { } else if (this.nextStartTick > 0) {
this.nextStartTick--; this.nextStartTick--;
diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java
index 1acf9b8c9e6a5915b3f095e83d3f209708947093..3d94d5c9ecab0fe7332daf4cdac879385159eaa1 100644 index 7bc31391b0bd696ce73223d639a96278994010ca..950bf1c834111e00a3f3eda1390da7ede177ae15 100644
--- a/net/minecraft/world/entity/animal/Fox.java --- a/net/minecraft/world/entity/animal/Fox.java
+++ b/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java
@@ -1038,7 +1038,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> { @@ -1038,7 +1038,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
@@ -118,11 +118,11 @@ index bbdd06002b07699fffebdf6ed8148abdb69c24cc..7379def14f3f700fb8a746dc89d89e24
} }
diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java
index d97a297db3bec0c86c6a82ef1c353015df2115f7..6ee73b798ab306f7c828c9f06ca5b1a96bd96139 100644 index 495284016f0141d34fcda3c1a1799233a5f708cf..0faa2d786a1162f125c531d93a5d1f215f310dfe 100644
--- a/net/minecraft/world/entity/animal/SnowGolem.java --- a/net/minecraft/world/entity/animal/SnowGolem.java
+++ b/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java
@@ -136,7 +136,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -136,7 +136,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
this.hurtServer(serverLevel, this.damageSources().melting(), 1.0F); // CraftBukkit - DamageSources.ON_FIRE -> CraftEventFactory.MELTING this.hurtServer(serverLevel, this.damageSources().onFire().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.MELTING), 1.0F); // CraftBukkit
} }
- if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { - if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight
Co-authored by: Encode42 <me@encode42.dev> Co-authored by: Encode42 <me@encode42.dev>
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 4037d6445216bd16c778e4080e8c836400a35d96..95178c3a1de870709ea9d15a7d00c870d2edebff 100644 index f02723a017d2c21c425fb11d2814052185960b97..80f2d38449f1db1d9b6926e4552d3061cb88b4af 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -530,6 +530,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -531,6 +531,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
} }
// Purpur end - Add canSaveToDisk to Entity // Purpur end - Add canSaveToDisk to Entity
@@ -35,7 +35,7 @@ index 4037d6445216bd16c778e4080e8c836400a35d96..95178c3a1de870709ea9d15a7d00c870
this.type = entityType; this.type = entityType;
this.level = level; this.level = level;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 2dc588e2d503c16ccd2589ce18abd2ecebbc8e74..db5a2227009bc4d655fc781d5850221f36f2d112 100644 index 611732d56e5bb71973cb33a41507f61195c4cd2d..b38bd29e9c3c1565abb3452ffbbaa54cd924961d 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -301,6 +301,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -301,6 +301,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -67,7 +67,7 @@ index 2dc588e2d503c16ccd2589ce18abd2ecebbc8e74..db5a2227009bc4d655fc781d5850221f
} }
// CraftBukkit start // CraftBukkit start
@@ -3574,6 +3582,32 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3592,6 +3600,32 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F); this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F);
} }

View File

@@ -26,7 +26,7 @@
} }
if (selection.includeIntegrated) { if (selection.includeIntegrated) {
@@ -488,6 +_,7 @@ @@ -482,6 +_,7 @@
private void runSync(ServerPlayer player, java.util.Collection<String> bukkit, RootCommandNode<SharedSuggestionProvider> rootCommandNode) { private void runSync(ServerPlayer player, java.util.Collection<String> bukkit, RootCommandNode<SharedSuggestionProvider> rootCommandNode) {
// Paper end - Perf: Async command map building // Paper end - Perf: Async command map building
new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent<CommandSourceStack>(player.getBukkitEntity(), (RootCommandNode) rootCommandNode, true).callEvent(); // Paper - Brigadier API new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent<CommandSourceStack>(player.getBukkitEntity(), (RootCommandNode) rootCommandNode, true).callEvent(); // Paper - Brigadier API
@@ -34,7 +34,7 @@
org.bukkit.event.player.PlayerCommandSendEvent event = new org.bukkit.event.player.PlayerCommandSendEvent(player.getBukkitEntity(), new java.util.LinkedHashSet<>(bukkit)); org.bukkit.event.player.PlayerCommandSendEvent event = new org.bukkit.event.player.PlayerCommandSendEvent(player.getBukkitEntity(), new java.util.LinkedHashSet<>(bukkit));
event.getPlayer().getServer().getPluginManager().callEvent(event); event.getPlayer().getServer().getPluginManager().callEvent(event);
@@ -498,6 +_,7 @@ @@ -492,6 +_,7 @@
} }
} }
// CraftBukkit end // CraftBukkit end

View File

@@ -161,7 +161,7 @@
this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
// CraftBukkit start // CraftBukkit start
// If we stop due to everyone sleeping we should reset the weather duration to some other random value. // If we stop due to everyone sleeping we should reset the weather duration to some other random value.
@@ -2676,7 +_,7 @@ @@ -2678,7 +_,7 @@
// Spigot start // Spigot start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message 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 // Paper start - Fix merchant inventory not closing on entity removal

View File

@@ -1,16 +1,16 @@
--- a/net/minecraft/world/damagesource/DamageSource.java --- a/net/minecraft/world/damagesource/DamageSource.java
+++ b/net/minecraft/world/damagesource/DamageSource.java +++ b/net/minecraft/world/damagesource/DamageSource.java
@@ -28,6 +_,8 @@ @@ -30,6 +_,8 @@
private boolean sweep = false; @Nullable
private boolean melting = false; private org.bukkit.block.BlockState fromBlockSnapshot; // Captured block snapshot when the eventBlockDamager is not relevant (e.g. for bad respawn point explosions the block is already removed)
private boolean poison = false; private boolean critical; // Supports arrows and sweeping damage
+ private boolean scissors = false; // Purpur - Dont run with scissors! + private boolean scissors = false; // Purpur - Dont run with scissors!
+ private boolean stonecutter = false; // Purpur - Stonecutter damage + private boolean stonecutter = false; // Purpur - Stonecutter damage
@Nullable
private Entity customEventDamager = null; // This field is a helper for when causing entity damage is not set by vanilla // Paper - fix DamageSource API
@@ -58,6 +_,27 @@ public DamageSource knownCause(final org.bukkit.event.entity.EntityDamageEvent.DamageCause cause) {
return this.poison; final DamageSource damageSource = this.copy();
@@ -42,6 +_,29 @@
return this.knownCause;
} }
+ // Purpur start - Dont run with scissors! + // Purpur start - Dont run with scissors!
@@ -23,8 +23,10 @@
+ return this.scissors; + return this.scissors;
+ } + }
+ // Purpur end - Dont run with scissors! + // Purpur end - Dont run with scissors!
+
+ // Purpur start - - Stonecutter damage + // Purpur start - - Stonecutter damage
+ public DamageSource stonecutter() { + public DamageSource stonecutter() {
+ this.knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.CONTACT);
+ this.stonecutter = true; + this.stonecutter = true;
+ return this; + return this;
+ } + }
@@ -34,19 +36,19 @@
+ } + }
+ // Purpur end - Stonecutter damage + // Purpur end - Stonecutter damage
+ +
// Paper start - fix DamageSource API
@Nullable @Nullable
public Entity getCustomEventDamager() { public Entity eventEntityDamager() {
@@ -118,6 +_,8 @@ return this.eventEntityDamager;
damageSource.sweep = this.isSweep(); @@ -103,6 +_,8 @@
damageSource.poison = this.isPoison(); damageSource.eventBlockDamager = this.eventBlockDamager;
damageSource.melting = this.isMelting(); damageSource.fromBlockSnapshot = this.fromBlockSnapshot;
damageSource.critical = this.critical;
+ damageSource.scissors = this.isScissors(); // Purpur - Dont run with scissors! + damageSource.scissors = this.isScissors(); // Purpur - Dont run with scissors!
+ damageSource.stonecutter = this.isStonecutter(); // Purpur - Stonecutter damage + damageSource.stonecutter = this.isStonecutter(); // Purpur - Stonecutter damage
return damageSource; return damageSource;
} }
// CraftBukkit end // CraftBukkit end
@@ -184,11 +_,20 @@ @@ -169,11 +_,20 @@
} else { } else {
Component component = this.causingEntity == null ? this.directEntity.getDisplayName() : this.causingEntity.getDisplayName(); Component component = this.causingEntity == null ? this.directEntity.getDisplayName() : this.causingEntity.getDisplayName();
ItemStack itemStack = this.causingEntity instanceof LivingEntity livingEntity1 ? livingEntity1.getMainHandItem() : ItemStack.EMPTY; ItemStack itemStack = this.causingEntity instanceof LivingEntity livingEntity1 ? livingEntity1.getMainHandItem() : ItemStack.EMPTY;

View File

@@ -1,26 +1,29 @@
--- a/net/minecraft/world/damagesource/DamageSources.java --- a/net/minecraft/world/damagesource/DamageSources.java
+++ b/net/minecraft/world/damagesource/DamageSources.java +++ b/net/minecraft/world/damagesource/DamageSources.java
@@ -45,11 +_,15 @@ @@ -42,6 +_,8 @@
// CraftBukkit start private final DamageSource stalagmite;
private final DamageSource melting; private final DamageSource outsideBorder;
private final DamageSource poison; private final DamageSource genericKill;
+ private final DamageSource scissors; // Purpur - Dont run with scissors! + private final DamageSource scissors; // Purpur - Dont run with scissors!
+ private final DamageSource stonecutter; // Purpur - Stonecutter damage + private final DamageSource stonecutter; // Purpur - Stonecutter damage
public DamageSources(RegistryAccess registry) { public DamageSources(RegistryAccess registry) {
this.damageTypes = registry.lookupOrThrow(Registries.DAMAGE_TYPE); this.damageTypes = registry.lookupOrThrow(Registries.DAMAGE_TYPE);
this.melting = this.source(DamageTypes.ON_FIRE).melting(); @@ -70,6 +_,8 @@
this.poison = this.source(DamageTypes.MAGIC).poison(); this.stalagmite = this.source(DamageTypes.STALAGMITE);
this.outsideBorder = this.source(DamageTypes.OUTSIDE_BORDER);
this.genericKill = this.source(DamageTypes.GENERIC_KILL);
+ this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur - Dont run with scissors! + this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur - Dont run with scissors!
+ this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur - Stonecutter damage + this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur - Stonecutter damage
// CraftBukkit end
this.inFire = this.source(DamageTypes.IN_FIRE);
this.campfire = this.source(DamageTypes.CAMPFIRE);
@@ -100,6 +_,17 @@
} }
// CraftBukkit end
+ // Purpur start - Dont run with scissors! private DamageSource source(ResourceKey<DamageType> damageTypeKey) {
@@ -83,6 +_,18 @@
private DamageSource source(ResourceKey<DamageType> damageTypeKey, @Nullable Entity causingEntity, @Nullable Entity directEntity) {
return new DamageSource(this.damageTypes.getOrThrow(damageTypeKey), causingEntity, directEntity);
}
+
+ // Purpur start - Dont run with scissor
+ public DamageSource scissors() { + public DamageSource scissors() {
+ return this.scissors; + return this.scissors;
+ } + }
@@ -31,6 +34,6 @@
+ return this.stonecutter; + return this.stonecutter;
+ } + }
+ // Purpur end - Stonecutter damage + // Purpur end - Stonecutter damage
public DamageSource inFire() { public DamageSource inFire() {
return this.inFire; return this.inFire;
}

View File

@@ -5,9 +5,9 @@
@Override @Override
public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) { public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) {
- if (entity.getHealth() > 1.0F) { - if (entity.getHealth() > 1.0F) {
- entity.hurtServer(level, entity.damageSources().poison(), 1.0F); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON - entity.hurtServer(level, entity.damageSources().magic().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.POISON), 1.0F); // CraftBukkit
+ if (entity.getHealth() > entity.level().purpurConfig.entityMinimalHealthPoison) { // Purpur + if (entity.getHealth() > entity.level().purpurConfig.entityMinimalHealthPoison) { // Purpur
+ entity.hurtServer(level, entity.damageSources().poison(), entity.level().purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON // Purpur - Config MobEffect by world + entity.hurtServer(level, entity.damageSources().magic().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.POISON), entity.level().purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit // Purpur - Config MobEffect by world
} }
return true; return true;

View File

@@ -32,7 +32,7 @@
private boolean hasGlowingTag; private boolean hasGlowingTag;
private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl
private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0}; private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0};
@@ -342,6 +_,7 @@ @@ -343,6 +_,7 @@
public long activatedTick = Integer.MIN_VALUE; public long activatedTick = Integer.MIN_VALUE;
public boolean isTemporarilyActive; public boolean isTemporarilyActive;
public long activatedImmunityTick = Integer.MIN_VALUE; public long activatedImmunityTick = Integer.MIN_VALUE;
@@ -40,7 +40,7 @@
public void inactiveTick() { public void inactiveTick() {
} }
@@ -522,10 +_,21 @@ @@ -523,10 +_,21 @@
} }
// Paper end - optimise entity tracker // Paper end - optimise entity tracker
@@ -62,7 +62,7 @@
this.position = Vec3.ZERO; this.position = Vec3.ZERO;
this.blockPosition = BlockPos.ZERO; this.blockPosition = BlockPos.ZERO;
this.chunkPosition = ChunkPos.ZERO; this.chunkPosition = ChunkPos.ZERO;
@@ -904,6 +_,7 @@ @@ -905,6 +_,7 @@
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
// Paper end - Configurable nether ceiling damage // Paper end - Configurable nether ceiling damage
@@ -70,7 +70,7 @@
this.onBelowWorld(); this.onBelowWorld();
} }
} }
@@ -1826,7 +_,7 @@ @@ -1827,7 +_,7 @@
} }
public boolean fireImmune() { public boolean fireImmune() {
@@ -79,7 +79,7 @@
} }
public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) {
@@ -1895,7 +_,7 @@ @@ -1896,7 +_,7 @@
return this.isInWater() || flag; return this.isInWater() || flag;
} }
@@ -88,7 +88,7 @@
if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) { if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) {
this.wasTouchingWater = false; this.wasTouchingWater = false;
} else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) { } else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) {
@@ -2521,6 +_,13 @@ @@ -2522,6 +_,13 @@
compound.putBoolean("Paper.FreezeLock", true); compound.putBoolean("Paper.FreezeLock", true);
} }
// Paper end // Paper end
@@ -102,7 +102,7 @@
return compound; return compound;
} catch (Throwable var9) { } catch (Throwable var9) {
CrashReport crashReport = CrashReport.forThrowable(var9, "Saving entity NBT"); CrashReport crashReport = CrashReport.forThrowable(var9, "Saving entity NBT");
@@ -2670,6 +_,13 @@ @@ -2671,6 +_,13 @@
freezeLocked = compound.getBoolean("Paper.FreezeLock"); freezeLocked = compound.getBoolean("Paper.FreezeLock");
} }
// Paper end // Paper end
@@ -116,7 +116,7 @@
} catch (Throwable var17) { } catch (Throwable var17) {
CrashReport crashReport = CrashReport.forThrowable(var17, "Loading entity NBT"); CrashReport crashReport = CrashReport.forThrowable(var17, "Loading entity NBT");
CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded");
@@ -2916,6 +_,7 @@ @@ -2917,6 +_,7 @@
if (this.isAlive() && this instanceof Leashable leashable) { if (this.isAlive() && this instanceof Leashable leashable) {
if (leashable.getLeashHolder() == player) { if (leashable.getLeashHolder() == player) {
if (!this.level().isClientSide()) { if (!this.level().isClientSide()) {
@@ -124,7 +124,7 @@
// CraftBukkit start - fire PlayerUnleashEntityEvent // CraftBukkit start - fire PlayerUnleashEntityEvent
// Paper start - Expand EntityUnleashEvent // Paper start - Expand EntityUnleashEvent
org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials());
@@ -3241,15 +_,18 @@ @@ -3242,15 +_,18 @@
return Vec3.directionFromRotation(this.getRotationVector()); return Vec3.directionFromRotation(this.getRotationVector());
} }
@@ -144,7 +144,7 @@
} }
} }
} }
@@ -3454,7 +_,7 @@ @@ -3455,7 +_,7 @@
} }
public int getMaxAirSupply() { public int getMaxAirSupply() {
@@ -153,7 +153,7 @@
} }
public int getAirSupply() { public int getAirSupply() {
@@ -3949,7 +_,7 @@ @@ -3950,7 +_,7 @@
// CraftBukkit end // CraftBukkit end
public boolean canUsePortal(boolean allowPassengers) { public boolean canUsePortal(boolean allowPassengers) {
@@ -162,7 +162,7 @@
} }
public boolean canTeleport(Level fromLevel, Level toLevel) { public boolean canTeleport(Level fromLevel, Level toLevel) {
@@ -4481,6 +_,12 @@ @@ -4482,6 +_,12 @@
return Mth.lerp(partialTick, this.yRotO, this.yRot); return Mth.lerp(partialTick, this.yRotO, this.yRot);
} }
@@ -175,7 +175,7 @@
// Paper start - optimise collisions // Paper start - optimise collisions
public boolean updateFluidHeightAndDoFluidPushing(final TagKey<Fluid> fluid, final double flowScale) { public boolean updateFluidHeightAndDoFluidPushing(final TagKey<Fluid> fluid, final double flowScale) {
if (this.touchingUnloadedChunk()) { if (this.touchingUnloadedChunk()) {
@@ -4879,7 +_,7 @@ @@ -4880,7 +_,7 @@
} }
public float maxUpStep() { public float maxUpStep() {

View File

@@ -162,7 +162,7 @@
this.hurt(this.damageSources().flyIntoWall(), f); this.hurt(this.damageSources().flyIntoWall(), f);
} }
} }
@@ -4398,6 +_,12 @@ @@ -4416,6 +_,12 @@
? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND) ? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND)
: slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType());
} }

View File

@@ -64,13 +64,13 @@
@@ -1269,7 +_,7 @@ @@ -1269,7 +_,7 @@
flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits
if (flag2) { if (flag2) {
damageSource = damageSource.critical(true); // Paper start - critical damage API damageSource = damageSource.critical(); // Paper - critical damage API
- f *= 1.5F; - f *= 1.5F;
+ f *= this.level().purpurConfig.playerCriticalDamageMultiplier; // Purpur - Add config change multiplier critical damage value + f *= (float) this.level().purpurConfig.playerCriticalDamageMultiplier; // Purpur - Add config change multiplier critical damage value
} }
float f2 = f + f1; float f2 = f + f1;
@@ -1882,7 +_,23 @@ @@ -1884,7 +_,23 @@
@Override @Override
protected int getBaseExperienceReward(ServerLevel level) { protected int getBaseExperienceReward(ServerLevel level) {
@@ -95,7 +95,7 @@
} }
@Override @Override
@@ -1965,6 +_,13 @@ @@ -1967,6 +_,13 @@
public boolean canUseSlot(EquipmentSlot slot) { public boolean canUseSlot(EquipmentSlot slot) {
return slot != EquipmentSlot.BODY; return slot != EquipmentSlot.BODY;
} }

View File

@@ -16,8 +16,8 @@
if (serverPlayer1 != null) { if (serverPlayer1 != null) {
serverPlayer1.resetFallDistance(); serverPlayer1.resetFallDistance();
serverPlayer1.resetCurrentImpulseContext(); serverPlayer1.resetCurrentImpulseContext();
- serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API - serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API
+ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur - Configurable Ender Pearl damage + serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur - Configurable Ender Pearl damage
} }
this.playSound(serverLevel, vec3); this.playSound(serverLevel, vec3);

View File

@@ -28,7 +28,7 @@
+ } else { + } else {
+ Location location = new Location(this.level.getWorld(), this.center.x, this.center.y, this.center.z); + Location location = new Location(this.level.getWorld(), this.center.x, this.center.y, this.center.z);
+ org.bukkit.block.Block block = location.getBlock(); + org.bukkit.block.Block block = location.getBlock();
+ org.bukkit.block.BlockState blockState = (this.damageSource.getDirectBlockState() != null) ? this.damageSource.getDirectBlockState() : block.getState(); + org.bukkit.block.BlockState blockState = (this.damageSource.causingBlockSnapshot() != null) ? this.damageSource.causingBlockSnapshot() : block.getState();
+ if(!new org.purpurmc.purpur.event.PreBlockExplodeEvent(location.getBlock(), this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F, blockState, org.bukkit.craftbukkit.CraftExplosionResult.toBukkit(getBlockInteraction())).callEvent()) { + if(!new org.purpurmc.purpur.event.PreBlockExplodeEvent(location.getBlock(), this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F, blockState, org.bukkit.craftbukkit.CraftExplosionResult.toBukkit(getBlockInteraction())).callEvent()) {
+ this.wasCanceled = true; + this.wasCanceled = true;
+ return; + return;

View File

@@ -13,8 +13,8 @@
} }
Vec3 center = pos.getCenter(); Vec3 center = pos.getCenter();
- level.explode(null, level.damageSources().badRespawnPointExplosion(center, blockState), null, center, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state - level.explode(null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), null, center, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(center, blockState), null, center, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options + if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), null, center, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options
return InteractionResult.SUCCESS_SERVER; return InteractionResult.SUCCESS_SERVER;
} }
// CraftBukkit end // CraftBukkit end

View File

@@ -6,6 +6,6 @@
public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) {
- if (!entity.isSteppingCarefully() && entity instanceof LivingEntity) { - if (!entity.isSteppingCarefully() && entity instanceof LivingEntity) {
+ if ((!entity.isSteppingCarefully() || level.purpurConfig.magmaBlockDamageWhenSneaking) && entity instanceof LivingEntity) { // Purpur - Configurable damage settings for magma blocks + if ((!entity.isSteppingCarefully() || level.purpurConfig.magmaBlockDamageWhenSneaking) && entity instanceof LivingEntity) { // Purpur - Configurable damage settings for magma blocks
entity.hurt(level.damageSources().hotFloor().directBlock(level, pos), 1.0F); // CraftBukkit entity.hurt(level.damageSources().hotFloor().eventBlockDamager(level, pos), 1.0F); // CraftBukkit
} }

View File

@@ -4,8 +4,8 @@
}; };
Vec3 center = pos2.getCenter(); Vec3 center = pos2.getCenter();
level.explode( level.explode(
- null, level.damageSources().badRespawnPointExplosion(center, blockState), explosionDamageCalculator, center, 5.0F, true, Level.ExplosionInteraction.BLOCK // CraftBukkit - add state - null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), explosionDamageCalculator, center, 5.0F, true, Level.ExplosionInteraction.BLOCK // CraftBukkit - add state
+ null, level.damageSources().badRespawnPointExplosion(center, blockState), explosionDamageCalculator, center, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options + null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), explosionDamageCalculator, center, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options
); );
} }

View File

@@ -9,7 +9,7 @@
+ @Override + @Override
+ public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) { + public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) {
+ if (level.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) { + if (level.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) {
+ entity.hurtServer((net.minecraft.server.level.ServerLevel) level, entity.damageSources().stonecutter().directBlock(level, pos), level.purpurConfig.stonecutterDamage); + entity.hurtServer((net.minecraft.server.level.ServerLevel) level, entity.damageSources().stonecutter().eventBlockDamager(level, pos), level.purpurConfig.stonecutterDamage);
+ } + }
+ super.stepOn(level, pos, state, entity); + super.stepOn(level, pos, state, entity);
+ } + }

View File

@@ -42,8 +42,8 @@
} }
if (damageTarget && blockEntity.destroyTarget != null) { // CraftBukkit if (damageTarget && blockEntity.destroyTarget != null) { // CraftBukkit
- if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().directBlock(level, pos), 4.0F)) // CraftBukkit - if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().eventBlockDamager(level, pos), 4.0F)) // CraftBukkit
+ if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().directBlock(level, pos), level.purpurConfig.conduitDamageAmount)) // CraftBukkit // Purpur - Conduit behavior configuration + if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().eventBlockDamager(level, pos), level.purpurConfig.conduitDamageAmount)) // CraftBukkit // Purpur - Conduit behavior configuration
level.playSound( level.playSound(
null, null,
blockEntity.destroyTarget.getX(), blockEntity.destroyTarget.getX(),

View File

@@ -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 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 6394e0a4bfd2c8a0e137e60eefe9585befdeda49..22edc6faa929d8110fb0c08154eb47155db8fd1f 100644 index d7cf58309b3f455a18de7672fe6ee913f86bac5b..71cc3b64ee27118badcdd6214cb1c6a120202f44 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -1344,4 +1344,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -1345,4 +1345,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
} }
} }
// Paper end - broadcast hurt animation // Paper end - broadcast hurt animation
@@ -37,7 +37,7 @@ index 6394e0a4bfd2c8a0e137e60eefe9585befdeda49..22edc6faa929d8110fb0c08154eb4715
+ // Purpur end - Ridables + // 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 diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 4ca09a593283935f7a58a31a903a6c0d990296b5..0131eaade61bc30a094a3166e8cd58cd7cfd7921 100644 index 57c3f8531bf85b53af3a4aad6e9e369d5cff0ce3..56afb317cef0e049aacdd36a1be5f9b7af4d0c77 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -602,6 +602,15 @@ public class CraftEventFactory { @@ -602,6 +602,15 @@ public class CraftEventFactory {
@@ -56,7 +56,7 @@ index 4ca09a593283935f7a58a31a903a6c0d990296b5..0131eaade61bc30a094a3166e8cd58cd
return event; return event;
} }
@@ -1191,6 +1200,7 @@ public class CraftEventFactory { @@ -1193,6 +1202,7 @@ public class CraftEventFactory {
EntityDamageEvent event; EntityDamageEvent event;
if (damager != null) { if (damager != null) {
event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical);

View File

@@ -1,33 +1,34 @@
--- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java --- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
+++ b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java +++ b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
@@ -78,10 +_,10 @@ @@ -70,10 +_,10 @@
this.setAliases(Arrays.asList("pl")); this.setAliases(List.of("pl"));
} }
- private static <T> List<Component> formatProviders(TreeMap<String, PluginProvider<T>> plugins) { - private static <T> List<Component> formatProviders(final TreeMap<String, PluginProvider<T>> plugins) {
+ private static <T> List<Component> formatProviders(TreeMap<String, PluginProvider<T>> plugins, @NotNull CommandSender sender) { // Purpur - Improve output of plugins command + private static <T> List<Component> formatProviders(final TreeMap<String, PluginProvider<T>> plugins, CommandSender sender) { // Purpur - Improve output of plugins command
List<Component> components = new ArrayList<>(plugins.size()); final List<Component> components = new ArrayList<>(plugins.size());
for (PluginProvider<T> entry : plugins.values()) { for (final PluginProvider<T> entry : plugins.values()) {
- components.add(formatProvider(entry)); - components.add(formatProvider(entry));
+ components.add(formatProvider(entry, sender)); // Purpur - Improve output of plugins command + components.add(formatProvider(entry, sender)); // Purpur - Improve output of plugins command
} }
boolean isFirst = true; boolean isFirst = true;
@@ -109,7 +_,7 @@ @@ -100,15 +_,49 @@
return formattedSublists; return formattedSubLists;
} }
- private static Component formatProvider(PluginProvider<?> provider) { - private static Component formatProvider(final PluginProvider<?> provider) {
+ private static Component formatProvider(PluginProvider<?> provider, @NotNull CommandSender sender) { // Purpur - Improve output of plugins command + private static Component formatProvider(final PluginProvider<?> provider, CommandSender sender) { // Purpur - Improve output of plugins command
TextComponent.Builder builder = Component.text(); final TextComponent.Builder builder = Component.text();
if (provider instanceof SpigotPluginProvider spigotPluginProvider && CraftMagicNumbers.isLegacy(spigotPluginProvider.getMeta())) { if (provider instanceof final SpigotPluginProvider spigotPluginProvider && CraftMagicNumbers.isLegacy(spigotPluginProvider.getMeta())) {
builder.append(LEGACY_PLUGIN_STAR); builder.append(LEGACY_PLUGIN_STAR);
@@ -117,13 +_,65 @@ }
String name = provider.getMeta().getName(); final String name = provider.getMeta().getName();
Component pluginName = Component.text(name, fromStatus(provider)) - final Component pluginName = Component.text(name, fromStatus(provider))
- .clickEvent(ClickEvent.runCommand("/version " + name)); - .clickEvent(ClickEvent.runCommand("/version " + name));
+ // Purpur start - Improve output of plugins command + // Purpur start - Improve output of plugins command
+ Component pluginName = Component.text(name, fromStatus(provider))
+ .clickEvent(ClickEvent.suggestCommand("/version " + name)); + .clickEvent(ClickEvent.suggestCommand("/version " + name));
+ +
+ if (sender instanceof org.bukkit.entity.Player && sender.hasPermission("bukkit.command.version")) { + if (sender instanceof org.bukkit.entity.Player && sender.hasPermission("bukkit.command.version")) {
@@ -65,12 +66,12 @@
builder.append(pluginName); builder.append(pluginName);
return builder.build(); @@ -126,6 +_,23 @@
return componentHeader.append(Component.text(":")).build();
} }
+ // Purpur start - Improve output of plugins command + // Purpur start - Improve output of plugins command
+ @NotNull + private static TextComponent getAuthors(final PluginMeta pluginMeta) {
+ private static TextComponent getAuthors(@NotNull final PluginMeta pluginMeta) {
+ TextComponent.Builder builder = Component.text(); + TextComponent.Builder builder = Component.text();
+ List<String> authors = pluginMeta.getAuthors(); + List<String> authors = pluginMeta.getAuthors();
+ +
@@ -86,43 +87,39 @@
+ } + }
+ // Purpur end - Improve output of plugins command + // Purpur end - Improve output of plugins command
+ +
private static Component asPlainComponents(String strings) { private static Component asPlainComponents(final String strings) {
net.kyori.adventure.text.TextComponent.Builder builder = Component.text(); final net.kyori.adventure.text.TextComponent.Builder builder = Component.text();
for (String string : strings.split("\n")) { for (final String string : strings.split("\n")) {
@@ -182,24 +_,24 @@ @@ -186,25 +_,25 @@
} final int sizePaperPlugins = paperPlugins.size();
} final int sizeSpigotPlugins = spigotPlugins.size();
final int sizePlugins = sizePaperPlugins + sizeSpigotPlugins;
- final boolean hasAllPluginTypes = (sizePaperPlugins > 0 && sizeSpigotPlugins > 0);
+ final boolean hasAllPluginTypes = true; // Purpur - Improve output of plugins command
- Component infoMessage = Component.text("Server Plugins (%s):".formatted(paperPlugins.size() + spigotPlugins.size()), NamedTextColor.WHITE); final Component infoMessage = Component.text().append(INFO_ICON_SERVER_PLUGIN).append(Component.text("Server Plugins (%s):".formatted(sizePlugins), NamedTextColor.WHITE)).build();
+ //Component infoMessage = Component.text("Server Plugins (%s):".formatted(paperPlugins.size() + spigotPlugins.size()), NamedTextColor.WHITE); // Purpur - Improve output of plugins command
//.append(INFO_ICON_START.hoverEvent(SERVER_PLUGIN_INFO)); TODO: Add docs sender.sendMessage(infoMessage);
- sender.sendMessage(infoMessage);
-
- if (!paperPlugins.isEmpty()) { - if (!paperPlugins.isEmpty()) {
- sender.sendMessage(PAPER_HEADER);
- }
-
- for (Component component : formatProviders(paperPlugins)) {
+ //sender.sendMessage(infoMessage); // Purpur - Improve output of plugins command
+
+ //if (!paperPlugins.isEmpty()) { // Purpur - Improve output of plugins command + //if (!paperPlugins.isEmpty()) { // Purpur - Improve output of plugins command
+ sender.sendMessage(PAPER_HEADER.append(Component.text(" (%s):".formatted(paperPlugins.size())))); // Purpur - Improve output of plugins command sender.sendMessage(header("Paper Plugins", 0x0288D1, sizePaperPlugins, hasAllPluginTypes));
- }
+ //} // Purpur - Improve output of plugins command + //} // Purpur - Improve output of plugins command
+
+ for (Component component : formatProviders(paperPlugins, sender)) { // Purpur - Improve output of plugins command - for (final Component component : formatProviders(paperPlugins)) {
+ for (final Component component : formatProviders(paperPlugins, sender)) { // Purpur - Improve output of plugins command
sender.sendMessage(component); sender.sendMessage(component);
} }
- if (!spigotPlugins.isEmpty()) { - if (!spigotPlugins.isEmpty()) {
- sender.sendMessage(BUKKIT_HEADER);
- }
+ //if (!spigotPlugins.isEmpty()) { // Purpur - Improve output of plugins command + //if (!spigotPlugins.isEmpty()) { // Purpur - Improve output of plugins command
+ sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (%s):".formatted(spigotPlugins.size())))); // Purpur - Improve output of plugins command sender.sendMessage(header("Bukkit Plugins", 0xED8106, sizeSpigotPlugins, hasAllPluginTypes));
- }
+ //} // Purpur - Improve output of plugins command + //} // Purpur - Improve output of plugins command
- for (Component component : formatProviders(spigotPlugins)) { - for (final Component component : formatProviders(spigotPlugins)) {
+ for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur - Improve output of plugins command + for (final Component component : formatProviders(spigotPlugins, sender)) { // Purpur - Improve output of plugins command
sender.sendMessage(component); sender.sendMessage(component);
} }

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -2373,6 +_,50 @@ @@ -2346,6 +_,50 @@
return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight());
} }

View File

@@ -1,11 +0,0 @@
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1131,7 +_,7 @@
return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), source.getDirectBlockState(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled);
} else if (source.getDirectBlock() != null) {
DamageCause cause;
- if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL)) {
+ if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL) || source.isStonecutter()) { // Purpur - Stonecutter damage
cause = DamageCause.CONTACT;
} else if (source.is(DamageTypes.HOT_FLOOR)) {
cause = DamageCause.HOT_FLOOR;

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -666,4 +_,285 @@ @@ -693,4 +_,285 @@
} }
// Paper end - data component API // Paper end - data component API