From 56547dd0ca14f4b667ff85532600a1534e6416b9 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Thu, 3 Sep 2020 14:20:15 +0800 Subject: [PATCH] Upstream: Add ArrowBodyCountChangeEvent --- .../mixin/core/entity/LivingEntityMixin.java | 20 +++++++++++++++++++ .../player/ServerPlayerEntityMixin.java | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/LivingEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/LivingEntityMixin.java index 658614e9..9f71dbb4 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/LivingEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/LivingEntityMixin.java @@ -170,6 +170,8 @@ public abstract class LivingEntityMixin extends EntityMixin implements LivingEnt @Shadow protected abstract void damageArmor(DamageSource damageSource, float damage); @Shadow protected abstract void playEquipSound(ItemStack stack); @Shadow public abstract boolean getShouldBeDead(); + @Shadow public abstract int getArrowCountInEntity(); + @Shadow @Final private static DataParameter ARROW_COUNT_IN_ENTITY; // @formatter:on public int expToDrop; @@ -1055,4 +1057,22 @@ public abstract class LivingEntityMixin extends EntityMixin implements LivingEnt arclight$cause = null; } } + + @Inject(method = "setArrowCountInEntity", cancellable = true, at = @At("HEAD")) + private void arclight$onArrowChange(int count, CallbackInfo ci) { + if (arclight$callArrowCountChange(count, false)) { + ci.cancel(); + } + } + + public final void setArrowCount(int count, boolean reset) { + if (arclight$callArrowCountChange(count, reset)) { + return; + } + this.dataManager.set(ARROW_COUNT_IN_ENTITY, count); + } + + private boolean arclight$callArrowCountChange(int newCount, boolean reset) { + return CraftEventFactory.callArrowBodyCountChangeEvent((LivingEntity) (Object) this, this.getArrowCountInEntity(), newCount, reset).isCancelled(); + } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java index 2f71226d..ce258201 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/player/ServerPlayerEntityMixin.java @@ -891,7 +891,8 @@ public abstract class ServerPlayerEntityMixin extends PlayerEntityMixin implemen this.experienceLevel = this.newLevel; this.experienceTotal = this.newTotalExp; this.experience = 0.0f; - this.setArrowCountInEntity(this.deathTime = 0); + this.deathTime = 0; + this.setArrowCount(0, true); this.removeAllEffects(EntityPotionEffectEvent.Cause.DEATH); this.potionsNeedUpdate = true; this.openContainer = this.container;