diff --git a/src/main/java/eu/crushedpixel/replaymod/events/handlers/RecordingHandler.java b/src/main/java/eu/crushedpixel/replaymod/events/handlers/RecordingHandler.java index 9ca66d0b..6bd7ad8f 100755 --- a/src/main/java/eu/crushedpixel/replaymod/events/handlers/RecordingHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/events/handlers/RecordingHandler.java @@ -19,7 +19,6 @@ import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; import net.minecraftforge.event.entity.player.PlayerUseItemEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent; -import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent; @@ -43,6 +42,15 @@ public class RecordingHandler { } } + public void onPlayerRespawn() { + if(!ConnectionEventHandler.isRecording()) return; + try { + ConnectionEventHandler.insertPacket(spawnPlayer(mc.thePlayer)); + } catch(Exception e) { + e.printStackTrace(); + } + } + private S0CPacketSpawnPlayer spawnPlayer(EntityPlayer player) { try { S0CPacketSpawnPlayer packet = new S0CPacketSpawnPlayer(); @@ -271,18 +279,6 @@ public class RecordingHandler { } } - @SubscribeEvent - public void onRespawn(PlayerRespawnEvent event) { - if(!ConnectionEventHandler.isRecording()) return; - try { - //destroy entity, then respawn - ConnectionEventHandler.insertPacket(new S13PacketDestroyEntities(mc.thePlayer.getEntityId())); - ConnectionEventHandler.insertPacket(spawnPlayer(mc.thePlayer)); - } catch(Exception e) { - e.printStackTrace(); - } - } - @SubscribeEvent public void onStartEating(PlayerUseItemEvent.Start event) { if(!ConnectionEventHandler.isRecording()) return; diff --git a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinNetHandlerPlayClient.java b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinNetHandlerPlayClient.java index a4795349..5f0e73dd 100644 --- a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinNetHandlerPlayClient.java +++ b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinNetHandlerPlayClient.java @@ -4,6 +4,7 @@ import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.recording.ConnectionEventHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.network.play.server.S07PacketRespawn; import net.minecraft.network.play.server.S38PacketPlayerListItem; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -34,4 +35,18 @@ public abstract class MixinNetHandlerPlayClient { } } } + + /** + * Record the own player entity respawning. + * We cannot use the {@link net.minecraftforge.event.entity.EntityJoinWorldEvent} because that would also include + * the first spawn which is already handled by {@link #recordOwnJoin(S38PacketPlayerListItem, CallbackInfo)}. + * @param packet The packet + * @param ci Callback info + */ + @Inject(method = "handleRespawn", at=@At("RETURN")) + public void recordOwnRespawn(S07PacketRespawn packet, CallbackInfo ci) { + if (ConnectionEventHandler.isRecording()) { + ReplayMod.recordingHandler.onPlayerRespawn(); + } + } }