From fca13e61adcfbdbf38497c20a2e41ef120ef1d13 Mon Sep 17 00:00:00 2001 From: Anthony Hilyard Date: Wed, 25 Aug 2021 14:51:42 -0700 Subject: Initial commit. --- .../anthonyhilyard/iceberg/mixin/EntityMixin.java | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java (limited to 'src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java') diff --git a/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java b/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java new file mode 100644 index 0000000..f4ca091 --- /dev/null +++ b/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java @@ -0,0 +1,66 @@ +package com.anthonyhilyard.iceberg.mixin; + +import java.util.Objects; + +import com.anthonyhilyard.iceberg.events.EntityFluidEvent; + +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.Inject; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.entity.Entity; +import net.minecraft.fluid.Fluid; +import net.minecraft.tags.ITag; +import net.minecraftforge.common.MinecraftForge; + +@Mixin(Entity.class) +public class EntityMixin extends net.minecraftforge.common.capabilities.CapabilityProvider +{ + private Fluid previousFluidOnEyes = null; + + @Shadow + protected ITag fluidOnEyes; + + protected EntityMixin(Class baseClass) { super(baseClass); } + + @Inject(method = "updateFluidOnEyes", at = @At(value = "RETURN")) + public void onUpdateFluidOnEyes(CallbackInfo callbackInfo) + { + if (fluidOnEyes != null && fluidOnEyes.getValues().size() > 0) + { + previousFluidOnEyes = fluidOnEyes.getValues().get(0); + } + else if (previousFluidOnEyes != null) + { + // We were submerged in a fluid that we no longer are. + if (previousFluidOnEyes != null) + { + MinecraftForge.EVENT_BUS.post(new EntityFluidEvent.Exited((Entity)(Object)this, previousFluidOnEyes)); + } + previousFluidOnEyes = null; + } + } + + @Inject(method = "updateFluidOnEyes", + at = @At(value = "FIELD", target = "Lnet/minecraft/entity/Entity;fluidOnEyes:Lnet/minecraft/tags/ITag;", ordinal = 1, shift = Shift.AFTER)) + public void onUpdateFluidOnEyeAssign(CallbackInfo callbackInfo) + { + Fluid currentFluid = null; + if (fluidOnEyes != null && fluidOnEyes.getValues().size() > 0) + { + currentFluid = fluidOnEyes.getValues().get(0); + } + + if (!Objects.equals(previousFluidOnEyes, currentFluid)) + { + // We are now submerged in a fluid that doesn't match the previous one. + if (currentFluid != null) + { + MinecraftForge.EVENT_BUS.post(new EntityFluidEvent.Entered((Entity)(Object)this, currentFluid)); + } + } + } +} -- cgit