diff --git a/src/main/java/com/replaymod/compat/ReplayModCompat.java b/src/main/java/com/replaymod/compat/ReplayModCompat.java index 59f96999..02c65914 100644 --- a/src/main/java/com/replaymod/compat/ReplayModCompat.java +++ b/src/main/java/com/replaymod/compat/ReplayModCompat.java @@ -1,6 +1,7 @@ package com.replaymod.compat; import com.replaymod.compat.optifine.DisableFastRender; +import com.replaymod.compat.oranges17animations.HideInvisibleEntities; import com.replaymod.compat.shaders.ShaderBeginRender; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; @@ -20,6 +21,7 @@ public class ReplayModCompat { EventBus bus = FMLCommonHandler.instance().bus(); bus.register(new ShaderBeginRender()); bus.register(new DisableFastRender()); + bus.register(new HideInvisibleEntities()); } } diff --git a/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java b/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java new file mode 100644 index 00000000..1600905d --- /dev/null +++ b/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java @@ -0,0 +1,28 @@ +package com.replaymod.compat.oranges17animations; + +import com.replaymod.replay.camera.CameraEntity; +import net.minecraft.client.Minecraft; +import net.minecraftforge.client.event.RenderLivingEvent; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +/** + * Orange seems to have copied vast parts of the RendererLivingEntity into their ArmorAnimation class which cancels the RenderLivingEvent.Pre and calls its own code instead. + * This breaks our mixin which assures that, even though the camera is in spectator mode, it cannot see invisible entities. + * + * To fix this issue, we simply cancel the RenderLivingEvent.Pre before it gets to ArmorAnimation if the entity is invisible. + */ +public class HideInvisibleEntities { + private final Minecraft mc = Minecraft.getMinecraft(); + private final boolean modLoaded = Loader.isModLoaded("animations"); + + @SubscribeEvent(priority = EventPriority.HIGH) + public void preRenderLiving(RenderLivingEvent.Pre event) { + if (modLoaded) { + if (mc.thePlayer instanceof CameraEntity && event.entity.isInvisible()) { + event.setCanceled(true); + } + } + } +}