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.*;
|
||||||
import net.minecraft.network.play.server.S14PacketEntity.S17PacketEntityLookMove;
|
import net.minecraft.network.play.server.S14PacketEntity.S17PacketEntityLookMove;
|
||||||
import net.minecraft.network.play.server.S38PacketPlayerListItem.Action;
|
import net.minecraft.network.play.server.S38PacketPlayerListItem.Action;
|
||||||
|
import net.minecraft.server.integrated.IntegratedServer;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
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.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
|
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
|
||||||
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -447,4 +449,16 @@ public class RecordingHandler {
|
|||||||
e.printStackTrace();
|
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;
|
return isRecording;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void notifyServerPaused() {
|
||||||
|
if (packetListener != null) {
|
||||||
|
packetListener.serverWasPaused = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void insertPacket(Packet packet) {
|
public static void insertPacket(Packet packet) {
|
||||||
if(!isRecording || packetListener == null) {
|
if(!isRecording || packetListener == null) {
|
||||||
String reason = isRecording ? " (recording)" : " (null)";
|
String reason = isRecording ? " (recording)" : " (null)";
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter {
|
|||||||
protected Long startTime = null;
|
protected Long startTime = null;
|
||||||
protected String name;
|
protected String name;
|
||||||
protected String worldName;
|
protected String worldName;
|
||||||
|
protected boolean serverWasPaused;
|
||||||
protected long lastSentPacket = 0;
|
protected long lastSentPacket = 0;
|
||||||
protected boolean alive = true;
|
protected boolean alive = true;
|
||||||
protected DataWriter dataWriter;
|
protected DataWriter dataWriter;
|
||||||
@@ -94,6 +95,7 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter {
|
|||||||
public class DataWriter {
|
public class DataWriter {
|
||||||
|
|
||||||
private boolean active = true;
|
private boolean active = true;
|
||||||
|
private long paused;
|
||||||
|
|
||||||
private ConcurrentLinkedQueue<PacketData> queue = new ConcurrentLinkedQueue<PacketData>();
|
private ConcurrentLinkedQueue<PacketData> queue = new ConcurrentLinkedQueue<PacketData>();
|
||||||
private DataOutputStream stream;
|
private DataOutputStream stream;
|
||||||
@@ -145,10 +147,16 @@ public abstract class DataListener extends ChannelInboundHandlerAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void writePacket(byte[] bytes) {
|
public synchronized void writePacket(byte[] bytes) {
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
if(startTime == null) {
|
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;
|
lastSentPacket = timestamp;
|
||||||
queue.add(new PacketData(bytes, 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_110737_b # particleTextures
|
||||||
public net.minecraft.client.particle.EffectRenderer field_78876_b # fxLayers
|
public net.minecraft.client.particle.EffectRenderer field_78876_b # fxLayers
|
||||||
|
|
||||||
|
# IntegratedServer
|
||||||
|
public net.minecraft.server.integrated.IntegratedServer field_71348_o # isGamePaused
|
||||||
|
|
||||||
# Example
|
# Example
|
||||||
# public net.minecraft.package.ClassName func_some_id(Ljava/lang/Class;IZS)V # methodName
|
# public net.minecraft.package.ClassName func_some_id(Ljava/lang/Class;IZS)V # methodName
|
||||||
|
|||||||
Reference in New Issue
Block a user