Add 1.7.10 version
This commit is contained in:
@@ -8,13 +8,22 @@ import com.replaymod.recording.packet.PacketListener;
|
||||
import io.netty.channel.ChannelDuplexHandler;
|
||||
import io.netty.channel.ChannelHandler;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
||||
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.Mod;
|
||||
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
//$$ import cpw.mods.fml.common.eventhandler.EventBus;
|
||||
//$$ import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
@@ -22,7 +31,9 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
version = "@MOD_VERSION@",
|
||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||
acceptableRemoteVersions = "*",
|
||||
//#if MC>=10800
|
||||
clientSideOnly = true,
|
||||
//#endif
|
||||
useMetadata = true)
|
||||
public class ReplayModRecording {
|
||||
public static final String MOD_ID = "replaymod-recording";
|
||||
|
||||
@@ -5,16 +5,20 @@ import com.replaymod.recording.Setting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.ReplayMod.TEXTURE;
|
||||
import static com.replaymod.core.ReplayMod.TEXTURE_SIZE;
|
||||
import static com.replaymod.core.versions.MCVer.getFontRenderer;
|
||||
import static com.replaymod.core.versions.MCVer.getType;
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
/**
|
||||
* Renders overlay during recording.
|
||||
|
||||
@@ -12,16 +12,22 @@ import com.replaymod.replaystudio.replay.ZipReplayFile;
|
||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.WorldType_DEBUG_ALL_BLOCK_STATES;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
//$$ import cpw.mods.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent;
|
||||
//#endif
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.WorldType_DEBUG_ALL_BLOCK_STATES;
|
||||
|
||||
/**
|
||||
* Handles connection events and initiates recording if enabled.
|
||||
*/
|
||||
@@ -48,10 +54,12 @@ public class ConnectionEventHandler {
|
||||
try {
|
||||
boolean local = networkManager.isLocalChannel();
|
||||
if (local) {
|
||||
//#if MC>=10800
|
||||
if (mc.getIntegratedServer().getEntityWorld().getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) {
|
||||
logger.info("Debug World recording is not supported.");
|
||||
return;
|
||||
}
|
||||
//#endif
|
||||
if(!core.getSettingsRegistry().get(Setting.RECORD_SINGLEPLAYER)) {
|
||||
logger.info("Singleplayer Recording is disabled");
|
||||
return;
|
||||
|
||||
@@ -2,7 +2,12 @@ package com.replaymod.recording.handler;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.network.handshake.FMLHandshakeMessage;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.network.handshake.FMLHandshakeMessage;
|
||||
//#endif
|
||||
|
||||
/**
|
||||
* Filters out all handshake packets that were sent for recording but must
|
||||
@@ -17,7 +22,11 @@ import net.minecraftforge.fml.common.network.handshake.FMLHandshakeMessage;
|
||||
public class FMLHandshakeFilter extends SimpleChannelInboundHandler<FMLHandshakeMessage> {
|
||||
@Override
|
||||
protected void channelRead0(ChannelHandlerContext ctx, FMLHandshakeMessage msg) throws Exception {
|
||||
//#if MC>=10800
|
||||
if (!(msg instanceof FMLHandshakeMessage.RegistryData)) {
|
||||
//#else
|
||||
//$$ if (!(msg instanceof FMLHandshakeMessage.ModIdData)) {
|
||||
//#endif
|
||||
// Pass on everything but RegistryData messages
|
||||
ctx.fireChannelRead(msg);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,12 @@ import net.minecraft.client.gui.GuiWorldSelection;
|
||||
//#endif
|
||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getGui;
|
||||
|
||||
|
||||
@@ -7,13 +7,8 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.*;
|
||||
import net.minecraft.server.integrated.IntegratedServer;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.minecart.MinecartInteractEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
@@ -24,8 +19,22 @@ import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ import net.minecraft.util.BlockPos;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
//$$ import cpw.mods.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||
//$$ import cpw.mods.fml.common.gameevent.TickEvent;
|
||||
//$$ import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
||||
//#endif
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -115,12 +124,17 @@ public class RecordingEventHandler {
|
||||
public void onPlayerTick(PlayerTickEvent e) {
|
||||
try {
|
||||
if(e.player != player(mc)) return;
|
||||
//#if MC>=10800
|
||||
double playerY = e.player.posY;
|
||||
//#else
|
||||
//$$ double playerY = e.player.boundingBox.minY; // TODO do we need this? if so, also in teleport below?
|
||||
//#endif
|
||||
|
||||
boolean force = false;
|
||||
if(lastX == null || lastY == null || lastZ == null) {
|
||||
force = true;
|
||||
lastX = e.player.posX;
|
||||
lastY = e.player.posY;
|
||||
lastY = playerY;
|
||||
lastZ = e.player.posZ;
|
||||
}
|
||||
|
||||
@@ -131,11 +145,11 @@ public class RecordingEventHandler {
|
||||
}
|
||||
|
||||
double dx = e.player.posX - lastX;
|
||||
double dy = e.player.posY - lastY;
|
||||
double dy = playerY - lastY;
|
||||
double dz = e.player.posZ - lastZ;
|
||||
|
||||
lastX = e.player.posX;
|
||||
lastY = e.player.posY;
|
||||
lastY = playerY;
|
||||
lastZ = e.player.posZ;
|
||||
|
||||
Packet packet;
|
||||
@@ -156,7 +170,11 @@ public class RecordingEventHandler {
|
||||
//#else
|
||||
//$$ packet = new S14PacketEntity.S17PacketEntityLookMove(e.player.getEntityId(),
|
||||
//$$ (byte) Math.round(dx * 32), (byte) Math.round(dy * 32), (byte) Math.round(dz * 32),
|
||||
//$$ newYaw, newPitch, e.player.onGround);
|
||||
//$$ newYaw, newPitch
|
||||
//#if MC>=10800
|
||||
//$$ , e.player.onGround
|
||||
//#endif
|
||||
//$$ );
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -353,7 +371,13 @@ public class RecordingEventHandler {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ packetListener.save(new S0APacketUseBed(event.entityPlayer, event.pos));
|
||||
//$$ packetListener.save(new S0APacketUseBed(event.entityPlayer,
|
||||
//#if MC>=10800
|
||||
//$$ event.pos
|
||||
//#else
|
||||
//$$ event.x, event.y, event.z
|
||||
//#endif
|
||||
//$$ ));
|
||||
//#endif
|
||||
|
||||
wasSleeping = true;
|
||||
@@ -388,13 +412,23 @@ public class RecordingEventHandler {
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
public void onBlockBreakAnim(int breakerId, BlockPos pos, int progress) {
|
||||
//#else
|
||||
//$$ public void onBlockBreakAnim(int breakerId, int x, int y, int z, int progress) {
|
||||
//#endif
|
||||
EntityPlayer thePlayer = player(mc);
|
||||
if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
|
||||
//#if MC>=10904
|
||||
packetListener.save(new SPacketBlockBreakAnim(breakerId, pos, progress));
|
||||
//#else
|
||||
//$$ packetListener.save(new S25PacketBlockBreakAnim(breakerId, pos, progress));
|
||||
//$$ packetListener.save(new S25PacketBlockBreakAnim(breakerId,
|
||||
//#if MC>=10800
|
||||
//$$ pos,
|
||||
//#else
|
||||
//$$ x, y, z,
|
||||
//#endif
|
||||
//$$ progress));
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
//#if MC<=10710
|
||||
//$$ package com.replaymod.recording.mixin;
|
||||
//$$
|
||||
//$$ import de.johni0702.minecraft.gui.container.VanillaGuiScreen;
|
||||
//$$ import net.minecraft.client.gui.GuiScreen;
|
||||
//$$ import org.lwjgl.input.Keyboard;
|
||||
//$$ import org.lwjgl.input.Mouse;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//$$
|
||||
//$$ import static com.replaymod.core.versions.MCVer.*;
|
||||
//$$
|
||||
//$$ @Mixin(GuiScreen.class)
|
||||
//$$ public abstract class MixinGuiScreen {
|
||||
//$$
|
||||
//$$ @Inject(method = "handleInput", at = @At("HEAD"), cancellable = true)
|
||||
//$$ private void handleJGuiInput(CallbackInfo ci) {
|
||||
//$$ ci.cancel();
|
||||
//$$ if (Mouse.isCreated()) {
|
||||
//$$ while (Mouse.next()) {
|
||||
//$$ if (FORGE_BUS.post(new VanillaGuiScreen.MouseInputEvent())) {
|
||||
//$$ continue;
|
||||
//$$ }
|
||||
//$$ handleMouseInput();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ if (Keyboard.isCreated()) {
|
||||
//$$ while (Keyboard.next()) {
|
||||
//$$ if (FORGE_BUS.post(new VanillaGuiScreen.KeyboardInputEvent())) {
|
||||
//$$ continue;
|
||||
//$$ }
|
||||
//$$ handleKeyboardInput();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Shadow public abstract void handleMouseInput();
|
||||
//$$
|
||||
//$$ @Shadow public abstract void handleKeyboardInput();
|
||||
//$$ }
|
||||
//#endif
|
||||
@@ -9,20 +9,34 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.network.FMLNetworkEvent;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.network.FMLNetworkEvent;
|
||||
//#endif
|
||||
|
||||
@Mixin(NetHandlerLoginClient.class)
|
||||
public abstract class MixinNetHandlerLoginClient {
|
||||
|
||||
@Shadow
|
||||
//#if MC>=10800
|
||||
private NetworkManager networkManager;
|
||||
//#else
|
||||
//$$ private NetworkManager field_147393_d;
|
||||
//#endif
|
||||
|
||||
/**
|
||||
* Starts the recording right before switching into PLAY state.
|
||||
* We cannot use the {@link net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent}
|
||||
* We cannot use the {@link FMLNetworkEvent.ClientConnectedToServerEvent}
|
||||
* as it only fires after the forge handshake.
|
||||
*/
|
||||
@Inject(method = "handleLoginSuccess", at=@At("HEAD"))
|
||||
public void replayModRecording_initiateRecording(CallbackInfo cb) {
|
||||
//#if MC>=10800
|
||||
ReplayModRecording.instance.initiateRecording(networkManager);
|
||||
//#else
|
||||
//$$ ReplayModRecording.instance.initiateRecording(field_147393_d);
|
||||
//#endif
|
||||
}
|
||||
|
||||
//#if MC>=11200
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.replaymod.recording.mixin;
|
||||
import com.replaymod.recording.handler.RecordingEventHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||
import net.minecraft.client.network.NetworkPlayerInfo;
|
||||
import net.minecraft.network.play.server.*;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
@@ -11,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10904
|
||||
import net.minecraft.network.play.server.SPacketPlayerListItem.Action;
|
||||
import net.minecraft.network.play.server.SPacketPlayerListItem.AddPlayerData;
|
||||
@@ -18,13 +18,14 @@ import net.minecraft.network.play.server.SPacketPlayerListItem.AddPlayerData;
|
||||
//$$ import net.minecraft.network.play.server.S38PacketPlayerListItem.Action;
|
||||
//$$ import net.minecraft.network.play.server.S38PacketPlayerListItem.AddPlayerData;
|
||||
//#endif
|
||||
|
||||
import net.minecraft.client.network.NetworkPlayerInfo;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
//#endif
|
||||
|
||||
@Mixin(NetHandlerPlayClient.class)
|
||||
public abstract class MixinNetHandlerPlayClient {
|
||||
@@ -32,8 +33,10 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
@Shadow
|
||||
private Minecraft gameController;
|
||||
|
||||
//#if MC>=10800
|
||||
@Shadow
|
||||
private Map<UUID, NetworkPlayerInfo> playerInfoMap;
|
||||
//#endif
|
||||
|
||||
public RecordingEventHandler getRecordingEventHandler() {
|
||||
return ((RecordingEventHandler.RecordingEventSender) gameController.renderGlobal).getRecordingEventHandler();
|
||||
@@ -46,6 +49,7 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
* @param packet The packet
|
||||
* @param ci Callback info
|
||||
*/
|
||||
//#if MC>=10800
|
||||
@Inject(method = "handlePlayerListItem", at=@At("HEAD"))
|
||||
//#if MC>=10809
|
||||
//#if MC>=10904
|
||||
@@ -86,6 +90,15 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
//#else
|
||||
//$$ @Inject(method = "handleJoinGame", at=@At("RETURN"))
|
||||
//$$ public void recordOwnJoin(S01PacketJoinGame packet, CallbackInfo ci) {
|
||||
//$$ RecordingEventHandler handler = getRecordingEventHandler();
|
||||
//$$ if (handler != null) {
|
||||
//$$ handler.onPlayerJoin();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
/**
|
||||
* Record the own player entity respawning.
|
||||
|
||||
@@ -3,9 +3,6 @@ package com.replaymod.recording.mixin;
|
||||
import com.replaymod.recording.handler.FMLHandshakeFilter;
|
||||
import io.netty.channel.ChannelPipeline;
|
||||
import io.netty.channel.embedded.EmbeddedChannel;
|
||||
import net.minecraftforge.fml.common.network.handshake.FMLHandshakeCodec;
|
||||
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -19,6 +16,16 @@ import net.minecraft.network.NetworkManager;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.network.handshake.FMLHandshakeCodec;
|
||||
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.network.handshake.FMLHandshakeCodec;
|
||||
//$$ import cpw.mods.fml.common.network.handshake.NetworkDispatcher;
|
||||
//$$ import cpw.mods.fml.relauncher.Side;
|
||||
//#endif
|
||||
|
||||
@Mixin(value = NetworkDispatcher.class, remap = false)
|
||||
public abstract class MixinNetworkDispatcher {
|
||||
|
||||
|
||||
@@ -10,8 +10,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//#if MC>=10904
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ import net.minecraft.util.BlockPos;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
@Mixin(RenderGlobal.class)
|
||||
public abstract class MixinRenderGlobal implements RecordingEventHandler.RecordingEventSender {
|
||||
@@ -28,10 +30,26 @@ public abstract class MixinRenderGlobal implements RecordingEventHandler.Recordi
|
||||
return recordingEventHandler;
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
@Inject(method = "sendBlockBreakProgress", at = @At("HEAD"))
|
||||
public void saveBlockBreakProgressPacket(int breakerId, BlockPos pos, int progress, CallbackInfo info) {
|
||||
//#else
|
||||
//$$ @Inject(method = "destroyBlockPartially", at = @At("HEAD"))
|
||||
//#endif
|
||||
public void saveBlockBreakProgressPacket(int breakerId,
|
||||
//#if MC>=10800
|
||||
BlockPos pos,
|
||||
//#else
|
||||
//$$ int x, int y, int z,
|
||||
//#endif
|
||||
int progress, CallbackInfo info) {
|
||||
if (recordingEventHandler != null) {
|
||||
recordingEventHandler.onBlockBreakAnim(breakerId, pos, progress);
|
||||
recordingEventHandler.onBlockBreakAnim(breakerId,
|
||||
//#if MC>=10800
|
||||
pos,
|
||||
//#else
|
||||
//$$ x, y, z,
|
||||
//#endif
|
||||
progress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,11 +11,9 @@ import io.netty.channel.ChannelInboundHandlerAdapter;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.network.EnumConnectionState;
|
||||
import net.minecraft.network.EnumPacketDirection;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.network.play.server.*;
|
||||
import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -29,6 +27,13 @@ import net.minecraft.util.text.TextComponentString;
|
||||
//$$ import java.util.List;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.network.EnumPacketDirection;
|
||||
import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.network.internal.FMLProxyPacket;
|
||||
//#endif
|
||||
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
@@ -105,7 +110,11 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
//#if MC>=10809
|
||||
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).getPlayer();
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).func_179819_c();
|
||||
//#else
|
||||
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).field_148955_b.getId();
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
Set<String> uuids = new HashSet<>(Arrays.asList(metaData.getPlayers()));
|
||||
@@ -114,10 +123,12 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
saveMetaData();
|
||||
}
|
||||
//#if MC<10904
|
||||
//#if MC>=10800
|
||||
//$$ if (packet instanceof S46PacketSetCompressionLevel) {
|
||||
//$$ return; // Replay data is never compressed on the packet level
|
||||
//$$ }
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
byte[] bytes = getPacketData(packet);
|
||||
long now = System.currentTimeMillis();
|
||||
@@ -199,16 +210,32 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
//#if MC>=10904
|
||||
if (packet instanceof SPacketResourcePackSend) {
|
||||
save(resourcePackRecorder.handleResourcePack((SPacketResourcePackSend) packet));
|
||||
//#else
|
||||
//$$ if (packet instanceof S48PacketResourcePackSend) {
|
||||
//$$ save(resourcePackRecorder.handleResourcePack((S48PacketResourcePackSend) packet));
|
||||
//#endif
|
||||
return;
|
||||
}
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ if (packet instanceof S48PacketResourcePackSend) {
|
||||
//$$ save(resourcePackRecorder.handleResourcePack((S48PacketResourcePackSend) packet));
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ if (packet instanceof S3FPacketCustomPayload) {
|
||||
//$$ S3FPacketCustomPayload p = (S3FPacketCustomPayload) packet;
|
||||
//$$ if ("MC|RPack".equals(p.func_149169_c())) {
|
||||
//$$ save(resourcePackRecorder.handleResourcePack(p));
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
if (packet instanceof FMLProxyPacket) {
|
||||
// This packet requires special handling
|
||||
//#if MC>=10800
|
||||
((FMLProxyPacket) packet).toS3FPackets().forEach(this::save);
|
||||
//#else
|
||||
//$$ save(((FMLProxyPacket) packet).toS3FPacket());
|
||||
//#endif
|
||||
super.channelRead(ctx, msg);
|
||||
return;
|
||||
}
|
||||
@@ -223,7 +250,12 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
//#else
|
||||
//$$ if (packet instanceof S3FPacketCustomPayload) {
|
||||
//$$ S3FPacketCustomPayload p = (S3FPacketCustomPayload) packet;
|
||||
//$$ if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannelName())) {
|
||||
//#if MC>=10800
|
||||
//$$ String channelName = p.getChannelName();
|
||||
//#else
|
||||
//$$ String channelName = p.func_149169_c();
|
||||
//#endif
|
||||
//$$ if (Restrictions.PLUGIN_CHANNEL.equals(channelName)) {
|
||||
//$$ packet = new S40PacketDisconnect(new ChatComponentText("Please update to view this replay."));
|
||||
//#endif
|
||||
save(packet);
|
||||
@@ -304,7 +336,11 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
Integer packetId = EnumConnectionState.PLAY.getPacketId(EnumPacketDirection.CLIENTBOUND, packet);
|
||||
//#else
|
||||
//$$ Integer packetId = (Integer) EnumConnectionState.PLAY.func_150755_b().inverse().get(packet.getClass());
|
||||
//#endif
|
||||
if (packetId == null) {
|
||||
throw new IOException("Unknown packet type:" + packet.getClass());
|
||||
}
|
||||
@@ -322,7 +358,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
|
||||
public void addMarker() {
|
||||
Entity view = Minecraft.getMinecraft().getRenderViewEntity();
|
||||
Entity view = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
int timestamp = (int) (System.currentTimeMillis() - startTime);
|
||||
|
||||
Marker marker = new Marker();
|
||||
|
||||
@@ -2,21 +2,15 @@ package com.replaymod.recording.packet;
|
||||
|
||||
import com.google.common.hash.Hashing;
|
||||
import com.google.common.io.Files;
|
||||
import com.google.common.util.concurrent.FutureCallback;
|
||||
import com.google.common.util.concurrent.Futures;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.replaymod.replaystudio.replay.ReplayFile;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreenWorking;
|
||||
import net.minecraft.client.gui.GuiYesNo;
|
||||
import net.minecraft.client.gui.GuiYesNoCallback;
|
||||
import net.minecraft.client.multiplayer.ServerData;
|
||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.client.resources.ResourcePackRepository;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.util.HttpUtil;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -25,20 +19,39 @@ import net.minecraft.network.play.client.CPacketResourcePackStatus;
|
||||
import net.minecraft.network.play.client.CPacketResourcePackStatus.Action;
|
||||
import net.minecraft.network.play.server.SPacketResourcePackSend;
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ import net.minecraft.network.play.client.C19PacketResourcePackStatus;
|
||||
//$$ import net.minecraft.network.play.client.C19PacketResourcePackStatus.Action;
|
||||
//$$ import net.minecraft.network.play.server.S48PacketResourcePackSend;
|
||||
//#else
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import com.google.common.util.concurrent.FutureCallback;
|
||||
import com.google.common.util.concurrent.Futures;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.multiplayer.ServerData.ServerResourceMode;
|
||||
//$$ import net.minecraft.client.multiplayer.ServerList;
|
||||
//$$ import net.minecraft.client.resources.FileResourcePack;
|
||||
//$$ import net.minecraft.network.play.server.S3FPacketCustomPayload;
|
||||
//$$ import org.apache.commons.io.Charsets;
|
||||
//#endif
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
/**
|
||||
* Records resource packs and handles incoming resource pack packets during recording.
|
||||
*/
|
||||
@@ -84,6 +97,7 @@ public class ResourcePackRecorder {
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10904
|
||||
public CPacketResourcePackStatus makeStatusPacket(String hash, Action action) {
|
||||
//#if MC>=11002
|
||||
@@ -282,5 +296,78 @@ public class ResourcePackRecorder {
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//$$ public synchronized S3FPacketCustomPayload handleResourcePack(S3FPacketCustomPayload packet) {
|
||||
//$$ final int requestId = nextRequestId++;
|
||||
//$$ final String url = new String(packet.func_149168_d(), Charsets.UTF_8);
|
||||
//$$
|
||||
//$$ ServerData serverData = mc.getCurrentServerData();
|
||||
//$$ ServerResourceMode resourceMode = serverData == null ? ServerResourceMode.PROMPT : serverData.getResourceMode();
|
||||
//$$ if (resourceMode == ServerResourceMode.ENABLED) {
|
||||
//$$ downloadResourcePack(requestId, url);
|
||||
//$$ mc.getResourcePackRepository().obtainResourcePack(url);
|
||||
//$$ } else if (resourceMode == ServerResourceMode.PROMPT) {
|
||||
//$$ // Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError)
|
||||
//$$ //noinspection Convert2Lambda
|
||||
//$$ mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() {
|
||||
//$$ @Override
|
||||
//$$ public void confirmClicked(boolean result, int id) {
|
||||
//$$ if (serverData != null) {
|
||||
//$$ serverData.setResourceMode(ServerResourceMode.ENABLED);
|
||||
//$$ ServerList.func_147414_b(serverData);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ mc.displayGuiScreen(null);
|
||||
//$$
|
||||
//$$ if (result) {
|
||||
//$$ downloadResourcePack(requestId, url);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0));
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ return new S3FPacketCustomPayload(packet.func_149169_c(), ("replay://" + requestId).getBytes(Charsets.UTF_8));
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private void downloadResourcePack(final int requestId, String url) {
|
||||
//$$ final ResourcePackRepository repo = mc.mcResourcePackRepository;
|
||||
//$$
|
||||
//$$ String fileName = url.substring(url.lastIndexOf("/") + 1);
|
||||
//$$
|
||||
//$$ if (fileName.contains("?")) {
|
||||
//$$ fileName = fileName.substring(0, fileName.indexOf("?"));
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ if (!fileName.endsWith(".zip")) {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ fileName = fileName.replaceAll("\\W", "");
|
||||
//$$
|
||||
//$$ File file = new File(repo.field_148534_e, fileName);
|
||||
//$$
|
||||
//$$ HashMap<String, String> hashmap = new HashMap<>();
|
||||
//$$ hashmap.put("X-Minecraft-Username", mc.getSession().getUsername());
|
||||
//$$ hashmap.put("X-Minecraft-UUID", mc.getSession().getPlayerID());
|
||||
//$$ hashmap.put("X-Minecraft-Version", "1.7.10");
|
||||
//$$
|
||||
//$$ GuiScreenWorking guiScreen = new GuiScreenWorking();
|
||||
//$$ Minecraft.getMinecraft().displayGuiScreen(guiScreen);
|
||||
//$$ repo.func_148529_f();
|
||||
//$$ repo.field_148533_g = true;
|
||||
//$$ // Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError)
|
||||
//$$ //noinspection Convert2Lambda
|
||||
//$$ HttpUtil.downloadResourcePack(file, url, new HttpUtil.DownloadListener() {
|
||||
//$$ public void onDownloadComplete(File file) {
|
||||
//$$ if (repo.field_148533_g) {
|
||||
//$$ repo.field_148533_g = false;
|
||||
//$$ repo.field_148532_f = new FileResourcePack(file);
|
||||
//$$ Minecraft.getMinecraft().scheduleResourcesRefresh();
|
||||
//$$ recordResourcePack(file, requestId);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }, hashmap, 50*1024*1024, guiScreen, Minecraft.getMinecraft().getProxy());
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user