Skip to content

Commit

Permalink
chore: update Attack implementation mixin
Browse files Browse the repository at this point in the history
  • Loading branch information
gabizou committed Jul 15, 2024
1 parent bb515c5 commit 62fde87
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 10 deletions.
2 changes: 1 addition & 1 deletion forge/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name=SpongeForge
implementation=Forge
description=The SpongeAPI implementation for MinecraftForge

forgeVersion=51.0.17
forgeVersion=51.0.22
loom.platform=forge
fabric.loom.dontRemap=true
mixinConfigs=mixins.spongeforge.accessors.json,mixins.spongeforge.api.json,mixins.spongeforge.inventory.json,mixins.spongeforge.core.json,mixins.spongeforge.tracker.json
86 changes: 86 additions & 0 deletions gradle/verification-metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1530,6 +1530,14 @@
<sha256 value="ecd2df597d488e91f40a345a716f3d4ac1caa30b1d21ae33d1bc24e9f656744d" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="io.github.juuxel" name="union-relauncher" version="1.1.1">
<artifact name="union-relauncher-1.1.1.jar">
<sha256 value="e00285ead453f947c9242b317af43c4249029f66e60f5596c5bdb59302763947" origin="Generated by Gradle"/>
</artifact>
<artifact name="union-relauncher-1.1.1.pom">
<sha256 value="d1eb0e9bca96dd7a15b724f30d34a775cd423b0faf7ac2c15b4705e81c35ff8d" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="io.github.juuxel" name="unprotect" version="1.2.0">
<artifact name="unprotect-1.2.0.jar">
<sha256 value="d6b8259d9fcee6d21377e4e1ae0e7fecc2e0d8d2d40d83c020e2ca3dde57ec42" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -1886,6 +1894,14 @@
<sha256 value="b1854f5544c3f40be358f4f674fbb7247b1b853e79a1d5b1aa2fcb94898bbeb2" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.fabricmc" name="tiny-remapper" version="0.10.3">
<artifact name="tiny-remapper-0.10.3.jar">
<sha256 value="8b0abcbdc373f85b04dce6adf9db31922827957718b31f39791e7c254df736b2" origin="Generated by Gradle"/>
</artifact>
<artifact name="tiny-remapper-0.10.3.module">
<sha256 value="71987b3ab7d4ffd7d18002ed1111e8a2bb42c26cd7395d99db5145eeb0b60685" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.java" name="jvnet-parent" version="3">
<artifact name="jvnet-parent-3.pom">
<sha256 value="30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2521,6 +2537,14 @@
<sha256 value="17ac8990288a3dca6fa33771dffc6e379ad9b0a26f37c939fc48007d1c08c169" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="eventbus" version="6.2.8">
<artifact name="eventbus-6.2.8.jar">
<sha256 value="86e0402bb8cc260ae7a87f8f4b007955c5e0e7aef9110f9216421cb59010bd31" origin="Generated by Gradle"/>
</artifact>
<artifact name="eventbus-6.2.8.pom">
<sha256 value="abe00818b8198bcd1206f0dc74345af12a7cb6731aba9e8170a5c45f0465a828" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="fmlcore" version="1.20.4-49.0.38">
<artifact name="fmlcore-1.20.4-49.0.38.jar">
<sha256 value="1a6a8c2d2a20d0bdacbb73a20f4e87f1a26d0fca76b1e1e991d6527db9c24d8d" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2553,6 +2577,14 @@
<sha256 value="96e7cc1cb4c31b1796e6cff185b1ad28d92e4298061d1735722d3fc1d23e2196" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="fmlcore" version="1.21-51.0.22">
<artifact name="fmlcore-1.21-51.0.22.jar">
<sha256 value="961e6fcaf8e6554ce53e392b26f1990d38f3d5a05b71c2c0883d4ee1ef0e5890" origin="Generated by Gradle"/>
</artifact>
<artifact name="fmlcore-1.21-51.0.22.pom">
<sha256 value="785442a38e5ff1f2733599977e4afe2fc7b1521dcb8dddb09085552708a517c2" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="fmlearlydisplay" version="1.20.4-49.0.38">
<artifact name="fmlearlydisplay-1.20.4-49.0.38.jar">
<sha256 value="93f12d9140f63c6371f35f89a2081490cf895dc30926e06d1883a860cb00d6be" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2585,6 +2617,14 @@
<sha256 value="c9791c651243fb5b36326394f9c23db17ee44cc0538879260959a0329d0da606" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="fmlearlydisplay" version="1.21-51.0.22">
<artifact name="fmlearlydisplay-1.21-51.0.22.jar">
<sha256 value="cfe184104d84b71481ad1336c5b2449293946371749205729e3924b19be043e7" origin="Generated by Gradle"/>
</artifact>
<artifact name="fmlearlydisplay-1.21-51.0.22.pom">
<sha256 value="4ef96ef2036b20a89b5924eb80cdf7ddaecc6cab334e8e295e34c1e97530eea6" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="fmlloader" version="1.20.4-49.0.38">
<artifact name="fmlloader-1.20.4-49.0.38.jar">
<sha256 value="038956f20251656f44a0d50aebe4eca7b18437bea88908c4bd2db77166fb0594" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2617,6 +2657,14 @@
<sha256 value="6bb0ac219bfea3c01452d190938b0d016f3e16568f77c594ef8bddf8507752ab" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="fmlloader" version="1.21-51.0.22">
<artifact name="fmlloader-1.21-51.0.22.jar">
<sha256 value="41ca1e8c1d85952be98a3b8c27b1fb44ee87a5aef6176f0f5b6da058caa292e9" origin="Generated by Gradle"/>
</artifact>
<artifact name="fmlloader-1.21-51.0.22.pom">
<sha256 value="5e88c612f1132733949865099da0020ce63ecc5cf89041ae6bf425832397f504" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="forge" version="1.20.4-49.0.38">
<artifact name="forge-1.20.4-49.0.38-installer.jar">
<sha256 value="7781ceff8a8afea8a33705ee35775c8278951a1020a667370a8df4d423ea719e" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2673,6 +2721,20 @@
<sha256 value="b7dd3103993e854ad62fd734283e5f13aba8881d39be8d4d2f0f73ae4e515d80" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="forge" version="1.21-51.0.22">
<artifact name="forge-1.21-51.0.22-installer.jar">
<sha256 value="39b341a1f50ecb0f806e2b74c5db9fe516e1d539b203142d40cff73aec680f23" origin="Generated by Gradle"/>
</artifact>
<artifact name="forge-1.21-51.0.22-universal-srg.jar">
<sha256 value="7155317d3bfaade435ebcd7057d38a032ab5b1c3cf41dc38a37905b6885193bd" origin="Generated by Gradle"/>
</artifact>
<artifact name="forge-1.21-51.0.22-userdev.jar">
<sha256 value="b802ea2adbacdf32404349645d28a2e824b8af71c1a91d56363d13ff7646c7e1" origin="Generated by Gradle"/>
</artifact>
<artifact name="forge-1.21-51.0.22.pom">
<sha256 value="45dfa2dcca504a16cfeefc1bef8f4d5c24551087e28ce3b1dfd7b929928bbaa5" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="forgespi" version="7.1.3">
<artifact name="forgespi-7.1.3.jar">
<sha256 value="4c331e1bdac3215d134f8d0b92a814a866193d39793fb52441fa08621760851d" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2729,6 +2791,14 @@
<sha256 value="61f7b389d236890514721db9e04cc5afb2aeb4a197fb30667c168b5def928963" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="javafmllanguage" version="1.21-51.0.22">
<artifact name="javafmllanguage-1.21-51.0.22.jar">
<sha256 value="7b53aab0ff564beb4d6b2d78204ee342d0926a45e6b75980e9db568b49bcea5f" origin="Generated by Gradle"/>
</artifact>
<artifact name="javafmllanguage-1.21-51.0.22.pom">
<sha256 value="0459a750c9f2bc059e02a0eb0b371d513b0a617457ae1ff8f57f2ed296cbb461" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="lowcodelanguage" version="1.20.4-49.0.38">
<artifact name="lowcodelanguage-1.20.4-49.0.38.jar">
<sha256 value="3d2afae5f4f287fcaa986ac9a773914768e1494e4f30c2d525a11f8452334e1a" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2761,6 +2831,14 @@
<sha256 value="b8667b7d2b53c7dbb66edbc24fe07a7011ff71ff158d9256c94590ac90bab235" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="lowcodelanguage" version="1.21-51.0.22">
<artifact name="lowcodelanguage-1.21-51.0.22.jar">
<sha256 value="deff895fb0eb8c9fc7464410f240ed2cf10090bf0f849d212eaf1371108379b8" origin="Generated by Gradle"/>
</artifact>
<artifact name="lowcodelanguage-1.21-51.0.22.pom">
<sha256 value="39f3f624637c05eb031a117d6facf688e6bba5cdc8063586d6352ac0dac16ac3" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="mclanguage" version="1.20.4-49.0.38">
<artifact name="mclanguage-1.20.4-49.0.38.jar">
<sha256 value="f27a2497aedee2a786976f9b891f1893fbe1e96fa759a4a61800f3e5c5d77cc7" origin="Generated by Gradle"/>
Expand Down Expand Up @@ -2793,6 +2871,14 @@
<sha256 value="fd851be7ab9ed2fba29c5c8d35dfad3a2b3274adaa00c573818952746a363b2c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="mclanguage" version="1.21-51.0.22">
<artifact name="mclanguage-1.21-51.0.22.jar">
<sha256 value="bcae584dee3faecc804f27f5573d05e4756148d7d2541cb9279d0a18f5e4d11a" origin="Generated by Gradle"/>
</artifact>
<artifact name="mclanguage-1.21-51.0.22.pom">
<sha256 value="48831548e24c1b8144edbc9dd541f5a266f45d43261bac67c03df46db662fdb2" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="net.minecraftforge" name="mergetool" version="1.2.2">
<artifact name="mergetool-1.2.2.jar">
<sha256 value="b3dcfdcf49128481e24e4d23ecdb6e34ada10f9ed7fd522404e4eedccaaff36a" origin="Generated by Gradle"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import net.minecraft.sounds.SoundEvent;
import net.minecraft.stats.Stats;
import net.minecraft.tags.DamageTypeTags;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.damagesource.CombatRules;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
Expand All @@ -36,6 +37,7 @@
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import org.apache.logging.log4j.Level;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -56,8 +58,6 @@

