aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java
diff options
context:
space:
mode:
authorAnthony Hilyard <anthony.hilyard@gmail.com>2021-08-25 14:51:42 -0700
committerAnthony Hilyard <anthony.hilyard@gmail.com>2021-08-25 14:51:42 -0700
commitfca13e61adcfbdbf38497c20a2e41ef120ef1d13 (patch)
tree2fcf430a4de62639338bf9b360853bb46c5b9d90 /src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java
downloadIceberg-fca13e61adcfbdbf38497c20a2e41ef120ef1d13.tar.gz
Iceberg-fca13e61adcfbdbf38497c20a2e41ef120ef1d13.tar.bz2
Iceberg-fca13e61adcfbdbf38497c20a2e41ef120ef1d13.zip
Initial commit.
Diffstat (limited to 'src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java')
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/EntityMixin.java66
1 files changed, 66 insertions, 0 deletions
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<Entity>
+{
+ private Fluid previousFluidOnEyes = null;
+
+ @Shadow
+ protected ITag<Fluid> fluidOnEyes;
+
+ protected EntityMixin(Class<Entity> 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));
+ }
+ }
+ }
+}