Skip to content

Commit 575c9e4

Browse files
committed
Rewrite damageEntity0 once again for better event compat
1 parent c59717d commit 575c9e4

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@
968968

969969
if (p_21194_ <= 0.0F) {
970970
return 0.0F;
971-
@@ -1581,8 +_,213 @@
971+
@@ -1581,8 +_,217 @@
972972
}
973973
}
974974

@@ -977,13 +977,8 @@
977977
+ if (!this.isInvulnerableTo(damagesource)) {
978978
+ // Check if entity is a "human" aka player
979979
+ final boolean human = this instanceof ServerPlayer;
980-
+ // Cauldron start - apply forge damage hook
981980
+ f = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, damagesource, f);
982-
+ // If the damage is negative return true
983-
+ if (f < 0) return true;
984-
+ // Thermos detect null damage
985-
+ final boolean nulldmg = f == 0;
986-
+ // Cauldron end
981+
+ if (f <= 0) return true;
987982
+ float originalDamage = f;
988983
+ com.google.common.base.Function<Double, Double> hardHat = new com.google.common.base.Function<Double, Double>() {
989984
+ @Override
@@ -998,10 +993,19 @@
998993
+ float hardHatModifier = hardHat.apply((double) f).floatValue();
999994
+ f += hardHatModifier;
1000995
+
996+
+ java.util.concurrent.atomic.AtomicBoolean shieldTakesDamage = new java.util.concurrent.atomic.AtomicBoolean(true); //Ketting
1001997
+ com.google.common.base.Function<Double, Double> blocking = new com.google.common.base.Function<Double, Double>() {
1002998
+ @Override
1003999
+ public Double apply(Double f) {
1004-
+ return -((LivingEntity.this.isDamageSourceBlocked(damagesource)) ? f : 0.0);
1000+
+ //Ketting start - fire forge shield block event before bukkit
1001+
+ if (LivingEntity.this.isDamageSourceBlocked(damagesource)) {
1002+
+ var ev = net.minecraftforge.common.ForgeHooks.onShieldBlock(LivingEntity.this, damagesource, f.floatValue());
1003+
+ if (ev.isCanceled()) return 0d;
1004+
+ shieldTakesDamage.set(ev.shieldTakesDamage());
1005+
+ return -((double) ev.getBlockedDamage());
1006+
+ }
1007+
+ return 0d;
1008+
+ //Ketting end
10051009
+ }
10061010
+ };
10071011
+ float blockingModifier = blocking.apply((double) f).floatValue();
@@ -1066,7 +1070,6 @@
10661070
+ }
10671071
+
10681072
+ f = (float) event.getFinalDamage();
1069-
+ if (nulldmg) return true; // Preclude any stupidity with null head items
10701073
+
10711074
+ // Resistance
10721075
+ if (event.getDamage(org.bukkit.event.entity.EntityDamageEvent.DamageModifier.RESISTANCE) < 0) {
@@ -1092,18 +1095,17 @@
10921095
+ }
10931096
+
10941097
+ // Apply blocking code // PAIL: steal from above
1095-
+ if (event.getDamage(org.bukkit.event.entity.EntityDamageEvent.DamageModifier.BLOCKING) < 0) {
1096-
+ var ev = net.minecraftforge.common.ForgeHooks.onShieldBlock(this, damagesource, (float) event.getDamage(org.bukkit.event.entity.EntityDamageEvent.DamageModifier.BLOCKING)); //Ketting
1097-
+
1098-
+ if (!ev.isCanceled()) {
1098+
+ //Ketting start - take forge event in account
1099+
+ double blockingDmg = event.getDamage(org.bukkit.event.entity.EntityDamageEvent.DamageModifier.BLOCKING);
1100+
+ if (blockingDmg < 0) {
10991101
+ this.level().broadcastEntityEvent(this, (byte) 29); // SPIGOT-4635 - shield damage sound
1100-
+ if (ev.shieldTakesDamage()) this.hurtCurrentlyUsedShield(-ev.getBlockedDamage());
1102+
+ if (shieldTakesDamage.get()) this.hurtCurrentlyUsedShield(-(float) blockingDmg);
1103+
+ //Ketting end
11011104
+ Entity entity = damagesource.getDirectEntity();
11021105
+
11031106
+ if (entity instanceof LivingEntity) {
11041107
+ this.blockUsingShield((LivingEntity) entity);
11051108
+ }
1106-
+ }
11071109
+ }
11081110
+
11091111
+ absorptionModifier = (float) -event.getDamage(org.bukkit.event.entity.EntityDamageEvent.DamageModifier.ABSORPTION);
@@ -1123,6 +1125,8 @@
11231125
+ }
11241126
+ }
11251127
+
1128+
+ f = net.minecraftforge.common.ForgeHooks.onLivingDamage(this, damagesource, f);
1129+
+
11261130
+ if (f > 0 || !human) {
11271131
+ if (human) {
11281132
+ // PAIL: Be sure to drag all this code from the EntityHuman subclass each update.

0 commit comments

Comments
 (0)