import java.util.ArrayList;

import javax.annotation.Nonnull;

@Mixin(value = LivingEntity.class, priority = 900)
public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin
implements LivingEntityBridge, PlatformLivingEntityBridge {
Expand All @@ -69,14 +69,15 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin
@Shadow protected abstract void shadow$blockUsingShield(final LivingEntity $$0);
@Shadow protected abstract void shadow$hurtArmor(DamageSource source, float damage);
@Shadow protected abstract float shadow$getKnockback(final Entity $$0, final DamageSource $$1);
@Shadow public abstract ItemStack shadow$getItemInHand(final InteractionHand $$0);
@Shadow public abstract float shadow$getAbsorptionAmount();
@Shadow public abstract @NonNull ItemStack shadow$getWeaponItem();
@Shadow public abstract void setAbsorptionAmount(final float $$0);
@Shadow @Nonnull public abstract ItemStack shadow$getWeaponItem();

@Shadow protected int attackStrengthTicker;
@Shadow protected float lastHurt;
// @formatter:on


// @formatter:on
private float attackImpl$lastHurt;
private int attackImpl$InvulnerableTime;

Expand All @@ -86,6 +87,7 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin
protected float attackImpl$actuallyHurtFinalDamage;
protected boolean attackImpl$actuallyHurtCancelled;
protected float attackImpl$actuallyHurtBlockedDamage;
protected boolean attackImpl$wasInInvulnerableTime;

/**
* Forge onLivingAttack Hook
Expand Down Expand Up @@ -155,6 +157,7 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin

/**
* Capture the old values to reset if we end up cancelling or blocking.
* Also reset {@link #attackImpl$wasInInvulnerableTime}
*/
@Inject(method = "hurt", at = @At(value = "FIELD",
target = "Lnet/minecraft/world/entity/LivingEntity;walkAnimation:Lnet/minecraft/world/entity/WalkAnimationState;"))
Expand All @@ -163,15 +166,17 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin
this.attackImpl$lastHurt = this.lastHurt;
this.attackImpl$InvulnerableTime = this.invulnerableTime;
this.attackImpl$actuallyHurtCancelled = false;
this.attackImpl$wasInInvulnerableTime = false;
}

