From 0f9a8970a646bad1932c2a909cd15e991f4fe4b3 Mon Sep 17 00:00:00 2001 From: ToCraft Date: Thu, 28 Sep 2023 06:49:34 +0200 Subject: [PATCH] moved cancelAirIncrement to LivingBreathEvent --- .../identity/mixin/LivingEntityMixin.java | 19 --------- .../fabric/mixin/LivingEntityMixin.java | 40 +++++++++++++++++++ .../resources/identity-fabric.mixins.json | 1 + .../forge/WalkersForgeEventHandler.java | 27 +++++++++++++ gradle.properties | 2 +- 5 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 fabric/src/main/java/draylar/identity/fabric/mixin/LivingEntityMixin.java create mode 100644 forge/src/main/java/draylar/identity/forge/WalkersForgeEventHandler.java diff --git a/common/src/main/java/draylar/identity/mixin/LivingEntityMixin.java b/common/src/main/java/draylar/identity/mixin/LivingEntityMixin.java index 7deed0c..ed477a7 100644 --- a/common/src/main/java/draylar/identity/mixin/LivingEntityMixin.java +++ b/common/src/main/java/draylar/identity/mixin/LivingEntityMixin.java @@ -61,25 +61,6 @@ private void onDeath(DamageSource source, CallbackInfo ci) { } } - @Redirect( - method = "baseTick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setAir(I)V", ordinal = 2) - ) - private void cancelAirIncrement(LivingEntity livingEntity, int air) { - // Aquatic creatures should not regenerate breath on land - if ((Object) this instanceof PlayerEntity player) { - LivingEntity identity = PlayerIdentity.getIdentity(player); - - if (identity != null) { - if (Identity.isAquatic(identity)) { - return; - } - } - } - - this.setAir(this.getNextAirOnLand(this.getAir())); - } - @Redirect( method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;hasStatusEffect(Lnet/minecraft/entity/effect/StatusEffect;)Z", ordinal = 0) diff --git a/fabric/src/main/java/draylar/identity/fabric/mixin/LivingEntityMixin.java b/fabric/src/main/java/draylar/identity/fabric/mixin/LivingEntityMixin.java new file mode 100644 index 0000000..5f721e0 --- /dev/null +++ b/fabric/src/main/java/draylar/identity/fabric/mixin/LivingEntityMixin.java @@ -0,0 +1,40 @@ +package draylar.identity.mixin; + +import draylar.identity.Identity; +import draylar.identity.api.PlayerIdentity; +import net.minecraft.entity.*; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(LivingEntity.class) +public abstract class LivingEntityMixin extends Entity { + + @Shadow + protected abstract int getNextAirOnLand(int air); + + protected LivingEntityMixin(EntityType type, World world) { + super(type, world); + } + + @Redirect( + method = "baseTick", + at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setAir(I)V", ordinal = 2) + ) + private void cancelAirIncrement(LivingEntity livingEntity, int air) { + // Aquatic creatures should not regenerate breath on land + if ((Object) this instanceof PlayerEntity player) { + LivingEntity identity = PlayerIdentity.getIdentity(player); + + if (identity != null) { + if (Identity.isAquatic(identity)) { + return; + } + } + } + + this.setAir(this.getNextAirOnLand(this.getAir())); + } +} diff --git a/fabric/src/main/resources/identity-fabric.mixins.json b/fabric/src/main/resources/identity-fabric.mixins.json index f5c3129..3502051 100644 --- a/fabric/src/main/resources/identity-fabric.mixins.json +++ b/fabric/src/main/resources/identity-fabric.mixins.json @@ -4,6 +4,7 @@ "package": "draylar.identity.fabric.mixin", "compatibilityLevel": "JAVA_16", "mixins": [ + "LivingEntityMixin", "WitherEntityMixin" ], "client": [ diff --git a/forge/src/main/java/draylar/identity/forge/WalkersForgeEventHandler.java b/forge/src/main/java/draylar/identity/forge/WalkersForgeEventHandler.java new file mode 100644 index 0000000..af06d4d --- /dev/null +++ b/forge/src/main/java/draylar/identity/forge/WalkersForgeEventHandler.java @@ -0,0 +1,27 @@ +package tocraft.walkers.forge; + +import net.minecraft.entity.*; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraftforge.event.entity.living.LivingBreatheEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import draylar.identity.Identity; +import draylar.identity.api.PlayerIdentity; + +@Mod.EventBusSubscriber(modid = "identity") +public class WalkersForgeEventHandler { + + @SubscribeEvent + public static void livingBreath(LivingBreatheEvent event) { + if (event.getEntity() instanceof PlayerEntity) { + LivingEntity identity = PlayerIdentity.getIdentity((PlayerEntity) event.getEntity()); + + if (identity != null) { + if (Identity.isAquatic(identity)) { + event.setCanBreathe(false); + + } + } + } + } +} diff --git a/gradle.properties b/gradle.properties index 72834e1..b81d765 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ maven_group=dev.draylar fabric_loader_version=0.14.21 fabric_api_version=0.84.0+1.20.1 yarn_mappings=1.20.1+build.8 -forge_version=47.0.43 +forge_version=47.1.43 # Dependency Versions architectury_version=9.0.8 \ No newline at end of file