From 0c2f3e55236037bd6d59cd1e18b914b7f161a63f Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 9 Oct 2023 11:33:39 -0700 Subject: [PATCH] Make horses and llama's fire LivingFallEvent. Fixes #9743 --- .../minecraft/world/entity/LivingEntity.java.patch | 8 ++++---- .../entity/animal/horse/AbstractHorse.java.patch | 12 ++++++++++++ .../world/entity/animal/horse/Llama.java.patch | 13 +++++++++++++ .../java/net/minecraftforge/common/ForgeHooks.java | 6 ------ .../net/minecraftforge/event/ForgeEventFactory.java | 5 +++++ 5 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch diff --git a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch index e73b998e7d..e6699f7b6a 100644 --- a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch @@ -326,10 +326,10 @@ } public boolean causeFallDamage(float p_147187_, float p_147188_, DamageSource p_147189_) { -+ float[] ret = net.minecraftforge.common.ForgeHooks.onLivingFall(this, p_147187_, p_147188_); -+ if (ret == null) return false; -+ p_147187_ = ret[0]; -+ p_147188_ = ret[1]; ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, p_147187_, p_147188_); ++ if (event.isCanceled()) return false; ++ p_147187_ = event.getDistance(); ++ p_147188_ = event.getDamageMultiplier(); + boolean flag = super.causeFallDamage(p_147187_, p_147188_, p_147189_); int i = this.calculateFallDamage(p_147187_, p_147188_); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch index a45e6ddd42..08cee1f715 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch @@ -1,5 +1,17 @@ --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java +@@ -283,6 +_,11 @@ + } + + public boolean causeFallDamage(float p_149499_, float p_149500_, DamageSource p_149501_) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, p_149499_, p_149500_); ++ if (event.isCanceled()) return false; ++ p_149499_ = event.getDistance(); ++ p_149500_ = event.getDamageMultiplier(); ++ + if (p_149499_ > 1.0F) { + this.playSound(SoundEvents.HORSE_LAND, 0.4F, 1.0F); + } @@ -328,6 +_,7 @@ this.inventory.addListener(this); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch new file mode 100644 index 0000000000..1b0c1a6a66 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/world/entity/animal/horse/Llama.java ++++ b/net/minecraft/world/entity/animal/horse/Llama.java +@@ -366,6 +_,10 @@ + } + + public boolean causeFallDamage(float p_149538_, float p_149539_, DamageSource p_149540_) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, p_149538_, p_149539_); ++ if (event.isCanceled()) return false; ++ p_149538_ = event.getDistance(); ++ p_149539_ = event.getDamageMultiplier(); + int i = this.calculateFallDamage(p_149538_, p_149539_); + if (i <= 0) { + return false; diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index b9634d103b..a3a99c33fc 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -293,12 +293,6 @@ public class ForgeHooks { return MinecraftForge.EVENT_BUS.post(new LivingDropsEvent(entity, source, drops, lootingLevel, recentlyHit)); } - @Nullable - public static float[] onLivingFall(LivingEntity entity, float distance, float damageMultiplier) { - LivingFallEvent event = new LivingFallEvent(entity, distance, damageMultiplier); - return (MinecraftForge.EVENT_BUS.post(event) ? null : new float[]{event.getDistance(), event.getDamageMultiplier()}); - } - public static int getLootingLevel(Entity target, @Nullable Entity killer, @Nullable DamageSource cause) { int looting = 0; if (killer instanceof LivingEntity living) diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index fd0c81f738..e4934f7894 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -109,6 +109,7 @@ import net.minecraftforge.event.entity.living.LivingConversionEvent; import net.minecraftforge.event.entity.living.LivingDestroyBlockEvent; import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; import net.minecraftforge.event.entity.living.LivingExperienceDropEvent; +import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHealEvent; import net.minecraftforge.event.entity.living.LivingPackSizeEvent; import net.minecraftforge.event.entity.living.LivingSwapItemsEvent; @@ -827,4 +828,8 @@ public class ForgeEventFactory { public static void onEntityEnterSection(Entity entity, long packedOldPos, long packedNewPos) { post(new EntityEvent.EnteringSection(entity, packedOldPos, packedNewPos)); } + + public static LivingFallEvent onLivingFall(LivingEntity entity, float distance, float damageMultiplier) { + return fire(new LivingFallEvent(entity, distance, damageMultiplier)); + } }