WIP 1.15 and ReplayStudio v2 update
This commit is contained in:
@@ -174,18 +174,20 @@ val doRelease by tasks.registering {
|
||||
defaultTasks("shadowJar")
|
||||
|
||||
preprocess {
|
||||
"1.14.4"(11404, "yarn") {
|
||||
"1.14.4-forge"(11404, "srg", file("versions/mapping-1.14.4-fabric-forge.txt")) {
|
||||
"1.12.2"(11202, "srg", file("versions/1.14.4-forge/mapping.txt")) {
|
||||
"1.12.1"(11201, "srg") {
|
||||
"1.12"(11200, "srg") {
|
||||
"1.11.2"(11102, "srg", file("versions/1.12/mapping.txt")) {
|
||||
"1.11"(11100, "srg", file("versions/1.11.2/mapping.txt")) {
|
||||
"1.10.2"(11002, "srg", file("versions/1.11/mapping.txt")) {
|
||||
"1.9.4"(10904, "srg") {
|
||||
"1.8.9"(10809, "srg", file("versions/1.9.4/mapping.txt")) {
|
||||
"1.8"(10800, "srg", file("versions/1.8.9/mapping.txt")) {
|
||||
"1.7.10"(10710, "srg", file("versions/1.8/mapping.txt"))
|
||||
"1.15.1"(11501, "yarn") {
|
||||
"1.14.4"(11404, "yarn", file("versions/mapping-fabric-1.15.1-1.14.4.txt")) {
|
||||
"1.14.4-forge"(11404, "srg", file("versions/mapping-1.14.4-fabric-forge.txt")) {
|
||||
"1.12.2"(11202, "srg", file("versions/1.14.4-forge/mapping.txt")) {
|
||||
"1.12.1"(11201, "srg") {
|
||||
"1.12"(11200, "srg") {
|
||||
"1.11.2"(11102, "srg", file("versions/1.12/mapping.txt")) {
|
||||
"1.11"(11100, "srg", file("versions/1.11.2/mapping.txt")) {
|
||||
"1.10.2"(11002, "srg", file("versions/1.11/mapping.txt")) {
|
||||
"1.9.4"(10904, "srg") {
|
||||
"1.8.9"(10809, "srg", file("versions/1.9.4/mapping.txt")) {
|
||||
"1.8"(10800, "srg", file("versions/1.8.9/mapping.txt")) {
|
||||
"1.7.10"(10710, "srg", file("versions/1.8/mapping.txt"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
jGui
2
jGui
Submodule jGui updated: 36fd2eb402...b434c78529
@@ -26,7 +26,8 @@ val jGuiVersions = listOf(
|
||||
"1.9.4",
|
||||
"1.12",
|
||||
"1.14.4-forge",
|
||||
"1.14.4"
|
||||
"1.14.4",
|
||||
"1.15.1"
|
||||
)
|
||||
val replayModVersions = listOf(
|
||||
"1.7.10",
|
||||
@@ -40,7 +41,8 @@ val replayModVersions = listOf(
|
||||
"1.12.1",
|
||||
"1.12.2",
|
||||
"1.14.4-forge",
|
||||
"1.14.4"
|
||||
"1.14.4",
|
||||
"1.15.1"
|
||||
)
|
||||
|
||||
include(":jGui")
|
||||
|
||||
@@ -15,7 +15,9 @@ import com.replaymod.recording.ReplayModRecording;
|
||||
import com.replaymod.render.ReplayModRender;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||
import com.replaymod.replaystudio.us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
||||
import com.replaymod.replaystudio.util.I18n;
|
||||
import com.replaymod.replaystudio.viaversion.ViaVersionPacketConverter;
|
||||
import com.replaymod.simplepathing.ReplayModSimplePathing;
|
||||
import de.johni0702.minecraft.gui.container.GuiScreen;
|
||||
import lombok.Getter;
|
||||
@@ -30,8 +32,6 @@ import net.minecraft.util.Formatting;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
//#if MC>=11400
|
||||
import com.github.steveice10.mc.protocol.MinecraftConstants;
|
||||
import net.minecraft.SharedConstants;
|
||||
import net.minecraft.client.options.Option;
|
||||
import net.minecraft.resource.ResourcePackCreator;
|
||||
import net.minecraft.resource.ResourcePackContainer;
|
||||
@@ -99,8 +99,6 @@ import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
//#if FABRIC<=0
|
||||
//#if MC>=11300
|
||||
//$$ @Mod(ReplayMod.MOD_ID)
|
||||
@@ -180,19 +178,8 @@ public class ReplayMod implements
|
||||
|
||||
//#if MC>=11400
|
||||
// Check Minecraft protocol version for compatibility
|
||||
int supportedProtocol = MinecraftConstants.PROTOCOL_VERSION;
|
||||
int actualProtocol = SharedConstants.getGameVersion().getProtocolVersion();
|
||||
if (supportedProtocol != actualProtocol && !Boolean.parseBoolean(System.getProperty("replaymod.skipversioncheck", "false"))) {
|
||||
if (!ProtocolVersion.isRegistered(MCVer.getProtocolVersion()) && !Boolean.parseBoolean(System.getProperty("replaymod.skipversioncheck", "false"))) {
|
||||
minimalMode = true;
|
||||
// Only allow use of older RM on newer (e.g. snapshot, pre-release) versions.
|
||||
// The other way around is almost certainly user error.
|
||||
if (actualProtocol < supportedProtocol && !Boolean.parseBoolean(System.getProperty("replaymod.allowoldsnapshot", "false"))) {
|
||||
throw new UnsupportedOperationException(String.format(
|
||||
"Unsupported Minecraft version, supporting protocol version %s (%s) but actual version is %s (%s).",
|
||||
supportedProtocol, MinecraftConstants.GAME_VERSION,
|
||||
actualProtocol, SharedConstants.getGameVersion().getName()
|
||||
));
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -453,7 +440,10 @@ public class ReplayMod implements
|
||||
public static class ReplayModExecutor extends NonBlockingThreadExecutor<Runnable> {
|
||||
private final Thread mcThread = Thread.currentThread();
|
||||
// Fail-fast in case we ever switch to async loading and forget to change this
|
||||
// (except for fabric 1.15+ because it loads the mod before the client thread is set)
|
||||
//#if FABRIC<1 || MC<11500
|
||||
{ if (!MinecraftClient.getInstance().isOnThread()) throw new RuntimeException(); }
|
||||
//#endif
|
||||
|
||||
private ReplayModExecutor(String string_1) {
|
||||
super(string_1);
|
||||
@@ -474,7 +464,7 @@ public class ReplayMod implements
|
||||
return mcThread;
|
||||
}
|
||||
|
||||
//#if FABRIC>=1
|
||||
//#if FABRIC>=1 && MC<11500
|
||||
@Override
|
||||
public void send(Runnable runnable) {
|
||||
method_18858(runnable);
|
||||
@@ -649,7 +639,7 @@ public class ReplayMod implements
|
||||
if (isMinimalMode()) {
|
||||
return protocolVersion == MCVer.getProtocolVersion();
|
||||
} else {
|
||||
return new ReplayStudio().isCompatible(fileFormatVersion, protocolVersion);
|
||||
return new ReplayStudio().isCompatible(fileFormatVersion, protocolVersion, MCVer.getProtocolVersion());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.replaymod.core.gui;
|
||||
|
||||
import com.google.common.io.Files;
|
||||
import com.google.gson.Gson;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.replaystudio.io.ReplayInputStream;
|
||||
import com.replaymod.replaystudio.io.ReplayOutputStream;
|
||||
import com.replaymod.replaystudio.replay.ReplayFile;
|
||||
@@ -56,8 +57,8 @@ public class RestoreReplayGui extends AbstractGuiScreen<RestoreReplayGui> {
|
||||
if (metaData != null && metaData.getDuration() == 0) {
|
||||
// Try to restore replay duration
|
||||
// We need to re-write the packet data in case there are any incomplete packets dangling at the end
|
||||
try (ReplayInputStream in = replayFile.getPacketData(studio, true);
|
||||
ReplayOutputStream out = replayFile.writePacketData(true)) {
|
||||
try (ReplayInputStream in = replayFile.getPacketData(MCVer.getPacketTypeRegistry(true));
|
||||
ReplayOutputStream out = replayFile.writePacketData()) {
|
||||
while (true) {
|
||||
// To prevent failing at un-parsable packets and to support recovery in minimal mode,
|
||||
// we do not use the ReplayIn/OutputStream methods but instead parse the packets ourselves.
|
||||
|
||||
@@ -32,9 +32,6 @@ public interface MinecraftAccessor {
|
||||
//$$ Queue<FutureTask<?>> getScheduledTasks();
|
||||
//#endif
|
||||
|
||||
@Accessor("crashed")
|
||||
boolean hasCrashed();
|
||||
|
||||
@Accessor("crashReport")
|
||||
CrashReport getCrashReporter();
|
||||
|
||||
|
||||
@@ -10,6 +10,10 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public class MixinGameRenderer {
|
||||
@Inject(
|
||||
@@ -19,12 +23,24 @@ public class MixinGameRenderer {
|
||||
target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z"
|
||||
)
|
||||
)
|
||||
private void postRenderWorld(float partialTicks, long nanoTime, CallbackInfo ci) {
|
||||
private void postRenderWorld(
|
||||
float partialTicks,
|
||||
long nanoTime,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//#endif
|
||||
CallbackInfo ci) {
|
||||
PostRenderWorldCallback.EVENT.invoker().postRenderWorld();
|
||||
}
|
||||
|
||||
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
|
||||
private void preRenderHand(Camera camera, float partialTicks, CallbackInfo ci) {
|
||||
private void preRenderHand(
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//#endif
|
||||
Camera camera,
|
||||
float partialTicks,
|
||||
CallbackInfo ci) {
|
||||
if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) {
|
||||
ci.cancel();
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.replaymod.core.utils;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.net.PercentEscaper;
|
||||
import com.google.common.util.concurrent.FutureCallback;
|
||||
import com.google.common.util.concurrent.Futures;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.replaystudio.us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
||||
import de.johni0702.minecraft.gui.GuiRenderer;
|
||||
import de.johni0702.minecraft.gui.RenderInfo;
|
||||
import de.johni0702.minecraft.gui.container.AbstractGuiScrollable;
|
||||
@@ -37,11 +39,9 @@ import org.apache.logging.log4j.Logger;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import com.github.steveice10.mc.protocol.MinecraftConstants;
|
||||
import net.minecraft.client.network.PlayerListEntry;
|
||||
import net.minecraft.client.util.DefaultSkinHelper;
|
||||
//#else
|
||||
//$$ import com.github.steveice10.mc.protocol.ProtocolConstants;
|
||||
//$$ import net.minecraft.client.Minecraft;
|
||||
//$$ import net.minecraft.client.entity.AbstractClientPlayer;
|
||||
//$$ import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -366,11 +366,9 @@ public class Utils {
|
||||
new GuiLabel()
|
||||
.setColor(Colors.BLACK)
|
||||
.setI18nText("replaymod.gui.minimalmode.supportedversion",
|
||||
//#if MC>=10800
|
||||
MinecraftConstants.GAME_VERSION
|
||||
//#else
|
||||
//$$ ProtocolConstants.GAME_VERSION
|
||||
//#endif
|
||||
ProtocolVersion.v1_7_6.getName()
|
||||
+ " - "
|
||||
+ Iterables.getLast(ProtocolVersion.getProtocols()).getName()
|
||||
));
|
||||
|
||||
open();
|
||||
|
||||
@@ -137,7 +137,15 @@ public class LangResourcePack extends AbstractFileResourcePack {
|
||||
|
||||
|
||||
@Override
|
||||
public Collection<Identifier> findResources(ResourceType resourcePackType, String path, int maxDepth, Predicate<String> filter) {
|
||||
public Collection<Identifier> findResources(
|
||||
ResourceType resourcePackType,
|
||||
//#if MC>=11500
|
||||
//$$ String namespace,
|
||||
//#endif
|
||||
String path,
|
||||
int maxDepth,
|
||||
Predicate<String> filter
|
||||
) {
|
||||
if (resourcePackType == ResourceType.CLIENT_RESOURCES && "lang".equals(path)) {
|
||||
Path base = baseLangPath();
|
||||
//#if MC<11400
|
||||
|
||||
@@ -2,6 +2,9 @@ package com.replaymod.core.versions;
|
||||
|
||||
import com.replaymod.core.mixin.GuiScreenAccessor;
|
||||
import com.replaymod.core.mixin.MinecraftAccessor;
|
||||
import com.replaymod.replaystudio.protocol.PacketTypeRegistry;
|
||||
import com.replaymod.replaystudio.us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
||||
import com.replaymod.replaystudio.us.myles.ViaVersion.packets.State;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
@@ -27,6 +30,8 @@ import net.minecraft.SharedConstants;
|
||||
import net.minecraft.client.gui.screen.TitleScreen;
|
||||
import net.minecraft.client.gui.widget.ButtonWidget;
|
||||
import net.minecraft.client.gui.widget.AbstractButtonWidget;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
//#else
|
||||
//$$ import com.google.common.util.concurrent.FutureCallback;
|
||||
@@ -76,7 +81,9 @@ import net.minecraft.client.render.BufferBuilder;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormatElement;
|
||||
//#if MC<11500
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//#endif
|
||||
//#else
|
||||
//$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor;
|
||||
//$$ import com.google.common.util.concurrent.Futures;
|
||||
@@ -134,10 +141,18 @@ public class MCVer {
|
||||
//#if MC>=11400
|
||||
return SharedConstants.getGameVersion().getProtocolVersion();
|
||||
//#else
|
||||
// FIXME
|
||||
//$$ throw new UnsupportedOperationException("Minimal mode not supported pre-1.14");
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static PacketTypeRegistry getPacketTypeRegistry(boolean loginPhase) {
|
||||
return PacketTypeRegistry.get(
|
||||
ProtocolVersion.getProtocol(getProtocolVersion()),
|
||||
loginPhase ? State.LOGIN : State.PLAY
|
||||
);
|
||||
}
|
||||
|
||||
public static void addDetail(CrashReportSection category, String name, Callable<String> callable) {
|
||||
//#if MC>=10904
|
||||
//#if MC>=11200
|
||||
@@ -150,6 +165,40 @@ public class MCVer {
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static double Entity_getX(Entity entity) {
|
||||
//#if MC>=11500
|
||||
//$$ return entity.getX();
|
||||
//#else
|
||||
return entity.x;
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static double Entity_getY(Entity entity) {
|
||||
//#if MC>=11500
|
||||
//$$ return entity.getY();
|
||||
//#else
|
||||
return entity.y;
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static double Entity_getZ(Entity entity) {
|
||||
//#if MC>=11500
|
||||
//$$ return entity.getZ();
|
||||
//#else
|
||||
return entity.z;
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static void Entity_setPos(Entity entity, double x, double y, double z) {
|
||||
//#if MC>=11500
|
||||
//$$ entity.setPos(x, y, z);
|
||||
//#else
|
||||
entity.x = x;
|
||||
entity.y = y;
|
||||
entity.z = z;
|
||||
//#endif
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
public static void width(AbstractButtonWidget button, int value) {
|
||||
button.setWidth(value);
|
||||
@@ -314,7 +363,11 @@ public class MCVer {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<Box> cubeList(Cuboid modelRenderer) {
|
||||
//#if MC>=11400
|
||||
//$$ return new ArrayList<>(); // FIXME 1.15
|
||||
//#else
|
||||
return modelRenderer.boxes;
|
||||
//#endif
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -335,8 +388,18 @@ public class MCVer {
|
||||
}
|
||||
|
||||
//#if MC>=11300
|
||||
public static Window newScaledResolution(MinecraftClient mc) {
|
||||
public static Window getWindow(MinecraftClient mc) {
|
||||
//#if MC>=11500
|
||||
//$$ return mc.getWindow();
|
||||
//#else
|
||||
return mc.window;
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
public static Window newScaledResolution(MinecraftClient mc) {
|
||||
return getWindow(mc);
|
||||
}
|
||||
//#else
|
||||
//$$ public static ScaledResolution newScaledResolution(Minecraft mc) {
|
||||
@@ -410,10 +473,6 @@ public class MCVer {
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
public static void BufferBuilder_setTranslation(double x, double y, double z) {
|
||||
Tessellator_getBufferBuilder().setOffset(x, y, z);
|
||||
}
|
||||
|
||||
public static void BufferBuilder_beginPosCol(int mode) {
|
||||
Tessellator_getBufferBuilder().begin(
|
||||
mode
|
||||
@@ -441,7 +500,7 @@ public class MCVer {
|
||||
);
|
||||
}
|
||||
|
||||
public static void BufferBuilder_addPosTex(double x, double y, double z, double u, double v) {
|
||||
public static void BufferBuilder_addPosTex(double x, double y, double z, float u, float v) {
|
||||
//#if MC>=10809
|
||||
Tessellator_getBufferBuilder().vertex(x, y, z).texture(u, v).next();
|
||||
//#else
|
||||
@@ -458,7 +517,7 @@ public class MCVer {
|
||||
);
|
||||
}
|
||||
|
||||
public static void BufferBuilder_addPosTexCol(double x, double y, double z, double u, double v, int r, int g, int b, int a) {
|
||||
public static void BufferBuilder_addPosTexCol(double x, double y, double z, float u, float v, int r, int g, int b, int a) {
|
||||
//#if MC>=10809
|
||||
Tessellator_getBufferBuilder().vertex(x, y, z).texture(u, v).color(r, g, b, a).next();
|
||||
//#else
|
||||
@@ -542,7 +601,7 @@ public class MCVer {
|
||||
//#endif
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
public interface ChunkRenderWorkerAccessor {
|
||||
void doRunTask(ChunkRenderTask task) throws InterruptedException;
|
||||
}
|
||||
@@ -557,11 +616,15 @@ public class MCVer {
|
||||
}
|
||||
|
||||
public static void bindTexture(Identifier texture) {
|
||||
//#if MC>=11500
|
||||
//$$ getMinecraft().getTextureManager().bindTexture(texture);
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
getMinecraft().getTextureManager().bindTexture(texture);
|
||||
//#else
|
||||
//$$ getMinecraft().renderEngine.bindTexture(texture);
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static float cos(float val) {
|
||||
@@ -751,6 +814,9 @@ public class MCVer {
|
||||
//#endif
|
||||
|
||||
public static boolean isKeyDown(int keyCode) {
|
||||
//#if MC>=11500
|
||||
//$$ return InputUtil.isKeyPressed(getMinecraft().getWindow().getHandle(), keyCode);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
return InputUtil.isKeyPressed(getMinecraft().window.getHandle(), keyCode);
|
||||
//#else
|
||||
@@ -760,6 +826,7 @@ public class MCVer {
|
||||
//$$ return org.lwjgl.input.Keyboard.isKeyDown(keyCode);
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
|
||||
//#if MC<11300
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.replaymod.editor.gui;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.replaystudio.PacketData;
|
||||
import com.replaymod.replaystudio.Studio;
|
||||
import com.replaymod.replaystudio.data.Marker;
|
||||
@@ -7,6 +8,7 @@ import com.replaymod.replaystudio.filter.SquashFilter;
|
||||
import com.replaymod.replaystudio.filter.StreamFilter;
|
||||
import com.replaymod.replaystudio.io.ReplayInputStream;
|
||||
import com.replaymod.replaystudio.io.ReplayOutputStream;
|
||||
import com.replaymod.replaystudio.protocol.PacketTypeRegistry;
|
||||
import com.replaymod.replaystudio.replay.ReplayMetaData;
|
||||
import com.replaymod.replaystudio.replay.ZipReplayFile;
|
||||
import com.replaymod.replaystudio.stream.IteratorStream;
|
||||
@@ -58,6 +60,7 @@ public class MarkerProcessor {
|
||||
String replayName = FilenameUtils.getBaseName(path.getFileName().toString());
|
||||
int splitCounter = 0;
|
||||
|
||||
PacketTypeRegistry registry = MCVer.getPacketTypeRegistry(true);
|
||||
Studio studio = new ReplayStudio();
|
||||
SquashFilter squashFilter = new SquashFilter();
|
||||
squashFilter.init(studio, null);
|
||||
@@ -73,7 +76,7 @@ public class MarkerProcessor {
|
||||
boolean anySplit = markers.stream().anyMatch(m -> MARKER_NAME_SPLIT.equals(m.getName()));
|
||||
|
||||
int inputDuration = inputReplayFile.getMetaData().getDuration();
|
||||
ReplayInputStream replayInputStream = inputReplayFile.getPacketData(studio, true);
|
||||
ReplayInputStream replayInputStream = inputReplayFile.getPacketData(registry);
|
||||
int timeOffset = 0;
|
||||
SquashFilter cutFilter = null;
|
||||
int startCutOffset = 0;
|
||||
@@ -88,7 +91,7 @@ public class MarkerProcessor {
|
||||
ReplayMetaData metaData = inputReplayFile.getMetaData();
|
||||
metaData.setDate(metaData.getDate() + timeOffset);
|
||||
|
||||
try (ReplayOutputStream replayOutputStream = outputReplayFile.writePacketData(true)) {
|
||||
try (ReplayOutputStream replayOutputStream = outputReplayFile.writePacketData()) {
|
||||
if (cutFilter != null) {
|
||||
cutFilter = squashFilter;
|
||||
} else if (splitCounter > 0) {
|
||||
@@ -153,7 +156,7 @@ public class MarkerProcessor {
|
||||
}
|
||||
|
||||
metaData.setDuration((int) duration);
|
||||
outputReplayFile.writeMetaData(metaData);
|
||||
outputReplayFile.writeMetaData(registry, metaData);
|
||||
|
||||
outputReplayFile.writeMarkers(outputMarkers);
|
||||
|
||||
|
||||
@@ -13,9 +13,10 @@ import net.minecraft.util.crash.CrashReport;
|
||||
|
||||
//#if MC>=11300
|
||||
import com.replaymod.render.mixin.MainWindowAccessor;
|
||||
import static com.replaymod.core.versions.MCVer.getWindow;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
//#endif
|
||||
|
||||
@@ -33,8 +34,8 @@ public class ScreenshotRenderer implements RenderInfo {
|
||||
public boolean renderScreenshot() throws Throwable {
|
||||
try {
|
||||
//#if MC>=11300
|
||||
int displayWidthBefore = mc.window.getFramebufferWidth();
|
||||
int displayHeightBefore = mc.window.getFramebufferHeight();
|
||||
int displayWidthBefore = getWindow(mc).getFramebufferWidth();
|
||||
int displayHeightBefore = getWindow(mc).getFramebufferHeight();
|
||||
//#else
|
||||
//$$ int displayWidthBefore = mc.displayWidth;
|
||||
//$$ int displayHeightBefore = mc.displayHeight;
|
||||
@@ -43,7 +44,7 @@ public class ScreenshotRenderer implements RenderInfo {
|
||||
boolean hideGUIBefore = mc.options.hudHidden;
|
||||
mc.options.hudHidden = true;
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.worldRenderer);
|
||||
//#endif
|
||||
|
||||
@@ -55,14 +56,14 @@ public class ScreenshotRenderer implements RenderInfo {
|
||||
new ScreenshotWriter(settings.getOutputFile())).run();
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
clrg.uninstall();
|
||||
//#endif
|
||||
|
||||
mc.options.hudHidden = hideGUIBefore;
|
||||
//#if MC>=11300
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window;
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) getWindow(mc);
|
||||
acc.setFramebufferWidth(displayWidthBefore);
|
||||
acc.setFramebufferHeight(displayHeightBefore);
|
||||
mc.getFramebuffer().resize(displayWidthBefore, displayHeightBefore
|
||||
|
||||
@@ -73,10 +73,17 @@ public abstract class UriScheme {
|
||||
switch (SystemUtil.getOperatingSystem()) {
|
||||
case LINUX:
|
||||
return new LinuxUriScheme();
|
||||
//#if MC>=11500
|
||||
//$$ case WINDOWS:
|
||||
//$$ return new WindowsUriScheme();
|
||||
//$$ case OSX:
|
||||
//$$ return new OSXUriScheme();
|
||||
//#else
|
||||
case field_1133:
|
||||
return new WindowsUriScheme();
|
||||
case field_1137:
|
||||
return new OSXUriScheme();
|
||||
//#endif
|
||||
case SOLARIS:
|
||||
case UNKNOWN:
|
||||
default:
|
||||
|
||||
@@ -201,7 +201,7 @@ public class GuiUploadReplay extends GuiScreen {
|
||||
try (ReplayFile replay = new ZipReplayFile(new ReplayStudio(), file)) {
|
||||
ReplayMetaData newMetaData = new ReplayMetaData(metaData);
|
||||
newMetaData.setServerName(null);
|
||||
replay.writeMetaData(newMetaData);
|
||||
replay.writeMetaData(null, newMetaData);
|
||||
replay.saveTo(tmp);
|
||||
}
|
||||
|
||||
|
||||
@@ -152,9 +152,9 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
boolean force = false;
|
||||
if(lastX == null || lastY == null || lastZ == null) {
|
||||
force = true;
|
||||
lastX = player.x;
|
||||
lastY = player.y;
|
||||
lastZ = player.z;
|
||||
lastX = Entity_getX(player);
|
||||
lastY = Entity_getY(player);
|
||||
lastZ = Entity_getZ(player);
|
||||
}
|
||||
|
||||
ticksSinceLastCorrection++;
|
||||
@@ -163,13 +163,13 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
force = true;
|
||||
}
|
||||
|
||||
double dx = player.x - lastX;
|
||||
double dy = player.y - lastY;
|
||||
double dz = player.z - lastZ;
|
||||
double dx = Entity_getX(player) - lastX;
|
||||
double dy = Entity_getY(player) - lastY;
|
||||
double dz = Entity_getZ(player) - lastZ;
|
||||
|
||||
lastX = player.x;
|
||||
lastY = player.y;
|
||||
lastZ = player.z;
|
||||
lastX = Entity_getX(player);
|
||||
lastY = Entity_getY(player);
|
||||
lastZ = Entity_getZ(player);
|
||||
|
||||
Packet packet;
|
||||
if (force || Math.abs(dx) > 8.0 || Math.abs(dy) > 8.0 || Math.abs(dz) > 8.0) {
|
||||
|
||||
@@ -12,8 +12,9 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=10800
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPlayerListEntryPacket;
|
||||
import com.github.steveice10.packetlib.io.buffer.ByteBufferNetInput;
|
||||
import com.replaymod.replaystudio.protocol.Packet;
|
||||
import com.replaymod.replaystudio.protocol.PacketType;
|
||||
import com.replaymod.replaystudio.protocol.packets.PacketPlayerListEntry;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.util.PacketByteBuf;
|
||||
@@ -21,7 +22,6 @@ import net.minecraft.client.network.packet.PlayerListS2CPacket;
|
||||
import net.minecraft.client.network.PlayerListEntry;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
//#else
|
||||
@@ -62,10 +62,9 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
RecordingEventHandler handler = getRecordingEventHandler();
|
||||
if (handler != null && packet.getAction() == PlayerListS2CPacket.Action.ADD_PLAYER) {
|
||||
// We cannot reference SPacketPlayerListItem.AddPlayerData directly for complicated (and yet to be
|
||||
// resolved) reasons (see https://github.com/MinecraftForge/ForgeGradle/issues/472), so we "simply" convert
|
||||
// the back to the MCProtocolLib equivalent and deal with that one.
|
||||
// resolved) reasons (see https://github.com/MinecraftForge/ForgeGradle/issues/472), so we use ReplayStudio
|
||||
// to parse it instead.
|
||||
ByteBuf byteBuf = Unpooled.buffer();
|
||||
ServerPlayerListEntryPacket mcpl = new ServerPlayerListEntryPacket(null, null);
|
||||
try {
|
||||
packet.write(new PacketByteBuf(byteBuf));
|
||||
|
||||
@@ -73,21 +72,22 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
byte[] array = new byte[byteBuf.readableBytes()];
|
||||
byteBuf.readBytes(array);
|
||||
|
||||
mcpl.read(new ByteBufferNetInput(ByteBuffer.wrap(array)));
|
||||
for (PacketPlayerListEntry data : PacketPlayerListEntry.read(new Packet(
|
||||
MCVer.getPacketTypeRegistry(false), 0, PacketType.PlayerListEntry,
|
||||
com.github.steveice10.netty.buffer.Unpooled.wrappedBuffer(array)
|
||||
))) {
|
||||
if (data.getUuid() == null) continue;
|
||||
// Only add spawn packet for our own player and only if he isn't known yet
|
||||
if (data.getUuid().equals(mcStatic.player.getGameProfile().getId())
|
||||
&& !this.playerListEntries.containsKey(data.getUuid())) {
|
||||
handler.onPlayerJoin();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e); // we just parsed this?
|
||||
} finally {
|
||||
byteBuf.release();
|
||||
}
|
||||
|
||||
for (com.github.steveice10.mc.protocol.data.game.PlayerListEntry data : mcpl.getEntries()) {
|
||||
if (data.getProfile() == null || data.getProfile().getId() == null) continue;
|
||||
// Only add spawn packet for our own player and only if he isn't known yet
|
||||
if (data.getProfile().getId().equals(mcStatic.player.getGameProfile().getId())
|
||||
&& !this.playerListEntries.containsKey(data.getProfile().getId())) {
|
||||
handler.onPlayerJoin();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//#else
|
||||
|
||||
@@ -7,8 +7,10 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(MobSpawnS2CPacket.class)
|
||||
public interface SPacketSpawnMobAccessor {
|
||||
//#if MC<11500
|
||||
@Accessor("dataTracker")
|
||||
DataTracker getDataManager();
|
||||
@Accessor("dataTracker")
|
||||
void setDataManager(DataTracker value);
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(PlayerSpawnS2CPacket.class)
|
||||
public interface SPacketSpawnPlayerAccessor {
|
||||
//#if MC<11500
|
||||
@Accessor("dataTracker")
|
||||
DataTracker getDataManager();
|
||||
@Accessor("dataTracker")
|
||||
void setDataManager(DataTracker value);
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
this.metaData = metaData;
|
||||
this.resourcePackRecorder = new ResourcePackRecorder(replayFile);
|
||||
// Note: doesn't actually always include the login phase, see `connectionState` field instead.
|
||||
this.packetOutputStream = new DataOutputStream(replayFile.writePacketData(true));
|
||||
this.packetOutputStream = new DataOutputStream(replayFile.writePacketData());
|
||||
this.startTime = metaData.getDate();
|
||||
|
||||
saveMetaData();
|
||||
@@ -139,7 +139,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
out.write(json.getBytes());
|
||||
}
|
||||
} else {
|
||||
replayFile.writeMetaData(metaData);
|
||||
replayFile.writeMetaData(MCVer.getPacketTypeRegistry(true), metaData);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@@ -325,6 +325,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private byte[] getPacketData(Packet packet) throws Exception {
|
||||
//#if MC<11500
|
||||
if (packet instanceof MobSpawnS2CPacket) {
|
||||
MobSpawnS2CPacket p = (MobSpawnS2CPacket) packet;
|
||||
SPacketSpawnMobAccessor pa = (SPacketSpawnMobAccessor) p;
|
||||
@@ -368,6 +369,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
Integer packetId = connectionState.getPacketId(NetworkSide.CLIENTBOUND, packet);
|
||||
@@ -401,9 +403,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
marker.setName(name);
|
||||
marker.setTime(timestamp);
|
||||
if (view != null) {
|
||||
marker.setX(view.x);
|
||||
marker.setY(view.y);
|
||||
marker.setZ(view.z);
|
||||
marker.setX(Entity_getX(view));
|
||||
marker.setY(Entity_getY(view));
|
||||
marker.setZ(Entity_getZ(view));
|
||||
marker.setYaw(view.yaw);
|
||||
marker.setPitch(view.pitch);
|
||||
}
|
||||
|
||||
@@ -174,7 +174,12 @@ public class RenderSettings {
|
||||
|
||||
private static String findFFmpeg() {
|
||||
switch (SystemUtil.getOperatingSystem()) {
|
||||
// TODO not sure why remap fails to remap this (even when manually added to mappings)
|
||||
//#if MC>=11500
|
||||
//$$ case WINDOWS:
|
||||
//#else
|
||||
case field_1133:
|
||||
//#endif
|
||||
// Allow windows users to unpack the ffmpeg archive into a sub-folder of their .minecraft folder
|
||||
File inDotMinecraft = new File(MCVer.getMinecraft().runDirectory, "ffmpeg/bin/ffmpeg.exe");
|
||||
if (inDotMinecraft.exists()) {
|
||||
@@ -182,7 +187,12 @@ public class RenderSettings {
|
||||
return inDotMinecraft.getAbsolutePath();
|
||||
}
|
||||
break;
|
||||
// TODO not sure why remap fails to remap this (even when manually added to mappings)
|
||||
//#if MC>=11500
|
||||
//$$ case OSX:
|
||||
//#else
|
||||
case field_1137:
|
||||
//#endif
|
||||
// The PATH doesn't seem to be set as expected on OSX, therefore we check some common locations ourselves
|
||||
for (String path : new String[]{"/usr/local/bin/ffmpeg", "/usr/bin/ffmpeg"}) {
|
||||
File file = new File(path);
|
||||
|
||||
@@ -11,6 +11,10 @@ import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormatElement;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.datafixers.util.Pair;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
//#if MC>=11200
|
||||
import net.minecraft.client.render.BufferBuilder;
|
||||
@@ -135,7 +139,12 @@ public class BlendMeshBuilder
|
||||
//#else
|
||||
//$$ public static DMesh addBufferToMesh(WorldRenderer bufferBuilder, DMesh mesh, Vector3f vertOffset) {
|
||||
//#endif
|
||||
//#if MC>=11500
|
||||
//$$ Pair<DrawArrayParameters, ByteBuffer> data = bufferBuilder.popData();
|
||||
//$$ return addBufferToMesh(data.getSecond(), data.getFirst().getMode(), data.getFirst().getVertexFormat(), mesh, vertOffset);
|
||||
//#else
|
||||
return addBufferToMesh(bufferBuilder.getByteBuffer(), bufferBuilder.getDrawMode(), bufferBuilder.getVertexFormat(), mesh, vertOffset);
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static DMesh addBufferToMesh(ByteBuffer buffer, int mode, VertexFormat vertexFormat, DMesh mesh, ReadableVector3f vertOffset) {
|
||||
@@ -158,12 +167,20 @@ public class BlendMeshBuilder
|
||||
// Determine offset of vertex components
|
||||
int posOffset = -1, colorOffset = -1, uvOffset = -1;
|
||||
int index = 0;
|
||||
//#if MC>=11500
|
||||
int elementOffset = 0;
|
||||
//#endif
|
||||
for (VertexFormatElement element : getElements(vertexFormat)) {
|
||||
//#if MC>=11500
|
||||
//$$ int offset = elementOffset;
|
||||
//$$ elementOffset += element.getSize();
|
||||
//#else
|
||||
//#if MC>=10809
|
||||
int offset = vertexFormat.getElementOffset(index);
|
||||
//#else
|
||||
//$$ int offset = element.getOffset();
|
||||
//#endif
|
||||
//#endif
|
||||
switch (element.getType()) {
|
||||
case POSITION:
|
||||
//#if MC>=11400
|
||||
|
||||
@@ -3,7 +3,10 @@ package com.replaymod.render.blend;
|
||||
import com.replaymod.render.blend.data.DScene;
|
||||
import com.replaymod.render.blend.data.Serializer;
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC<11500
|
||||
import com.replaymod.render.blend.exporters.ChunkExporter;
|
||||
//#endif
|
||||
import com.replaymod.render.blend.exporters.EntityExporter;
|
||||
import com.replaymod.render.blend.exporters.ItemExporter;
|
||||
import com.replaymod.render.blend.exporters.ParticlesExporter;
|
||||
@@ -53,7 +56,10 @@ public class BlendState implements Exporter {
|
||||
//#if MC>=10800
|
||||
RenderState renderState = new RenderState(this);
|
||||
register(renderState);
|
||||
// FIXME 1.15
|
||||
//#if MC<11500
|
||||
register(new ChunkExporter());
|
||||
//#endif
|
||||
register(new EntityExporter(renderState));
|
||||
register(new TileEntityExporter(renderState));
|
||||
register(new ParticlesExporter(renderState));
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.exporters;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
|
||||
@@ -124,6 +124,9 @@ public class ItemExporter implements Exporter {
|
||||
//$$ ? stack.getItem().getColorFromItemStack(stack, quad.getTintIndex()) | 0xff000000
|
||||
//#endif
|
||||
: 0xffffffff;
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
buffer.putVertexData(quad.getVertexData());
|
||||
buffer.setQuadColor(color);
|
||||
@@ -132,6 +135,7 @@ public class ItemExporter implements Exporter {
|
||||
//#else
|
||||
//$$ LightUtil.renderQuadColor(buffer, quad, color);
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -67,7 +67,11 @@ public class ModelRendererExporter implements Exporter {
|
||||
}
|
||||
if (object == null) {
|
||||
object = new ModelBasedDObject(model, scale);
|
||||
//#if MC>=11500
|
||||
//$$ object.id.name = "???"; // FIXME 1.15 can we somehow nicely derive this?
|
||||
//#else
|
||||
object.id.name = model.name;
|
||||
//#endif
|
||||
object.setParent(parent);
|
||||
}
|
||||
object.lastFrame = frame;
|
||||
@@ -78,7 +82,11 @@ public class ModelRendererExporter implements Exporter {
|
||||
DMesh mesh = new DMesh();
|
||||
BlendMeshBuilder builder = new BlendMeshBuilder(mesh);
|
||||
for (Box box : cubeList(model)) {
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15
|
||||
//#else
|
||||
box.render(builder, scale);
|
||||
//#endif
|
||||
}
|
||||
builder.maybeFinishDrawing();
|
||||
return mesh;
|
||||
|
||||
@@ -113,9 +113,16 @@ public class ParticlesExporter implements Exporter {
|
||||
// Instead of actually translating, we just add the translation on the current model-view-matrix.
|
||||
Matrix4f modelView = getGlModelViewMatrix();
|
||||
ParticleAccessor acc = (ParticleAccessor) particle;
|
||||
double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * renderPartialTicks - Particle.cameraX;
|
||||
double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * renderPartialTicks - Particle.cameraY;
|
||||
double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * renderPartialTicks - Particle.cameraZ;
|
||||
double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * renderPartialTicks;
|
||||
double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * renderPartialTicks;
|
||||
double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * renderPartialTicks;
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15 is this still required?
|
||||
//#else
|
||||
dx -= Particle.cameraX;
|
||||
dy -= Particle.cameraY;
|
||||
dz -= Particle.cameraZ;
|
||||
//#endif
|
||||
Vector3f offset = new Vector3f((float) dx, (float) dy, (float) dz);
|
||||
Matrix4f.translate(offset, modelView, modelView);
|
||||
renderState.pushModelView(modelView);
|
||||
@@ -173,7 +180,11 @@ public class ParticlesExporter implements Exporter {
|
||||
//#else
|
||||
//$$ MCVer.getMinecraft().getRenderViewEntity(),
|
||||
//#endif
|
||||
0, 1, 1, 0, 0, 0);
|
||||
0
|
||||
//#if MC<11500
|
||||
, 1, 1, 0, 0, 0
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
//$$ particle.func_180434_a(builder, Minecraft.getMinecraft().getRenderViewEntity(), 0, 1, 1, 0, 0, 0);
|
||||
//#endif
|
||||
|
||||
@@ -15,11 +15,15 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
//#endif
|
||||
//#endif
|
||||
public interface ContainerLocalRenderInformationAccessor {
|
||||
//#if MC>=11500
|
||||
//$$ @Accessor("chunk")
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Accessor("renderer")
|
||||
//#else
|
||||
//$$ @Accessor
|
||||
//#endif
|
||||
//#endif
|
||||
ChunkRenderer getRenderChunk();
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -9,6 +9,11 @@ import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//#else
|
||||
@@ -19,6 +24,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class MixinRenderManager {
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11500
|
||||
//$$ method = "render",
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
@@ -28,9 +36,17 @@ public abstract class MixinRenderManager {
|
||||
//$$ method = "doRenderEntity",
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V"))
|
||||
public void preRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks, boolean box,
|
||||
public void preRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
//#else
|
||||
boolean box,
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
CallbackInfo ci) {
|
||||
//#else
|
||||
@@ -43,6 +59,9 @@ public abstract class MixinRenderManager {
|
||||
}
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11500
|
||||
//$$ method = "render",
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
@@ -52,10 +71,18 @@ public abstract class MixinRenderManager {
|
||||
//$$ method = "doRenderEntity",
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V",
|
||||
shift = At.Shift.AFTER))
|
||||
public void postRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks, boolean box,
|
||||
public void postRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
//#else
|
||||
boolean box,
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
CallbackInfo ci) {
|
||||
//#else
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.nio.ByteBuffer;
|
||||
|
||||
//#if MC>=11300
|
||||
import com.replaymod.render.mixin.MainWindowAccessor;
|
||||
import static com.replaymod.core.versions.MCVer.getWindow;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
@@ -125,7 +126,7 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
);
|
||||
}
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) mc.window;
|
||||
MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) getWindow(mc);
|
||||
mainWindow.setFramebufferWidth(width);
|
||||
mainWindow.setFramebufferHeight(height);
|
||||
//#else
|
||||
|
||||
@@ -244,7 +244,7 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable {
|
||||
previewTextureDirty = false;
|
||||
}
|
||||
|
||||
guiRenderer.bindTexture(previewTexture);
|
||||
guiRenderer.bindTexture(previewTexture.getGlId());
|
||||
renderPreviewTexture(guiRenderer, size, videoWidth, videoHeight);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15 chunk rendering has changed significantly, ignoring this feature for now
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.hooks;
|
||||
|
||||
import com.replaymod.render.mixin.ChunkRenderDispatcherAccessor;
|
||||
|
||||
@@ -8,6 +8,10 @@ import com.replaymod.render.capturer.WorldRenderer;
|
||||
import lombok.Getter;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
import com.replaymod.core.events.PostRenderCallback;
|
||||
import com.replaymod.core.events.PreRenderCallback;
|
||||
@@ -59,7 +63,13 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
//#endif
|
||||
|
||||
if (mc.world != null && mc.player != null) {
|
||||
mc.gameRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
mc.gameRenderer.renderWorld(
|
||||
partialTicks,
|
||||
finishTimeNano
|
||||
//#if MC>=11500
|
||||
//$$ , new MatrixStack()
|
||||
//#endif
|
||||
);
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import net.minecraft.client.render.chunk.ChunkBatcher;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.capturer.CubicOpenGlFrameCapturer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import com.replaymod.replay.camera.CameraEntity;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -134,51 +132,4 @@ public abstract class MixinCamera {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
@Inject(method = "update", at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
//#endif
|
||||
private void replayModRender_setupCubicFrameRotation(
|
||||
//#if MC>=11400
|
||||
BlockView blockView,
|
||||
Entity entity,
|
||||
boolean thirdPerson,
|
||||
boolean inverseView,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (getHandler() != null && getHandler().data instanceof CubicOpenGlFrameCapturer.Data) {
|
||||
switch ((CubicOpenGlFrameCapturer.Data) getHandler().data) {
|
||||
case FRONT:
|
||||
GL11.glRotatef(0, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case RIGHT:
|
||||
GL11.glRotatef(90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BACK:
|
||||
GL11.glRotatef(180, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case LEFT:
|
||||
GL11.glRotatef(-90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BOTTOM:
|
||||
GL11.glRotatef(90, 1.0F, 0.0F, 0.0F);
|
||||
break;
|
||||
case TOP:
|
||||
GL11.glRotatef(-90, 1.0F, 0.0F, 0.0F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (getHandler() != null && getHandler().omnidirectional) {
|
||||
// Minecraft goes back a little so we have to revert that
|
||||
//#if MC>=11300
|
||||
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//#else
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.replaymod.render.mixin;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.capturer.StereoscopicOpenGlFrameCapturer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
@@ -14,6 +13,11 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
import net.minecraft.client.render.Camera;
|
||||
import net.minecraft.util.hit.HitResult;
|
||||
@@ -93,6 +97,9 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
|
||||
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_renderSpectatorHand(
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//#endif
|
||||
//#if MC>=11400
|
||||
Camera camera,
|
||||
//#endif
|
||||
@@ -128,102 +135,27 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
//$$ public abstract void renderHand(float partialTicks, int renderPass);
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawHighlightedBlockOutline(Lnet/minecraft/client/render/Camera;Lnet/minecraft/util/hit/HitResult;I)V"))
|
||||
private void replayModRender_drawSelectionBox(WorldRenderer instance, Camera camera, HitResult hitResult, int something) {
|
||||
if (replayModRender_handler == null) {
|
||||
instance.drawHighlightedBlockOutline(camera, hitResult, something);
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
//$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
|
||||
//$$ private void replayModRender_drawSelectionBox(WorldRenderer instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
|
||||
//#else
|
||||
//#if MC>=10904
|
||||
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
|
||||
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
|
||||
//#endif
|
||||
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, MovingObjectPosition rtr, int alwaysZero, float partialTicks) {
|
||||
//#endif
|
||||
//#endif
|
||||
//$$ if (replayModRender_handler == null) {
|
||||
//$$ instance.drawSelectionBox(player, rtr, alwaysZero, partialTicks);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private int orgRenderDistanceChunks;
|
||||
|
||||
//#if MC>=11300
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderCenter", at = @At(value = "JUMP", ordinal = 0))
|
||||
//#else
|
||||
//$$ @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "JUMP", ordinal = 0))
|
||||
//#endif
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ @Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
|
||||
//#else
|
||||
//$$ @Inject(method = "renderWorld", at = @At(value = "INVOKE", ordinal = 0, shift = At.Shift.AFTER,
|
||||
//$$ target = "Lnet/minecraft/client/renderer/culling/ClippingHelperImpl;getInstance()Lnet/minecraft/client/renderer/culling/ClippingHelper;"))
|
||||
//#endif
|
||||
//#endif
|
||||
private void replayModRender_beforeRenderSky(CallbackInfo ci) {
|
||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||
GameOptions settings = MCVer.getMinecraft().options;
|
||||
orgRenderDistanceChunks = settings.viewDistance;
|
||||
settings.viewDistance = 5; // Set render distance to 5 so we're always rendering sky when chroma keying
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=11300
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(F)V"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V"))
|
||||
//#endif
|
||||
private void replayModRender_renderSky(WorldRenderer instance, float partialTicks) {
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(FI)V"))
|
||||
//$$ private void replayModRender_renderSky(RenderGlobal instance, float partialTicks, int renderPass) {
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(F)V"))
|
||||
//$$ private void replayModRender_renderSky(RenderGlobal instance, float partialTicks) {
|
||||
//#endif
|
||||
//#endif
|
||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||
MCVer.getMinecraft().options.viewDistance = orgRenderDistanceChunks;
|
||||
ReadableColor color = replayModRender_handler.getSettings().getChromaKeyingColor();
|
||||
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
|
||||
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT
|
||||
//#if MC>=11400
|
||||
, false
|
||||
//#endif
|
||||
);
|
||||
} else {
|
||||
//#if MC>=11300
|
||||
instance.renderSky(partialTicks);
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ instance.renderSky(partialTicks, renderPass);
|
||||
//#else
|
||||
//$$ instance.renderSky(partialTicks);
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Stereoscopic Renderer
|
||||
*/
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "method_22973", at = @At("RETURN"), cancellable = true)
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(CallbackInfoReturnable<Matrix4f> ci) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ Matrix4f offset;
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ offset = Matrix4f.translate(0.07f, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ offset = Matrix4f.translate(-0.07f, 0, 0);
|
||||
//$$ } else {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ offset.multiply(ci.getReturnValue());
|
||||
//$$ ci.setReturnValue(offset);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
||||
//#else
|
||||
@@ -244,7 +176,20 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(float partialTicks, long frameStartNano, MatrixStack matrixStack, CallbackInfo ci) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ matrixStack.translate(0.1, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ matrixStack.translate(-0.1, 0, 0);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
||||
//#else
|
||||
@@ -265,6 +210,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
/*
|
||||
* Cubic Renderer
|
||||
@@ -276,6 +222,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
//#if MC<11500
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//#else
|
||||
@@ -289,6 +236,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
private Matrix4f replayModRender_perspective$2(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
//#endif
|
||||
|
||||
private Matrix4f replayModRender_perspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) {
|
||||
|
||||
@@ -16,16 +16,11 @@ import net.minecraft.client.render.Camera;
|
||||
@Mixin(BackgroundRenderer.class)
|
||||
public abstract class MixinFogRenderer {
|
||||
@Inject(method = "applyFog", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_onSetupFog(
|
||||
//#if MC>=11400
|
||||
Camera camera,
|
||||
int something,
|
||||
//#else
|
||||
//$$ int fogDistanceFlag,
|
||||
//$$ float partialTicks,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
private
|
||||
//#if MC>=11500
|
||||
//$$ static
|
||||
//#endif
|
||||
void replayModRender_onSetupFog(CallbackInfo ci) {
|
||||
EntityRendererHandler handler =
|
||||
((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
if (handler == null) return;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
//#if MC>=10904
|
||||
// FIXME 1.15 seems like the way orientation is passed to particles has changed significantly
|
||||
//#if MC>=10904 && MC<11500
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.exporters.ParticlesExporter;
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.replaymod.render.mixin;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.render.entity.EntityRenderer;
|
||||
import net.minecraft.entity.Entity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -11,12 +10,16 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(EntityRenderer.class)
|
||||
public abstract class MixinRender {
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//$$ @Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true)
|
||||
//#endif
|
||||
private void replayModRender_areAllNamesHidden(Entity entityIn, String str, double x, double y, double z, int maxDistance, CallbackInfo ci) {
|
||||
//#endif
|
||||
private void replayModRender_areAllNamesHidden(CallbackInfo ci) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
if (handler != null && !handler.getSettings().isRenderNameTags()) {
|
||||
ci.cancel();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
|
||||
@@ -9,6 +9,13 @@ import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import net.minecraft.client.util.math.Vector3f;
|
||||
//$$ import net.minecraft.util.math.Quaternion;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//#else
|
||||
@@ -17,12 +24,16 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(EntityRenderDispatcher.class)
|
||||
public abstract class MixinRenderManager {
|
||||
@Shadow
|
||||
private float cameraPitch;
|
||||
|
||||
@Shadow
|
||||
private float cameraYaw;
|
||||
//#if MC>=11500
|
||||
//$$ @Shadow private Quaternion rotation;
|
||||
//#else
|
||||
@Shadow private float cameraPitch;
|
||||
@Shadow private float cameraYaw;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "render", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD"))
|
||||
//#else
|
||||
@@ -32,8 +43,17 @@ public abstract class MixinRenderManager {
|
||||
//$$ @Inject(method = "doRenderEntity", at = @At("HEAD"))
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfo ci) {
|
||||
private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
//#else
|
||||
boolean iDoNotCare,
|
||||
//#endif
|
||||
CallbackInfo ci) {
|
||||
//#else
|
||||
//$$ private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfoReturnable<Boolean> ci) {
|
||||
//#endif
|
||||
@@ -41,8 +61,14 @@ public abstract class MixinRenderManager {
|
||||
if (handler != null && handler.omnidirectional) {
|
||||
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
|
||||
double yaw = -Math.atan2(dx, dz);
|
||||
//#if MC>=11500
|
||||
//$$ this.rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F);
|
||||
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_Y.getDegreesQuaternion((float) -yaw));
|
||||
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_X.getDegreesQuaternion((float) pitch));
|
||||
//#else
|
||||
this.cameraPitch = (float) Math.toDegrees(pitch);
|
||||
this.cameraYaw = (float) Math.toDegrees(yaw);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
/**
|
||||
* Instead of rendering the normal sky, clears the screen with a uniform color for use with chroma keying.
|
||||
*/
|
||||
@Mixin(WorldRenderer.class)
|
||||
public abstract class Mixin_ChromaKeyColorSky {
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
|
||||
@Inject(method = "renderSky", at = @At("HEAD"), cancellable = true)
|
||||
private void chromaKeyingSky(CallbackInfo ci) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) client.gameRenderer).replayModRender_getHandler();
|
||||
if (handler != null) {
|
||||
ReadableColor color = handler.getSettings().getChromaKeyingColor();
|
||||
if (color != null) {
|
||||
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
|
||||
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT
|
||||
//#if MC>=11400
|
||||
, false
|
||||
//#endif
|
||||
);
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.Constant;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyConstant;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.WorldRenderer;
|
||||
//#else
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
//#endif
|
||||
|
||||
/**
|
||||
* Forces the sky to always render when chroma keying is active. Ordinarily it only renders when the render distance is
|
||||
* at 4 or greater.
|
||||
*/
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(WorldRenderer.class)
|
||||
//#else
|
||||
@Mixin(GameRenderer.class)
|
||||
//#endif
|
||||
public abstract class Mixin_ChromaKeyForceSky {
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @ModifyConstant(method = "render", constant = @Constant(intValue = 4))
|
||||
//#else
|
||||
@ModifyConstant(method = "renderCenter", constant = @Constant(intValue = 4))
|
||||
//#endif
|
||||
private int forceSkyWhenChromaKeying(int value) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) client.gameRenderer).replayModRender_getHandler();
|
||||
if (handler != null) {
|
||||
ReadableColor color = handler.getSettings().getChromaKeyingColor();
|
||||
if (color != null) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.capturer.CubicOpenGlFrameCapturer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import net.minecraft.client.util.math.Vector3f;
|
||||
//#else
|
||||
import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getMinecraft;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(value = net.minecraft.client.render.GameRenderer.class)
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Mixin(value = net.minecraft.client.render.Camera.class)
|
||||
//#else
|
||||
//$$ @Mixin(value = net.minecraft.client.renderer.EntityRenderer.class)
|
||||
//#endif
|
||||
//#endif
|
||||
public abstract class Mixin_CubicRotation {
|
||||
private EntityRendererHandler getHandler() {
|
||||
return ((EntityRendererHandler.IEntityRenderer) getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
}
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "update", at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
//#endif
|
||||
//#endif
|
||||
private void replayModRender_setupCubicFrameRotation(
|
||||
//#if MC>=11500
|
||||
//$$ float partialTicks,
|
||||
//$$ long frameStartNano,
|
||||
//$$ MatrixStack matrixStack,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (getHandler() != null && getHandler().data instanceof CubicOpenGlFrameCapturer.Data) {
|
||||
CubicOpenGlFrameCapturer.Data data = (CubicOpenGlFrameCapturer.Data) getHandler().data;
|
||||
float angle = 0;
|
||||
float x = 0;
|
||||
float y = 0;
|
||||
switch (data) {
|
||||
case FRONT:
|
||||
angle = 0;
|
||||
x = 1;
|
||||
break;
|
||||
case RIGHT:
|
||||
angle = 90;
|
||||
x = 1;
|
||||
break;
|
||||
case BACK:
|
||||
angle = 180;
|
||||
x = 1;
|
||||
break;
|
||||
case LEFT:
|
||||
angle = -90;
|
||||
x = 1;
|
||||
break;
|
||||
case TOP:
|
||||
angle = -90;
|
||||
y = 1;
|
||||
break;
|
||||
case BOTTOM:
|
||||
angle = 90;
|
||||
y = 1;
|
||||
break;
|
||||
}
|
||||
//#if MC>=11400
|
||||
//$$ matrixStack.multiply(new Vector3f(x, y, 0).getDegreesQuaternion(angle));
|
||||
//#else
|
||||
GL11.glRotatef(angle, x, y, 0);
|
||||
//#endif
|
||||
}
|
||||
//#if MC<11500
|
||||
if (getHandler() != null && getHandler().omnidirectional) {
|
||||
// Minecraft goes back a little so we have to revert that
|
||||
//#if MC>=11300
|
||||
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//#else
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public abstract class Mixin_SkipBlockOutlinesDuringRender {
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
|
||||
@Inject(method = "drawHighlightedBlockOutline", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_drawSelectionBox(CallbackInfo ci) {
|
||||
if (((EntityRendererHandler.IEntityRenderer) client.gameRenderer).replayModRender_getHandler() != null) {
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public interface WorldRendererAccessor {
|
||||
//#if MC<11500
|
||||
@Accessor("field_4076")
|
||||
void setRenderEntitiesStartupCounter(int value);
|
||||
|
||||
@@ -26,4 +27,5 @@ public interface WorldRendererAccessor {
|
||||
@Accessor("chunkRenderers")
|
||||
Set<ChunkRenderer> getChunksToUpdate();
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getWindow;
|
||||
|
||||
public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
|
||||
private final FrameCapturer<R> capturer;
|
||||
@@ -58,9 +60,9 @@ public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
MinecraftClient mc = MCVer.getMinecraft();
|
||||
while (!capturer.isDone() && !Thread.currentThread().isInterrupted()) {
|
||||
//#if MC>=11300
|
||||
if (GLFW.glfwWindowShouldClose(mc.window.getHandle()) || ((MinecraftAccessor) mc).hasCrashed()) {
|
||||
if (GLFW.glfwWindowShouldClose(getWindow(mc).getHandle()) || ((MinecraftAccessor) mc).getCrashReporter() != null) {
|
||||
//#else
|
||||
//$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).hasCrashed()) {
|
||||
//$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).getCrashReporter() != null) {
|
||||
//#endif
|
||||
Thread.currentThread().interrupt();
|
||||
return;
|
||||
|
||||
@@ -32,6 +32,12 @@ import net.minecraft.util.crash.CrashException;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
//$$ import net.minecraft.client.util.Window;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import com.replaymod.render.mixin.MainWindowAccessor;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
@@ -43,7 +49,9 @@ import org.lwjgl.glfw.GLFW;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC<11500
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
//#endif
|
||||
import static com.mojang.blaze3d.platform.GlStateManager.*;
|
||||
//#else
|
||||
//$$ import com.replaymod.replay.gui.screen.GuiOpeningReplay;
|
||||
@@ -60,6 +68,7 @@ import java.util.concurrent.Future;
|
||||
import java.util.concurrent.FutureTask;
|
||||
|
||||
import static com.google.common.collect.Iterables.getLast;
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
@@ -79,7 +88,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
private TimelinePlayer timelinePlayer;
|
||||
private Future<Void> timelinePlayerFuture;
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
private ChunkLoadingRenderGlobal chunkLoadingRenderGlobal;
|
||||
//#endif
|
||||
//#if MC<10800
|
||||
@@ -161,11 +170,13 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC<11500
|
||||
((WorldRendererAccessor) mc.worldRenderer).setRenderEntitiesStartupCounter(0);
|
||||
//#endif
|
||||
|
||||
renderingPipeline.run();
|
||||
|
||||
if (((MinecraftAccessor) mc).hasCrashed()) {
|
||||
if (((MinecraftAccessor) mc).getCrashReporter() != null) {
|
||||
throw new CrashException(((MinecraftAccessor) mc).getCrashReporter());
|
||||
}
|
||||
|
||||
@@ -190,10 +201,10 @@ public class VideoRenderer implements RenderInfo {
|
||||
public float updateForNextFrame() {
|
||||
// because the jGui lib uses Minecraft's displayWidth and displayHeight values, update these temporarily
|
||||
//#if MC>=11300
|
||||
int displayWidthBefore = mc.window.getFramebufferWidth();
|
||||
int displayHeightBefore = mc.window.getFramebufferHeight();
|
||||
int displayWidthBefore = getWindow(mc).getFramebufferWidth();
|
||||
int displayHeightBefore = getWindow(mc).getFramebufferHeight();
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window;
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) getWindow(mc);
|
||||
acc.setFramebufferWidth(displayWidth);
|
||||
acc.setFramebufferHeight(displayHeight);
|
||||
//#else
|
||||
@@ -248,13 +259,16 @@ public class VideoRenderer implements RenderInfo {
|
||||
timelinePlayer = new TimelinePlayer(replayHandler);
|
||||
timelinePlayerFuture = timelinePlayer.start(timeline);
|
||||
|
||||
// FBOs are always used in 1.14+
|
||||
//#if MC<11400
|
||||
if (!GLX.isUsingFBOs()) {
|
||||
//#if MC>=11300
|
||||
GLFW.glfwSetWindowAttrib(mc.window.getHandle(), GLFW.GLFW_RESIZABLE, 1);
|
||||
GLFW.glfwSetWindowAttrib(getWindow(mc).getHandle(), GLFW.GLFW_RESIZABLE, 1);
|
||||
//#else
|
||||
//$$ Display.setResizable(false);
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
if (mc.options.debugEnabled) {
|
||||
debugInfoWasShown = true;
|
||||
mc.options.debugEnabled = false;
|
||||
@@ -304,7 +318,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
chunkLoadingRenderGlobal = new ChunkLoadingRenderGlobal(mc.worldRenderer);
|
||||
//#endif
|
||||
|
||||
@@ -323,13 +337,16 @@ public class VideoRenderer implements RenderInfo {
|
||||
// Tear down of the timeline player might only happen the next tick after it was cancelled
|
||||
timelinePlayer.onTick();
|
||||
|
||||
// FBOs are always used in 1.14+
|
||||
//#if MC<11400
|
||||
if (!GLX.isUsingFBOs()) {
|
||||
//#if MC>=11300
|
||||
GLFW.glfwSetWindowAttrib(mc.window.getHandle(), GLFW.GLFW_RESIZABLE, 0);
|
||||
GLFW.glfwSetWindowAttrib(getWindow(mc).getHandle(), GLFW.GLFW_RESIZABLE, 0);
|
||||
//#else
|
||||
//$$ Display.setResizable(true);
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
mc.options.debugEnabled = debugInfoWasShown;
|
||||
if (mouseWasGrabbed) {
|
||||
//#if MC>=11300
|
||||
@@ -342,7 +359,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
mc.options.setSoundVolume(entry.getKey(), entry.getValue());
|
||||
}
|
||||
mc.openScreen(null);
|
||||
//#if MC>=10800
|
||||
//#if MC>=10800 && MC<11500
|
||||
if (chunkLoadingRenderGlobal != null) {
|
||||
chunkLoadingRenderGlobal.uninstall();
|
||||
}
|
||||
@@ -366,7 +383,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
//#endif
|
||||
);
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window;
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) getWindow(mc);
|
||||
acc.setFramebufferWidth(displayWidth);
|
||||
acc.setFramebufferHeight(displayHeight);
|
||||
//#else
|
||||
@@ -411,7 +428,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
if (!settings.isHighPerformance() && displaySizeChanged()) {
|
||||
updateDisplaySize();
|
||||
//#if MC>=11300
|
||||
guiFramebuffer.resize(mc.window.getFramebufferWidth(), mc.window.getFramebufferHeight()
|
||||
guiFramebuffer.resize(getWindow(mc).getFramebufferWidth(), getWindow(mc).getFramebufferHeight()
|
||||
//#if MC>=11400
|
||||
, false
|
||||
//#endif
|
||||
@@ -430,8 +447,18 @@ public class VideoRenderer implements RenderInfo {
|
||||
enableTexture();
|
||||
guiFramebuffer.beginWrite(true);
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ Window window = getWindow(mc);
|
||||
//$$ RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_PROJECTION);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.ortho(0, window.getFramebufferWidth() / window.getScaleFactor(), window.getFramebufferHeight() / window.getScaleFactor(), 0, 1000, 3000);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_MODELVIEW);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.translatef(0, 0, -2000);
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
mc.window.method_4493(
|
||||
getWindow(mc).method_4493(
|
||||
//#if MC>=11400
|
||||
false
|
||||
//#endif
|
||||
@@ -439,9 +466,10 @@ public class VideoRenderer implements RenderInfo {
|
||||
//#else
|
||||
//$$ mc.entityRenderer.setupOverlayRendering();
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
gui.toMinecraft().init(mc, mc.window.getScaledWidth(), mc.window.getScaledHeight());
|
||||
gui.toMinecraft().init(mc, getWindow(mc).getScaledWidth(), getWindow(mc).getScaledHeight());
|
||||
//#else
|
||||
//$$ ScaledResolution scaled = newScaledResolution(mc);
|
||||
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
@@ -482,8 +510,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
guiFramebuffer.draw(displayWidth, displayHeight);
|
||||
popMatrix();
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ getWindow(mc).swapBuffers();
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
mc.window.setFullscreen(false);
|
||||
getWindow(mc).setFullscreen(false);
|
||||
//#else
|
||||
//$$ // if not in high performance mode, update the gui size if screen size changed
|
||||
//$$ // otherwise just swap the progress gui to screen
|
||||
@@ -497,6 +528,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
//#endif
|
||||
//$$ }
|
||||
//#endif
|
||||
//#endif
|
||||
//#if MC>=11300
|
||||
if (mc.mouse.isCursorLocked()) {
|
||||
mc.mouse.unlockCursor();
|
||||
@@ -519,7 +551,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
private boolean displaySizeChanged() {
|
||||
//#if MC>=11300
|
||||
return displayWidth != mc.window.getWidth() || displayHeight != mc.window.getHeight();
|
||||
return displayWidth != getWindow(mc).getWidth() || displayHeight != getWindow(mc).getHeight();
|
||||
//#else
|
||||
//$$ return displayWidth != Display.getWidth() || displayHeight != Display.getHeight();
|
||||
//#endif
|
||||
@@ -527,8 +559,8 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
private void updateDisplaySize() {
|
||||
//#if MC>=11300
|
||||
displayWidth = mc.window.getWidth();
|
||||
displayHeight = mc.window.getHeight();
|
||||
displayWidth = getWindow(mc).getWidth();
|
||||
displayHeight = getWindow(mc).getHeight();
|
||||
//#else
|
||||
//$$ displayWidth = Display.getWidth();
|
||||
//$$ displayHeight = Display.getHeight();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.replaymod.replay;
|
||||
|
||||
import com.github.steveice10.packetlib.io.NetOutput;
|
||||
import com.github.steveice10.packetlib.tcp.io.ByteBufNetOutput;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.io.Files;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
@@ -9,9 +11,6 @@ import com.replaymod.core.utils.Restrictions;
|
||||
import com.replaymod.replay.camera.CameraEntity;
|
||||
import com.replaymod.replaystudio.io.ReplayInputStream;
|
||||
import com.replaymod.replaystudio.replay.ReplayFile;
|
||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||
import com.replaymod.replaystudio.studio.protocol.StudioCodec;
|
||||
import com.replaymod.replaystudio.studio.protocol.StudioSession;
|
||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
@@ -26,7 +25,6 @@ import net.minecraft.client.gui.screen.NoticeScreen;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.network.NetworkState;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.util.PacketByteBuf;
|
||||
import net.minecraft.client.network.packet.ChatMessageS2CPacket;
|
||||
@@ -586,12 +584,18 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
p = new GameJoinS2CPacket(
|
||||
entId,
|
||||
GameMode.SPECTATOR,
|
||||
//#if MC>=11500
|
||||
//$$ packet.getSeed(),
|
||||
//#endif
|
||||
false,
|
||||
packet.getDimension(),
|
||||
0, // max players (has no getter -> never actually used)
|
||||
packet.getGeneratorType(),
|
||||
packet.getChunkLoadDistance(),
|
||||
packet.hasReducedDebugInfo()
|
||||
//#if MC>=11500
|
||||
//$$ , packet.showsDeathScreen()
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@@ -630,7 +634,14 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
if(p instanceof PlayerRespawnS2CPacket) {
|
||||
PlayerRespawnS2CPacket respawn = (PlayerRespawnS2CPacket) p;
|
||||
//#if MC>=11400
|
||||
p = new PlayerRespawnS2CPacket(respawn.getDimension(), respawn.getGeneratorType(), GameMode.SPECTATOR);
|
||||
p = new PlayerRespawnS2CPacket(
|
||||
respawn.getDimension(),
|
||||
//#if MC>=11500
|
||||
//$$ respawn.method_22425(),
|
||||
//#endif
|
||||
respawn.getGeneratorType(),
|
||||
GameMode.SPECTATOR
|
||||
);
|
||||
//#else
|
||||
//#if MC>=10809
|
||||
//$$ p = new SPacketRespawn(respawn.getDimensionID(),
|
||||
@@ -684,8 +695,8 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
//#endif
|
||||
|
||||
if(cent != null) {
|
||||
if(!allowMovement && !((Math.abs(cent.x - ppl.getX()) > TP_DISTANCE_LIMIT) ||
|
||||
(Math.abs(cent.z - ppl.getZ()) > TP_DISTANCE_LIMIT))) {
|
||||
if(!allowMovement && !((Math.abs(Entity_getX(cent) - ppl.getX()) > TP_DISTANCE_LIMIT) ||
|
||||
(Math.abs(Entity_getZ(cent) - ppl.getZ()) > TP_DISTANCE_LIMIT))) {
|
||||
return null;
|
||||
} else {
|
||||
allowMovement = false;
|
||||
@@ -813,7 +824,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
while (!terminate) {
|
||||
synchronized (FullReplaySender.this) {
|
||||
if (replayIn == null) {
|
||||
replayIn = replayFile.getPacketData(new ReplayStudio(), true);
|
||||
replayIn = replayFile.getPacketData(getPacketTypeRegistry(true));
|
||||
}
|
||||
// Packet loop
|
||||
while (true) {
|
||||
@@ -1010,7 +1021,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
}
|
||||
|
||||
if (replayIn == null) {
|
||||
replayIn = replayFile.getPacketData(new ReplayStudio(), true);
|
||||
replayIn = replayFile.getPacketData(getPacketTypeRegistry(true));
|
||||
}
|
||||
|
||||
while (true) { // Send packets
|
||||
@@ -1153,8 +1164,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
|
||||
private static final class PacketData {
|
||||
private static final com.github.steveice10.netty.buffer.ByteBuf byteBuf = com.github.steveice10.netty.buffer.Unpooled.buffer();
|
||||
private static final StudioCodec codecLoginPhase = new StudioCodec(new StudioSession(new ReplayStudio(), false, true));
|
||||
private static final StudioCodec codecPlayPhase = new StudioCodec(new StudioSession(new ReplayStudio(), false, false));
|
||||
private static final NetOutput netOutput = new ByteBufNetOutput(byteBuf);
|
||||
|
||||
private final int timestamp;
|
||||
private final byte[] bytes;
|
||||
@@ -1175,25 +1185,25 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
throw new EOFException();
|
||||
}
|
||||
timestamp = (int) data.getTime();
|
||||
// We need to re-encode MCProtocolLib packets, so we can later decode them as NMS packets
|
||||
com.replaymod.replaystudio.protocol.Packet packet = data.getPacket();
|
||||
// We need to re-encode ReplayStudio packets, so we can later decode them as NMS packets
|
||||
// The main reason we aren't reading them as NMS packets is that we want ReplayStudio to be able
|
||||
// to apply ViaVersion (and potentially other magic) to it.
|
||||
synchronized (byteBuf) {
|
||||
byteBuf.markReaderIndex(); // Mark the current reader and writer index (should be at start)
|
||||
byteBuf.markWriterIndex();
|
||||
|
||||
try {
|
||||
(loginPhase ? codecLoginPhase : codecPlayPhase).encode(null, data.getPacket(), byteBuf);
|
||||
} catch (Exception e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
|
||||
bytes = new byte[byteBuf.readableBytes()]; // Create bytes array of sufficient size
|
||||
byteBuf.readBytes(bytes); // Read all data into bytes
|
||||
netOutput.writeVarInt(packet.getId());
|
||||
int idSize = byteBuf.readableBytes();
|
||||
int contentSize = packet.getBuf().readableBytes();
|
||||
bytes = new byte[idSize + contentSize]; // Create bytes array of sufficient size
|
||||
byteBuf.readBytes(bytes, 0, idSize);
|
||||
packet.getBuf().readBytes(bytes, idSize, contentSize);
|
||||
|
||||
byteBuf.resetReaderIndex(); // Reset reader & writer index for next use
|
||||
byteBuf.resetWriterIndex();
|
||||
}
|
||||
packet.getBuf().release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,14 @@ import net.minecraft.client.MinecraftClient;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import net.minecraft.client.util.ScreenshotUtils;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import static com.replaymod.core.versions.MCVer.getWindow;
|
||||
//#endif
|
||||
|
||||
//#if MC<11300
|
||||
//$$ import com.google.common.io.Files;
|
||||
//$$ import org.apache.commons.io.FileUtils;
|
||||
@@ -35,7 +43,7 @@ public class NoGuiScreenshot {
|
||||
}
|
||||
|
||||
//#if MC>=11300
|
||||
int frameWidth = mc.window.getFramebufferWidth(), frameHeight = mc.window.getFramebufferHeight();
|
||||
int frameWidth = getWindow(mc).getFramebufferWidth(), frameHeight = getWindow(mc).getFramebufferHeight();
|
||||
//#else
|
||||
//$$ int frameWidth = mc.displayWidth, frameHeight = mc.displayHeight;
|
||||
//#endif
|
||||
@@ -56,7 +64,13 @@ public class NoGuiScreenshot {
|
||||
GlStateManager.enableTexture();
|
||||
|
||||
//#if MC>=11300
|
||||
mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime());
|
||||
mc.gameRenderer.renderWorld(
|
||||
MCVer.getRenderPartialTicks(),
|
||||
System.nanoTime()
|
||||
//#if MC>=11500
|
||||
//$$ , new MatrixStack()
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
//#if MC>=10809
|
||||
//$$ mc.entityRenderer.updateCameraAndRender(MCVer.getRenderPartialTicks(), System.nanoTime());
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -35,8 +35,11 @@ import net.minecraft.network.ClientConnection;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import com.replaymod.replay.mixin.EntityLivingBaseAccessor;
|
||||
@@ -393,7 +396,7 @@ public class ReplayHandler {
|
||||
|
||||
CameraEntity cam = getCameraEntity();
|
||||
if (cam != null) {
|
||||
targetCameraPosition = new Location(cam.x, cam.y, cam.z, cam.yaw, cam.pitch);
|
||||
targetCameraPosition = new Location(Entity_getX(cam), Entity_getY(cam), Entity_getZ(cam), cam.yaw, cam.pitch);
|
||||
} else {
|
||||
targetCameraPosition = null;
|
||||
}
|
||||
@@ -535,9 +538,9 @@ public class ReplayHandler {
|
||||
// Update all entity positions (especially prev/lastTick values)
|
||||
for (Entity entity : loadedEntityList(mc.world)) {
|
||||
skipTeleportInterpolation(entity);
|
||||
entity.prevRenderX = entity.prevX = entity.x;
|
||||
entity.prevRenderY = entity.prevY = entity.y;
|
||||
entity.prevRenderZ = entity.prevZ = entity.z;
|
||||
entity.prevRenderX = entity.prevX = Entity_getX(entity);
|
||||
entity.prevRenderY = entity.prevY = Entity_getY(entity);
|
||||
entity.prevRenderZ = entity.prevZ = Entity_getZ(entity);
|
||||
entity.prevYaw = entity.yaw;
|
||||
entity.prevPitch = entity.pitch;
|
||||
}
|
||||
@@ -576,7 +579,7 @@ public class ReplayHandler {
|
||||
if (retainCameraPosition) {
|
||||
CameraEntity cam = getCameraEntity();
|
||||
if (cam != null) {
|
||||
targetCameraPosition = new Location(cam.x, cam.y, cam.z,
|
||||
targetCameraPosition = new Location(Entity_getX(cam), Entity_getY(cam), Entity_getZ(cam),
|
||||
cam.yaw, cam.pitch);
|
||||
} else {
|
||||
targetCameraPosition = null;
|
||||
@@ -618,8 +621,18 @@ public class ReplayHandler {
|
||||
);
|
||||
enableTexture();
|
||||
mc.getFramebuffer().beginWrite(true);
|
||||
//#if MC>=11500
|
||||
//$$ Window window = getWindow(mc);
|
||||
//$$ RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_PROJECTION);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.ortho(0, window.getFramebufferWidth() / window.getScaleFactor(), window.getFramebufferHeight() / window.getScaleFactor(), 0, 1000, 3000);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_MODELVIEW);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.translatef(0, 0, -2000);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
mc.window.method_4493(true);
|
||||
getWindow(mc).method_4493(true);
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
//$$ mc.mainWindow.setupOverlayRendering();
|
||||
@@ -627,6 +640,7 @@ public class ReplayHandler {
|
||||
//$$ mc.entityRenderer.setupOverlayRendering();
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
Window
|
||||
@@ -645,17 +659,21 @@ public class ReplayHandler {
|
||||
popMatrix();
|
||||
pushMatrix();
|
||||
//#if MC>=11300
|
||||
mc.getFramebuffer().draw(mc.window.getFramebufferWidth(), mc.window.getFramebufferHeight());
|
||||
mc.getFramebuffer().draw(getWindow(mc).getFramebufferWidth(), getWindow(mc).getFramebufferHeight());
|
||||
//#else
|
||||
//$$ mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight);
|
||||
//#endif
|
||||
popMatrix();
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ getWindow(mc).swapBuffers();
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
mc.window.setFullscreen(true);
|
||||
getWindow(mc).setFullscreen(true);
|
||||
//#else
|
||||
//$$ Display.update();
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
// Send the packets
|
||||
replaySender.sendPacketsTill(targetTime);
|
||||
@@ -676,9 +694,9 @@ public class ReplayHandler {
|
||||
//#endif
|
||||
for (Entity entity : loadedEntityList(mc.world)) {
|
||||
skipTeleportInterpolation(entity);
|
||||
entity.prevRenderX = entity.prevX = entity.x;
|
||||
entity.prevRenderY = entity.prevY = entity.y;
|
||||
entity.prevRenderZ = entity.prevZ = entity.z;
|
||||
entity.prevRenderX = entity.prevX = Entity_getX(entity);
|
||||
entity.prevRenderY = entity.prevY = Entity_getY(entity);
|
||||
entity.prevRenderZ = entity.prevZ = Entity_getZ(entity);
|
||||
entity.prevYaw = entity.yaw;
|
||||
entity.prevPitch = entity.pitch;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
public class ReplayModReplay implements Module {
|
||||
|
||||
{ instance = this; }
|
||||
@@ -66,9 +68,9 @@ public class ReplayModReplay implements Module {
|
||||
if (camera != null) {
|
||||
Marker marker = new Marker();
|
||||
marker.setTime(replayHandler.getReplaySender().currentTimeStamp());
|
||||
marker.setX(camera.x);
|
||||
marker.setY(camera.y);
|
||||
marker.setZ(camera.z);
|
||||
marker.setX(Entity_getX(camera));
|
||||
marker.setY(Entity_getY(camera));
|
||||
marker.setZ(Entity_getZ(camera));
|
||||
marker.setYaw(camera.yaw);
|
||||
marker.setPitch(camera.pitch);
|
||||
marker.setRoll(camera.roll);
|
||||
|
||||
@@ -169,7 +169,7 @@ public class CameraEntity
|
||||
* @param z Delta in Z direction
|
||||
*/
|
||||
public void moveCamera(double x, double y, double z) {
|
||||
setCameraPosition(this.x + x, this.y + y, this.z + z);
|
||||
setCameraPosition(Entity_getX(this) + x, Entity_getY(this) + y, Entity_getZ(this) + z);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -179,9 +179,10 @@ public class CameraEntity
|
||||
* @param z Z coordinate
|
||||
*/
|
||||
public void setCameraPosition(double x, double y, double z) {
|
||||
this.prevRenderX = this.prevX = this.x = x;
|
||||
this.prevRenderY = this.prevY = this.y = y;
|
||||
this.prevRenderZ = this.prevZ = this.z = z;
|
||||
this.prevRenderX = this.prevX = x;
|
||||
this.prevRenderY = this.prevY = y;
|
||||
this.prevRenderZ = this.prevZ = z;
|
||||
Entity_setPos(this, x, y, z);
|
||||
updateBoundingBox();
|
||||
}
|
||||
|
||||
@@ -222,9 +223,7 @@ public class CameraEntity
|
||||
this.prevZ = to.prevZ;
|
||||
this.prevYaw = to.prevYaw;
|
||||
this.prevPitch = to.prevPitch;
|
||||
this.x = to.x;
|
||||
this.y = to.y + yOffset;
|
||||
this.z = to.z;
|
||||
Entity_setPos(this, Entity_getX(to), Entity_getY(to), Entity_getZ(to));
|
||||
this.yaw = to.yaw;
|
||||
this.pitch = to.pitch;
|
||||
this.prevRenderX = to.prevRenderX;
|
||||
@@ -243,8 +242,8 @@ public class CameraEntity
|
||||
//#else
|
||||
//$$ this.boundingBox.setBB(AxisAlignedBB.getBoundingBox(
|
||||
//#endif
|
||||
this.x - width / 2, this.y, this.z - width / 2,
|
||||
this.x + width / 2, this.y + height, this.z + width / 2));
|
||||
Entity_getX(this) - width / 2, Entity_getY(this), Entity_getZ(this) - width / 2,
|
||||
Entity_getX(this) + width / 2, Entity_getY(this) + height, Entity_getZ(this) + width / 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -633,7 +633,7 @@ public class GuiPathing {
|
||||
if (!replayHandler.isCameraView()) {
|
||||
spectatedId = getRenderViewEntity(replayHandler.getOverlay().getMinecraft()).getEntityId();
|
||||
}
|
||||
timeline.addPositionKeyframe(time, camera.x, camera.y, camera.z,
|
||||
timeline.addPositionKeyframe(time, Entity_getX(camera), Entity_getY(camera), Entity_getZ(camera),
|
||||
camera.yaw, camera.pitch, camera.roll, spectatedId);
|
||||
mod.setSelected(path, time);
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
|
||||
//#if MC>=10800
|
||||
// Eye height is subtracted to make path appear higher (at eye height) than it actually is (at foot height)
|
||||
Triple<Double, Double, Double> viewPos = Triple.of(view.x, view.y - view.getStandingEyeHeight(), view.z);
|
||||
Triple<Double, Double, Double> viewPos = Triple.of(Entity_getX(view), Entity_getY(view) - view.getStandingEyeHeight(), Entity_getZ(view));
|
||||
//#else
|
||||
//$$ Triple<Double, Double, Double> viewPos = Triple.of(view.posX, view.posY, view.posZ);
|
||||
//#endif
|
||||
@@ -208,17 +208,21 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
if (distanceSquared(view, pos1) > renderDistanceSquared) return;
|
||||
if (distanceSquared(view, pos2) > renderDistanceSquared) return;
|
||||
|
||||
BufferBuilder_setTranslation(-view.getLeft(), -view.getMiddle(), -view.getRight());
|
||||
|
||||
BufferBuilder_beginPosCol(GL11.GL_LINES);
|
||||
|
||||
BufferBuilder_addPosCol(pos1.getLeft(), pos1.getMiddle(), pos1.getRight(),
|
||||
BufferBuilder_addPosCol(
|
||||
pos1.getLeft() - view.getLeft(),
|
||||
pos1.getMiddle() - view.getMiddle(),
|
||||
pos1.getRight() - view.getRight(),
|
||||
color >> 16 & 0xff,
|
||||
color >> 8 & 0xff,
|
||||
color & 0xff,
|
||||
255
|
||||
);
|
||||
BufferBuilder_addPosCol(pos2.getLeft(), pos2.getMiddle(), pos2.getRight(),
|
||||
BufferBuilder_addPosCol(
|
||||
pos2.getLeft() - view.getLeft(),
|
||||
pos2.getMiddle() - view.getMiddle(),
|
||||
pos2.getRight() - view.getRight(),
|
||||
color >> 16 & 0xff,
|
||||
color >> 8 & 0xff,
|
||||
color & 0xff,
|
||||
@@ -227,13 +231,11 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
|
||||
GL11.glLineWidth(3);
|
||||
Tessellator_getInstance().draw();
|
||||
BufferBuilder_setTranslation(0, 0, 0);
|
||||
}
|
||||
|
||||
private void drawPoint(Triple<Double, Double, Double> view,
|
||||
Triple<Double, Double, Double> pos,
|
||||
Keyframe keyframe) {
|
||||
BufferBuilder_setTranslation(0, 0, 0);
|
||||
|
||||
MCVer.bindTexture(TEXTURE);
|
||||
|
||||
@@ -269,8 +271,13 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
pos.getRight() - view.getRight()
|
||||
);
|
||||
GL11.glNormal3f(0, 1, 0);
|
||||
//#if MC>=11500
|
||||
//$$ GL11.glRotatef(-getRenderManager().camera.getYaw(), 0, 1, 0);
|
||||
//$$ GL11.glRotatef(getRenderManager().camera.getPitch(), 1, 0, 0);
|
||||
//#else
|
||||
GL11.glRotatef(-getRenderManager().cameraYaw, 0, 1, 0);
|
||||
GL11.glRotatef(getRenderManager().cameraPitch, 1, 0, 0);
|
||||
//#endif
|
||||
|
||||
Tessellator_getInstance().draw();
|
||||
|
||||
@@ -280,7 +287,6 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
private void drawCamera(Triple<Double, Double, Double> view,
|
||||
Triple<Double, Double, Double> pos,
|
||||
Triple<Float, Float, Float> rot) {
|
||||
BufferBuilder_setTranslation(0, 0, 0);
|
||||
|
||||
MCVer.bindTexture(CAMERA_HEAD);
|
||||
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
"server": [],
|
||||
"client": [
|
||||
//#if MC>=10800
|
||||
//#if MC<11500
|
||||
"WorldRendererAccessor",
|
||||
"MixinChunkRenderWorker",
|
||||
"MixinEffectRenderer",
|
||||
"MixinModelRenderer",
|
||||
"MixinTileEntityRendererDispatcher",
|
||||
//#endif
|
||||
"ContainerLocalRenderInformationAccessor",
|
||||
//#if MC<10904
|
||||
//$$ "EntityAccessor",
|
||||
@@ -13,15 +20,10 @@
|
||||
"ItemRendererAccessor",
|
||||
//#endif
|
||||
"ParticleAccessor",
|
||||
"WorldRendererAccessor",
|
||||
"MixinChunkRenderWorker",
|
||||
"MixinEffectRenderer",
|
||||
"MixinModelRenderer",
|
||||
"MixinRenderGlobal",
|
||||
"MixinRenderItem",
|
||||
"MixinRenderLivingBase",
|
||||
"MixinRenderManager",
|
||||
"MixinTileEntityRendererDispatcher"
|
||||
"MixinRenderManager"
|
||||
//#endif
|
||||
],
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
|
||||
@@ -4,7 +4,11 @@
|
||||
"mixins": [],
|
||||
"server": [],
|
||||
"client": [
|
||||
//#if MC>=10800
|
||||
"Mixin_ChromaKeyColorSky",
|
||||
"Mixin_ChromaKeyForceSky",
|
||||
"Mixin_CubicRotation",
|
||||
"Mixin_SkipBlockOutlinesDuringRender",
|
||||
//#if MC>=10800 && MC<11500
|
||||
"ChunkRenderDispatcherAccessor",
|
||||
"MixinChunkRenderWorker",
|
||||
//#endif
|
||||
@@ -13,7 +17,9 @@
|
||||
//#endif
|
||||
"WorldRendererAccessor",
|
||||
//#if MC>=10904
|
||||
//#if MC<11500
|
||||
"MixinParticleManager",
|
||||
//#endif
|
||||
//#else
|
||||
//$$ "MixinEffectRenderer",
|
||||
//$$ "MixinRendererLivingEntity",
|
||||
@@ -29,7 +35,9 @@
|
||||
"MixinFrustum",
|
||||
"MixinRender",
|
||||
//#if MC>=10800
|
||||
//#if MC<11500
|
||||
"MixinRenderGlobal",
|
||||
//#endif
|
||||
//#else
|
||||
//$$ "MixinOpenGlHelper",
|
||||
//#endif
|
||||
|
||||
@@ -216,15 +216,19 @@ dependencies {
|
||||
if (FABRIC) {
|
||||
minecraft 'com.mojang:minecraft:' + [
|
||||
11404: '1.14.4',
|
||||
11501: '1.15.1',
|
||||
][mcVersion]
|
||||
mappings 'net.fabricmc:yarn:' + [
|
||||
11404: '1.14.4+build.1',
|
||||
11501: '1.15.1+build.37',
|
||||
][mcVersion]
|
||||
modCompile 'net.fabricmc:fabric-loader:' + [
|
||||
11404: '0.4.8+build.155',
|
||||
11501: '0.7.4+build.177',
|
||||
][mcVersion]
|
||||
modCompile 'net.fabricmc.fabric-api:fabric-api:' + [
|
||||
11404: '0.3.0+build.200',
|
||||
11501: '0.4.27+build.286-1.15',
|
||||
][mcVersion]
|
||||
}
|
||||
|
||||
@@ -258,9 +262,7 @@ dependencies {
|
||||
|
||||
shadow 'com.github.ReplayMod.JavaBlend:2.79.0:a0696f8'
|
||||
|
||||
def studioVersion = mcVersionStr
|
||||
if (studioVersion == '1.8.9') studioVersion = '1.8'
|
||||
shadow "com.github.ReplayMod.ReplayStudio:$studioVersion:e657fe8", shadeExclusions
|
||||
shadow "com.replaymod.replaystudio:ReplayStudio:120feb9", shadeExclusions
|
||||
|
||||
shadowReobf(project(":jGui:$jGuiVersion")){
|
||||
transitive = false // FG 1.2 puts all MC deps into the compile configuration and we don't want to shade those
|
||||
|
||||
28
versions/mapping-fabric-1.15.1-1.14.4.txt
Normal file
28
versions/mapping-fabric-1.15.1-1.14.4.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
net.minecraft.client.model.ModelPart.Cuboid net.minecraft.client.model.Box
|
||||
net.minecraft.client.render.chunk.ChunkBuilder net.minecraft.client.render.chunk.ChunkRenderWorker
|
||||
net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk net.minecraft.client.render.chunk.ChunkRenderer
|
||||
net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk.Task net.minecraft.client.render.chunk.ChunkRenderTask
|
||||
net.minecraft.client.network.packet.PlayerActionResponseS2CPacket net.minecraft.class_4463
|
||||
net.minecraft.network.NetworkState LOGIN field_11688
|
||||
net.minecraft.network.NetworkState PLAY field_11690
|
||||
net.fabricmc.fabric.impl.resource.loader.ModResourcePackUtil net.fabricmc.fabric.impl.resources.ModResourcePackUtil
|
||||
net.minecraft.client.render.entity.EntityRenderer shouldRender() isVisible()
|
||||
net.minecraft.client.render.Frustum net.minecraft.client.render.VisibleRegion
|
||||
net.minecraft.client.render.GameRenderer renderWorld() renderCenter()
|
||||
net.minecraft.entity.LivingEntity serverX field_6224
|
||||
net.minecraft.entity.LivingEntity serverY field_6245
|
||||
net.minecraft.entity.LivingEntity serverZ field_6263
|
||||
net.minecraft.entity.LivingEntity serverYaw field_6284
|
||||
net.minecraft.entity.LivingEntity serverPitch field_6221
|
||||
net.minecraft.client.render.WorldRenderer drawBlockOutline() drawHighlightedBlockOutline()
|
||||
net.minecraft.client.render.GameRenderer method_22973() applyCameraTransformations()
|
||||
net.minecraft.client.util.math.Matrix4f viewboxMatrix() method_4929()
|
||||
net.minecraft.util.ThreadExecutor send() method_18858()
|
||||
net.minecraft.util.ThreadExecutor createTask() prepareRunnable()
|
||||
net.minecraft.util.ThreadExecutor canExecute() canRun()
|
||||
net.minecraft.util.ThreadExecutor runTasks() executeTaskQueue()
|
||||
net.minecraft.util.ThreadExecutor submit() executeFuture()
|
||||
net.minecraft.client.util.Window method_4493()
|
||||
net.minecraft.util.SystemUtil.OperatingSystem WINDOWS field_1133
|
||||
net.minecraft.util.SystemUtil.OperatingSystem OSX field_1137
|
||||
net.minecraft.client.util.ScreenshotUtils takeScreenshot() method_1663()
|
||||
Reference in New Issue
Block a user