Get replay module compiling on 1.13

This commit is contained in:
Jonas Herzig
2018-12-19 10:11:08 +01:00
parent 9655677972
commit 1470123ec9
29 changed files with 476 additions and 206 deletions

View File

@@ -8,6 +8,7 @@ import com.replaymod.core.handler.MainMenuHandler;
import com.replaymod.core.utils.OpenGLUtils; import com.replaymod.core.utils.OpenGLUtils;
import com.replaymod.core.versions.MCVer; import com.replaymod.core.versions.MCVer;
import com.replaymod.recording.ReplayModRecording; import com.replaymod.recording.ReplayModRecording;
import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replaystudio.util.I18n; import com.replaymod.replaystudio.util.I18n;
import de.johni0702.minecraft.gui.container.GuiScreen; import de.johni0702.minecraft.gui.container.GuiScreen;
import lombok.Getter; import lombok.Getter;
@@ -138,6 +139,7 @@ public class ReplayMod {
private final List<Module> modules = new ArrayList<>(); private final List<Module> modules = new ArrayList<>();
{ {
modules.add(new ReplayModRecording(this)); modules.add(new ReplayModRecording(this));
modules.add(new ReplayModReplay(this));
} }
public KeyBindingRegistry getKeyBindingRegistry() { public KeyBindingRegistry getKeyBindingRegistry() {

View File

@@ -34,6 +34,10 @@ import net.minecraftforge.common.MinecraftForge;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
//#if MC>=11300
import net.minecraft.util.ResourceLocation;
//#endif
//#if MC>=11200 //#if MC>=11200
import com.replaymod.core.utils.WrappedTimer; import com.replaymod.core.utils.WrappedTimer;
//#endif //#endif
@@ -49,7 +53,11 @@ import net.minecraft.util.text.ITextComponent;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; //#if MC>=11300
import net.minecraftforge.eventbus.api.SubscribeEvent;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
//#endif
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent; //$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -185,7 +193,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
/** /**
* The minecraft instance. * The minecraft instance.
*/ */
protected Minecraft mc = Minecraft.getMinecraft(); protected Minecraft mc = getMinecraft();
/** /**
* The total length of this replay in milliseconds. * The total length of this replay in milliseconds.
@@ -265,7 +273,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
} }
/** /**
* Return a fake {@link Minecraft#getSystemTime()} value that respects slowdown/speedup/pause and works in both, * Return a fake system tile in milliseconds value that respects slowdown/speedup/pause and works in both,
* sync and async mode. * sync and async mode.
* Note: For sync mode this returns the last value passed to {@link #sendPacketsTill(int)}. * Note: For sync mode this returns the last value passed to {@link #sendPacketsTill(int)}.
* @return The timestamp in milliseconds since the start of the replay * @return The timestamp in milliseconds since the start of the replay
@@ -308,7 +316,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
if (world(mc) != null) { if (world(mc) != null) {
for (EntityPlayer playerEntity : playerEntities(world(mc))) { for (EntityPlayer playerEntity : playerEntities(world(mc))) {
if (!playerEntity.addedToChunk && playerEntity instanceof EntityOtherPlayerMP) { if (!playerEntity.addedToChunk && playerEntity instanceof EntityOtherPlayerMP) {
playerEntity.onLivingUpdate(); // FIXME playerEntity.onLivingUpdate();
} }
} }
} }
@@ -361,7 +369,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
World world = world(mc); World world = world(mc);
for (int i = 0; i < world.loadedEntityList.size(); ++i) { for (int i = 0; i < world.loadedEntityList.size(); ++i) {
Entity entity = loadedEntityList(world).get(i); Entity entity = loadedEntityList(world).get(i);
if (entity.isDead) { //#if MC>=11300
if (entity.removed) {
//#else
//$$ if (entity.isDead) {
//#endif
int chunkX = entity.chunkCoordX; int chunkX = entity.chunkCoordX;
int chunkY = entity.chunkCoordZ; int chunkY = entity.chunkCoordZ;
@@ -370,7 +382,12 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//#else //#else
//$$ if (entity.addedToChunk && world.getChunkProvider().chunkExists(chunkX, chunkY)) { //$$ if (entity.addedToChunk && world.getChunkProvider().chunkExists(chunkX, chunkY)) {
//#endif //#endif
world.getChunkFromChunkCoords(chunkX, chunkY).removeEntity(entity); //#if MC>=11300
//#else
world.getChunk(chunkX, chunkY).removeEntity(entity);
//#else
//$$ world.getChunkFromChunkCoords(chunkX, chunkY).removeEntity(entity);
//#endif
} }
world.loadedEntityList.remove(i--); world.loadedEntityList.remove(i--);
@@ -418,11 +435,15 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//$$ if (p instanceof S3FPacketCustomPayload) { //$$ if (p instanceof S3FPacketCustomPayload) {
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p; //$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
//#endif //#endif
//#if MC>=11300
ResourceLocation channelName = packet.getChannelName();
//#else
//#if MC>=10800 //#if MC>=10800
String channelName = packet.getChannelName(); //$$ String channelName = packet.getChannelName();
//#else //#else
//$$ String channelName = packet.func_149169_c(); //$$ String channelName = packet.func_149169_c();
//#endif //#endif
//#endif
if (Restrictions.PLUGIN_CHANNEL.equals(channelName)) { if (Restrictions.PLUGIN_CHANNEL.equals(channelName)) {
final String unknown = replayHandler.getRestrictions().handle(packet); final String unknown = replayHandler.getRestrictions().handle(packet);
if (unknown == null) { if (unknown == null) {
@@ -459,7 +480,13 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//$$ IChatComponent reason = ((S40PacketDisconnect) p).func_149165_c(); //$$ IChatComponent reason = ((S40PacketDisconnect) p).func_149165_c();
//#endif //#endif
//#endif //#endif
if ("Please update to view this replay.".equals(reason.getUnformattedText())) { //#if MC>=11300
// FIXME or is it getString?
String message = reason.getUnformattedComponentText();
//#else
//$$ String message = reason.getUnformattedText();
//#endif
if ("Please update to view this replay.".equals(message)) {
// This version of the mod supports replay restrictions so we are allowed // This version of the mod supports replay restrictions so we are allowed
// to remove this packet. // to remove this packet.
return null; return null;
@@ -475,6 +502,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//$$ if (p instanceof S3FPacketCustomPayload) { //$$ if (p instanceof S3FPacketCustomPayload) {
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p; //$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
//#endif //#endif
/* FIXME
//#if MC>=10800 //#if MC>=10800
String channelName = packet.getChannelName(); String channelName = packet.getChannelName();
//#else //#else
@@ -483,6 +511,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
if ("MC|BOpen".equals(channelName)) { if ("MC|BOpen".equals(channelName)) {
return null; return null;
} }
*/
//#if MC>=10800 //#if MC>=10800
} }
@@ -514,7 +543,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
if (!file.exists()) { if (!file.exists()) {
IOUtils.copy(replayFile.getResourcePack(hash).get(), new FileOutputStream(file)); IOUtils.copy(replayFile.getResourcePack(hash).get(), new FileOutputStream(file));
} }
setServerResourcePack(mc.getResourcePackRepository(), file); // FIXME setServerResourcePack(mc.getResourcePackRepository(), file);
} }
} }
return null; return null;
@@ -540,7 +569,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//#if MC>=10800 //#if MC>=10800
int dimension = packet.getDimension(); int dimension = packet.getDimension();
EnumDifficulty difficulty = packet.getDifficulty(); EnumDifficulty difficulty = packet.getDifficulty();
int maxPlayers = packet.getMaxPlayers(); //#if MC>=11300
int maxPlayers = 0;// FIXME needs AT packet.maxPlayers;
//#else
//$$ int maxPlayers = packet.getMaxPlayers();
//#endif
WorldType worldType = packet.getWorldType(); WorldType worldType = packet.getWorldType();
//#if MC>=10904 //#if MC>=10904
@@ -1064,7 +1097,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
// Needs to be called at least 4 times thanks to // Needs to be called at least 4 times thanks to
// EntityOtherPlayerMP#otherPlayerMPPosRotationIncrements (max vanilla value is 3) // EntityOtherPlayerMP#otherPlayerMPPosRotationIncrements (max vanilla value is 3)
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
entity.onUpdate(); //#if MC>=11300
entity.tick();
//#else
//$$ entity.onUpdate();
//#endif
} }
// Check whether the entity has left the chunk // Check whether the entity has left the chunk

View File

@@ -1,3 +1,4 @@
/* FIXME
package com.replaymod.replay; package com.replaymod.replay;
import com.replaymod.core.utils.WrappedTimer; import com.replaymod.core.utils.WrappedTimer;
@@ -264,3 +265,4 @@ public class InputReplayTimer extends WrappedTimer {
//$$ public static class RunScheduledTasks extends Event {} //$$ public static class RunScheduledTasks extends Event {}
//#endif //#endif
} }
*/

