Pause the recording when the integrated server is paused
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)";
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user