Add 1.7.10 version

This commit is contained in:
Jonas Herzig
2018-03-07 22:00:30 +01:00
parent fbbca76099
commit eb04eb47dc
106 changed files with 2083 additions and 251 deletions

View File

@@ -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";

View File

@@ -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.

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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 {

View File

@@ -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);
}
}
}

View File

@@ -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();

View File

@@ -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
}