diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2f4182e..8fc6eb2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,8 +8,10 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 + with: + persist-credentials: false + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 - name: Set up JDK 21 uses: actions/setup-java@v4 with: @@ -22,4 +24,6 @@ jobs: uses: actions/upload-artifact@v4 with: name: MidnightControls-Artifacts - path: /build/libs/ + path: | + fabric/build/libs/ + neoforge/build/libs/ diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8ce6418..2d0ec0f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,8 +11,10 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 + with: + persist-credentials: false + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 - name: Set up JDK 21 uses: actions/setup-java@v4 with: diff --git a/build.gradle b/build.gradle index ed2e9c5..8990bed 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 } @@ -85,4 +85,4 @@ allprojects { java { withSourcesJar() } -} \ No newline at end of file +} 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 0e36650..847ac33 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -91,8 +91,8 @@ public class MidnightControlsClient extends MidnightControls { public void run() { try { if (lateInitDone && client.isRunning()) { - if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) { - input.tickCameraStick(); + if (MidnightControlsConfig.controlsMode != ControlsMode.DEFAULT && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) { + if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER) input.tickCameraStick(); input.updateCamera(); } } 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 b693621..85d4b9c 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; @@ -52,79 +52,107 @@ public class MidnightControlsConfig extends MidnightConfig { public static boolean isEditing = false; @Hidden @Entry public static int configVersion = 2; // General + @Comment(category = CONTROLLER, centered = true, name="\uD83C\uDFAE General") public static Comment _general; @Entry(category = CONTROLLER, name = "midnightcontrols.menu.controls_mode") public static ControlsMode controlsMode = ControlsMode.DEFAULT; @Entry(category = CONTROLLER, name = "midnightcontrols.menu.auto_switch_mode") public static boolean autoSwitchMode = true; - @Entry(category = MISC, name = "Debug") public static boolean debug = false; // HUD + @Comment(category = VISUAL, centered = true, name="\uD83D\uDDB9 Hud") public static Comment _hud; @Entry(category = VISUAL, name = "midnightcontrols.menu.hud_enable") public static boolean hudEnable = true; @Entry(category = VISUAL, name = "midnightcontrols.menu.hud_side") public static HudSide hudSide = HudSide.LEFT; - @Entry(category = SCREENS, name = "midnightcontrols.menu.move_chat") public static boolean moveChat = false; + @Entry(category = VISUAL, name = "midnightcontrols.menu.controller_type") public static ControllerType controllerType = ControllerType.DEFAULT; // Gameplay + @Comment(category = GAMEPLAY, centered = true, name="\uD83D\uDECB Comfort") public static Comment _comfort; + @Entry(category = GAMEPLAY, name = "Enable Hints") public static boolean enableHints = true; @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.analog_movement") public static boolean analogMovement = true; @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.double_tap_to_sprint") public static boolean doubleTapToSprint = true; @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.controller_toggle_sneak") public static boolean controllerToggleSneak = MinecraftClient.getInstance().options.getSneakToggled().getValue(); @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.controller_toggle_sprint") public static boolean controllerToggleSprint = MinecraftClient.getInstance().options.getSprintToggled().getValue(); + + @Condition(requiredModId = "midnightcontrols-extra") + @Comment(category = GAMEPLAY, centered = true, name="✨ Extras") public static Comment _extras; + @Condition(requiredModId = "midnightcontrols-extra") @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.fast_block_placing") public static boolean fastBlockPlacing = false; // Disabled by default as this behaviour can be considered cheating on multiplayer servers. + @Condition(requiredModId = "midnightcontrols-extra") @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.fly_drifting") public static boolean flyDrifting = true; // Enabled by default as disabling this behaviour can be considered cheating on multiplayer servers. It can also conflict with some other mods. + @Condition(requiredModId = "midnightcontrols-extra") @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.fly_drifting_vertical") public static boolean verticalFlyDrifting = true; // Enabled by default as disabling this behaviour can be considered cheating on multiplayer servers. + @Condition(requiredModId = "midnightcontrols-extra") @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.reacharound.horizontal") public static boolean horizontalReacharound = false; // Disabled by default as this behaviour can be considered cheating on multiplayer servers. + @Condition(requiredModId = "midnightcontrols-extra") @Entry(category = GAMEPLAY, name = "midnightcontrols.menu.reacharound.vertical") public static boolean verticalReacharound = false; // Disabled by default as this behaviour can be considered cheating on multiplayer servers. + @Condition(requiredModId = "midnightcontrols-extra") + @Comment(category = VISUAL, centered = true, name="⊽ Reacharound") public static Comment _reacharoundOutline; + @Condition(requiredModId = "midnightcontrols-extra") @Entry(category = VISUAL, name = "Reacharound Outline") public static boolean shouldRenderReacharoundOutline = true; + @Condition(requiredModId = "midnightcontrols-extra", requiredOption = "shouldRenderReacharoundOutline") @Entry(category = VISUAL, name = "Reacharound Outline Color", isColor = true) public static String reacharoundOutlineColorHex = "#ffffff"; + @Condition(requiredModId = "midnightcontrols-extra", requiredOption = "shouldRenderReacharoundOutline") @Entry(category = VISUAL, name = "Reacharound Outline Alpha", isSlider = true, min = 0, max = 255) public static int reacharoundOutlineColorAlpha = 102; - @Entry(category = CONTROLLER, name = "midnightcontrols.menu.right_dead_zone", isSlider = true, min = 0.05, max = 1) public static double rightDeadZone = 0.25; - @Entry(category = CONTROLLER, name = "midnightcontrols.menu.left_dead_zone", isSlider = true, min = 0.05, max = 1) public static double leftDeadZone = 0.25; - @Entry(category = CONTROLLER, name = "Trigger Dead-Zone", isSlider = true, min = 0.05, max = 1) public static double triggerDeadZone = 0.1; + @Comment(category = CONTROLLER, centered = true, name="\uD83D\uDCF7 Camera Settings") public static Comment _cameraSettings; @Entry(category = CONTROLLER, name = "midnightcontrols.menu.invert_right_y_axis") public static boolean invertRightYAxis = false; @Entry(category = CONTROLLER, name = "midnightcontrols.menu.invert_right_x_axis") public static boolean invertRightXAxis = false; @Entry(category = CONTROLLER, name = "midnightcontrols.menu.rotation_speed", isSlider = true, min = 0, max = 100, precision = 10) public static double rotationSpeed = 35.0; //used for x-axis, name kept for compatibility @Entry(category = CONTROLLER, name = "midnightcontrols.menu.y_axis_rotation_speed", isSlider = true, min = 0, max = 100, precision = 10) public static double yAxisRotationSpeed = rotationSpeed; @Entry(category = CONTROLLER, name = "midnightcontrols.menu.camera_mode") public static CameraMode cameraMode = CameraMode.FLAT; + @Comment(category = SCREENS, centered = true, name="\uD83D\uDDB1 Mouse Behaviour") public static Comment _mouseBehaviour; @Entry(category = SCREENS, name = "midnightcontrols.menu.mouse_speed", isSlider = true, min = 0, max = 150, precision = 10) public static double mouseSpeed = 25.0; @Entry(category = SCREENS, name = "midnightcontrols.menu.joystick_as_mouse") public static boolean joystickAsMouse = false; - @Entry(category = SCREENS, name = "midnightcontrols.menu.eye_tracker_as_mouse") public static boolean eyeTrackerAsMouse = false; - @Entry(category = SCREENS, name = "midnightcontrols.menu.eye_tracker_deadzone", isSlider = true, min = 0, max = 0.4) public static double eyeTrackerDeadzone = 0.05; - @Entry(category = CONTROLLER, name = "midnightcontrols.menu.unfocused_input") public static boolean unfocusedInput = false; - @Entry(category = SCREENS, name = "midnightcontrols.menu.virtual_mouse") public static boolean virtualMouse = false; - @Entry(category = SCREENS, name = "midnightcontrols.menu.virtual_mouse.skin") public static VirtualMouseSkin virtualMouseSkin = VirtualMouseSkin.DEFAULT_LIGHT; - @Entry(category = SCREENS, name = "midnightcontrols.menu.hide_cursor") public static boolean hideNormalMouse = false; - @Entry(category = SCREENS, name = "midnightcontrols.menu.virtual_keyboard") public static boolean virtualKeyboard = false; - @Entry(category = CONTROLLER, name = "Controller ID") @Hidden public static Object controllerID = 0; - @Entry(category = CONTROLLER, name = "2nd Controller ID") @Hidden public static Object secondControllerID = -1; - @Entry(category = VISUAL, name = "midnightcontrols.menu.controller_type") public static ControllerType controllerType = ControllerType.DEFAULT; @Entry(category = SCREENS, name = "Mouse screens") public static List mouseScreens = Lists.newArrayList("net.minecraft.client.gui.screen.advancement", "net.minecraft.class_457", "net.minecraft.class_408", "net.minecraft.class_3872", "me.flashyreese.mods.reeses_sodium_options.client.gui", "dev.emi.emi.screen", "hardcorequesting.client.interfaces.GuiQuestBook", "hardcorequesting.client.interfaces.GuiReward", "hardcorequesting.client.interfaces.EditTrackerScreen", "me.shedaniel.clothconfig2.gui.ClothConfigScreen", "com.mamiyaotaru.voxelmap.gui.GuiWaypoints", "com.mamiyaotaru.voxelmap.gui.GuiPersistentMap"); @Entry(category = SCREENS, name = "Arrow screens") public static List arrowScreens = Lists.newArrayList(ChatScreen.class.getCanonicalName()); @Entry(category = SCREENS, name = "WASD screens") public static List wasdScreens = Lists.newArrayList("com.ultreon.devices.core.Laptop"); - @Entry(category = TOUCH, name = "Screens with close button") public static List closeButtonScreens = Lists.newArrayList(ChatScreen.class.getCanonicalName(), AdvancementsScreen.class.getCanonicalName(), RingScreen.class.getCanonicalName()); + @Comment(category = CONTROLLER, centered = true, name="\uD83D\uDC40 Eye Tracking") public static Comment _eyeTracker; + @Entry(category = CONTROLLER, name = "midnightcontrols.menu.eye_tracker_as_mouse") public static boolean eyeTrackerAsMouse = false; + @Entry(category = CONTROLLER, name = "midnightcontrols.menu.eye_tracker_deadzone", isSlider = true, min = 0, max = 0.4) public static double eyeTrackerDeadzone = 0.05; + @Entry(category = CONTROLLER, name = "midnightcontrols.menu.unfocused_input") public static boolean unfocusedInput = false; + @Comment(category = SCREENS, centered = true, name="\uD83D\uDC46 Virtual Mouse") public static Comment _virtualMouse; + @Entry(category = SCREENS, name = "midnightcontrols.menu.virtual_mouse") public static boolean virtualMouse = false; + @Condition(requiredOption = "virtualMouse", visibleButLocked = true) + @Entry(category = SCREENS, name = "midnightcontrols.menu.virtual_mouse.skin") public static VirtualMouseSkin virtualMouseSkin = VirtualMouseSkin.DEFAULT_LIGHT; + @Entry(category = SCREENS, name = "midnightcontrols.menu.hide_cursor") public static boolean hideNormalMouse = false; + @Entry(category = SCREENS, name = "midnightcontrols.menu.virtual_keyboard") public static boolean virtualKeyboard = false; + @Entry(category = CONTROLLER, name = "Controller ID") @Hidden public static Object controllerID = 0; + @Entry(category = CONTROLLER, name = "2nd Controller ID") @Hidden public static Object secondControllerID = -1; + @Comment(category = TOUCH, centered = true, name="\uD83E\uDE84 Behaviour") public static Comment _touchBehaviour; @Entry(category = TOUCH, name = "midnightcontrols.menu.touch_with_controller") public static boolean touchInControllerMode = false; @Entry(category = TOUCH, name = "midnightcontrols.menu.touch_speed", isSlider = true, min = 0, max = 150, precision = 10) public static double touchSpeed = 50.0; @Entry(category = TOUCH, name = "midnightcontrols.menu.invert_touch") public static boolean invertTouch = false; @Entry(category = TOUCH, name = "midnightcontrols.menu.touch_mode") public static TouchMode touchMode = TouchMode.CROSSHAIR; @Entry(category = TOUCH, name = "midnightcontrols.menu.touch_break_delay", isSlider = true, min = 50, max = 500) public static int touchBreakDelay = 120; + @Comment(category = TOUCH, centered = true, name="\uD83D\uDCA1 Visuals") public static Comment _visuals; @Entry(category = TOUCH, name = "midnightcontrols.menu.touch_transparency", isSlider = true, min = 0, max = 100) public static int touchTransparency = 75; @Entry(category = TOUCH, name = "Touch Outline Color", isColor = true) public static String touchOutlineColorHex = "#ffffff"; @Entry(category = TOUCH, name = "Touch Outline Alpha", isSlider = true, min = 0, max = 255) public static int touchOutlineColorAlpha = 150; + @Comment(category = TOUCH, centered = true, name="\uD83E\uDDEA Advanced") public static Comment _advanced; + @Entry(category = TOUCH, name = "Screens with close button") public static List closeButtonScreens = Lists.newArrayList(ChatScreen.class.getCanonicalName(), AdvancementsScreen.class.getCanonicalName(), RingScreen.class.getCanonicalName()); @Entry(category = TOUCH, name = "Left Touch button bindings") public static List leftTouchBinds = Lists.newArrayList("debug_screen", "screenshot","toggle_perspective"); @Entry(category = TOUCH, name = "Right Touch button bindings") public static List rightTouchBinds = Lists.newArrayList("screenshot","toggle_perspective", "use"); @Entry @Hidden public static Map BINDING = new HashMap<>(); private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?"); + @Comment(category = CONTROLLER, centered = true, name="\uD83D\uDD79 Max Analog Stick Values") public static Comment _maxAnalogValues; @Entry(category = CONTROLLER, name = "Max analog value: Left X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueLeftX = 1; @Entry(category = CONTROLLER, name = "Max analog value: Left Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueLeftY = 1; @Entry(category = CONTROLLER, name = "Max analog value: Right X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightX = 1; @Entry(category = CONTROLLER, name = "Max analog value: Right Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightY = 1; + @Comment(category = CONTROLLER, centered = true, name="☠ Dead Zones") public static Comment _deadZones; + @Entry(category = CONTROLLER, name = "midnightcontrols.menu.right_dead_zone", isSlider = true, min = 0.05, max = 1) public static double rightDeadZone = 0.25; + @Entry(category = CONTROLLER, name = "midnightcontrols.menu.left_dead_zone", isSlider = true, min = 0.05, max = 1) public static double leftDeadZone = 0.25; + @Entry(category = CONTROLLER, name = "Trigger Dead-Zone", isSlider = true, min = 0.05, max = 1) public static double triggerDeadZone = 0.1; + @Comment(category = CONTROLLER, centered = true, name="☆ Other Options") public static Comment _otherOptions; @Entry(category = CONTROLLER, name = "Trigger button fix") public static boolean triggerFix = true; @Entry(category = CONTROLLER, name = "Excluded Controllers (Name Regex)") public static List excludedControllers = Lists.newArrayList(".*(Keyboard)$", ".*(Touchpad)$", ".*(Pen)$", ".*(Finger)$"); + @Comment(category = SCREENS, centered = true, name="\uD83D\uDD27 UI Modifications") public static Comment _uiMods; + @Entry(category = SCREENS, name = "midnightcontrols.menu.move_chat") public static boolean moveChat = false; + @Entry(category = SCREENS, name = "Enable Shortcut in Controls Options") public static boolean shortcutInControls = true; + @Entry(category = MISC, name = "Debug") public static boolean debug = false; @Entry(category = MISC, name = "Excluded Keybindings") public static List excludedKeybindings = Lists.newArrayList("key.forward", "key.left", "key.back", "key.right", "key.jump", "key.sneak", "key.sprint", "key.inventory", "key.swapOffhand", "key.drop", "key.use", "key.attack", "key.chat", "key.playerlist", "key.screenshot", "key.togglePerspective", "key.smoothCamera", "key.fullscreen", "key.saveToolbarActivator", "key.loadToolbarActivator", "key.pickItem", "key.hotbar.1", "key.hotbar.2", "key.hotbar.3", "key.hotbar.4", "key.hotbar.5", "key.hotbar.6", "key.hotbar.7", "key.hotbar.8", "key.hotbar.9"); - @Entry(category = GAMEPLAY, name = "Enable Hints") public static boolean enableHints = true; - @Entry(category = SCREENS, name = "Enable Shortcut in Controls Options") public static boolean shortcutInControls = true; - @Entry(category = MISC, name = "Ring Bindings (WIP)") public static List ringBindings = new ArrayList<>(); + @Entry(category = MISC, name = "Ring Bindings (WIP)") @Hidden public static List ringBindings = new ArrayList<>(); @Entry(category = MISC, name = "Ignored Unbound Keys") public static List ignoredUnboundKeys = Lists.newArrayList("inventorytabs.key.next_tab"); @Entry @Hidden public static Map> controllerBindingProfiles = new HashMap<>(); private static Map currentBindingProfile = new HashMap<>(); @@ -402,7 +430,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 40c7928..9e06f94 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; @@ -516,13 +517,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/AbstractBlockAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractBlockAccessor.java new file mode 100644 index 0000000..5f6b874 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractBlockAccessor.java @@ -0,0 +1,14 @@ +package eu.midnightdust.midnightcontrols.client.mixin; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldView; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(AbstractBlock.class) +public interface AbstractBlockAccessor { + @Invoker("canPlaceAt") + boolean midnightcontrols$canPlaceAt(BlockState state, WorldView world, BlockPos pos); +} 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..99ae52f 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); @@ -44,7 +44,7 @@ public abstract class GameRendererMixin { drawContext.draw(); } @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z"), method = "renderWorld") - private void midnigtcontrols$captureMatrices(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 1) Matrix4f matrices) { + private void midnigtcontrols$captureMatrices(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 2) Matrix4f matrices) { TouchUtils.lastProjMat.set(RenderSystem.getProjectionMatrix()); TouchUtils.lastModMat.set(RenderSystem.getModelViewMatrix()); TouchUtils.lastWorldSpaceMatrix.set(matrices); 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..d277f58 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 @@ -28,6 +28,7 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.profiler.Profiler; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Final; @@ -38,6 +39,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client; import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.reacharound; @Mixin(MinecraftClient.class) @@ -54,6 +56,10 @@ public abstract class MinecraftClientMixin { @Shadow public abstract void setScreen(Screen screen); + @Shadow public int attackCooldown; + + @Shadow protected abstract void handleInputEvents(); + @Unique private BlockPos midnightcontrols$lastTargetPos; @Unique private Vec3d midnightcontrols$lastPos; @Unique private Direction midnightcontrols$lastTargetSide; @@ -81,7 +87,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 +135,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); } //} @@ -144,10 +150,21 @@ public abstract class MinecraftClientMixin { } } } - // This is always supposed to be located at before the line 'this.profiler.swap("Keybindings");' -// @Redirect(method = "tick", at = @At(value = "FIELD",target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 6)) -// private Screen midnightcontrols$ignoreTouchOverlay(MinecraftClient instance) { -// if (instance.currentScreen instanceof TouchscreenOverlay) return null; -// return instance.currentScreen; -// } + // TODO: Replace this with MixinExtras' Expressions once that's officially released + @Inject(method = "tick", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/hud/DebugHud;shouldShowDebugHud()Z")) + private void midnightcontrols$handleKeybindsWithTouchOverlay(CallbackInfo ci, @Local Profiler profiler) { + if (client.currentScreen instanceof TouchscreenOverlay) { + profiler.swap("Keybindings"); + this.handleInputEvents(); + if (this.attackCooldown > 0) { + --this.attackCooldown; + } + } + } + + // Needed, as it will cause item actions not to work in touchscreen mode otherwise with the above method + @Inject(method = "handleInputEvents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isUsingItem()Z"), cancellable = true) + private void midnightcontrols$dontHandleItemAndBlockInteractions(CallbackInfo ci) { + if (client.currentScreen instanceof TouchscreenOverlay) ci.cancel(); + } } 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..c251141 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,8 @@ 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); + TouchInput.clickStartTime = -1; 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/TouchUtils.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java index 403e7df..49b1e3f 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/TouchUtils.java @@ -38,7 +38,7 @@ public class TouchUtils { if (entityCast != null && entityCast.getType() == HitResult.Type.ENTITY) return entityCast; - BlockHitResult result = client.world.raycast(new RaycastContext(near, far, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.ANY, client.player)); + BlockHitResult result = client.world.raycast(new RaycastContext(near, far, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, client.player)); if (client.player.getPos().distanceTo(result.getPos()) > playerRange) return null; return result; 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/SilentTexturedButtonWidget.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/SilentTexturedButtonWidget.java index c71ee85..b55c9f7 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/SilentTexturedButtonWidget.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/SilentTexturedButtonWidget.java @@ -1,5 +1,6 @@ package eu.midnightdust.midnightcontrols.client.touch.gui; +import eu.midnightdust.midnightcontrols.client.touch.TouchInput; import org.thinkingstudio.obsidianui.Position; import org.thinkingstudio.obsidianui.widget.SpruceTexturedButtonWidget; import net.minecraft.text.Text; @@ -34,6 +35,7 @@ public class SilentTexturedButtonWidget extends SpruceTexturedButtonWidget { public void onClick(double mouseX, double mouseY) { this.setActive(true); super.onClick(mouseX, mouseY); + TouchInput.clickStartTime = -1; this.setActive(false); } } 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..846225f 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 @@ -9,12 +9,14 @@ package eu.midnightdust.midnightcontrols.client.touch.gui; +import eu.midnightdust.midnightcontrols.client.mixin.KeyBindingIDAccessor; import eu.midnightdust.midnightcontrols.client.touch.TouchInput; import eu.midnightdust.midnightcontrols.client.util.storage.AxisStorage; +import net.minecraft.client.MinecraftClient; 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; @@ -298,7 +300,13 @@ public class TouchscreenOverlay extends Screen { if (binding == null) continue; boolean hasTexture = client.getGuiAtlasManager().getSprite(id("binding/"+bindName)) != missingSprite; if (MidnightControlsConfig.debug) System.out.println(left +" "+id("binding/"+bindName)+" "+ hasTexture); - var button = TextIconButtonWidget.builder(Text.translatable(binding.getTranslationKey()), b -> binding.handle(client, 1, ButtonState.PRESS), hasTexture) + var button = TextIconButtonWidget.builder(Text.translatable(binding.getTranslationKey()), b -> { + binding.handle(client, 1.0f, ButtonState.PRESS); + if (binding.asKeyBinding().isPresent()) { + binding.asKeyBinding().get().setPressed(true); + ((KeyBindingAccessor)binding.asKeyBinding().get()).midnightcontrols$press(); + } + }, hasTexture) .texture(hasTexture ? id("binding/"+bindName) : emptySprite, 20, 20).dimension(20, 20).build(); button.setPosition(left ? (3+(i*23)) : this.width-(23+(i*23)), 3); button.setAlpha(MidnightControlsConfig.touchTransparency / 100f); @@ -340,7 +348,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(); } @@ -359,10 +367,4 @@ public class TouchscreenOverlay extends Screen { } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } - @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - KeyBinding.onKeyPressed(InputUtil.fromKeyCode(keyCode, scanCode)); - super.keyPressed(keyCode,scanCode,modifiers); - return true; - } } 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/assets/midnightcontrols/lang/cs_cz.json b/common/src/main/resources/assets/midnightcontrols/lang/cs_cz.json new file mode 100644 index 0000000..118bf74 --- /dev/null +++ b/common/src/main/resources/assets/midnightcontrols/lang/cs_cz.json @@ -0,0 +1,239 @@ +{ + "midnightcontrols.midnightconfig.title": "Pokročilá konfigurace MidnightControls", + "midnightcontrols.midnightconfig.enum.VirtualMouseSkin.DEFAULT_LIGHT": "Výchozí světlá", + "midnightcontrols.midnightconfig.enum.VirtualMouseSkin.DEFAULT_DARK": "Výchozí tmavá", + "midnightcontrols.midnightconfig.enum.VirtualMouseSkin.SECOND_LIGHT": "Druhá světlá", + "midnightcontrols.midnightconfig.enum.VirtualMouseSkin.SECOND_DARK": "Druhá tmavá", + "midnightcontrols.midnightconfig.enum.ControllerType.DEFAULT": "Výchozí", + "midnightcontrols.midnightconfig.enum.ControllerType.DUALSHOCK": "DualShock", + "midnightcontrols.midnightconfig.enum.ControllerType.DUALSENSE": "DualSense", + "midnightcontrols.midnightconfig.enum.ControllerType.SWITCH": "Switch/Wii ovladač", + "midnightcontrols.midnightconfig.enum.ControllerType.XBOX": "Xbox One/Series ovladač", + "midnightcontrols.midnightconfig.enum.ControllerType.XBOX_360": "Xbox 360 Controller", + "midnightcontrols.midnightconfig.enum.ControllerType.STEAM_CONTROLLER": "Steam Controller", + "midnightcontrols.midnightconfig.enum.ControllerType.STEAM_DECK": "Steam Deck", + "midnightcontrols.midnightconfig.enum.ControllerType.OUYA": "OUYA ovladač", + "midnightcontrols.midnightconfig.enum.ControllerType.NUMBERED": "Ovladač s číslicemi", + "midnightcontrols.midnightconfig.enum.ControlsMode.DEFAULT": "Klávesnice/Myš", + "midnightcontrols.midnightconfig.enum.ControlsMode.CONTROLLER": "Ovladač", + "midnightcontrols.midnightconfig.enum.ControlsMode.TOUCHSCREEN": "Dotyk (Beta)", + "midnightcontrols.midnightconfig.enum.HudSide.LEFT": "Levá", + "midnightcontrols.midnightconfig.enum.HudSide.RIGHT": "Pravá", + "midnightcontrols.midnightconfig.enum.TouchMode.CROSSHAIR": "Crosshair režim", + "midnightcontrols.midnightconfig.enum.TouchMode.FINGER_POS": "Pozice prstu", + "midnightcontrols.midnightconfig.enum.CameraMode.FLAT": "Plochá", + "midnightcontrols.midnightconfig.enum.CameraMode.ADAPTIVE": "Adaptivní", + "key.categories.midnightcontrols": "MidnightControls", + "key.midnightcontrols.look_down": "Podívat se dolů", + "key.midnightcontrols.look_left": "Podívat se doleva", + "key.midnightcontrols.look_right": "Podívat se doprava", + "key.midnightcontrols.look_up": "Podívat se nahoru", + "key.midnightcontrols.ring": "Otevřít ovládací kroužek", + "midnightcontrols.action.attack": "Útok", + "midnightcontrols.action.back": "Zpět", + "midnightcontrols.action.chat": "Otevřít chat", + "midnightcontrols.action.controls_ring": "Otevřít ovládací kroužek", + "midnightcontrols.action.debug_screen": "Otevřít debugovací HUD (F3)", + "midnightcontrols.action.drop_item": "Odhodit věc", + "midnightcontrols.action.drink": "Napít se", + "midnightcontrols.action.eat": "Najíst se", + "midnightcontrols.action.equip": "Vybavit se", + "midnightcontrols.action.exit": "Ukončit", + "midnightcontrols.action.forward": "Dopředu", + "midnightcontrols.action.hit": "Útok", + "midnightcontrols.action.hotbar_left": "Hotbar doleva", + "midnightcontrols.action.hotbar_right": "Hotbar doprava", + "midnightcontrols.action.inventory": "Inventář", + "midnightcontrols.action.jump": "Skok", + "midnightcontrols.action.left": "Doleva", + "midnightcontrols.action.pause_game": "Pozastavit hru", + "midnightcontrols.action.pick_block": "Vybrat blok", + "midnightcontrols.action.pickup": "Vzít", + "midnightcontrols.action.pickup_all": "Vzít vše", + "midnightcontrols.action.place": "Položit", + "midnightcontrols.action.player_list": "Seznam hráčů", + "midnightcontrols.action.quick_move": "Rychlý přesun", + "midnightcontrols.action.right": "Doprava", + "midnightcontrols.action.screenshot": "Vyfotit snímek obrazovky", + "midnightcontrols.action.slot_up": "Přesunout slot nahoru", + "midnightcontrols.action.slot_down": "Přesunout slot dolů", + "midnightcontrols.action.slot_left": "Přesunout slot doleva", + "midnightcontrols.action.slot_right": "Přesunout slot doprava", + "midnightcontrols.action.sneak": "Plížit se", + "midnightcontrols.action.sprint": "Sprintovat", + "midnightcontrols.action.swap_hands": "Vyměnit si ruce", + "midnightcontrols.action.toggle_perspective": "Změnit perspektivu", + "midnightcontrols.action.toggle_smooth_camera": "Nastavit kinematografickou kameru", + "midnightcontrols.action.page_back": "Předchozí stránka", + "midnightcontrols.action.page_next": "Následující stránka", + "midnightcontrols.action.tab_back": "Předchozí karta", + "midnightcontrols.action.tab_next": "Následující karta", + "midnightcontrols.action.take": "Vzít věc", + "midnightcontrols.action.take_all": "Vzít stack", + "midnightcontrols.action.use": "Použít", + "midnightcontrols.action.zoom": "Přiblížit", + "midnightcontrols.action.zoom_in": "Zvýšit přiblížení", + "midnightcontrols.action.zoom_out": "Snížit příblížení", + "midnightcontrols.action.zoom_reset": "Resetovat Přiblížení", + "midnightcontrols.action.emi_page_left": "Předchozí stránka", + "midnightcontrols.action.emi_page_right": "Následující stránka", + "midnightcontrols.category.emi": "EMI", + "midnightcontrols.button.a": "A", + "midnightcontrols.button.b": "B", + "midnightcontrols.button.x": "X", + "midnightcontrols.button.y": "Y", + "midnightcontrols.button.left_bumper": "Levý bumper", + "midnightcontrols.button.right_bumper": "Pravý bumper", + "midnightcontrols.button.back": "Zpět", + "midnightcontrols.button.start": "Start", + "midnightcontrols.button.guide": "Guide", + "midnightcontrols.button.left_thumb": "Levá páčka", + "midnightcontrols.button.right_thumb": "Pravá páčka", + "midnightcontrols.button.dpad_up": "DPAD nahoru", + "midnightcontrols.button.dpad_right": "DPAD doprava", + "midnightcontrols.button.dpad_down": "DPAD dolů", + "midnightcontrols.button.dpad_left": "DPAD doleva", + "midnightcontrols.button.l4": "L4", + "midnightcontrols.button.l5": "L5", + "midnightcontrols.button.r4": "R4", + "midnightcontrols.button.r5": "L5", + "midnightcontrols.axis.left_x+": "Levý X+", + "midnightcontrols.axis.left_y+": "Levý Y+", + "midnightcontrols.axis.right_x+": "Pravý X+", + "midnightcontrols.axis.right_y+": "Pravý Y+", + "midnightcontrols.axis.left_trigger": "Levý trigger", + "midnightcontrols.axis.right_trigger": "Pravý trigger", + "midnightcontrols.axis.left_x-": "Levý X-", + "midnightcontrols.axis.left_y-": "Levý Y-", + "midnightcontrols.axis.right_x-": "Pravý X-", + "midnightcontrols.axis.right_y-": "Pravý Y-", + "midnightcontrols.button.unknown": "Neznámý (%d)", + "midnightcontrols.controller.tutorial.title": "Hrajte hru s ovladačem!", + "midnightcontrols.controller.tutorial.description": "jděte do %s -> %s -> %s", + "midnightcontrols.controller.connected": "Ovladač %d připojen.", + "midnightcontrols.controller.disconnected": "Ovladač %d odpojen.", + "midnightcontrols.controller.mappings.1": "Chcete-li nakonfigurovat mapování ovladače, použijte %s", + "midnightcontrols.controller.mappings.3": "a vložte mapování do editoru souboru mapování.", + "midnightcontrols.controller.mappings.error": "Chyba při načítání mapování.", + "midnightcontrols.controller.mappings.error.write": "Chyba při zápisu mapování do souboru.", + "midnightcontrols.controller.mappings.updated": "Aktualizované mapování!", + "midnightcontrols.controller_type.default": "Výchozí", + "midnightcontrols.controller_type.dualshock": "DualShock", + "midnightcontrols.controller_type.dualsense": "DualSense", + "midnightcontrols.controller_type.switch": "Switch/Wii ovladač", + "midnightcontrols.controller_type.xbox": "Xbox One/Series ovladač", + "midnightcontrols.controller_type.xbox_360": "Xbox 360 ovladač", + "midnightcontrols.controller_type.steam_controller": "Steam ovladač", + "midnightcontrols.controller_type.steam_deck": "Steam Deck", + "midnightcontrols.controller_type.ouya": "OUYA ovladač", + "midnightcontrols.controller_type.numbered": "Ovladač s číslicemi", + "midnightcontrols.controls_mode.default": "Klávesnice/Myš", + "midnightcontrols.controls_mode.controller": "Ovladač", + "midnightcontrols.controls_mode.touchscreen": "Dotyk (Beta)", + "midnightcontrols.hud_side.LEFT": "Levý", + "midnightcontrols.hud_side.RIGHT": "Pravý", + "midnightcontrols.menu.analog_movement": "Analogový pohyb", + "midnightcontrols.menu.analog_movement.tooltip": "Pokud je to možné, umožňuje analogový pohyb.", + "midnightcontrols.menu.auto_switch_mode": "Režim automatického přepínání", + "midnightcontrols.menu.auto_switch_mode.tooltip": "Zda se má režim ovládání automaticky přepnout na ovladač, pokud je připojen.", + "midnightcontrols.menu.camera_mode": "Režim kamery", + "midnightcontrols.menu.controller": "Ovladač", + "midnightcontrols.menu.controller2": "Druhý ovladač", + "midnightcontrols.menu.controller2.tooltip": "Použije druhý ovladač, který umožňuje (například) podporu Joy-Conů.", + "midnightcontrols.menu.controller_toggle_sneak": "Přepnutí plížení na ovladači", + "midnightcontrols.menu.controller_toggle_sprint": "Přepnutí sprintování na ovladačí", + "midnightcontrols.menu.controller_type": "Typ ovladače", + "midnightcontrols.menu.controller_type.tooltip": "Typ používaného ovladače (potřebné pro zobrazení správných tlačítek).", + "midnightcontrols.menu.controls_mode": "Režim", + "midnightcontrols.menu.controls_mode.tooltip": "Režim ovládání.", + "midnightcontrols.menu.copy_controller_guid": "Zkopírovat GUID", + "midnightcontrols.menu.current_controller_guid": "GUID aktuálního ovladače: %s", + "midnightcontrols.menu.double_tap_to_sprint": "Dvojité klepnutí na sprintování", + "midnightcontrols.menu.double_tap_to_sprint.tooltip": "Přepíná, zda klávesa chůze vpřed při dvojitém rychlém poklepání umožní hráči sprintovat.", + "midnightcontrols.menu.fast_block_placing": "Rychlé pokládání bloků", + "midnightcontrols.menu.fast_block_placing.tooltip": "Při letu v kreativním režimu umožňuje rychlé pokládání bloků v závislosti na vaší rychlosti. §cNa některých serverech to může být považováno za podvádění§r.", + "midnightcontrols.menu.fly_drifting": "Fly Drifting", + "midnightcontrols.menu.fly_drifting.tooltip": "Za letu umožňuje Vanilla driftování/setrvačnost.", + "midnightcontrols.menu.fly_drifting_vertical": "Vertikální Fly Drifting", + "midnightcontrols.menu.fly_drifting_vertical.tooltip": "Za letu umožňuje Vanilla vertikální driftování/setrvačnost.", + "midnightcontrols.menu.hud_enable": "Zapnout HUD", + "midnightcontrols.menu.hud_enable.tooltip": "Přepíná indikátor tlačítek ovladače na obrazovce.", + "midnightcontrols.menu.hud_side": "Strana HUD", + "midnightcontrols.menu.hud_side.tooltip": "Pozice HUD.", + "midnightcontrols.menu.invert_right_x_axis": "Invertovat pravý X", + "midnightcontrols.menu.invert_right_y_axis": "Invertovat pravý Y", + "midnightcontrols.menu.joystick_as_mouse": "Vždy použít levou páčku jako myš", + "midnightcontrols.menu.joystick_as_mouse.tooltip": "V každém menu se páčka chová jako myš.", + "midnightcontrols.menu.eye_tracker_as_mouse": "Použití eye trackeru jako myši" + "midnightcontrols.menu.eye_tracker_as_mouse.tooltip": "Nahraďte myš zařízením pro sledování očí (například Tobii 5).", + "midnightcontrols.menu.eye_tracker_deadzone": "Velikost mrtvé zóny eye trackeru", + "midnightcontrols.menu.eye_tracker_deadzone.tooltip": "Zastaví pohyb kamery při pohledu do blízkosti crosshair", + "midnightcontrols.menu.keyboard_controls": "Ovládání klávesnice...", + "midnightcontrols.menu.left_dead_zone": "Mrtvá zóna levé páčky", + "midnightcontrols.menu.left_dead_zone.tooltip": "Mrtvá zóna levé analogové páčky ovladače.", + "midnightcontrols.menu.mappings.open_input_str": "Otevřít editor souborů mapování", + "midnightcontrols.menu.max_left_x_value": "Maximální hodnota levé osy X", + "midnightcontrols.menu.max_left_x_value.tooltip": "Změní hodnotu, kterou mod považuje za nejvyšší pro levou osu X. Užitečné, pokud osa nevyužívá celý rozsah a zdá se pomalá.", + "midnightcontrols.menu.max_left_y_value": "Maximální hodnota levé osy Y", + "midnightcontrols.menu.max_left_y_value.tooltip": "Změní hodnotu, kterou mod považuje za nejvyšší pro levou osu Y. Užitečné, pokud osa nevyužívá celý rozsah a zdá se pomalá.", + "midnightcontrols.menu.max_right_x_value": "Maximální hodnota pravé osy X", + "midnightcontrols.menu.max_right_x_value.tooltip": "Změní hodnotu, kterou mod považuje za nejvyšší pro pravou osu X. Užitečné, pokud osa nevyužívá celý rozsah a zdá se pomalá.", + "midnightcontrols.menu.max_right_y_value": "Maximální hodnota pravé osy Y", + "midnightcontrols.menu.max_right_y_value.tooltip": "Změní hodnotu, kterou mod považuje za nejvyšší pro pravou osu Y. Užitečné, pokud osa nevyužívá celý rozsah a zdá se pomalá.", + "midnightcontrols.menu.mouse_speed": "Rychlost myši", + "midnightcontrols.menu.mouse_speed.tooltip": "Rychlost emulované myši ovladače.", + "midnightcontrols.menu.move_chat": "Přesunutí vstupního pole chatu nahoru", + "midnightcontrols.menu.move_chat.tooltip": "Přesune pole pro zadávání chatu nahoru, aby se lépe zadávalo na zařízeních s klávesnicí na obrazovce.", + "midnightcontrols.menu.multiple_mapping_tip": "(Tip: Můžete také vložit více mapování najednou.)", + "midnightcontrols.menu.reacharound.horizontal": "Pokládání předního bloku", + "midnightcontrols.menu.reacharound.horizontal.tooltip": "Umožňuje umístění předního bloku, §ccož může být na některých serverech považováno za podvod.§r", + "midnightcontrols.menu.reacharound.vertical": "Vertikální dosah", + "midnightcontrols.menu.reacharound.vertical.tooltip": "Zapiná vertikální dosah, §ccož může být na některých serverech považováno za podvod.§r", + "midnightcontrols.menu.reload_controller_mappings": "Opětovné načíst mapování ovladače", + "midnightcontrols.menu.reload_controller_mappings.tooltip": "Znovu načte soubor mapování ovladače.", + "midnightcontrols.menu.right_dead_zone": "Mrtvá zóna pravé páčky", + "midnightcontrols.menu.right_dead_zone.tooltip": "Mrtvá zóna pravé analogové páčky ovladače.", + "midnightcontrols.menu.rotation_speed": "Rychlost otáčení osy X", + "midnightcontrols.menu.rotation_speed.tooltip": "Rychlost otáčení osy X v režimu ovladače.", + "midnightcontrols.menu.y_axis_rotation_speed": "Rychlost otáčení osy Y", + "midnightcontrols.menu.y_axis_rotation_speed.tooltip": "Rychlost otáčení osy Y v režimu ovladače.", + "midnightcontrols.menu.separate_controller_profile": "Samostatný profil ovladače", + "midnightcontrols.menu.separator.controller": "Ovladač", + "midnightcontrols.menu.separator.general": "Obecné", + "midnightcontrols.menu.title": "MidnightControls - Nastavení", + "midnightcontrols.menu.title.controller": "Nastavení ovladače", + "midnightcontrols.menu.title.controller_controls": "Vazby ovladače", + "midnightcontrols.menu.title.gameplay": "Herní možnosti", + "midnightcontrols.menu.title.general": "Obecné možnosti", + "midnightcontrols.menu.title.hud": "Možnosti HUD", + "midnightcontrols.menu.title.mappings.string": "Editor souborů mapování", + "midnightcontrols.menu.title.touch": "Možnosti dotyku", + "midnightcontrols.menu.title.visual": "Možnosti vzhledu", + "midnightcontrols.menu.touch_break_delay": "Zpoždění přerušení dotyku", + "midnightcontrols.menu.touch_speed": "Rychlost dotyku", + "midnightcontrols.menu.invert_touch": "Invertování směru dotyku", + "midnightcontrols.menu.touch_mode": "Režim dotykové interakce", + "midnightcontrols.menu.touch_transparency": "Průhlednost dotykového HUD", + "midnightcontrols.menu.touch_with_controller": "Dotyk v režimu ovladače", + "midnightcontrols.menu.unfocused_input": "Nezaostřený vstup", + "midnightcontrols.menu.unfocused_input.tooltip": "Umožňuje vstup do ovladače, když okno není zaostřené.", + "midnightcontrols.menu.virtual_mouse": "Virtuální myš", + "midnightcontrols.menu.virtual_mouse.tooltip": "Povoluje virtuální myš, která je užitečná při rozdělené obrazovce.", + "midnightcontrols.menu.virtual_mouse.skin": "Skin virtuální myši", + "midnightcontrols.menu.hide_cursor": "Skrytí normálního kurzoru myši", + "midnightcontrols.menu.hide_cursor.tooltip": "Skryje normální kurzor myši a ponechá viditelný pouze virtuální kurzor myši.", + "midnightcontrols.narrator.unbound": "Zrušení vazby na tlačítko %s", + "midnightcontrols.not_bound": "Není vázano", + "midnightcontrols.virtual_mouse.skin.default_light": "Výchozí světlá", + "midnightcontrols.virtual_mouse.skin.default_dark": "Výchozí tmavá", + "midnightcontrols.virtual_mouse.skin.second_light": "Druhá světlá", + "midnightcontrols.virtual_mouse.skin.second_dark": "Druhá tmavá", + "midnightcontrols.midnightconfig.category.controller": "Ovladač", + "midnightcontrols.midnightconfig.category.misc": "Různé", + "midnightcontrols.midnightconfig.category.screens": "Obrazovky", + "midnightcontrols.midnightconfig.category.gameplay": "Hra", + "midnightcontrols.midnightconfig.category.touch": "Dotyk", + "midnightcontrols.midnightconfig.category.visual": "Vizuál", + "modmenu.descriptionTranslation.midnightcontrols": "Přidává podporu ovladačů a celkově vylepšuje ovládání.\nPřevzato z LambdaControls, jehož vývoj byl ukončen." +} + diff --git a/common/src/main/resources/midnightcontrols.mixins.json b/common/src/main/resources/midnightcontrols.mixins.json index 4a01ff8..c745ebd 100644 --- a/common/src/main/resources/midnightcontrols.mixins.json +++ b/common/src/main/resources/midnightcontrols.mixins.json @@ -13,6 +13,7 @@ "GameOptionsScreenMixin", "GameRendererMixin", "HandledScreenMixin", + "InputAccessor", "InputUtilMixin", "KeyBindingIDAccessor", "KeyBindingMixin", @@ -25,7 +26,8 @@ "ScreenMixin", "AbstractSignEditScreenAccessor", "TabNavigationWidgetAccessor", - "WorldRendererMixin" + "WorldRendererMixin", + "AbstractBlockAccessor" ], "injectors": { "defaultRequire": 1 diff --git a/gradle.properties b/gradle.properties index 2f3c513..d3b3219 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,32 +2,32 @@ 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 -mod_version=1.10.5 +mod_version=1.10.6 maven_group=eu.midnightdust release_type=release 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.7.0+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 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 +obsidianui_version=0.2.11+mc1.21.5 modmenu_version=10.0.0-beta.1 emotecraft_version=2.5.5+1.21.4-fabric bendylib_version=2.0.+ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd49..9bbc975 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ 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 diff --git a/gradlew b/gradlew index 1aa94a4..d24fc20 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -200,10 +202,10 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. diff --git a/gradlew.bat b/gradlew.bat index 6689b85..640d686 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,92 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS=-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega