SPIGOT-7996: Cancelling EntityTransformEvent does not keep equipment

This commit is contained in:
md_5 2025-01-19 20:01:05 +11:00
parent 442838fdae
commit 8abf4c480e
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11
2 changed files with 47 additions and 5 deletions

View File

@ -21,6 +21,15 @@
} }
entity.startRiding(entityinsentient1); entity.startRiding(entityinsentient1);
@@ -52,7 +57,7 @@
ItemStack itemstack = entityinsentient.getItemBySlot(enumitemslot);
if (!itemstack.isEmpty()) {
- entityinsentient1.setItemSlot(enumitemslot, itemstack.copyAndClear());
+ entityinsentient1.setItemSlot(enumitemslot, itemstack.copy()); // CraftBukkit - SPIGOT-7996: don't clear yet
entityinsentient1.setDropChance(enumitemslot, entityinsentient.getEquipmentDropChance(enumitemslot));
}
}
@@ -64,7 +69,7 @@ @@ -64,7 +69,7 @@
entityinsentient1.hurtTime = entityinsentient.hurtTime; entityinsentient1.hurtTime = entityinsentient.hurtTime;
entityinsentient1.yBodyRot = entityinsentient.yBodyRot; entityinsentient1.yBodyRot = entityinsentient.yBodyRot;
@ -30,7 +39,38 @@
Objects.requireNonNull(entityinsentient1); Objects.requireNonNull(entityinsentient1);
optional.ifPresent(entityinsentient1::setSleepingPos); optional.ifPresent(entityinsentient1::setSleepingPos);
@@ -156,7 +161,7 @@ @@ -75,6 +80,21 @@
this.convertCommon(entityinsentient, entityinsentient1, conversionparams);
}
+
+ // CraftBukkit start
+ @Override
+ void postConvert(EntityInsentient entityinsentient, EntityInsentient entityinsentient1, ConversionParams conversionparams) {
+ if (conversionparams.keepEquipment()) {
+ for (EnumItemSlot enumitemslot : EnumItemSlot.VALUES) {
+ ItemStack itemstack = entityinsentient.getItemBySlot(enumitemslot);
+
+ if (!itemstack.isEmpty()) {
+ itemstack.setCount(0); // SPIGOT-7996: clear after conversion
+ }
+ }
+ }
+ }
+ // CraftBukkit end
},
SPLIT_ON_DEATH(false) {
@Override
@@ -106,6 +126,8 @@
}
abstract void convert(EntityInsentient entityinsentient, EntityInsentient entityinsentient1, ConversionParams conversionparams);
+
+ void postConvert(EntityInsentient entityinsentient, EntityInsentient entityinsentient1, ConversionParams conversionparams) {} // CraftBukkit
void convertCommon(EntityInsentient entityinsentient, EntityInsentient entityinsentient1, ConversionParams conversionparams) {
entityinsentient1.setAbsorptionAmount(entityinsentient.getAbsorptionAmount());
@@ -156,7 +178,7 @@
entityinsentient1.setNoGravity(entityinsentient.isNoGravity()); entityinsentient1.setNoGravity(entityinsentient.isNoGravity());
entityinsentient1.setPortalCooldown(entityinsentient.getPortalCooldown()); entityinsentient1.setPortalCooldown(entityinsentient.getPortalCooldown());
entityinsentient1.setSilent(entityinsentient.isSilent()); entityinsentient1.setSilent(entityinsentient.isSilent());

View File

@ -252,7 +252,7 @@
if (t0 == null) { if (t0 == null) {
return null; return null;
@@ -1403,14 +1499,24 @@ @@ -1403,14 +1499,26 @@
conversionparams_a.finalizeConversion(t0); conversionparams_a.finalizeConversion(t0);
World world = this.level(); World world = this.level();
@ -265,6 +265,8 @@
+ if (CraftEventFactory.callEntityTransformEvent(this, t0, transformReason).isCancelled()) { + if (CraftEventFactory.callEntityTransformEvent(this, t0, transformReason).isCancelled()) {
+ return null; + return null;
+ } + }
+
+ conversionparams.type().postConvert(this, t0, conversionparams);
+ // CraftBukkit end + // CraftBukkit end
if (world instanceof WorldServer) { if (world instanceof WorldServer) {
WorldServer worldserver = (WorldServer) world; WorldServer worldserver = (WorldServer) world;
@ -279,7 +281,7 @@
} }
return t0; return t0;
@@ -1420,7 +1526,14 @@ @@ -1420,7 +1528,14 @@
@Nullable @Nullable
public <T extends EntityInsentient> T convertTo(EntityTypes<T> entitytypes, ConversionParams conversionparams, ConversionParams.a<T> conversionparams_a) { public <T extends EntityInsentient> T convertTo(EntityTypes<T> entitytypes, ConversionParams conversionparams, ConversionParams.a<T> conversionparams_a) {
@ -295,7 +297,7 @@
} }
@Nullable @Nullable
@@ -1458,6 +1571,7 @@ @@ -1458,6 +1573,7 @@
boolean flag1 = super.startRiding(entity, flag); boolean flag1 = super.startRiding(entity, flag);
if (flag1 && this.isLeashed()) { if (flag1 && this.isLeashed()) {
@ -303,7 +305,7 @@
this.dropLeash(); this.dropLeash();
} }
@@ -1542,7 +1656,7 @@ @@ -1542,7 +1658,7 @@
if (f1 > 0.0F && entity instanceof EntityLiving) { if (f1 > 0.0F && entity instanceof EntityLiving) {
entityliving = (EntityLiving) entity; entityliving = (EntityLiving) entity;