Fixed some weird stuff I did back in the days when first writing the Packet Serialization.

This commit is contained in:
Marius Metzger
2015-02-20 12:54:23 +01:00
parent d3a9331bf7
commit 2cf53d233a
6 changed files with 41 additions and 32 deletions

View File

@@ -14,12 +14,14 @@ import net.minecraft.client.gui.GuiOptions;
import net.minecraft.client.gui.GuiVideoSettings; import net.minecraft.client.gui.GuiVideoSettings;
import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.GameSettings.Options; import net.minecraft.client.settings.GameSettings.Options;
import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent; import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent;
import net.minecraftforge.client.event.GuiScreenEvent.DrawScreenEvent; import net.minecraftforge.client.event.GuiScreenEvent.DrawScreenEvent;
import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent; import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.Event.Result; import net.minecraftforge.fml.common.eventhandler.Event.Result;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.ReplayMod;
@@ -114,6 +116,7 @@ public class GuiEventHandler {
if(b.id == 1) { if(b.id == 1) {
b.displayString = "Exit Replay"; b.displayString = "Exit Replay";
b.yPosition -= 24*2; b.yPosition -= 24*2;
b.id = GuiConstants.EXIT_REPLAY_BUTTON;
} else if(b.id >= 5 && b.id <= 7) { } else if(b.id >= 5 && b.id <= 7) {
event.buttonList.remove(b); event.buttonList.remove(b);
} else if(b.id != 4) { } else if(b.id != 4) {
@@ -161,21 +164,19 @@ public class GuiEventHandler {
mc.displayGuiScreen(new GuiReplaySettings(event.gui)); mc.displayGuiScreen(new GuiReplaySettings(event.gui));
} }
if(ReplayHandler.replayActive() && event.gui instanceof GuiIngameMenu && event.button.id == 1) { if(ReplayHandler.replayActive() && event.gui instanceof GuiIngameMenu && event.button.id == GuiConstants.EXIT_REPLAY_BUTTON) {
ReplayHandler.endReplay();
event.button.enabled = false; event.button.enabled = false;
mc.gameSettings.setOptionFloatValue(Options.GAMMA, ReplayHandler.getInitialGamma()); mc.gameSettings.setOptionFloatValue(Options.GAMMA, ReplayHandler.getInitialGamma());
ReplayHandler.lastExit = System.currentTimeMillis(); ReplayHandler.lastExit = System.currentTimeMillis();
/* This is already being executed by the default Exit action handling (vanilla code)
mc.theWorld.sendQuittingDisconnectingPacket(); mc.theWorld.sendQuittingDisconnectingPacket();
mc.loadWorld((WorldClient)null); mc.loadWorld((WorldClient)null);
mc.displayGuiScreen(new GuiMainMenu()); mc.displayGuiScreen(new GuiMainMenu());
*/
ReplayHandler.endReplay();
ReplayGuiRegistry.show(); ReplayGuiRegistry.show();
} }
} }

View File

