From a3d3c2dddc66daaa1b6b27a9a4ab1d0b6306a106 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Wed, 19 Aug 2015 11:31:16 +0200 Subject: [PATCH] Fix spectating being quit on world change / respawn --- .../replaymod/entities/CameraEntity.java | 37 ++++++++++++++++++- .../handlers/TickAndRenderListener.java | 4 -- .../handlers/keyboard/KeyInputHandler.java | 3 +- .../replaymod/replay/ReplayHandler.java | 11 +----- .../replaymod/replay/ReplaySender.java | 2 - 5 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java b/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java index 00a26eab..8656a27a 100755 --- a/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java +++ b/src/main/java/eu/crushedpixel/replaymod/entities/CameraEntity.java @@ -8,6 +8,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.stats.StatFileWriter; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; @@ -16,6 +17,8 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import org.lwjgl.Sys; +import java.util.UUID; + public class CameraEntity extends EntityPlayerSP { public static final double SPEED_CHANGE = 0.5; @@ -49,8 +52,13 @@ public class CameraEntity extends EntityPlayerSP { private boolean speedup = false; + private UUID spectating; + public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatFileWriter statFileWriter) { super(mcIn, worldIn, netHandlerPlayClient, statFileWriter); + if (mc.thePlayer instanceof CameraEntity) { + spectating = ((CameraEntity) mc.thePlayer).spectating; + } } //frac = time since last tick @@ -193,8 +201,19 @@ public class CameraEntity extends EntityPlayerSP { @Override public void onUpdate() { Entity view = mc.getRenderViewEntity(); - if (view != null && view != this) { - updatePos(view); + if (view != null) { + if (spectating != null && (view.getUniqueID() != spectating || view.worldObj != worldObj)) { + view = worldObj.getPlayerEntityByUUID(spectating); + if (view != null) { + mc.setRenderViewEntity(view); + } else { + mc.setRenderViewEntity(this); + return; + } + } + if (view != this) { + updatePos(view); + } } } @@ -236,6 +255,20 @@ public class CameraEntity extends EntityPlayerSP { return true; } + public void spectate(Entity e) { + if (e == null || e == this) { + spectating = null; + e = this; + } else if (e instanceof EntityPlayer) { + spectating = e.getUniqueID(); + } + + if (mc.getRenderViewEntity() != e) { + mc.setRenderViewEntity(e); + updatePos(e); + } + } + public enum MoveDirection { UP, DOWN, LEFT, RIGHT, FORWARD, BACKWARD } diff --git a/src/main/java/eu/crushedpixel/replaymod/events/handlers/TickAndRenderListener.java b/src/main/java/eu/crushedpixel/replaymod/events/handlers/TickAndRenderListener.java index c6265fb0..d1b9df6d 100644 --- a/src/main/java/eu/crushedpixel/replaymod/events/handlers/TickAndRenderListener.java +++ b/src/main/java/eu/crushedpixel/replaymod/events/handlers/TickAndRenderListener.java @@ -54,10 +54,6 @@ public class TickAndRenderListener { if(ReplayHandler.isInPath()) ReplayProcess.tickReplay(false); if(ReplayHandler.isCamera()) mc.setRenderViewEntity(ReplayHandler.getCameraEntity()); - if(mc.getRenderViewEntity() != null && (mc.getRenderViewEntity() == mc.thePlayer || !mc.getRenderViewEntity().isEntityAlive()) - && ReplayHandler.getCameraEntity() != null && !ReplayHandler.isInPath()) { - ReplayHandler.spectateCamera(); - } if(mc.isGamePaused() && ReplayHandler.isInPath()) { mc.isGamePaused = false; diff --git a/src/main/java/eu/crushedpixel/replaymod/events/handlers/keyboard/KeyInputHandler.java b/src/main/java/eu/crushedpixel/replaymod/events/handlers/keyboard/KeyInputHandler.java index 27b9757b..6bc6b7c9 100755 --- a/src/main/java/eu/crushedpixel/replaymod/events/handlers/keyboard/KeyInputHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/events/handlers/keyboard/KeyInputHandler.java @@ -71,9 +71,8 @@ public class KeyInputHandler { if(ReplayHandler.isCamera()) { down = true; speedup = true; - } else { - ReplayHandler.spectateCamera(); } + ReplayHandler.spectateCamera(); } } diff --git a/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java b/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java index c6b78a3f..02c5aca2 100755 --- a/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/replay/ReplayHandler.java @@ -135,18 +135,11 @@ public class ReplayHandler { } public static void spectateEntity(Entity e) { - if(e == null) { - spectateCamera(); - } - else { - if (mc.getRenderViewEntity() != e) { - mc.setRenderViewEntity(e); - } - } + getCameraEntity().spectate(e); } public static void spectateCamera() { - mc.setRenderViewEntity(getCameraEntity()); + spectateEntity(null); } public static boolean isCamera() { diff --git a/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java b/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java index 4865dd40..f1888061 100755 --- a/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java +++ b/src/main/java/eu/crushedpixel/replaymod/replay/ReplaySender.java @@ -386,8 +386,6 @@ public class ReplaySender extends ChannelInboundHandlerAdapter { CameraEntity cent = ReplayHandler.getCameraEntity(); cent.moveAbsolute(ppl.func_148932_c(), ppl.func_148928_d(), ppl.func_148933_e()); - - ReplayHandler.spectateCamera(); return null; } }.call();