diff --git a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinEntityRenderer.java b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinEntityRenderer.java index 61431e5e..617b0c5b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinEntityRenderer.java +++ b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinEntityRenderer.java @@ -26,18 +26,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(EntityRenderer.class) public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective { private EntityRendererHandler handler; - private SpectatorRenderer spectatorRenderer; + private SpectatorRenderer spectatorRenderer = new SpectatorRenderer(); @Override public void setHandler(EntityRendererHandler handler) { this.handler = handler; - if (spectatorRenderer != null) { - spectatorRenderer.cleanup(); - spectatorRenderer = null; - } - if (handler != null) { - spectatorRenderer = new SpectatorRenderer(); - } } @Override @@ -112,6 +105,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti private void renderSpectatorHand(float partialTicks, int renderPass, CallbackInfo ci) { if (handler != null) { if (handler.data instanceof CubicOpenGlFrameCapturer.Data) { + ci.cancel(); return; // No spectator hands during 360° view, we wouldn't even know where to put it } Entity currentEntity = ReplayHandler.getCurrentEntity(); @@ -119,6 +113,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti renderPass = handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0; spectatorRenderer.renderSpectatorHand((EntityPlayer) currentEntity, partialTicks, renderPass); } + } else if (ReplayHandler.isInReplay() && !ReplayHandler.isCamera()) { + Entity currentEntity = ReplayHandler.getCurrentEntity(); + if (!ReplayHandler.isCamera() && currentEntity instanceof EntityPlayer) { + spectatorRenderer.renderSpectatorHand((EntityPlayer) currentEntity, partialTicks, renderPass); + } } } diff --git a/src/main/java/eu/crushedpixel/replaymod/renderer/SpectatorRenderer.java b/src/main/java/eu/crushedpixel/replaymod/renderer/SpectatorRenderer.java index e168c6ce..69cac204 100644 --- a/src/main/java/eu/crushedpixel/replaymod/renderer/SpectatorRenderer.java +++ b/src/main/java/eu/crushedpixel/replaymod/renderer/SpectatorRenderer.java @@ -20,8 +20,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.MathHelper; import net.minecraft.world.storage.MapData; -import net.minecraftforge.client.event.RenderHandEvent; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -33,7 +31,6 @@ public class SpectatorRenderer { private EntityPlayer currentPlayer; public SpectatorRenderer() { - MinecraftForge.EVENT_BUS.register(this); FMLCommonHandler.instance().bus().register(this); } @@ -99,19 +96,6 @@ public class SpectatorRenderer { } } - @SubscribeEvent - public void renderHandEvent(RenderHandEvent event) { - if(!ReplayHandler.isInReplay() || ReplayHandler.isCamera()) { - return; - } - - EntityPlayer entityPlayer = getSpectatedPlayer(); - if(entityPlayer == null) return; - - renderSpectatorHand(entityPlayer, event.partialTicks, event.renderPass); - event.setCanceled(true); - } - @SuppressWarnings("deprecation") public void renderItemInFirstPerson(float partialTicks) { EntityPlayer entityPlayer = getSpectatedPlayer(); @@ -538,7 +522,6 @@ public class SpectatorRenderer { } public void cleanup() { - MinecraftForge.EVENT_BUS.unregister(this); FMLCommonHandler.instance().bus().unregister(this); } }