diff --git a/build.gradle.kts b/build.gradle.kts index 66d57726..d7bb33d6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,7 +3,7 @@ import gg.essential.gradle.util.* plugins { java - id("com.github.johnrengelman.shadow") apply false + id("io.github.goooler.shadow") apply false id("gg.essential.multi-version") id("gg.essential.defaults.repo") id("gg.essential.defaults.java") @@ -86,6 +86,7 @@ dependencies { 12002 -> "0.91.2+1.20.2" 12004 -> "0.91.2+1.20.4" 12006 -> "0.98.0+1.20.6" + 12100 -> "0.100.3+1.21" else -> throw UnsupportedOperationException() } val fabricApiModules = mutableListOf( @@ -155,7 +156,7 @@ dependencies { implementation(shadow("com.github.ReplayMod.JavaBlend:2.79.0:a0696f8")!!) - implementation(shadow("com.github.ReplayMod:ReplayStudio:6d59510")!!) + implementation(shadow("com.github.ReplayMod:ReplayStudio:5d17653db9")!!) // FIXME this should be pulled in by ReplayStudio, and IntelliJ sees it, but javac for some reason does not implementation("com.github.viaversion:opennbt:0a02214") // 2.0-SNAPSHOT (ViaVersion Edition) @@ -164,6 +165,7 @@ dependencies { if (platform.isFabric) { val modMenuVersion = when { + mcVersion >= 12100 -> "11.0.0-rc.4" mcVersion >= 12006 -> "10.0.0-beta.1" mcVersion >= 12003 -> "9.0.0-pre.1" mcVersion >= 12002 -> "8.0.0" diff --git a/jGui b/jGui index 7d60bf05..d2626659 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 7d60bf0532fe49f14575f725513e800b58613d47 +Subproject commit d2626659b0a7e6904787bf29904e319c0ca245aa diff --git a/root.gradle.kts b/root.gradle.kts index 9fba13eb..3342ee39 100755 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -202,6 +202,7 @@ val doRelease by tasks.registering { defaultTasks("bundleJar") preprocess { + val mc12100 = createNode("1.21", 12100, "yarn") val mc12006 = createNode("1.20.6", 12006, "yarn") val mc12004 = createNode("1.20.4", 12004, "yarn") val mc12002 = createNode("1.20.2", 12002, "yarn") @@ -230,6 +231,7 @@ preprocess { val mc10800 = createNode("1.8", 10800, "srg") val mc10710 = createNode("1.7.10", 10710, "srg") + mc12100.link(mc12006) mc12006.link(mc12004) mc12004.link(mc12002, file("versions/mapping-fabric-1.20.4-1.20.2.txt")) mc12002.link(mc12001) diff --git a/settings.gradle.kts b/settings.gradle.kts index 4607dcc2..dac8a4c8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ pluginManagement { } plugins { id("gg.essential.multi-version.root") version "0.6.1" - id("com.github.johnrengelman.shadow") version "8.1.1" + id("io.github.goooler.shadow") version "8.1.7" } } @@ -39,6 +39,7 @@ val jGuiVersions = listOf( "1.20.2", "1.20.4", "1.20.6", + "1.21", ) val replayModVersions = listOf( // "1.7.10", @@ -68,6 +69,7 @@ val replayModVersions = listOf( "1.20.2", "1.20.4", "1.20.6", + "1.21", ) rootProject.buildFileName = "root.gradle.kts" diff --git a/src/main/java/com/replaymod/core/KeyBindingRegistry.java b/src/main/java/com/replaymod/core/KeyBindingRegistry.java index 40eff2ee..0b671c79 100644 --- a/src/main/java/com/replaymod/core/KeyBindingRegistry.java +++ b/src/main/java/com/replaymod/core/KeyBindingRegistry.java @@ -22,6 +22,7 @@ import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.client.util.InputUtil; import net.minecraft.util.Identifier; import static com.replaymod.core.ReplayMod.MOD_ID; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; //#else //$$ import net.minecraftforge.fml.client.registry.ClientRegistry; //#endif @@ -66,7 +67,7 @@ public class KeyBindingRegistry extends EventRegistrations { if (keyCode == 0) { keyCode = -1; } - Identifier id = new Identifier(MOD_ID, name.substring(LangResourcePack.LEGACY_KEY_PREFIX.length())); + Identifier id = identifier(MOD_ID, name.substring(LangResourcePack.LEGACY_KEY_PREFIX.length())); //#if MC>=11600 String key = String.format("key.%s.%s", id.getNamespace(), id.getPath()); KeyBinding keyBinding = new KeyBinding(key, InputUtil.Type.KEYSYM, keyCode, CATEGORY); diff --git a/src/main/java/com/replaymod/core/ReplayMod.java b/src/main/java/com/replaymod/core/ReplayMod.java index add813c7..ed1535dc 100644 --- a/src/main/java/com/replaymod/core/ReplayMod.java +++ b/src/main/java/com/replaymod/core/ReplayMod.java @@ -36,6 +36,8 @@ import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; + //#if MC>=12006 //$$ import net.minecraft.resource.ResourcePackInfo; //$$ import net.minecraft.resource.ResourcePackSource; @@ -52,9 +54,9 @@ public class ReplayMod implements Module, Scheduler { public static final String MOD_ID = "replaymod"; - public static final Identifier TEXTURE = new Identifier("replaymod", "replay_gui.png"); + public static final Identifier TEXTURE = identifier("replaymod", "replay_gui.png"); public static final int TEXTURE_SIZE = 256; - public static final Identifier LOGO_FAVICON = new Identifier("replaymod", "favicon_logo.png"); + public static final Identifier LOGO_FAVICON = identifier("replaymod", "favicon_logo.png"); private static final MinecraftClient mc = MCVer.getMinecraft(); diff --git a/src/main/java/com/replaymod/core/gui/GuiReplayButton.java b/src/main/java/com/replaymod/core/gui/GuiReplayButton.java index 2ee4d9e4..d14468e6 100644 --- a/src/main/java/com/replaymod/core/gui/GuiReplayButton.java +++ b/src/main/java/com/replaymod/core/gui/GuiReplayButton.java @@ -6,8 +6,10 @@ import de.johni0702.minecraft.gui.element.GuiButton; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.util.Identifier; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; + public class GuiReplayButton extends GuiButton { - public static final Identifier ICON = new Identifier("replaymod", "logo_button.png"); + public static final Identifier ICON = identifier("replaymod", "logo_button.png"); @Override public void draw(GuiRenderer renderer, ReadableDimension size, RenderInfo renderInfo) { diff --git a/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java b/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java index 5e09f787..14a720bd 100644 --- a/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java @@ -29,6 +29,13 @@ import java.util.concurrent.CompletableFuture; @Mixin(MinecraftClient.class) public interface MinecraftAccessor { + //#if MC>=12100 + //$$ @Accessor("renderTickCounter") + //$$ RenderTickCounter.Dynamic getTimer(); + //$$ @Accessor("renderTickCounter") + //$$ @Mutable + //$$ void setTimer(RenderTickCounter.Dynamic value); + //#else @Accessor("renderTickCounter") RenderTickCounter getTimer(); @Accessor("renderTickCounter") @@ -36,6 +43,7 @@ public interface MinecraftAccessor { @Mutable //#endif void setTimer(RenderTickCounter value); + //#endif //#if MC>=11400 @Accessor diff --git a/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java b/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java index 754cd090..f9f93277 100644 --- a/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java +++ b/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java @@ -48,16 +48,22 @@ public abstract class MixinMinecraft } //#endif + //#if MC>=12100 + //$$ private static final String GAME_RENDERER_RENDER = "Lnet/minecraft/client/render/GameRenderer;render(Lnet/minecraft/client/render/RenderTickCounter;Z)V"; + //#else + private static final String GAME_RENDERER_RENDER = "Lnet/minecraft/client/render/GameRenderer;render(FJZ)V"; + //#endif + @Inject(method = "render", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/render/GameRenderer;render(FJZ)V")) + target = GAME_RENDERER_RENDER)) private void preRender(boolean unused, CallbackInfo ci) { PreRenderCallback.EVENT.invoker().preRender(); } @Inject(method = "render", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/render/GameRenderer;render(FJZ)V", + target = GAME_RENDERER_RENDER, shift = At.Shift.AFTER)) private void postRender(boolean unused, CallbackInfo ci) { PostRenderCallback.EVENT.invoker().postRender(); diff --git a/src/main/java/com/replaymod/core/mixin/TimerAccessor.java b/src/main/java/com/replaymod/core/mixin/TimerAccessor.java index ee4ef016..3f9eed1e 100644 --- a/src/main/java/com/replaymod/core/mixin/TimerAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/TimerAccessor.java @@ -5,7 +5,11 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; +//#if MC>=12100 +//$$ @Mixin(RenderTickCounter.Dynamic.class) +//#else @Mixin(RenderTickCounter.class) +//#endif public interface TimerAccessor { //#if MC>=11200 @Accessor("tickTime") diff --git a/src/main/java/com/replaymod/core/utils/Restrictions.java b/src/main/java/com/replaymod/core/utils/Restrictions.java index c1543e83..a85df613 100644 --- a/src/main/java/com/replaymod/core/utils/Restrictions.java +++ b/src/main/java/com/replaymod/core/utils/Restrictions.java @@ -10,6 +10,7 @@ import net.minecraft.network.PacketByteBuf; //#if MC>=10904 import net.minecraft.util.Identifier; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; //#endif //#if MC<=10710 || MC>=12002 @@ -22,7 +23,7 @@ import net.minecraft.util.Identifier; */ public class Restrictions { //#if MC>=11400 - public static final Identifier PLUGIN_CHANNEL = new Identifier("replaymod", "restrict"); + public static final Identifier PLUGIN_CHANNEL = identifier("replaymod", "restrict"); //#else //$$ public static final String PLUGIN_CHANNEL = "Replay|Restrict"; //#endif @@ -77,7 +78,7 @@ public class Restrictions { } //#if MC>=12006 - //$$ public static final CustomPayload.Id ID = CustomPayload.id(PLUGIN_CHANNEL.toString()); + //$$ public static final CustomPayload.Id ID = new CustomPayload.Id<>(PLUGIN_CHANNEL); //$$ public static final PacketCodec CODEC = PacketCodec.ofStatic( //$$ (buf, payload) -> buf.writeBytes(payload.bytes()), //$$ buf -> { diff --git a/src/main/java/com/replaymod/core/utils/Utils.java b/src/main/java/com/replaymod/core/utils/Utils.java index 033a6d83..061598fe 100644 --- a/src/main/java/com/replaymod/core/utils/Utils.java +++ b/src/main/java/com/replaymod/core/utils/Utils.java @@ -68,6 +68,10 @@ import java.util.function.Consumer; import static com.replaymod.core.versions.MCVer.getMinecraft; +//#if MC>=12100 +//$$ import net.minecraft.util.crash.ReportType; +//#endif + public class Utils { private static Logger LOGGER = LogManager.getLogger(); @@ -248,7 +252,11 @@ public class Utils { public static GuiInfoPopup error(Logger logger, GuiContainer container, CrashReport crashReport, Runnable onClose) { // Convert crash report to string - String crashReportStr = crashReport.asString(); + String crashReportStr = crashReport.asString( + //#if MC>=12100 + //$$ ReportType.MINECRAFT_CRASH_REPORT + //#endif + ); // Log via logger logger.error(crashReportStr); @@ -259,7 +267,11 @@ public class Utils { File folder = new File(getMinecraft().runDirectory, "crash-reports"); File file = new File(folder, "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-client.txt"); logger.debug("Saving crash report to file: {}", file); + //#if MC>=12100 + //$$ crashReport.writeToFile(file.toPath(), ReportType.MINECRAFT_CRASH_REPORT); + //#else crashReport.writeToFile(file); + //#endif } catch (Throwable t) { logger.error("Saving crash report file:", t); } diff --git a/src/main/java/com/replaymod/core/versions/LangResourcePack.java b/src/main/java/com/replaymod/core/versions/LangResourcePack.java index 5e988552..03c0c74d 100644 --- a/src/main/java/com/replaymod/core/versions/LangResourcePack.java +++ b/src/main/java/com/replaymod/core/versions/LangResourcePack.java @@ -28,6 +28,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; + //#if FABRIC>=1 import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; @@ -253,7 +255,7 @@ public class LangResourcePack extends AbstractFileResourcePack { .map(LANG_FILE_NAME_PATTERN::matcher) .filter(Matcher::matches) .map(matcher -> String.format("%s_%s.json", matcher.group(1), matcher.group(1))) - .map(name -> new Identifier(ReplayMod.MOD_ID, "lang/" + name)) + .map(name -> identifier(ReplayMod.MOD_ID, "lang/" + name)) .forEach(consumer); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index 806b5f3c..341bd2d6 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -454,13 +454,15 @@ public class MCVer { //#if MC>=11700 //$$ .normal(n.x, n.y, n.z) //#endif - .next(); + ; + buffer.next(); buffer.vertex(p2.x, p2.y, p2.z) .color(r, g, b, a) //#if MC>=11700 //$$ .normal(n.x, n.y, n.z) //#endif - .next(); + ; + buffer.next(); } public static void bindTexture(Identifier id) { diff --git a/src/main/java/com/replaymod/core/versions/Patterns.java b/src/main/java/com/replaymod/core/versions/Patterns.java index 1d7e7aec..49954a56 100644 --- a/src/main/java/com/replaymod/core/versions/Patterns.java +++ b/src/main/java/com/replaymod/core/versions/Patterns.java @@ -46,6 +46,7 @@ import org.lwjgl.opengl.GL11; //#endif //#if MC>=11600 +import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.Vector3f; import net.minecraft.util.math.Matrix4f; @@ -367,6 +368,9 @@ class Patterns { //#endif } + //#if MC>=12100 + //$$ @Pattern private static void Tessellator_getBuffer() {} + //#else @Pattern private static BufferBuilder Tessellator_getBuffer(Tessellator tessellator) { //#if MC>=10800 @@ -375,6 +379,20 @@ class Patterns { //$$ return new BufferBuilder(tessellator); //#endif } + //#endif + + //#if MC>=11600 + @Pattern + private static void VertexConsumer_next(VertexConsumer buffer) { + //#if MC>=12100 + //$$ buffer./*next()*/getClass(); + //#else + buffer.next(); + //#endif + } + //#else + //$$ private static void VertexConsumer_next() {} + //#endif //#if MC<11700 @Pattern @@ -477,7 +495,9 @@ class Patterns { @Pattern private static float getRenderPartialTicks(MinecraftClient mc) { - //#if MC>=10900 + //#if MC>=12100 + //$$ return mc.getRenderTickCounter().getTickDelta(true); + //#elseif MC>=10900 return mc.getTickDelta(); //#else //$$ return ((com.replaymod.core.mixin.MinecraftAccessor) mc).getTimer().renderPartialTicks; @@ -524,7 +544,7 @@ class Patterns { //#endif } - //#if MC>=11600 + //#if MC>=11600 && MC<12100 @Pattern private static void BufferBuilder_beginLineStrip(BufferBuilder buffer, VertexFormat vertexFormat) { //#if MC>=11700 diff --git a/src/main/java/com/replaymod/core/versions/scheduler/SchedulerImpl.java b/src/main/java/com/replaymod/core/versions/scheduler/SchedulerImpl.java index dc3664fe..7c8ac70f 100644 --- a/src/main/java/com/replaymod/core/versions/scheduler/SchedulerImpl.java +++ b/src/main/java/com/replaymod/core/versions/scheduler/SchedulerImpl.java @@ -9,6 +9,10 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +//#if MC>=12100 +//$$ import net.minecraft.util.crash.ReportType; +//#endif + public class SchedulerImpl implements Scheduler { private static final MinecraftClient mc = MinecraftClient.getInstance(); @@ -113,7 +117,11 @@ public class SchedulerImpl implements Scheduler { runnable.run(); } catch (CrashException e) { e.printStackTrace(); + //#if MC>=12100 + //$$ System.err.println(e.getReport().asString(ReportType.MINECRAFT_CRASH_REPORT)); + //#else System.err.println(e.getReport().asString()); + //#endif mc.setCrashReport(e.getReport()); } finally { inRunLater = false; diff --git a/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java b/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java index 00b54bf3..b41ad1ee 100644 --- a/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java +++ b/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java @@ -31,7 +31,11 @@ public abstract class AbstractTimelinePlayer extends EventRegistrations { private Timeline timeline; protected long startOffset; private boolean wasAsyncMode; + //#if MC>=12100 + //$$ private RenderTickCounter.Dynamic orgTimer; + //#else private RenderTickCounter orgTimer; + //#endif private long lastTime; private long lastTimestamp; private ListenableFuture future; diff --git a/src/main/java/com/replaymod/pathing/player/ReplayTimer.java b/src/main/java/com/replaymod/pathing/player/ReplayTimer.java index e187f740..db650995 100644 --- a/src/main/java/com/replaymod/pathing/player/ReplayTimer.java +++ b/src/main/java/com/replaymod/pathing/player/ReplayTimer.java @@ -6,7 +6,11 @@ import net.minecraft.client.render.RenderTickCounter; /** * A timer that does not advance by itself. */ +//#if MC>=12100 +//$$ public class ReplayTimer extends RenderTickCounter.Dynamic { +//#else public class ReplayTimer extends RenderTickCounter { +//#endif //#if MC>=11600 public int ticksThisFrame; //#endif @@ -37,13 +41,28 @@ public class ReplayTimer extends RenderTickCounter { //#if MC>=11400 long sysClock //#endif + //#if MC>=12100 + //$$ , boolean tick + //#endif ) { + //#if MC>=12100 + //$$ if (!tick) return 0; + //#endif UpdatedCallback.EVENT.invoker().onUpdate(); //#if MC>=11600 return ticksThisFrame; //#endif } + //#if MC>=12100 + //$$ public float tickDelta; + //$$ + //$$ @Override + //$$ public float getTickDelta(boolean bl) { + //$$ return tickDelta; + //$$ } + //#endif + public interface UpdatedCallback { Event EVENT = Event.create((listeners) -> () -> { diff --git a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java index 93596d7a..ec851793 100644 --- a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java +++ b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java @@ -113,7 +113,21 @@ public class RecordingEventHandler extends EventRegistrations { try { ClientPlayerEntity player = mc.player; assert player != null; - //#if MC>=12002 + //#if MC>=12100 + //$$ packetListener.save(new EntitySpawnS2CPacket( + //$$ player.getId(), + //$$ player.getUuid(), + //$$ player.getX(), + //$$ player.getY(), + //$$ player.getZ(), + //$$ player.getPitch(), + //$$ player.getYaw(), + //$$ player.getType(), + //$$ 0, + //$$ player.getVelocity(), + //$$ player.getHeadYaw() + //$$ )); + //#elseif MC>=12002 //$$ packetListener.save(new EntitySpawnS2CPacket(player)); //#else packetListener.save(new PlayerSpawnS2CPacket(player)); diff --git a/src/main/java/com/replaymod/render/blend/BlendMaterials.java b/src/main/java/com/replaymod/render/blend/BlendMaterials.java index 1248352f..125c6990 100644 --- a/src/main/java/com/replaymod/render/blend/BlendMaterials.java +++ b/src/main/java/com/replaymod/render/blend/BlendMaterials.java @@ -5,8 +5,8 @@ import com.replaymod.render.blend.data.DMaterial; import com.replaymod.render.blend.data.DPackedFile; import com.replaymod.render.blend.data.DTexture; import de.johni0702.minecraft.gui.versions.Image; -import net.minecraft.client.util.GlAllocationUtils; import org.apache.commons.lang3.tuple.Pair; +import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import java.io.ByteArrayOutputStream; @@ -25,7 +25,7 @@ public class BlendMaterials { // Read raw image data from GL int width = GL11.glGetTexLevelParameteri(GL11.GL_TEXTURE_2D, 0, GL11.GL_TEXTURE_WIDTH); int height = GL11.glGetTexLevelParameteri(GL11.GL_TEXTURE_2D, 0, GL11.GL_TEXTURE_HEIGHT); - ByteBuffer buffer = GlAllocationUtils.allocateByteBuffer(width * height * 4); + ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * 4); GL11.glGetTexImage(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer); // Convert to Image diff --git a/src/main/java/com/replaymod/render/blend/Util.java b/src/main/java/com/replaymod/render/blend/Util.java index 64f33b27..a2d26181 100644 --- a/src/main/java/com/replaymod/render/blend/Util.java +++ b/src/main/java/com/replaymod/render/blend/Util.java @@ -5,13 +5,13 @@ import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Quaternion; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.util.GlAllocationUtils; import net.minecraft.nbt.CompoundTag; import net.minecraft.block.entity.BlockEntity; import org.blender.dna.Link; import org.blender.dna.ListBase; import org.blender.utils.BlenderFactory; import org.cakelab.blender.nio.CPointer; +import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import java.io.IOException; @@ -39,7 +39,7 @@ public class Util { } } - private static FloatBuffer floatBuffer = GlAllocationUtils.allocateByteBuffer(16 * 4).asFloatBuffer(); + private static FloatBuffer floatBuffer = BufferUtils.createByteBuffer(16 * 4).asFloatBuffer(); public static Matrix4f getGlMatrix(int matrix) { floatBuffer.clear(); //#if MC>=11400 diff --git a/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java index 925257fe..ea5dead6 100644 --- a/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/ODSFrameCapturer.java @@ -19,9 +19,11 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; + public class ODSFrameCapturer implements FrameCapturer { - private static final Identifier vertexResource = new Identifier("replaymod", "shader/ods.vert"); - private static final Identifier fragmentResource = new Identifier("replaymod", "shader/ods.frag"); + private static final Identifier vertexResource = identifier("replaymod", "shader/ods.vert"); + private static final Identifier fragmentResource = identifier("replaymod", "shader/ods.frag"); private final CubicPboOpenGlFrameCapturer left, right; private final Program shaderProgram; diff --git a/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java b/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java index 72d5a9d3..1b10cdff 100644 --- a/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java +++ b/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java @@ -27,8 +27,10 @@ import net.minecraft.client.texture.NativeImage; import java.nio.ByteBuffer; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; + public class GuiVideoRenderer extends GuiScreen implements Tickable { - private static final Identifier NO_PREVIEW_TEXTURE = new Identifier("replaymod", "logo.png"); + private static final Identifier NO_PREVIEW_TEXTURE = identifier("replaymod", "logo.png"); private final VideoRenderer renderer; diff --git a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java index ee68b87e..e05d21ca 100644 --- a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java +++ b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java @@ -93,7 +93,9 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe gameRenderer.setRenderHand(false); // makes no sense, we wouldn't even know where to put it } - //#if MC>=11400 + //#if MC>=12100 + //$$ mc.gameRenderer.render(mc.getRenderTickCounter(), true); + //#elseif MC>=11400 mc.gameRenderer.render(partialTicks, finishTimeNano, true); //#else //$$ mc.setIngameNotInFocus(); // this should already be the case but it somehow still sometimes is not diff --git a/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Rotation.java b/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Rotation.java index f318342f..abb95b3a 100644 --- a/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Rotation.java +++ b/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Rotation.java @@ -36,7 +36,11 @@ public abstract class Mixin_Omnidirectional_Rotation { } //#if MC>=12005 + //#if MC>=12100 + //$$ @ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;rotation(Lorg/joml/Quaternionfc;)Lorg/joml/Matrix4f;")) + //#else //$$ @ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;rotationXYZ(FFF)Lorg/joml/Matrix4f;")) + //#endif //$$ private Matrix4f replayModRender_setupCubicFrameRotation(Matrix4f matrix) { //#else //#if MC>=11500 diff --git a/src/main/java/com/replaymod/render/mixin/Mixin_Stereoscopic_Camera.java b/src/main/java/com/replaymod/render/mixin/Mixin_Stereoscopic_Camera.java index 2b744a8e..fbd07d4c 100644 --- a/src/main/java/com/replaymod/render/mixin/Mixin_Stereoscopic_Camera.java +++ b/src/main/java/com/replaymod/render/mixin/Mixin_Stereoscopic_Camera.java @@ -35,7 +35,11 @@ public abstract class Mixin_Stereoscopic_Camera implements EntityRendererHandler } //#if MC>=12005 + //#if MC>=12100 + //$$ @ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;rotation(Lorg/joml/Quaternionfc;)Lorg/joml/Matrix4f;")) + //#else //$$ @ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;rotationXYZ(FFF)Lorg/joml/Matrix4f;")) + //#endif //$$ private Matrix4f replayModRender_setupStereoscopicProjection(Matrix4f matrix) { //#else @Inject(method = "renderWorld", at = @At("HEAD")) diff --git a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java index 017b2013..4cca8e87 100644 --- a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java +++ b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java @@ -5,6 +5,7 @@ import com.replaymod.core.mixin.MinecraftAccessor; import com.replaymod.core.mixin.TimerAccessor; import com.replaymod.core.versions.MCVer; import com.replaymod.pathing.player.AbstractTimelinePlayer; +import com.replaymod.pathing.player.ReplayTimer; import com.replaymod.pathing.properties.TimestampProperty; import com.replaymod.render.CameraPathExporter; import com.replaymod.render.EXRWriter; @@ -37,7 +38,6 @@ import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.minecraft.util.crash.CrashException; import net.minecraft.sound.SoundCategory; -import net.minecraft.client.render.RenderTickCounter; import org.lwjgl.glfw.GLFW; //#if MC>=12000 @@ -87,11 +87,12 @@ import static com.google.common.collect.Iterables.getLast; import static com.replaymod.core.utils.Utils.DEFAULT_MS_PER_TICK; import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.render.ReplayModRender.LOGGER; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; public class VideoRenderer implements RenderInfo { - private static final Identifier SOUND_RENDER_SUCCESS = new Identifier("replaymod", "render_success"); + private static final Identifier SOUND_RENDER_SUCCESS = identifier("replaymod", "render_success"); private final MinecraftClient mc = MCVer.getMinecraft(); private final RenderSettings settings; private final ReplayHandler replayHandler; @@ -191,7 +192,7 @@ public class VideoRenderer implements RenderInfo { // Because this might take some time to prepare we'll render the GUI at least once to not confuse the user drawGui(); - RenderTickCounter timer = ((MinecraftAccessor) mc).getTimer(); + ReplayTimer timer = (ReplayTimer) ((MinecraftAccessor) mc).getTimer(); // Play up to one second before starting to render // This is necessary in order to ensure that all entities have at least two position packets @@ -268,7 +269,7 @@ public class VideoRenderer implements RenderInfo { } // Updating the timer will cause the timeline player to update the game state - RenderTickCounter timer = ((MinecraftAccessor) mc).getTimer(); + ReplayTimer timer = (ReplayTimer) ((MinecraftAccessor) mc).getTimer(); //#if MC>=11600 int elapsedTicks = //#endif @@ -276,6 +277,9 @@ public class VideoRenderer implements RenderInfo { //#if MC>=11400 MCVer.milliTime() //#endif + //#if MC>=12100 + //$$ , true + //#endif ); //#if MC<11600 //$$ int elapsedTicks = timer.ticksThisFrame; diff --git a/src/main/java/com/replaymod/replay/NoGuiScreenshot.java b/src/main/java/com/replaymod/replay/NoGuiScreenshot.java index 04a659da..aa51376f 100644 --- a/src/main/java/com/replaymod/replay/NoGuiScreenshot.java +++ b/src/main/java/com/replaymod/replay/NoGuiScreenshot.java @@ -11,6 +11,10 @@ import net.minecraft.client.util.ScreenshotUtils; import static com.replaymod.core.versions.MCVer.popMatrix; import static com.replaymod.core.versions.MCVer.pushMatrix; +//#if MC>=12100 +//$$ import net.minecraft.client.render.RenderTickCounter; +//#endif + //#if MC>=11500 import net.minecraft.client.util.math.MatrixStack; //#endif @@ -73,6 +77,9 @@ public class NoGuiScreenshot { GlStateManager.enableTexture(); //#endif + //#if MC>=12100 + //$$ mc.gameRenderer.renderWorld(RenderTickCounter.ONE); + //#else float tickDelta = mc.getTickDelta(); //#if MC>=12006 //$$ mc.gameRenderer.renderWorld(tickDelta, System.nanoTime()); @@ -89,6 +96,7 @@ public class NoGuiScreenshot { //#endif //#endif //#endif + //#endif mc.getFramebuffer().endWrite(); popMatrix(); diff --git a/src/main/java/com/replaymod/replay/mixin/MixinCamera.java b/src/main/java/com/replaymod/replay/mixin/MixinCamera.java index 501b15ab..2970f39b 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinCamera.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinCamera.java @@ -22,7 +22,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class MixinCamera { @Shadow @Final private MinecraftClient client; //#if MC>=12005 + //#if MC>=12100 + //$$ @ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;rotation(Lorg/joml/Quaternionfc;)Lorg/joml/Matrix4f;")) + //#else //$$ @ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;rotationXYZ(FFF)Lorg/joml/Matrix4f;")) + //#endif //$$ private Matrix4f applyRoll(Matrix4f matrix) { //#else @Inject( diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java b/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java index da17ba14..bb7a7850 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java @@ -153,8 +153,12 @@ public class GuiKeyframeTimeline extends AbstractGuiTimeline=12100 + //$$ BufferBuilder buffer = tessellator.begin(net.minecraft.client.render.VertexFormat.DrawMode.LINE_STRIP, VertexFormats.LINES); + //#else BufferBuilder buffer = tessellator.getBuffer(); buffer.begin(GL11.GL_LINE_STRIP, VertexFormats.POSITION_COLOR); + //#endif // Start just below the top border of the replay timeline Vector2f p1 = new Vector2f(replayTimelineLeft + positionXReplayTimeline, replayTimelineTop + BORDER_TOP); @@ -178,7 +182,13 @@ public class GuiKeyframeTimeline extends AbstractGuiTimeline=12100 + //$$ try (var builtBuffer = buffer.end()) { + //$$ net.minecraft.client.render.BufferRenderer.drawWithGlobalProgram(builtBuffer); + //$$ } + //#else tessellator.draw(); + //#endif popScissorState(); //#if MC<11700 GL11.glEnable(GL11.GL_TEXTURE_2D); diff --git a/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java b/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java index d8eb78e6..9257e437 100644 --- a/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java +++ b/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java @@ -46,9 +46,10 @@ 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; +import static de.johni0702.minecraft.gui.versions.MCVer.identifier; public class PathPreviewRenderer extends EventRegistrations { - private static final Identifier CAMERA_HEAD = new Identifier("replaymod", "camera_head.png"); + private static final Identifier CAMERA_HEAD = identifier("replaymod", "camera_head.png"); private static final MinecraftClient mc = MCVer.getMinecraft(); private static final int SLOW_PATH_COLOR = 0xffcccc; @@ -246,8 +247,12 @@ public class PathPreviewRenderer extends EventRegistrations { if (distanceSquared(view, pos2) > renderDistanceSquared) return; Tessellator tessellator = Tessellator.getInstance(); + //#if MC>=12100 + //$$ BufferBuilder buffer = tessellator.begin(net.minecraft.client.render.VertexFormat.DrawMode.LINES, VertexFormats.LINES); + //#else BufferBuilder buffer = tessellator.getBuffer(); buffer.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR); + //#endif emitLine(buffer, Vector3f.sub(pos1, view, null), Vector3f.sub(pos2, view, null), color); @@ -256,7 +261,13 @@ public class PathPreviewRenderer extends EventRegistrations { //$$ RenderSystem.disableCull(); //#endif GL11.glLineWidth(3); + //#if MC>=12100 + //$$ try (var builtBuffer = buffer.end()) { + //$$ net.minecraft.client.render.BufferRenderer.drawWithGlobalProgram(builtBuffer); + //$$ } + //#else tessellator.draw(); + //#endif //#if MC>=11700 //$$ RenderSystem.enableCull(); //#endif @@ -284,8 +295,12 @@ public class PathPreviewRenderer extends EventRegistrations { float maxY = 0.5f; Tessellator tessellator = Tessellator.getInstance(); + //#if MC>=12100 + //$$ BufferBuilder buffer = tessellator.begin(net.minecraft.client.render.VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); + //#else BufferBuilder buffer = tessellator.getBuffer(); buffer.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE); + //#endif buffer.vertex(minX, minY, 0).texture(posX + size, posY + size).next(); buffer.vertex(minX, maxY, 0).texture(posX + size, posY).next(); @@ -303,7 +318,13 @@ public class PathPreviewRenderer extends EventRegistrations { //$$ RenderSystem.applyModelViewMatrix(); //$$ RenderSystem.setShader(GameRenderer::getPositionTexShader); //#endif + //#if MC>=12100 + //$$ try (var builtBuffer = buffer.end()) { + //$$ net.minecraft.client.render.BufferRenderer.drawWithGlobalProgram(builtBuffer); + //$$ } + //#else tessellator.draw(); + //#endif popMatrix(); } @@ -322,8 +343,12 @@ public class PathPreviewRenderer extends EventRegistrations { //draw the position line Tessellator tessellator = Tessellator.getInstance(); + //#if MC>=12100 + //$$ BufferBuilder buffer = tessellator.begin(net.minecraft.client.render.VertexFormat.DrawMode.LINES, VertexFormats.LINES); + //#else BufferBuilder buffer = tessellator.getBuffer(); buffer.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR); + //#endif emitLine(buffer, new Vector3f(0, 0, 0), new Vector3f(0, 0, 2), 0x00ff00aa); @@ -334,7 +359,13 @@ public class PathPreviewRenderer extends EventRegistrations { GL11.glDisable(GL11.GL_TEXTURE_2D); //#endif + //#if MC>=12100 + //$$ try (var builtBuffer = buffer.end()) { + //$$ net.minecraft.client.render.BufferRenderer.drawWithGlobalProgram(builtBuffer); + //$$ } + //#else tessellator.draw(); + //#endif //#if MC<11700 GL11.glEnable(GL11.GL_TEXTURE_2D); @@ -344,9 +375,17 @@ public class PathPreviewRenderer extends EventRegistrations { float cubeSize = 0.5f; + //#if MC>=12100 + //$$ float r = -cubeSize/2; + //#else double r = -cubeSize/2; + //#endif + //#if MC>=12100 + //$$ buffer = tessellator.begin(net.minecraft.client.render.VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); + //#else buffer.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE_COLOR); + //#endif //back buffer.vertex(r, r + cubeSize, r).texture(3 * 8 / 64f, 8 / 64f).color(255, 255, 255, 200).next(); @@ -388,7 +427,13 @@ public class PathPreviewRenderer extends EventRegistrations { //$$ RenderSystem.applyModelViewMatrix(); //$$ RenderSystem.setShader(GameRenderer::getPositionTexColorShader); //#endif + //#if MC>=12100 + //$$ try (var builtBuffer = buffer.end()) { + //$$ net.minecraft.client.render.BufferRenderer.drawWithGlobalProgram(builtBuffer); + //$$ } + //#else tessellator.draw(); + //#endif popMatrix(); } diff --git a/versions/1.21/.gitkeep b/versions/1.21/.gitkeep new file mode 100644 index 00000000..e69de29b