/**
* Fake {@link #lastHurt} to be 0 so that we go to #actuallyHurt even if we are invulnerable.
* Fake {@link #lastHurt} to be 0 so that we go to #actuallyHurt even if we are invulnerable and remember that we did
*/
@Redirect(method = "hurt",
at = @At(value = "FIELD", ordinal = 0,
target = "Lnet/minecraft/world/entity/LivingEntity;lastHurt:F"))
private float attackImpl$afterActuallyHurt(final LivingEntity instance) {
this.attackImpl$wasInInvulnerableTime = true;
return 0;
}

Expand Down Expand Up @@ -257,8 +262,13 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin
if (instance.isInvulnerableTo(damageSource)) {
return true;
}
var realOriginalDamage = originalDamage;
if (this.attackImpl$wasInInvulnerableTime) {
realOriginalDamage = Math.max(0, realOriginalDamage); // No negative damage because of invulnerableTime
}

// Call platform hook for adjusting damage
final var modAdjustedDamage = this.bridge$applyModDamage(instance, damageSource, originalDamage);
final var modAdjustedDamage = this.bridge$applyModDamage(instance, damageSource, realOriginalDamage);
// TODO check for direct call?
this.attackImpl$actuallyHurt = new DamageEventUtil.ActuallyHurt(instance, new ArrayList<>(), damageSource, modAdjustedDamage);
return false;
Expand Down Expand Up @@ -344,9 +354,12 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin

/**
* Set final damage after calling {@link LivingEntity#setAbsorptionAmount} in which we called the event
* !!NOTE that var9 is actually decompiled incorrectly!!
* It is NOT the final damage value instead the method parameter is mutated
*/
@ModifyVariable(method = "actuallyHurt", ordinal = 1,
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;setAbsorptionAmount(F)V", ordinal = 0, shift = At.Shift.AFTER))
@ModifyVariable(method = "actuallyHurt", ordinal = 0,
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;setAbsorptionAmount(F)V",
ordinal = 0, shift = At.Shift.AFTER), argsOnly = true)
public float attackImpl$setFinalDamage(final float value) {
if (this.attackImpl$actuallyHurtResult.event().isCancelled()) {
return 0;
Expand Down

0 comments on commit 62fde87

Please sign in to comment.