Get replay module compiling on 1.13
This commit is contained in:
@@ -8,6 +8,7 @@ import com.replaymod.core.handler.MainMenuHandler;
|
||||
import com.replaymod.core.utils.OpenGLUtils;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.recording.ReplayModRecording;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import com.replaymod.replaystudio.util.I18n;
|
||||
import de.johni0702.minecraft.gui.container.GuiScreen;
|
||||
import lombok.Getter;
|
||||
@@ -138,6 +139,7 @@ public class ReplayMod {
|
||||
private final List<Module> modules = new ArrayList<>();
|
||||
{
|
||||
modules.add(new ReplayModRecording(this));
|
||||
modules.add(new ReplayModReplay(this));
|
||||
}
|
||||
|
||||
public KeyBindingRegistry getKeyBindingRegistry() {
|
||||
|
||||
@@ -34,6 +34,10 @@ import net.minecraftforge.common.MinecraftForge;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11200
|
||||
import com.replaymod.core.utils.WrappedTimer;
|
||||
//#endif
|
||||
@@ -49,7 +53,11 @@ import net.minecraft.util.text.ITextComponent;
|
||||
//#endif
|
||||
|
||||
//#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;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
@@ -185,7 +193,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
/**
|
||||
* The minecraft instance.
|
||||
*/
|
||||
protected Minecraft mc = Minecraft.getMinecraft();
|
||||
protected Minecraft mc = getMinecraft();
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* 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
|
||||
@@ -308,7 +316,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
if (world(mc) != null) {
|
||||
for (EntityPlayer playerEntity : playerEntities(world(mc))) {
|
||||
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);
|
||||
for (int i = 0; i < world.loadedEntityList.size(); ++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 chunkY = entity.chunkCoordZ;
|
||||
|
||||
@@ -370,7 +382,12 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
//#else
|
||||
//$$ if (entity.addedToChunk && world.getChunkProvider().chunkExists(chunkX, chunkY)) {
|
||||
//#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--);
|
||||
@@ -418,11 +435,15 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
//$$ if (p instanceof S3FPacketCustomPayload) {
|
||||
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
|
||||
//#endif
|
||||
//#if MC>=11300
|
||||
ResourceLocation channelName = packet.getChannelName();
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
String channelName = packet.getChannelName();
|
||||
//$$ String channelName = packet.getChannelName();
|
||||
//#else
|
||||
//$$ String channelName = packet.func_149169_c();
|
||||
//#endif
|
||||
//#endif
|
||||
if (Restrictions.PLUGIN_CHANNEL.equals(channelName)) {
|
||||
final String unknown = replayHandler.getRestrictions().handle(packet);
|
||||
if (unknown == null) {
|
||||
@@ -459,7 +480,13 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
//$$ IChatComponent reason = ((S40PacketDisconnect) p).func_149165_c();
|
||||
//#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
|
||||
// to remove this packet.
|
||||
return null;
|
||||
@@ -475,6 +502,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
//$$ if (p instanceof S3FPacketCustomPayload) {
|
||||
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
|
||||
//#endif
|
||||
/* FIXME
|
||||
//#if MC>=10800
|
||||
String channelName = packet.getChannelName();
|
||||
//#else
|
||||
@@ -483,6 +511,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
if ("MC|BOpen".equals(channelName)) {
|
||||
return null;
|
||||
}
|
||||
*/
|
||||
//#if MC>=10800
|
||||
}
|
||||
|
||||
@@ -514,7 +543,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
if (!file.exists()) {
|
||||
IOUtils.copy(replayFile.getResourcePack(hash).get(), new FileOutputStream(file));
|
||||
}
|
||||
setServerResourcePack(mc.getResourcePackRepository(), file);
|
||||
// FIXME setServerResourcePack(mc.getResourcePackRepository(), file);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -540,7 +569,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
//#if MC>=10800
|
||||
int dimension = packet.getDimension();
|
||||
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();
|
||||
|
||||
//#if MC>=10904
|
||||
@@ -1064,7 +1097,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
// Needs to be called at least 4 times thanks to
|
||||
// EntityOtherPlayerMP#otherPlayerMPPosRotationIncrements (max vanilla value is 3)
|
||||
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
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* FIXME
|
||||
package com.replaymod.replay;
|
||||
|
||||
import com.replaymod.core.utils.WrappedTimer;
|
||||
@@ -264,3 +265,4 @@ public class InputReplayTimer extends WrappedTimer {
|
||||
//$$ public static class RunScheduledTasks extends Event {}
|
||||
//#endif
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -38,6 +38,12 @@ public class NoGuiScreenshot {
|
||||
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;
|
||||
try {
|
||||
mc.gameSettings.hideGUI = true;
|
||||
@@ -57,7 +63,7 @@ public class NoGuiScreenshot {
|
||||
mc.getFramebuffer().unbindFramebuffer();
|
||||
GlStateManager.popMatrix();
|
||||
GlStateManager.pushMatrix();
|
||||
mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight);
|
||||
mc.getFramebuffer().framebufferRender(frameWidth, frameHeight);
|
||||
GlStateManager.popMatrix();
|
||||
} catch (Throwable t) {
|
||||
future.setException(t);
|
||||
@@ -73,7 +79,7 @@ public class NoGuiScreenshot {
|
||||
// disk for better maintainability
|
||||
File tmpFolder = Files.createTempDir();
|
||||
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");
|
||||
BufferedImage image = ImageIO.read(screenshotFile);
|
||||
int imageWidth = image.getWidth();
|
||||
|
||||
@@ -62,7 +62,6 @@ import net.minecraft.network.EnumConnectionState;
|
||||
import net.minecraft.network.EnumPacketDirection;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@@ -85,11 +84,18 @@ import java.util.function.Consumer;
|
||||
import java.util.zip.Deflater;
|
||||
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
|
||||
import com.replaymod.core.utils.WrappedTimer;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.FML_BUS;
|
||||
import static com.replaymod.core.versions.MCVer.getMinecraft;
|
||||
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 int CACHE_VERSION = 0;
|
||||
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
private final Minecraft mc = getMinecraft();
|
||||
|
||||
private final ReplayModReplay mod;
|
||||
private final ReplayFile replayFile;
|
||||
@@ -980,8 +986,13 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
|
||||
for (BlockChange blockChange : blockChanges) {
|
||||
NetUtil.writePosition(cacheOut, blockChange.pos);
|
||||
index += 8;
|
||||
index += writeVarInt(cacheOut, blockChange.from.getId() << 4 | blockChange.from.getData() & 15);
|
||||
index += writeVarInt(cacheOut, blockChange.to.getId() << 4 | blockChange.to.getData() & 15);
|
||||
//#if MC>=11300
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,19 +21,25 @@ import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.embedded.EmbeddedChannel;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityOtherPlayerMP;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import org.lwjgl.opengl.Display;
|
||||
|
||||
import java.io.IOException;
|
||||
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
|
||||
//$$ import de.johni0702.minecraft.gui.element.GuiLabel;
|
||||
//$$ import de.johni0702.minecraft.gui.popup.GuiInfoPopup;
|
||||
@@ -41,11 +47,16 @@ import java.util.*;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||
import net.minecraft.network.EnumPacketDirection;
|
||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
|
||||
//#if MC>=11300
|
||||
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.*;
|
||||
//#else
|
||||
@@ -73,7 +84,7 @@ import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
|
||||
public class ReplayHandler {
|
||||
|
||||
private static Minecraft mc = Minecraft.getMinecraft();
|
||||
private static Minecraft mc = getMinecraft();
|
||||
|
||||
/**
|
||||
* The file currently being played.
|
||||
@@ -146,7 +157,11 @@ public class ReplayHandler {
|
||||
|
||||
// Force re-creation of camera entity by unloading the previous world
|
||||
mc.addScheduledTask(() -> {
|
||||
mc.setIngameNotInFocus();
|
||||
//#if MC>=11300
|
||||
mc.mouseHelper.ungrabMouse();
|
||||
//#else
|
||||
//$$ mc.setIngameNotInFocus();
|
||||
//#endif
|
||||
mc.loadWorld(null);
|
||||
});
|
||||
|
||||
@@ -171,7 +186,11 @@ public class ReplayHandler {
|
||||
channel.close().awaitUninterruptibly();
|
||||
|
||||
if (player(mc) instanceof CameraEntity) {
|
||||
player(mc).setDead();
|
||||
//#if MC>=11300
|
||||
player(mc).remove();
|
||||
//#else
|
||||
//$$ player(mc).setDead();
|
||||
//#endif
|
||||
}
|
||||
|
||||
if (world(mc) != null) {
|
||||
@@ -207,21 +226,32 @@ public class ReplayHandler {
|
||||
t.printStackTrace();
|
||||
}
|
||||
};
|
||||
NetHandlerPlayClient netHandlerPlayClient =
|
||||
new NetHandlerPlayClient(mc, null, networkManager, new GameProfile(UUID.randomUUID(), "Player"));
|
||||
networkManager.setNetHandler(netHandlerPlayClient);
|
||||
FMLClientHandler.instance().setPlayClient(netHandlerPlayClient);
|
||||
|
||||
//#if MC>=11200
|
||||
//#if MC>=11300
|
||||
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();
|
||||
|
||||
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
|
||||
//$$ channel = new EmbeddedChannel(networkManager);
|
||||
//$$ NetworkDispatcher networkDispatcher = new NetworkDispatcher(networkManager);
|
||||
@@ -234,6 +264,7 @@ public class ReplayHandler {
|
||||
//$$ channel.pipeline().addAfter("ReplayModReplay_replaySender", "fml:packet_handler", networkDispatcher);
|
||||
//$$ channel.pipeline().fireChannelActive();
|
||||
//#endif
|
||||
//#endif
|
||||
//#else
|
||||
//$$ NetworkManager networkManager = new NetworkManager(true) {
|
||||
//$$ @Override
|
||||
@@ -520,12 +551,7 @@ public class ReplayHandler {
|
||||
|
||||
// Update all entity positions (especially prev/lastTick values)
|
||||
for (Entity entity : loadedEntityList(world(mc))) {
|
||||
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;
|
||||
}
|
||||
skipTeleportInterpolation(entity);
|
||||
entity.lastTickPosX = entity.prevPosX = entity.posX;
|
||||
entity.lastTickPosY = entity.prevPosY = entity.posY;
|
||||
entity.lastTickPosZ = entity.prevPosZ = entity.posZ;
|
||||
@@ -534,23 +560,22 @@ public class ReplayHandler {
|
||||
}
|
||||
|
||||
// Run previous tick
|
||||
try {
|
||||
mc.runTick();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
//#if MC>=11300
|
||||
mc.runTick();
|
||||
//#else
|
||||
//$$ try {
|
||||
//$$ mc.runTick();
|
||||
//$$ } catch (IOException e) {
|
||||
//$$ throw new RuntimeException(e);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
// Jump to target tick
|
||||
quickReplaySender.sendPacketsTill(targetTime);
|
||||
|
||||
// Immediately apply player teleport interpolation
|
||||
for (Entity entity : loadedEntityList(world(mc))) {
|
||||
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;
|
||||
}
|
||||
skipTeleportInterpolation(entity);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -583,7 +608,11 @@ public class ReplayHandler {
|
||||
// Render our please-wait-screen
|
||||
GuiScreen guiScreen = new GuiScreen() {
|
||||
@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);
|
||||
drawCenteredString(getFontRenderer(mc), I18n.format("replaymod.gui.pleasewait"),
|
||||
width / 2, height / 2, 0xffffffff);
|
||||
@@ -598,47 +627,68 @@ public class ReplayHandler {
|
||||
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
enableTexture2D();
|
||||
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.drawScreen(0, 0, 0);
|
||||
//#if MC>=11300
|
||||
guiScreen.render(0, 0, 0);
|
||||
//#else
|
||||
//$$ guiScreen.drawScreen(0, 0, 0);
|
||||
//#endif
|
||||
|
||||
mc.getFramebuffer().unbindFramebuffer();
|
||||
popMatrix();
|
||||
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();
|
||||
|
||||
Display.update();
|
||||
//#if MC>=11300
|
||||
mc.mainWindow.update(true);
|
||||
//#else
|
||||
//$$ Display.update();
|
||||
//#endif
|
||||
|
||||
// Send the packets
|
||||
replaySender.sendPacketsTill(targetTime);
|
||||
replaySender.setAsyncMode(true);
|
||||
replaySender.setReplaySpeed(0);
|
||||
|
||||
getConnection(mc).getNetworkManager().processReceivedPackets();
|
||||
getConnection(mc).getNetworkManager()
|
||||
//#if MC>=11300
|
||||
.tick();
|
||||
//#else
|
||||
//$$ .processReceivedPackets();
|
||||
//#endif
|
||||
for (Entity entity : loadedEntityList(world(mc))) {
|
||||
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;
|
||||
}
|
||||
skipTeleportInterpolation(entity);
|
||||
entity.lastTickPosX = entity.prevPosX = entity.posX;
|
||||
entity.lastTickPosY = entity.prevPosY = entity.posY;
|
||||
entity.lastTickPosZ = entity.prevPosZ = entity.posZ;
|
||||
entity.prevRotationYaw = entity.rotationYaw;
|
||||
entity.prevRotationPitch = entity.rotationPitch;
|
||||
}
|
||||
//#if MC>=10800
|
||||
try {
|
||||
mc.runTick();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace(); // This should never be thrown but whatever
|
||||
}
|
||||
//#if MC>=10800 && MC<11300
|
||||
//$$ try {
|
||||
//$$ mc.runTick();
|
||||
//$$ } catch (IOException e) {
|
||||
//$$ e.printStackTrace(); // This should never be thrown but whatever
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ mc.runTick();
|
||||
mc.runTick();
|
||||
//#endif
|
||||
|
||||
//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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.google.common.util.concurrent.Futures;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.core.utils.ModCompat;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.replay.camera.CameraController;
|
||||
import com.replaymod.replay.camera.CameraControllerRegistry;
|
||||
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.studio.ReplayStudio;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
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
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.Mod;
|
||||
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
//$$ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
@@ -40,25 +45,16 @@ import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
|
||||
@Mod(modid = ReplayModReplay.MOD_ID,
|
||||
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";
|
||||
public class ReplayModReplay extends ReplayMod.Module {
|
||||
|
||||
@Mod.Instance(MOD_ID)
|
||||
{ instance = this; }
|
||||
public static ReplayModReplay instance;
|
||||
|
||||
private ReplayMod core;
|
||||
|
||||
private final CameraControllerRegistry cameraControllerRegistry = new CameraControllerRegistry();
|
||||
|
||||
public static Logger LOGGER;
|
||||
public static Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
protected ReplayHandler replayHandler;
|
||||
|
||||
@@ -66,14 +62,15 @@ public class ReplayModReplay {
|
||||
return replayHandler;
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void preInit(FMLPreInitializationEvent event) {
|
||||
LOGGER = event.getModLog();
|
||||
core = ReplayMod.instance;
|
||||
public ReplayModReplay(ReplayMod core) {
|
||||
this.core = core;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preInit(FMLPreInitializationEvent event) {
|
||||
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
|
||||
public void run() {
|
||||
if (replayHandler != null ) {
|
||||
@@ -109,7 +106,7 @@ public class ReplayModReplay {
|
||||
@Override
|
||||
public void run() {
|
||||
if (replayHandler != null) {
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
Minecraft mc = MCVer.getMinecraft();
|
||||
ListenableFuture<NoGuiScreenshot> future = NoGuiScreenshot.take(mc, 1280, 720);
|
||||
Futures.addCallback(future, new FutureCallback<NoGuiScreenshot>() {
|
||||
@Override
|
||||
@@ -181,15 +178,15 @@ public class ReplayModReplay {
|
||||
});
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
@Override
|
||||
public void init(FMLInitializationEvent event) {
|
||||
Minecraft mc = core.getMinecraft();
|
||||
mc.timer = new InputReplayTimer(mc.timer, this);
|
||||
// FIXME mc.timer = new InputReplayTimer(mc.timer, this);
|
||||
|
||||
new GuiHandler(this).register();
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
@Override
|
||||
public void postInit(FMLPostInitializationEvent event) {
|
||||
Setting.CAMERA.setChoices(new ArrayList<>(cameraControllerRegistry.getControllers()));
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.replaymod.replay;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getMinecraft;
|
||||
|
||||
public interface ReplaySender {
|
||||
int currentTimeStamp();
|
||||
|
||||
@@ -10,7 +12,7 @@ public interface ReplaySender {
|
||||
* @return {@code true} if it is paused, {@code false} otherwise
|
||||
*/
|
||||
public default boolean paused() {
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
Minecraft mc = getMinecraft();
|
||||
//#if MC>=11200
|
||||
return mc.timer.tickLength == Float.POSITIVE_INFINITY;
|
||||
//#else
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.replaymod.replay.camera;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.core.events.SettingsChangedEvent;
|
||||
import com.replaymod.core.utils.Utils;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import com.replaymod.replay.Setting;
|
||||
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.common.MinecraftForge;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.util.math.RayTraceFluidMode;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||
//#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
|
||||
import net.minecraft.stats.StatisticsManager;
|
||||
import net.minecraft.util.EnumHand;
|
||||
@@ -45,9 +54,14 @@ import net.minecraft.util.text.ITextComponent;
|
||||
|
||||
//#if MC>=10800
|
||||
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;
|
||||
//#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
|
||||
//$$ import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
@@ -97,9 +111,13 @@ public class CameraEntity
|
||||
*/
|
||||
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
|
||||
public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager, RecipeBook recipeBook) {
|
||||
super(mcIn, worldIn, netHandlerPlayClient, statisticsManager, recipeBook);
|
||||
//$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager, RecipeBook recipeBook) {
|
||||
//$$ super(mcIn, worldIn, netHandlerPlayClient, statisticsManager, recipeBook);
|
||||
//#else
|
||||
//#if MC>=10904
|
||||
//$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager) {
|
||||
@@ -113,6 +131,7 @@ public class CameraEntity
|
||||
//$$ super(mcIn, worldIn, session, netHandlerPlayClient, statFileWriter);
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
FORGE_BUS.register(eventHandler);
|
||||
FML_BUS.register(eventHandler);
|
||||
@@ -196,7 +215,11 @@ public class CameraEntity
|
||||
|
||||
private void updateBoundingBox() {
|
||||
//#if MC>=10800
|
||||
setEntityBoundingBox(new AxisAlignedBB(
|
||||
//#if MC>=11300
|
||||
setBoundingBox(new AxisAlignedBB(
|
||||
//#else
|
||||
//$$ setEntityBoundingBox(new AxisAlignedBB(
|
||||
//#endif
|
||||
//#else
|
||||
//$$ this.boundingBox.setBB(AxisAlignedBB.getBoundingBox(
|
||||
//#endif
|
||||
@@ -205,7 +228,11 @@ public class CameraEntity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
//#if MC>=11300
|
||||
public void tick() {
|
||||
//#else
|
||||
//$$ public void onUpdate() {
|
||||
//#endif
|
||||
//#if MC>=10800
|
||||
Entity view = getRenderViewEntity(mc);
|
||||
//#else
|
||||
@@ -262,10 +289,12 @@ public class CameraEntity
|
||||
return falseUnlessSpectating(Entity::isEntityInsideOpaqueBlock); // Make sure no suffocation overlay is rendered
|
||||
}
|
||||
|
||||
/* FIXME
|
||||
@Override
|
||||
public boolean isInsideOfMaterial(Material materialIn) {
|
||||
return falseUnlessSpectating(e -> e.isInsideOfMaterial(materialIn)); // Make sure no overlays are rendered
|
||||
}
|
||||
*/
|
||||
|
||||
//#if MC>=10800
|
||||
@Override
|
||||
@@ -405,19 +434,33 @@ public class CameraEntity
|
||||
return super.isHandActive();
|
||||
}
|
||||
|
||||
//#if MC>=11300
|
||||
@Override
|
||||
public RayTraceResult rayTrace(double p_174822_1_, float p_174822_3_) {
|
||||
RayTraceResult pos = super.rayTrace(p_174822_1_, 1f);
|
||||
public RayTraceResult rayTrace(double blockReachDistance, float partialTicks, RayTraceFluidMode p_174822_4_) {
|
||||
RayTraceResult pos = super.rayTrace(blockReachDistance, partialTicks, p_174822_4_);
|
||||
|
||||
// Make sure we can never look at blocks (-> no outline)
|
||||
if(pos != null && pos.typeOfHit == RayTraceResult.Type.BLOCK) {
|
||||
pos.typeOfHit = RayTraceResult.Type.MISS;
|
||||
if(pos != null && pos.type == RayTraceResult.Type.BLOCK) {
|
||||
pos.type = RayTraceResult.Type.MISS;
|
||||
}
|
||||
|
||||
return pos;
|
||||
}
|
||||
//#else
|
||||
//$$ @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_) {
|
||||
//$$ MovingObjectPosition pos = super.rayTrace(p_174822_1_, 1f);
|
||||
//$$
|
||||
@@ -430,15 +473,22 @@ public class CameraEntity
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
/* FIXME
|
||||
@Override
|
||||
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
|
||||
// Note: Vanilla GUIs are filtered out on a packet level, this only applies to mod GUIs
|
||||
}
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void setDead() {
|
||||
super.setDead();
|
||||
//#if MC>=11300
|
||||
public void remove() {
|
||||
super.remove();
|
||||
//#else
|
||||
//$$ public void setDead() {
|
||||
//$$ super.setDead();
|
||||
//#endif
|
||||
FORGE_BUS.unregister(eventHandler);
|
||||
FML_BUS.unregister(eventHandler);
|
||||
}
|
||||
@@ -530,11 +580,11 @@ public class CameraEntity
|
||||
@SubscribeEvent
|
||||
public void preCrosshairRender(RenderGameOverlayEvent.Pre event) {
|
||||
// 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));
|
||||
}
|
||||
// Hotbar should never be rendered
|
||||
if (getType(event) == RenderGameOverlayEvent.ElementType.HOTBAR) {
|
||||
if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.HOTBAR) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
@@ -568,12 +618,14 @@ public class CameraEntity
|
||||
lastHandRendered = player;
|
||||
|
||||
//#if MC>=10904
|
||||
/* FIXME needs AT
|
||||
mc.entityRenderer.itemRenderer.prevEquippedProgressMainHand = 1;
|
||||
mc.entityRenderer.itemRenderer.prevEquippedProgressOffHand = 1;
|
||||
mc.entityRenderer.itemRenderer.equippedProgressMainHand = 1;
|
||||
mc.entityRenderer.itemRenderer.equippedProgressOffHand = 1;
|
||||
mc.entityRenderer.itemRenderer.itemStackMainHand = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND);
|
||||
mc.entityRenderer.itemRenderer.itemStackOffHand = player.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
|
||||
*/
|
||||
//#else
|
||||
//$$ mc.entityRenderer.itemRenderer.prevEquippedProgress = 1;
|
||||
//$$ mc.entityRenderer.itemRenderer.equippedProgress = 1;
|
||||
@@ -605,7 +657,7 @@ public class CameraEntity
|
||||
|
||||
@SubscribeEvent
|
||||
public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) {
|
||||
switch (getType(event)) {
|
||||
switch (MCVer.getType(event)) {
|
||||
case ALL:
|
||||
heldItemTooltipsWasTrue = mc.gameSettings.heldItemTooltips;
|
||||
mc.gameSettings.heldItemTooltips = false;
|
||||
@@ -641,7 +693,7 @@ public class CameraEntity
|
||||
|
||||
@SubscribeEvent
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
package com.replaymod.replay.camera;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
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.*;
|
||||
|
||||
@@ -22,7 +21,7 @@ public class ClassicCameraController implements CameraController {
|
||||
private Vector3f direction;
|
||||
private Vector3f dirBefore;
|
||||
private double motion;
|
||||
private long lastCall = Sys.getTime();
|
||||
private long lastCall = System.currentTimeMillis();
|
||||
|
||||
private boolean speedup = false;
|
||||
|
||||
@@ -34,7 +33,7 @@ public class ClassicCameraController implements CameraController {
|
||||
public void update(float partialTicksPassed) {
|
||||
boolean forward = false, backward = false, left = false, right = false, up = false, down = false;
|
||||
speedup = false;
|
||||
for(KeyBinding kb : Minecraft.getMinecraft().gameSettings.keyBindings) {
|
||||
for(KeyBinding kb : getMinecraft().gameSettings.keyBindings) {
|
||||
if(!isKeyDown(kb)) continue;
|
||||
if(kb.getKeyDescription().equals("key.forward")) {
|
||||
forward = true;
|
||||
@@ -109,7 +108,7 @@ public class ClassicCameraController implements CameraController {
|
||||
}
|
||||
|
||||
private void updateMovement() {
|
||||
long frac = Sys.getTime() - lastCall;
|
||||
long frac = System.currentTimeMillis() - lastCall;
|
||||
|
||||
if(frac == 0) return;
|
||||
|
||||
@@ -124,13 +123,14 @@ public class ClassicCameraController implements CameraController {
|
||||
|
||||
motion = Math.min(motion, MAX_SPEED);
|
||||
|
||||
lastCall = Sys.getTime();
|
||||
lastCall = System.currentTimeMillis();
|
||||
|
||||
if(direction == null || direction.lengthSquared() == 0 || motion < THRESHOLD) {
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3f movement = direction.normalise(null);
|
||||
Vector3f movement = new Vector3f(direction);
|
||||
movement.normalize();
|
||||
double factor = motion * (frac / 1000D);
|
||||
|
||||
camera.moveCamera(movement.x * factor, movement.y * factor, movement.z * factor);
|
||||
@@ -162,7 +162,9 @@ public class ClassicCameraController implements CameraController {
|
||||
Vector3f dbf = direction;
|
||||
|
||||
if(dirBefore != null) {
|
||||
direction = Vector3f.add(direction, dirBefore.normalise(null), null);
|
||||
dirBefore.normalize();
|
||||
dirBefore.add(direction);
|
||||
direction = dirBefore;
|
||||
}
|
||||
|
||||
dirBefore = dbf;
|
||||
|
||||
@@ -6,7 +6,12 @@ import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.entity.Entity;
|
||||
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;
|
||||
|
||||
@@ -18,7 +23,7 @@ public class SpectatorCameraController implements CameraController {
|
||||
|
||||
@Override
|
||||
public void update(float partialTicksPassed) {
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
Minecraft mc = getMinecraft();
|
||||
if (mc.gameSettings.keyBindSneak.isPressed()) {
|
||||
ReplayModReplay.instance.getReplayHandler().spectateCamera();
|
||||
}
|
||||
@@ -31,7 +36,11 @@ public class SpectatorCameraController implements CameraController {
|
||||
}
|
||||
|
||||
// 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
|
||||
// This is necessary as some rendering code for the hand doesn't respect the view entity
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
package com.replaymod.replay.camera;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.settings.GameSettings;
|
||||
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.*;
|
||||
|
||||
@@ -42,11 +48,11 @@ public class VanillaCameraController implements CameraController {
|
||||
Vector3f direction = new Vector3f(0, 0, 0);
|
||||
for (int i = 0; i < 6; i++) { // First, get movement direction depending on keys pressed
|
||||
if (isKeyDown(bindings[i])) {
|
||||
Vector3f.add(direction, DIRECTIONS[i], direction);
|
||||
direction.add(DIRECTIONS[i]);
|
||||
}
|
||||
}
|
||||
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);
|
||||
float yawSin = (float) Math.sin(yawRadians), yawCos = (float) Math.cos(yawRadians);
|
||||
// Rotate by yaw
|
||||
|
||||
@@ -5,8 +5,13 @@ import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.eventhandler.Cancelable;
|
||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
//#if MC>=11300
|
||||
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
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Cancelable;
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||
|
||||
@@ -5,7 +5,11 @@ import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
//#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
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||
//#endif
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package com.replaymod.replay.events;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.eventhandler.Cancelable;
|
||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
//#if MC>=11300
|
||||
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
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Cancelable;
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||
|
||||
@@ -5,7 +5,11 @@ import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
//#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
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||
//#endif
|
||||
|
||||
@@ -12,8 +12,13 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
||||
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
|
||||
import de.johni0702.minecraft.gui.utils.Colors;
|
||||
import com.replaymod.replaystudio.data.Marker;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.util.ReadablePoint;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.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 {
|
||||
private static GuiNumberField newGuiNumberField() {
|
||||
|
||||
@@ -8,10 +8,10 @@ import de.johni0702.minecraft.gui.GuiRenderer;
|
||||
import de.johni0702.minecraft.gui.RenderInfo;
|
||||
import de.johni0702.minecraft.gui.element.advanced.AbstractGuiTimeline;
|
||||
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 org.lwjgl.util.Point;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import org.lwjgl.util.ReadablePoint;
|
||||
|
||||
import static de.johni0702.minecraft.gui.utils.Utils.clamp;
|
||||
|
||||
|
||||
@@ -14,15 +14,24 @@ import de.johni0702.minecraft.gui.element.GuiTooltip;
|
||||
import de.johni0702.minecraft.gui.element.advanced.IGuiTimeline;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
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.settings.GameSettings;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import org.lwjgl.util.ReadablePoint;
|
||||
import org.lwjgl.util.WritablePoint;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.GameSettings;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.settings.GameSettings;
|
||||
//$$ import org.lwjgl.input.Keyboard;
|
||||
//#endif
|
||||
|
||||
//#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;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
@@ -160,12 +169,14 @@ public class GuiReplayOverlay extends AbstractGuiOverlay<GuiReplayOverlay> {
|
||||
setMouseVisible(true);
|
||||
}
|
||||
}
|
||||
/* FIXME
|
||||
if (Keyboard.getEventKeyState()) {
|
||||
// Handle the F1 key binding while the overlay is opened as a gui screen
|
||||
if (isMouseVisible() && Keyboard.getEventKey() == Keyboard.KEY_F1) {
|
||||
gameSettings.hideGUI = !gameSettings.hideGUI;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.core.SettingsRegistry;
|
||||
import com.replaymod.core.gui.GuiReplaySettings;
|
||||
import com.replaymod.core.utils.Utils;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import com.replaymod.replay.Setting;
|
||||
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.utils.Colors;
|
||||
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 net.minecraft.client.gui.GuiErrorScreen;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
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.IOCase;
|
||||
import org.apache.commons.io.filefilter.SuffixFileFilter;
|
||||
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.io.File;
|
||||
import java.io.FileFilter;
|
||||
@@ -57,6 +58,7 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import static com.replaymod.replay.ReplayModReplay.LOGGER;
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
public class GuiReplayViewer extends GuiScreen {
|
||||
private final ReplayModReplay mod;
|
||||
@@ -93,29 +95,8 @@ public class GuiReplayViewer extends GuiScreen {
|
||||
public void run() {
|
||||
try {
|
||||
File folder = mod.getCore().getReplayFolder();
|
||||
String path = folder.getAbsolutePath();
|
||||
|
||||
// First try OS specific methods
|
||||
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);
|
||||
}
|
||||
MCVer.openFile(folder);
|
||||
} catch (IOException e) {
|
||||
mod.getLogger().error("Cannot open file", e);
|
||||
}
|
||||
@@ -232,7 +213,7 @@ public class GuiReplayViewer extends GuiScreen {
|
||||
try {
|
||||
list.setFolder(mod.getCore().getReplayFolder());
|
||||
} 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"));
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.replaymod.replay.handler;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import com.replaymod.replay.gui.screen.GuiReplayViewer;
|
||||
import net.minecraft.client.Minecraft;
|
||||
@@ -11,7 +12,11 @@ import net.minecraft.client.resources.I18n;
|
||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||
|
||||
//#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
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
//#endif
|
||||
@@ -32,7 +37,7 @@ public class GuiHandler {
|
||||
private static final int BUTTON_REPLAY_VIEWER = 17890234;
|
||||
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;
|
||||
|
||||
@@ -130,7 +135,7 @@ public class GuiHandler {
|
||||
return;
|
||||
}
|
||||
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;
|
||||
getButtonList(event).add(button);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
package com.replaymod.replay.mixin;
|
||||
|
||||
import com.replaymod.replay.camera.CameraEntity;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiSpectator;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -20,7 +19,7 @@ public abstract class MixinGuiSpectator {
|
||||
//#endif
|
||||
public void isInReplay(int i, CallbackInfo ci) {
|
||||
// Prevent spectator gui from opening while in a replay
|
||||
if (player(Minecraft.getMinecraft()) instanceof CameraEntity) {
|
||||
if (player(getMinecraft()) instanceof CameraEntity) {
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,11 @@ import java.util.Queue;
|
||||
@Mixin(ParticleManager.class)
|
||||
public abstract class MixinParticleManager {
|
||||
@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.
|
||||
@@ -27,7 +31,11 @@ public abstract class MixinParticleManager {
|
||||
*/
|
||||
@Inject(method = "clearEffects", at = @At("HEAD"))
|
||||
public void replayModReplay_clearParticleQueue(World world, CallbackInfo ci) {
|
||||
queueEntityFX.clear();
|
||||
//#if MC>=11300
|
||||
queue.clear();
|
||||
//#else
|
||||
//$$ queueEntityFX.clear();
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -13,7 +13,11 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
//#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
|
||||
//#if MC>=10904
|
||||
import net.minecraft.stats.StatisticsManager;
|
||||
@@ -44,10 +48,16 @@ public abstract class MixinPlayerControllerMP {
|
||||
//#endif
|
||||
|
||||
//#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) {
|
||||
@Inject(method = "createPlayer", at=@At("HEAD"), cancellable = true)
|
||||
private void replayModReplay_createReplayCamera(World worldIn, StatisticsManager statisticsManager, RecipeBookClient recipeBookClient, CallbackInfoReturnable<EntityPlayerSP> ci) {
|
||||
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
|
||||
//#if MC>=10904
|
||||
//$$ @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));
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
//#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) {
|
||||
if (player(mc) instanceof CameraEntity) { // this check should in theory not be required
|
||||
ci.setReturnValue(player(mc).isSpectator());
|
||||
|
||||
@@ -2,25 +2,42 @@ package com.replaymod.replay.mixin;
|
||||
|
||||
import com.replaymod.replay.ReplayHandler;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
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
|
||||
import net.minecraft.client.renderer.RenderItem;
|
||||
//$$ import net.minecraft.client.renderer.RenderItem;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.entity.RenderItem;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
@Mixin(RenderItem.class)
|
||||
//#if MC>=11300
|
||||
@Mixin(ItemRenderer.class)
|
||||
//#else
|
||||
//$$ @Mixin(RenderItem.class)
|
||||
//#endif
|
||||
public class MixinRenderItem {
|
||||
@Redirect(method = "renderEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
|
||||
private long getEnchantmentTime() {
|
||||
//#if MC>=11300
|
||||
@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();
|
||||
if (replayHandler != null) {
|
||||
return replayHandler.getReplaySender().currentTimeStamp();
|
||||
}
|
||||
return Minecraft.getSystemTime();
|
||||
//#if MC>=11300
|
||||
return Util.milliTime();
|
||||
//#else
|
||||
//$$ return Minecraft.getSystemTime();
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.replaymod.replay.mixin;
|
||||
|
||||
import com.replaymod.replay.camera.CameraEntity;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@@ -26,7 +25,7 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
public abstract class MixinRenderLivingBase {
|
||||
@Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModReplay_canRenderInvisibleName(EntityLivingBase entity, CallbackInfoReturnable<Boolean> ci) {
|
||||
EntityPlayer thePlayer = player(Minecraft.getMinecraft());
|
||||
EntityPlayer thePlayer = player(getMinecraft());
|
||||
if (thePlayer instanceof CameraEntity && entity.isInvisible()) {
|
||||
ci.setReturnValue(false);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.replaymod.replay.mixin;
|
||||
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraft.client.settings.GameSettings;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
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.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.GameSettings;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.settings.GameSettings;
|
||||
//#endif
|
||||
|
||||
@Mixin(RenderManager.class)
|
||||
public class MixinRenderManager {
|
||||
@Shadow
|
||||
|
||||
@@ -2,11 +2,16 @@ package com.replaymod.replay.mixin;
|
||||
|
||||
import com.replaymod.replay.ReplayHandler;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
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
|
||||
import net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer;
|
||||
//#else
|
||||
@@ -19,8 +24,11 @@ import net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer;
|
||||
//$$ @Mixin(RenderEndPortal.class)
|
||||
//#endif
|
||||
public class MixinTileEntityEndPortalRenderer {
|
||||
//#if MC>=11300
|
||||
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;milliTime()J"))
|
||||
//#else
|
||||
//#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
|
||||
//#if MC>=10800
|
||||
//$$ @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"))
|
||||
//#endif
|
||||
//#endif
|
||||
private long replayModReplay_getEnchantmentTime() {
|
||||
//#endif
|
||||
private static long replayModReplay_getEnchantmentTime() {
|
||||
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
|
||||
if (replayHandler != null) {
|
||||
return replayHandler.getReplaySender().currentTimeStamp();
|
||||
}
|
||||
return Minecraft.getSystemTime();
|
||||
//#if MC>=11300
|
||||
return Util.milliTime();
|
||||
//#else
|
||||
//$$ return Minecraft.getSystemTime();
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,7 +273,6 @@ sourceSets {
|
||||
exclude 'com/replaymod/online'
|
||||
exclude 'com/replaymod/pathing'
|
||||
exclude 'com/replaymod/render'
|
||||
exclude 'com/replaymod/replay'
|
||||
exclude 'com/replaymod/restrictions'
|
||||
exclude 'com/replaymod/simplepathing'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user