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