From 9e625c25a2f029de4508c2b13fcab463907ff643 Mon Sep 17 00:00:00 2001 From: rsdadada Date: Wed, 22 Jul 2026 13:05:50 +0800 Subject: [PATCH] Port to Minecraft 1.21.11 --- .github/workflows/build.yml | 4 +- .github/workflows/publish.yml | 2 +- build.gradle.kts | 6 ++- common/build.gradle.kts | 10 ++-- .../com/xtracr/realcamera/KeyMappings.java | 24 ++++----- .../com/xtracr/realcamera/RealCameraCore.java | 6 +-- .../compat/CompatibilityHelper.java | 6 +-- .../realcamera/compat/DisableHelper.java | 6 +-- .../xtracr/realcamera/compat/YSMCompat.java | 2 +- .../com/xtracr/realcamera/gui/GUIHelper.java | 28 +++++----- .../xtracr/realcamera/gui/ModelAnalyser.java | 12 ++--- .../realcamera/gui/ModelViewScreen.java | 52 +++++++++---------- .../gui/components/CycleIconButton.java | 6 +-- .../gui/components/NumberField.java | 8 +-- .../gui/components/NumberWidgetPair.java | 6 +-- .../gui/components/SimpleIconButton.java | 6 +-- .../xtracr/realcamera/mixin/MixinCamera.java | 13 ++--- .../realcamera/mixin/MixinGameRenderer.java | 2 +- .../com/xtracr/realcamera/mixin/MixinGui.java | 10 ++-- .../realcamera/mixin/MixinLevelRenderer.java | 15 +++--- ...CustomFeatureRenderer$StorageAccessor.java | 5 +- .../mixin/accessor/GameRendererAccessor.java | 12 +++++ .../GuiGraphicsExtractorAccessor.java | 8 +-- .../ModelFeatureRenderer$StorageAccessor.java | 2 +- ...elPartFeatureRenderer$StorageAccessor.java | 5 +- .../mixin/accessor/RenderSetupAccessor.java | 13 +++++ .../renderer/IterableVertexBuffer.java | 2 +- .../renderer/MultiVertexCatcher.java | 8 ++- .../renderer/RoutingSubmitCollector.java | 32 ++++++------ .../gui/ColoredFloatLineRenderState.java | 2 +- .../gui/ColoredFloatQuadRenderState.java | 2 +- .../gui/ColoredFloatRectangleRenderState.java | 2 +- .../state/gui/GuiCulledModelsRenderState.java | 2 +- .../gui/GuiFlattenedModelsRenderState.java | 2 +- .../realcamera/util/RenderTypeCache.java | 27 ++-------- .../resources/realcamera-common.mixins.json | 4 +- .../main/resources/realcamera.accesswidener | 6 +-- fabric/build.gradle.kts | 13 ++--- .../xtracr/realcamera/RealCameraFabric.java | 10 ++-- fabric/src/main/resources/fabric.mod.json | 6 +-- .../src/main/resources/realcamera.mixins.json | 2 +- gradle.properties | 16 +++--- neoforge/build.gradle.kts | 2 +- .../xtracr/realcamera/RealCameraNeoForge.java | 2 +- .../resources/META-INF/accesstransformer.cfg | 4 +- .../resources/META-INF/neoforge.mods.toml | 6 +-- .../src/main/resources/realcamera.mixins.json | 2 +- settings.gradle.kts | 2 +- 48 files changed, 216 insertions(+), 207 deletions(-) create mode 100644 common/src/main/java/com/xtracr/realcamera/mixin/accessor/GameRendererAccessor.java create mode 100644 common/src/main/java/com/xtracr/realcamera/mixin/accessor/RenderSetupAccessor.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1de9b1fa..39b4dbc7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,7 +28,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "temurin" - java-version: 25 + java-version: 21 - name: Make Gradle Wrapper Executable if: ${{ runner.os != 'Windows' }} @@ -43,4 +43,4 @@ jobs: name: Artifacts path: | fabric/build/libs/* - neoforge/build/libs/* \ No newline at end of file + neoforge/build/libs/* diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 62670d51..f03c8e88 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -26,7 +26,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "temurin" - java-version: 25 + java-version: 21 - name: Make Gradle Wrapper Executable if: ${{ runner.os != 'Windows' }} diff --git a/build.gradle.kts b/build.gradle.kts index f1fa2d86..c4ac0355 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,11 @@ allprojects { repositories { mavenCentral() maven("https://maven.shedaniel.me/") - maven("https://maven.terraformersmc.com/releases/") + maven("https://maven.terraformersmc.com/releases/") { + content { + includeGroup("com.terraformersmc") + } + } maven("https://maven.fabricmc.net/") maven("https://maven.neoforged.net/releases/") } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index b282a12d..b32c22aa 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("net.fabricmc.fabric-loom") + id("net.fabricmc.fabric-loom-remap") id("maven-publish") } @@ -28,13 +28,15 @@ tasks.withType { dependencies { minecraft("com.mojang:minecraft:$minecraftVersion") + mappings(loom.officialMojangMappings()) + compileOnly("io.github.llamalad7:mixinextras-common:0.5.3") + annotationProcessor("io.github.llamalad7:mixinextras-common:0.5.3") // We depend on Fabric Loader here to use mixin and the Fabric @Environment annotations, - // compileOnly so it doesn't leak into neoforge's runtime classpath - compileOnly("net.fabricmc:fabric-loader:$fabricLoaderVersion") + modCompileOnly("net.fabricmc:fabric-loader:$fabricLoaderVersion") // Cloth Config - compileOnly("me.shedaniel.cloth:cloth-config:$clothConfigVersion") { + modCompileOnly("me.shedaniel.cloth:cloth-config-fabric:$clothConfigVersion") { exclude(group = "net.fabricmc.fabric-api") } } diff --git a/common/src/main/java/com/xtracr/realcamera/KeyMappings.java b/common/src/main/java/com/xtracr/realcamera/KeyMappings.java index 9c6fd98a..3119049f 100644 --- a/common/src/main/java/com/xtracr/realcamera/KeyMappings.java +++ b/common/src/main/java/com/xtracr/realcamera/KeyMappings.java @@ -18,23 +18,23 @@ public final class KeyMappings { static { MODEL_VIEW_SCREEN = createKeyMapping("modelViewScreen", client -> client.setScreen(new ModelViewScreen())); - createKeyMapping("togglePerspective", InputConstants.KEY_F6, _ -> { + createKeyMapping("togglePerspective", InputConstants.KEY_F6, ignoredClient -> { boolean enabled = ConfigFile.config().enabled; ConfigFile.load(); ConfigFile.config().enabled = !enabled; RealCameraCore.reset(); }); - createKeyMapping("toggleAdjustMode", _ -> ConfigFile.config().cycleAdjustMode()); - createKeyMapping("toggleCameraMode", _ -> ConfigFile.config().isClassic = !ConfigFile.config().isClassic); - createKeyMapping("adjustUP", _ -> ConfigFile.config().adjustOffsetY(1)); - createKeyMapping("adjustDOWN", _ -> ConfigFile.config().adjustOffsetY(-1)); - createKeyMapping("adjustLEFT", _ -> ConfigFile.config().adjustOffsetZ(1)); - createKeyMapping("adjustRIGHT", _ -> ConfigFile.config().adjustOffsetZ(-1)); - createKeyMapping("adjustFRONT", _ -> ConfigFile.config().adjustOffsetX(1)); - createKeyMapping("adjustBACK", _ -> ConfigFile.config().adjustOffsetX(-1)); - createKeyMapping("activeConfigIndexNEXT", _ -> ConfigFile.config().binding.activeConfigIndex += 1); - createKeyMapping("activeConfigIndexPREV", _ -> ConfigFile.config().binding.activeConfigIndex -= 1); - createKeyMapping("activeConfigIndexRESET", _ -> ConfigFile.config().binding.activeConfigIndex = 0); + createKeyMapping("toggleAdjustMode", ignoredClient -> ConfigFile.config().cycleAdjustMode()); + createKeyMapping("toggleCameraMode", ignoredClient -> ConfigFile.config().isClassic = !ConfigFile.config().isClassic); + createKeyMapping("adjustUP", ignoredClient -> ConfigFile.config().adjustOffsetY(1)); + createKeyMapping("adjustDOWN", ignoredClient -> ConfigFile.config().adjustOffsetY(-1)); + createKeyMapping("adjustLEFT", ignoredClient -> ConfigFile.config().adjustOffsetZ(1)); + createKeyMapping("adjustRIGHT", ignoredClient -> ConfigFile.config().adjustOffsetZ(-1)); + createKeyMapping("adjustFRONT", ignoredClient -> ConfigFile.config().adjustOffsetX(1)); + createKeyMapping("adjustBACK", ignoredClient -> ConfigFile.config().adjustOffsetX(-1)); + createKeyMapping("activeConfigIndexNEXT", ignoredClient -> ConfigFile.config().binding.activeConfigIndex += 1); + createKeyMapping("activeConfigIndexPREV", ignoredClient -> ConfigFile.config().binding.activeConfigIndex -= 1); + createKeyMapping("activeConfigIndexRESET", ignoredClient -> ConfigFile.config().binding.activeConfigIndex = 0); } private static KeyMapping createKeyMapping(String id, Consumer whenPressed) { diff --git a/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java b/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java index a08d45c8..070fa2f3 100644 --- a/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java +++ b/common/src/main/java/com/xtracr/realcamera/RealCameraCore.java @@ -17,7 +17,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; @@ -89,7 +89,7 @@ public static void computeCamera(Minecraft client, float partialTicks) { Player player = client.player; int retentionFrames = ConfigFile.config().binding.bindResultRetentionFrames; if (!ConfigFile.config().binding.hideFailureMessage && failureFrames == retentionFrames + 1 && player != null) { - player.sendSystemMessage(LocUtil.MESSAGE("bindingFailed", LocUtil.MOD_NAME(), LocUtil.MODEL_VIEW_TITLE(), KeyMappings.MODEL_VIEW_SCREEN.getTranslatedKeyMessage())); + player.displayClientMessage(LocUtil.MESSAGE("bindingFailed", LocUtil.MOD_NAME(), LocUtil.MODEL_VIEW_TITLE(), KeyMappings.MODEL_VIEW_SCREEN.getTranslatedKeyMessage()), false); } if (!lastResult.available() || failureFrames > retentionFrames) { lastResult = BindResult.EMPTY; @@ -118,7 +118,7 @@ public static void renderCameraEntity(Minecraft client, float partialTicks, Subm vertexCatcher.forEachBuffer(builtBuffer -> { DisableConfig[] disableConfigs = currentTarget().filteredDisableConfigs(config -> builtBuffer.textureId().contains(config.textureId())); for (DisableConfig config : disableConfigs) if (config.disableAll()) return; - submitNodeCollector.submitCustomGeometry(poseStack, builtBuffer.renderType(), (_, buffer) -> { + submitNodeCollector.submitCustomGeometry(poseStack, builtBuffer.renderType(), (ignoredPose, buffer) -> { if (!builtBuffer.renderType().canConsolidateConsecutiveGeometry()) { for (VertexData vertex : builtBuffer.vertexBuffer()) vertex.render(buffer); return; diff --git a/common/src/main/java/com/xtracr/realcamera/compat/CompatibilityHelper.java b/common/src/main/java/com/xtracr/realcamera/compat/CompatibilityHelper.java index 117d43dd..b631bdc1 100644 --- a/common/src/main/java/com/xtracr/realcamera/compat/CompatibilityHelper.java +++ b/common/src/main/java/com/xtracr/realcamera/compat/CompatibilityHelper.java @@ -24,7 +24,7 @@ public static void initialize(PlatformHelper platformHelper) { if (isModLoaded("freecam")) try { Class FC_Freecam = Class.forName("net.xolt.freecam.Freecam"); Method FC_Freecam_isEnabled = FC_Freecam.getDeclaredMethod("isEnabled"); - DisableHelper.MAIN_FEATURE.registerOr(_ -> { + DisableHelper.MAIN_FEATURE.registerOr(ignoredPlayer -> { try { return (boolean) FC_Freecam_isEnabled.invoke(null); } catch (Exception ignored) { @@ -47,7 +47,7 @@ public static void initialize(PlatformHelper platformHelper) { Class SBW_ClientEventHandler = Class.forName("com.atsuishio.superbwarfare.event.ClientEventHandler"); SBW_ClientEventHandler_zoomTime = SBW_ClientEventHandler.getDeclaredField("zoomTime"); SBW_VehicleEntity = Class.forName("com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity"); - DisableHelper.MAIN_FEATURE.registerOrInBinding(_ -> CompatibilityHelper.SBW_gunsIsZooming()); + DisableHelper.MAIN_FEATURE.registerOrInBinding(ignoredPlayer -> CompatibilityHelper.SBW_gunsIsZooming()); DisableHelper.MAIN_FEATURE.registerOrInBinding(CompatibilityHelper::SBW_isDrivingVehicle); } catch (Exception e) { RealCamera.LOGGER.warn("Compatibility with SuperbWarfare is outdated: [{}] {}", e.getClass().getName(), e.getMessage()); @@ -55,7 +55,7 @@ public static void initialize(PlatformHelper platformHelper) { if (isModLoaded("entity_model_features")) try { Class EMF_EMFAnimationApi = Class.forName("traben.entity_model_features.EMFAnimationApi"); if ((int) EMF_EMFAnimationApi.getMethod("getApiVersion").invoke(null) >= 9) { - Function function = _ -> isRenderInScreen; + Function function = ignoredContext -> isRenderInScreen; Method EMF_registerPauseCondition = EMF_EMFAnimationApi.getMethod("registerPauseCondition", Function.class); EMF_registerPauseCondition.invoke(null, function); } else { diff --git a/common/src/main/java/com/xtracr/realcamera/compat/DisableHelper.java b/common/src/main/java/com/xtracr/realcamera/compat/DisableHelper.java index 2f59cdfa..5f257595 100644 --- a/common/src/main/java/com/xtracr/realcamera/compat/DisableHelper.java +++ b/common/src/main/java/com/xtracr/realcamera/compat/DisableHelper.java @@ -18,14 +18,14 @@ public final class DisableHelper { public static final Entry MAIN_FEATURE, RENDER_MODEL, RENDER_HANDS; private static final Pattern MULTI_STAR = Pattern.compile("\\*+"); - private static final Predicate FALSE = _ -> false; + private static final Predicate FALSE = ignoredPlayer -> false; private static final Map ENTRIES = new HashMap<>(); private static int exitTick = 0; static { MAIN_FEATURE = new Entry("mainFeature", player -> player.isSleeping() || player.isSpectator()); RENDER_MODEL = new Entry("renderModel", FALSE, Player::isScoping); - RENDER_HANDS = new Entry("renderHands", _ -> RealCameraCore.isRendering()); + RENDER_HANDS = new Entry("renderHands", ignoredPlayer -> RealCameraCore.isRendering()); MAIN_FEATURE.registerOrInBinding(player -> ConfigFile.config().binding.disableWhenSneaking && player.isCrouching()); MAIN_FEATURE.registerOrInClassic(player -> ConfigFile.config().classic.disableWhenSneaking && player.isCrouching()); MAIN_FEATURE.registerOrInBinding(player -> ConfigFile.config().binding.disableWhenSwimming && checkCondition(player, player.isVisuallySwimming(), ConfigFile.config().binding.exitTick)); @@ -139,4 +139,4 @@ public boolean disabled(Entity cameraEntity) { return ConfigFile.config().isClassic ? predicateInClassic.test(player) : predicateInBinding.test(player); } } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/xtracr/realcamera/compat/YSMCompat.java b/common/src/main/java/com/xtracr/realcamera/compat/YSMCompat.java index a342c325..3d310c99 100644 --- a/common/src/main/java/com/xtracr/realcamera/compat/YSMCompat.java +++ b/common/src/main/java/com/xtracr/realcamera/compat/YSMCompat.java @@ -11,7 +11,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.state.EntityRenderState; -import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.world.phys.Vec3; import org.joml.Matrix3f; import org.joml.Matrix4f; diff --git a/common/src/main/java/com/xtracr/realcamera/gui/GUIHelper.java b/common/src/main/java/com/xtracr/realcamera/gui/GUIHelper.java index 98cde370..fae8402f 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/GUIHelper.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/GUIHelper.java @@ -4,7 +4,7 @@ import com.xtracr.realcamera.renderer.state.BuiltModelRecord; import com.xtracr.realcamera.renderer.state.VertexData; import com.xtracr.realcamera.renderer.state.gui.*; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.render.TextureSetup; import net.minecraft.client.renderer.RenderPipelines; @@ -23,54 +23,54 @@ public static ScreenRectangle getBounds(int x0, int y0, int x1, int y1, Matrix3x return scissorArea != null ? scissorArea.intersection(scissorArea2) : scissorArea2; } - public static void enableScissor(GuiGraphicsExtractor graphics, ScreenRectangle rectangle) { + public static void enableScissor(GuiGraphics graphics, ScreenRectangle rectangle) { graphics.enableScissor(rectangle.left(), rectangle.top(), rectangle.right(), rectangle.bottom()); } - public static void fill(GuiGraphicsExtractor graphics, float x0, float y0, float x1, float y1, int argb) { + public static void fill(GuiGraphics graphics, float x0, float y0, float x1, float y1, int argb) { fill(graphics, x0, y0, x1, y1, 0, argb); } - public static void fill(GuiGraphicsExtractor graphics, float x0, float y0, float x1, float y1, float z, int argb) { - ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().addGuiElement(new ColoredFloatRectangleRenderState( + public static void fill(GuiGraphics graphics, float x0, float y0, float x1, float y1, float z, int argb) { + ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().submitGuiElement(new ColoredFloatRectangleRenderState( RenderPipelines.GUI, TextureSetup.noTexture(), new Matrix3x2f(graphics.pose()), x0, y0, x1, y1, z, argb, ((GuiGraphicsExtractorAccessor) graphics).getScissorStack().peek())); } - public static void outline(GuiGraphicsExtractor graphics, float x, float y, float width, float height, int argb) { + public static void outline(GuiGraphics graphics, float x, float y, float width, float height, int argb) { fill(graphics, x, y, x + width, y + 1, argb); fill(graphics, x, y + height - 1, x + width, y + height, argb); fill(graphics, x, y + 1, x + 1, y + height - 1, argb); fill(graphics, x + width - 1, y + 1, x + width, y + height - 1, argb); } - public static void triangleOrQuad(GuiGraphicsExtractor graphics, VertexData[] vertices, float z, int argb) { + public static void triangleOrQuad(GuiGraphics graphics, VertexData[] vertices, float z, int argb) { if (vertices.length < 3) return; float x0 = vertices[0].x(), y0 = vertices[0].y(); float x1 = vertices[1].x(), y1 = vertices[1].y(); float x2 = vertices[2].x(), y2 = vertices[2].y(); boolean isQuad = vertices.length > 3; float x3 = isQuad ? vertices[3].x() : x2, y3 = isQuad ? vertices[3].y() : y2; - ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().addGuiElement(new ColoredFloatQuadRenderState( + ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().submitGuiElement(new ColoredFloatQuadRenderState( RenderPipelines.GUI, TextureSetup.noTexture(), new Matrix3x2f(graphics.pose()), x0, y0, z, x1, y1, z, x2, y2, z, x3, y3, z, argb, ((GuiGraphicsExtractorAccessor) graphics).getScissorStack().peek())); } - public static void vector(GuiGraphicsExtractor graphics, Vec3 start, Vec3 vector, float z, int argb) { - ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().addGuiElement(new ColoredFloatLineRenderState( + public static void vector(GuiGraphics graphics, Vec3 start, Vec3 vector, float z, int argb) { + ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().submitGuiElement(new ColoredFloatLineRenderState( RenderPipelines.GUI, TextureSetup.noTexture(), new Matrix3x2f(graphics.pose()), (float) start.x(), (float) start.y(), z, (float) vector.x(), (float) vector.y(), 0, argb, ((GuiGraphicsExtractorAccessor) graphics).getScissorStack().peek())); } - public static void culledModels(GuiGraphicsExtractor graphics, List records, float scale, Matrix4f transform, int x0, int y0, int x1, int y1) { - ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().addPicturesInPictureState( + public static void culledModels(GuiGraphics graphics, List records, float scale, Matrix4f transform, int x0, int y0, int x1, int y1) { + ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().submitPicturesInPictureState( new GuiCulledModelsRenderState(records, transform, x0, y0, x1, y1, scale, ((GuiGraphicsExtractorAccessor) graphics).getScissorStack().peek()) ); } - public static void flattenedModels(GuiGraphicsExtractor graphics, List records, Vector3f translation, int x0, int y0, int x1, int y1, float scale) { - ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().addPicturesInPictureState( + public static void flattenedModels(GuiGraphics graphics, List records, Vector3f translation, int x0, int y0, int x1, int y1, float scale) { + ((GuiGraphicsExtractorAccessor) graphics).getGuiRenderState().submitPicturesInPictureState( new GuiFlattenedModelsRenderState(records, translation, x0, y0, x1, y1, scale, ((GuiGraphicsExtractorAccessor) graphics).getScissorStack().peek()) ); } diff --git a/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java b/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java index f963e14d..878603ac 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java @@ -15,11 +15,11 @@ import com.xtracr.realcamera.renderer.state.VertexData; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.renderer.rendertype.RenderTypes; -import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; import org.joml.Matrix3f; @@ -192,7 +192,7 @@ public void computeFocusedPolyhedron() { focusedPolyhedron.add(focused); } - public void drawCameraDirections(GuiGraphicsExtractor graphics, double modelScale) { + public void drawCameraDirections(GuiGraphics graphics, double modelScale) { if (targetPrimitives[0] == null || targetPrimitives[1] == null || targetPrimitives[2] == null) return; Vec3 start = bindResult.getPosition(); Matrix3f normal = bindResult.getRotation(); @@ -202,14 +202,14 @@ public void drawCameraDirections(GuiGraphicsExtractor graphics, double modelScal GUIHelper.vector(graphics, start, new Vec3(normal.m00(), normal.m01(), normal.m02()).scale(modelScale / 6), Z_LINE, LEFT_ARGB); } - public void drawBindTarget(GuiGraphicsExtractor graphics, BindTarget target, double modelScale) { + public void drawBindTarget(GuiGraphics graphics, BindTarget target, double modelScale) { TargetConfig config = target.targetConfig(); if (targetPrimitives[0] != null) GUIHelper.triangleOrQuad(graphics, targetPrimitives[0], Z_QUAD, PLANE_ARGB); if (targetPrimitives[1] != null) GUIHelper.vector(graphics, VertexData.position(targetPrimitives[1], config.forwardU(), config.forwardV()), VertexData.normal(targetPrimitives[1]).scale(-modelScale / 2), Z_LINE, FORWARD_ARGB); if (targetPrimitives[2] != null) GUIHelper.vector(graphics, VertexData.position(targetPrimitives[2], config.upwardU(), config.upwardV()), VertexData.normal(targetPrimitives[2]).scale(-modelScale / 2), Z_LINE, UPWARD_ARGB); } - public void drawFocusedInModelArea(GuiGraphicsExtractor graphics) { + public void drawFocusedInModelArea(GuiGraphics graphics) { if (focusedPolyhedron.isEmpty() || focusedRecord == null) return; VertexData[] focused = focusedPolyhedron.getFirst(); VertexData[] reversed = new VertexData[focused.length]; @@ -218,7 +218,7 @@ public void drawFocusedInModelArea(GuiGraphicsExtractor graphics) { for (VertexData[] primitive : focusedPolyhedron) GUIHelper.triangleOrQuad(graphics, primitive, Z_QUAD, FOCUSED_ARGB); } - public void drawFocusedInTextureArea(GuiGraphicsExtractor graphics, Matrix4f texturePose) { + public void drawFocusedInTextureArea(GuiGraphics graphics, Matrix4f texturePose) { int length = 0; VertexData[] transformed = new VertexData[0], reversed = new VertexData[0]; Vector3f position = new Vector3f(); diff --git a/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java b/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java index eeaeba5f..939adc4d 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java @@ -17,7 +17,7 @@ import com.xtracr.realcamera.util.LocUtil; import com.xtracr.realcamera.util.MathUtil; import net.minecraft.ChatFormatting; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.layouts.FrameLayout; @@ -79,7 +79,7 @@ public final class ModelViewScreen extends Screen { private final NumberField vMaxField = createFloatField(widgetWidth * 2 - 24, 0).setMin(-1f).setMax(2f); private final NumberField scaleField = createFloatField(widgetWidth, 1.0f).setMax(64.0f); private final NumberField depthField = createFloatField(widgetWidth, 0.2f).setMax(16.0f); - private final CycleIconButton showTextureButton = new CycleIconButton(48, 16, 0, 2).setOnValueChange(_ -> initWidgets(page)); + private final CycleIconButton showTextureButton = new CycleIconButton(48, 16, 0, 2).setOnValueChange(ignoredValue -> initWidgets(page)); private final CycleIconButton pauseButton = new CycleIconButton(0, 16, 0, 2); private final CycleIconButton bindXButton = new CycleIconButton(16, 16, 1, 2); private final CycleIconButton bindYButton = new CycleIconButton(16, 16, 0, 2); @@ -101,24 +101,24 @@ public final class ModelViewScreen extends Screen { 0, LocUtil.MODEL_VIEW_WIDGET("forwardVector").withStyle(ChatFormatting.GREEN), 1, LocUtil.MODEL_VIEW_WIDGET("upwardVector").withStyle(ChatFormatting.RED), 2, LocUtil.MODEL_VIEW_WIDGET("position").withStyle(ChatFormatting.BLUE)), 0) - .withTooltip(_ -> createTooltip("selecting", modifierKey.getDisplayName(), modifierKey.getDisplayName())) + .withTooltip(ignoredValue -> createTooltip("selecting", modifierKey.getDisplayName(), modifierKey.getDisplayName())) .create(0, 0, wideWidgetWidth, widgetHeight, LocUtil.MODEL_VIEW_WIDGET("selecting")); private final CycleButton disableModeButton = createCyclingButtonBuilder(ImmutableMap.of( 0, LocUtil.MODEL_VIEW_WIDGET("all").withStyle(ChatFormatting.GREEN), 1, LocUtil.MODEL_VIEW_WIDGET("part").withStyle(ChatFormatting.BLUE)), 0) - .withTooltip(_ -> createTooltip("disableMode", modifierKey.getDisplayName())) + .withTooltip(ignoredValue -> createTooltip("disableMode", modifierKey.getDisplayName())) .create(0, 0, wideWidgetWidth, widgetHeight, LocUtil.MODEL_VIEW_WIDGET("disableMode")); private final CycleButton selectionModeButton = createCyclingButtonBuilder(ImmutableSortedMap.of( 0, LocUtil.MODEL_VIEW_WIDGET("single"), 1, LocUtil.MODEL_VIEW_WIDGET("multiple"), 2, LocUtil.MODEL_VIEW_WIDGET("range").withStyle(ChatFormatting.BLUE)), 0) - .withTooltip(_ -> createTooltip("selectionMode", modifierKey.getDisplayName(), modifierKey.getDisplayName())) + .withTooltip(ignoredValue -> createTooltip("selectionMode", modifierKey.getDisplayName(), modifierKey.getDisplayName())) .create(0, 0, wideWidgetWidth, widgetHeight, LocUtil.MODEL_VIEW_WIDGET("selectionMode")); private final CycleButton toggleSliderButton = createCyclingButtonBuilder(ImmutableMap.of( 0, LocUtil.MODEL_VIEW_WIDGET("toggleSliderToField"), 1, LocUtil.MODEL_VIEW_WIDGET("toggleFieldToSlider")), 0) .displayOnlyValue() - .create(0, 0, wideWidgetWidth, widgetHeight, CommonComponents.EMPTY, (_, i) -> { + .create(0, 0, wideWidgetWidth, widgetHeight, CommonComponents.EMPTY, (ignoredButton, i) -> { boolean useSlider = i == 0; for (NumberWidgetPair pair : widgetPairs) pair.syncAndSwitch(useSlider); initWidgets(page); @@ -129,7 +129,7 @@ public final class ModelViewScreen extends Screen { Category.DISABLE, LocUtil.MODEL_VIEW_WIDGET(Category.DISABLE.next().id)), Category.CONFIGS) .withTooltip(category -> createTooltip(category.next().id)) .displayOnlyValue() - .create(0, 0, compactWidgetWidth, widgetHeight, CommonComponents.EMPTY, (_, _) -> initWidgets(0)); + .create(0, 0, compactWidgetWidth, widgetHeight, CommonComponents.EMPTY, (ignoredButton, ignoredValue) -> initWidgets(0)); public ModelViewScreen() { super(LocUtil.MODEL_VIEW_TITLE()); @@ -166,7 +166,7 @@ private void initWidgets(int page) { if (toggleCategoryButton.getValue() == Category.DISABLE) addRenderableWidget(showTextureButton).setPosition(x + (xSize - middleWidth) / 2 + 4, y + 4); addRenderableWidget(pauseButton).setPosition(x + (xSize + middleWidth) / 2 - 38, y + 4); - addRenderableWidget(new SimpleIconButton(x + (xSize + middleWidth) / 2 - 20, y + 4, 16, 16, 0, 0, _ -> { + addRenderableWidget(new SimpleIconButton(x + (xSize + middleWidth) / 2 - 20, y + 4, 16, 16, 0, 0, ignoredButton -> { modelScale = textureScale = DEFAULT_SCALE; entityYawSlider.setNumber(0); entityPitchSlider.setNumber(0); @@ -209,7 +209,7 @@ private void initLeftWidgets() { rows.addChild(bindRotButton, smallSettings).setTooltip(createTooltip("bindButtons")); rows.addChild(offsetPitchPair, numericControlSettings); rows.addChild(offsetYawPair, 2, grid.newCellSettings().padding(26, 2, 0, 0)); - rows.addChild(new SimpleIconButton(0, 0, _ -> widgetPairs.forEach(pair -> pair.setNumber(0))), smallSettings); + rows.addChild(new SimpleIconButton(0, 0, ignoredButton -> widgetPairs.forEach(pair -> pair.setNumber(0))), smallSettings); rows.addChild(offsetRollPair, numericControlSettings); rows.addChild(scaleField, smallSettings).setTooltip(createTooltip("scale")); rows.addChild(depthField, smallSettings).setTooltip(createTooltip("depth")); @@ -233,7 +233,7 @@ else if (index > 0 && index <= rectWidgets.size()) { rectWidgetsSizeWidget.setPosition(x + 4 + widgetWidth + 5 + font.width("/"), y + 4 + (widgetHeight + 2) * 3); rectWidgetsSizeWidget.setMessage(LocUtil.literal(String.valueOf(rectWidgets.size()))); addRenderableWidget(rectWidgetsSizeWidget); - rows.addChild(new SimpleIconButton(48, 0, _ -> deleteFocusedRectWidget()), grid.newCellSettings().padding(5 + widgetWidth - 18, 3, 1, 1)) + rows.addChild(new SimpleIconButton(48, 0, ignoredButton -> deleteFocusedRectWidget()), grid.newCellSettings().padding(5 + widgetWidth - 18, 3, 1, 1)) .setTooltip(createTooltip("deleteSelectedRectangle")); rows.addChild(new StringWidget(26, widgetHeight, LocUtil.literal("uMin:"), font)); rows.addChild(uMinField, offsetXSettings).setOnValueChange(f -> { @@ -287,7 +287,7 @@ private void initRightWidgets() { LayoutSettings smallSettings = grid.newCellSettings().padding(5, 3, 1, 1); GridLayout.RowHelper rows = grid.createRowHelper(4); rows.addChild(toggleCategoryButton, 3); - rows.addChild(new SimpleIconButton(80, 0, _ -> { + rows.addChild(new SimpleIconButton(80, 0, ignoredButton -> { if (CompatibilityHelper.isModLoaded("cloth-config")) minecraft.setScreen(ConfigScreen.create(this)); }), smallSettings).setTooltip(createTooltip("toConfigScreen")); final int widgetsPerPage, size; @@ -304,18 +304,18 @@ private void initRightWidgets() { for (int i = page * widgetsPerPage; i < Math.min((page + 1) * widgetsPerPage, size); i++) { DisableConfig config = disableConfigs.get(i); String targetName = nameField.getValue(); - Set hiddenNames = hiddenNameMap.computeIfAbsent(targetName, _ -> new HashSet<>()); + Set hiddenNames = hiddenNameMap.computeIfAbsent(targetName, ignoredName -> new HashSet<>()); addRenderableWidget(new CycleIconButton(32, 16, hiddenNames.contains(config.name()) ? 1 : 0, 2)) .setOnValueChange(value -> { if (value == 0) hiddenNames.remove(config.name()); else hiddenNames.add(config.name()); }) .setPosition(x + (xSize + middleWidth) / 2 - 20, y + 5 + (widgetHeight + 2) * (2 + i % widgetsPerPage)); - rows.addChild(createButton(LocUtil.literal(config.name()), compactWidgetWidth, _ -> { + rows.addChild(createButton(LocUtil.literal(config.name()), compactWidgetWidth, ignoredButton -> { loadDisableConfig(config); initWidgets(page); }), 3).setTooltip(Tooltip.create(LocUtil.literal(config.name()))); - rows.addChild(new SimpleIconButton(48, 0, _ -> { + rows.addChild(new SimpleIconButton(48, 0, ignoredButton -> { disableConfigs.removeIf(disableConfig -> disableConfig.name().equals(config.name())); hiddenNameMap.values().forEach(names -> names.remove(config.name())); if (disabledNameField.getValue().equals(config.name())) clearDisableDraft(); @@ -332,13 +332,13 @@ private void initRightWidgets() { BindTarget target = i < fixedTargetCount ? fixedTargetList.get(i) : targetList.get(i - fixedTargetCount); final int targetIndex = i; String name = target.name(); - rows.addChild(createButton(LocUtil.literal(name), compactWidgetWidth, _ -> loadBindTarget(target)), 3) + rows.addChild(createButton(LocUtil.literal(name), compactWidgetWidth, ignoredButton -> loadBindTarget(target)), 3) .setTooltip(Tooltip.create(name.equals(RealCameraCore.currentTarget().name()) ? LocUtil.literal(name + "\n").append(LocUtil.MODEL_VIEW_WIDGET("currentConfig")) : LocUtil.literal(name)) ); if (i < fixedTargetCount) continue; - rows.addChild(new SimpleIconButton(48, 0, _ -> { + rows.addChild(new SimpleIconButton(48, 0, ignoredButton -> { targetList.remove(target); ConfigFile.save(); if (nameField.getValue().equals(target.name())) loadAdjacentBindTarget(fixedTargetList, targetList, targetIndex); @@ -350,10 +350,10 @@ private void initRightWidgets() { FrameLayout.alignInRectangle(grid, x + (xSize + middleWidth) / 2 + 4, y + 2, x + xSize, y + ySize, 0, 0); grid.visitWidgets(this::addRenderableWidget); final int pages = (size - 1) / widgetsPerPage + 1; - addRenderableWidget(new SimpleIconButton(x + (xSize + middleWidth) / 2 + 8, y + ySize - 20, 16, 16, 16, 0, _ -> initWidgets((page - 1 + pages) % pages))); + addRenderableWidget(new SimpleIconButton(x + (xSize + middleWidth) / 2 + 8, y + ySize - 20, 16, 16, 16, 0, ignoredButton -> initWidgets((page - 1 + pages) % pages))); Component pageInfoText = LocUtil.literal((page + 1) + " / " + pages); addRenderableWidget(new StringWidget(x + (3 * xSize + middleWidth) / 4 + 2 - font.width(pageInfoText) / 2, y + ySize - 20, font.width(pageInfoText), widgetHeight, pageInfoText, font)); - addRenderableWidget(new SimpleIconButton(x + xSize - 21, y + ySize - 20, 16, 16, 32, 0, _ -> initWidgets((page + 1) % pages))); + addRenderableWidget(new SimpleIconButton(x + xSize - 21, y + ySize - 20, 16, 16, 32, 0, ignoredButton -> initWidgets((page + 1) % pages))); } public boolean deleteFocusedRectWidget() { @@ -367,8 +367,8 @@ public boolean deleteFocusedRectWidget() { } @Override - public void extractRenderState(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { - super.extractRenderState(graphics, mouseX, mouseY, partialTicks); + public void render(@NonNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + super.render(graphics, mouseX, mouseY, partialTicks); if (toggleCategoryButton.getValue() == Category.DISABLE && selectionModeButton.getValue() == 2 && inModelViewArea(mouseX, mouseY)) { GUIHelper.enableScissor(graphics, modelViewArea); GUIHelper.fill(graphics, mouseX - selectionRadius, mouseY - selectionRadius, mouseX + selectionRadius, mouseY + selectionRadius, 400, SELECTION_COLOR); @@ -379,14 +379,14 @@ public void extractRenderState(@NonNull GuiGraphicsExtractor graphics, int mouse if (clickedX >= 0 && clickedY >= 0) graphics.fill(Math.min((int) clickedX, mouseX), Math.min((int) clickedY, mouseY), Math.max((int) clickedX, mouseX), Math.max((int) clickedY, mouseY), SELECTION_COLOR); if (disableModeButton.getValue() == 0) - new UVRectangleWidget(0f, 0f, 1f, 1f).extractWidgetRenderState(graphics, mouseX, mouseY, partialTicks); + new UVRectangleWidget(0f, 0f, 1f, 1f).renderWidget(graphics, mouseX, mouseY, partialTicks); graphics.disableScissor(); } } @Override - public void extractBackground(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { - super.extractBackground(graphics, mouseX, mouseY, partialTicks); + public void renderBackground(@NonNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + super.renderBackground(graphics, mouseX, mouseY, partialTicks); graphics.fill(x, y, x + (xSize - middleWidth) / 2 - 4, y + ySize, SIDE_PANEL_BG); graphics.fill(x + (xSize - middleWidth) / 2, y, x + (xSize + middleWidth) / 2, y + ySize, CENTER_PANEL_BG); graphics.fill(x + (xSize + middleWidth) / 2 + 4, y, x + xSize, y + ySize, SIDE_PANEL_BG); @@ -449,7 +449,7 @@ private void computeFocusedPrimitives(ModelAnalyser analyser, List modelRecords) { + private void renderCulledModels(GuiGraphics graphics, ModelAnalyser analyser, BindTarget target, List modelRecords) { int x1 = modelViewArea.left(), y1 = modelViewArea.top(), x2 = modelViewArea.right(), y2 = modelViewArea.bottom(); GUIHelper.enableScissor(graphics, modelViewArea); float invScale = 1.0f / modelScale; @@ -463,7 +463,7 @@ private void renderCulledModels(GuiGraphicsExtractor graphics, ModelAnalyser ana graphics.disableScissor(); } - private void renderFlattenedModels(GuiGraphicsExtractor graphics, ModelAnalyser analyser, List textureRecords) { + private void renderFlattenedModels(GuiGraphics graphics, ModelAnalyser analyser, List textureRecords) { if (textureViewArea == null) return; int x1 = textureViewArea.left(), y1 = textureViewArea.top(), x2 = textureViewArea.right(), y2 = textureViewArea.bottom(); GUIHelper.enableScissor(graphics, textureViewArea); @@ -939,7 +939,7 @@ public boolean mergeWith(UVRectangleWidget other) { } @Override - protected void extractWidgetRenderState(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { + protected void renderWidget(@NonNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { Vec2 minXY = translateUVToXY(uMin, vMin, textureViewArea), maxXY = translateUVToXY(uMax, vMax, textureViewArea); float x1 = minXY.x, y1 = minXY.y, x2 = maxXY.x, y2 = maxXY.y, width = x2 - x1, height = y2 - y1; setX((int) x1); diff --git a/common/src/main/java/com/xtracr/realcamera/gui/components/CycleIconButton.java b/common/src/main/java/com/xtracr/realcamera/gui/components/CycleIconButton.java index 02e97764..0736fcac 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/components/CycleIconButton.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/components/CycleIconButton.java @@ -1,6 +1,6 @@ package com.xtracr.realcamera.gui.components; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.input.InputWithModifiers; @@ -60,10 +60,10 @@ public void onPress(@NonNull InputWithModifiers input) { } @Override - public void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { + protected void renderContents(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { graphics.fill(getX(), getY(), getX() + getWidth(), getY() + getHeight(), 0xFF646464); graphics.blit(RenderPipelines.GUI_TEXTURED, texture, getX(), getY(), u, v + value * vOffset, width, height, textureWidth, textureHeight); - if (isHoveredOrFocused()) graphics.outline(getX(), getY(), getWidth(), getHeight(), 0xFFFFFFFF); + if (isHoveredOrFocused()) graphics.renderOutline(getX(), getY(), getWidth(), getHeight(), 0xFFFFFFFF); } @Override diff --git a/common/src/main/java/com/xtracr/realcamera/gui/components/NumberField.java b/common/src/main/java/com/xtracr/realcamera/gui/components/NumberField.java index c102c7d1..beeb133d 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/components/NumberField.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/components/NumberField.java @@ -4,7 +4,7 @@ import com.xtracr.realcamera.util.LocUtil; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.input.CharacterEvent; @@ -65,7 +65,7 @@ public NumberField setMin(T minimum) { } public NumberField setOnValueChange(Consumer consumer) { - super.setResponder(_ -> consumer.accept(getNumber())); + super.setResponder(ignoredText -> consumer.accept(getNumber())); return this; } @@ -109,9 +109,9 @@ public boolean charTyped(CharacterEvent event) { } @Override - public void extractWidgetRenderState(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(@NonNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { checkText(); - super.extractWidgetRenderState(graphics, mouseX, mouseY, partialTicks); + super.renderWidget(graphics, mouseX, mouseY, partialTicks); } private static final class IntField extends NumberField { diff --git a/common/src/main/java/com/xtracr/realcamera/gui/components/NumberWidgetPair.java b/common/src/main/java/com/xtracr/realcamera/gui/components/NumberWidgetPair.java index 6013ab89..97f90756 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/components/NumberWidgetPair.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/components/NumberWidgetPair.java @@ -3,7 +3,7 @@ import com.xtracr.realcamera.util.LocUtil; import com.xtracr.realcamera.util.MathUtil; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.input.CharacterEvent; @@ -82,8 +82,8 @@ public void setHeight(int height) { } @Override - public void extractWidgetRenderState(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { - getActiveWidget().extractRenderState(graphics, mouseX, mouseY, partialTicks); + protected void renderWidget(@NonNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + getActiveWidget().render(graphics, mouseX, mouseY, partialTicks); } @Override diff --git a/common/src/main/java/com/xtracr/realcamera/gui/components/SimpleIconButton.java b/common/src/main/java/com/xtracr/realcamera/gui/components/SimpleIconButton.java index b6634bb2..6fd6f886 100644 --- a/common/src/main/java/com/xtracr/realcamera/gui/components/SimpleIconButton.java +++ b/common/src/main/java/com/xtracr/realcamera/gui/components/SimpleIconButton.java @@ -1,7 +1,7 @@ package com.xtracr.realcamera.gui.components; import com.xtracr.realcamera.RealCamera; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.CommonComponents; @@ -30,9 +30,9 @@ public SimpleIconButton(int x, int y, int width, int height, int u, int v, Ident } @Override - public void extractContents(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { + protected void renderContents(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { graphics.fill(getX(), getY(), getX() + getWidth(), getY() + getHeight(), 0xFF646464); graphics.blit(RenderPipelines.GUI_TEXTURED, texture, getX(), getY(), u, v, width, height, textureWidth, textureHeight); - if (isHoveredOrFocused()) graphics.outline(getX(), getY(), getWidth(), getHeight(), 0xFFFFFFFF); + if (isHoveredOrFocused()) graphics.renderOutline(getX(), getY(), getWidth(), getHeight(), 0xFFFFFFFF); } } diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/MixinCamera.java b/common/src/main/java/com/xtracr/realcamera/mixin/MixinCamera.java index 3f84c012..774f570a 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/MixinCamera.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/MixinCamera.java @@ -3,7 +3,9 @@ import com.xtracr.realcamera.RealCameraCore; import com.xtracr.realcamera.config.ConfigFile; import com.xtracr.realcamera.config.ModConfig; +import com.xtracr.realcamera.mixin.accessor.GameRendererAccessor; import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; @@ -56,8 +58,8 @@ public abstract class MixinCamera { @Final private Quaternionf rotation; - @Inject(method = "alignWithEntity", at = @At("RETURN")) - private void realcamera$setupCamera(float partialTicks, CallbackInfo ci) { + @Inject(method = "setup", at = @At("RETURN")) + private void realcamera$setupCamera(Level setupLevel, Entity setupEntity, boolean detached, boolean mirrored, float partialTicks, CallbackInfo ci) { if (!RealCameraCore.isActive()) return; ModConfig config = ConfigFile.config(); Vec3 startVec = position; @@ -82,7 +84,9 @@ public abstract class MixinCamera { Vec3 eulerAngle = RealCameraCore.getEulerAngle(xRot, yRot, 0); realcamera$setRotation((float) eulerAngle.y(), (float) eulerAngle.x(), (float) eulerAngle.z()); } - realcamera$clipToSpace(startVec, entity, calculateFov(partialTicks)); + float fov = ((GameRendererAccessor) Minecraft.getInstance().gameRenderer) + .invokeGetFov((Camera) (Object) this, partialTicks, true); + realcamera$clipToSpace(startVec, entity, fov); } @Unique @@ -115,9 +119,6 @@ public abstract class MixinCamera { setPosition(startVec.add(offset)); } - @Shadow - protected abstract float calculateFov(float partialTicks); - @Shadow protected abstract void move(float forwards, float up, float right); diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/MixinGameRenderer.java b/common/src/main/java/com/xtracr/realcamera/mixin/MixinGameRenderer.java index 9818279f..66e91234 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/MixinGameRenderer.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/MixinGameRenderer.java @@ -23,7 +23,7 @@ public abstract class MixinGameRenderer { @Final private Camera mainCamera; - @Inject(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;update(Lnet/minecraft/client/DeltaTracker;)V")) + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;updateCamera(Lnet/minecraft/client/DeltaTracker;)V")) private void realcamera$atCameraUpdate(DeltaTracker deltaTracker, boolean advanceGameTime, CallbackInfo ci) { float partialTicks = deltaTracker.getGameTimeDeltaPartialTick(true); CompatibilityHelper.NEA_setDeltaTick(partialTicks); diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/MixinGui.java b/common/src/main/java/com/xtracr/realcamera/mixin/MixinGui.java index 5f1ccacd..de7529a3 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/MixinGui.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/MixinGui.java @@ -5,7 +5,7 @@ import com.xtracr.realcamera.util.CrosshairUtil; import net.minecraft.client.DeltaTracker; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.GuiGraphics; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -13,16 +13,16 @@ @Mixin(Gui.class) public abstract class MixinGui { - @Inject(method = "extractCrosshair", at = @At("HEAD")) - private void realcamera$atRenderCrosshairHEAD(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker, CallbackInfo ci) { + @Inject(method = "renderCrosshair", at = @At("HEAD")) + private void realcamera$atRenderCrosshairHEAD(GuiGraphics graphics, DeltaTracker deltaTracker, CallbackInfo ci) { if (ConfigFile.config().dynamicCrosshair && RealCameraCore.isActive()) { graphics.pose().pushMatrix(); CrosshairUtil.translateMatrices(graphics.pose()); } } - @Inject(method = "extractCrosshair", at = @At("RETURN")) - private void realcamera$atRenderCrosshairRETURN(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker, CallbackInfo ci) { + @Inject(method = "renderCrosshair", at = @At("RETURN")) + private void realcamera$atRenderCrosshairRETURN(GuiGraphics graphics, DeltaTracker deltaTracker, CallbackInfo ci) { if (ConfigFile.config().dynamicCrosshair && RealCameraCore.isActive()) { graphics.pose().popMatrix(); } diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/MixinLevelRenderer.java b/common/src/main/java/com/xtracr/realcamera/mixin/MixinLevelRenderer.java index 7defc800..cdceeca4 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/MixinLevelRenderer.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/MixinLevelRenderer.java @@ -8,17 +8,18 @@ import com.xtracr.realcamera.util.CrosshairUtil; import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; +import net.minecraft.client.Camera; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.SubmitNodeCollector; -import net.minecraft.client.renderer.chunk.ChunkSectionsToRender; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.state.EntityRenderState; -import net.minecraft.client.renderer.state.level.CameraRenderState; -import net.minecraft.client.renderer.state.level.LevelRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; +import net.minecraft.client.renderer.state.LevelRenderState; import net.minecraft.world.TickRateManager; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4fc; +import org.joml.Matrix4f; +import org.joml.Quaternionf; import org.joml.Vector4f; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -37,9 +38,9 @@ public abstract class MixinLevelRenderer { private EntityRenderDispatcher entityRenderDispatcher; @Inject(method = "renderLevel", at = @At("HEAD")) - private void realcamera$atRenderLevelHead(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, ChunkSectionsToRender chunkSectionsToRender, CallbackInfo ci) { + private void realcamera$atRenderLevelHead(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, Camera camera, Matrix4f modelViewMatrix, Matrix4f projectionMatrix, Matrix4f cullingProjectionMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci) { if (ConfigFile.config().dynamicCrosshair && RealCameraCore.isActive()) { - CrosshairUtil.update(minecraft, cameraState.pos, modelViewMatrix, cameraState.projectionMatrix); + CrosshairUtil.update(minecraft, camera.position(), modelViewMatrix, projectionMatrix); } } @@ -51,7 +52,7 @@ public abstract class MixinLevelRenderer { float partialTicks = minecraft.getDeltaTracker().getGameTimeDeltaPartialTick(!tickManager.isEntityFrozen(entity)); CameraRenderState cameraState = levelRenderState.cameraRenderState; if (!ConfigFile.config().isClassic) - RealCameraCore.renderCameraEntity(minecraft, partialTicks, output, cameraState.viewRotationMatrix); + RealCameraCore.renderCameraEntity(minecraft, partialTicks, output, new Matrix4f().rotation(new Quaternionf(cameraState.orientation).conjugate())); else { Vec3 cameraPos = cameraState.pos; EntityRenderState state = entityRenderDispatcher.extractEntity(entity, partialTicks); diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/CustomFeatureRenderer$StorageAccessor.java b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/CustomFeatureRenderer$StorageAccessor.java index c428ad24..a860bd0a 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/CustomFeatureRenderer$StorageAccessor.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/CustomFeatureRenderer$StorageAccessor.java @@ -12,8 +12,5 @@ @Mixin(CustomFeatureRenderer.Storage.class) public interface CustomFeatureRenderer$StorageAccessor { @Accessor - Map> getSolidCustomGeometrySubmits(); - - @Accessor - Map> getTranslucentCustomGeometrySubmits(); + Map> getCustomGeometrySubmits(); } diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/GameRendererAccessor.java b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/GameRendererAccessor.java new file mode 100644 index 00000000..02df4e01 --- /dev/null +++ b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/GameRendererAccessor.java @@ -0,0 +1,12 @@ +package com.xtracr.realcamera.mixin.accessor; + +import net.minecraft.client.Camera; +import net.minecraft.client.renderer.GameRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(GameRenderer.class) +public interface GameRendererAccessor { + @Invoker("getFov") + float invokeGetFov(Camera camera, float partialTicks, boolean changingFov); +} diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/GuiGraphicsExtractorAccessor.java b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/GuiGraphicsExtractorAccessor.java index f1ac30ef..05b5d326 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/GuiGraphicsExtractorAccessor.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/GuiGraphicsExtractorAccessor.java @@ -1,14 +1,14 @@ package com.xtracr.realcamera.mixin.accessor; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.client.renderer.state.gui.GuiRenderState; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.render.state.GuiRenderState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(GuiGraphicsExtractor.class) +@Mixin(GuiGraphics.class) public interface GuiGraphicsExtractorAccessor { @Accessor - GuiGraphicsExtractor.ScissorStack getScissorStack(); + GuiGraphics.ScissorStack getScissorStack(); @Accessor GuiRenderState getGuiRenderState(); diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelFeatureRenderer$StorageAccessor.java b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelFeatureRenderer$StorageAccessor.java index 938325c9..5665837a 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelFeatureRenderer$StorageAccessor.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelFeatureRenderer$StorageAccessor.java @@ -12,7 +12,7 @@ @Mixin(ModelFeatureRenderer.Storage.class) public interface ModelFeatureRenderer$StorageAccessor { @Accessor - Map>> getSolidModelSubmits(); + Map>> getOpaqueModelSubmits(); @Accessor List> getTranslucentModelSubmits(); diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelPartFeatureRenderer$StorageAccessor.java b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelPartFeatureRenderer$StorageAccessor.java index 77141613..e987bcd5 100644 --- a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelPartFeatureRenderer$StorageAccessor.java +++ b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/ModelPartFeatureRenderer$StorageAccessor.java @@ -12,8 +12,5 @@ @Mixin(ModelPartFeatureRenderer.Storage.class) public interface ModelPartFeatureRenderer$StorageAccessor { @Accessor - Map> getSolidModelPartSubmits(); - - @Accessor - Map> getTranslucentModelPartSubmits(); + Map> getModelPartSubmits(); } diff --git a/common/src/main/java/com/xtracr/realcamera/mixin/accessor/RenderSetupAccessor.java b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/RenderSetupAccessor.java new file mode 100644 index 00000000..90a2c31a --- /dev/null +++ b/common/src/main/java/com/xtracr/realcamera/mixin/accessor/RenderSetupAccessor.java @@ -0,0 +1,13 @@ +package com.xtracr.realcamera.mixin.accessor; + +import net.minecraft.client.renderer.rendertype.RenderSetup; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(RenderSetup.class) +public interface RenderSetupAccessor { + @Accessor("textures") + Map getTextureBindings(); +} diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/IterableVertexBuffer.java b/common/src/main/java/com/xtracr/realcamera/renderer/IterableVertexBuffer.java index 9395c67d..18a9913b 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/IterableVertexBuffer.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/IterableVertexBuffer.java @@ -45,7 +45,7 @@ public IterableVertexBuffer(MeshData meshData) { hasOverlay = overlayOffset != -1; hasLight = lightOffset != -1; hasNormal = normalOffset != -1; - fullFormat = vertexSize == DefaultVertexFormat.ENTITY.getVertexSize(); + fullFormat = vertexSize == DefaultVertexFormat.NEW_ENTITY.getVertexSize(); vertexCount = drawState.vertexCount(); VertexFormat.Mode drawMode = drawState.mode(); primitiveLength = drawMode.primitiveLength; diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/MultiVertexCatcher.java b/common/src/main/java/com/xtracr/realcamera/renderer/MultiVertexCatcher.java index e91727da..33ee0605 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/MultiVertexCatcher.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/MultiVertexCatcher.java @@ -75,14 +75,12 @@ private static void renderCustomGeometry(Map submit : entry.getValue()) { renderModel(poseStack, submit, buffer); } } - renderModelParts(poseStack, ((ModelPartFeatureRenderer$StorageAccessor) collection.getModelPartSubmits()).getSolidModelPartSubmits(), meshCatcher); - renderCustomGeometry(((CustomFeatureRenderer$StorageAccessor) collection.getCustomGeometrySubmits()).getSolidCustomGeometrySubmits(), meshCatcher); } } @@ -95,8 +93,8 @@ private void renderTranslucentFeatures() { for (var submit : ((ModelFeatureRenderer$StorageAccessor) collection.getModelSubmits()).getTranslucentModelSubmits()) { renderModel(poseStack, submit.modelSubmit(), meshCatcher.getBuffer(submit.renderType())); } - renderModelParts(poseStack, ((ModelPartFeatureRenderer$StorageAccessor) collection.getModelPartSubmits()).getTranslucentModelPartSubmits(), meshCatcher); - renderCustomGeometry(((CustomFeatureRenderer$StorageAccessor) collection.getCustomGeometrySubmits()).getTranslucentCustomGeometrySubmits(), meshCatcher); + renderModelParts(poseStack, ((ModelPartFeatureRenderer$StorageAccessor) collection.getModelPartSubmits()).getModelPartSubmits(), meshCatcher); + renderCustomGeometry(((CustomFeatureRenderer$StorageAccessor) collection.getCustomGeometrySubmits()).getCustomGeometrySubmits(), meshCatcher); } } diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/RoutingSubmitCollector.java b/common/src/main/java/com/xtracr/realcamera/renderer/RoutingSubmitCollector.java index eac3cbaf..fd896964 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/RoutingSubmitCollector.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/RoutingSubmitCollector.java @@ -7,18 +7,18 @@ import net.minecraft.client.renderer.OrderedSubmitNodeCollector; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.block.MovingBlockRenderState; -import net.minecraft.client.renderer.block.dispatch.BlockStateModel; -import net.minecraft.client.renderer.block.dispatch.BlockStateModelPart; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.client.renderer.entity.state.EntityRenderState; import net.minecraft.client.renderer.feature.ModelFeatureRenderer; import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.client.renderer.rendertype.RenderType; -import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.geometry.BakedQuad; import net.minecraft.network.chat.Component; import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; import org.joml.Quaternionf; import org.jspecify.annotations.NonNull; @@ -81,18 +81,18 @@ public void submitMovingBlock(@NonNull PoseStack poseStack, @NonNull MovingBlock } @Override - public void submitBlockModel(@NonNull PoseStack poseStack, @NonNull RenderType renderType, @NonNull List parts, int @NonNull [] tintLayers, int lightCoords, int overlayCoords, int outlineColor) { - defaultCollector.submitBlockModel(poseStack, renderType, parts, tintLayers, lightCoords, overlayCoords, outlineColor); + public void submitBlock(@NonNull PoseStack poseStack, @NonNull BlockState blockState, int lightCoords, int overlayCoords, int outlineColor) { + defaultCollector.submitBlock(poseStack, blockState, lightCoords, overlayCoords, outlineColor); } @Override - public void submitBreakingBlockModel(@NonNull PoseStack poseStack, @NonNull BlockStateModel model, long seed, int progress) { - defaultCollector.submitBreakingBlockModel(poseStack, model, seed, progress); + public void submitBlockModel(@NonNull PoseStack poseStack, @NonNull RenderType renderType, @NonNull BlockStateModel model, float red, float green, float blue, int lightCoords, int overlayCoords, int outlineColor) { + defaultCollector.submitBlockModel(poseStack, renderType, model, red, green, blue, lightCoords, overlayCoords, outlineColor); } @Override - public void submitItem(@NonNull PoseStack poseStack, @NonNull ItemDisplayContext displayContext, int lightCoords, int overlayCoords, int outlineColor, int @NonNull [] tintLayers, @NonNull List quads, ItemStackRenderState.@NonNull FoilType foilType) { - defaultCollector.submitItem(poseStack, displayContext, lightCoords, overlayCoords, outlineColor, tintLayers, quads, foilType); + public void submitItem(@NonNull PoseStack poseStack, @NonNull ItemDisplayContext displayContext, int lightCoords, int overlayCoords, int outlineColor, int @NonNull [] tintLayers, @NonNull List quads, @NonNull RenderType renderType, ItemStackRenderState.@NonNull FoilType foilType) { + defaultCollector.submitItem(poseStack, displayContext, lightCoords, overlayCoords, outlineColor, tintLayers, quads, renderType, foilType); } @Override @@ -155,18 +155,18 @@ public void submitMovingBlock(@NonNull PoseStack poseStack, @NonNull MovingBlock } @Override - public void submitBlockModel(@NonNull PoseStack poseStack, @NonNull RenderType renderType, @NonNull List parts, int @NonNull [] tintLayers, int lightCoords, int overlayCoords, int outlineColor) { - defaultDelegate.submitBlockModel(poseStack, renderType, parts, tintLayers, lightCoords, overlayCoords, outlineColor); + public void submitBlock(@NonNull PoseStack poseStack, @NonNull BlockState blockState, int lightCoords, int overlayCoords, int outlineColor) { + defaultDelegate.submitBlock(poseStack, blockState, lightCoords, overlayCoords, outlineColor); } @Override - public void submitBreakingBlockModel(@NonNull PoseStack poseStack, @NonNull BlockStateModel model, long seed, int progress) { - defaultDelegate.submitBreakingBlockModel(poseStack, model, seed, progress); + public void submitBlockModel(@NonNull PoseStack poseStack, @NonNull RenderType renderType, @NonNull BlockStateModel model, float red, float green, float blue, int lightCoords, int overlayCoords, int outlineColor) { + defaultDelegate.submitBlockModel(poseStack, renderType, model, red, green, blue, lightCoords, overlayCoords, outlineColor); } @Override - public void submitItem(@NonNull PoseStack poseStack, @NonNull ItemDisplayContext displayContext, int lightCoords, int overlayCoords, int outlineColor, int @NonNull [] tintLayers, @NonNull List quads, ItemStackRenderState.@NonNull FoilType foilType) { - defaultDelegate.submitItem(poseStack, displayContext, lightCoords, overlayCoords, outlineColor, tintLayers, quads, foilType); + public void submitItem(@NonNull PoseStack poseStack, @NonNull ItemDisplayContext displayContext, int lightCoords, int overlayCoords, int outlineColor, int @NonNull [] tintLayers, @NonNull List quads, @NonNull RenderType renderType, ItemStackRenderState.@NonNull FoilType foilType) { + defaultDelegate.submitItem(poseStack, displayContext, lightCoords, overlayCoords, outlineColor, tintLayers, quads, renderType, foilType); } @Override diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatLineRenderState.java b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatLineRenderState.java index 14423344..30352f4e 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatLineRenderState.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatLineRenderState.java @@ -6,7 +6,7 @@ import com.xtracr.realcamera.util.MathUtil; import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.render.TextureSetup; -import net.minecraft.client.renderer.state.gui.GuiElementRenderState; +import net.minecraft.client.gui.render.state.GuiElementRenderState; import org.joml.Matrix3x2f; import org.joml.Vector2f; import org.jspecify.annotations.NonNull; diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatQuadRenderState.java b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatQuadRenderState.java index ed4382ed..96a11d74 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatQuadRenderState.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatQuadRenderState.java @@ -6,7 +6,7 @@ import com.xtracr.realcamera.util.MathUtil; import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.render.TextureSetup; -import net.minecraft.client.renderer.state.gui.GuiElementRenderState; +import net.minecraft.client.gui.render.state.GuiElementRenderState; import org.joml.Matrix3x2f; import org.jspecify.annotations.Nullable; diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatRectangleRenderState.java b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatRectangleRenderState.java index 4ef2c7d7..aed234af 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatRectangleRenderState.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/ColoredFloatRectangleRenderState.java @@ -5,7 +5,7 @@ import com.xtracr.realcamera.gui.GUIHelper; import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.render.TextureSetup; -import net.minecraft.client.renderer.state.gui.GuiElementRenderState; +import net.minecraft.client.gui.render.state.GuiElementRenderState; import org.joml.Matrix3x2f; import org.jspecify.annotations.Nullable; diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiCulledModelsRenderState.java b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiCulledModelsRenderState.java index 8aec1f5a..4c0a198c 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiCulledModelsRenderState.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiCulledModelsRenderState.java @@ -2,7 +2,7 @@ import com.xtracr.realcamera.renderer.state.BuiltModelRecord; import net.minecraft.client.gui.navigation.ScreenRectangle; -import net.minecraft.client.renderer.state.gui.pip.PictureInPictureRenderState; +import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState; import org.joml.Matrix4f; import org.jspecify.annotations.Nullable; diff --git a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiFlattenedModelsRenderState.java b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiFlattenedModelsRenderState.java index 009477c4..bd968350 100644 --- a/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiFlattenedModelsRenderState.java +++ b/common/src/main/java/com/xtracr/realcamera/renderer/state/gui/GuiFlattenedModelsRenderState.java @@ -2,7 +2,7 @@ import com.xtracr.realcamera.renderer.state.BuiltModelRecord; import net.minecraft.client.gui.navigation.ScreenRectangle; -import net.minecraft.client.renderer.state.gui.pip.PictureInPictureRenderState; +import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState; import org.joml.Vector3f; import org.jspecify.annotations.Nullable; diff --git a/common/src/main/java/com/xtracr/realcamera/util/RenderTypeCache.java b/common/src/main/java/com/xtracr/realcamera/util/RenderTypeCache.java index bbe55c13..154c519a 100644 --- a/common/src/main/java/com/xtracr/realcamera/util/RenderTypeCache.java +++ b/common/src/main/java/com/xtracr/realcamera/util/RenderTypeCache.java @@ -3,7 +3,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.xtracr.realcamera.RealCamera; +import com.xtracr.realcamera.mixin.accessor.RenderSetupAccessor; import com.xtracr.realcamera.mixin.accessor.RenderTypeAccessor; import com.xtracr.realcamera.renderer.state.VertexData.UV; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -13,13 +13,10 @@ import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; -import java.lang.reflect.Field; import java.util.Map; import java.util.concurrent.TimeUnit; public final class RenderTypeCache { - @Nullable - private static final Field TEXTURES_FIELD; private static final LoadingCache TEXTURE_ID_CACHE = CacheBuilder.newBuilder() .maximumSize(64) .expireAfterAccess(60, TimeUnit.SECONDS) @@ -29,17 +26,6 @@ public final class RenderTypeCache { .expireAfterAccess(60, TimeUnit.SECONDS) .build(new PrimitiveCacheLoader()); - static { - Field texturesField = null; - try { - texturesField = RenderSetup.class.getDeclaredField("textures"); - texturesField.setAccessible(true); - } catch (NoSuchFieldException e) { - RealCamera.LOGGER.error("Failed to find textures field in RenderSetup", e); - } - TEXTURES_FIELD = texturesField; - } - public static String getTextureId(RenderType renderType) { return TEXTURE_ID_CACHE.getUnchecked(renderType); } @@ -53,17 +39,12 @@ public static void cachePrimitive(RenderType renderType, UV uv, int primitiveInd } private static class TextureIdCacheLoader extends CacheLoader { - @SuppressWarnings("unchecked") @Override public @NonNull String load(@NonNull RenderType renderType) { - if (TEXTURES_FIELD == null) return renderType.toString(); RenderSetup renderSetup = ((RenderTypeAccessor) renderType).getState(); - try { - Map textureBindings = (Map) TEXTURES_FIELD.get(renderSetup); - RenderSetup.TextureBinding sampler0 = textureBindings.get("Sampler0"); - if (sampler0 != null) return sampler0.location().toString(); - } catch (IllegalAccessException | IllegalArgumentException | ClassCastException _) { - } + Map textureBindings = ((RenderSetupAccessor) (Object) renderSetup).getTextureBindings(); + RenderSetup.TextureBinding sampler0 = textureBindings.get("Sampler0"); + if (sampler0 != null) return sampler0.location().toString(); return renderType.toString(); } } diff --git a/common/src/main/resources/realcamera-common.mixins.json b/common/src/main/resources/realcamera-common.mixins.json index fea92b3d..fb9cb2e3 100644 --- a/common/src/main/resources/realcamera-common.mixins.json +++ b/common/src/main/resources/realcamera-common.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8.5", "package": "com.xtracr.realcamera.mixin", - "compatibilityLevel": "JAVA_25", + "compatibilityLevel": "JAVA_21", "mixins": [ ], "client": [ @@ -17,9 +17,11 @@ "MixinStuckInBodyLayer", "accessor.AvatarRendererAccessor", "accessor.CustomFeatureRenderer$StorageAccessor", + "accessor.GameRendererAccessor", "accessor.GuiGraphicsExtractorAccessor", "accessor.ModelFeatureRenderer$StorageAccessor", "accessor.ModelPartFeatureRenderer$StorageAccessor", + "accessor.RenderSetupAccessor", "accessor.RenderTypeAccessor" ], "server": [ diff --git a/common/src/main/resources/realcamera.accesswidener b/common/src/main/resources/realcamera.accesswidener index 8b9c3f07..a2c6af80 100644 --- a/common/src/main/resources/realcamera.accesswidener +++ b/common/src/main/resources/realcamera.accesswidener @@ -1,4 +1,4 @@ -accessWidener v2 official -accessible class net/minecraft/client/gui/GuiGraphicsExtractor$ScissorStack +accessWidener v2 named +accessible class net/minecraft/client/gui/GuiGraphics$ScissorStack accessible class net/minecraft/client/renderer/rendertype/RenderSetup$TextureBinding -extendable method net/minecraft/client/renderer/MultiBufferSource$BufferSource endBatch (Lnet/minecraft/client/renderer/rendertype/RenderType;Lcom/mojang/blaze3d/vertex/BufferBuilder;)V \ No newline at end of file +extendable method net/minecraft/client/renderer/MultiBufferSource$BufferSource endBatch (Lnet/minecraft/client/renderer/rendertype/RenderType;Lcom/mojang/blaze3d/vertex/BufferBuilder;)V diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 8adb3df2..fadd0e1e 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("net.fabricmc.fabric-loom") + id("net.fabricmc.fabric-loom-remap") id("maven-publish") } @@ -34,18 +34,19 @@ tasks.withType { dependencies { minecraft("com.mojang:minecraft:$minecraftVersion") + mappings(loom.officialMojangMappings()) - implementation("net.fabricmc:fabric-loader:$fabricLoaderVersion") - implementation("net.fabricmc.fabric-api:fabric-api:$fabricApiVersion") + modImplementation("net.fabricmc:fabric-loader:$fabricLoaderVersion") + modImplementation("net.fabricmc.fabric-api:fabric-api:$fabricApiVersion") // Cloth Config - runtimeOnly("me.shedaniel.cloth:cloth-config-fabric:$clothConfigVersion") + modRuntimeOnly("me.shedaniel.cloth:cloth-config-fabric:$clothConfigVersion") // Modmenu - implementation("com.terraformersmc:modmenu:$modMenuVersion") { + modImplementation("com.terraformersmc:modmenu:$modMenuVersion") { exclude(group = "net.fabricmc.fabric-api") } - implementation(commonProject) + implementation(commonProject.sourceSets.main.get().output) } loom { diff --git a/fabric/src/main/java/com/xtracr/realcamera/RealCameraFabric.java b/fabric/src/main/java/com/xtracr/realcamera/RealCameraFabric.java index c1c9129f..dab95fd4 100644 --- a/fabric/src/main/java/com/xtracr/realcamera/RealCameraFabric.java +++ b/fabric/src/main/java/com/xtracr/realcamera/RealCameraFabric.java @@ -6,8 +6,8 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper; -import net.fabricmc.fabric.api.client.rendering.v1.PictureInPictureRendererRegistry; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.fabricmc.fabric.api.client.rendering.v1.SpecialGuiElementRegistry; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.KeyMapping; @@ -18,15 +18,15 @@ public void onInitializeClient() { initialize(); KeyMapping.Category.register(KeyMappings.GENERAL.id()); - KeyMappings.register(KeyMappingHelper::registerKeyMapping); + KeyMappings.register(KeyBindingHelper::registerKeyBinding); registerPictureInPictureRenderers(); ClientTickEvents.END_CLIENT_TICK.register(KeyMappings::handle); } private void registerPictureInPictureRenderers() { - PictureInPictureRendererRegistry.register(ctx -> new GuiCulledModelsRenderer(ctx.bufferSource())); - PictureInPictureRendererRegistry.register(ctx -> new GuiFlattenedModelsRenderer(ctx.bufferSource())); + SpecialGuiElementRegistry.register(ctx -> new GuiCulledModelsRenderer(ctx.vertexConsumers())); + SpecialGuiElementRegistry.register(ctx -> new GuiFlattenedModelsRenderer(ctx.vertexConsumers())); } @Override diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f4fd8a17..b618b291 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -29,10 +29,10 @@ ], "accessWidener": "realcamera.accesswidener", "depends": { - "fabricloader": ">=0.18.4", + "fabricloader": ">=0.19.3", "fabric-api": "*", - "minecraft": "~26.1", - "java": ">=25" + "minecraft": "~1.21.11", + "java": ">=21" }, "recommends": { "modmenu": "*", diff --git a/fabric/src/main/resources/realcamera.mixins.json b/fabric/src/main/resources/realcamera.mixins.json index 6e60890b..16ce00cc 100644 --- a/fabric/src/main/resources/realcamera.mixins.json +++ b/fabric/src/main/resources/realcamera.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8.5", "package": "com.xtracr.realcamera.mixin", - "compatibilityLevel": "JAVA_25", + "compatibilityLevel": "JAVA_21", "mixins": [ ], "client": [ diff --git a/gradle.properties b/gradle.properties index 728a8b62..12504009 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,18 +3,18 @@ org.gradle.jvmargs=-Xmx4G -XX:+UseG1GC org.gradle.parallel=true org.gradle.configuration-cache=false ## Environment Properties -java_version=25 -minecraft_version=26.1.2 +java_version=21 +minecraft_version=1.21.11 enabled_platforms=fabric,neoforge -loom_version=1.17-SNAPSHOT +loom_version=1.17.16 fabric_loader_version=0.19.3 -neoforge_version=26.1.2.73 -moddev_version=2.0.141 +neoforge_version=21.11.44 +moddev_version=2.0.142 ## Mod Properties mod_id=realcamera mod_version=0.7.9-beta mod_group_id=com.xtracr.realcamera ## Dependencies -fabric_api_version=0.150.0+26.1.2 -cloth_config_version=26.1.154 -modmenu_version=18.0.0-beta.1 +fabric_api_version=0.141.5+1.21.11 +cloth_config_version=21.11.153 +modmenu_version=17.0.0 diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index e550da50..251e1fa9 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -35,7 +35,7 @@ dependencies { // Cloth Config runtimeOnly("me.shedaniel.cloth:cloth-config-neoforge:$clothConfigVersion") - implementation(commonProject) + implementation(commonProject.sourceSets.main.get().output) } neoForge { diff --git a/neoforge/src/main/java/com/xtracr/realcamera/RealCameraNeoForge.java b/neoforge/src/main/java/com/xtracr/realcamera/RealCameraNeoForge.java index d2c9e86a..b4ca3a54 100644 --- a/neoforge/src/main/java/com/xtracr/realcamera/RealCameraNeoForge.java +++ b/neoforge/src/main/java/com/xtracr/realcamera/RealCameraNeoForge.java @@ -35,7 +35,7 @@ private void clientSetup(FMLClientSetupEvent event) { EventHandler.addListeners(); if (isModLoaded("cloth-config")) { - modContainer.registerExtensionPoint(IConfigScreenFactory.class, (_, modListScreen) -> ConfigScreen.create(modListScreen)); + modContainer.registerExtensionPoint(IConfigScreenFactory.class, (ignoredContainer, modListScreen) -> ConfigScreen.create(modListScreen)); } } diff --git a/neoforge/src/main/resources/META-INF/accesstransformer.cfg b/neoforge/src/main/resources/META-INF/accesstransformer.cfg index 9b411f49..0599b9dc 100644 --- a/neoforge/src/main/resources/META-INF/accesstransformer.cfg +++ b/neoforge/src/main/resources/META-INF/accesstransformer.cfg @@ -1,3 +1,3 @@ -public net.minecraft.client.gui.GuiGraphicsExtractor$ScissorStack +public net.minecraft.client.gui.GuiGraphics$ScissorStack public net.minecraft.client.renderer.rendertype.RenderSetup$TextureBinding -protected net.minecraft.client.renderer.MultiBufferSource$BufferSource endBatch(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/BufferBuilder;)V \ No newline at end of file +protected net.minecraft.client.renderer.MultiBufferSource$BufferSource endBatch(Lnet/minecraft/client/renderer/rendertype/RenderType;Lcom/mojang/blaze3d/vertex/BufferBuilder;)V diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index 811bf035..f4cbb9a8 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -25,21 +25,21 @@ Make the camera more realistic in the first-person view. [[dependencies.realcamera]] modId = "neoforge" type = "required" -versionRange = "[26,)" +versionRange = "[21.11,21.12)" ordering = "NONE" side = "BOTH" [[dependencies.realcamera]] modId = "minecraft" type = "required" -versionRange = "[26,27)" +versionRange = "[1.21.11]" ordering = "NONE" side = "BOTH" [[dependencies.realcamera]] modId = "cloth_config" type = "optional" -versionRange = "[21.0,)" +versionRange = "[21.11,)" ordering = "NONE" side = "CLIENT" [dependencies.realcamera.mc-publish] diff --git a/neoforge/src/main/resources/realcamera.mixins.json b/neoforge/src/main/resources/realcamera.mixins.json index 6e60890b..16ce00cc 100644 --- a/neoforge/src/main/resources/realcamera.mixins.json +++ b/neoforge/src/main/resources/realcamera.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8.5", "package": "com.xtracr.realcamera.mixin", - "compatibilityLevel": "JAVA_25", + "compatibilityLevel": "JAVA_21", "mixins": [ ], "client": [ diff --git a/settings.gradle.kts b/settings.gradle.kts index ea77fc0b..11b12669 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ pluginManagement { } plugins { - id("net.fabricmc.fabric-loom") version providers.gradleProperty("loom_version") + id("net.fabricmc.fabric-loom-remap") version providers.gradleProperty("loom_version") id("net.neoforged.moddev") version providers.gradleProperty("moddev_version") } }