@@ -135,7 +135,7 @@ public class GuiReplayOverlay extends Gui {
if(mc != null && mc.thePlayer != null) if(mc != null && mc.thePlayer != null)
MinecraftTicker.runMouseKeyboardTick(mc); MinecraftTicker.runMouseKeyboardTick(mc);
} }
if(mc.getRenderViewEntity() == mc.thePlayer || !mc.getRenderViewEntity().isEntityAlive() if((mc.getRenderViewEntity() == mc.thePlayer || !mc.getRenderViewEntity().isEntityAlive())
&& ReplayHandler.getCameraEntity() != null) { && ReplayHandler.getCameraEntity() != null) {
ReplayHandler.spectateCamera(); ReplayHandler.spectateCamera();
ReplayHandler.getCameraEntity().movePath(new Position(lastX, lastY, lastZ, lastPitch, lastYaw)); ReplayHandler.getCameraEntity().movePath(new Position(lastX, lastY, lastZ, lastPitch, lastYaw));

View File

@@ -3,13 +3,12 @@ package eu.crushedpixel.replaymod.events;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import java.io.IOException; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer.EnumStatus;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
@@ -21,18 +20,17 @@ import net.minecraft.network.play.server.S0CPacketSpawnPlayer;
import net.minecraft.network.play.server.S0DPacketCollectItem; import net.minecraft.network.play.server.S0DPacketCollectItem;
import net.minecraft.network.play.server.S12PacketEntityVelocity; import net.minecraft.network.play.server.S12PacketEntityVelocity;
import net.minecraft.network.play.server.S13PacketDestroyEntities; import net.minecraft.network.play.server.S13PacketDestroyEntities;
import net.minecraft.network.play.server.S1BPacketEntityAttach;
import net.minecraft.network.play.server.S14PacketEntity.S17PacketEntityLookMove; import net.minecraft.network.play.server.S14PacketEntity.S17PacketEntityLookMove;
import net.minecraft.network.play.server.S18PacketEntityTeleport; import net.minecraft.network.play.server.S18PacketEntityTeleport;
import net.minecraft.network.play.server.S19PacketEntityHeadLook; import net.minecraft.network.play.server.S19PacketEntityHeadLook;
import net.minecraft.network.play.server.S19PacketEntityStatus; import net.minecraft.network.play.server.S19PacketEntityStatus;
import net.minecraft.network.play.server.S1BPacketEntityAttach;
import net.minecraft.network.play.server.S38PacketPlayerListItem; import net.minecraft.network.play.server.S38PacketPlayerListItem;
import net.minecraft.network.play.server.S38PacketPlayerListItem.Action; import net.minecraft.network.play.server.S38PacketPlayerListItem.Action;
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;
import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.minecart.MinecartEvent;
import net.minecraftforge.event.entity.minecart.MinecartInteractEvent; import net.minecraftforge.event.entity.minecart.MinecartInteractEvent;
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
import net.minecraftforge.event.entity.player.PlayerUseItemEvent; import net.minecraftforge.event.entity.player.PlayerUseItemEvent;
@@ -41,6 +39,7 @@ 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.PlayerTickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
import eu.crushedpixel.replaymod.recording.ConnectionEventHandler; import eu.crushedpixel.replaymod.recording.ConnectionEventHandler;
import eu.crushedpixel.replaymod.reflection.MCPNames;
public class RecordingHandler { public class RecordingHandler {
@@ -81,6 +80,17 @@ public class RecordingHandler {
} }
} }
private static Field dataWatcherField;
static {
try {
dataWatcherField = S0CPacketSpawnPlayer.class.getDeclaredField(MCPNames.field("field_148960_i"));
dataWatcherField.setAccessible(true);
} catch(Exception e) {
e.printStackTrace();
}
}
private S0CPacketSpawnPlayer spawnPlayer(EntityPlayer player) { private S0CPacketSpawnPlayer spawnPlayer(EntityPlayer player) {
try { try {
S0CPacketSpawnPlayer packet = new S0CPacketSpawnPlayer(); S0CPacketSpawnPlayer packet = new S0CPacketSpawnPlayer();
@@ -98,11 +108,14 @@ public class RecordingHandler {
pb.writeByte((byte)((int)(player.rotationPitch * 256.0F / 360.0F))); pb.writeByte((byte)((int)(player.rotationPitch * 256.0F / 360.0F)));
ItemStack itemstack = player.inventory.getCurrentItem(); ItemStack itemstack = player.inventory.getCurrentItem();
pb.writeInt(itemstack == null ? 0 : Item.getIdFromItem(itemstack.getItem())); pb.writeShort(itemstack == null ? 0 : Item.getIdFromItem(itemstack.getItem()));
player.getDataWatcher().writeTo(pb); player.getDataWatcher().writeTo(pb);
packet.readPacketData(pb); packet.readPacketData(pb);
dataWatcherField.set(packet, player.getDataWatcher());
return packet; return packet;
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@@ -19,6 +19,8 @@ public class GuiConstants {
public static final int UPLOAD_TAG_INPUT = 3007; public static final int UPLOAD_TAG_INPUT = 3007;
public static final int UPLOAD_TAG_PLACEHOLDER = 3008; public static final int UPLOAD_TAG_PLACEHOLDER = 3008;
public static final int EXIT_REPLAY_BUTTON = 4001;
public static final int REPLAY_OPTIONS_BUTTON_ID = 8000; public static final int REPLAY_OPTIONS_BUTTON_ID = 8000;
public static final int REPLAY_MANAGER_BUTTON_ID = 9001; public static final int REPLAY_MANAGER_BUTTON_ID = 9001;

View File

@@ -106,26 +106,7 @@ public class PacketListener extends DataListener {
//Converts the packet back to a ByteBuffer for correct saving //Converts the packet back to a ByteBuffer for correct saving
ByteBuf bb = Unpooled.buffer(); ByteBuf bb = Unpooled.buffer();
if(packet instanceof S0FPacketSpawnMob) {
Field field_149043_l = S0FPacketSpawnMob.class.getDeclaredField(MCPNames.field("field_149043_l"));
field_149043_l.setAccessible(true);
DataWatcher l = (DataWatcher)field_149043_l.get(packet);
DataWatcher dw = new DataWatcher(null);
if(l == null) {
field_149043_l.set(packet, dw);
}
}
if(packet instanceof S0CPacketSpawnPlayer) {
Field field_149043_l = S0CPacketSpawnPlayer.class.getDeclaredField(MCPNames.field("field_148960_i"));
field_149043_l.setAccessible(true);
DataWatcher l = (DataWatcher)field_149043_l.get(packet);
DataWatcher dw = new DataWatcher(null);
if(l == null) {
field_149043_l.set(packet, dw);
}
}
packetSerializer.encode(ctx, packet, bb); packetSerializer.encode(ctx, packet, bb);
bb.readerIndex(0); bb.readerIndex(0);

View File

@@ -362,6 +362,8 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
private static Field playerUUIDField; private static Field playerUUIDField;
private static Field gameProfileField; private static Field gameProfileField;
//private static Field dataWatcherField;
static { static {
try { try {
@@ -370,6 +372,9 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
gameProfileField = S38PacketPlayerListItem.AddPlayerData.class.getDeclaredField("field_179964_d"); gameProfileField = S38PacketPlayerListItem.AddPlayerData.class.getDeclaredField("field_179964_d");
gameProfileField.setAccessible(true); gameProfileField.setAccessible(true);
//dataWatcherField = S0CPacketSpawnPlayer.class.getDeclaredField(MCPNames.field("field_148960_i"));
//dataWatcherField.setAccessible(true);
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -472,6 +477,13 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
p = sp; p = sp;
} }
*/ */
/*
if(p instanceof S0CPacketSpawnPlayer) {
System.out.println(dataWatcherField.get(p));
System.out.println(((S0CPacketSpawnPlayer) p).func_148944_c());
}
*/
if(p instanceof S07PacketRespawn) { if(p instanceof S07PacketRespawn) {
allowMovement = true; allowMovement = true;