Update to 1.21.7
This commit is contained in:
@@ -90,6 +90,7 @@ dependencies {
|
||||
12102 -> "0.106.1+1.21.2"
|
||||
12104 -> "0.111.0+1.21.4"
|
||||
12105 -> "0.119.9+1.21.5"
|
||||
12107 -> "0.128.1+1.21.7"
|
||||
else -> throw UnsupportedOperationException()
|
||||
}
|
||||
val fabricApiModules = mutableListOf(
|
||||
@@ -168,6 +169,7 @@ dependencies {
|
||||
|
||||
if (platform.isFabric) {
|
||||
val modMenuVersion = when {
|
||||
mcVersion >= 12107 -> "15.0.0-beta.3"
|
||||
mcVersion >= 12105 -> "14.0.0-rc.2"
|
||||
mcVersion >= 12104 -> "13.0.0-beta.1"
|
||||
mcVersion >= 12102 -> "12.0.0-beta.1"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
essential.defaults.loom=0
|
||||
essential.defaults.loom.fabric-loader=net.fabricmc:fabric-loader:0.16.12
|
||||
essential.defaults.loom.fabric-loader=net.fabricmc:fabric-loader:0.16.14
|
||||
|
||||
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
|
||||
# This is required to provide enough memory for the Minecraft decompilation process.
|
||||
|
||||
2
jGui
2
jGui
Submodule jGui updated: be4bf44276...31106f5dae
Submodule libs/ReplayStudio updated: d23e0ec824...3fdc6c42e3
@@ -204,6 +204,7 @@ defaultTasks("bundleJar")
|
||||
preprocess {
|
||||
strictExtraMappings.set(true)
|
||||
|
||||
val mc12107 = createNode("1.21.7", 12107, "yarn")
|
||||
val mc12105 = createNode("1.21.5", 12105, "yarn")
|
||||
val mc12104 = createNode("1.21.4", 12104, "yarn")
|
||||
val mc12102 = createNode("1.21.2", 12102, "yarn")
|
||||
@@ -236,6 +237,7 @@ preprocess {
|
||||
val mc10800 = createNode("1.8", 10800, "srg")
|
||||
val mc10710 = createNode("1.7.10", 10710, "srg")
|
||||
|
||||
mc12107.link(mc12105)
|
||||
mc12105.link(mc12104, file("versions/mapping-fabric-1.21.5-1.21.4.txt"))
|
||||
mc12104.link(mc12102)
|
||||
mc12102.link(mc12100)
|
||||
|
||||
@@ -43,6 +43,7 @@ val jGuiVersions = listOf(
|
||||
"1.21.2",
|
||||
"1.21.4",
|
||||
"1.21.5",
|
||||
"1.21.7",
|
||||
)
|
||||
val replayModVersions = listOf(
|
||||
// "1.7.10",
|
||||
@@ -76,6 +77,7 @@ val replayModVersions = listOf(
|
||||
"1.21.2",
|
||||
"1.21.4",
|
||||
"1.21.5",
|
||||
"1.21.7",
|
||||
)
|
||||
|
||||
rootProject.buildFileName = "root.gradle.kts"
|
||||
|
||||
@@ -21,7 +21,11 @@ public class ReplayModBackend implements ClientModInitializer {
|
||||
}
|
||||
|
||||
public String getMinecraftVersion() {
|
||||
//#if MC>=12106
|
||||
//$$ return SharedConstants.getGameVersion().comp_4025();
|
||||
//#else
|
||||
return SharedConstants.getGameVersion().getName();
|
||||
//#endif
|
||||
}
|
||||
|
||||
public boolean isModLoaded(String id) {
|
||||
|
||||
@@ -2,32 +2,16 @@
|
||||
package com.replaymod.core.mixin;
|
||||
|
||||
import com.replaymod.core.events.PreRenderHandCallback;
|
||||
import net.minecraft.client.render.Camera;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
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>=12005
|
||||
//$$ import org.joml.Matrix4f;
|
||||
//#else
|
||||
//#endif
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public class Mixin_PreRenderHandCallback {
|
||||
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
|
||||
private void preRenderHand(
|
||||
//#if MC>=11500 && MC<12005
|
||||
MatrixStack matrixStack,
|
||||
//#endif
|
||||
Camera camera,
|
||||
float partialTicks,
|
||||
//#if MC>=12005
|
||||
//$$ Matrix4f matrixStack,
|
||||
//#endif
|
||||
CallbackInfo ci) {
|
||||
private void preRenderHand(CallbackInfo ci) {
|
||||
if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) {
|
||||
ci.cancel();
|
||||
}
|
||||
|
||||
@@ -102,7 +102,9 @@ import java.util.Optional;
|
||||
*/
|
||||
public class MCVer {
|
||||
public static int getProtocolVersion() {
|
||||
//#if MC>=11400
|
||||
//#if MC>=12106
|
||||
//$$ return SharedConstants.getProtocolVersion();
|
||||
//#elseif MC>=11400
|
||||
return SharedConstants.getGameVersion().getProtocolVersion();
|
||||
//#else
|
||||
//$$ return RealmsSharedConstants.NETWORK_PROTOCOL_VERSION;
|
||||
@@ -488,9 +490,11 @@ public class MCVer {
|
||||
buffer.next();
|
||||
}
|
||||
|
||||
//#if MC<12105
|
||||
public static void bindTexture(Identifier id) {
|
||||
de.johni0702.minecraft.gui.versions.MCVer.bindTexture(id);
|
||||
}
|
||||
//#endif
|
||||
|
||||
//#if MC<10900
|
||||
//$$ public static class SoundEvent {}
|
||||
|
||||
@@ -35,7 +35,11 @@ public class SpectatorProperty extends AbstractProperty<Integer> {
|
||||
ReplayHandler handler = ((ReplayHandler) replayHandler);
|
||||
CameraEntity cameraEntity = handler.getCameraEntity();
|
||||
if (cameraEntity == null) return;
|
||||
//#if MC>=12106
|
||||
//$$ World world = cameraEntity.getWorld();
|
||||
//#else
|
||||
World world = cameraEntity.getEntityWorld();
|
||||
//#endif
|
||||
// Lookup entity by id, returns null if an entity with the id does not exists
|
||||
Entity target = world.getEntityById(value);
|
||||
// Spectate entity, when called with null, returns to camera
|
||||
|
||||
@@ -24,8 +24,10 @@ import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
|
||||
//#if MC>=12105
|
||||
//#if MC<12106
|
||||
//$$ import com.mojang.blaze3d.buffers.BufferType;
|
||||
//$$ import com.mojang.blaze3d.buffers.BufferUsage;
|
||||
//#endif
|
||||
//$$ import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||
//$$ import com.mojang.blaze3d.systems.GpuDevice;
|
||||
//#endif
|
||||
@@ -121,9 +123,17 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
ByteBuffer buffer = ByteBufferPool.allocate(getFrameWidth() * getFrameHeight() * 4);
|
||||
//#if MC>=12105
|
||||
//$$ GpuDevice device = RenderSystem.getDevice();
|
||||
//#if MC>=12106
|
||||
//$$ try (GpuBuffer gpuBuffer = device.createBuffer(null, GpuBuffer.USAGE_COPY_DST | GpuBuffer.USAGE_MAP_READ, getFrameWidth() * getFrameHeight() * 4)) {
|
||||
//#else
|
||||
//$$ try (GpuBuffer gpuBuffer = device.createBuffer(null, BufferType.PIXEL_PACK, BufferUsage.STATIC_READ, getFrameWidth() * getFrameHeight() * 4)) {
|
||||
//#endif
|
||||
//$$ device.createCommandEncoder().copyTextureToBuffer(frameBuffer().getColorAttachment(), gpuBuffer, 0, () -> {}, 0);
|
||||
//$$ try (GpuBuffer.ReadView view = device.createCommandEncoder().readBuffer(gpuBuffer)) {
|
||||
//#if MC>=12106
|
||||
//$$ try (GpuBuffer.MappedView view = device.createCommandEncoder().mapBuffer(gpuBuffer, true, false)) {
|
||||
//#else
|
||||
//$$ try (GpuBuffer.ReadView view = device.createCommandEncoder().readBuffer(gpuBuffer)) {
|
||||
//#endif
|
||||
//$$ buffer.put(view.data());
|
||||
//$$ }
|
||||
//$$ }
|
||||
|
||||
@@ -14,8 +14,10 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
//#if MC>=12105
|
||||
//#if MC<12106
|
||||
//$$ import com.mojang.blaze3d.buffers.BufferType;
|
||||
//$$ import com.mojang.blaze3d.buffers.BufferUsage;
|
||||
//#endif
|
||||
//$$ import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||
//$$ import com.mojang.blaze3d.systems.CommandEncoder;
|
||||
//$$ import com.mojang.blaze3d.systems.GpuDevice;
|
||||
@@ -38,7 +40,10 @@ public abstract class PboOpenGlFrameCapturer<F extends Frame, D extends Enum<D>
|
||||
withDepth = renderInfo.getRenderSettings().isDepthMap();
|
||||
data = type.getEnumConstants();
|
||||
int bufferSize = framePixels * (4 /* bgra */ + (withDepth ? 4 /* float */ : 0)) * data.length;
|
||||
//#if MC>=12105
|
||||
//#if MC>=12106
|
||||
//$$ pbo = RenderSystem.getDevice().createBuffer(null, GpuBuffer.USAGE_COPY_DST | GpuBuffer.USAGE_MAP_READ, bufferSize);
|
||||
//$$ otherPBO = RenderSystem.getDevice().createBuffer(null, GpuBuffer.USAGE_COPY_DST | GpuBuffer.USAGE_MAP_READ, bufferSize);
|
||||
//#elseif MC>=12105
|
||||
//$$ pbo = RenderSystem.getDevice().createBuffer(null, BufferType.PIXEL_PACK, BufferUsage.STREAM_READ, bufferSize);
|
||||
//$$ otherPBO = RenderSystem.getDevice().createBuffer(null, BufferType.PIXEL_PACK, BufferUsage.STREAM_READ, bufferSize);
|
||||
//#else
|
||||
@@ -97,7 +102,11 @@ public abstract class PboOpenGlFrameCapturer<F extends Frame, D extends Enum<D>
|
||||
if (framesDone > 1) {
|
||||
// Read pbo to memory
|
||||
//#if MC>=12105
|
||||
//#if MC>=12106
|
||||
//$$ try (GpuBuffer.MappedView view = RenderSystem.getDevice().createCommandEncoder().mapBuffer(pbo, true, false)) {
|
||||
//#else
|
||||
//$$ try (GpuBuffer.ReadView view = RenderSystem.getDevice().createCommandEncoder().readBuffer(pbo)) {
|
||||
//#endif
|
||||
//$$ channels = new HashMap<>();
|
||||
//$$ channels.put(Channel.BRGA, readFromPbo(view.data(), 4, true));
|
||||
//$$ if (withDepth) {
|
||||
|
||||
@@ -88,12 +88,21 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe
|
||||
GameRendererAccessor gameRenderer = (GameRendererAccessor) mc.gameRenderer;
|
||||
Screen orgScreen = mc.currentScreen;
|
||||
boolean orgPauseOnLostFocus = mc.options.pauseOnLostFocus;
|
||||
//#if MC>=12106
|
||||
//$$ boolean orgRenderHand = mc.gameRenderer.isRenderingPanorama();
|
||||
//#else
|
||||
boolean orgRenderHand = gameRenderer.getRenderHand();
|
||||
//#endif
|
||||
try {
|
||||
mc.currentScreen = null; // do not want to render the current screen (that'd just be the progress gui)
|
||||
mc.options.pauseOnLostFocus = false; // do not want the pause menu to open if the window is unfocused
|
||||
if (omnidirectional) {
|
||||
gameRenderer.setRenderHand(false); // makes no sense, we wouldn't even know where to put it
|
||||
// makes no sense, we wouldn't even know where to put it
|
||||
//#if MC>=12106
|
||||
//$$ mc.gameRenderer.setRenderingPanorama(false);
|
||||
//#else
|
||||
gameRenderer.setRenderHand(false);
|
||||
//#endif
|
||||
}
|
||||
|
||||
//#if MC>=12100
|
||||
@@ -111,7 +120,11 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe
|
||||
} finally {
|
||||
mc.currentScreen = orgScreen;
|
||||
mc.options.pauseOnLostFocus = orgPauseOnLostFocus;
|
||||
//#if MC>=12106
|
||||
//$$ mc.gameRenderer.setRenderingPanorama(orgRenderHand);
|
||||
//#else
|
||||
gameRenderer.setRenderHand(orgRenderHand);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,30 @@ import net.minecraft.client.render.GameRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ import net.minecraft.client.gui.render.GuiRenderer;
|
||||
//$$ import net.minecraft.client.gui.render.state.GuiRenderState;
|
||||
//$$ import net.minecraft.client.render.fog.FogRenderer;
|
||||
//$$ import net.minecraft.client.util.Pool;
|
||||
//#endif
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public interface GameRendererAccessor {
|
||||
//#if MC<12106
|
||||
@Accessor
|
||||
boolean getRenderHand();
|
||||
@Accessor
|
||||
void setRenderHand(boolean value);
|
||||
//#endif
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ @Accessor
|
||||
//$$ Pool getPool();
|
||||
//$$ @Accessor
|
||||
//$$ GuiRenderer getGuiRenderer();
|
||||
//$$ @Accessor
|
||||
//$$ GuiRenderState getGuiState();
|
||||
//$$ @Accessor
|
||||
//$$ FogRenderer getFogRenderer();
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -21,6 +21,12 @@ import java.util.concurrent.locks.Condition;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ import net.minecraft.client.render.chunk.AbstractChunkRenderData;
|
||||
//$$ import org.spongepowered.asm.mixin.Mutable;
|
||||
//$$ import java.util.concurrent.Executor;
|
||||
//#endif
|
||||
|
||||
//#if MC>=12105
|
||||
//$$ import org.spongepowered.asm.mixin.Mutable;
|
||||
//$$ import java.util.AbstractQueue;
|
||||
@@ -60,6 +66,13 @@ public abstract class Mixin_BlockOnChunkRebuilds implements ForceChunkLoadingHoo
|
||||
//$$ runnable.run();
|
||||
//$$ anything = true;
|
||||
//$$ }
|
||||
//#if MC>=12106
|
||||
//$$ AbstractChunkRenderData entry;
|
||||
//$$ while ((entry = this.renderQueue.poll()) != null) {
|
||||
//$$ entry.close();
|
||||
//$$ anything = true;
|
||||
//$$ }
|
||||
//#endif
|
||||
//$$ return anything;
|
||||
//$$ }
|
||||
//#else
|
||||
@@ -105,7 +118,42 @@ public abstract class Mixin_BlockOnChunkRebuilds implements ForceChunkLoadingHoo
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=12105
|
||||
//#if MC>=12106
|
||||
//$$ @Shadow @Final @Mutable
|
||||
//$$ Executor uploadExecutor;
|
||||
//$$ @Shadow @Final @Mutable Queue<AbstractChunkRenderData> renderQueue;
|
||||
//$$ @Inject(method = "<init>", at = @At("RETURN"))
|
||||
//$$ private void notifyMainThreadOfNewUpload(CallbackInfo ci) {
|
||||
//$$ Executor innerUploadExecutor = this.uploadExecutor;
|
||||
//$$ this.uploadExecutor = runnable -> {
|
||||
//$$ innerUploadExecutor.execute(runnable);
|
||||
//$$ waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ newWork.signal();
|
||||
//$$ } finally {
|
||||
//$$ waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ };
|
||||
//$$ Queue<AbstractChunkRenderData> innerRenderQueue = this.renderQueue;
|
||||
//$$ this.renderQueue = new AbstractQueue<>() {
|
||||
//$$ @Override
|
||||
//$$ public boolean offer(AbstractChunkRenderData runnable) {
|
||||
//$$ boolean result = innerRenderQueue.offer(runnable);
|
||||
//$$ waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ newWork.signal();
|
||||
//$$ } finally {
|
||||
//$$ waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ return result;
|
||||
//$$ }
|
||||
//$$ @Override public AbstractChunkRenderData poll() { return innerRenderQueue.poll(); }
|
||||
//$$ @Override public AbstractChunkRenderData peek() { return innerRenderQueue.peek(); }
|
||||
//$$ @Override public int size() { return innerRenderQueue.size(); }
|
||||
//$$ @Override public Iterator<AbstractChunkRenderData> iterator() { return innerRenderQueue.iterator(); }
|
||||
//$$ };
|
||||
//$$ }
|
||||
//#elseif MC>=12105
|
||||
//$$ @Inject(method = "<init>", at = @At("RETURN"))
|
||||
//$$ private void notifyMainThreadOfNewUpload(CallbackInfo ci) {
|
||||
//$$ Queue<Runnable> inner = this.uploadQueue;
|
||||
|
||||
@@ -40,6 +40,14 @@ import net.minecraft.util.crash.CrashException;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ import com.replaymod.render.mixin.GameRendererAccessor;
|
||||
//$$ import net.minecraft.client.gui.render.GuiRenderer;
|
||||
//$$ import net.minecraft.client.gui.render.state.GuiRenderState;
|
||||
//$$ import net.minecraft.client.render.fog.FogRenderer;
|
||||
//$$ import java.util.Collections;
|
||||
//#endif
|
||||
|
||||
//#if MC>=12102
|
||||
//$$ import com.mojang.blaze3d.systems.ProjectionType;
|
||||
//#endif
|
||||
@@ -523,7 +531,8 @@ public class VideoRenderer implements RenderInfo {
|
||||
RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
//#endif
|
||||
//#endif
|
||||
//#if MC>=11700
|
||||
//#if MC>=12106
|
||||
//#elseif MC>=11700
|
||||
//$$ RenderSystem.setProjectionMatrix(Matrix4f.projectionMatrix(
|
||||
//$$ 0,
|
||||
//$$ (float) (window.getFramebufferWidth() / window.getScaleFactor()),
|
||||
@@ -591,7 +600,12 @@ public class VideoRenderer implements RenderInfo {
|
||||
int mouseX = (int) mc.mouse.getX() * window.getScaledWidth() / Math.max(window.getWidth(), 1);
|
||||
int mouseY = (int) mc.mouse.getY() * window.getScaledHeight() / Math.max(window.getHeight(), 1);
|
||||
|
||||
//#if MC>=12000
|
||||
//#if MC>=12106
|
||||
//$$ GameRendererAccessor gameRenderer = (GameRendererAccessor) mc.gameRenderer;
|
||||
//$$ GuiRenderState guiRenderState = gameRenderer.getGuiState();
|
||||
//$$ guiRenderState.clear();
|
||||
//$$ DrawContext drawContext = new DrawContext(mc, guiRenderState);
|
||||
//#elseif MC>=12000
|
||||
//$$ DrawContext drawContext = new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers());
|
||||
//#endif
|
||||
|
||||
@@ -611,15 +625,26 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
} else {
|
||||
gui.toMinecraft().tick();
|
||||
//#if MC>=12106
|
||||
//$$ gui.toMinecraft().renderWithTooltip(
|
||||
//#else
|
||||
gui.toMinecraft().render(
|
||||
//#endif
|
||||
//#if MC>=12000
|
||||
//$$ new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers()),
|
||||
//$$ drawContext,
|
||||
//#elseif MC>=11600
|
||||
new MatrixStack(),
|
||||
//#endif
|
||||
mouseX, mouseY, 0);
|
||||
}
|
||||
//#if MC>=12000
|
||||
//#if MC>=12106
|
||||
//$$ var orgFog = RenderSystem.getShaderFog();
|
||||
//$$ var orgProjBuf = RenderSystem.getProjectionMatrixBuffer();
|
||||
//$$ var orgProjType = RenderSystem.getProjectionType();
|
||||
//$$ gameRenderer.getGuiRenderer().render(gameRenderer.getFogRenderer().getFogBuffer(FogRenderer.FogType.NONE));
|
||||
//$$ RenderSystem.setShaderFog(orgFog);
|
||||
//$$ RenderSystem.setProjectionMatrix(orgProjBuf, orgProjType);
|
||||
//#elseif MC>=12000
|
||||
//$$ drawContext.draw();
|
||||
//#endif
|
||||
//#else
|
||||
|
||||
@@ -12,8 +12,10 @@ import static com.replaymod.core.versions.MCVer.popMatrix;
|
||||
import static com.replaymod.core.versions.MCVer.pushMatrix;
|
||||
|
||||
//#if MC>=12105
|
||||
//#if MC<12106
|
||||
//$$ import com.mojang.blaze3d.buffers.BufferType;
|
||||
//$$ import com.mojang.blaze3d.buffers.BufferUsage;
|
||||
//#endif
|
||||
//$$ import com.mojang.blaze3d.buffers.GpuBuffer;
|
||||
//$$ import com.mojang.blaze3d.systems.CommandEncoder;
|
||||
//$$ import com.mojang.blaze3d.systems.GpuDevice;
|
||||
@@ -136,10 +138,18 @@ public class NoGuiScreenshot {
|
||||
//#if MC>=12105
|
||||
//$$ Image image;
|
||||
//$$ GpuDevice device = RenderSystem.getDevice();
|
||||
//#if MC>=12106
|
||||
//$$ try (GpuBuffer gpuBuffer = device.createBuffer(null, GpuBuffer.USAGE_COPY_DST | GpuBuffer.USAGE_MAP_READ, frameWidth * frameHeight * 4)) {
|
||||
//#else
|
||||
//$$ try (GpuBuffer gpuBuffer = device.createBuffer(null, BufferType.PIXEL_PACK, BufferUsage.STATIC_READ, frameWidth * frameHeight * 4)) {
|
||||
//#endif
|
||||
//$$ CommandEncoder cmd = device.createCommandEncoder();
|
||||
//$$ cmd.copyTextureToBuffer(mc.getFramebuffer().getColorAttachment(), gpuBuffer, 0, () -> {}, 0);
|
||||
//$$ try (GpuBuffer.ReadView readView = cmd.readBuffer(gpuBuffer)) {
|
||||
//#if MC>=12106
|
||||
//$$ try (GpuBuffer.MappedView readView = cmd.mapBuffer(gpuBuffer, true, false)) {
|
||||
//#else
|
||||
//$$ try (GpuBuffer.ReadView readView = cmd.readBuffer(gpuBuffer)) {
|
||||
//#endif
|
||||
//$$ NativeImage nativeImage = new NativeImage(frameWidth, frameHeight, false);
|
||||
//$$ for (int y = 0; y < frameHeight; ++y) {
|
||||
//$$ for (int x = 0; x < frameWidth; ++x) {
|
||||
|
||||
@@ -45,6 +45,12 @@ import net.minecraft.network.ClientConnection;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ import com.replaymod.render.mixin.GameRendererAccessor;
|
||||
//$$ import net.minecraft.client.gui.render.state.GuiRenderState;
|
||||
//$$ import net.minecraft.client.render.fog.FogRenderer;
|
||||
//#endif
|
||||
|
||||
//#if MC>=12105
|
||||
//$$ import net.minecraft.entity.PositionInterpolator;
|
||||
//#endif
|
||||
@@ -219,7 +225,9 @@ public class ReplayHandler {
|
||||
//#endif
|
||||
|
||||
// Force re-creation of camera entity by unloading the previous world
|
||||
//#if MC>=11400
|
||||
//#if MC>=12106
|
||||
//$$ mc.disconnectWithProgressScreen();
|
||||
//#elseif MC>=11400
|
||||
mc.disconnect();
|
||||
//#else
|
||||
//$$ // We need to re-set the GUI screen because having one with `allowsUserInput = true` active during world
|
||||
@@ -261,7 +269,9 @@ public class ReplayHandler {
|
||||
}
|
||||
|
||||
if (mc.world != null) {
|
||||
//#if MC>=11400
|
||||
//#if MC>=12106
|
||||
//$$ mc.disconnectWithProgressScreen();
|
||||
//#elseif MC>=11400
|
||||
mc.disconnect();
|
||||
//#else
|
||||
//$$ mc.world.sendQuittingDisconnectingPacket();
|
||||
@@ -743,7 +753,8 @@ public class ReplayHandler {
|
||||
RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
//#endif
|
||||
//#endif
|
||||
//#if MC>=11700
|
||||
//#if MC>=12106
|
||||
//#elseif MC>=11700
|
||||
//$$ RenderSystem.setProjectionMatrix(Matrix4f.projectionMatrix(
|
||||
//$$ 0,
|
||||
//$$ (float) (window.getFramebufferWidth() / window.getScaleFactor()),
|
||||
@@ -787,7 +798,18 @@ public class ReplayHandler {
|
||||
//#endif
|
||||
|
||||
guiScreen.toMinecraft().init(mc, window.getScaledWidth(), window.getScaledHeight());
|
||||
//#if MC>=12000
|
||||
//#if MC>=12106
|
||||
//$$ GameRendererAccessor gameRenderer = (GameRendererAccessor) mc.gameRenderer;
|
||||
//$$ GuiRenderState guiRenderState = gameRenderer.getGuiState();
|
||||
//$$ guiRenderState.clear();
|
||||
//$$ guiScreen.toMinecraft().renderWithTooltip(new DrawContext(mc, guiRenderState), 0, 0, 0);
|
||||
//$$ var orgFog = RenderSystem.getShaderFog();
|
||||
//$$ var orgProjBuf = RenderSystem.getProjectionMatrixBuffer();
|
||||
//$$ var orgProjType = RenderSystem.getProjectionType();
|
||||
//$$ gameRenderer.getGuiRenderer().render(gameRenderer.getFogRenderer().getFogBuffer(FogRenderer.FogType.NONE));
|
||||
//$$ RenderSystem.setShaderFog(orgFog);
|
||||
//$$ RenderSystem.setProjectionMatrix(orgProjBuf, orgProjType);
|
||||
//#elseif MC>=12000
|
||||
//$$ DrawContext drawContext = new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers());
|
||||
//$$ guiScreen.toMinecraft().render(drawContext, 0, 0, 0);
|
||||
//$$ drawContext.draw();
|
||||
|
||||
@@ -31,6 +31,10 @@ import net.minecraft.stat.StatHandler;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.Box;
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ import net.minecraft.util.PlayerInput;
|
||||
//#endif
|
||||
|
||||
//#if FABRIC>=1
|
||||
//#else
|
||||
//$$ import net.minecraftforge.client.event.EntityViewRenderEvent;
|
||||
@@ -164,7 +168,11 @@ public class CameraEntity
|
||||
, recipeBook
|
||||
//#endif
|
||||
//#if MC>=11600
|
||||
//#if MC>=12106
|
||||
//$$ , PlayerInput.DEFAULT
|
||||
//#else
|
||||
, false
|
||||
//#endif
|
||||
, false
|
||||
//#endif
|
||||
);
|
||||
|
||||
@@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ import net.minecraft.util.PlayerInput;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
//#else
|
||||
@@ -51,7 +55,9 @@ public abstract class Mixin_CreateReplayCamera {
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
//#if MC>=11602
|
||||
//#if MC>=12106
|
||||
//$$ @Inject(method = "createPlayer(Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/stat/StatHandler;Lnet/minecraft/client/recipebook/ClientRecipeBook;Lnet/minecraft/util/PlayerInput;Z)Lnet/minecraft/client/network/ClientPlayerEntity;", at=@At("HEAD"), cancellable = true)
|
||||
//#elseif MC>=11602
|
||||
@Inject(method = "createPlayer(Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/stat/StatHandler;Lnet/minecraft/client/recipebook/ClientRecipeBook;ZZ)Lnet/minecraft/client/network/ClientPlayerEntity;", at=@At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//$$ @Inject(method = "createPlayer", at=@At("HEAD"), cancellable = true)
|
||||
@@ -65,7 +71,11 @@ public abstract class Mixin_CreateReplayCamera {
|
||||
StatHandler statisticsManager,
|
||||
ClientRecipeBook recipeBookClient,
|
||||
//#if MC>=11600
|
||||
//#if MC>=12106
|
||||
//$$ PlayerInput playerInput,
|
||||
//#else
|
||||
boolean lastIsHoldingSneakKey,
|
||||
//#endif
|
||||
boolean lastSprinting,
|
||||
//#endif
|
||||
CallbackInfoReturnable<ClientPlayerEntity> ci
|
||||
|
||||
@@ -37,6 +37,22 @@ import static de.johni0702.minecraft.gui.versions.MCVer.popScissorState;
|
||||
import static de.johni0702.minecraft.gui.versions.MCVer.pushScissorState;
|
||||
import static de.johni0702.minecraft.gui.versions.MCVer.setScissorDisabled;
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ import com.replaymod.replay.mixin.DrawContextAccessor;
|
||||
//$$ import com.replaymod.render.mixin.GameRendererAccessor;
|
||||
//$$ import net.minecraft.client.MinecraftClient;
|
||||
//$$ import net.minecraft.client.gui.ScreenRect;
|
||||
//$$ import net.minecraft.client.gui.render.SpecialGuiElementRenderer;
|
||||
//$$ import net.minecraft.client.gui.render.state.special.SpecialGuiElementRenderState;
|
||||
//$$ import net.minecraft.client.util.ClosableFactory;
|
||||
//$$ import net.minecraft.client.util.Pool;
|
||||
//$$ import net.minecraft.client.render.RenderLayer;
|
||||
//$$ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
//$$ import org.jetbrains.annotations.Nullable;
|
||||
//$$ import java.util.ArrayList;
|
||||
//$$ import java.util.List;
|
||||
//#endif
|
||||
|
||||
//#if MC>=12105
|
||||
//$$ import net.minecraft.client.render.RenderLayer;
|
||||
//$$ import net.minecraft.client.render.VertexConsumer;
|
||||
@@ -116,6 +132,10 @@ public class GuiKeyframeTimeline extends AbstractGuiTimeline<GuiKeyframeTimeline
|
||||
|
||||
renderer.bindTexture(ReplayMod.TEXTURE);
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ TimeTimelineLinesRenderState linesRenderState = new TimeTimelineLinesRenderState();
|
||||
//#endif
|
||||
|
||||
SPTimeline timeline = mod.getCurrentTimeline();
|
||||
|
||||
timeline.getTimeline().getPaths().stream().flatMap(path -> path.getKeyframes().stream()).forEach(keyframe -> {
|
||||
@@ -188,6 +208,12 @@ public class GuiKeyframeTimeline extends AbstractGuiTimeline<GuiKeyframeTimeline
|
||||
// And finally another vertical bit (the timeline is already crammed enough, so only the border)
|
||||
Vector2f p4 = new Vector2f(keyframeTimelineLeft + positionXKeyframeTimeline, keyframeTimelineTop + BORDER_TOP);
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ linesRenderState.color = color;
|
||||
//$$ linesRenderState.line(p1, p2);
|
||||
//$$ linesRenderState.line(p2, p3);
|
||||
//$$ linesRenderState.line(p3, p4);
|
||||
//#else
|
||||
MatrixStack matrixStack = renderer.getMatrixStack();
|
||||
emitLine(matrixStack, buffer, p1, p2, color);
|
||||
emitLine(matrixStack, buffer, p2, p3, color);
|
||||
@@ -222,10 +248,31 @@ public class GuiKeyframeTimeline extends AbstractGuiTimeline<GuiKeyframeTimeline
|
||||
//#endif
|
||||
|
||||
popScissorState();
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ if (!linesRenderState.lines.isEmpty()) {
|
||||
//$$ MinecraftClient mc = getMinecraft();
|
||||
//$$ int scale = mc.getWindow().getScaleFactor();
|
||||
//$$ // MC's special rendering code has multiple issues, we'll use a size matching the screen to avoid some
|
||||
//$$ linesRenderState.x1 = 0;
|
||||
//$$ linesRenderState.y1 = 0;
|
||||
//$$ linesRenderState.x2 = mc.getWindow().getFramebufferWidth() / scale;
|
||||
//$$ linesRenderState.y2 = mc.getWindow().getFramebufferHeight() / scale;
|
||||
//$$
|
||||
//$$ Pool pool = ((GameRendererAccessor) mc.gameRenderer).getPool();
|
||||
//$$ TimeTimelineLinesRenderer linesRenderer = pool.acquire(TimeTimelineLinesRenderer.FACTORY);
|
||||
//$$ pushScissorState();
|
||||
//$$ setScissorDisabled();
|
||||
//$$ linesRenderer.render(linesRenderState, ((DrawContextAccessor) renderer.getContext()).getState(), scale);
|
||||
//$$ popScissorState();
|
||||
//$$ pool.release(TimeTimelineLinesRenderer.FACTORY, linesRenderer); // Note: Assumes we only render one per frame
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
// Draw colored quads on spectator path segments
|
||||
for (PathSegment segment : timeline.getPositionPath().getSegments()) {
|
||||
if (segment.getInterpolator() == null
|
||||
@@ -248,6 +295,65 @@ public class GuiKeyframeTimeline extends AbstractGuiTimeline<GuiKeyframeTimeline
|
||||
super.drawTimelineCursor(renderer, size);
|
||||
}
|
||||
|
||||
//#if MC>=12106
|
||||
//$$ private static class TimeTimelineLinesRenderState implements SpecialGuiElementRenderState {
|
||||
//$$ int x1, x2, y1, y2;
|
||||
//$$ ScreenRect scissorState;
|
||||
//$$
|
||||
//$$ List<Pair<Vector2f, Vector2f>> lines = new ArrayList<>();
|
||||
//$$ int color;
|
||||
//$$
|
||||
//$$ public void line(Vector2f p1, Vector2f p2) {
|
||||
//$$ lines.add(Pair.of(p1, p2));
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override public int x1() {return x1;}
|
||||
//$$ @Override public int x2() {return x2;}
|
||||
//$$ @Override public int y1() {return y1;}
|
||||
//$$ @Override public int y2() {return y2;}
|
||||
//$$ @Override public float comp_4133() {return 1; /* scale */}
|
||||
//$$ @Override public @Nullable ScreenRect comp_4128() {return scissorState;}
|
||||
//$$ @Override public @Nullable ScreenRect comp_4274() {return SpecialGuiElementRenderState.createBounds(x1, y1, x2, y2, scissorState);}
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private static class TimeTimelineLinesRenderer extends SpecialGuiElementRenderer<TimeTimelineLinesRenderState> {
|
||||
//$$ private static ClosableFactory<TimeTimelineLinesRenderer> FACTORY = new ClosableFactory<>() {
|
||||
//$$ @Override
|
||||
//$$ public TimeTimelineLinesRenderer create() {
|
||||
//$$ return new TimeTimelineLinesRenderer(MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers());
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public void close(TimeTimelineLinesRenderer object) {
|
||||
//$$ object.close();
|
||||
//$$ }
|
||||
//$$ };
|
||||
//$$
|
||||
//$$ protected TimeTimelineLinesRenderer(VertexConsumerProvider.Immediate immediate) {
|
||||
//$$ super(immediate);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public Class<TimeTimelineLinesRenderState> getElementClass() {
|
||||
//$$ return TimeTimelineLinesRenderState.class;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ protected void render(TimeTimelineLinesRenderState state, MatrixStack matrixStack) {
|
||||
//$$ matrixStack.translate(-state.x2 / 2f, -state.y2, 100);
|
||||
//$$ RenderSystem.lineWidth(2);
|
||||
//$$ for (Pair<Vector2f, Vector2f> line : state.lines) {
|
||||
//$$ emitLine(matrixStack, vertexConsumers.getBuffer(RenderLayer.LINES), line.getLeft(), line.getRight(), state.color);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ protected String getName() {
|
||||
//$$ return "time_timeline_lines";
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private void drawQuadOnSegment(GuiRenderer renderer, int visibleWidth, PathSegment segment, int y, int color) {
|
||||
int startTime = getOffset();
|
||||
int visibleTime = (int) (getZoom() * getLength());
|
||||
|
||||
@@ -34,6 +34,8 @@ import org.lwjgl.opengl.GL11;
|
||||
//$$ import net.minecraft.client.render.RenderLayer;
|
||||
//$$ import net.minecraft.client.render.VertexConsumer;
|
||||
//$$ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
//#else
|
||||
import static com.replaymod.core.versions.MCVer.bindTexture;
|
||||
//#endif
|
||||
|
||||
//#if MC>=12102
|
||||
@@ -54,7 +56,6 @@ import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.replaymod.core.ReplayMod.TEXTURE;
|
||||
import static com.replaymod.core.versions.MCVer.bindTexture;
|
||||
import static com.replaymod.core.versions.MCVer.emitLine;
|
||||
import static com.replaymod.core.versions.MCVer.popMatrix;
|
||||
import static com.replaymod.core.versions.MCVer.pushMatrix;
|
||||
@@ -310,7 +311,9 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
|
||||
private void drawPoint(Vector3f view, Vector3f pos, Keyframe keyframe) {
|
||||
|
||||
//#if MC<12105
|
||||
bindTexture(TEXTURE);
|
||||
//#endif
|
||||
|
||||
float posX = 80f / ReplayMod.TEXTURE_SIZE;
|
||||
float posY = 0f;
|
||||
@@ -332,7 +335,11 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
//#if MC>=12105
|
||||
//$$ VertexConsumerProvider.Immediate immediate = mc.getBufferBuilders().getEntityVertexConsumers();
|
||||
//$$ immediate.draw();
|
||||
//#if MC>=12106
|
||||
//$$ VertexConsumer buffer = immediate.getBuffer(RenderLayer.getTextSeeThrough(TEXTURE));
|
||||
//#else
|
||||
//$$ VertexConsumer buffer = immediate.getBuffer(RenderLayer.getGuiTexturedOverlay(TEXTURE));
|
||||
//#endif
|
||||
//#else
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
//#if MC>=12100
|
||||
@@ -343,10 +350,10 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
buffer.vertex(minX, minY, 0).texture(posX + size, posY + size).color(255, 255, 255, 255).next();
|
||||
buffer.vertex(minX, maxY, 0).texture(posX + size, posY).color(255, 255, 255, 255).next();
|
||||
buffer.vertex(maxX, maxY, 0).texture(posX, posY).color(255, 255, 255, 255).next();
|
||||
buffer.vertex(maxX, minY, 0).texture(posX, posY + size).color(255, 255, 255, 255).next();
|
||||
vertex(buffer, minX, minY, 0, posX + size, posY + size, 255);
|
||||
vertex(buffer, minX, maxY, 0, posX + size, posY, 255);
|
||||
vertex(buffer, maxX, maxY, 0, posX, posY, 255);
|
||||
vertex(buffer, maxX, minY, 0, posX, posY + size, 255);
|
||||
|
||||
pushMatrix();
|
||||
|
||||
@@ -378,7 +385,9 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
|
||||
private void drawCamera(Vector3f view, Vector3f pos, Vector3f rot) {
|
||||
|
||||
//#if MC<12105
|
||||
bindTexture(CAMERA_HEAD);
|
||||
//#endif
|
||||
|
||||
pushMatrix();
|
||||
|
||||
@@ -434,13 +443,11 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
|
||||
float cubeSize = 0.5f;
|
||||
|
||||
//#if MC>=12100
|
||||
//$$ float r = -cubeSize/2;
|
||||
//#else
|
||||
double r = -cubeSize/2;
|
||||
//#endif
|
||||
float r = -cubeSize/2;
|
||||
|
||||
//#if MC>=12105
|
||||
//#if MC>=12106
|
||||
//$$ buffer = immediate.getBuffer(RenderLayer.getText(CAMERA_HEAD));
|
||||
//#elseif MC>=12105
|
||||
//$$ buffer = immediate.getBuffer(RenderLayer.getGuiTextured(CAMERA_HEAD));
|
||||
//#elseif MC>=12100
|
||||
//$$ buffer = tessellator.begin(net.minecraft.client.render.VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
|
||||
@@ -449,40 +456,40 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
//#endif
|
||||
|
||||
//back
|
||||
buffer.vertex(r, r + cubeSize, r).texture(3 * 8 / 64f, 8 / 64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r + cubeSize, r).texture(4*8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r, r).texture(4*8/64f, 2*8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r, r).texture(3*8/64f, 2*8/64f).color(255, 255, 255, 200).next();
|
||||
vertex(buffer, r, r + cubeSize, r, 3 * 8 / 64f, 8 / 64f, 200);
|
||||
vertex(buffer, r + cubeSize, r + cubeSize, r, 4*8/64f, 8/64f, 200);
|
||||
vertex(buffer, r + cubeSize, r, r, 4*8/64f, 2*8/64f, 200);
|
||||
vertex(buffer, r, r, r, 3*8/64f, 2*8/64f, 200);
|
||||
|
||||
//front
|
||||
buffer.vertex(r + cubeSize, r, r + cubeSize).texture(2 * 8 / 64f, 2*8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r + cubeSize, r + cubeSize).texture(2 * 8 / 64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r + cubeSize, r + cubeSize).texture(8 / 64f, 8 / 64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r, r + cubeSize).texture(8 / 64f, 2*8/64f).color(255, 255, 255, 200).next();
|
||||
vertex(buffer, r + cubeSize, r, r + cubeSize, 2 * 8 / 64f, 2*8/64f, 200);
|
||||
vertex(buffer, r + cubeSize, r + cubeSize, r + cubeSize, 2 * 8 / 64f, 8/64f, 200);
|
||||
vertex(buffer, r, r + cubeSize, r + cubeSize, 8 / 64f, 8 / 64f, 200);
|
||||
vertex(buffer, r, r, r + cubeSize, 8 / 64f, 2*8/64f, 200);
|
||||
|
||||
//left
|
||||
buffer.vertex(r + cubeSize, r + cubeSize, r).texture(0, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r + cubeSize, r + cubeSize).texture(8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r, r + cubeSize).texture(8/64f, 2*8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r+cubeSize, r, r).texture(0, 2*8/64f).color(255, 255, 255, 200).next();
|
||||
vertex(buffer, r + cubeSize, r + cubeSize, r, 0, 8/64f, 200);
|
||||
vertex(buffer, r + cubeSize, r + cubeSize, r + cubeSize, 8/64f, 8/64f, 200);
|
||||
vertex(buffer, r + cubeSize, r, r + cubeSize, 8/64f, 2*8/64f, 200);
|
||||
vertex(buffer, r+cubeSize, r, r, 0, 2*8/64f, 200);
|
||||
|
||||
//right
|
||||
buffer.vertex(r, r + cubeSize, r + cubeSize).texture(2*8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r + cubeSize, r).texture(3*8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r, r).texture(3*8/64f, 2*8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r, r + cubeSize).texture(2 * 8 / 64f, 2 * 8 / 64f).color(255, 255, 255, 200).next();
|
||||
vertex(buffer, r, r + cubeSize, r + cubeSize, 2*8/64f, 8/64f, 200);
|
||||
vertex(buffer, r, r + cubeSize, r, 3*8/64f, 8/64f, 200);
|
||||
vertex(buffer, r, r, r, 3*8/64f, 2*8/64f, 200);
|
||||
vertex(buffer, r, r, r + cubeSize, 2 * 8 / 64f, 2 * 8 / 64f, 200);
|
||||
|
||||
//bottom
|
||||
buffer.vertex(r + cubeSize, r, r).texture(3*8/64f, 0).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r, r + cubeSize).texture(3*8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r, r + cubeSize).texture(2*8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r, r).texture(2 * 8 / 64f, 0).color(255, 255, 255, 200).next();
|
||||
vertex(buffer, r + cubeSize, r, r, 3*8/64f, 0, 200);
|
||||
vertex(buffer, r + cubeSize, r, r + cubeSize, 3*8/64f, 8/64f, 200);
|
||||
vertex(buffer, r, r, r + cubeSize, 2*8/64f, 8/64f, 200);
|
||||
vertex(buffer, r, r, r, 2 * 8 / 64f, 0, 200);
|
||||
|
||||
//top
|
||||
buffer.vertex(r, r + cubeSize, r).texture(8/64f, 0).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r, r + cubeSize, r + cubeSize).texture(8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r + cubeSize, r + cubeSize).texture(2*8/64f, 8/64f).color(255, 255, 255, 200).next();
|
||||
buffer.vertex(r + cubeSize, r + cubeSize, r).texture(2 * 8 / 64f, 0).color(255, 255, 255, 200).next();
|
||||
vertex(buffer, r, r + cubeSize, r, 8/64f, 0, 200);
|
||||
vertex(buffer, r, r + cubeSize, r + cubeSize, 8/64f, 8/64f, 200);
|
||||
vertex(buffer, r + cubeSize, r + cubeSize, r + cubeSize, 2*8/64f, 8/64f, 200);
|
||||
vertex(buffer, r + cubeSize, r + cubeSize, r, 2 * 8 / 64f, 0, 200);
|
||||
|
||||
//#if MC>=12105
|
||||
//$$ immediate.draw();
|
||||
@@ -505,6 +512,18 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
popMatrix();
|
||||
}
|
||||
|
||||
//#if MC>=12105
|
||||
//$$ private void vertex(VertexConsumer buffer, float x, float y, float z, float u, float v, int alpha) {
|
||||
//#else
|
||||
private void vertex(BufferBuilder buffer, float x, float y, float z, float u, float v, int alpha) {
|
||||
//#endif
|
||||
//#if MC>=12106
|
||||
//$$ buffer.vertex(x, y, z).color(255, 255, 255, alpha).texture(u, v).light(240, 240);
|
||||
//#else
|
||||
buffer.vertex(x, y, z).texture(u, v).color(255, 255, 255, alpha).next();
|
||||
//#endif
|
||||
}
|
||||
|
||||
private class KeyframeComparator implements Comparator<Pair<Keyframe, Vector3f>> {
|
||||
private final Vector3f viewPos;
|
||||
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
//#else
|
||||
//$$ "EntityOtherPlayerMPAccessor",
|
||||
//#endif
|
||||
//#if MC>=12106
|
||||
//$$ "DrawContextAccessor",
|
||||
//#endif
|
||||
"EntityPlayerAccessor",
|
||||
"FirstPersonRendererAccessor",
|
||||
//#if MC>=10904
|
||||
|
||||
@@ -100,7 +100,11 @@ public abstract class Mixin_ForceChunkLoading implements IForceChunkLoading {
|
||||
}
|
||||
// MC sometimes schedules invalid chunks when you're outside of loaded chunks (e.g. y > 256)
|
||||
if (builtChunk.shouldBuild()) {
|
||||
//#if MC>=12106
|
||||
//$$ builtChunk.scheduleRebuild(chunkRendererRegionBuilder);
|
||||
//#else
|
||||
builtChunk.scheduleRebuild(this.field_45614, chunkRendererRegionBuilder);
|
||||
//#endif
|
||||
areWeDoneYet = false;
|
||||
}
|
||||
builtChunk.cancelRebuild();
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
|
||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||
import com.mojang.blaze3d.textures.GpuTexture;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public abstract class Mixin_PreserveDepthDuringGuiRendering {
|
||||
@WrapWithCondition(
|
||||
method = "render",
|
||||
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/CommandEncoder;clearDepthTexture(Lcom/mojang/blaze3d/textures/GpuTexture;D)V")
|
||||
)
|
||||
private boolean replayModRender_skipClearWhenRecordingDepth(CommandEncoder instance, GpuTexture texture, double v) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MinecraftClient.getInstance().gameRenderer).replayModRender_getHandler();
|
||||
return handler == null || !handler.getSettings().isDepthMap();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
|
||||
import com.mojang.blaze3d.systems.CommandEncoder;
|
||||
import com.mojang.blaze3d.textures.GpuTexture;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public abstract class Mixin_PreserveDepthDuringHandRendering {
|
||||
@WrapWithCondition(
|
||||
method = "renderWorld",
|
||||
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/CommandEncoder;clearDepthTexture(Lcom/mojang/blaze3d/textures/GpuTexture;D)V")
|
||||
)
|
||||
private boolean replayModRender_skipClearWhenRecordingDepth(CommandEncoder instance, GpuTexture texture, double v) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) this).replayModRender_getHandler();
|
||||
return handler == null || !handler.getSettings().isDepthMap();
|
||||
}
|
||||
}
|
||||
0
versions/1.21.7/.gitkeep
Normal file
0
versions/1.21.7/.gitkeep
Normal file
2
versions/1.21.7/gradle.properties
Normal file
2
versions/1.21.7/gradle.properties
Normal file
@@ -0,0 +1,2 @@
|
||||
essential.defaults.loom.minecraft=com.mojang:minecraft:1.21.7
|
||||
essential.defaults.loom.mappings=net.fabricmc:yarn:1.21.7+build.1
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import net.minecraft.client.render.fog.FogRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
|
||||
@Mixin(FogRenderer.class)
|
||||
public abstract class Mixin_ChromaKeyDisableFog {
|
||||
@ModifyVariable(method = "getFogBuffer", at = @At("HEAD"), argsOnly = true)
|
||||
private FogRenderer.FogType replayModRender_suppressFogIfChromaKeyIsActive(FogRenderer.FogType fogType) {
|
||||
MinecraftClient mc = MCVer.getMinecraft();
|
||||
if (mc == null) return fogType;
|
||||
GameRenderer gameRenderer = mc.gameRenderer;
|
||||
if (gameRenderer == null) return fogType;
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) gameRenderer).replayModRender_getHandler();
|
||||
if (handler != null && handler.getSettings().getChromaKeyingColor() != null) {
|
||||
fogType = FogRenderer.FogType.NONE;
|
||||
}
|
||||
return fogType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.replaymod.replay.mixin;
|
||||
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.render.state.GuiRenderState;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(DrawContext.class)
|
||||
public interface DrawContextAccessor {
|
||||
@Accessor
|
||||
GuiRenderState getState();
|
||||
}
|
||||
Reference in New Issue
Block a user