SPIGOT-7996: Cancelling EntityTransformEvent does not keep equipment
This commit is contained in:
parent
442838fdae
commit
8abf4c480e
@ -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());
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user