View File

@@ -38,6 +38,12 @@ public class NoGuiScreenshot {
return; return;
} }
//#if MC>=11300
int frameWidth = mc.mainWindow.getFramebufferWidth(), frameHeight = mc.mainWindow.getFramebufferHeight();
//#else
//$$ int frameWidth = mc.displayWidth, frameHeight = mc.displayHeight;
//#endif
final boolean guiHidden = mc.gameSettings.hideGUI; final boolean guiHidden = mc.gameSettings.hideGUI;
try { try {
mc.gameSettings.hideGUI = true; mc.gameSettings.hideGUI = true;
@@ -57,7 +63,7 @@ public class NoGuiScreenshot {
mc.getFramebuffer().unbindFramebuffer(); mc.getFramebuffer().unbindFramebuffer();
GlStateManager.popMatrix(); GlStateManager.popMatrix();
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight); mc.getFramebuffer().framebufferRender(frameWidth, frameHeight);
GlStateManager.popMatrix(); GlStateManager.popMatrix();
} catch (Throwable t) { } catch (Throwable t) {
future.setException(t); future.setException(t);
@@ -73,7 +79,7 @@ public class NoGuiScreenshot {
// disk for better maintainability // disk for better maintainability
File tmpFolder = Files.createTempDir(); File tmpFolder = Files.createTempDir();
try { try {
ScreenShotHelper.saveScreenshot(tmpFolder, "tmp", mc.displayWidth, mc.displayHeight, mc.getFramebuffer()); ScreenShotHelper.saveScreenshot(tmpFolder, "tmp", frameWidth, frameHeight, mc.getFramebuffer());
File screenshotFile = new File(tmpFolder, "screenshots/tmp"); File screenshotFile = new File(tmpFolder, "screenshots/tmp");
BufferedImage image = ImageIO.read(screenshotFile); BufferedImage image = ImageIO.read(screenshotFile);
int imageWidth = image.getWidth(); int imageWidth = image.getWidth();

View File

@@ -62,7 +62,6 @@ import net.minecraft.network.EnumConnectionState;
import net.minecraft.network.EnumPacketDirection; import net.minecraft.network.EnumPacketDirection;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -85,11 +84,18 @@ import java.util.function.Consumer;
import java.util.zip.Deflater; import java.util.zip.Deflater;
import java.util.zip.Inflater; import java.util.zip.Inflater;
//#if MC>=11300
import net.minecraftforge.eventbus.api.SubscribeEvent;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
//#endif
//#if MC>=11200 //#if MC>=11200
import com.replaymod.core.utils.WrappedTimer; import com.replaymod.core.utils.WrappedTimer;
//#endif //#endif
import static com.replaymod.core.versions.MCVer.FML_BUS; import static com.replaymod.core.versions.MCVer.FML_BUS;
import static com.replaymod.core.versions.MCVer.getMinecraft;
import static com.replaymod.replay.ReplayModReplay.LOGGER; import static com.replaymod.replay.ReplayModReplay.LOGGER;
/** /**
@@ -104,7 +110,7 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
private static final String CACHE_INDEX_ENTRY = "quickModeCacheIndex.bin"; private static final String CACHE_INDEX_ENTRY = "quickModeCacheIndex.bin";
private static final int CACHE_VERSION = 0; private static final int CACHE_VERSION = 0;
private final Minecraft mc = Minecraft.getMinecraft(); private final Minecraft mc = getMinecraft();
private final ReplayModReplay mod; private final ReplayModReplay mod;
private final ReplayFile replayFile; private final ReplayFile replayFile;
@@ -980,8 +986,13 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
for (BlockChange blockChange : blockChanges) { for (BlockChange blockChange : blockChanges) {
NetUtil.writePosition(cacheOut, blockChange.pos); NetUtil.writePosition(cacheOut, blockChange.pos);
index += 8; index += 8;
index += writeVarInt(cacheOut, blockChange.from.getId() << 4 | blockChange.from.getData() & 15); //#if MC>=11300
index += writeVarInt(cacheOut, blockChange.to.getId() << 4 | blockChange.to.getData() & 15); index += writeVarInt(cacheOut, blockChange.from.getId());
index += writeVarInt(cacheOut, blockChange.to.getId());
//#else
//$$ index += writeVarInt(cacheOut, blockChange.from.getId() << 4 | blockChange.from.getData() & 15);
//$$ index += writeVarInt(cacheOut, blockChange.to.getId() << 4 | blockChange.to.getData() & 15);
//#endif
} }
} }

View File

@@ -21,19 +21,25 @@ import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.embedded.EmbeddedChannel; import io.netty.channel.embedded.EmbeddedChannel;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityOtherPlayerMP;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReport;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.NetworkManager; import net.minecraft.network.NetworkManager;
import org.lwjgl.opengl.Display;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
//#if MC>=11300
import net.minecraft.client.MainWindow;
import net.minecraft.entity.EntityLivingBase;
//#else
//$$ import net.minecraft.client.entity.EntityOtherPlayerMP;
//$$ import net.minecraft.client.gui.ScaledResolution;
//$$ import org.lwjgl.opengl.Display;
//#endif
//#if MC<10904 //#if MC<10904
//$$ import de.johni0702.minecraft.gui.element.GuiLabel; //$$ import de.johni0702.minecraft.gui.element.GuiLabel;
//$$ import de.johni0702.minecraft.gui.popup.GuiInfoPopup; //$$ import de.johni0702.minecraft.gui.popup.GuiInfoPopup;
@@ -41,11 +47,16 @@ import java.util.*;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
import com.mojang.authlib.GameProfile;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.network.EnumPacketDirection; import net.minecraft.network.EnumPacketDirection;
import net.minecraftforge.fml.client.FMLClientHandler; //#if MC>=11300
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher; import net.minecraft.client.network.NetHandlerLoginClient;
import net.minecraftforge.fml.network.NetworkHooks;
//#else
//$$ import com.mojang.authlib.GameProfile;
//$$ import net.minecraft.client.network.NetHandlerPlayClient;
//$$ import net.minecraftforge.fml.client.FMLClientHandler;
//$$ import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
//#endif
import static net.minecraft.client.renderer.GlStateManager.*; import static net.minecraft.client.renderer.GlStateManager.*;
//#else //#else
@@ -73,7 +84,7 @@ import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
public class ReplayHandler { public class ReplayHandler {
private static Minecraft mc = Minecraft.getMinecraft(); private static Minecraft mc = getMinecraft();
/** /**
* The file currently being played. * The file currently being played.
@@ -146,7 +157,11 @@ public class ReplayHandler {
// Force re-creation of camera entity by unloading the previous world // Force re-creation of camera entity by unloading the previous world
mc.addScheduledTask(() -> { mc.addScheduledTask(() -> {
mc.setIngameNotInFocus(); //#if MC>=11300
mc.mouseHelper.ungrabMouse();
//#else
//$$ mc.setIngameNotInFocus();
//#endif
mc.loadWorld(null); mc.loadWorld(null);
}); });
@@ -171,7 +186,11 @@ public class ReplayHandler {
channel.close().awaitUninterruptibly(); channel.close().awaitUninterruptibly();
if (player(mc) instanceof CameraEntity) { if (player(mc) instanceof CameraEntity) {
player(mc).setDead(); //#if MC>=11300
player(mc).remove();
//#else
//$$ player(mc).setDead();
//#endif
} }
if (world(mc) != null) { if (world(mc) != null) {
@@ -207,21 +226,32 @@ public class ReplayHandler {
t.printStackTrace(); t.printStackTrace();
} }
}; };
NetHandlerPlayClient netHandlerPlayClient = //#if MC>=11300
new NetHandlerPlayClient(mc, null, networkManager, new GameProfile(UUID.randomUUID(), "Player"));
networkManager.setNetHandler(netHandlerPlayClient);
FMLClientHandler.instance().setPlayClient(netHandlerPlayClient);
//#if MC>=11200
channel = new EmbeddedChannel(); channel = new EmbeddedChannel();
NetworkDispatcher networkDispatcher = new NetworkDispatcher(networkManager);
channel.attr(NetworkDispatcher.FML_DISPATCHER).set(networkDispatcher);
channel.pipeline().addFirst("ReplayModReplay_replaySender", fullReplaySender); channel.pipeline().addFirst("ReplayModReplay_replaySender", fullReplaySender);
channel.pipeline().addFirst("ReplayModReplay_quickReplaySender", quickReplaySender); channel.pipeline().addFirst("ReplayModReplay_quickReplaySender", quickReplaySender);
channel.pipeline().addLast("packet_handler", networkManager); channel.pipeline().addLast("packet_handler", networkManager);
channel.pipeline().fireChannelActive(); channel.pipeline().fireChannelActive();
networkDispatcher.clientToServerHandshake();
networkManager.setNetHandler(new NetHandlerLoginClient(networkManager, mc, null, it -> {}));
NetworkHooks.registerClientLoginChannel(networkManager);
//#else
//$$ NetHandlerPlayClient netHandlerPlayClient =
//$$ new NetHandlerPlayClient(mc, null, networkManager, new GameProfile(UUID.randomUUID(), "Player"));
//$$ networkManager.setNetHandler(netHandlerPlayClient);
//$$ FMLClientHandler.instance().setPlayClient(netHandlerPlayClient);
//$$
//#if MC>=11200
//$$ channel = new EmbeddedChannel();
//$$ NetworkDispatcher networkDispatcher = new NetworkDispatcher(networkManager);
//$$ channel.attr(NetworkDispatcher.FML_DISPATCHER).set(networkDispatcher);
//$$
//$$ channel.pipeline().addFirst("ReplayModReplay_replaySender", fullReplaySender);
//$$ channel.pipeline().addFirst("ReplayModReplay_quickReplaySender", quickReplaySender);
//$$ channel.pipeline().addLast("packet_handler", networkManager);
//$$ channel.pipeline().fireChannelActive();
//$$ networkDispatcher.clientToServerHandshake();
//#else //#else
//$$ channel = new EmbeddedChannel(networkManager); //$$ channel = new EmbeddedChannel(networkManager);
//$$ NetworkDispatcher networkDispatcher = new NetworkDispatcher(networkManager); //$$ NetworkDispatcher networkDispatcher = new NetworkDispatcher(networkManager);
@@ -234,6 +264,7 @@ public class ReplayHandler {
//$$ channel.pipeline().addAfter("ReplayModReplay_replaySender", "fml:packet_handler", networkDispatcher); //$$ channel.pipeline().addAfter("ReplayModReplay_replaySender", "fml:packet_handler", networkDispatcher);
//$$ channel.pipeline().fireChannelActive(); //$$ channel.pipeline().fireChannelActive();
//#endif //#endif
//#endif
//#else //#else
//$$ NetworkManager networkManager = new NetworkManager(true) { //$$ NetworkManager networkManager = new NetworkManager(true) {
//$$ @Override //$$ @Override
@@ -520,12 +551,7 @@ public class ReplayHandler {
// Update all entity positions (especially prev/lastTick values) // Update all entity positions (especially prev/lastTick values)
for (Entity entity : loadedEntityList(world(mc))) { for (Entity entity : loadedEntityList(world(mc))) {
if (entity instanceof EntityOtherPlayerMP) { skipTeleportInterpolation(entity);
EntityOtherPlayerMP e = (EntityOtherPlayerMP) entity;
e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
e.rotationYaw = (float) e.otherPlayerMPYaw;
e.rotationPitch = (float) e.otherPlayerMPPitch;
}
entity.lastTickPosX = entity.prevPosX = entity.posX; entity.lastTickPosX = entity.prevPosX = entity.posX;
entity.lastTickPosY = entity.prevPosY = entity.posY; entity.lastTickPosY = entity.prevPosY = entity.posY;
entity.lastTickPosZ = entity.prevPosZ = entity.posZ; entity.lastTickPosZ = entity.prevPosZ = entity.posZ;
@@ -534,23 +560,22 @@ public class ReplayHandler {
} }
// Run previous tick // Run previous tick
try { //#if MC>=11300
mc.runTick(); mc.runTick();
} catch (IOException e) { //#else
throw new RuntimeException(e); //$$ try {
} //$$ mc.runTick();
//$$ } catch (IOException e) {
//$$ throw new RuntimeException(e);
//$$ }
//#endif
// Jump to target tick // Jump to target tick
quickReplaySender.sendPacketsTill(targetTime); quickReplaySender.sendPacketsTill(targetTime);
// Immediately apply player teleport interpolation // Immediately apply player teleport interpolation
for (Entity entity : loadedEntityList(world(mc))) { for (Entity entity : loadedEntityList(world(mc))) {
if (entity instanceof EntityOtherPlayerMP) { skipTeleportInterpolation(entity);
EntityOtherPlayerMP e = (EntityOtherPlayerMP) entity;
e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
e.rotationYaw = (float) e.otherPlayerMPYaw;
e.rotationPitch = (float) e.otherPlayerMPPitch;
}
} }
return; return;
} }
@@ -583,7 +608,11 @@ public class ReplayHandler {
// Render our please-wait-screen // Render our please-wait-screen
GuiScreen guiScreen = new GuiScreen() { GuiScreen guiScreen = new GuiScreen() {
@Override @Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) { //#if MC>=11300
public void render(int mouseX, int mouseY, float partialTicks) {
//#else
//$$ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
//#endif
drawBackground(0); drawBackground(0);
drawCenteredString(getFontRenderer(mc), I18n.format("replaymod.gui.pleasewait"), drawCenteredString(getFontRenderer(mc), I18n.format("replaymod.gui.pleasewait"),
width / 2, height / 2, 0xffffffff); width / 2, height / 2, 0xffffffff);
@@ -598,47 +627,68 @@ public class ReplayHandler {
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
enableTexture2D(); enableTexture2D();
mc.getFramebuffer().bindFramebuffer(true); mc.getFramebuffer().bindFramebuffer(true);
mc.entityRenderer.setupOverlayRendering(); //#if MC>=11300
mc.mainWindow.setupOverlayRendering();
//#else
//$$ mc.entityRenderer.setupOverlayRendering();
//#endif
ScaledResolution resolution = newScaledResolution(mc); //#if MC>=11300
MainWindow
//#else
//$$ ScaledResolution
//#endif
resolution = newScaledResolution(mc);
guiScreen.setWorldAndResolution(mc, resolution.getScaledWidth(), resolution.getScaledHeight()); guiScreen.setWorldAndResolution(mc, resolution.getScaledWidth(), resolution.getScaledHeight());
guiScreen.drawScreen(0, 0, 0); //#if MC>=11300
guiScreen.render(0, 0, 0);
//#else
//$$ guiScreen.drawScreen(0, 0, 0);
//#endif
mc.getFramebuffer().unbindFramebuffer(); mc.getFramebuffer().unbindFramebuffer();
popMatrix(); popMatrix();
pushMatrix(); pushMatrix();
mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight); //#if MC>=11300
mc.getFramebuffer().framebufferRender(mc.mainWindow.getFramebufferWidth(), mc.mainWindow.getFramebufferHeight());
//#else
//$$ mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight);
//#endif
popMatrix(); popMatrix();
Display.update(); //#if MC>=11300
mc.mainWindow.update(true);
//#else
//$$ Display.update();
//#endif
// Send the packets // Send the packets
replaySender.sendPacketsTill(targetTime); replaySender.sendPacketsTill(targetTime);
replaySender.setAsyncMode(true); replaySender.setAsyncMode(true);
replaySender.setReplaySpeed(0); replaySender.setReplaySpeed(0);
getConnection(mc).getNetworkManager().processReceivedPackets(); getConnection(mc).getNetworkManager()
//#if MC>=11300
.tick();
//#else
//$$ .processReceivedPackets();
//#endif
for (Entity entity : loadedEntityList(world(mc))) { for (Entity entity : loadedEntityList(world(mc))) {
if (entity instanceof EntityOtherPlayerMP) { skipTeleportInterpolation(entity);
EntityOtherPlayerMP e = (EntityOtherPlayerMP) entity;
e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
e.rotationYaw = (float) e.otherPlayerMPYaw;
e.rotationPitch = (float) e.otherPlayerMPPitch;
}
entity.lastTickPosX = entity.prevPosX = entity.posX; entity.lastTickPosX = entity.prevPosX = entity.posX;
entity.lastTickPosY = entity.prevPosY = entity.posY; entity.lastTickPosY = entity.prevPosY = entity.posY;
entity.lastTickPosZ = entity.prevPosZ = entity.posZ; entity.lastTickPosZ = entity.prevPosZ = entity.posZ;
entity.prevRotationYaw = entity.rotationYaw; entity.prevRotationYaw = entity.rotationYaw;
entity.prevRotationPitch = entity.rotationPitch; entity.prevRotationPitch = entity.rotationPitch;
} }
//#if MC>=10800 //#if MC>=10800 && MC<11300
try { //$$ try {
mc.runTick(); //$$ mc.runTick();
} catch (IOException e) { //$$ } catch (IOException e) {
e.printStackTrace(); // This should never be thrown but whatever //$$ e.printStackTrace(); // This should never be thrown but whatever
} //$$ }
//#else //#else
//$$ mc.runTick(); mc.runTick();
//#endif //#endif
//finally, updating the camera's position (which is not done by the sync jumping) //finally, updating the camera's position (which is not done by the sync jumping)
@@ -649,4 +699,23 @@ public class ReplayHandler {
} }
} }
} }
private void skipTeleportInterpolation(Entity entity) {
//#if MC>=11300
if (entity instanceof EntityLivingBase) {
EntityLivingBase e = (EntityLivingBase) entity;
// FIXME
// e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
// e.rotationYaw = (float) e.otherPlayerMPYaw;
// e.rotationPitch = (float) e.otherPlayerMPPitch;
}
//#else
//$$ if (entity instanceof EntityOtherPlayerMP) {
//$$ EntityOtherPlayerMP e = (EntityOtherPlayerMP) entity;
//$$ e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
//$$ e.rotationYaw = (float) e.otherPlayerMPYaw;
//$$ e.rotationPitch = (float) e.otherPlayerMPPitch;
//$$ }
//#endif
}
} }

View File

@@ -6,6 +6,7 @@ import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.replaymod.core.ReplayMod; import com.replaymod.core.ReplayMod;
import com.replaymod.core.utils.ModCompat; import com.replaymod.core.utils.ModCompat;
import com.replaymod.core.versions.MCVer;
import com.replaymod.replay.camera.CameraController; import com.replaymod.replay.camera.CameraController;
import com.replaymod.replay.camera.CameraControllerRegistry; import com.replaymod.replay.camera.CameraControllerRegistry;
import com.replaymod.replay.camera.CameraEntity; import com.replaymod.replay.camera.CameraEntity;
@@ -19,16 +20,20 @@ import com.replaymod.replaystudio.replay.ReplayFile;
import com.replaymod.replaystudio.replay.ZipReplayFile; import com.replaymod.replaystudio.replay.ZipReplayFile;
import com.replaymod.replaystudio.studio.ReplayStudio; import com.replaymod.replaystudio.studio.ReplayStudio;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.lwjgl.input.Keyboard;
//#if MC>=11300
import com.replaymod.core.versions.MCVer.Keyboard;
//#else
//$$ import org.lwjgl.input.Keyboard;
//#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
//#else //#else
//$$ import cpw.mods.fml.common.Mod;
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent; //$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
//$$ import cpw.mods.fml.common.event.FMLPostInitializationEvent; //$$ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent; //$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
@@ -40,25 +45,16 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Optional; import java.util.Optional;
@Mod(modid = ReplayModReplay.MOD_ID, public class ReplayModReplay extends ReplayMod.Module {
version = "@MOD_VERSION@",
acceptedMinecraftVersions = "@MC_VERSION@",
acceptableRemoteVersions = "*",
//#if MC>=10800
clientSideOnly = true,
//#endif
useMetadata = true)
public class ReplayModReplay {
public static final String MOD_ID = "replaymod-replay";
@Mod.Instance(MOD_ID) { instance = this; }
public static ReplayModReplay instance; public static ReplayModReplay instance;
private ReplayMod core; private ReplayMod core;
private final CameraControllerRegistry cameraControllerRegistry = new CameraControllerRegistry(); private final CameraControllerRegistry cameraControllerRegistry = new CameraControllerRegistry();
public static Logger LOGGER; public static Logger LOGGER = LogManager.getLogger();
protected ReplayHandler replayHandler; protected ReplayHandler replayHandler;
@@ -66,14 +62,15 @@ public class ReplayModReplay {
return replayHandler; return replayHandler;
} }
@Mod.EventHandler public ReplayModReplay(ReplayMod core) {
public void preInit(FMLPreInitializationEvent event) { this.core = core;
LOGGER = event.getModLog(); }
core = ReplayMod.instance;
@Override
public void preInit(FMLPreInitializationEvent event) {
core.getSettingsRegistry().register(Setting.class); core.getSettingsRegistry().register(Setting.class);
core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.marker", Keyboard.KEY_M, new Runnable() { core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.marker", MCVer.Keyboard.KEY_M, new Runnable() {
@Override @Override
public void run() { public void run() {
if (replayHandler != null ) { if (replayHandler != null ) {
@@ -109,7 +106,7 @@ public class ReplayModReplay {
@Override @Override
public void run() { public void run() {
if (replayHandler != null) { if (replayHandler != null) {
Minecraft mc = Minecraft.getMinecraft(); Minecraft mc = MCVer.getMinecraft();
ListenableFuture<NoGuiScreenshot> future = NoGuiScreenshot.take(mc, 1280, 720); ListenableFuture<NoGuiScreenshot> future = NoGuiScreenshot.take(mc, 1280, 720);
Futures.addCallback(future, new FutureCallback<NoGuiScreenshot>() { Futures.addCallback(future, new FutureCallback<NoGuiScreenshot>() {
@Override @Override
@@ -181,15 +178,15 @@ public class ReplayModReplay {
}); });
} }
@Mod.EventHandler @Override
public void init(FMLInitializationEvent event) { public void init(FMLInitializationEvent event) {
Minecraft mc = core.getMinecraft(); Minecraft mc = core.getMinecraft();
mc.timer = new InputReplayTimer(mc.timer, this); // FIXME mc.timer = new InputReplayTimer(mc.timer, this);
new GuiHandler(this).register(); new GuiHandler(this).register();
} }
@Mod.EventHandler @Override
public void postInit(FMLPostInitializationEvent event) { public void postInit(FMLPostInitializationEvent event) {
Setting.CAMERA.setChoices(new ArrayList<>(cameraControllerRegistry.getControllers())); Setting.CAMERA.setChoices(new ArrayList<>(cameraControllerRegistry.getControllers()));
} }

View File

@@ -2,6 +2,8 @@ package com.replaymod.replay;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import static com.replaymod.core.versions.MCVer.getMinecraft;
public interface ReplaySender { public interface ReplaySender {
int currentTimeStamp(); int currentTimeStamp();
@@ -10,7 +12,7 @@ public interface ReplaySender {
* @return {@code true} if it is paused, {@code false} otherwise * @return {@code true} if it is paused, {@code false} otherwise
*/ */
public default boolean paused() { public default boolean paused() {
Minecraft mc = Minecraft.getMinecraft(); Minecraft mc = getMinecraft();
//#if MC>=11200 //#if MC>=11200
return mc.timer.tickLength == Float.POSITIVE_INFINITY; return mc.timer.tickLength == Float.POSITIVE_INFINITY;
//#else //#else

View File

@@ -3,6 +3,7 @@ package com.replaymod.replay.camera;
import com.replaymod.core.ReplayMod; import com.replaymod.core.ReplayMod;
import com.replaymod.core.events.SettingsChangedEvent; import com.replaymod.core.events.SettingsChangedEvent;
import com.replaymod.core.utils.Utils; import com.replaymod.core.utils.Utils;
import com.replaymod.core.versions.MCVer;
import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replay.Setting; import com.replaymod.replay.Setting;
import com.replaymod.replay.events.ReplayChatMessageEvent; import com.replaymod.replay.events.ReplayChatMessageEvent;
@@ -26,10 +27,18 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
//#if MC>=11300
import net.minecraft.util.math.RayTraceFluidMode;
//#endif
//#if MC>=10904 //#if MC>=10904
import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.EntityEquipmentSlot;
//#if MC>=11200 //#if MC>=11200
import net.minecraft.stats.RecipeBook; //#if MC>=11300
import net.minecraft.client.util.RecipeBookClient;
//#else
//$$ import net.minecraft.stats.RecipeBook;
//#endif
//#endif //#endif
import net.minecraft.stats.StatisticsManager; import net.minecraft.stats.StatisticsManager;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
@@ -45,9 +54,14 @@ import net.minecraft.util.text.ITextComponent;
//#if MC>=10800 //#if MC>=10800
import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
//#if MC>=11300
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.EventPriority;
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
//#endif
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.EventPriority; //$$ import cpw.mods.fml.common.eventhandler.EventPriority;
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent; //$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -97,9 +111,13 @@ public class CameraEntity
*/ */
private final EventHandler eventHandler = new EventHandler(); private final EventHandler eventHandler = new EventHandler();
//#if MC>=11300
public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager, RecipeBookClient recipeBookClient) {
super(mcIn, worldIn, netHandlerPlayClient, statisticsManager, recipeBookClient);
//#else
//#if MC>=11200 //#if MC>=11200
public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager, RecipeBook recipeBook) { //$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager, RecipeBook recipeBook) {
super(mcIn, worldIn, netHandlerPlayClient, statisticsManager, recipeBook); //$$ super(mcIn, worldIn, netHandlerPlayClient, statisticsManager, recipeBook);
//#else //#else
//#if MC>=10904 //#if MC>=10904
//$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager) { //$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager) {
@@ -113,6 +131,7 @@ public class CameraEntity
//$$ super(mcIn, worldIn, session, netHandlerPlayClient, statFileWriter); //$$ super(mcIn, worldIn, session, netHandlerPlayClient, statFileWriter);
//#endif //#endif
//#endif //#endif
//#endif
//#endif //#endif
FORGE_BUS.register(eventHandler); FORGE_BUS.register(eventHandler);
FML_BUS.register(eventHandler); FML_BUS.register(eventHandler);
@@ -196,7 +215,11 @@ public class CameraEntity
private void updateBoundingBox() { private void updateBoundingBox() {
//#if MC>=10800 //#if MC>=10800
setEntityBoundingBox(new AxisAlignedBB( //#if MC>=11300
setBoundingBox(new AxisAlignedBB(
//#else
//$$ setEntityBoundingBox(new AxisAlignedBB(
//#endif
//#else //#else
//$$ this.boundingBox.setBB(AxisAlignedBB.getBoundingBox( //$$ this.boundingBox.setBB(AxisAlignedBB.getBoundingBox(
//#endif //#endif
@@ -205,7 +228,11 @@ public class CameraEntity
} }
@Override @Override
public void onUpdate() { //#if MC>=11300
public void tick() {
//#else
//$$ public void onUpdate() {
//#endif
//#if MC>=10800 //#if MC>=10800
Entity view = getRenderViewEntity(mc); Entity view = getRenderViewEntity(mc);
//#else //#else
@@ -262,10 +289,12 @@ public class CameraEntity
return falseUnlessSpectating(Entity::isEntityInsideOpaqueBlock); // Make sure no suffocation overlay is rendered return falseUnlessSpectating(Entity::isEntityInsideOpaqueBlock); // Make sure no suffocation overlay is rendered
} }
/* FIXME
@Override @Override
public boolean isInsideOfMaterial(Material materialIn) { public boolean isInsideOfMaterial(Material materialIn) {
return falseUnlessSpectating(e -> e.isInsideOfMaterial(materialIn)); // Make sure no overlays are rendered return falseUnlessSpectating(e -> e.isInsideOfMaterial(materialIn)); // Make sure no overlays are rendered
} }
*/
//#if MC>=10800 //#if MC>=10800
@Override @Override
@@ -405,19 +434,33 @@ public class CameraEntity
return super.isHandActive(); return super.isHandActive();
} }
//#if MC>=11300
@Override @Override
public RayTraceResult rayTrace(double p_174822_1_, float p_174822_3_) { public RayTraceResult rayTrace(double blockReachDistance, float partialTicks, RayTraceFluidMode p_174822_4_) {
RayTraceResult pos = super.rayTrace(p_174822_1_, 1f); RayTraceResult pos = super.rayTrace(blockReachDistance, partialTicks, p_174822_4_);
// Make sure we can never look at blocks (-> no outline) // Make sure we can never look at blocks (-> no outline)
if(pos != null && pos.typeOfHit == RayTraceResult.Type.BLOCK) { if(pos != null && pos.type == RayTraceResult.Type.BLOCK) {
pos.typeOfHit = RayTraceResult.Type.MISS; pos.type = RayTraceResult.Type.MISS;
} }
return pos; return pos;
} }
//#else //#else
//$$ @Override //$$ @Override
//$$ public RayTraceResult rayTrace(double p_174822_1_, float p_174822_3_) {
//$$ RayTraceResult pos = super.rayTrace(p_174822_1_, 1f);
//$$
//$$ // Make sure we can never look at blocks (-> no outline)
//$$ if(pos != null && pos.typeOfHit == RayTraceResult.Type.BLOCK) {
//$$ pos.typeOfHit = RayTraceResult.Type.MISS;
//$$ }
//$$
//$$ return pos;
//$$ }
//#endif
//#else
//$$ @Override
//$$ public MovingObjectPosition rayTrace(double p_174822_1_, float p_174822_3_) { //$$ public MovingObjectPosition rayTrace(double p_174822_1_, float p_174822_3_) {
//$$ MovingObjectPosition pos = super.rayTrace(p_174822_1_, 1f); //$$ MovingObjectPosition pos = super.rayTrace(p_174822_1_, 1f);
//$$ //$$
@@ -430,15 +473,22 @@ public class CameraEntity
//$$ } //$$ }
//#endif //#endif
/* FIXME
@Override @Override
public void openGui(Object mod, int modGuiId, World world, int x, int y, int z) { public void openGui(Object mod, int modGuiId, World world, int x, int y, int z) {
// Do not open any block GUIs for the camera entities // Do not open any block GUIs for the camera entities
// Note: Vanilla GUIs are filtered out on a packet level, this only applies to mod GUIs // Note: Vanilla GUIs are filtered out on a packet level, this only applies to mod GUIs
} }
*/
@Override @Override
public void setDead() { //#if MC>=11300
super.setDead(); public void remove() {
super.remove();
//#else
//$$ public void setDead() {
//$$ super.setDead();
//#endif
FORGE_BUS.unregister(eventHandler); FORGE_BUS.unregister(eventHandler);
FML_BUS.unregister(eventHandler); FML_BUS.unregister(eventHandler);
} }
@@ -530,11 +580,11 @@ public class CameraEntity
@SubscribeEvent @SubscribeEvent
public void preCrosshairRender(RenderGameOverlayEvent.Pre event) { public void preCrosshairRender(RenderGameOverlayEvent.Pre event) {
// The crosshair should only render if targeted entity can actually be spectated // The crosshair should only render if targeted entity can actually be spectated
if (getType(event) == RenderGameOverlayEvent.ElementType.CROSSHAIRS) { if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.CROSSHAIRS) {
event.setCanceled(!canSpectate(mc.pointedEntity)); event.setCanceled(!canSpectate(mc.pointedEntity));
} }
// Hotbar should never be rendered // Hotbar should never be rendered
if (getType(event) == RenderGameOverlayEvent.ElementType.HOTBAR) { if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.HOTBAR) {
event.setCanceled(true); event.setCanceled(true);
} }
} }
@@ -568,12 +618,14 @@ public class CameraEntity
lastHandRendered = player; lastHandRendered = player;
//#if MC>=10904 //#if MC>=10904
/* FIXME needs AT
mc.entityRenderer.itemRenderer.prevEquippedProgressMainHand = 1; mc.entityRenderer.itemRenderer.prevEquippedProgressMainHand = 1;
mc.entityRenderer.itemRenderer.prevEquippedProgressOffHand = 1; mc.entityRenderer.itemRenderer.prevEquippedProgressOffHand = 1;
mc.entityRenderer.itemRenderer.equippedProgressMainHand = 1; mc.entityRenderer.itemRenderer.equippedProgressMainHand = 1;
mc.entityRenderer.itemRenderer.equippedProgressOffHand = 1; mc.entityRenderer.itemRenderer.equippedProgressOffHand = 1;
mc.entityRenderer.itemRenderer.itemStackMainHand = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); mc.entityRenderer.itemRenderer.itemStackMainHand = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND);
mc.entityRenderer.itemRenderer.itemStackOffHand = player.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); mc.entityRenderer.itemRenderer.itemStackOffHand = player.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
*/
//#else //#else
//$$ mc.entityRenderer.itemRenderer.prevEquippedProgress = 1; //$$ mc.entityRenderer.itemRenderer.prevEquippedProgress = 1;
//$$ mc.entityRenderer.itemRenderer.equippedProgress = 1; //$$ mc.entityRenderer.itemRenderer.equippedProgress = 1;
@@ -605,7 +657,7 @@ public class CameraEntity
@SubscribeEvent @SubscribeEvent
public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) { public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) {
switch (getType(event)) { switch (MCVer.getType(event)) {
case ALL: case ALL:
heldItemTooltipsWasTrue = mc.gameSettings.heldItemTooltips; heldItemTooltipsWasTrue = mc.gameSettings.heldItemTooltips;
mc.gameSettings.heldItemTooltips = false; mc.gameSettings.heldItemTooltips = false;
@@ -641,7 +693,7 @@ public class CameraEntity
@SubscribeEvent @SubscribeEvent
public void postRenderGameOverlay(RenderGameOverlayEvent.Post event) { public void postRenderGameOverlay(RenderGameOverlayEvent.Post event) {
if (getType(event) != RenderGameOverlayEvent.ElementType.ALL) return; if (MCVer.getType(event) != RenderGameOverlayEvent.ElementType.ALL) return;
mc.gameSettings.heldItemTooltips = heldItemTooltipsWasTrue; mc.gameSettings.heldItemTooltips = heldItemTooltipsWasTrue;
} }
} }

View File

@@ -1,9 +1,8 @@
package com.replaymod.replay.camera; package com.replaymod.replay.camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.settings.KeyBinding;
import org.lwjgl.Sys;
import org.lwjgl.util.vector.Vector3f; import javax.vecmath.Vector3f;
import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.core.versions.MCVer.*;
@@ -22,7 +21,7 @@ public class ClassicCameraController implements CameraController {
private Vector3f direction; private Vector3f direction;
private Vector3f dirBefore; private Vector3f dirBefore;
private double motion; private double motion;
private long lastCall = Sys.getTime(); private long lastCall = System.currentTimeMillis();
private boolean speedup = false; private boolean speedup = false;
@@ -34,7 +33,7 @@ public class ClassicCameraController implements CameraController {
public void update(float partialTicksPassed) { public void update(float partialTicksPassed) {
boolean forward = false, backward = false, left = false, right = false, up = false, down = false; boolean forward = false, backward = false, left = false, right = false, up = false, down = false;
speedup = false; speedup = false;
for(KeyBinding kb : Minecraft.getMinecraft().gameSettings.keyBindings) { for(KeyBinding kb : getMinecraft().gameSettings.keyBindings) {
if(!isKeyDown(kb)) continue; if(!isKeyDown(kb)) continue;
if(kb.getKeyDescription().equals("key.forward")) { if(kb.getKeyDescription().equals("key.forward")) {
forward = true; forward = true;
@@ -109,7 +108,7 @@ public class ClassicCameraController implements CameraController {
} }
private void updateMovement() { private void updateMovement() {
long frac = Sys.getTime() - lastCall; long frac = System.currentTimeMillis() - lastCall;
if(frac == 0) return; if(frac == 0) return;
@@ -124,13 +123,14 @@ public class ClassicCameraController implements CameraController {
motion = Math.min(motion, MAX_SPEED); motion = Math.min(motion, MAX_SPEED);
lastCall = Sys.getTime(); lastCall = System.currentTimeMillis();
if(direction == null || direction.lengthSquared() == 0 || motion < THRESHOLD) { if(direction == null || direction.lengthSquared() == 0 || motion < THRESHOLD) {
return; return;
} }
Vector3f movement = direction.normalise(null); Vector3f movement = new Vector3f(direction);
movement.normalize();
double factor = motion * (frac / 1000D); double factor = motion * (frac / 1000D);
camera.moveCamera(movement.x * factor, movement.y * factor, movement.z * factor); camera.moveCamera(movement.x * factor, movement.y * factor, movement.z * factor);
@@ -162,7 +162,9 @@ public class ClassicCameraController implements CameraController {
Vector3f dbf = direction; Vector3f dbf = direction;
if(dirBefore != null) { if(dirBefore != null) {
direction = Vector3f.add(direction, dirBefore.normalise(null), null); dirBefore.normalize();
dirBefore.add(direction);
direction = dirBefore;
} }
dirBefore = dbf; dirBefore = dbf;

View File

@@ -6,7 +6,12 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import org.lwjgl.input.Mouse;
//#if MC>=11300
// FIXME
//#else
//$$ import org.lwjgl.input.Mouse;
//#endif
import java.util.Arrays; import java.util.Arrays;
@@ -18,7 +23,7 @@ public class SpectatorCameraController implements CameraController {
@Override @Override
public void update(float partialTicksPassed) { public void update(float partialTicksPassed) {
Minecraft mc = Minecraft.getMinecraft(); Minecraft mc = getMinecraft();
if (mc.gameSettings.keyBindSneak.isPressed()) { if (mc.gameSettings.keyBindSneak.isPressed()) {
ReplayModReplay.instance.getReplayHandler().spectateCamera(); ReplayModReplay.instance.getReplayHandler().spectateCamera();
} }
@@ -31,7 +36,11 @@ public class SpectatorCameraController implements CameraController {
} }
// Prevent mouse movement // Prevent mouse movement
Mouse.updateCursor(); //#if MC>=11300
// FIXME
//#else
//$$ Mouse.updateCursor();
//#endif
// Always make sure the camera is in the exact same spot as the spectated entity // Always make sure the camera is in the exact same spot as the spectated entity
// This is necessary as some rendering code for the hand doesn't respect the view entity // This is necessary as some rendering code for the hand doesn't respect the view entity

View File

@@ -1,9 +1,15 @@
package com.replaymod.replay.camera; package com.replaymod.replay.camera;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.settings.KeyBinding;
import org.lwjgl.util.vector.Vector3f;
//#if MC>=11300
import net.minecraft.client.GameSettings;
//#else
//$$ import net.minecraft.client.settings.GameSettings;
//#endif
import javax.vecmath.Vector3f;
import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.core.versions.MCVer.*;
@@ -42,11 +48,11 @@ public class VanillaCameraController implements CameraController {
Vector3f direction = new Vector3f(0, 0, 0); Vector3f direction = new Vector3f(0, 0, 0);
for (int i = 0; i < 6; i++) { // First, get movement direction depending on keys pressed for (int i = 0; i < 6; i++) { // First, get movement direction depending on keys pressed
if (isKeyDown(bindings[i])) { if (isKeyDown(bindings[i])) {
Vector3f.add(direction, DIRECTIONS[i], direction); direction.add(DIRECTIONS[i]);
} }
} }
if (direction.length() == 0) return; if (direction.length() == 0) return;
direction.normalise(direction); // Normalize, so we don't move quicker if we hold down multiple keys direction.normalize(); // Normalize, so we don't move quicker if we hold down multiple keys
double yawRadians = Math.toRadians(camera.rotationYaw); double yawRadians = Math.toRadians(camera.rotationYaw);
float yawSin = (float) Math.sin(yawRadians), yawCos = (float) Math.cos(yawRadians); float yawSin = (float) Math.sin(yawRadians), yawCos = (float) Math.cos(yawRadians);
// Rotate by yaw // Rotate by yaw

View File

@@ -5,8 +5,13 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.eventhandler.Cancelable; //#if MC>=11300
import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.eventbus.api.Cancelable;
import net.minecraftforge.eventbus.api.Event;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.Cancelable;
//$$ import net.minecraftforge.fml.common.eventhandler.Event;
//#endif
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.Cancelable; //$$ import cpw.mods.fml.common.eventhandler.Cancelable;
//$$ import cpw.mods.fml.common.eventhandler.Event; //$$ import cpw.mods.fml.common.eventhandler.Event;

View File

@@ -5,7 +5,11 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.eventhandler.Event; //#if MC>=11300
import net.minecraftforge.eventbus.api.Event;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.Event;
//#endif
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.Event; //$$ import cpw.mods.fml.common.eventhandler.Event;
//#endif //#endif

View File

@@ -1,8 +1,13 @@
package com.replaymod.replay.events; package com.replaymod.replay.events;
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.eventhandler.Cancelable; //#if MC>=11300
import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.eventbus.api.Cancelable;
import net.minecraftforge.eventbus.api.Event;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.Cancelable;
//$$ import net.minecraftforge.fml.common.eventhandler.Event;
//#endif
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.Cancelable; //$$ import cpw.mods.fml.common.eventhandler.Cancelable;
//$$ import cpw.mods.fml.common.eventhandler.Event; //$$ import cpw.mods.fml.common.eventhandler.Event;

View File

@@ -5,7 +5,11 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.eventhandler.Event; //#if MC>=11300
import net.minecraftforge.eventbus.api.Event;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.Event;
//#endif
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.Event; //$$ import cpw.mods.fml.common.eventhandler.Event;
//#endif //#endif

View File

@@ -12,8 +12,13 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout;
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Colors;
import com.replaymod.replaystudio.data.Marker; import com.replaymod.replaystudio.data.Marker;
import org.lwjgl.input.Keyboard; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint;
import org.lwjgl.util.ReadablePoint;
//#if MC>=11300
import com.replaymod.core.versions.MCVer.Keyboard;
//#else
//$$ import org.lwjgl.input.Keyboard;
//#endif
public class GuiEditMarkerPopup extends AbstractGuiPopup<GuiEditMarkerPopup> implements Typeable { public class GuiEditMarkerPopup extends AbstractGuiPopup<GuiEditMarkerPopup> implements Typeable {
private static GuiNumberField newGuiNumberField() { private static GuiNumberField newGuiNumberField() {

View File

@@ -8,10 +8,10 @@ import de.johni0702.minecraft.gui.GuiRenderer;
import de.johni0702.minecraft.gui.RenderInfo; import de.johni0702.minecraft.gui.RenderInfo;
import de.johni0702.minecraft.gui.element.advanced.AbstractGuiTimeline; import de.johni0702.minecraft.gui.element.advanced.AbstractGuiTimeline;
import de.johni0702.minecraft.gui.function.Draggable; import de.johni0702.minecraft.gui.function.Draggable;
import de.johni0702.minecraft.gui.utils.lwjgl.Point;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import org.lwjgl.util.Point;
import org.lwjgl.util.ReadableDimension;
import org.lwjgl.util.ReadablePoint;
import static de.johni0702.minecraft.gui.utils.Utils.clamp; import static de.johni0702.minecraft.gui.utils.Utils.clamp;

View File

@@ -14,15 +14,24 @@ import de.johni0702.minecraft.gui.element.GuiTooltip;
import de.johni0702.minecraft.gui.element.advanced.IGuiTimeline; import de.johni0702.minecraft.gui.element.advanced.IGuiTimeline;
import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.CustomLayout;
import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint;
import de.johni0702.minecraft.gui.utils.lwjgl.WritablePoint;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.GameSettings;
import org.lwjgl.input.Keyboard; //#if MC>=11300
import org.lwjgl.util.ReadableDimension; import net.minecraft.client.GameSettings;
import org.lwjgl.util.ReadablePoint; //#else
import org.lwjgl.util.WritablePoint; //$$ import net.minecraft.client.settings.GameSettings;
//$$ import org.lwjgl.input.Keyboard;
//#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; //#if MC>=11300
import net.minecraftforge.eventbus.api.SubscribeEvent;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
//#endif
import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.common.gameevent.InputEvent;
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent; //$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -160,12 +169,14 @@ public class GuiReplayOverlay extends AbstractGuiOverlay<GuiReplayOverlay> {
setMouseVisible(true); setMouseVisible(true);
} }
} }
/* FIXME
if (Keyboard.getEventKeyState()) { if (Keyboard.getEventKeyState()) {
// Handle the F1 key binding while the overlay is opened as a gui screen // Handle the F1 key binding while the overlay is opened as a gui screen
if (isMouseVisible() && Keyboard.getEventKey() == Keyboard.KEY_F1) { if (isMouseVisible() && Keyboard.getEventKey() == Keyboard.KEY_F1) {
gameSettings.hideGUI = !gameSettings.hideGUI; gameSettings.hideGUI = !gameSettings.hideGUI;
} }
} }
*/
} }
@Override @Override

View File

@@ -10,6 +10,7 @@ import com.replaymod.core.ReplayMod;
import com.replaymod.core.SettingsRegistry; import com.replaymod.core.SettingsRegistry;
import com.replaymod.core.gui.GuiReplaySettings; import com.replaymod.core.gui.GuiReplaySettings;
import com.replaymod.core.utils.Utils; import com.replaymod.core.utils.Utils;
import com.replaymod.core.versions.MCVer;
import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replay.Setting; import com.replaymod.replay.Setting;
import com.replaymod.replaystudio.replay.ReplayFile; import com.replaymod.replaystudio.replay.ReplayFile;
@@ -31,24 +32,24 @@ import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
import de.johni0702.minecraft.gui.popup.GuiYesNoPopup; import de.johni0702.minecraft.gui.popup.GuiYesNoPopup;
import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Colors;
import de.johni0702.minecraft.gui.utils.Consumer; import de.johni0702.minecraft.gui.utils.Consumer;
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint;
import lombok.Getter; import lombok.Getter;
import net.minecraft.client.gui.GuiErrorScreen; import net.minecraft.client.gui.GuiErrorScreen;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReport;
import net.minecraft.util.ReportedException;
import net.minecraft.util.Util;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOCase; import org.apache.commons.io.IOCase;
import org.apache.commons.io.filefilter.SuffixFileFilter; import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.util.Dimension;
import org.lwjgl.util.ReadableDimension;
import org.lwjgl.util.ReadablePoint;
import java.awt.*; //#if MC>=11300
import com.replaymod.core.versions.MCVer.Keyboard;
//#else
//$$ import org.lwjgl.input.Keyboard;
//#endif
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
@@ -57,6 +58,7 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import static com.replaymod.replay.ReplayModReplay.LOGGER; import static com.replaymod.replay.ReplayModReplay.LOGGER;
import static com.replaymod.core.versions.MCVer.*;
public class GuiReplayViewer extends GuiScreen { public class GuiReplayViewer extends GuiScreen {
private final ReplayModReplay mod; private final ReplayModReplay mod;
@@ -93,29 +95,8 @@ public class GuiReplayViewer extends GuiScreen {
public void run() { public void run() {
try { try {
File folder = mod.getCore().getReplayFolder(); File folder = mod.getCore().getReplayFolder();
String path = folder.getAbsolutePath();
// First try OS specific methods MCVer.openFile(folder);
try {
switch (Util.getOSType()) {
case WINDOWS:
Runtime.getRuntime().exec(String.format("cmd.exe /C start \"Open file\" \"%s\"", path));
return;
case OSX:
Runtime.getRuntime().exec(new String[]{"/usr/bin/open", path});
return;
}
} catch (IOException e) {
LogManager.getLogger().error("Cannot open file", e);
}
// Otherwise try to java way
try {
Desktop.getDesktop().browse(folder.toURI());
} catch (Throwable throwable) {
// And if all fails, lwjgl
Sys.openURL("file://" + path);
}
} catch (IOException e) { } catch (IOException e) {
mod.getLogger().error("Cannot open file", e); mod.getLogger().error("Cannot open file", e);
} }
@@ -232,7 +213,7 @@ public class GuiReplayViewer extends GuiScreen {
try { try {
list.setFolder(mod.getCore().getReplayFolder()); list.setFolder(mod.getCore().getReplayFolder());
} catch (IOException e) { } catch (IOException e) {
throw new ReportedException(CrashReport.makeCrashReport(e, "Getting replay folder")); throw newReportedException(CrashReport.makeCrashReport(e, "Getting replay folder"));
} }
setTitle(new GuiLabel().setI18nText("replaymod.gui.replayviewer")); setTitle(new GuiLabel().setI18nText("replaymod.gui.replayviewer"));

View File

@@ -1,5 +1,6 @@
package com.replaymod.replay.handler; package com.replaymod.replay.handler;
import com.replaymod.core.versions.MCVer;
import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replay.gui.screen.GuiReplayViewer; import com.replaymod.replay.gui.screen.GuiReplayViewer;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@@ -11,7 +12,11 @@ import net.minecraft.client.resources.I18n;
import net.minecraftforge.client.event.GuiScreenEvent; import net.minecraftforge.client.event.GuiScreenEvent;
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; //#if MC>=11300
import net.minecraftforge.eventbus.api.SubscribeEvent;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
//#endif
//#else //#else
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent; //$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
//#endif //#endif
@@ -32,7 +37,7 @@ public class GuiHandler {
private static final int BUTTON_REPLAY_VIEWER = 17890234; private static final int BUTTON_REPLAY_VIEWER = 17890234;
private static final int BUTTON_EXIT_REPLAY = 17890235; private static final int BUTTON_EXIT_REPLAY = 17890235;
private static final Minecraft mc = Minecraft.getMinecraft(); private static final Minecraft mc = MCVer.getMinecraft();
private final ReplayModReplay mod; private final ReplayModReplay mod;
@@ -130,7 +135,7 @@ public class GuiHandler {
return; return;
} }
GuiButton button = new GuiButton(BUTTON_REPLAY_VIEWER, getGui(event).width / 2 - 100, GuiButton button = new GuiButton(BUTTON_REPLAY_VIEWER, getGui(event).width / 2 - 100,
getGui(event).height / 4 + 10 + 3 * 24, I18n.format("replaymod.gui.replayviewer")); getGui(event).height / 4 + 10 + 3 * 24, I18n.format("replaymod.gui.replayviewer")){};
button.width = button.width / 2 - 2; button.width = button.width / 2 - 2;
getButtonList(event).add(button); getButtonList(event).add(button);
} }

View File

@@ -2,7 +2,6 @@
package com.replaymod.replay.mixin; package com.replaymod.replay.mixin;
import com.replaymod.replay.camera.CameraEntity; import com.replaymod.replay.camera.CameraEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiSpectator; import net.minecraft.client.gui.GuiSpectator;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@@ -20,7 +19,7 @@ public abstract class MixinGuiSpectator {
//#endif //#endif
public void isInReplay(int i, CallbackInfo ci) { public void isInReplay(int i, CallbackInfo ci) {
// Prevent spectator gui from opening while in a replay // Prevent spectator gui from opening while in a replay
if (player(Minecraft.getMinecraft()) instanceof CameraEntity) { if (player(getMinecraft()) instanceof CameraEntity) {
ci.cancel(); ci.cancel();
} }
} }

View File

@@ -15,7 +15,11 @@ import java.util.Queue;
@Mixin(ParticleManager.class) @Mixin(ParticleManager.class)
public abstract class MixinParticleManager { public abstract class MixinParticleManager {
@Shadow @Shadow
private Queue<Particle> queueEntityFX; //#if MC>=11300
private Queue<Particle> queue;
//#else
//$$ private Queue<Particle> queueEntityFX;
//#endif
/** /**
* This method additionally clears the queue of particles to be added when the world is changed. * This method additionally clears the queue of particles to be added when the world is changed.
@@ -27,7 +31,11 @@ public abstract class MixinParticleManager {
*/ */
@Inject(method = "clearEffects", at = @At("HEAD")) @Inject(method = "clearEffects", at = @At("HEAD"))
public void replayModReplay_clearParticleQueue(World world, CallbackInfo ci) { public void replayModReplay_clearParticleQueue(World world, CallbackInfo ci) {
queueEntityFX.clear(); //#if MC>=11300
queue.clear();
//#else
//$$ queueEntityFX.clear();
//#endif
} }
} }
//#endif //#endif

View File

@@ -13,7 +13,11 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
//#if MC>=11200 //#if MC>=11200
import net.minecraft.stats.RecipeBook; //#if MC>=11300
import net.minecraft.client.util.RecipeBookClient;
//#else
//$$ import net.minecraft.stats.RecipeBook;
//#endif
//#endif //#endif
//#if MC>=10904 //#if MC>=10904
import net.minecraft.stats.StatisticsManager; import net.minecraft.stats.StatisticsManager;
@@ -44,10 +48,16 @@ public abstract class MixinPlayerControllerMP {
//#endif //#endif
//#if MC>=11200 //#if MC>=11200
@Inject(method = "func_192830_a", at=@At("HEAD"), cancellable = true) @Inject(method = "createPlayer", at=@At("HEAD"), cancellable = true)
private void replayModReplay_createReplayCamera(World worldIn, StatisticsManager statisticsManager, RecipeBook recipeBook, CallbackInfoReturnable<EntityPlayerSP> ci) { private void replayModReplay_createReplayCamera(World worldIn, StatisticsManager statisticsManager, RecipeBookClient recipeBookClient, CallbackInfoReturnable<EntityPlayerSP> ci) {
if (ReplayModReplay.instance.getReplayHandler() != null) { if (ReplayModReplay.instance.getReplayHandler() != null) {
ci.setReturnValue(new CameraEntity(mc, worldIn, connection, statisticsManager, recipeBook)); ci.setReturnValue(new CameraEntity(mc, worldIn, connection, statisticsManager, recipeBookClient));
//#else
//#if MC>=11200
//$$ @Inject(method = "func_192830_a", at=@At("HEAD"), cancellable = true)
//$$ private void replayModReplay_createReplayCamera(World worldIn, StatisticsManager statisticsManager, RecipeBook recipeBook, CallbackInfoReturnable<EntityPlayerSP> ci) {
//$$ if (ReplayModReplay.instance.getReplayHandler() != null) {
//$$ ci.setReturnValue(new CameraEntity(mc, worldIn, connection, statisticsManager, recipeBook));
//#else //#else
//#if MC>=10904 //#if MC>=10904
//$$ @Inject(method = "createClientPlayer", at=@At("HEAD"), cancellable = true) //$$ @Inject(method = "createClientPlayer", at=@At("HEAD"), cancellable = true)
@@ -67,13 +77,18 @@ public abstract class MixinPlayerControllerMP {
//$$ ci.setReturnValue(new CameraEntity(mc, worldIn, mc.getSession(), netClientHandler, statFileWriter)); //$$ ci.setReturnValue(new CameraEntity(mc, worldIn, mc.getSession(), netClientHandler, statFileWriter));
//#endif //#endif
//#endif //#endif
//#endif
//#endif //#endif
ci.cancel(); ci.cancel();
} }
} }
//#if MC>=10800 //#if MC>=10800
@Inject(method = "isSpectator", at=@At("HEAD"), cancellable = true) //#if MC>=11300
@Inject(method = "isSpectatorMode", at=@At("HEAD"), cancellable = true)
//#else
//$$ @Inject(method = "isSpectator", at=@At("HEAD"), cancellable = true)
//#endif
private void replayModReplay_isSpectator(CallbackInfoReturnable<Boolean> ci) { private void replayModReplay_isSpectator(CallbackInfoReturnable<Boolean> ci) {
if (player(mc) instanceof CameraEntity) { // this check should in theory not be required if (player(mc) instanceof CameraEntity) { // this check should in theory not be required
ci.setReturnValue(player(mc).isSpectator()); ci.setReturnValue(player(mc).isSpectator());

View File

@@ -2,25 +2,42 @@ package com.replaymod.replay.mixin;
import com.replaymod.replay.ReplayHandler; import com.replaymod.replay.ReplayHandler;
import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.ReplayModReplay;
import net.minecraft.client.Minecraft;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
//#if MC>=11300
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.util.Util;
//#else
//$$ import net.minecraft.client.Minecraft;
//#if MC>=10904 //#if MC>=10904
import net.minecraft.client.renderer.RenderItem; //$$ import net.minecraft.client.renderer.RenderItem;
//#else //#else
//$$ import net.minecraft.client.renderer.entity.RenderItem; //$$ import net.minecraft.client.renderer.entity.RenderItem;
//#endif //#endif
//#endif
@Mixin(RenderItem.class) //#if MC>=11300
@Mixin(ItemRenderer.class)
//#else
//$$ @Mixin(RenderItem.class)
//#endif
public class MixinRenderItem { public class MixinRenderItem {
@Redirect(method = "renderEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J")) //#if MC>=11300
private long getEnchantmentTime() { @Redirect(method = "renderEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;milliTime()J"))
//#else
//$$ @Redirect(method = "renderEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
//#endif
private static long getEnchantmentTime() {
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler(); ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
if (replayHandler != null) { if (replayHandler != null) {
return replayHandler.getReplaySender().currentTimeStamp(); return replayHandler.getReplaySender().currentTimeStamp();
} }
return Minecraft.getSystemTime(); //#if MC>=11300
return Util.milliTime();
//#else
//$$ return Minecraft.getSystemTime();
//#endif
} }
} }

View File

@@ -1,7 +1,6 @@
package com.replaymod.replay.mixin; package com.replaymod.replay.mixin;
import com.replaymod.replay.camera.CameraEntity; import com.replaymod.replay.camera.CameraEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -26,7 +25,7 @@ import static com.replaymod.core.versions.MCVer.*;
public abstract class MixinRenderLivingBase { public abstract class MixinRenderLivingBase {
@Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true) @Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true)
private void replayModReplay_canRenderInvisibleName(EntityLivingBase entity, CallbackInfoReturnable<Boolean> ci) { private void replayModReplay_canRenderInvisibleName(EntityLivingBase entity, CallbackInfoReturnable<Boolean> ci) {
EntityPlayer thePlayer = player(Minecraft.getMinecraft()); EntityPlayer thePlayer = player(getMinecraft());
if (thePlayer instanceof CameraEntity && entity.isInvisible()) { if (thePlayer instanceof CameraEntity && entity.isInvisible()) {
ci.setReturnValue(false); ci.setReturnValue(false);
} }

View File

@@ -3,7 +3,6 @@ package com.replaymod.replay.mixin;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.world.World; import net.minecraft.world.World;
@@ -13,6 +12,12 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC>=11300
import net.minecraft.client.GameSettings;
//#else
//$$ import net.minecraft.client.settings.GameSettings;
//#endif
@Mixin(RenderManager.class) @Mixin(RenderManager.class)
public class MixinRenderManager { public class MixinRenderManager {
@Shadow @Shadow

View File

@@ -2,11 +2,16 @@ package com.replaymod.replay.mixin;
import com.replaymod.replay.ReplayHandler; import com.replaymod.replay.ReplayHandler;
import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.ReplayModReplay;
import net.minecraft.client.Minecraft;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
//#if MC>=11300
import net.minecraft.util.Util;
//#else
import net.minecraft.client.Minecraft;
//#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer; import net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer;
//#else //#else
@@ -19,8 +24,11 @@ import net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer;
//$$ @Mixin(RenderEndPortal.class) //$$ @Mixin(RenderEndPortal.class)
//#endif //#endif
public class MixinTileEntityEndPortalRenderer { public class MixinTileEntityEndPortalRenderer {
//#if MC>=11300
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;milliTime()J"))
//#else
//#if MC>=10809 //#if MC>=10809
@Redirect(method = "renderTileEntityAt", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J")) //$$ @Redirect(method = "renderTileEntityAt", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
//#else //#else
//#if MC>=10800 //#if MC>=10800
//$$ @Redirect(method = "func_180544_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J")) //$$ @Redirect(method = "func_180544_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
@@ -28,11 +36,16 @@ public class MixinTileEntityEndPortalRenderer {
//$$ @Redirect(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntityEndPortal;DDDF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J")) //$$ @Redirect(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntityEndPortal;DDDF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
//#endif //#endif
//#endif //#endif
private long replayModReplay_getEnchantmentTime() { //#endif
private static long replayModReplay_getEnchantmentTime() {
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler(); ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
if (replayHandler != null) { if (replayHandler != null) {
return replayHandler.getReplaySender().currentTimeStamp(); return replayHandler.getReplaySender().currentTimeStamp();
} }
return Minecraft.getSystemTime(); //#if MC>=11300
return Util.milliTime();
//#else
//$$ return Minecraft.getSystemTime();
//#endif
} }
} }

View File

@@ -273,7 +273,6 @@ sourceSets {
exclude 'com/replaymod/online' exclude 'com/replaymod/online'
exclude 'com/replaymod/pathing' exclude 'com/replaymod/pathing'
exclude 'com/replaymod/render' exclude 'com/replaymod/render'
exclude 'com/replaymod/replay'
exclude 'com/replaymod/restrictions' exclude 'com/replaymod/restrictions'
exclude 'com/replaymod/simplepathing' exclude 'com/replaymod/simplepathing'
} }