Pause the recording when the integrated server is paused

This commit is contained in:
johni0702
2015-07-07 13:09:38 +02:00
parent 9867dce79c
commit 9f4b2d9026
4 changed files with 33 additions and 2 deletions

View File

@@ -12,6 +12,7 @@ import net.minecraft.network.PacketBuffer;
import net.minecraft.network.play.server.*;
import net.minecraft.network.play.server.S14PacketEntity.S17PacketEntityLookMove;
import net.minecraft.network.play.server.S38PacketPlayerListItem.Action;
import net.minecraft.server.integrated.IntegratedServer;
import net.minecraft.util.MathHelper;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
@@ -22,6 +23,7 @@ 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;
import java.util.Objects;
@@ -447,4 +449,16 @@ public class RecordingHandler {
e.printStackTrace();
}
}
@SubscribeEvent
public void checkForGamePaused(TickEvent.RenderTickEvent event) {
if (event.phase != TickEvent.Phase.START) return;
if (!ConnectionEventHandler.isRecording()) return;
if (mc.isIntegratedServerRunning()) {
IntegratedServer server = mc.getIntegratedServer();
if (server != null && server.isGamePaused) {
ConnectionEventHandler.notifyServerPaused();
}
}
}
}

View File

@@ -39,6 +39,12 @@ public class ConnectionEventHandler {
return isRecording;
}
public static void notifyServerPaused() {
if (packetListener != null) {
packetListener.serverWasPaused = true;
}
}
public static void insertPacket(Packet packet) {
if(!isRecording || packetListener == null) {
String reason = isRecording ? " (recording)" : " (null)";

View File

@@ -30,6 +30,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter {
protected Long startTime = null;
protected String name;
protected String worldName;
protected boolean serverWasPaused;
protected long lastSentPacket = 0;
protected boolean alive = true;
protected DataWriter dataWriter;
@@ -94,6 +95,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter {
public class DataWriter {
private boolean active = true;
private long paused;
private ConcurrentLinkedQueue<PacketData> queue = new ConcurrentLinkedQueue<PacketData>();
private DataOutputStream stream;
@@ -145,10 +147,16 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter {
}
public synchronized void writePacket(byte[] bytes) {
long now = System.currentTimeMillis();
if(startTime == null) {
startTime = System.currentTimeMillis();
startTime = now;
}
int timestamp = (int) (System.currentTimeMillis() - startTime);
if (serverWasPaused) {
paused = now - startTime - lastSentPacket;
serverWasPaused = false;
}
int timestamp = (int) (now - startTime - paused);
lastSentPacket = timestamp;
queue.add(new PacketData(bytes, timestamp));
}

View File

@@ -91,5 +91,8 @@ public net.minecraft.client.entity.EntityOtherPlayerMP *
public net.minecraft.client.particle.EffectRenderer field_110737_b # particleTextures
public net.minecraft.client.particle.EffectRenderer field_78876_b # fxLayers
# IntegratedServer
public net.minecraft.server.integrated.IntegratedServer field_71348_o # isGamePaused
# Example
# public net.minecraft.package.ClassName func_some_id(Ljava/lang/Class;IZS)V # methodName