From 617869519d5a77552fd4efabce918700362a5b6e Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 15 Oct 2022 11:52:00 +0200 Subject: [PATCH] Fixed players still taking lava damage when riding a boat in lava --- .../minelittlepony/unicopia/entity/duck/EntityDuck.java | 7 ++++++- .../unicopia/entity/duck/LivingEntityDuck.java | 5 ++++- .../minelittlepony/unicopia/mixin/MixinBoatEntity.java | 6 +++++- .../com/minelittlepony/unicopia/mixin/MixinEntity.java | 8 +++++++- .../minelittlepony/unicopia/mixin/MixinLivingEntity.java | 2 +- 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/entity/duck/EntityDuck.java b/src/main/java/com/minelittlepony/unicopia/entity/duck/EntityDuck.java index 0e3de1b9..a3df016c 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/duck/EntityDuck.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/duck/EntityDuck.java @@ -2,6 +2,11 @@ package com.minelittlepony.unicopia.entity.duck; import net.minecraft.entity.Entity.RemovalReason; -public interface EntityDuck { +public interface EntityDuck extends LavaAffine { void setRemovalReason(RemovalReason reason); + + @Override + default void setLavaAffine(boolean lavaAffine) { + + } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java b/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java index 38515145..e7494f3c 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java @@ -1,9 +1,12 @@ package com.minelittlepony.unicopia.entity.duck; +import com.minelittlepony.unicopia.entity.Equine; +import com.minelittlepony.unicopia.entity.PonyContainer; + import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; -public interface LivingEntityDuck { +public interface LivingEntityDuck extends PonyContainer> { void updateItemUsage(Hand hand, ItemStack stack, int time); boolean isJumping(); diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinBoatEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBoatEntity.java index 627651b1..3f049d53 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinBoatEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBoatEntity.java @@ -6,18 +6,19 @@ import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import com.minelittlepony.unicopia.entity.duck.LavaAffine; +import com.minelittlepony.unicopia.particle.ParticleUtils; import net.minecraft.entity.Entity; import net.minecraft.entity.data.*; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.fluid.Fluid; import net.minecraft.nbt.NbtCompound; +import net.minecraft.particle.ParticleTypes; import net.minecraft.tag.FluidTags; import net.minecraft.tag.TagKey; @Mixin(BoatEntity.class) abstract class MixinBoatEntity extends Entity implements LavaAffine { - private static final TrackedData IS_LAVA_BOAT = DataTracker.registerData(BoatEntity.class, TrackedDataHandlerRegistry.BOOLEAN); MixinBoatEntity() { super(null, null); } @@ -61,6 +62,9 @@ abstract class MixinBoatEntity extends Entity implements LavaAffine { @Override public void setLavaAffine(boolean lavaAffine) { dataTracker.set(IS_LAVA_BOAT, lavaAffine); + if (lavaAffine) { + ParticleUtils.spawnParticles(ParticleTypes.CLOUD, this, 10); + } } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntity.java index 3deebaba..c442cd6d 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntity.java @@ -18,9 +18,15 @@ abstract class MixinEntity implements EntityDuck { @Accessor public abstract void setRemovalReason(RemovalReason reason); + @Override + public boolean isLavaAffine() { + Entity self = (Entity)(Object)this; + return self.hasVehicle() && ((LavaAffine)self.getVehicle()).isLavaAffine(); + } + @Inject(method = "isFireImmune", at = @At("HEAD"), cancellable = true) private void onIsFireImmune(CallbackInfoReturnable info) { - if (this instanceof LavaAffine e && e.isLavaAffine()) { + if (isLavaAffine()) { info.setReturnValue(true); } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java index 122ddfc1..c6df6a4d 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java @@ -30,7 +30,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; @Mixin(LivingEntity.class) -abstract class MixinLivingEntity extends Entity implements PonyContainer>, LivingEntityDuck { +abstract class MixinLivingEntity extends Entity implements LivingEntityDuck { @Shadow protected ItemStack activeItemStack; @Shadow