From 1c26eeed5ed3019988f6eba6976c066659cd5139 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 15 Feb 2025 22:20:29 +0100 Subject: [PATCH 1/5] fix: catch errors in camera thread - Solves camera movement breaking entirely when encountering an error --- .../client/MidnightControlsClient.java | 12 ++++++++---- gradle.properties | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index c6128f5..a762646 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -87,11 +87,15 @@ public class MidnightControlsClient extends MidnightControls { Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { // TODO: Add a try/catch here after the alpha testing period - if (lateInitDone && client.isRunning()) { - if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) { - input.tickCameraStick(); - input.updateCamera(); + try { + if (lateInitDone && client.isRunning()) { + if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) { + input.tickCameraStick(); + input.updateCamera(); + } } + } catch (Exception | Error e) { + MidnightControls.logger.error("Exception encountered in camera loop: ",e); } } }, delay, period); diff --git a/gradle.properties b/gradle.properties index b9285e2..3db6ea0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,14 +8,14 @@ yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge archives_base_name=midnightcontrols -mod_version=1.10.3 +mod_version=1.10.4 maven_group=eu.midnightdust release_type=beta modrinth_id = bXX9h73M curseforge_id = 621768 # Configure the IDs here after creating the projects on the websites -midnightlib_version=1.6.6 +midnightlib_version=1.6.8+1.21.4 fabric_loader_version=0.16.9 fabric_api_version=0.110.5+1.21.4 From 6007ef315db63a1d326a6c97ecc1cc540ebe8971 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Wed, 26 Mar 2025 19:53:31 +0100 Subject: [PATCH 2/5] fix: controller options button not being clickable --- .../client/MidnightControlsClient.java | 2 +- .../client/mixin/GameOptionsScreenMixin.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index a762646..21df7d7 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -86,7 +86,7 @@ public class MidnightControlsClient extends MidnightControls { int period = 1; // repeat every 0.001 sec. (1000 times a second) Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { - public void run() { // TODO: Add a try/catch here after the alpha testing period + public void run() { try { if (lateInitDone && client.isRunning()) { if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) { diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameOptionsScreenMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameOptionsScreenMixin.java index a7192aa..6fb92b2 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameOptionsScreenMixin.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameOptionsScreenMixin.java @@ -33,17 +33,24 @@ import static eu.midnightdust.midnightcontrols.MidnightControls.id; @Mixin(GameOptionsScreen.class) public abstract class GameOptionsScreenMixin extends Screen { @Shadow @Nullable protected OptionListWidget body; - @Unique TextIconButtonWidget midnightcontrols$button = TextIconButtonWidget.builder(Text.translatable("midnightcontrols.menu.title.controller"), (button -> this.client.setScreen(new MidnightControlsSettingsScreen(this, false))), true) + @Unique TextIconButtonWidget midnightcontrols$button = TextIconButtonWidget.builder(Text.translatable("midnightcontrols.menu.title.controller"), + (button -> this.client.setScreen(new MidnightControlsSettingsScreen(this, false))), true) .dimension(20,20).texture(id("icon/controller"), 20, 20).build(); protected GameOptionsScreenMixin(Text title) { super(title); } - @Inject(method = "init", at = @At("TAIL")) + @Inject(method = "initBody", at = @At("TAIL")) public void midnightcontrols$addMCButton(CallbackInfo ci) { if (this.getClass().toString().equals(ControlsOptionsScreen.class.toString())) { this.midnightcontrols$setButtonPos(); + this.addSelectableChild(midnightcontrols$button); + } + } + @Inject(method = "init", at = @At("TAIL")) + public void midnightcontrols$drawMCButton(CallbackInfo ci) { + if (this.getClass().toString().equals(ControlsOptionsScreen.class.toString())) { this.addDrawableChild(midnightcontrols$button); } } From c07f3d94dd47b8e0b7b4421ed081cd2f8d0824c1 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Wed, 26 Mar 2025 19:54:42 +0100 Subject: [PATCH 3/5] chore: bump version --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3db6ea0..45a99ae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,9 +8,9 @@ yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge archives_base_name=midnightcontrols -mod_version=1.10.4 +mod_version=1.10.5 maven_group=eu.midnightdust -release_type=beta +release_type=release modrinth_id = bXX9h73M curseforge_id = 621768 # Configure the IDs here after creating the projects on the websites From f004f0a32d561486a09f5d16162991773c1dd927 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Thu, 27 Mar 2025 00:00:29 +0100 Subject: [PATCH 4/5] compat: improve/fix Emotecraft compat --- common/build.gradle | 2 +- .../client/compat/EmotecraftCompat.java | 49 ++++++++++++------- gradle.properties | 2 +- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index 19838f8..b8b160e 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -39,7 +39,7 @@ dependencies { modCompileOnlyApi "org.quiltmc:quilt-json5:1.0.0" modImplementation "maven.modrinth:sodium:${project.sodium_version}-fabric" modCompileOnlyApi "maven.modrinth:emi:${project.emi_version}" - modCompileOnlyApi "maven.modrinth:emotecraft:${project.emotecraft_version}" + modImplementation "maven.modrinth:emotecraft:${project.emotecraft_version}" modCompileOnlyApi "io.github.kosmx:bendy-lib:${project.bendylib_version}" modCompileOnlyApi "dev.isxander:yet-another-config-lib:${project.yacl_version}" modCompileOnlyApi "maven.modrinth:inventory-tabs-updated:${project.inventorytabs_version}" diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java index ffaece0..c307424 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java @@ -1,36 +1,51 @@ package eu.midnightdust.midnightcontrols.client.compat; import eu.midnightdust.midnightcontrols.client.controller.InputManager; -import io.github.kosmx.emotes.arch.gui.EmoteMenuImpl; -import io.github.kosmx.emotes.arch.gui.screen.ingame.FastChosseScreen; +import eu.midnightdust.midnightcontrols.client.mixin.MouseAccessor; +import io.github.kosmx.emotes.arch.screen.ingame.FastMenuScreen; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; +import org.joml.Vector2i; +import org.lwjgl.glfw.GLFW; public class EmotecraftCompat { private static final MinecraftClient client = MinecraftClient.getInstance(); public static void openEmotecraftScreen(Screen parent) { - client.setScreen(new EmoteMenuImpl(parent)); + client.setScreen(new FastMenuScreen(parent)); } public static boolean isEmotecraftScreen(Screen screen) { - return screen instanceof FastChosseScreen; + return screen instanceof FastMenuScreen; } + static int prevIndex = -1; public static void handleEmoteSelector(int index) { - if (client.currentScreen instanceof FastChosseScreen) { - int x = client.getWindow().getWidth() / 2; - int y = client.getWindow().getHeight() / 2; - switch (index) { - case 0, 3, 5 -> x -= 200; - case 2, 4, 7 -> x += 200; - } - switch (index) { - case 0, 1, 2 -> y -= 200; - case 5, 6, 7 -> y += 200; - } - InputManager.queueMousePosition(x, y); + try { + if (client.currentScreen instanceof FastMenuScreen) { + boolean stickReleased = index == -1 && prevIndex != -1; + var pos = calcMousePos(stickReleased ? prevIndex : index); + InputManager.queueMousePosition(pos.x, pos.y); + InputManager.INPUT_MANAGER.updateMousePosition(client); - InputManager.INPUT_MANAGER.updateMousePosition(client); + if (stickReleased) { + ((MouseAccessor) client.mouse).midnightcontrols$onMouseButton(client.getWindow().getHandle(), GLFW.GLFW_MOUSE_BUTTON_LEFT, GLFW.GLFW_PRESS, 0); + prevIndex = -1; + } + else prevIndex = index; + } else prevIndex = -1; + } catch (Exception ignored) {} + } + public static Vector2i calcMousePos(int index) { + int x = client.getWindow().getWidth() / 2; + int y = client.getWindow().getHeight() / 2; + switch (index) { + case 0, 3, 5 -> x -= 275; + case 2, 4, 7 -> x += 275; } + switch (index) { + case 0, 1, 2 -> y -= 275; + case 5, 6, 7 -> y += 275; + } + return new Vector2i(x, y); } } diff --git a/gradle.properties b/gradle.properties index 45a99ae..2f3c513 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,7 +29,7 @@ quilt_fabric_api_version=7.0.1+0.83.0-1.20 sodium_version=mc1.21-0.6.0-beta.1 obsidianui_version=0.2.10+mc1.21.3 modmenu_version=10.0.0-beta.1 -emotecraft_version=2.1.3-SNAPSHOT-build.29-MC1.19-fabric +emotecraft_version=2.5.5+1.21.4-fabric bendylib_version=2.0.+ emi_version=1.1.10+1.21+fabric libgui_version=6.0.0+1.19 From 38229bc8271f19db77092a11d54ab66e23d8143c Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Thu, 27 Mar 2025 16:10:03 +0100 Subject: [PATCH 5/5] port: Spring to Life (1.21.5) - Still waiting for ObsidianUI to get the settings screen working. Guess I'm gonna have to port that myself again. --- build.gradle | 2 +- .../client/MidnightControlsConfig.java | 4 ++-- .../midnightcontrols/client/MidnightInput.java | 8 ++++---- .../client/controller/InputHandlers.java | 4 ++-- .../client/controller/InputManager.java | 4 ++-- .../client/controller/MovementHandler.java | 6 ++++-- .../client/gui/MidnightControlsHud.java | 2 +- .../client/gui/MidnightControlsRenderer.java | 6 ++++-- .../client/gui/MidnightControlsSettingsScreen.java | 7 ++++--- .../client/mixin/GameRendererMixin.java | 4 ++-- .../midnightcontrols/client/mixin/InputAccessor.java | 12 ++++++++++++ .../client/mixin/MinecraftClientMixin.java | 4 ++-- .../midnightcontrols/client/mixin/MouseMixin.java | 2 +- .../midnightcontrols/client/touch/TouchInput.java | 2 +- .../client/touch/gui/ItemUseButtonWidget.java | 4 ++-- .../client/touch/gui/TouchscreenOverlay.java | 4 ++-- .../midnightcontrols/client/util/InventoryUtil.java | 2 +- .../src/main/resources/midnightcontrols.mixins.json | 1 + gradle.properties | 12 ++++++------ gradle/wrapper/gradle-wrapper.properties | 2 +- 20 files changed, 55 insertions(+), 37 deletions(-) create mode 100644 common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/InputAccessor.java diff --git a/build.gradle b/build.gradle index ed2e9c5..bd84864 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.10-SNAPSHOT" apply false id "me.shedaniel.unified-publishing" version "0.1.+" apply false id 'com.github.johnrengelman.shadow' version '8.1.1' apply false } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java index 894cff2..95319b7 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -11,7 +11,7 @@ package eu.midnightdust.midnightcontrols.client; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.mojang.blaze3d.platform.GlDebugInfo; +import com.mojang.blaze3d.platform.GLX; import eu.midnightdust.lib.config.MidnightConfig; import eu.midnightdust.midnightcontrols.ControlsMode; import eu.midnightdust.midnightcontrols.MidnightControls; @@ -400,7 +400,7 @@ public class MidnightControlsConfig extends MidnightConfig { String controller = getController().getName().toLowerCase(); if (controller.contains("xbox 360")) return ControllerType.XBOX_360; else if (controller.contains("xbox") || controller.contains("afterglow")) return ControllerType.XBOX; - else if (controller.contains("steam") && GlDebugInfo.getCpuInfo().contains("AMD Custom APU")) return ControllerType.STEAM_DECK; + else if (controller.contains("steam") && GLX._getCpuInfo().contains("AMD Custom APU")) return ControllerType.STEAM_DECK; else if (controller.contains("steam")) return ControllerType.STEAM_CONTROLLER; else if (controller.contains("dualsense") || controller.contains("ps5")) return ControllerType.DUALSENSE; else if (controller.contains("dualshock") || controller.contains("ps4") || controller.contains("sony")) return ControllerType.DUALSHOCK; diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java index fa91056..7ef79b5 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java @@ -214,10 +214,10 @@ public class MidnightInput { return; if (this.targetYaw != 0.f || this.targetPitch != 0.f) { - float rotationYaw = (float) (client.player.prevYaw + (this.targetYaw * 0.175)); - float rotationPitch = (float) (client.player.prevPitch + (this.targetPitch * 0.175)); - client.player.prevYaw = rotationYaw; - client.player.prevPitch = MathHelper.clamp(rotationPitch, -90.f, 90.f); + float rotationYaw = (float) (client.player.lastYaw + (this.targetYaw * 0.175)); + float rotationPitch = (float) (client.player.lastPitch + (this.targetPitch * 0.175)); + client.player.lastYaw = rotationYaw; + client.player.lastPitch = MathHelper.clamp(rotationPitch, -90.f, 90.f); client.player.setYaw(rotationYaw); client.player.setPitch(MathHelper.clamp(rotationPitch, -90.f, 90.f)); if (client.player.isRiding() && client.player.getVehicle() != null) { diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java index 2e81b4c..d5b3398 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java @@ -62,9 +62,9 @@ public class InputHandlers { if (!client.player.isSpectator()) { var inv = client.player.getInventory(); if (next) - inv.setSelectedSlot(inv.selectedSlot < 8 ? inv.selectedSlot + 1 : inv.selectedSlot - 8); + inv.setSelectedSlot(inv.getSelectedSlot() < 8 ? inv.getSelectedSlot() + 1 : inv.getSelectedSlot() - 8); else - inv.setSelectedSlot(inv.selectedSlot > 0 ? inv.selectedSlot - 1 : inv.selectedSlot + 8); + inv.setSelectedSlot(inv.getSelectedSlot() > 0 ? inv.getSelectedSlot() - 1 : inv.getSelectedSlot() + 8); } else { if (client.inGameHud.getSpectatorHud().isOpen()) { diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java index 65a063d..b3fe085 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputManager.java @@ -76,8 +76,8 @@ public class InputManager { public void updateMousePosition(@NotNull MinecraftClient client) { Objects.requireNonNull(client, "Client instance cannot be null."); if (this.prevTargetMouseX != this.targetMouseX || this.prevTargetMouseY != this.targetMouseY) { - double mouseX = this.prevTargetMouseX + (this.targetMouseX - this.prevTargetMouseX) * client.getRenderTickCounter().getTickDelta(true) + 0.5; - double mouseY = this.prevTargetMouseY + (this.targetMouseY - this.prevTargetMouseY) * client.getRenderTickCounter().getTickDelta(true) + 0.5; + double mouseX = this.prevTargetMouseX + (this.targetMouseX - this.prevTargetMouseX) * client.getRenderTickCounter().getTickProgress(true) + 0.5; + double mouseY = this.prevTargetMouseY + (this.targetMouseY - this.prevTargetMouseY) * client.getRenderTickCounter().getTickProgress(true) + 0.5; if (!MidnightControlsConfig.virtualMouse) GLFW.glfwSetCursorPos(client.getWindow().getHandle(), mouseX, mouseY); ((MouseAccessor) client.mouse).midnightcontrols$onCursorPos(client.getWindow().getHandle(), mouseX, mouseY); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java index 7408b3d..91f4bf0 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java @@ -11,12 +11,14 @@ package eu.midnightdust.midnightcontrols.client.controller; import eu.midnightdust.midnightcontrols.client.enums.ButtonState; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; +import eu.midnightdust.midnightcontrols.client.mixin.InputAccessor; import eu.midnightdust.midnightcontrols.client.util.MathUtil; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.util.PlayerInput; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec2f; import org.jetbrains.annotations.NotNull; /** @@ -53,8 +55,8 @@ public final class MovementHandler implements PressAction { player.input.playerInput.jump(), player.input.playerInput.sneak(), player.input.playerInput.sprint()); polarUtil.calculate(this.movementSideways, this.movementForward, this.slowdownFactor); - player.input.movementForward = polarUtil.polarY; - player.input.movementSideways = polarUtil.polarX; + Vec2f inputVector = new Vec2f(polarUtil.polarX, polarUtil.polarY); + ((InputAccessor)player.input).setMovementVector(inputVector); this.shouldOverrideMovement = false; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java index a6ad812..91ef9a7 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsHud.java @@ -98,7 +98,7 @@ public class MidnightControlsHud extends Hud { var window = this.client.getWindow(); var text = "[ ]"; - float scale = Math.min(5, this.ticksDisplayedCrosshair + tickCounter.getTickDelta(true)) / 5F; + float scale = Math.min(5, this.ticksDisplayedCrosshair + tickCounter.getTickProgress(true)) / 5F; scale *= scale; int opacity = ((int) (255 * scale)) << 24; diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsRenderer.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsRenderer.java index 9cb5a96..9baa493 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsRenderer.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsRenderer.java @@ -9,6 +9,8 @@ package eu.midnightdust.midnightcontrols.client.gui; +import com.mojang.blaze3d.opengl.GlStateManager; +import com.mojang.blaze3d.platform.GLX; import com.mojang.blaze3d.systems.RenderSystem; import eu.midnightdust.midnightcontrols.ControlsMode; import eu.midnightdust.midnightcontrols.client.enums.ControllerType; @@ -169,7 +171,7 @@ public class MidnightControlsRenderer { case GLFW.GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER + 100, GLFW.GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER + 200 -> buttonOffset = 10 * 15; } - RenderSystem.disableDepthTest(); + GlStateManager._disableDepthTest(); int assetSize = axis || (button >= 15 && button <= 18) ? AXIS_SIZE : BUTTON_SIZE; @@ -179,7 +181,7 @@ public class MidnightControlsRenderer { (float) buttonOffset, (float) (controllerType * assetSize), assetSize, assetSize, 256, 256); - RenderSystem.enableDepthTest(); + GlStateManager._enableDepthTest(); return ICON_SIZE; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java index 3df0cff..a07a20e 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java @@ -9,6 +9,7 @@ package eu.midnightdust.midnightcontrols.client.gui; +import com.mojang.blaze3d.opengl.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import eu.midnightdust.midnightcontrols.MidnightControlsConstants; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; @@ -512,13 +513,13 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { float g = (float)(color.getGreen()) / 255.0F; float b = (float)(color.getBlue()) / 255.0F; float t = (float)(transparency) / 255.0F; - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); + GlStateManager._enableBlend(); + //GlStateManager._defaultBlendFunc(); vertexConsumer.vertex((float)x1, (float)y2, 0.0F).color(r, g, b, t); vertexConsumer.vertex((float)x2, (float)y2, 0.0F).color(r, g, b, t); vertexConsumer.vertex((float)x2, (float)y1, 0.0F).color(r, g, b, t); vertexConsumer.vertex((float)x1, (float)y1, 0.0F).color(r, g, b, t); - RenderSystem.disableBlend(); + GlStateManager._disableBlend(); context.draw(); } } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java index 2d47dda..af4e086 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameRendererMixin.java @@ -30,9 +30,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(GameRenderer.class) public abstract class GameRendererMixin { - @Shadow @Final MinecraftClient client; + @Shadow @Final private MinecraftClient client; - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Mouse;getX()D", shift = At.Shift.BEFORE)) + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Mouse;getScaledX(Lnet/minecraft/client/util/Window;)D", shift = At.Shift.BEFORE)) private void midnightcontrols$onRender(RenderTickCounter tickCounter, boolean tick, CallbackInfo ci) { if (this.client.currentScreen != null && MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER) MidnightControlsClient.input.onPreRenderScreen(this.client.currentScreen); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/InputAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/InputAccessor.java new file mode 100644 index 0000000..aff3b34 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/InputAccessor.java @@ -0,0 +1,12 @@ +package eu.midnightdust.midnightcontrols.client.mixin; + +import net.minecraft.client.input.Input; +import net.minecraft.util.math.Vec2f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(Input.class) +public interface InputAccessor { + @Accessor + void setMovementVector(Vec2f input); +} diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MinecraftClientMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MinecraftClientMixin.java index 10e21a6..d4f8d8b 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MinecraftClientMixin.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MinecraftClientMixin.java @@ -81,7 +81,7 @@ public abstract class MinecraftClientMixin { var side = hitResult.getSide(); boolean sidewaysBlockPlacing = this.midnightcontrols$lastTargetPos == null || !targetPos.equals(this.midnightcontrols$lastTargetPos.offset(this.midnightcontrols$lastTargetSide)); - boolean backwardsBlockPlacing = this.player.input.movementForward < 0.0f && (this.midnightcontrols$lastTargetPos == null || targetPos.equals(this.midnightcontrols$lastTargetPos.offset(this.midnightcontrols$lastTargetSide))); + boolean backwardsBlockPlacing = this.player.input.getMovementInput().y < 0.0f && (this.midnightcontrols$lastTargetPos == null || targetPos.equals(this.midnightcontrols$lastTargetPos.offset(this.midnightcontrols$lastTargetSide))); if (cooldown > 1 && !targetPos.equals(this.midnightcontrols$lastTargetPos) @@ -129,7 +129,7 @@ public abstract class MinecraftClientMixin { if (result.isAccepted()) { //if (result.shouldSwingHand()) { this.player.swingHand(hand); - if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || this.interactionManager.hasCreativeInventory())) { + if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || this.player.isInCreativeMode())) { this.gameRenderer.firstPersonRenderer.resetEquipProgress(hand); } //} diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java index 3c47ef5..cff8cfc 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseMixin.java @@ -77,7 +77,7 @@ public abstract class MouseMixin implements MouseAccessor { for (int slot = 0; slot < 9; ++slot) { int slotX = centerX - 90 + slot * 20 + 2; if (mouseX >= (double) slotX && mouseX <= (double) (slotX + 20)) { - client.player.getInventory().selectedSlot = slot; + client.player.getInventory().setSelectedSlot(slot); ci.cancel(); return; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java index 8022745..c2edfd7 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchInput.java @@ -87,7 +87,7 @@ public class TouchInput { if (interaction.isAccepted()) { //if (interaction.shouldSwingHand()) { client.player.swingHand(client.player.preferredHand); - if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || client.interactionManager.hasCreativeInventory())) { + if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || client.player.isInCreativeMode())) { client.gameRenderer.firstPersonRenderer.resetEquipProgress(client.player.preferredHand); } //} diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/ItemUseButtonWidget.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/ItemUseButtonWidget.java index 9909be5..788af2b 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/ItemUseButtonWidget.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/ItemUseButtonWidget.java @@ -1,11 +1,11 @@ package eu.midnightdust.midnightcontrols.client.touch.gui; +import net.minecraft.component.DataComponentTypes; import net.minecraft.item.consume.UseAction; import org.thinkingstudio.obsidianui.Position; import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget; import eu.midnightdust.midnightcontrols.MidnightControlsConstants; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; -import net.minecraft.item.ArmorItem; import net.minecraft.text.Text; public class ItemUseButtonWidget extends SpruceButtonWidget { @@ -30,7 +30,7 @@ public class ItemUseButtonWidget extends SpruceButtonWidget { this.setMessage(Text.translatable(MidnightControlsConstants.NAMESPACE+".action.eat")); } else if (action == UseAction.DRINK) { this.setMessage(Text.translatable(MidnightControlsConstants.NAMESPACE+".action.drink")); - } else if (client.player.getMainHandStack().getItem() instanceof ArmorItem) { + } else if (client.player.getMainHandStack().getComponents().contains(DataComponentTypes.EQUIPPABLE)) { this.setMessage(Text.translatable(MidnightControlsConstants.NAMESPACE+".action.equip")); } else if (!action.equals(UseAction.NONE)) { this.setMessage(Text.translatable(MidnightControlsConstants.NAMESPACE+".action.use")); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java index d658534..4101634 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java @@ -14,7 +14,7 @@ import eu.midnightdust.midnightcontrols.client.util.storage.AxisStorage; import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.GameMenuScreen; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.item.ArmorItem; +import net.minecraft.component.DataComponentTypes; import net.minecraft.item.consume.UseAction; import net.minecraft.util.Arm; import net.minecraft.util.Hand; @@ -340,7 +340,7 @@ public class TouchscreenOverlay extends Screen { this.forwardLeftButton.setVisible(false); this.forwardRightButton.setVisible(false); } - this.useButton.setVisible(client.player.getMainHandStack() != null && (client.player.getMainHandStack().getUseAction() != UseAction.NONE || client.player.getMainHandStack().getItem() instanceof ArmorItem) && !TouchUtils.hasInWorldUseAction(client.player.getMainHandStack())); + this.useButton.setVisible(client.player.getMainHandStack() != null && (client.player.getMainHandStack().getUseAction() != UseAction.NONE || client.player.getMainHandStack().getComponents().contains(DataComponentTypes.EQUIPPABLE)) && !TouchUtils.hasInWorldUseAction(client.player.getMainHandStack())); this.updateJumpButtons(); } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/InventoryUtil.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/InventoryUtil.java index fee4709..3681068 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/InventoryUtil.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/InventoryUtil.java @@ -91,7 +91,7 @@ public class InventoryUtil { if (closestSlot.isPresent() && client.player != null) { var slot = closestSlot.get().getLeft(); - if (slot.hasStack() || !client.player.getInventory().getMainHandStack().isEmpty()) { + if (slot.hasStack() || !client.player.getInventory().getSelectedStack().isEmpty()) { int slotCenterXScaled = guiLeft + slot.x + 8; int slotCenterYScaled = guiTop + slot.y + 8; int slotCenterX = (int) (slotCenterXScaled / ((double) client.getWindow().getScaledWidth() / (double) client.getWindow().getWidth())); diff --git a/common/src/main/resources/midnightcontrols.mixins.json b/common/src/main/resources/midnightcontrols.mixins.json index b00371b..c42bcc5 100644 --- a/common/src/main/resources/midnightcontrols.mixins.json +++ b/common/src/main/resources/midnightcontrols.mixins.json @@ -12,6 +12,7 @@ "GameOptionsScreenMixin", "GameRendererMixin", "HandledScreenMixin", + "InputAccessor", "InputUtilMixin", "KeyBindingIDAccessor", "KeyBindingMixin", diff --git a/gradle.properties b/gradle.properties index 2f3c513..0405d7f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,9 +2,9 @@ org.gradle.parallel=true org.gradle.jvmargs=-Xmx2048M -minecraft_version=1.21.4 +minecraft_version=1.21.5 supported_versions= -yarn_mappings=1.21.4+build.1 +yarn_mappings=1.21.5+build.1 enabled_platforms=fabric,neoforge archives_base_name=midnightcontrols @@ -15,12 +15,12 @@ modrinth_id = bXX9h73M curseforge_id = 621768 # Configure the IDs here after creating the projects on the websites -midnightlib_version=1.6.8+1.21.4 +midnightlib_version=1.6.10+1.21.4 -fabric_loader_version=0.16.9 -fabric_api_version=0.110.5+1.21.4 +fabric_loader_version=0.16.10 +fabric_api_version=0.119.5+1.21.5 -neoforge_version=21.4.9-beta +neoforge_version=21.5.2-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 quilt_loader_version=0.19.0-beta.18 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0..37f853b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME