Fixed players still taking lava damage when riding a boat in lava

This commit is contained in:
Sollace 2022-10-15 11:52:00 +02:00
parent 8b38c54df0
commit 617869519d
5 changed files with 23 additions and 5 deletions

View file

@ -2,6 +2,11 @@ package com.minelittlepony.unicopia.entity.duck;
import net.minecraft.entity.Entity.RemovalReason; import net.minecraft.entity.Entity.RemovalReason;
public interface EntityDuck { public interface EntityDuck extends LavaAffine {
void setRemovalReason(RemovalReason reason); void setRemovalReason(RemovalReason reason);
@Override
default void setLavaAffine(boolean lavaAffine) {
}
} }

View file

@ -1,9 +1,12 @@
package com.minelittlepony.unicopia.entity.duck; 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.item.ItemStack;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
public interface LivingEntityDuck { public interface LivingEntityDuck extends PonyContainer<Equine<?>> {
void updateItemUsage(Hand hand, ItemStack stack, int time); void updateItemUsage(Hand hand, ItemStack stack, int time);
boolean isJumping(); boolean isJumping();

View file

@ -6,18 +6,19 @@ import org.spongepowered.asm.mixin.injection.*;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.minelittlepony.unicopia.entity.duck.LavaAffine; import com.minelittlepony.unicopia.entity.duck.LavaAffine;
import com.minelittlepony.unicopia.particle.ParticleUtils;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.data.*; import net.minecraft.entity.data.*;
import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluid;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtCompound;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.tag.FluidTags; import net.minecraft.tag.FluidTags;
import net.minecraft.tag.TagKey; import net.minecraft.tag.TagKey;
@Mixin(BoatEntity.class) @Mixin(BoatEntity.class)
abstract class MixinBoatEntity extends Entity implements LavaAffine { abstract class MixinBoatEntity extends Entity implements LavaAffine {
private static final TrackedData<Boolean> IS_LAVA_BOAT = DataTracker.registerData(BoatEntity.class, TrackedDataHandlerRegistry.BOOLEAN); private static final TrackedData<Boolean> IS_LAVA_BOAT = DataTracker.registerData(BoatEntity.class, TrackedDataHandlerRegistry.BOOLEAN);
MixinBoatEntity() { super(null, null); } MixinBoatEntity() { super(null, null); }
@ -61,6 +62,9 @@ abstract class MixinBoatEntity extends Entity implements LavaAffine {
@Override @Override
public void setLavaAffine(boolean lavaAffine) { public void setLavaAffine(boolean lavaAffine) {
dataTracker.set(IS_LAVA_BOAT, lavaAffine); dataTracker.set(IS_LAVA_BOAT, lavaAffine);
if (lavaAffine) {
ParticleUtils.spawnParticles(ParticleTypes.CLOUD, this, 10);
}
} }
@Override @Override

View file

@ -18,9 +18,15 @@ abstract class MixinEntity implements EntityDuck {
@Accessor @Accessor
public abstract void setRemovalReason(RemovalReason reason); 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) @Inject(method = "isFireImmune", at = @At("HEAD"), cancellable = true)
private void onIsFireImmune(CallbackInfoReturnable<Boolean> info) { private void onIsFireImmune(CallbackInfoReturnable<Boolean> info) {
if (this instanceof LavaAffine e && e.isLavaAffine()) { if (isLavaAffine()) {
info.setReturnValue(true); info.setReturnValue(true);
} }
} }

View file

@ -30,7 +30,7 @@ import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@Mixin(LivingEntity.class) @Mixin(LivingEntity.class)
abstract class MixinLivingEntity extends Entity implements PonyContainer<Equine<?>>, LivingEntityDuck { abstract class MixinLivingEntity extends Entity implements LivingEntityDuck {
@Shadow @Shadow
protected ItemStack activeItemStack; protected ItemStack activeItemStack;
@Shadow @Shadow