From cfb9e15b8a732ca32d3944ec80fd05094e094168 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sat, 27 Feb 2021 17:54:49 +0100 Subject: [PATCH] Make use of new @Pattern feature to centralize version-aware code That is, most of the business code should not be aware that it is being compiled to multiple versions even when it heavily interacts with MC, preprocessor statements should be an escape hatch, not the norm. Similarly, code should not be forced to do `MCVer.getWindow(mc)` instead of the much more intuitive `mc.getWindow()`, and a new preprocessor (technically remap) feature makes this possible by defining "search and replace"-like patterns (but smarter in that they are type-aware) in one or more central places (the "Patterns.java" files) which then are applied all over the code base. In a way, this is another step in the automatic back-porting process where preprocessor statements are used when we cannot yet do something automatically. Previously we "merely" automatically converted between different mapping, this new feature now also allows us to automatically perform simple refactoring tasks like changing field access to a getter+setter (e.g. `mc.getWindow()`), or changing how a method is called (e.g. `BufferBuilder.begin`), or changing a method call chain (e.g. `dispatcher.camera.getYaw()`), or most other search-and-replace-like changes and any combination of those. The only major limitation is that the replacement itself is not smart, so arguments must be kept in same order (or be temporarily assigned to local variables which then can be used in any order). --- README.md | 52 +- build.gradle | 2 + root.gradle.kts | 2 +- .../compat/shaders/ShaderBeginRender.java | 4 +- .../replaymod/core/KeyBindingRegistry.java | 16 +- .../java/com/replaymod/core/ReplayMod.java | 16 +- .../com/replaymod/core/ReplayModBackend.java | 8 + .../replaymod/core/utils/Restrictions.java | 4 +- .../core/versions/BufferBuilder.java | 1 + .../com/replaymod/core/versions/GLFW.java | 1 + .../com/replaymod/core/versions/MCVer.java | 517 +----------------- .../com/replaymod/core/versions/Patterns.java | 376 +++++++++++++ .../com/replaymod/core/versions/Window.java | 1 + .../core/versions/forge/Patterns.java | 1 + .../com/replaymod/extras/OpenEyeExtra.java | 12 +- .../ScreenshotRenderer.java | 11 +- .../extras/playeroverview/PlayerOverview.java | 2 +- .../com/replaymod/gradle/remap/Pattern.java | 11 + .../recording/gui/GuiRecordingOverlay.java | 3 +- .../handler/ConnectionEventHandler.java | 2 +- .../handler/RecordingEventHandler.java | 33 +- .../mixin/MixinNetHandlerPlayClient.java | 2 +- .../recording/packet/PacketListener.java | 12 +- .../com/replaymod/render/FFmpegWriter.java | 4 +- .../render/blend/BlendFrameCapturer.java | 4 +- .../render/blend/BlendMeshBuilder.java | 3 +- .../replaymod/render/blend/BlendState.java | 12 +- .../exporters/ModelRendererExporter.java | 11 +- .../replaymod/render/gui/GuiExportFailed.java | 5 +- .../replaymod/render/mixin/MixinCamera.java | 6 +- .../render/mixin/MixinEntityRenderer.java | 2 +- .../replaymod/render/rendering/Pipeline.java | 16 +- .../render/rendering/VideoRenderer.java | 65 +-- .../replaymod/replay/FullReplaySender.java | 22 +- .../com/replaymod/replay/NoGuiScreenshot.java | 21 +- .../com/replaymod/replay/ReplayHandler.java | 65 +-- .../com/replaymod/replay/ReplayModReplay.java | 8 +- .../replaymod/replay/camera/CameraEntity.java | 40 +- .../camera/ClassicCameraController.java | 6 +- .../camera/SpectatorCameraController.java | 4 +- .../replaymod/replay/handler/GuiHandler.java | 18 +- .../replaymod/simplepathing/SPTimeline.java | 5 +- .../gui/GuiKeyframeTimeline.java | 41 +- .../simplepathing/gui/GuiPathing.java | 4 +- .../preview/PathPreviewRenderer.java | 124 +++-- .../HideInvisibleEntities.java | 7 +- .../com/replaymod/core/ReplayModBackend.java | 8 + .../com/replaymod/core/versions/GLFW.java | 9 + .../com/replaymod/core/versions/Window.java | 69 +++ .../core/versions/forge/EventsAdapter.java | 2 +- .../core/versions/forge/Patterns.java | 47 ++ versions/1.14.4-forge/mapping.txt | 3 + .../com/replaymod/core/ReplayModBackend.java | 9 + .../core/versions/BufferBuilder.java | 30 + versions/1.8/mapping.txt | 2 + versions/1.9.4/mapping.txt | 1 + 56 files changed, 890 insertions(+), 872 deletions(-) create mode 100644 src/main/java/com/replaymod/core/versions/BufferBuilder.java create mode 100644 src/main/java/com/replaymod/core/versions/GLFW.java create mode 100644 src/main/java/com/replaymod/core/versions/Patterns.java create mode 100644 src/main/java/com/replaymod/core/versions/Window.java create mode 100644 src/main/java/com/replaymod/core/versions/forge/Patterns.java create mode 100644 src/main/java/com/replaymod/gradle/remap/Pattern.java create mode 100644 versions/1.12.2/src/main/java/com/replaymod/core/versions/GLFW.java create mode 100644 versions/1.12.2/src/main/java/com/replaymod/core/versions/Window.java create mode 100644 versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/Patterns.java create mode 100644 versions/1.7.10/src/main/java/com/replaymod/core/versions/BufferBuilder.java diff --git a/README.md b/README.md index a05f2b8e..d9f32cc9 100644 --- a/README.md +++ b/README.md @@ -30,55 +30,9 @@ The `master` branch is solely to be used for the `version.json` file that contai used by the clients to check for updates of this mod. ### The Preprocessor -To support multiple Minecraft versions with the ReplayMod, a [JCP](https://github.com/raydac/java-comment-preprocessor)-inspired preprocessor is used: -```java - //#if MC>=11200 - // This is the block for MC >= 1.12.0 - category.addDetail(name, callable::call); - //#else - //$$ // This is the block for MC < 1.12.0 - //$$ category.setDetail(name, callable::call); - //#endif -``` -Any comments starting with `//$$` will automatically be introduced / removed based on the surrounding condition(s). -Normal comments are left untouched. The `//#else` branch is optional. - -Conditions can be nested arbitrarily but their indention shall always be equal to the indention of the code at the `//#if` line. -The `//$$` shall be aligned with the inner-most `//#if`. -```java - //#if MC>=10904 - public CPacketResourcePackStatus makeStatusPacket(String hash, Action action) { - //#if MC>=11002 - return new CPacketResourcePackStatus(action); - //#else - //$$ return new CPacketResourcePackStatus(hash, action); - //#endif - } - //#else - //$$ public C19PacketResourcePackStatus makeStatusPacket(String hash, Action action) { - //$$ return new C19PacketResourcePackStatus(hash, action); - //$$ } - //#endif -``` -Code for the more recent MC version shall be placed in the first branch of the if-else-construct. -Version-dependent import statements shall be placed separately from and after all other imports. -Common version dependent code (including the fml and forge event bus) are available as static methods/fields in the `MCVer` class. - -The source code in `src/main` is generally for the most recent Minecraft version and is automatically passed through the -preprocessor when any of the other versions are built (gradle projects `:1.8`, `:1.8.9`, etc.). -Do **NOT** edit any of the code in `versions/$MCVERSION/build/` as it is automatically generated and will be overwritten without warning. - -You can change the version of the code in `src/main` if you wish to develop/debug with another version of Minecraft: -```bash -./gradle :1.9.4:setCoreVersion # switches all sources in src/main to 1.9.4 -``` -If you do so, you'll also have to refresh the project in your IDE. - -Make sure to switch back to the most recent branch before committing! -Care should also be taken that switching to a different branch and back doesn't introduce any uncommitted changes (e.g. due to different indention, especially in case of nested conditions). - -Some files may use the same preprocessor with different keywords. -If required, more file extensions and keywords can be added in the `preprocess` block of the `versions/common.gradle` script. +To support multiple Minecraft versions with the ReplayMod, a [JCP](https://github.com/raydac/java-comment-preprocessor)-inspired preprocessor is used. +It has by now acquired a lot more sophisticated features to make it as noninvasive as possible. +Please read the [preprocessor's README](https://github.com/ReplayMod/preprocessor/blob/master/README.md) to understand how it works. ### Versioning The ReplayMod uses the versioning scheme outlined [here](http://mcforge.readthedocs.io/en/latest/conventions/versioning/) diff --git a/build.gradle b/build.gradle index e103e23f..38d975af 100644 --- a/build.gradle +++ b/build.gradle @@ -102,6 +102,8 @@ preprocess { ".vert": PreprocessTask.DEFAULT_KEYWORDS, ".frag": PreprocessTask.DEFAULT_KEYWORDS, ]) + + patternAnnotation.set("com.replaymod.gradle.remap.Pattern") } def mcVersionStr = "${(int)(mcVersion/10000)}.${(int)(mcVersion/100)%100}" + (mcVersion%100==0 ? '' : ".${mcVersion%100}") diff --git a/root.gradle.kts b/root.gradle.kts index 88e23880..07a56fa3 100755 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -3,7 +3,7 @@ import java.io.ByteArrayOutputStream plugins { id("fabric-loom") version "0.5-SNAPSHOT" apply false - id("com.replaymod.preprocess") version "7c4f90e" + id("com.replaymod.preprocess") version "3d85a00" id("com.github.hierynomus.license") version "0.15.0" } diff --git a/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java b/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java index fd7048be..8a782e8b 100644 --- a/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java +++ b/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java @@ -8,8 +8,6 @@ import net.minecraft.client.MinecraftClient; import java.lang.reflect.InvocationTargetException; -import static com.replaymod.core.versions.MCVer.getRenderPartialTicks; - public class ShaderBeginRender extends EventRegistrations { private final MinecraftClient mc = MinecraftClient.getInstance(); @@ -36,7 +34,7 @@ public class ShaderBeginRender extends EventRegistrations { //#if MC>=11400 mc.gameRenderer.getCamera(), //#endif - getRenderPartialTicks(), 0); + mc.getTickDelta(), 0); } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } diff --git a/src/main/java/com/replaymod/core/KeyBindingRegistry.java b/src/main/java/com/replaymod/core/KeyBindingRegistry.java index 9884c9c6..6223717c 100644 --- a/src/main/java/com/replaymod/core/KeyBindingRegistry.java +++ b/src/main/java/com/replaymod/core/KeyBindingRegistry.java @@ -7,7 +7,6 @@ import com.replaymod.core.mixin.KeyBindingAccessor; import de.johni0702.minecraft.gui.utils.EventRegistrations; import com.replaymod.core.events.KeyBindingEventCallback; import com.replaymod.core.events.KeyEventCallback; -import com.replaymod.core.versions.MCVer; import net.minecraft.client.options.KeyBinding; import net.minecraft.util.crash.CrashReport; import net.minecraft.util.crash.CrashReportSection; @@ -121,8 +120,8 @@ public class KeyBindingRegistry extends EventRegistrations { } catch (Throwable cause) { CrashReport crashReport = CrashReport.create(cause, "Handling Key Binding"); CrashReportSection category = crashReport.addElement("Key Binding"); - MCVer.addDetail(category, "Key Binding", () -> binding.name); - MCVer.addDetail(category, "Handler", runnable::toString); + category.add("Key Binding", () -> binding.name); + category.add("Handler", runnable::toString); throw new CrashException(crashReport); } } @@ -139,8 +138,8 @@ public class KeyBindingRegistry extends EventRegistrations { } catch (Throwable cause) { CrashReport crashReport = CrashReport.create(cause, "Handling Raw Key Binding"); CrashReportSection category = crashReport.addElement("Key Binding"); - MCVer.addDetail(category, "Key Code", () -> "" + keyCode); - MCVer.addDetail(category, "Handler", handler::toString); + category.add("Key Code", () -> "" + keyCode); + category.add("Handler", handler::toString); throw new CrashException(crashReport); } } @@ -161,7 +160,12 @@ public class KeyBindingRegistry extends EventRegistrations { } public String getBoundKey() { - return MCVer.getBoundKey(keyBinding); + try { + return keyBinding.getBoundKeyLocalizedText().getString(); + } catch (ArrayIndexOutOfBoundsException e) { + // Apparently windows likes to press strange keys, see https://www.replaymod.com/forum/thread/55 + return "Unknown"; + } } public boolean isBound() { diff --git a/src/main/java/com/replaymod/core/ReplayMod.java b/src/main/java/com/replaymod/core/ReplayMod.java index ba1805b2..99a78700 100644 --- a/src/main/java/com/replaymod/core/ReplayMod.java +++ b/src/main/java/com/replaymod/core/ReplayMod.java @@ -22,15 +22,15 @@ import com.replaymod.simplepathing.ReplayModSimplePathing; import de.johni0702.minecraft.gui.container.GuiScreen; import net.minecraft.client.MinecraftClient; import net.minecraft.client.options.Option; -import net.minecraft.util.Identifier; import net.minecraft.resource.DirectoryResourcePack; -import net.minecraft.text.Text; -import net.minecraft.text.Style; import net.minecraft.text.LiteralText; +import net.minecraft.text.Style; +import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; -import org.apache.commons.io.FilenameUtils; +import net.minecraft.util.Identifier; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; import java.io.ByteArrayInputStream; import java.io.File; @@ -355,6 +355,14 @@ public class ReplayMod implements Module, Scheduler { return backend.getVersion(); } + public String getMinecraftVersion() { + return backend.getMinecraftVersion(); + } + + public boolean isModLoaded(String id) { + return backend.isModLoaded(id); + } + public MinecraftClient getMinecraft() { return mc; } diff --git a/src/main/java/com/replaymod/core/ReplayModBackend.java b/src/main/java/com/replaymod/core/ReplayModBackend.java index 826f10f9..d6313852 100644 --- a/src/main/java/com/replaymod/core/ReplayModBackend.java +++ b/src/main/java/com/replaymod/core/ReplayModBackend.java @@ -18,4 +18,12 @@ public class ReplayModBackend implements ClientModInitializer { .orElseThrow(IllegalStateException::new) .getMetadata().getVersion().toString(); } + + public String getMinecraftVersion() { + return mod.getMinecraft().getGame().getVersion().getName(); + } + + public boolean isModLoaded(String id) { + return FabricLoader.getInstance().isModLoaded(id.toLowerCase()); + } } diff --git a/src/main/java/com/replaymod/core/utils/Restrictions.java b/src/main/java/com/replaymod/core/utils/Restrictions.java index 02c3eb3e..359eaf77 100644 --- a/src/main/java/com/replaymod/core/utils/Restrictions.java +++ b/src/main/java/com/replaymod/core/utils/Restrictions.java @@ -10,8 +10,6 @@ import net.minecraft.util.Identifier; //$$ import io.netty.buffer.Unpooled; //#endif -import static com.replaymod.core.versions.MCVer.readString; - /** * Restrictions set by the server, * @see Replay Restrictions Gist @@ -34,7 +32,7 @@ public class Restrictions { //$$ PacketBuffer buffer = new PacketBuffer(Unpooled.wrappedBuffer(packet.func_149168_d())); //#endif while (buffer.isReadable()) { - String name = readString(buffer, 64); + String name = buffer.readString(64); boolean active = buffer.readBoolean(); // if ("no_xray".equals(name)) { // noXray = active; diff --git a/src/main/java/com/replaymod/core/versions/BufferBuilder.java b/src/main/java/com/replaymod/core/versions/BufferBuilder.java new file mode 100644 index 00000000..743815c4 --- /dev/null +++ b/src/main/java/com/replaymod/core/versions/BufferBuilder.java @@ -0,0 +1 @@ +// 1.7.10 and below diff --git a/src/main/java/com/replaymod/core/versions/GLFW.java b/src/main/java/com/replaymod/core/versions/GLFW.java new file mode 100644 index 00000000..fca4cd6c --- /dev/null +++ b/src/main/java/com/replaymod/core/versions/GLFW.java @@ -0,0 +1 @@ +// 1.12.2 and below diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index 854c4a8f..73b77d47 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -1,45 +1,19 @@ package com.replaymod.core.versions; import com.replaymod.core.mixin.GuiScreenAccessor; -import com.replaymod.core.mixin.MinecraftAccessor; -import com.replaymod.render.mixin.MainWindowAccessor; 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 de.johni0702.minecraft.gui.utils.NonNull; -import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.options.KeyBinding; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.model.ModelPart; -import net.minecraft.util.crash.CrashReportSection; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.Identifier; import net.minecraft.util.Util; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.chunk.WorldChunk; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; //#if MC>=11600 import net.minecraft.resource.ResourcePackSource; //#endif -//#if MC>=11500 -import net.minecraft.client.model.ModelPart.Cuboid; -import java.util.ArrayList; -//#else -//$$ import net.minecraft.client.model.Box; -//#endif - //#if MC>=11400 -import com.replaymod.core.mixin.AbstractButtonWidgetAccessor; +import com.replaymod.render.mixin.MainWindowAccessor; import net.minecraft.SharedConstants; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.gui.widget.ButtonWidget; @@ -62,20 +36,14 @@ import net.minecraft.text.TranslatableText; //#if FABRIC>=1 //#else -//$$ import net.minecraft.entity.LivingEntity; -//$$ import net.minecraftforge.client.event.GuiScreenEvent; -//$$ import net.minecraftforge.client.event.RenderGameOverlayEvent; -//$$ import net.minecraftforge.client.event.RenderLivingEvent; //$$ import net.minecraftforge.common.MinecraftForge; //$$ import net.minecraftforge.eventbus.api.IEventBus; //#endif //#if MC>=11400 -import net.minecraft.client.util.Window; import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; //#else -//$$ import net.minecraft.client.gui.ScaledResolution; //$$ import net.minecraft.client.resources.ResourcePackRepository; //$$ import net.minecraftforge.fml.client.FMLClientHandler; //$$ import org.apache.logging.log4j.LogManager; @@ -84,28 +52,18 @@ import org.lwjgl.glfw.GLFW; //$$ import java.io.IOException; //#endif -//#if MC>=11400 -import net.minecraft.client.sound.PositionedSoundInstance; -//#else -//$$ import net.minecraft.client.audio.PositionedSoundRecord; -//#endif - //#if MC>=10904 import com.replaymod.render.blend.mixin.ParticleAccessor; import net.minecraft.client.particle.Particle; -import net.minecraft.sound.SoundEvent; import net.minecraft.util.math.Vec3d; //#endif //#if MC>=10809 -import net.minecraft.client.render.VertexFormats; //#else //$$ import net.minecraftforge.fml.common.FMLCommonHandler; //#endif //#if MC>=10800 -import net.minecraft.client.render.BufferBuilder; -import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormatElement; //#if MC<11500 @@ -113,28 +71,17 @@ import net.minecraft.client.render.VertexFormatElement; //#endif //#else //$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor; -//$$ import com.google.common.util.concurrent.Futures; //$$ import io.netty.handler.codec.DecoderException; +//$$ import net.minecraft.client.renderer.entity.RenderManager; //$$ import net.minecraft.client.resources.FileResourcePack; +//$$ import net.minecraft.network.PacketBuffer; //$$ //$$ import static org.lwjgl.opengl.GL11.*; //#endif -//#if FABRIC>=1 -import net.fabricmc.loader.api.FabricLoader; -//#else -//#if MC>=11400 -//$$ import net.minecraftforge.fml.ModList; -//#else -//$$ import net.minecraftforge.fml.common.Loader; -//#endif -//#endif - import java.io.File; import java.net.URI; -import java.util.Collection; import java.util.List; -import java.util.concurrent.Callable; import java.util.function.Consumer; import java.util.Optional; @@ -142,8 +89,6 @@ import java.util.Optional; * Abstraction over things that have changed between different MC versions. */ public class MCVer { - private static Logger LOGGER = LogManager.getLogger(); - //#if FABRIC<=0 //$$ public static IEventBus FORGE_BUS = MinecraftForge.EVENT_BUS; //#if MC>=10809 @@ -153,18 +98,6 @@ public class MCVer { //#endif //#endif - public static boolean isModLoaded(String id) { - //#if FABRIC>=1 - return FabricLoader.getInstance().isModLoaded(id.toLowerCase()); - //#else - //#if MC>=11400 - //$$ return ModList.get().isLoaded(id.toLowerCase()); - //#else - //$$ return Loader.isModLoaded(id); - //#endif - //#endif - } - public static int getProtocolVersion() { //#if MC>=11400 return SharedConstants.getGameVersion().getProtocolVersion(); @@ -180,38 +113,6 @@ public class MCVer { ); } - public static String getMinecraftVersion() { - //#if MC>=11400 - return getMinecraft().getGame().getVersion().getName(); - //#else - //$$ return Loader.MC_VERSION; - //#endif - } - - public static void addDetail(CrashReportSection category, String name, Callable callable) { - //#if MC>=10904 - //#if MC>=11200 - category.add(name, callable::call); - //#else - //$$ category.setDetail(name, callable::call); - //#endif - //#else - //$$ category.addCrashSectionCallable(name, callable); - //#endif - } - - public static Dimension getMainWindowSize(MinecraftClient mc) { - return new Dimension( - //#if MC>=11400 - getWindow(mc).getFramebufferWidth(), - getWindow(mc).getFramebufferHeight() - //#else - //$$ mc.displayWidth, - //$$ mc.displayHeight - //#endif - ); - } - public static void resizeMainWindow(MinecraftClient mc, int width, int height) { //#if MC>=11400 Framebuffer fb = mc.getFramebuffer(); @@ -219,7 +120,7 @@ public class MCVer { fb.resize(width, height, false); } //noinspection ConstantConditions - MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) getWindow(mc); + MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) mc.getWindow(); mainWindow.setFramebufferWidth(width); mainWindow.setFramebufferHeight(height); //#if MC>=11500 @@ -232,263 +133,13 @@ public class MCVer { //#endif } - public static double Entity_getX(Entity entity) { - //#if MC>=11500 - return entity.getX(); - //#else - //$$ return entity.x; - //#endif - } - - public static double Entity_getY(Entity entity) { - //#if MC>=11500 - return entity.getY(); - //#else - //$$ return entity.y; - //#endif - } - - public static double Entity_getZ(Entity entity) { - //#if MC>=11500 - return entity.getZ(); - //#else - //$$ return entity.z; - //#endif - } - - public static void Entity_setPos(Entity entity, double x, double y, double z) { - //#if MC>=11500 - entity.setPos(x, y, z); - //#else - //$$ entity.x = x; - //$$ entity.y = y; - //$$ entity.z = z; - //#endif - } - - //#if MC>=11400 - public static void width(AbstractButtonWidget button, int value) { - button.setWidth(value); - } - - public static int width(AbstractButtonWidget button) { - return button.getWidth(); - } - - public static int height(AbstractButtonWidget button) { - return ((AbstractButtonWidgetAccessor) button).getHeight(); - } - //#else - //$$ public static void width(GuiButton button, int value) { - //$$ button.width = value; - //$$ } - //$$ - //$$ public static int width(GuiButton button) { - //$$ return button.width; - //$$ } - //$$ - //$$ public static int height(GuiButton button) { - //$$ return button.height; - //$$ } - //#endif - - //#if FABRIC<=0 - //#if MC>=11400 - //$$ public static void addButton(GuiScreenEvent.InitGuiEvent event, Widget button) { - //$$ event.addWidget(button); - //$$ } - //$$ - //$$ public static void removeButton(GuiScreenEvent.InitGuiEvent event, Widget button) { - //$$ event.removeWidget(button); - //$$ } - //$$ - //$$ public static List getButtonList(GuiScreenEvent.InitGuiEvent event) { - //$$ return event.getWidgetList(); - //$$ } - //$$ - //$$ public static Widget getButton(GuiScreenEvent.ActionPerformedEvent event) { - //$$ return event.getButton(); - //$$ } - //#else - //$$ public static void addButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { - //#if MC>=11400 - //$$ event.addButton(button); - //#else - //$$ getButtonList(event).add(button); - //#endif - //$$ } - //$$ - //$$ public static void removeButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { - //#if MC>=11400 - //$$ event.removeButton(button); - //#else - //$$ getButtonList(event).remove(button); - //#endif - //$$ } - //$$ - //$$ @SuppressWarnings("unchecked") - //$$ public static List getButtonList(GuiScreenEvent.InitGuiEvent event) { - //#if MC>=10904 - //$$ return event.getButtonList(); - //#else - //$$ return event.buttonList; - //#endif - //$$ } - //$$ - //$$ public static GuiButton getButton(GuiScreenEvent.ActionPerformedEvent event) { - //#if MC>=10904 - //$$ return event.getButton(); - //#else - //$$ return event.button; - //#endif - //$$ } - //#endif - //$$ - //$$ public static Screen getGui(GuiScreenEvent event) { - //#if MC>=10904 - //$$ return event.getGui(); - //#else - //$$ return event.gui; - //#endif - //$$ } - //$$ - //$$ public static LivingEntity getEntity(RenderLivingEvent event) { - //#if MC>=10904 - //$$ return event.getEntity(); - //#else - //$$ return event.entity; - //#endif - //$$ } - //#endif - - public static String readString(PacketByteBuf buffer, int max) { - //#if MC>=10800 - return buffer.readString(max); - //#else - //$$ try { - //$$ return buffer.readStringFromBuffer(max); - //$$ } catch (IOException e) { - //$$ throw new DecoderException(e); - //$$ } - //#endif - } - - //#if FABRIC<=0 - //$$ public static RenderGameOverlayEvent.ElementType getType(RenderGameOverlayEvent event) { - //#if MC>=10904 - //$$ return event.getType(); - //#else - //$$ return event.type; - //#endif - //$$ } - //#endif - - //#if MC>=10800 - public static Entity getRenderViewEntity(MinecraftClient mc) { - return mc.getCameraEntity(); - } - //#else - //$$ public static EntityLivingBase getRenderViewEntity(Minecraft mc) { - //$$ return mc.renderViewEntity; - //$$ } - //#endif - - //#if MC>=10800 - public static void setRenderViewEntity(MinecraftClient mc, Entity entity) { - mc.setCameraEntity(entity); - } - //#else - //$$ public static void setRenderViewEntity(Minecraft mc, EntityLivingBase entity) { - //$$ mc.renderViewEntity = entity; - //$$ } - //#endif - - public static Entity getRiddenEntity(Entity ridden) { - //#if MC>=10904 - return ridden.getVehicle(); - //#else - //$$ return ridden.ridingEntity; - //#endif - } - - public static Iterable loadedEntityList(ClientWorld world) { - //#if MC>=11400 - return world.getEntities(); - //#else - //$$ return world.loadedEntityList; - //#endif - } - - @SuppressWarnings("unchecked") - public static Collection[] getEntityLists(WorldChunk chunk) { - //#if MC>=10800 - return chunk.getEntitySectionArray(); - //#else - //$$ return chunk.entityLists; - //#endif - } - - @SuppressWarnings("unchecked") - //#if MC>=11500 - public static List cubeList(ModelPart modelRenderer) { - return new ArrayList<>(); // FIXME 1.15 - } - //#else - //$$ public static List cubeList(ModelPart modelRenderer) { - //$$ return modelRenderer.boxes; - //$$ } - //#endif - - @SuppressWarnings("unchecked") - public static List playerEntities(World world) { - //#if MC>=11400 - return (List) world.getPlayers(); - //#else - //$$ return world.playerEntities; - //#endif - } - - public static boolean isOnMainThread() { - //#if MC>=11400 - return getMinecraft().isOnThread(); - //#else - //$$ return getMinecraft().isCallingFromMinecraftThread(); - //#endif - } - - public static void scheduleOnMainThread(Runnable runnable) { - //#if MC>=11400 - getMinecraft().send(runnable); - //#else - //$$ getMinecraft().addScheduledTask(runnable); - //#endif - } - - //#if MC>=11400 - public static @NonNull Window getWindow(MinecraftClient mc) { - //#if MC>=11500 - return mc.getWindow(); - //#else - //$$ return mc.window; - //#endif - } - //#else - //$$ public static @NonNull MainWindowAccessor getWindow(Minecraft mc) { - //$$ return (MainWindowAccessor) mc; - //$$ } - //#endif - - //#if MC>=11400 - public static Window newScaledResolution(MinecraftClient mc) { - return getWindow(mc); - } - //#else - //$$ public static ScaledResolution newScaledResolution(Minecraft mc) { - //#if MC>=10809 - //$$ return new ScaledResolution(mc); - //#else - //$$ return new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); - //#endif + //#if MC<10800 + //$$ public static String tryReadString(PacketBuffer buffer, int max) { + //$$ try { + //$$ return buffer.readStringFromBuffer(max); + //$$ } catch (IOException e) { + //$$ throw new DecoderException(e); + //$$ } //$$ } //#endif @@ -549,69 +200,6 @@ public class MCVer { //#endif } - //#if MC>=10800 - public static BufferBuilder Tessellator_getBufferBuilder() { - return Tessellator.getInstance().getBuffer(); - } - //#else - //$$ public static Tessellator Tessellator_getBufferBuilder() { - //$$ return Tessellator.instance; - //$$ } - //#endif - - public static void BufferBuilder_beginPosCol(int mode) { - Tessellator_getBufferBuilder().begin( - mode - //#if MC>=10809 - , VertexFormats.POSITION_COLOR - //#endif - ); - } - - public static void BufferBuilder_addPosCol(double x, double y, double z, int r, int g, int b, int a) { - //#if MC>=10809 - Tessellator_getBufferBuilder().vertex(x, y, z).color(r, g, b, a).next(); - //#else - //$$ Tessellator_getBufferBuilder().setColorRGBA(r, g, b, a); - //$$ Tessellator_getBufferBuilder().addVertex(x, y, z); - //#endif - } - - public static void BufferBuilder_beginPosTex(int mode) { - Tessellator_getBufferBuilder().begin( - mode - //#if MC>=10809 - , VertexFormats.POSITION_TEXTURE - //#endif - ); - } - - public static void BufferBuilder_addPosTex(double x, double y, double z, float u, float v) { - //#if MC>=10809 - Tessellator_getBufferBuilder().vertex(x, y, z).texture(u, v).next(); - //#else - //$$ Tessellator_getBufferBuilder().addVertexWithUV(x, y, z, u, v); - //#endif - } - - public static void BufferBuilder_beginPosTexCol(int mode) { - Tessellator_getBufferBuilder().begin( - mode - //#if MC>=10809 - , VertexFormats.POSITION_TEXTURE_COLOR - //#endif - ); - } - - public static void BufferBuilder_addPosTexCol(double x, double y, double z, float u, float v, int r, int g, int b, int a) { - //#if MC>=10809 - Tessellator_getBufferBuilder().vertex(x, y, z).texture(u, v).color(r, g, b, a).next(); - //#else - //$$ Tessellator_getBufferBuilder().setColorRGBA(r, g, b, a); - //$$ Tessellator_getBufferBuilder().addVertexWithUV(x, y, z, u, v); - //#endif - } - //#if MC>=10800 @SuppressWarnings("unchecked") public static List getElements(VertexFormat vertexFormat) { @@ -619,30 +207,16 @@ public class MCVer { } //#endif - public static Tessellator Tessellator_getInstance() { - //#if MC>=10800 - return Tessellator.getInstance(); - //#else - //$$ return Tessellator.instance; - //#endif - } - - public static EntityRenderDispatcher getRenderManager() { - //#if MC>=10800 - return getMinecraft().getEntityRenderDispatcher(); - //#else - //$$ return RenderManager.instance; - //#endif - } + //#if MC<10800 + //$$ public static RenderManager getRenderManager(@SuppressWarnings("unused") Minecraft mc) { + //$$ return RenderManager.instance; + //$$ } + //#endif public static MinecraftClient getMinecraft() { return MinecraftClient.getInstance(); } - public static float getRenderPartialTicks() { - return ((MinecraftAccessor) getMinecraft()).getTimer().tickDelta; - } - public static void addButton( Screen screen, //#if MC>=11400 @@ -719,26 +293,6 @@ public class MCVer { //#endif } - public static void bindTexture(Identifier texture) { - //#if MC>=11500 - getMinecraft().getTextureManager().bindTexture(texture); - //#else - //#if MC>=11400 - //$$ getMinecraft().getTextureManager().bindTexture(texture); - //#else - //$$ getMinecraft().renderEngine.bindTexture(texture); - //#endif - //#endif - } - - public static float cos(float val) { - return MathHelper.cos(val); - } - - public static float sin(float val) { - return MathHelper.sin(val); - } - //#if MC>=10904 // TODO: this can be inlined once https://github.com/SpongePowered/Mixin/issues/305 is fixed public static Vec3d getPosition(Particle particle, float partialTicks) { @@ -781,51 +335,20 @@ public class MCVer { } public static void openURL(URI url) { - //#if MC>=11400 //#if MC>=11400 Util.getOperatingSystem().open(url); //#else - //$$ Util.getOSType().openURI(url); - //#endif - //#else //$$ try { //$$ Desktop.getDesktop().browse(url); //$$ } catch (Throwable e) { - //$$ LOGGER.error("Failed to open URL: ", e); + //$$ LogManager.getLogger().error("Failed to open URL: ", e); //$$ } //#endif } - public static String getBoundKey(KeyBinding keyBinding) { - try { - //#if MC>=11600 - return keyBinding.getBoundKeyLocalizedText().getString(); - //#else - //#if MC>=11400 - //$$ return keyBinding.getLocalizedName(); - //#else - //$$ return Keyboard.getKeyName(keyBinding.getKeyCode()); - //#endif - //#endif - } catch (ArrayIndexOutOfBoundsException e) { - // Apparently windows likes to press strange keys, see https://www.replaymod.com/forum/thread/55 - return "Unknown"; - } - } - - public static void playSound(Identifier sound) { - getMinecraft().getSoundManager().play( - //#if MC>=11400 - PositionedSoundInstance.master(new SoundEvent(sound), 1.0F) - //#elseif MC>=10904 - //$$ PositionedSoundRecord.getMasterRecord(new SoundEvent(sound), 1.0F) - //#elseif MC>=10800 - //$$ PositionedSoundRecord.create(sound, 1.0F) - //#else - //$$ PositionedSoundRecord.createPositionedSoundRecord(sound, 1.0F) - //#endif - ); - } + //#if MC<10900 + //$$ public static class SoundEvent {} + //#endif //#if MC>=11400 private static Boolean hasOptifine; diff --git a/src/main/java/com/replaymod/core/versions/Patterns.java b/src/main/java/com/replaymod/core/versions/Patterns.java new file mode 100644 index 00000000..65570e88 --- /dev/null +++ b/src/main/java/com/replaymod/core/versions/Patterns.java @@ -0,0 +1,376 @@ +package com.replaymod.core.versions; + +import com.replaymod.gradle.remap.Pattern; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.options.KeyBinding; +import net.minecraft.client.texture.TextureManager; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.sound.PositionedSoundInstance; +import net.minecraft.util.crash.CrashReportSection; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.util.Identifier; +import net.minecraft.world.World; +import net.minecraft.world.chunk.WorldChunk; + +//#if MC>=11400 +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import net.minecraft.client.util.Window; +//#else +//$$ import net.minecraft.client.gui.GuiButton; +//#endif + +//#if MC>=10904 +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.crash.CrashCallable; +//#else +//$$ import java.util.concurrent.Callable; +//#endif + +//#if MC>=10809 +import net.minecraft.client.render.VertexFormats; +//#else +//#endif + +//#if MC>=10800 +import net.minecraft.client.render.BufferBuilder; +//#else +//$$ import net.minecraft.entity.EntityLivingBase; +//#endif + +import java.util.Collection; +import java.util.List; + +class Patterns { + //#if MC>=10904 + @Pattern + private static void addCrashCallable(CrashReportSection category, String name, CrashCallable callable) { + //#if MC>=11200 + category.add(name, callable); + //#else + //$$ category.setDetail(name, callable); + //#endif + } + //#else + //$$ @Pattern + //$$ private static void addCrashCallable(CrashReportCategory category, String name, Callable callable) { + //$$ category.addCrashSectionCallable(name, callable); + //$$ } + //#endif + + @Pattern + private static double Entity_getX(Entity entity) { + //#if MC>=11500 + return entity.getX(); + //#else + //$$ return entity.x; + //#endif + } + + @Pattern + private static double Entity_getY(Entity entity) { + //#if MC>=11500 + return entity.getY(); + //#else + //$$ return entity.y; + //#endif + } + + @Pattern + private static double Entity_getZ(Entity entity) { + //#if MC>=11500 + return entity.getZ(); + //#else + //$$ return entity.z; + //#endif + } + + @Pattern + private static void Entity_setPos(Entity entity, double x, double y, double z) { + //#if MC>=11500 + entity.setPos(x, y, z); + //#else + //$$ { net.minecraft.entity.Entity self = entity; self.x = x; self.y = y; self.z = z; } + //#endif + } + + //#if MC>=11400 + @Pattern + private static void setWidth(AbstractButtonWidget button, int value) { + button.setWidth(value); + } + + @Pattern + private static int getWidth(AbstractButtonWidget button) { + return button.getWidth(); + } + + @Pattern + private static int getHeight(AbstractButtonWidget button) { + //#if MC>=11600 + return button.getHeight(); + //#else + //$$ return ((com.replaymod.core.mixin.AbstractButtonWidgetAccessor) button).getHeight(); + //#endif + } + //#else + //$$ @Pattern + //$$ private static void setWidth(GuiButton button, int value) { + //$$ button.width = value; + //$$ } + //$$ + //$$ @Pattern + //$$ private static int getWidth(GuiButton button) { + //$$ return button.width; + //$$ } + //$$ + //$$ @Pattern + //$$ private static int getHeight(GuiButton button) { + //$$ return button.height; + //$$ } + //#endif + + @Pattern + private static String readString(PacketByteBuf buffer, int max) { + //#if MC>=10800 + return buffer.readString(max); + //#else + //$$ return com.replaymod.core.versions.MCVer.tryReadString(buffer, max); + //#endif + } + + @Pattern + //#if MC>=10800 + private static Entity getRenderViewEntity(MinecraftClient mc) { + return mc.getCameraEntity(); + } + //#else + //$$ private static EntityLivingBase getRenderViewEntity(Minecraft mc) { + //$$ return mc.renderViewEntity; + //$$ } + //#endif + + @Pattern + //#if MC>=10800 + private static void setRenderViewEntity(MinecraftClient mc, Entity entity) { + mc.setCameraEntity(entity); + } + //#else + //$$ private static void setRenderViewEntity(Minecraft mc, EntityLivingBase entity) { + //$$ mc.renderViewEntity = entity; + //$$ } + //#endif + + @Pattern + private static Entity getVehicle(Entity passenger) { + //#if MC>=10904 + return passenger.getVehicle(); + //#else + //$$ return passenger.ridingEntity; + //#endif + } + + @Pattern + private static Iterable loadedEntityList(ClientWorld world) { + //#if MC>=11400 + return world.getEntities(); + //#else + //#if MC>=10809 + //$$ return world.loadedEntityList; + //#else + //$$ return ((java.util.List) world.loadedEntityList); + //#endif + //#endif + } + + @Pattern + private static Collection[] getEntitySectionArray(WorldChunk chunk) { + //#if MC>=10800 + return chunk.getEntitySectionArray(); + //#else + //$$ return chunk.entityLists; + //#endif + } + + @Pattern + private static List playerEntities(World world) { + //#if MC>=11400 + return world.getPlayers(); + //#elseif MC>=10809 + //$$ return world.playerEntities; + //#else + //$$ return ((List) world.playerEntities); + //#endif + } + + @Pattern + private static boolean isOnMainThread(MinecraftClient mc) { + //#if MC>=11400 + return mc.isOnThread(); + //#else + //$$ return mc.isCallingFromMinecraftThread(); + //#endif + } + + @Pattern + private static void scheduleOnMainThread(MinecraftClient mc, Runnable runnable) { + //#if MC>=11400 + mc.send(runnable); + //#else + //$$ mc.addScheduledTask(runnable); + //#endif + } + + @Pattern + private static Window getWindow(MinecraftClient mc) { + //#if MC>=11500 + return mc.getWindow(); + //#elseif MC>=11400 + //$$ return mc.window; + //#else + //$$ return new com.replaymod.core.versions.Window(mc); + //#endif + } + + @Pattern + private static BufferBuilder Tessellator_getBuffer(Tessellator tessellator) { + //#if MC>=10800 + return tessellator.getBuffer(); + //#else + //$$ return new BufferBuilder(tessellator); + //#endif + } + + @Pattern + private static void BufferBuilder_beginPosCol(BufferBuilder buffer, int mode) { + //#if MC>=10809 + buffer.begin(mode, VertexFormats.POSITION_COLOR); + //#else + //$$ buffer.startDrawing(mode /* POSITION_COLOR */); + //#endif + } + + @Pattern + private static void BufferBuilder_addPosCol(BufferBuilder buffer, double x, double y, double z, int r, int g, int b, int a) { + //#if MC>=10809 + buffer.vertex(x, y, z).color(r, g, b, a).next(); + //#else + //$$ { WorldRenderer $buffer = buffer; double $x = x; double $y = y; double $z = z; $buffer.setColorRGBA(r, g, b, a); $buffer.addVertex($x, $y, $z); } + //#endif + } + + @Pattern + private static void BufferBuilder_beginPosTex(BufferBuilder buffer, int mode) { + //#if MC>=10809 + buffer.begin(mode, VertexFormats.POSITION_TEXTURE); + //#else + //$$ buffer.startDrawing(mode /* POSITION_TEXTURE */); + //#endif + } + + @Pattern + private static void BufferBuilder_addPosTex(BufferBuilder buffer, double x, double y, double z, float u, float v) { + //#if MC>=10809 + buffer.vertex(x, y, z).texture(u, v).next(); + //#else + //$$ buffer.addVertexWithUV(x, y, z, u, v); + //#endif + } + + @Pattern + private static void BufferBuilder_beginPosTexCol(BufferBuilder buffer, int mode) { + //#if MC>=10809 + buffer.begin(mode, VertexFormats.POSITION_TEXTURE_COLOR); + //#else + //$$ buffer.startDrawing(mode /* POSITION_TEXTURE_COLOR */); + //#endif + } + + @Pattern + private static void BufferBuilder_addPosTexCol(BufferBuilder buffer, double x, double y, double z, float u, float v, int r, int g, int b, int a) { + //#if MC>=10809 + buffer.vertex(x, y, z).texture(u, v).color(r, g, b, a).next(); + //#else + //$$ { WorldRenderer $buffer = buffer; double $x = x; double $y = y; double $z = z; float $u = u; float $v = v; $buffer.setColorRGBA(r, g, b, a); $buffer.addVertexWithUV($x, $y, $z, $u, $v); } + //#endif + } + + @Pattern + private static Tessellator Tessellator_getInstance() { + //#if MC>=10800 + return Tessellator.getInstance(); + //#else + //$$ return Tessellator.instance; + //#endif + } + + @Pattern + private static EntityRenderDispatcher getEntityRenderDispatcher(MinecraftClient mc) { + //#if MC>=10800 + return mc.getEntityRenderDispatcher(); + //#else + //$$ return com.replaymod.core.versions.MCVer.getRenderManager(mc); + //#endif + } + + @Pattern + private static float getCameraYaw(EntityRenderDispatcher dispatcher) { + //#if MC>=11500 + return dispatcher.camera.getYaw(); + //#else + //$$ return dispatcher.cameraYaw; + //#endif + } + + @Pattern + private static float getCameraPitch(EntityRenderDispatcher dispatcher) { + //#if MC>=11500 + return dispatcher.camera.getPitch(); + //#else + //$$ return dispatcher.cameraPitch; + //#endif + } + + @Pattern + private static float getRenderPartialTicks(MinecraftClient mc) { + //#if MC>=10900 + return mc.getTickDelta(); + //#else + //$$ return ((com.replaymod.core.mixin.MinecraftAccessor) mc).getTimer().renderPartialTicks; + //#endif + } + + @Pattern + private static TextureManager getTextureManager(MinecraftClient mc) { + //#if MC>=11400 + return mc.getTextureManager(); + //#else + //$$ return mc.renderEngine; + //#endif + } + + @Pattern + private static String getBoundKeyName(KeyBinding keyBinding) { + //#if MC>=11600 + return keyBinding.getBoundKeyLocalizedText().getString(); + //#elseif MC>=11400 + //$$ return keyBinding.getLocalizedName(); + //#else + //$$ return org.lwjgl.input.Keyboard.getKeyName(keyBinding.getKeyCode()); + //#endif + } + + @Pattern + private static PositionedSoundInstance master(Identifier sound, float pitch) { + //#if MC>=10900 + return PositionedSoundInstance.master(new SoundEvent(sound), pitch); + //#elseif MC>=10800 + //$$ return PositionedSoundRecord.create(sound, pitch); + //#else + //$$ return PositionedSoundRecord.createPositionedSoundRecord(sound, pitch); + //#endif + } +} diff --git a/src/main/java/com/replaymod/core/versions/Window.java b/src/main/java/com/replaymod/core/versions/Window.java new file mode 100644 index 00000000..fca4cd6c --- /dev/null +++ b/src/main/java/com/replaymod/core/versions/Window.java @@ -0,0 +1 @@ +// 1.12.2 and below diff --git a/src/main/java/com/replaymod/core/versions/forge/Patterns.java b/src/main/java/com/replaymod/core/versions/forge/Patterns.java new file mode 100644 index 00000000..6b1e174a --- /dev/null +++ b/src/main/java/com/replaymod/core/versions/forge/Patterns.java @@ -0,0 +1 @@ +// 1.12.2 and before diff --git a/src/main/java/com/replaymod/extras/OpenEyeExtra.java b/src/main/java/com/replaymod/extras/OpenEyeExtra.java index 9c7b6941..688c3e9b 100644 --- a/src/main/java/com/replaymod/extras/OpenEyeExtra.java +++ b/src/main/java/com/replaymod/extras/OpenEyeExtra.java @@ -28,20 +28,20 @@ import static com.replaymod.core.utils.Utils.SSL_SOCKET_FACTORY; import static com.replaymod.extras.ReplayModExtras.LOGGER; public class OpenEyeExtra implements Extra { - private static final String DOWNLOAD_URL = "https://www.replaymod.com/dl/openeye/" + MCVer.getMinecraftVersion(); - + private URL url; private ReplayMod mod; @Override public void register(ReplayMod mod) throws Exception { this.mod = mod; + this.url = new URL("https://www.replaymod.com/dl/openeye/" + mod.getMinecraftVersion()); - boolean isOpenEyeLoaded = MCVer.isModLoaded("OpenEye"); + boolean isOpenEyeLoaded = mod.isModLoaded("OpenEye"); if (!isOpenEyeLoaded && mod.getSettingsRegistry().get(Setting.ASK_FOR_OPEN_EYE)) { new Thread(() -> { try { LOGGER.trace("Checking for OpenEye availability"); - HttpsURLConnection connection = (HttpsURLConnection) new URL(DOWNLOAD_URL).openConnection(); + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setSSLSocketFactory(SSL_SOCKET_FACTORY); connection.setRequestMethod("HEAD"); connection.connect(); @@ -86,10 +86,10 @@ public class OpenEyeExtra implements Extra { GuiPopup popup = new GuiPopup(OfferGui.this); new Thread(() -> { try { - File targetFile = new File(mod.getMinecraft().runDirectory, "mods/" + MCVer.getMinecraftVersion() + "/OpenEye.jar"); + File targetFile = new File(mod.getMinecraft().runDirectory, "mods/" + mod.getMinecraftVersion() + "/OpenEye.jar"); FileUtils.forceMkdir(targetFile.getParentFile()); - HttpsURLConnection connection = (HttpsURLConnection) new URL(DOWNLOAD_URL).openConnection(); + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setSSLSocketFactory(SSL_SOCKET_FACTORY); ReadableByteChannel in = Channels.newChannel(connection.getInputStream()); FileChannel out = new FileOutputStream(targetFile).getChannel(); diff --git a/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java b/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java index 54e8d01f..0f38c79d 100644 --- a/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java +++ b/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java @@ -9,10 +9,9 @@ import com.replaymod.render.rendering.Pipelines; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.util.Window; import net.minecraft.util.crash.CrashReport; -import static com.replaymod.core.versions.MCVer.getMainWindowSize; -import static com.replaymod.core.versions.MCVer.getRenderPartialTicks; import static com.replaymod.core.versions.MCVer.resizeMainWindow; public class ScreenshotRenderer implements RenderInfo { @@ -29,7 +28,9 @@ public class ScreenshotRenderer implements RenderInfo { public boolean renderScreenshot() throws Throwable { try { - Dimension sizeBefore = getMainWindowSize(mc); + Window window = mc.getWindow(); + int widthBefore = window.getFramebufferWidth(); + int heightBefore = window.getFramebufferHeight(); boolean hideGUIBefore = mc.options.hudHidden; mc.options.hudHidden = true; @@ -46,7 +47,7 @@ public class ScreenshotRenderer implements RenderInfo { clrg.uninstall(); mc.options.hudHidden = hideGUIBefore; - resizeMainWindow(mc, sizeBefore.getWidth(), sizeBefore.getHeight()); + resizeMainWindow(mc, widthBefore, heightBefore); return true; } catch (OutOfMemoryError e) { e.printStackTrace(); @@ -75,7 +76,7 @@ public class ScreenshotRenderer implements RenderInfo { @Override public float updateForNextFrame() { framesDone++; - return getRenderPartialTicks(); + return mc.getTickDelta(); } @Override diff --git a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java index 6152e5e3..d5ecb0be 100644 --- a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java +++ b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java @@ -117,7 +117,7 @@ public class PlayerOverview extends EventRegistrations implements Extra { { on(PreRenderHandCallback.EVENT, this::shouldHideHand); } private boolean shouldHideHand() { - Entity view = getRenderViewEntity(module.getCore().getMinecraft()); + Entity view = module.getCore().getMinecraft().getCameraEntity(); return view != null && isHidden(view.getUuid()); } diff --git a/src/main/java/com/replaymod/gradle/remap/Pattern.java b/src/main/java/com/replaymod/gradle/remap/Pattern.java new file mode 100644 index 00000000..c57f51a3 --- /dev/null +++ b/src/main/java/com/replaymod/gradle/remap/Pattern.java @@ -0,0 +1,11 @@ +package com.replaymod.gradle.remap; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.SOURCE) +@Target(ElementType.METHOD) +public @interface Pattern { +} diff --git a/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java b/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java index 8ed65093..06783108 100644 --- a/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java +++ b/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java @@ -13,7 +13,6 @@ import net.minecraft.client.util.math.MatrixStack; import static com.replaymod.core.ReplayMod.TEXTURE; import static com.replaymod.core.ReplayMod.TEXTURE_SIZE; -import static com.replaymod.core.versions.MCVer.*; import static com.mojang.blaze3d.platform.GlStateManager.*; /** @@ -44,7 +43,7 @@ public class GuiRecordingOverlay extends EventRegistrations { stack, //#endif text.toUpperCase(), 30, 18 - (fontRenderer.fontHeight / 2), 0xffffffff); - bindTexture(TEXTURE); + mc.getTextureManager().bindTexture(TEXTURE); enableAlphaTest(); GuiRenderer renderer = new MinecraftGuiRenderer(stack); renderer.drawTexturedRect(10, 10, 58, 20, 16, 16, 16, 16, TEXTURE_SIZE, TEXTURE_SIZE); diff --git a/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java b/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java index 4c638f50..0e90c7eb 100644 --- a/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java +++ b/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java @@ -138,7 +138,7 @@ public class ConnectionEventHandler { metaData.setCustomServerName(serverName); metaData.setGenerator("ReplayMod v" + ReplayMod.instance.getVersion()); metaData.setDate(System.currentTimeMillis()); - metaData.setMcVersion(MCVer.getMinecraftVersion()); + metaData.setMcVersion(ReplayMod.instance.getMinecraftVersion()); packetListener = new PacketListener(core, outputPath, replayFile, metaData); Channel channel = ((NetworkManagerAccessor) networkManager).getChannel(); channel.pipeline().addBefore(packetHandlerKey, "replay_recorder", packetListener); diff --git a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java index 40c6eefe..a04cbee6 100644 --- a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java +++ b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java @@ -7,6 +7,7 @@ import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.Entity; import net.minecraft.network.packet.s2c.play.BlockBreakingProgressS2CPacket; import net.minecraft.network.packet.s2c.play.EntityAnimationS2CPacket; import net.minecraft.network.packet.s2c.play.EntityAttachS2CPacket; @@ -146,9 +147,9 @@ public class RecordingEventHandler extends EventRegistrations { boolean force = false; if(lastX == null || lastY == null || lastZ == null) { force = true; - lastX = Entity_getX(player); - lastY = Entity_getY(player); - lastZ = Entity_getZ(player); + lastX = player.getX(); + lastY = player.getY(); + lastZ = player.getZ(); } ticksSinceLastCorrection++; @@ -157,13 +158,13 @@ public class RecordingEventHandler extends EventRegistrations { force = true; } - double dx = Entity_getX(player) - lastX; - double dy = Entity_getY(player) - lastY; - double dz = Entity_getZ(player) - lastZ; + double dx = player.getX() - lastX; + double dy = player.getY() - lastY; + double dz = player.getZ() - lastZ; - lastX = Entity_getX(player); - lastY = Entity_getY(player); - lastZ = Entity_getZ(player); + lastX = player.getX(); + lastY = player.getY(); + lastZ = player.getZ(); Packet packet; if (force || Math.abs(dx) > 8.0 || Math.abs(dy) > 8.0 || Math.abs(dz) > 8.0) { @@ -309,18 +310,16 @@ public class RecordingEventHandler extends EventRegistrations { //Leaving Ride - if((!player.isRiding() && lastRiding != -1) || - (player.isRiding() && lastRiding != getRiddenEntity(player).getEntityId())) { - if(!player.isRiding()) { - lastRiding = -1; - } else { - lastRiding = getRiddenEntity(player).getEntityId(); - } + Entity vehicle = player.getVehicle(); + int vehicleId = vehicle == null ? -1 : vehicle.getEntityId(); + if (lastRiding != vehicleId) { + lastRiding = vehicleId; packetListener.save(new EntityAttachS2CPacket( //#if MC<10904 //$$ 0, //#endif - player, getRiddenEntity(player) + player, + vehicle )); } diff --git a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java index 2212424c..8c1841fc 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java @@ -57,7 +57,7 @@ public abstract class MixinNetHandlerPlayClient { //$$ @Inject(method = "handlePlayerListItem", at=@At("HEAD")) //#endif public void recordOwnJoin(PlayerListS2CPacket packet, CallbackInfo ci) { - if (!MCVer.isOnMainThread()) return; + if (!mcStatic.isOnThread()) return; if (mcStatic.player == null) return; RecordingEventHandler handler = getRecordingEventHandler(); diff --git a/src/main/java/com/replaymod/recording/packet/PacketListener.java b/src/main/java/com/replaymod/recording/packet/PacketListener.java index 83f573cd..78dd21ec 100644 --- a/src/main/java/com/replaymod/recording/packet/PacketListener.java +++ b/src/main/java/com/replaymod/recording/packet/PacketListener.java @@ -163,8 +163,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter { // to happen on the main thread so we can guarantee correct ordering of inbound and inject packets. // Otherwise, injected packets may end up further down the packet stream than they were supposed to and other // inbound packets which may rely on the injected packet would behave incorrectly when played back. - if (!MCVer.isOnMainThread()) { - MCVer.scheduleOnMainThread(() -> save(packet)); + if (!mc.isOnThread()) { + mc.send(() -> save(packet)); return; } try { @@ -488,15 +488,15 @@ public class PacketListener extends ChannelInboundHandlerAdapter { } public void addMarker(String name, int timestamp) { - Entity view = getRenderViewEntity(mc); + Entity view = mc.getCameraEntity(); Marker marker = new Marker(); marker.setName(name); marker.setTime(timestamp); if (view != null) { - marker.setX(Entity_getX(view)); - marker.setY(Entity_getY(view)); - marker.setZ(Entity_getZ(view)); + marker.setX(view.getX()); + marker.setY(view.getY()); + marker.setZ(view.getZ()); marker.setYaw(view.yaw); marker.setPitch(view.pitch); } diff --git a/src/main/java/com/replaymod/render/FFmpegWriter.java b/src/main/java/com/replaymod/render/FFmpegWriter.java index c0067e3a..f4e1381c 100644 --- a/src/main/java/com/replaymod/render/FFmpegWriter.java +++ b/src/main/java/com/replaymod/render/FFmpegWriter.java @@ -126,8 +126,8 @@ public class FFmpegWriter implements FrameConsumer { } CrashReport report = CrashReport.create(t, "Exporting frame"); CrashReportSection exportDetails = report.addElement("Export details"); - MCVer.addDetail(exportDetails, "Export command", settings::getExportCommand); - MCVer.addDetail(exportDetails, "Export args", commandArgs::toString); + exportDetails.add("Export command", settings::getExportCommand); + exportDetails.add("Export args", commandArgs::toString); MCVer.getMinecraft().setCrashReport(report); } finally { channels.values().forEach(it -> ByteBufferPool.release(it.getByteBuffer())); diff --git a/src/main/java/com/replaymod/render/blend/BlendFrameCapturer.java b/src/main/java/com/replaymod/render/blend/BlendFrameCapturer.java index 1047a78b..d9db73ee 100644 --- a/src/main/java/com/replaymod/render/blend/BlendFrameCapturer.java +++ b/src/main/java/com/replaymod/render/blend/BlendFrameCapturer.java @@ -1,6 +1,5 @@ package com.replaymod.render.blend; -import com.replaymod.core.versions.MCVer; import com.replaymod.render.capturer.RenderInfo; import com.replaymod.render.capturer.WorldRenderer; import com.replaymod.render.frame.BitmapFrame; @@ -8,6 +7,7 @@ import com.replaymod.render.rendering.Channel; import com.replaymod.render.rendering.FrameCapturer; import com.replaymod.render.utils.ByteBufferPool; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; +import net.minecraft.client.MinecraftClient; import java.io.IOException; import java.util.Collections; @@ -37,7 +37,7 @@ public class BlendFrameCapturer implements FrameCapturer { renderInfo.updateForNextFrame(); BlendState.getState().preFrame(framesDone); - worldRenderer.renderWorld(MCVer.getRenderPartialTicks(), null); + worldRenderer.renderWorld(MinecraftClient.getInstance().getTickDelta(), null); BlendState.getState().postFrame(framesDone); BitmapFrame frame = new BitmapFrame(framesDone++, new Dimension(0, 0), 0, ByteBufferPool.allocate(0)); diff --git a/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java b/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java index ebf38b75..49dba018 100644 --- a/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java +++ b/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java @@ -9,6 +9,7 @@ import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormatElement; +import net.minecraft.client.render.VertexFormats; import org.lwjgl.opengl.GL11; //#if MC>=11500 @@ -82,7 +83,7 @@ public class BlendMeshBuilder if (!wellBehaved) { // In case the calling code finishes with Tessellator.getInstance().draw() - BufferBuilder_beginPosTexCol(mode); + Tessellator.getInstance().getBuffer().begin(mode, VertexFormats.POSITION_TEXTURE_COLOR); } //#if MC>=10809 diff --git a/src/main/java/com/replaymod/render/blend/BlendState.java b/src/main/java/com/replaymod/render/blend/BlendState.java index 0b3333b7..0ef4a29b 100644 --- a/src/main/java/com/replaymod/render/blend/BlendState.java +++ b/src/main/java/com/replaymod/render/blend/BlendState.java @@ -88,7 +88,7 @@ public class BlendState implements Exporter { } catch (IOException e) { CrashReport report = CrashReport.create(e, "Setup of blend exporter"); CrashReportSection category = report.addElement("Exporter"); - addDetail(category, "Exporter", exporter::toString); + category.add("Exporter", exporter::toString); throw new CrashException(report); } } @@ -102,7 +102,7 @@ public class BlendState implements Exporter { } catch (IOException e) { CrashReport report = CrashReport.create(e, "Tear down of blend exporter"); CrashReportSection category = report.addElement("Exporter"); - addDetail(category, "Exporter", exporter::toString); + category.add("Exporter", exporter::toString); throw new CrashException(report); } } @@ -139,8 +139,8 @@ public class BlendState implements Exporter { } catch (IOException e) { CrashReport report = CrashReport.create(e, "Pre frame of blend exporter"); CrashReportSection category = report.addElement("Exporter"); - addDetail(category, "Exporter", exporter::toString); - addDetail(category, "Frame", () -> String.valueOf(frame)); + category.add("Exporter", exporter::toString); + category.add("Frame", () -> String.valueOf(frame)); throw new CrashException(report); } } @@ -154,8 +154,8 @@ public class BlendState implements Exporter { } catch (IOException e) { CrashReport report = CrashReport.create(e, "Post frame of blend exporter"); CrashReportSection category = report.addElement("Exporter"); - addDetail(category, "Exporter", exporter::toString); - addDetail(category, "Frame", () -> String.valueOf(frame)); + category.add("Exporter", exporter::toString); + category.add("Frame", () -> String.valueOf(frame)); throw new CrashException(report); } } diff --git a/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java b/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java index 909e7c6e..2320f236 100644 --- a/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java +++ b/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java @@ -21,7 +21,6 @@ import net.minecraft.client.model.ModelPart; import java.io.IOException; -import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.render.blend.Util.isGlTextureMatrixIdentity; public class ModelRendererExporter implements Exporter { @@ -86,11 +85,13 @@ public class ModelRendererExporter implements Exporter { DMesh mesh = new DMesh(); BlendMeshBuilder builder = new BlendMeshBuilder(mesh); //#if MC>=11500 - for (Cuboid box : cubeList(model)) { - // FIXME 1.15 - } + // FIXME 1.15 + //#elseif MC>=10809 + //$$ for (Box box : model.boxes) { + //$$ box.render(builder, scale); + //$$ } //#else - //$$ for (Box box : cubeList(model)) { + //$$ for (ModelBox box : (java.util.List) model.cubeList) { //$$ box.render(builder, scale); //$$ } //#endif diff --git a/src/main/java/com/replaymod/render/gui/GuiExportFailed.java b/src/main/java/com/replaymod/render/gui/GuiExportFailed.java index b3a8a702..de5e9c0e 100644 --- a/src/main/java/com/replaymod/render/gui/GuiExportFailed.java +++ b/src/main/java/com/replaymod/render/gui/GuiExportFailed.java @@ -19,7 +19,6 @@ import net.minecraft.util.crash.CrashException; import java.util.Arrays; import java.util.function.Consumer; -import static com.replaymod.core.versions.MCVer.addDetail; import static com.replaymod.render.ReplayModRender.LOGGER; public class GuiExportFailed extends GuiScreen { @@ -33,8 +32,8 @@ public class GuiExportFailed extends GuiScreen { // If they haven't, then this is probably a faulty ffmpeg installation and there's nothing we can do CrashReport crashReport = CrashReport.create(e, "Exporting video"); CrashReportSection details = crashReport.addElement("Export details"); - addDetail(details, "Settings", settings::toString); - addDetail(details, "FFmpeg log", e::getLog); + details.add("Settings", settings::toString); + details.add("FFmpeg log", e::getLog); throw new CrashException(crashReport); } else { // If they have, ask them whether it was intentional diff --git a/src/main/java/com/replaymod/render/mixin/MixinCamera.java b/src/main/java/com/replaymod/render/mixin/MixinCamera.java index 63044901..126c3278 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinCamera.java +++ b/src/main/java/com/replaymod/render/mixin/MixinCamera.java @@ -59,7 +59,7 @@ public abstract class MixinCamera { ) { if (getHandler() != null) { //#if MC<11400 - //$$ Entity entity = getRenderViewEntity(getMinecraft()); + //$$ Entity entity = getMinecraft().getRenderViewEntity(); //#endif orgYaw = entity.yaw; orgPitch = entity.pitch; @@ -79,7 +79,7 @@ public abstract class MixinCamera { //#endif if (getHandler() != null) { //#if MC<11400 - //$$ Entity entity = getRenderViewEntity(getMinecraft()); + //$$ Entity entity = getMinecraft().getRenderViewEntity(); //#endif RenderSettings settings = getHandler().getSettings(); if (settings.isStabilizeYaw()) { @@ -117,7 +117,7 @@ public abstract class MixinCamera { ) { if (getHandler() != null) { //#if MC<11400 - //$$ Entity entity = getRenderViewEntity(getMinecraft()); + //$$ Entity entity = getMinecraft().getRenderViewEntity(); //#endif entity.yaw = orgYaw; entity.pitch = orgPitch; diff --git a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java index b82e5be6..ddf431ea 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java +++ b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java @@ -117,7 +117,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti } //#else //$$ } else { - //$$ Entity currentEntity = getRenderViewEntity(MCVer.getMinecraft()); + //$$ Entity currentEntity = this.mc.getRenderViewEntity(); //$$ if (currentEntity instanceof EntityPlayer && !(currentEntity instanceof CameraEntity)) { //$$ if (renderPass == 2) { // Need to update render pass //$$ renderPass = replayModRender_handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0; diff --git a/src/main/java/com/replaymod/render/rendering/Pipeline.java b/src/main/java/com/replaymod/render/rendering/Pipeline.java index 23c22895..cf7f057d 100644 --- a/src/main/java/com/replaymod/render/rendering/Pipeline.java +++ b/src/main/java/com/replaymod/render/rendering/Pipeline.java @@ -6,14 +6,9 @@ import com.replaymod.render.capturer.WorldRenderer; import com.replaymod.render.frame.BitmapFrame; import com.replaymod.render.processor.GlToAbsoluteDepthProcessor; import net.minecraft.client.MinecraftClient; -import net.minecraft.util.crash.CrashReport; import net.minecraft.util.crash.CrashException; - -//#if MC>=11400 +import net.minecraft.util.crash.CrashReport; import org.lwjgl.glfw.GLFW; -//#else -//$$ import org.lwjgl.opengl.Display; -//#endif import java.util.HashMap; import java.util.Map; @@ -23,9 +18,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import static com.replaymod.core.versions.MCVer.getMinecraft; -//#if MC>=11400 -import static com.replaymod.core.versions.MCVer.getWindow; -//#endif public class Pipeline implements Runnable { @@ -72,11 +64,7 @@ public class Pipeline implements Runnable { MinecraftClient mc = MCVer.getMinecraft(); while (!capturer.isDone() && !abort) { - //#if MC>=11400 - if (GLFW.glfwWindowShouldClose(getWindow(mc).getHandle()) || ((MinecraftAccessor) mc).getCrashReporter() != null) { - //#else - //$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).getCrashReporter() != null) { - //#endif + if (GLFW.glfwWindowShouldClose(mc.getWindow().getHandle()) || ((MinecraftAccessor) mc).getCrashReporter() != null) { processService.shutdown(); return; } diff --git a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java index a265e245..4db4a2fc 100644 --- a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java +++ b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java @@ -30,10 +30,14 @@ import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import net.minecraft.client.MinecraftClient; import com.mojang.blaze3d.platform.GLX; import net.minecraft.client.gl.Framebuffer; +import net.minecraft.client.sound.PositionedSoundInstance; +import net.minecraft.client.util.Window; +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>=11600 import net.minecraft.client.util.math.MatrixStack; @@ -41,20 +45,16 @@ import net.minecraft.client.util.math.MatrixStack; //#if MC>=11500 import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.util.Window; import org.lwjgl.opengl.GL11; //#endif //#if MC>=11400 import com.replaymod.render.EXRWriter; import net.minecraft.client.gui.screen.Screen; -import org.lwjgl.glfw.GLFW; import java.util.concurrent.CompletableFuture; //#else -//$$ import net.minecraft.client.gui.ScaledResolution; //$$ import org.lwjgl.input.Mouse; //$$ import org.lwjgl.opengl.Display; -//$$ import static com.replaymod.core.versions.MCVer.newScaledResolution; //#endif //#if MC>=10800 @@ -80,6 +80,7 @@ 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 final MinecraftClient mc = MCVer.getMinecraft(); private final RenderSettings settings; private final ReplayHandler replayHandler; @@ -232,7 +233,7 @@ public class VideoRenderer implements RenderInfo { @Override public float updateForNextFrame() { // because the jGui lib uses Minecraft's displayWidth and displayHeight values, update these temporarily - MainWindowAccessor acc = (MainWindowAccessor) (Object) getWindow(mc); + MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.getWindow(); int displayWidthBefore = acc.getFramebufferWidth(); int displayHeightBefore = acc.getFramebufferHeight(); acc.setFramebufferWidth(displayWidth); @@ -351,10 +352,7 @@ public class VideoRenderer implements RenderInfo { updateDisplaySize(); - //#if MC<=10809 - //$$ ScaledResolution scaled = newScaledResolution(mc); - //$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight()); - //#endif + gui.toMinecraft().init(mc, mc.getWindow().getScaledWidth(), mc.getWindow().getScaledHeight()); forceChunkLoadingHook = new ForceChunkLoadingHook(mc.worldRenderer); @@ -401,7 +399,7 @@ public class VideoRenderer implements RenderInfo { } } - MCVer.playSound(new Identifier("replaymod", "render_success")); + mc.getSoundManager().play(PositionedSoundInstance.master(new SoundEvent(SOUND_RENDER_SUCCESS), 1)); try { if (!hasFailed() && ffmpegWriter != null) { @@ -464,12 +462,9 @@ public class VideoRenderer implements RenderInfo { } public boolean drawGui() { + Window window = mc.getWindow(); do { - //#if MC>=11400 - if (GLFW.glfwWindowShouldClose(getWindow(mc).getHandle()) || ((MinecraftAccessor) mc).getCrashReporter() != null) { - //#else - //$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).getCrashReporter() != null) { - //#endif + if (GLFW.glfwWindowShouldClose(window.getHandle()) || ((MinecraftAccessor) mc).getCrashReporter() != null) { return false; } @@ -497,7 +492,6 @@ public class VideoRenderer implements RenderInfo { guiFramebuffer.beginWrite(true); //#if MC>=11500 - Window window = getWindow(mc); RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC); RenderSystem.matrixMode(GL11.GL_PROJECTION); RenderSystem.loadIdentity(); @@ -507,7 +501,7 @@ public class VideoRenderer implements RenderInfo { RenderSystem.translatef(0, 0, -2000); //#else //#if MC>=11400 - //$$ getWindow(mc).method_4493( + //$$ window.method_4493( //#if MC>=11400 //$$ false //#endif @@ -517,12 +511,7 @@ public class VideoRenderer implements RenderInfo { //#endif //#endif - //#if MC>=11400 - gui.toMinecraft().init(mc, getWindow(mc).getScaledWidth(), getWindow(mc).getScaledHeight()); - //#else - //$$ ScaledResolution scaled = newScaledResolution(mc); - //$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight()); - //#endif + gui.toMinecraft().init(mc, window.getScaledWidth(), window.getScaledHeight()); // Events are polled on 1.13+ in mainWindow.update which is called later //#if MC<11400 @@ -540,8 +529,8 @@ public class VideoRenderer implements RenderInfo { //#endif //#if MC>=11400 - int mouseX = (int) mc.mouse.getX() * getWindow(mc).getScaledWidth() / displayWidth; - int mouseY = (int) mc.mouse.getY() * getWindow(mc).getScaledHeight() / displayHeight; + int mouseX = (int) mc.mouse.getX() * window.getScaledWidth() / displayWidth; + int mouseY = (int) mc.mouse.getY() * window.getScaledHeight() / displayHeight; if (mc.overlay != null) { Screen orgScreen = mc.currentScreen; @@ -564,8 +553,8 @@ public class VideoRenderer implements RenderInfo { mouseX, mouseY, 0); } //#else - //$$ int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth; - //$$ int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1; + //$$ int mouseX = Mouse.getX() * window.getScaledWidth() / mc.displayWidth; + //$$ int mouseY = window.getScaledHeight() - Mouse.getY() * window.getScaledHeight() / mc.displayHeight - 1; //$$ //$$ gui.toMinecraft().updateScreen(); //$$ gui.toMinecraft().drawScreen(mouseX, mouseY, 0); @@ -578,10 +567,10 @@ public class VideoRenderer implements RenderInfo { popMatrix(); //#if MC>=11500 - getWindow(mc).swapBuffers(); + window.swapBuffers(); //#else //#if MC>=11400 - //$$ getWindow(mc).setFullscreen(false); + //$$ window.setFullscreen(false); //#else //$$ // if not in high performance mode, update the gui size if screen size changed //$$ // otherwise just swap the progress gui to screen @@ -611,13 +600,8 @@ public class VideoRenderer implements RenderInfo { } private boolean displaySizeChanged() { - //#if MC>=11400 - int realWidth = getWindow(mc).getWidth(); - int realHeight = getWindow(mc).getHeight(); - //#else - //$$ int realWidth = Display.getWidth(); - //$$ int realHeight = Display.getHeight(); - //#endif + int realWidth = mc.getWindow().getWidth(); + int realHeight = mc.getWindow().getHeight(); if (realWidth == 0 || realHeight == 0) { // These can be zero on Windows if minimized. // Creating zero-sized framebuffers however will throw an error, so we never want to switch to zero values. @@ -627,13 +611,8 @@ public class VideoRenderer implements RenderInfo { } private void updateDisplaySize() { - //#if MC>=11400 - displayWidth = getWindow(mc).getWidth(); - displayHeight = getWindow(mc).getHeight(); - //#else - //$$ displayWidth = Display.getWidth(); - //$$ displayHeight = Display.getHeight(); - //#endif + displayWidth = mc.getWindow().getWidth(); + displayHeight = mc.getWindow().getHeight(); } public int getFramesDone() { diff --git a/src/main/java/com/replaymod/replay/FullReplaySender.java b/src/main/java/com/replaymod/replay/FullReplaySender.java index bb760016..99b4c31a 100644 --- a/src/main/java/com/replaymod/replay/FullReplaySender.java +++ b/src/main/java/com/replaymod/replay/FullReplaySender.java @@ -367,7 +367,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend // To counteract this, we need to manually update it's position if it hasn't been added // to any chunk yet. if (mc.world != null) { - for (PlayerEntity playerEntity : playerEntities(mc.world)) { + for (PlayerEntity playerEntity : mc.world.getPlayers()) { if (!playerEntity.updateNeeded && playerEntity instanceof OtherClientPlayerEntity) { playerEntity.tickMovement(); } @@ -417,7 +417,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend // Note: Not sure if it's still required but there's this really handy method anyway world.finishRemovingEntities(); //#else - //$$ Iterator iter = loadedEntityList(world).iterator(); + //$$ Iterator iter = world.loadedEntityList.iterator(); //$$ while (iter.hasNext()) { //$$ Entity entity = iter.next(); //$$ if (entity.isDead) { @@ -455,10 +455,10 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend } } }; - if (MCVer.isOnMainThread()) { + if (mc.isOnThread()) { doLightUpdates.run(); } else { - MCVer.scheduleOnMainThread(doLightUpdates); + mc.send(doLightUpdates); } } //#endif @@ -742,8 +742,8 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#endif if(cent != null) { - if(!allowMovement && !((Math.abs(Entity_getX(cent) - ppl.getX()) > TP_DISTANCE_LIMIT) || - (Math.abs(Entity_getZ(cent) - ppl.getZ()) > TP_DISTANCE_LIMIT))) { + if(!allowMovement && !((Math.abs(cent.getX() - ppl.getX()) > TP_DISTANCE_LIMIT) || + (Math.abs(cent.getZ() - ppl.getZ()) > TP_DISTANCE_LIMIT))) { return null; } else { allowMovement = false; @@ -754,7 +754,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend @Override @SuppressWarnings("unchecked") public void run() { - if (mc.world == null || !isOnMainThread()) { + if (mc.world == null || !mc.isOnThread()) { ReplayMod.instance.runLater(this); return; } @@ -1171,7 +1171,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#endif List entitiesInChunk = new ArrayList<>(); // Gather all entities in that chunk - for (Collection entityList : getEntityLists(chunk)) { + for (Collection entityList : chunk.getEntitySectionArray()) { entitiesInChunk.addAll(entityList); } for (Entity entity : entitiesInChunk) { @@ -1189,9 +1189,9 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend // Check whether the entity has left the chunk //#if MC>=11404 - int chunkX = MathHelper.floor(Entity_getX(entity) / 16); - int chunkY = MathHelper.floor(Entity_getY(entity) / 16); - int chunkZ = MathHelper.floor(Entity_getZ(entity) / 16); + int chunkX = MathHelper.floor(entity.getX() / 16); + int chunkY = MathHelper.floor(entity.getY() / 16); + int chunkZ = MathHelper.floor(entity.getZ() / 16); if (entity.chunkX != chunkX || entity.chunkY != chunkY || entity.chunkZ != chunkZ) { if (entity.updateNeeded) { // Entity has left the chunk diff --git a/src/main/java/com/replaymod/replay/NoGuiScreenshot.java b/src/main/java/com/replaymod/replay/NoGuiScreenshot.java index c438144b..5345c2bc 100644 --- a/src/main/java/com/replaymod/replay/NoGuiScreenshot.java +++ b/src/main/java/com/replaymod/replay/NoGuiScreenshot.java @@ -3,7 +3,6 @@ package com.replaymod.replay; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import com.replaymod.core.ReplayMod; -import com.replaymod.core.versions.MCVer; import de.johni0702.minecraft.gui.versions.Image; import net.minecraft.client.MinecraftClient; import com.mojang.blaze3d.platform.GlStateManager; @@ -13,10 +12,6 @@ import net.minecraft.client.util.ScreenshotUtils; import net.minecraft.client.util.math.MatrixStack; //#endif -//#if MC>=11400 -import static com.replaymod.core.versions.MCVer.getWindow; -//#endif - //#if MC<11400 //$$ import com.google.common.io.Files; //$$ import org.apache.commons.io.FileUtils; @@ -55,11 +50,8 @@ public class NoGuiScreenshot { return; } - //#if MC>=11400 - int frameWidth = getWindow(mc).getFramebufferWidth(), frameHeight = getWindow(mc).getFramebufferHeight(); - //#else - //$$ int frameWidth = mc.displayWidth, frameHeight = mc.displayHeight; - //#endif + int frameWidth = mc.getWindow().getFramebufferWidth(); + int frameHeight = mc.getWindow().getFramebufferHeight(); final boolean guiHidden = mc.options.hudHidden; try { @@ -76,16 +68,17 @@ public class NoGuiScreenshot { mc.getFramebuffer().beginWrite(true); GlStateManager.enableTexture(); + float tickDelta = mc.getTickDelta(); //#if MC>=11500 - mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime(), new MatrixStack()); + mc.gameRenderer.renderWorld(tickDelta, System.nanoTime(), new MatrixStack()); //#else //#if MC>=11400 - //$$ mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime()); + //$$ mc.gameRenderer.renderWorld(tickDelta, System.nanoTime()); //#else //#if MC>=10809 - //$$ mc.entityRenderer.updateCameraAndRender(MCVer.getRenderPartialTicks(), System.nanoTime()); + //$$ mc.entityRenderer.updateCameraAndRender(tickDelta, System.nanoTime()); //#else - //$$ mc.entityRenderer.updateCameraAndRender(MCVer.getRenderPartialTicks()); + //$$ mc.entityRenderer.updateCameraAndRender(tickDelta); //#endif //#endif //#endif diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index 6669145a..bddee69a 100644 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -31,6 +31,7 @@ import io.netty.channel.embedded.EmbeddedChannel; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.DownloadingTerrainScreen; import net.minecraft.client.network.ClientLoginNetworkHandler; +import net.minecraft.client.util.Window; import net.minecraft.util.crash.CrashReport; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; @@ -50,12 +51,10 @@ import org.lwjgl.opengl.GL11; //#if MC>=11400 import com.replaymod.replay.mixin.EntityLivingBaseAccessor; -import net.minecraft.client.util.Window; import net.minecraft.entity.LivingEntity; //#else //$$ import com.replaymod.replay.mixin.EntityOtherPlayerMPAccessor; //$$ import net.minecraft.client.entity.EntityOtherPlayerMP; -//$$ import net.minecraft.client.gui.ScaledResolution; //$$ import org.lwjgl.opengl.Display; //#endif @@ -148,7 +147,7 @@ public class ReplayHandler { private UUID spectating; public ReplayHandler(ReplayFile replayFile, boolean asyncMode) throws IOException { - Preconditions.checkState(isOnMainThread(), "Must be called from Minecraft thread."); + Preconditions.checkState(mc.isOnThread(), "Must be called from Minecraft thread."); this.replayFile = replayFile; replayDuration = replayFile.getMetaData().getDuration(); @@ -171,7 +170,7 @@ public class ReplayHandler { } void restartedReplay() { - Preconditions.checkState(isOnMainThread(), "Must be called from Minecraft thread."); + Preconditions.checkState(mc.isOnThread(), "Must be called from Minecraft thread."); channel.close(); @@ -197,7 +196,7 @@ public class ReplayHandler { } public void endReplay() throws IOException { - Preconditions.checkState(isOnMainThread(), "Must be called from Minecraft thread."); + Preconditions.checkState(mc.isOnThread(), "Must be called from Minecraft thread."); ReplayClosingCallback.EVENT.invoker().replayClosing(this); @@ -246,7 +245,7 @@ public class ReplayHandler { } private void setup() { - Preconditions.checkState(isOnMainThread(), "Must be called from Minecraft thread."); + Preconditions.checkState(mc.isOnThread(), "Must be called from Minecraft thread."); //#if MC>=11100 mc.inGameHud.getChatHud().clear(false); @@ -403,7 +402,7 @@ public class ReplayHandler { CameraEntity cam = getCameraEntity(); if (cam != null) { - targetCameraPosition = new Location(Entity_getX(cam), Entity_getY(cam), Entity_getZ(cam), cam.yaw, cam.pitch); + targetCameraPosition = new Location(cam.getX(), cam.getY(), cam.getZ(), cam.yaw, cam.pitch); } else { targetCameraPosition = null; } @@ -486,8 +485,8 @@ public class ReplayHandler { cameraEntity.setCameraController(new SpectatorCameraController(cameraEntity)); } - if (getRenderViewEntity(mc) != e) { - setRenderViewEntity(mc, e); + if (mc.getCameraEntity() != e) { + mc.setCameraEntity(e); cameraEntity.setCameraPosRot(e); } } @@ -505,7 +504,7 @@ public class ReplayHandler { * @return {@code true} if the camera is the view entity, {@code false} otherwise */ public boolean isCameraView() { - return mc.player instanceof CameraEntity && mc.player == getRenderViewEntity(mc); + return mc.player instanceof CameraEntity && mc.player == mc.getCameraEntity(); } /** @@ -539,11 +538,11 @@ public class ReplayHandler { } // Update all entity positions (especially prev/lastTick values) - for (Entity entity : loadedEntityList(mc.world)) { + for (Entity entity : mc.world.getEntities()) { skipTeleportInterpolation(entity); - entity.lastRenderX = entity.prevX = Entity_getX(entity); - entity.lastRenderY = entity.prevY = Entity_getY(entity); - entity.lastRenderZ = entity.prevZ = Entity_getZ(entity); + entity.lastRenderX = entity.prevX = entity.getX(); + entity.lastRenderY = entity.prevY = entity.getY(); + entity.lastRenderZ = entity.prevZ = entity.getZ(); entity.prevYaw = entity.yaw; entity.prevPitch = entity.pitch; } @@ -563,7 +562,7 @@ public class ReplayHandler { quickReplaySender.sendPacketsTill(targetTime); // Immediately apply player teleport interpolation - for (Entity entity : loadedEntityList(mc.world)) { + for (Entity entity : mc.world.getEntities()) { skipTeleportInterpolation(entity); } return; @@ -582,7 +581,7 @@ public class ReplayHandler { if (retainCameraPosition) { CameraEntity cam = getCameraEntity(); if (cam != null) { - targetCameraPosition = new Location(Entity_getX(cam), Entity_getY(cam), Entity_getZ(cam), + targetCameraPosition = new Location(cam.getX(), cam.getY(), cam.getZ(), cam.yaw, cam.pitch); } else { targetCameraPosition = null; @@ -612,8 +611,8 @@ public class ReplayHandler { ); enableTexture(); mc.getFramebuffer().beginWrite(true); + Window window = mc.getWindow(); //#if MC>=11500 - Window window = getWindow(mc); RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC); RenderSystem.matrixMode(GL11.GL_PROJECTION); RenderSystem.loadIdentity(); @@ -623,23 +622,13 @@ public class ReplayHandler { RenderSystem.translatef(0, 0, -2000); //#else //#if MC>=11400 - //$$ getWindow(mc).method_4493(true); - //#else - //#if MC>=11400 - //$$ mc.mainWindow.setupOverlayRendering(); + //$$ window.method_4493(true); //#else //$$ mc.entityRenderer.setupOverlayRendering(); //#endif //#endif - //#endif - //#if MC>=11400 - Window - //#else - //$$ ScaledResolution - //#endif - resolution = newScaledResolution(mc); - guiScreen.toMinecraft().init(mc, resolution.getScaledWidth(), resolution.getScaledHeight()); + guiScreen.toMinecraft().init(mc, window.getScaledWidth(), window.getScaledHeight()); //#if MC>=11600 guiScreen.toMinecraft().render(new MatrixStack(), 0, 0, 0); //#else @@ -654,18 +643,14 @@ public class ReplayHandler { mc.getFramebuffer().endWrite(); popMatrix(); pushMatrix(); - //#if MC>=11400 - mc.getFramebuffer().draw(getWindow(mc).getFramebufferWidth(), getWindow(mc).getFramebufferHeight()); - //#else - //$$ mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight); - //#endif + mc.getFramebuffer().draw(mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight()); popMatrix(); //#if MC>=11500 - getWindow(mc).swapBuffers(); + mc.getWindow().swapBuffers(); //#else //#if MC>=11400 - //$$ getWindow(mc).setFullscreen(true); + //$$ mc.window.setFullscreen(true); //#else //$$ Display.update(); //#endif @@ -691,11 +676,11 @@ public class ReplayHandler { //#else //$$ .processReceivedPackets(); //#endif - for (Entity entity : loadedEntityList(mc.world)) { + for (Entity entity : mc.world.getEntities()) { skipTeleportInterpolation(entity); - entity.lastRenderX = entity.prevX = Entity_getX(entity); - entity.lastRenderY = entity.prevY = Entity_getY(entity); - entity.lastRenderZ = entity.prevZ = Entity_getZ(entity); + entity.lastRenderX = entity.prevX = entity.getX(); + entity.lastRenderY = entity.prevY = entity.getY(); + entity.lastRenderZ = entity.prevZ = entity.getZ(); entity.prevYaw = entity.yaw; entity.prevPitch = entity.pitch; } diff --git a/src/main/java/com/replaymod/replay/ReplayModReplay.java b/src/main/java/com/replaymod/replay/ReplayModReplay.java index 0fd60a70..8d4e050c 100644 --- a/src/main/java/com/replaymod/replay/ReplayModReplay.java +++ b/src/main/java/com/replaymod/replay/ReplayModReplay.java @@ -32,8 +32,6 @@ import java.io.File; import java.io.IOException; import java.util.Optional; -import static com.replaymod.core.versions.MCVer.*; - public class ReplayModReplay implements Module { { instance = this; } @@ -68,9 +66,9 @@ public class ReplayModReplay implements Module { if (camera != null) { Marker marker = new Marker(); marker.setTime(replayHandler.getReplaySender().currentTimeStamp()); - marker.setX(Entity_getX(camera)); - marker.setY(Entity_getY(camera)); - marker.setZ(Entity_getZ(camera)); + marker.setX(camera.getX()); + marker.setY(camera.getY()); + marker.setZ(camera.getZ()); marker.setYaw(camera.yaw); marker.setPitch(camera.pitch); marker.setRoll(camera.roll); diff --git a/src/main/java/com/replaymod/replay/camera/CameraEntity.java b/src/main/java/com/replaymod/replay/camera/CameraEntity.java index 31151cac..e5bd3b1f 100644 --- a/src/main/java/com/replaymod/replay/camera/CameraEntity.java +++ b/src/main/java/com/replaymod/replay/camera/CameraEntity.java @@ -31,7 +31,6 @@ import net.minecraft.util.math.Box; //#if FABRIC>=1 //#else -//$$ import com.replaymod.core.versions.MCVer; //$$ import net.minecraftforge.client.event.EntityViewRenderEvent; //$$ import net.minecraftforge.client.event.RenderGameOverlayEvent; //$$ import net.minecraftforge.common.MinecraftForge; @@ -185,7 +184,7 @@ public class CameraEntity * @param z Delta in Z direction */ public void moveCamera(double x, double y, double z) { - setCameraPosition(Entity_getX(this) + x, Entity_getY(this) + y, Entity_getZ(this) + z); + setCameraPosition(this.getX() + x, this.getY() + y, this.getZ() + z); } /** @@ -198,7 +197,7 @@ public class CameraEntity this.lastRenderX = this.prevX = x; this.lastRenderY = this.prevY = y; this.lastRenderZ = this.prevZ = z; - Entity_setPos(this, x, y, z); + this.setPos(x, y, z); updateBoundingBox(); } @@ -239,7 +238,7 @@ public class CameraEntity this.prevZ = to.prevZ; this.prevYaw = to.prevYaw; this.prevPitch = to.prevPitch; - Entity_setPos(this, Entity_getX(to), Entity_getY(to), Entity_getZ(to)); + this.setPos(to.getX(), to.getY(), to.getZ()); this.yaw = to.yaw; this.pitch = to.pitch; this.lastRenderX = to.lastRenderX; @@ -258,17 +257,18 @@ public class CameraEntity //#else //$$ this.boundingBox.setBB(AxisAlignedBB.getBoundingBox( //#endif - Entity_getX(this) - width / 2, Entity_getY(this), Entity_getZ(this) - width / 2, - Entity_getX(this) + width / 2, Entity_getY(this) + height, Entity_getZ(this) + width / 2)); + this.getX() - width / 2, this.getY(), this.getZ() - width / 2, + this.getX() + width / 2, this.getY() + height, this.getZ() + width / 2)); } @Override public void tick() { //#if MC>=10800 - Entity view = getRenderViewEntity(this.client); + Entity view = //#else - //$$ EntityLivingBase view = getRenderViewEntity(this.mc); + //$$ EntityLivingBase view = //#endif + this.client.getCameraEntity(); if (view != null) { // Make sure we're always spectating the right entity // This is important if the spectated player respawns as their @@ -284,9 +284,9 @@ public class CameraEntity } view = this.world.getPlayerByUuid(spectating); if (view != null) { - setRenderViewEntity(this.client, view); + this.client.setCameraEntity(view); } else { - setRenderViewEntity(this.client, this); + this.client.setCameraEntity(this); return; } } @@ -309,7 +309,7 @@ public class CameraEntity @Override public void setRotation(float yaw, float pitch) { - if (getRenderViewEntity(this.client) == this) { + if (this.client.getCameraEntity() == this) { // Only update camera rotation when the camera is the view super.setRotation(yaw, pitch); } @@ -357,7 +357,7 @@ public class CameraEntity } private boolean falseUnlessSpectating(Function property) { - Entity view = getRenderViewEntity(this.client); + Entity view = this.client.getCameraEntity(); if (view != null && view != this) { return property.apply(view); } @@ -407,7 +407,7 @@ public class CameraEntity //#if MC>=10800 @Override public float getSpeed() { - Entity view = getRenderViewEntity(this.client); + Entity view = this.client.getCameraEntity(); if (view != this && view instanceof AbstractClientPlayerEntity) { return ((AbstractClientPlayerEntity) view).getSpeed(); } @@ -422,7 +422,7 @@ public class CameraEntity @Override public boolean isInvisible() { - Entity view = getRenderViewEntity(this.client); + Entity view = this.client.getCameraEntity(); if (view != this) { return view.isInvisible(); } @@ -431,7 +431,7 @@ public class CameraEntity @Override public Identifier getSkinTexture() { - Entity view = getRenderViewEntity(this.client); + Entity view = this.client.getCameraEntity(); if (view != this && view instanceof PlayerEntity) { return Utils.getResourceLocationForPlayerUUID(view.getUuid()); } @@ -450,7 +450,7 @@ public class CameraEntity @Override public boolean isPartVisible(PlayerModelPart modelPart) { - Entity view = getRenderViewEntity(this.client); + Entity view = this.client.getCameraEntity(); if (view != this && view instanceof PlayerEntity) { return ((PlayerEntity) view).isPartVisible(modelPart); } @@ -460,7 +460,7 @@ public class CameraEntity @Override public float getHandSwingProgress(float renderPartialTicks) { - Entity view = getRenderViewEntity(this.client); + Entity view = this.client.getCameraEntity(); if (view != this && view instanceof PlayerEntity) { return ((PlayerEntity) view).getHandSwingProgress(renderPartialTicks); } @@ -705,7 +705,7 @@ public class CameraEntity { on(PreRenderHandCallback.EVENT, this::onRenderHand); } private boolean onRenderHand() { // Unless we are spectating another player, don't render our hand - Entity view = getRenderViewEntity(mc); + Entity view = mc.getCameraEntity(); if (view == CameraEntity.this || !(view instanceof PlayerEntity)) { return true; // cancel hand rendering } else { @@ -761,7 +761,7 @@ public class CameraEntity //#else //$$ @SubscribeEvent //$$ public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) { - //$$ switch (MCVer.getType(event)) { + //$$ switch (event.getType()) { //$$ case ALL: //$$ heldItemTooltipsWasTrue = mc.gameSettings.heldItemTooltips; //$$ mc.gameSettings.heldItemTooltips = false; @@ -797,7 +797,7 @@ public class CameraEntity //$$ //$$ @SubscribeEvent //$$ public void postRenderGameOverlay(RenderGameOverlayEvent.Post event) { - //$$ if (MCVer.getType(event) != RenderGameOverlayEvent.ElementType.ALL) return; + //$$ if (event.getType() != RenderGameOverlayEvent.ElementType.ALL) return; //$$ mc.gameSettings.heldItemTooltips = heldItemTooltipsWasTrue; //$$ } //#endif diff --git a/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java b/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java index 9e0c02f7..316b4e25 100644 --- a/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java +++ b/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java @@ -1,9 +1,11 @@ package com.replaymod.replay.camera; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.options.KeyBinding; -import static com.replaymod.core.versions.MCVer.*; +import static net.minecraft.util.math.MathHelper.cos; +import static net.minecraft.util.math.MathHelper.sin; // TODO: Marius is responsible for this. Please, someone clean it up. public class ClassicCameraController implements CameraController { @@ -32,7 +34,7 @@ public class ClassicCameraController implements CameraController { public void update(float partialTicksPassed) { boolean forward = false, backward = false, left = false, right = false, up = false, down = false; speedup = false; - for(KeyBinding kb : getMinecraft().options.keysAll) { + for(KeyBinding kb : MinecraftClient.getInstance().options.keysAll) { if(!kb.isPressed()) continue; if(kb.getTranslationKey().equals("key.forward")) { forward = true; diff --git a/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java b/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java index faf15be6..30a15018 100644 --- a/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java +++ b/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java @@ -52,9 +52,9 @@ public class SpectatorCameraController implements CameraController { // Always make sure the camera is in the exact same spot as the spectated entity // This is necessary as some rendering code for the hand doesn't respect the view entity // and always uses mc.thePlayer - Entity view = getRenderViewEntity(mc); + Entity view = mc.getCameraEntity(); if (view != null && view != camera) { - camera.setCameraPosRot(getRenderViewEntity(mc)); + camera.setCameraPosRot(mc.getCameraEntity()); // If it's a player, also 'steal' its inventory so the rendering code knows what item to render if (view instanceof PlayerEntity) { PlayerEntity viewPlayer = (PlayerEntity) view; diff --git a/src/main/java/com/replaymod/replay/handler/GuiHandler.java b/src/main/java/com/replaymod/replay/handler/GuiHandler.java index e727134c..af8f67ff 100644 --- a/src/main/java/com/replaymod/replay/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/replay/handler/GuiHandler.java @@ -113,8 +113,8 @@ public class GuiHandler extends EventRegistrations { BUTTON_EXIT_REPLAY, b.x, b.y, - width(b), - height(b), + b.getWidth(), + b.getHeight(), "replaymod.gui.exit", this::onButton )); @@ -133,9 +133,9 @@ public class GuiHandler extends EventRegistrations { //#if MC>=11400 } else if (id.equals(BUTTON_OPTIONS)) { //#if MC>=11400 - width(b, 204); + b.setWidth(204); //#else - //$$ width(b, 200); + //$$ b.width = 200 //#endif //#endif } @@ -147,7 +147,7 @@ public class GuiHandler extends EventRegistrations { } if (achievements != null && stats != null) { moveAllButtonsInRect(buttonList, - achievements.x, stats.x + width(stats), + achievements.x, stats.x + stats.getWidth(), achievements.y, Integer.MAX_VALUE, -24); } @@ -185,8 +185,8 @@ public class GuiHandler extends EventRegistrations { int moveBy ) { buttons.stream() - .filter(button -> button.x <= xEnd && button.x + width(button) >= xStart) - .filter(button -> button.y <= yEnd && button.y + height(button) >= yStart) + .filter(button -> button.x <= xEnd && button.x + button.getWidth() >= xStart) + .filter(button -> button.y <= yEnd && button.y + button.getHeight() >= yStart) .forEach(button -> button.y += moveBy); } @@ -261,8 +261,8 @@ public class GuiHandler extends EventRegistrations { //#else //$$ @SubscribeEvent //$$ public void onButton(GuiScreenEvent.ActionPerformedEvent.Pre event) { - //$$ GuiScreen guiScreen = getGui(event); - //$$ GuiButton button = getButton(event); + //$$ GuiScreen guiScreen = event.getGui(); + //$$ GuiButton button = event.getButton(); //#endif if(!button.active) return; diff --git a/src/main/java/com/replaymod/simplepathing/SPTimeline.java b/src/main/java/com/replaymod/simplepathing/SPTimeline.java index 6a035759..561122d4 100644 --- a/src/main/java/com/replaymod/simplepathing/SPTimeline.java +++ b/src/main/java/com/replaymod/simplepathing/SPTimeline.java @@ -49,7 +49,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.replaystudio.pathing.change.RemoveKeyframe.create; import static com.replaymod.simplepathing.ReplayModSimplePathing.LOGGER; @@ -674,7 +673,7 @@ public class SPTimeline implements PathingRegistry { } catch (IOException e) { CrashReport crash = CrashReport.create(e, "Serializing interpolator"); CrashReportSection category = crash.addElement("Serializing interpolator"); - addDetail(category, "Interpolator", interpolator::toString); + category.add("Interpolator", interpolator::toString); throw new CrashException(crash); } @@ -689,7 +688,7 @@ public class SPTimeline implements PathingRegistry { } catch (IOException e) { CrashReport crash = CrashReport.create(e, "De-serializing interpolator"); CrashReportSection category = crash.addElement("De-serializing interpolator"); - addDetail(category, "Interpolator", json::toString); + category.add("Interpolator", json::toString); throw new CrashException(crash); } } diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java b/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java index ece93360..784e5a10 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiKeyframeTimeline.java @@ -18,6 +18,9 @@ import com.replaymod.simplepathing.SPTimeline.SPPath; import de.johni0702.minecraft.gui.GuiRenderer; import de.johni0702.minecraft.gui.element.advanced.AbstractGuiTimeline; import de.johni0702.minecraft.gui.function.Draggable; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexFormats; import org.apache.commons.lang3.tuple.Pair; import de.johni0702.minecraft.gui.utils.lwjgl.Point; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; @@ -27,10 +30,6 @@ import org.lwjgl.opengl.GL11; import java.util.Comparator; import java.util.Optional; -import static com.replaymod.core.versions.MCVer.BufferBuilder_addPosCol; -import static com.replaymod.core.versions.MCVer.BufferBuilder_beginPosCol; -import static com.replaymod.core.versions.MCVer.Tessellator_getInstance; - public class GuiKeyframeTimeline extends AbstractGuiTimeline implements Draggable { protected static final int KEYFRAME_SIZE = 5; protected static final int KEYFRAME_TEXTURE_X = 74; @@ -142,55 +141,61 @@ public class GuiKeyframeTimeline extends AbstractGuiTimeline> 24 & 0xff, color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff - ); + ).next(); // Draw vertically over the replay timeline, including its bottom border - BufferBuilder_addPosCol( + buffer.vertex( replayTimelineLeft + positionXReplayTimeline, replayTimelineBottom, - 0, + 0 + ).color( color >> 24 & 0xff, color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff - ); + ).next(); // Now for the important part: connecting to the keyframe timeline - BufferBuilder_addPosCol( + buffer.vertex( keyframeTimelineLeft + positionXKeyframeTimeline, keyframeTimelineTop, - 0, + 0 + ).color( color >> 24 & 0xff, color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff - ); + ).next(); // And finally another vertical bit (the timeline is already crammed enough, so only the border) - BufferBuilder_addPosCol( + buffer.vertex( keyframeTimelineLeft + positionXKeyframeTimeline, keyframeTimelineTop + BORDER_TOP, - 0, + 0 + ).color( color >> 24 & 0xff, color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff - ); + ).next(); GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glPushAttrib(GL11.GL_SCISSOR_BIT); GL11.glDisable(GL11.GL_SCISSOR_TEST); GL11.glLineWidth(1); - Tessellator_getInstance().draw(); + tessellator.draw(); GL11.glPopAttrib(); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_LINE_SMOOTH); diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java index 54eb6529..cdce5a51 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java @@ -644,9 +644,9 @@ public class GuiPathing { CameraEntity camera = replayHandler.getCameraEntity(); int spectatedId = -1; if (!replayHandler.isCameraView() && !neverSpectator) { - spectatedId = getRenderViewEntity(replayHandler.getOverlay().getMinecraft()).getEntityId(); + spectatedId = replayHandler.getOverlay().getMinecraft().getCameraEntity().getEntityId(); } - timeline.addPositionKeyframe(time, Entity_getX(camera), Entity_getY(camera), Entity_getZ(camera), + timeline.addPositionKeyframe(time, camera.getX(), camera.getY(), camera.getZ(), camera.yaw, camera.pitch, camera.roll, spectatedId); mod.setSelected(path, time); } diff --git a/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java b/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java index 450d853e..4aa42bb0 100644 --- a/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java +++ b/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java @@ -19,6 +19,9 @@ import com.replaymod.simplepathing.SPTimeline; import com.replaymod.simplepathing.gui.GuiPathing; import de.johni0702.minecraft.gui.utils.EventRegistrations; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.util.Identifier; @@ -34,7 +37,6 @@ import java.util.Comparator; import java.util.Optional; import static com.replaymod.core.ReplayMod.TEXTURE; -import static com.replaymod.core.versions.MCVer.*; public class PathPreviewRenderer extends EventRegistrations { private static final Identifier CAMERA_HEAD = new Identifier("replaymod", "camera_head.png"); @@ -56,7 +58,7 @@ public class PathPreviewRenderer extends EventRegistrations { private void renderCameraPath(MatrixStack matrixStack) { if (!replayHandler.getReplaySender().isAsyncMode() || mc.options.hudHidden) return; - Entity view = getRenderViewEntity(mc); + Entity view = mc.getCameraEntity(); if (view == null) return; GuiPathing guiPathing = mod.getGuiPathing(); @@ -75,14 +77,15 @@ public class PathPreviewRenderer extends EventRegistrations { int renderDistanceSquared = renderDistance * renderDistance; Triple viewPos = Triple.of( - Entity_getX(view), + view.getX(), + view.getY() //#if MC>=10800 && MC<11500 //$$ // Eye height is subtracted to make path appear higher (at eye height) than it actually is (at foot height) - //$$ Entity_getY(view) - view.getStandingEyeHeight(), + //$$ - view.getStandingEyeHeight(), //#else - Entity_getY(view), + , //#endif - Entity_getZ(view) + view.getZ() ); GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); @@ -212,36 +215,40 @@ public class PathPreviewRenderer extends EventRegistrations { if (distanceSquared(view, pos1) > renderDistanceSquared) return; if (distanceSquared(view, pos2) > renderDistanceSquared) return; - BufferBuilder_beginPosCol(GL11.GL_LINES); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder buffer = tessellator.getBuffer(); + buffer.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR); - BufferBuilder_addPosCol( + buffer.vertex( pos1.getLeft() - view.getLeft(), pos1.getMiddle() - view.getMiddle(), - pos1.getRight() - view.getRight(), + pos1.getRight() - view.getRight() + ).color( color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff, 255 - ); - BufferBuilder_addPosCol( + ).next(); + buffer.vertex( pos2.getLeft() - view.getLeft(), pos2.getMiddle() - view.getMiddle(), - pos2.getRight() - view.getRight(), + pos2.getRight() - view.getRight() + ).color( color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff, 255 - ); + ).next(); GL11.glLineWidth(3); - Tessellator_getInstance().draw(); + tessellator.draw(); } private void drawPoint(Triple view, Triple pos, Keyframe keyframe) { - MCVer.bindTexture(TEXTURE); + mc.getTextureManager().bindTexture(TEXTURE); float posX = 80f / ReplayMod.TEXTURE_SIZE; float posY = 0f; @@ -260,12 +267,14 @@ public class PathPreviewRenderer extends EventRegistrations { float maxX = 0.5f; float maxY = 0.5f; - BufferBuilder_beginPosTex(GL11.GL_QUADS); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder buffer = tessellator.getBuffer(); + buffer.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE); - BufferBuilder_addPosTex(minX, minY, 0, posX + size, posY + size); - BufferBuilder_addPosTex(minX, maxY, 0, posX + size, posY); - BufferBuilder_addPosTex(maxX, maxY, 0, posX, posY); - BufferBuilder_addPosTex(maxX, minY, 0, posX, posY + size); + buffer.vertex(minX, minY, 0).texture(posX + size, posY + size).next(); + buffer.vertex(minX, maxY, 0).texture(posX + size, posY).next(); + buffer.vertex(maxX, maxY, 0).texture(posX, posY).next(); + buffer.vertex(maxX, minY, 0).texture(posX, posY + size).next(); GL11.glPushMatrix(); @@ -275,15 +284,10 @@ public class PathPreviewRenderer extends EventRegistrations { pos.getRight() - view.getRight() ); GL11.glNormal3f(0, 1, 0); - //#if MC>=11500 - GL11.glRotatef(-getRenderManager().camera.getYaw(), 0, 1, 0); - GL11.glRotatef(getRenderManager().camera.getPitch(), 1, 0, 0); - //#else - //$$ GL11.glRotatef(-getRenderManager().cameraYaw, 0, 1, 0); - //$$ GL11.glRotatef(getRenderManager().cameraPitch, 1, 0, 0); - //#endif + GL11.glRotatef(-mc.getEntityRenderDispatcher().camera.getYaw(), 0, 1, 0); + GL11.glRotatef(mc.getEntityRenderDispatcher().camera.getPitch(), 1, 0, 0); - Tessellator_getInstance().draw(); + tessellator.draw(); GL11.glPopMatrix(); } @@ -292,7 +296,7 @@ public class PathPreviewRenderer extends EventRegistrations { Triple pos, Triple rot) { - MCVer.bindTexture(CAMERA_HEAD); + mc.getTextureManager().bindTexture(CAMERA_HEAD); GL11.glPushMatrix(); @@ -308,12 +312,14 @@ public class PathPreviewRenderer extends EventRegistrations { //draw the position line GL11.glDisable(GL11.GL_TEXTURE_2D); - BufferBuilder_beginPosCol(GL11.GL_LINES); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder buffer = tessellator.getBuffer(); + buffer.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR); - BufferBuilder_addPosCol(0, 0, 0, 0, 255, 0, 170); - BufferBuilder_addPosCol(0, 0, 2, 0, 255, 0, 170); + buffer.vertex(0, 0, 0).color(0, 255, 0, 170).next(); + buffer.vertex(0, 0, 2).color(0, 255, 0, 170).next(); - Tessellator_getInstance().draw(); + tessellator.draw(); // draw camera cube GL11.glEnable(GL11.GL_TEXTURE_2D); @@ -322,45 +328,45 @@ public class PathPreviewRenderer extends EventRegistrations { double r = -cubeSize/2; - BufferBuilder_beginPosTexCol(GL11.GL_QUADS); + buffer.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE_COLOR); //back - BufferBuilder_addPosTexCol(r, r + cubeSize, r, 3 * 8 / 64f, 8 / 64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r + cubeSize, r, 4*8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r, r, 4*8/64f, 2*8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r, r, 3*8/64f, 2*8/64f, 255, 255, 255, 200); + 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(); //front - BufferBuilder_addPosTexCol(r + cubeSize, r, r + cubeSize, 2 * 8 / 64f, 2*8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r + cubeSize, r + cubeSize, 2 * 8 / 64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r + cubeSize, r + cubeSize, 8 / 64f, 8 / 64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r, r + cubeSize, 8 / 64f, 2*8/64f, 255, 255, 255, 200); + 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(); //left - BufferBuilder_addPosTexCol(r + cubeSize, r + cubeSize, r, 0, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r + cubeSize, r + cubeSize, 8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r, r + cubeSize, 8/64f, 2*8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r+cubeSize, r, r, 0, 2*8/64f, 255, 255, 255, 200); + 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(); //right - BufferBuilder_addPosTexCol(r, r + cubeSize, r + cubeSize, 2*8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r + cubeSize, r, 3*8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r, r, 3*8/64f, 2*8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r, r + cubeSize, 2 * 8 / 64f, 2 * 8 / 64f, 255, 255, 255, 200); + 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(); //bottom - BufferBuilder_addPosTexCol(r + cubeSize, r, r, 3*8/64f, 0, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r, r + cubeSize, 3*8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r, r + cubeSize, 2*8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r, r, 2 * 8 / 64f, 0, 255, 255, 255, 200); + 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(); //top - BufferBuilder_addPosTexCol(r, r + cubeSize, r, 8/64f, 0, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r, r + cubeSize, r + cubeSize, 8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r + cubeSize, r + cubeSize, 2*8/64f, 8/64f, 255, 255, 255, 200); - BufferBuilder_addPosTexCol(r + cubeSize, r + cubeSize, r, 2 * 8 / 64f, 0, 255, 255, 255, 200); + 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(); - Tessellator_getInstance().draw(); + tessellator.draw(); GL11.glPopMatrix(); } diff --git a/versions/1.12.2/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java b/versions/1.12.2/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java index d97a953a..01aec589 100644 --- a/versions/1.12.2/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java +++ b/versions/1.12.2/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java @@ -1,5 +1,6 @@ package com.replaymod.compat.oranges17animations; +import com.replaymod.core.ReplayMod; import com.replaymod.replay.camera.CameraEntity; import de.johni0702.minecraft.gui.utils.EventRegistrations; import net.minecraft.client.Minecraft; @@ -7,8 +8,6 @@ import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import static com.replaymod.core.versions.MCVer.*; - /** * Orange seems to have copied vast parts of the RendererLivingEntity into their ArmorAnimation class which cancels the RenderLivingEvent.Pre and calls its own code instead. * This breaks our mixin which assures that, even though the camera is in spectator mode, it cannot see invisible entities. @@ -17,12 +16,12 @@ import static com.replaymod.core.versions.MCVer.*; */ public class HideInvisibleEntities extends EventRegistrations { private final Minecraft mc = Minecraft.getMinecraft(); - private final boolean modLoaded = isModLoaded("animations"); + private final boolean modLoaded = ReplayMod.instance.isModLoaded("animations"); @SubscribeEvent(priority = EventPriority.HIGH) public void preRenderLiving(RenderLivingEvent.Pre event) { if (modLoaded) { - if (mc.player instanceof CameraEntity && getEntity(event).isInvisible()) { + if (mc.player instanceof CameraEntity && event.getEntity().isInvisible()) { event.setCanceled(true); } } diff --git a/versions/1.12.2/src/main/java/com/replaymod/core/ReplayModBackend.java b/versions/1.12.2/src/main/java/com/replaymod/core/ReplayModBackend.java index d0f1fb62..6da12741 100644 --- a/versions/1.12.2/src/main/java/com/replaymod/core/ReplayModBackend.java +++ b/versions/1.12.2/src/main/java/com/replaymod/core/ReplayModBackend.java @@ -61,6 +61,14 @@ public class ReplayModBackend { return Loader.instance().getIndexedModList().get(MOD_ID).getVersion(); } + public String getMinecraftVersion() { + return Loader.MC_VERSION; + } + + public boolean isModLoaded(String id) { + return Loader.isModLoaded(id); + } + static { // Note: even preInit is too late and we'd have to issue another resource reload List defaultResourcePacks = ((MinecraftAccessor) getMinecraft()).getDefaultResourcePacks(); diff --git a/versions/1.12.2/src/main/java/com/replaymod/core/versions/GLFW.java b/versions/1.12.2/src/main/java/com/replaymod/core/versions/GLFW.java new file mode 100644 index 00000000..0c30d254 --- /dev/null +++ b/versions/1.12.2/src/main/java/com/replaymod/core/versions/GLFW.java @@ -0,0 +1,9 @@ +package com.replaymod.core.versions; + +import org.lwjgl.opengl.Display; + +public class GLFW { + public static boolean glfwWindowShouldClose(@SuppressWarnings("unused") long handle) { + return Display.isCloseRequested(); + } +} diff --git a/versions/1.12.2/src/main/java/com/replaymod/core/versions/Window.java b/versions/1.12.2/src/main/java/com/replaymod/core/versions/Window.java new file mode 100644 index 00000000..d0a3ddba --- /dev/null +++ b/versions/1.12.2/src/main/java/com/replaymod/core/versions/Window.java @@ -0,0 +1,69 @@ +package com.replaymod.core.versions; + +import com.replaymod.render.mixin.MainWindowAccessor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import org.lwjgl.opengl.Display; + +public class Window implements MainWindowAccessor { + + private final Minecraft mc; + private ScaledResolution scaledResolution; + + public Window(Minecraft mc) { + this.mc = mc; + } + + @Override + public int getFramebufferWidth() { + return mc.displayWidth; + } + + @Override + public void setFramebufferWidth(int value) { + mc.displayWidth = value; + } + + @Override + public int getFramebufferHeight() { + return mc.displayHeight; + } + + @Override + public void setFramebufferHeight(int value) { + mc.displayHeight = value; + } + + public long getHandle() { + return 0; + } + + public int getWidth() { + return Display.getWidth(); + } + + public int getHeight() { + return Display.getHeight(); + } + + private ScaledResolution scaledResolution() { + ScaledResolution scaledResolution = this.scaledResolution; + if (scaledResolution == null) { + //#if MC>=10809 + scaledResolution = new ScaledResolution(mc); + //#else + //$$ scaledResolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + //#endif + this.scaledResolution = scaledResolution; + } + return scaledResolution; + } + + public int getScaledWidth() { + return scaledResolution().getScaledWidth(); + } + + public int getScaledHeight() { + return scaledResolution().getScaledWidth(); + } +} diff --git a/versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/EventsAdapter.java b/versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/EventsAdapter.java index 2083b9fc..4a567d0c 100644 --- a/versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/EventsAdapter.java +++ b/versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/EventsAdapter.java @@ -55,7 +55,7 @@ public class EventsAdapter extends EventRegistrations { @SubscribeEvent public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) { Boolean result = null; - switch (MCVer.getType(event)) { + switch (event.getType()) { case CROSSHAIRS: result = RenderSpectatorCrosshairCallback.EVENT.invoker().shouldRenderSpectatorCrosshair(); break; diff --git a/versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/Patterns.java b/versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/Patterns.java new file mode 100644 index 00000000..cf16de42 --- /dev/null +++ b/versions/1.12.2/src/main/java/com/replaymod/core/versions/forge/Patterns.java @@ -0,0 +1,47 @@ +package com.replaymod.core.versions.forge; + +import com.replaymod.gradle.remap.Pattern; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.EntityLivingBase; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.client.event.RenderLivingEvent; + +class Patterns { + @Pattern + private static GuiButton getButton(GuiScreenEvent.ActionPerformedEvent event) { + //#if MC>=10904 + return event.getButton(); + //#else + //$$ return event.button; + //#endif + } + + @Pattern + private static GuiScreen getGui(GuiScreenEvent event) { + //#if MC>=10904 + return event.getGui(); + //#else + //$$ return event.gui; + //#endif + } + + @Pattern + private static EntityLivingBase getEntity(RenderLivingEvent event) { + //#if MC>=10904 + return event.getEntity(); + //#else + //$$ return event.entity; + //#endif + } + + @Pattern + private static RenderGameOverlayEvent.ElementType getType(RenderGameOverlayEvent event) { + //#if MC>=10904 + return event.getType(); + //#else + //$$ return event.type; + //#endif + } +} diff --git a/versions/1.14.4-forge/mapping.txt b/versions/1.14.4-forge/mapping.txt index 6a1960e7..ec310305 100644 --- a/versions/1.14.4-forge/mapping.txt +++ b/versions/1.14.4-forge/mapping.txt @@ -16,6 +16,9 @@ net.minecraft.network.play.server.SPacketEntity.Move net.minecraft.network.play. net.minecraftforge.fml.network.NetworkRegistry net.minecraftforge.fml.common.network.NetworkRegistry net.minecraft.client.particle.ParticleManager queue queueEntityFX org.apache.maven.artifact.versioning.ComparableVersion net.minecraftforge.fml.common.versioning.ComparableVersion +org.lwjgl.glfw.GLFW com.replaymod.core.versions.GLFW +net.minecraft.client.MainWindow com.replaymod.core.versions.Window +net.minecraft.client.audio.SimpleSound net.minecraft.client.audio.PositionedSoundRecord net.minecraft.resources.FolderPack getInputStream() getInputStreamByName() net.minecraft.client.gui.GuiYesNoCallback confirmResult() confirmClicked() diff --git a/versions/1.14.4-forge/src/main/java/com/replaymod/core/ReplayModBackend.java b/versions/1.14.4-forge/src/main/java/com/replaymod/core/ReplayModBackend.java index 3527ca6d..2ba2eab7 100644 --- a/versions/1.14.4-forge/src/main/java/com/replaymod/core/ReplayModBackend.java +++ b/versions/1.14.4-forge/src/main/java/com/replaymod/core/ReplayModBackend.java @@ -1,5 +1,6 @@ package com.replaymod.core; +import net.minecraft.client.Minecraft; import net.minecraftforge.fml.ModList; import static com.replaymod.core.ReplayMod.MOD_ID; @@ -8,4 +9,12 @@ public class ReplayModBackend { public String getVersion() { return ModList.get().getModContainerById(MOD_ID).get().getModInfo().getVersion().toString(); } + + public String getMinecraftVersion() { + return Minecraft.getInstance().getMinecraftGame().getVersion().getName(); + } + + public boolean isModLoaded(String id) { + return ModList.get().isLoaded(id.toLowerCase()); + } } diff --git a/versions/1.7.10/src/main/java/com/replaymod/core/versions/BufferBuilder.java b/versions/1.7.10/src/main/java/com/replaymod/core/versions/BufferBuilder.java new file mode 100644 index 00000000..73628626 --- /dev/null +++ b/versions/1.7.10/src/main/java/com/replaymod/core/versions/BufferBuilder.java @@ -0,0 +1,30 @@ +package com.replaymod.core.versions; + +import net.minecraft.client.renderer.Tessellator; + +public class BufferBuilder { + + private final Tessellator inner; + + public BufferBuilder(Tessellator inner) { + this.inner = inner; + } + + public void startDrawing(int glQuads) { + inner.startDrawing(glQuads); + } + + public void addVertexWithUV(double x, double y, double z, float u, float v) { + inner.addVertexWithUV(x, y, z, u, v); + } + + public void setColorRGBA(int r, int g, int b, int a) { + inner.setColorRGBA(r, g, b, a); + } + + public void addVertex(double x, double y, double z) { + inner.addVertex(x, y, z); + } + + public static class VertexFormats {} +} diff --git a/versions/1.8/mapping.txt b/versions/1.8/mapping.txt index c5cece6f..3096beb7 100644 --- a/versions/1.8/mapping.txt +++ b/versions/1.8/mapping.txt @@ -36,3 +36,5 @@ net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer net.minecra net.minecraft.network.play.server.S3FPacketCustomPayload getChannelName() func_149169_c() net.minecraft.network.play.server.S01PacketJoinGame getEntityId() func_149197_c() net.minecraft.client.network.NetHandlerLoginClient networkManager field_147393_d +net.minecraft.client.renderer.WorldRenderer com.replaymod.core.versions.BufferBuilder +net.minecraft.client.renderer.vertex.DefaultVertexFormats com.replaymod.core.versions.BufferBuilder.VertexFormats diff --git a/versions/1.9.4/mapping.txt b/versions/1.9.4/mapping.txt index d0fcbe20..9225b4c1 100644 --- a/versions/1.9.4/mapping.txt +++ b/versions/1.9.4/mapping.txt @@ -20,6 +20,7 @@ net.minecraft.network.play.server.SPacketSpawnMob dataManager field_149043_l net.minecraft.network.play.server.SPacketSpawnMob getDataManagerEntries() func_149027_c() net.minecraft.network.play.server.SPacketSpawnPlayer getDataManagerEntries() func_148944_c() net.minecraft.client.multiplayer.ServerList saveSingleServer() func_147414_b() +net.minecraft.util.SoundEvent com.replaymod.core.versions.MCVer.SoundEvent net.minecraft.network.play.server.SPacketJoinGame net.minecraft.network.play.server.S01PacketJoinGame net.minecraft.network.play.server.SPacketChat net.minecraft.network.play.server.S02PacketChat