diff --git a/build.gradle b/build.gradle index 8990bed..1cb5e2e 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.10-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.11-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/MidnightControlsClient.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index 5af90dd..7fd71c2 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -150,20 +150,20 @@ public class MidnightControlsClient extends MidnightControls { if (PlatformFunctions.isModLoaded("wynntils") && KeyBindingIDAccessor.getKEYS_BY_ID().entrySet().stream().noneMatch(b -> Objects.equals(b.getValue().getCategory(), "Wynntils"))) return; for (int i = 0; i < KeyBindingIDAccessor.getKEYS_BY_ID().size(); ++i) { KeyBinding keyBinding = KeyBindingIDAccessor.getKEYS_BY_ID().entrySet().stream().toList().get(i).getValue(); - if (MidnightControlsConfig.excludedKeybindings.stream().noneMatch(excluded -> keyBinding.getTranslationKey().startsWith(excluded))) { - if (!keyBinding.getTranslationKey().contains(MidnightControlsConstants.NAMESPACE)) { + if (MidnightControlsConfig.excludedKeybindings.stream().noneMatch(excluded -> keyBinding.getId().startsWith(excluded))) { + if (!keyBinding.getId().contains(MidnightControlsConstants.NAMESPACE)) { AtomicReference category = new AtomicReference<>(); InputManager.streamCategories().forEach(buttonCategory -> { - if (buttonCategory.getIdentifier().equals(validVanillaId(keyBinding.getCategory()))) + if (buttonCategory.getIdentifier().equals(keyBinding.getCategory().id())) category.set(buttonCategory); }); if (category.get() == null) { - category.set(new ButtonCategory(validVanillaId(keyBinding.getCategory()))); + category.set(new ButtonCategory(keyBinding.getCategory().id())); InputManager.registerCategory(category.get()); } - ButtonBinding buttonBinding = new ButtonBinding.Builder(keyBinding.getTranslationKey()).category(category.get()).linkKeybind(keyBinding).register(); + ButtonBinding buttonBinding = new ButtonBinding.Builder(keyBinding.getId()).category(category.get()).linkKeybind(keyBinding).register(); if (MidnightControlsConfig.debug) { - MidnightControls.log(keyBinding.getTranslationKey()); + MidnightControls.log(keyBinding.getId()); MidnightControls.log(String.valueOf(buttonBinding)); } } @@ -172,14 +172,6 @@ public class MidnightControlsClient extends MidnightControls { InputManager.loadButtonBindings(); lateInitDone = true; } - private static Identifier validVanillaId(String path) { - for(int i = 0; i < path.length(); ++i) { - if (!Identifier.isPathCharacterValid(path.charAt(i))) { - path = path.replace(path.charAt(i), '_'); - } - } - return Identifier.ofVanilla(path); - } /** * This method is called every Minecraft tick. 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 ddb8df3..f64e266 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -12,7 +12,10 @@ package eu.midnightdust.midnightcontrols.client; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mojang.blaze3d.platform.GLX; +import eu.midnightdust.lib.config.EntryInfo; import eu.midnightdust.lib.config.MidnightConfig; +import eu.midnightdust.lib.config.MidnightConfigListWidget; +import eu.midnightdust.lib.config.MidnightConfigScreen; import eu.midnightdust.midnightcontrols.ControlsMode; import eu.midnightdust.midnightcontrols.MidnightControls; import eu.midnightdust.midnightcontrols.MidnightControlsConstants; @@ -30,6 +33,7 @@ import eu.midnightdust.midnightcontrols.client.enums.TouchMode; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.advancement.AdvancementsScreen; +import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; 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 7ef79b5..4db2c66 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java @@ -17,14 +17,18 @@ import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat; import eu.midnightdust.midnightcontrols.client.compat.YACLCompat; import eu.midnightdust.midnightcontrols.client.mixin.AdvancementsScreenAccessor; import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAccessor; +import eu.midnightdust.midnightcontrols.client.mixin.KeyboardAccessor; import eu.midnightdust.midnightcontrols.client.mixin.MouseAccessor; import eu.midnightdust.midnightcontrols.client.util.InventoryUtil; import eu.midnightdust.midnightcontrols.client.util.storage.AxisStorage; import eu.midnightdust.midnightcontrols.client.util.storage.ButtonStorage; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.option.KeybindsScreen; import net.minecraft.client.gui.widget.EntryListWidget; import net.minecraft.client.gui.widget.PressableWidget; import net.minecraft.client.gui.widget.SliderWidget; +import net.minecraft.client.input.KeyInput; +import net.minecraft.client.input.MouseInput; import net.minecraft.entity.vehicle.BoatEntity; import org.thinkingstudio.obsidianui.widget.AbstractSpruceWidget; import org.thinkingstudio.obsidianui.widget.container.SpruceEntryListWidget; @@ -82,6 +86,7 @@ import static org.lwjgl.glfw.GLFW.*; */ public class MidnightInput { public static final Map BUTTON_COOLDOWNS = new HashMap<>(); + public static final KeyInput ENTER_KEY_INPUT = new KeyInput(GLFW_KEY_ENTER, 0, 0); // Cooldowns public int actionGuiCooldown = 0; public int joystickCooldown = 0; @@ -393,9 +398,9 @@ public class MidnightInput { accessor.midnightcontrols$onCursorPos(client.getWindow().getHandle(), client.mouse.getX(), client.mouse.getY()); switch (storage.state) { // Button pressed - case PRESS -> accessor.midnightcontrols$onMouseButton(client.getWindow().getHandle(), GLFW_MOUSE_BUTTON_LEFT, 1, 0); + case PRESS -> accessor.midnightcontrols$onMouseButton(client.getWindow().getHandle(), new MouseInput(GLFW_MOUSE_BUTTON_LEFT, 1), 0); case RELEASE -> { // Button released - accessor.midnightcontrols$onMouseButton(client.getWindow().getHandle(), GLFW_MOUSE_BUTTON_LEFT, 0, 0); + accessor.midnightcontrols$onMouseButton(client.getWindow().getHandle(), new MouseInput(GLFW_MOUSE_BUTTON_LEFT, 0), 0); client.currentScreen.setDragging(false); } case REPEAT -> client.currentScreen.setDragging(true); // Button held down / dragging @@ -412,8 +417,8 @@ public class MidnightInput { if (client.currentScreen instanceof HandledScreen handledScreen && ((HandledScreenAccessor) handledScreen).midnightcontrols$getSlotAt( mouseX, mouseY) != null) return; if (!this.ignoreNextXRelease && client.currentScreen != null) { - if (storage.state == ButtonState.PRESS) client.currentScreen.mouseClicked(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_2); - else if (storage.state == ButtonState.RELEASE) client.currentScreen.mouseReleased(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_2); + if (storage.state == ButtonState.PRESS) client.currentScreen.mouseClicked(new Click(mouseX, mouseY, new MouseInput(GLFW.GLFW_MOUSE_BUTTON_2, 1)), false); + else if (storage.state == ButtonState.RELEASE) client.currentScreen.mouseReleased(new Click(mouseX, mouseY, new MouseInput(GLFW.GLFW_MOUSE_BUTTON_2, 0))); this.screenCloseCooldown = 5; } else { this.ignoreNextXRelease = false; @@ -607,7 +612,7 @@ public class MidnightInput { public boolean handleAButton(@NotNull Screen screen, @NotNull Element focused) { if (focused instanceof PressableWidget widget) { widget.playDownSound(MinecraftClient.getInstance().getSoundManager()); - widget.onPress(); + widget.onPress(ENTER_KEY_INPUT); return true; } else if (focused instanceof AbstractSprucePressableButtonWidget widget) { widget.playDownSound(); @@ -622,8 +627,8 @@ public class MidnightInput { } else if (focused instanceof MultiplayerServerListWidget list) { var entry = list.getSelectedOrNull(); if (entry instanceof MultiplayerServerListWidget.LanServerEntry || entry instanceof MultiplayerServerListWidget.ServerEntry) { - ((MultiplayerScreen) screen).select(entry); - ((MultiplayerScreen) screen).connect(); + //((MultiplayerScreen) screen).select(entry); + entry.connect(); } } else if (focused instanceof SpruceParentWidget) { var childFocused = ((SpruceParentWidget) focused).getFocused(); @@ -672,7 +677,7 @@ public class MidnightInput { } case SliderWidget slider -> { if (slider.active) { - slider.keyPressed(right ? 262 : 263, 0, 0); + slider.keyPressed(new KeyInput(right ? 262 : 263, 0, 0)); this.actionGuiCooldown = 2; // Prevent to press too quickly the focused element, so we have to skip 5 ticks. return true; } @@ -796,7 +801,7 @@ public class MidnightInput { .anyMatch(element -> { if (element.getMessage().getContent() instanceof TranslatableTextContent translatableText) { if (set.stream().anyMatch(key -> translatableText.getKey().equals(key))) { - element.onPress(); + element.onPress(ENTER_KEY_INPUT); return true; } } @@ -811,9 +816,9 @@ public class MidnightInput { } public void pressKeyboardKey(MinecraftClient client, int key) { - client.keyboard.onKey(client.getWindow().getHandle(), key, 0, 1, 0); + ((KeyboardAccessor) client.keyboard).midnightcontrols$onKey(client.getWindow().getHandle(), 1, new KeyInput(key, 0, 0)); } public void pressKeyboardKey(Screen screen, int key) { - screen.keyPressed(key, 0, 1); + screen.keyPressed(new KeyInput(key, 0, 1)); } } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightReacharound.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightReacharound.java index fad46bd..e0acbc9 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightReacharound.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightReacharound.java @@ -125,7 +125,7 @@ public class MidnightReacharound { if (client.player.isRiding()) return null; // Temporary pos, do not use - Vec3d playerPosi = client.player.getPos(); + Vec3d playerPosi = client.player.getEntityPos(); // Imitates var playerPos = client.player.getBlockPos().down(); Vec3d playerPos = new Vec3d(playerPosi.getX(), playerPosi.getY() - 1.0, playerPosi.getZ()); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EMICompat.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EMICompat.java index 620ff07..61b5d1d 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EMICompat.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EMICompat.java @@ -4,6 +4,7 @@ import dev.emi.emi.api.EmiApi; import dev.emi.emi.config.EmiConfig; import dev.emi.emi.screen.EmiScreenManager; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; +import eu.midnightdust.midnightcontrols.client.MidnightInput; import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; import eu.midnightdust.midnightcontrols.client.controller.ButtonCategory; import eu.midnightdust.midnightcontrols.client.controller.InputManager; @@ -14,8 +15,8 @@ import static eu.midnightdust.midnightcontrols.MidnightControls.id; public class EMICompat implements CompatHandler { public static boolean handleEmiPages(boolean direction) { if (isEMIEnabled() && MidnightControlsClient.input.actionGuiCooldown == 0 && EmiScreenManager.getSearchPanel() != null && EmiScreenManager.getSearchPanel().pageLeft != null && EmiScreenManager.getSearchPanel().pageRight != null) { - if (direction) EmiScreenManager.getSearchPanel().pageRight.onPress(); - else EmiScreenManager.getSearchPanel().pageLeft.onPress(); + if (direction) EmiScreenManager.getSearchPanel().pageRight.onPress(MidnightInput.ENTER_KEY_INPUT); + else EmiScreenManager.getSearchPanel().pageLeft.onPress(MidnightInput.ENTER_KEY_INPUT); MidnightControlsClient.input.actionGuiCooldown = 5; return true; } 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 c307424..3a92388 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 @@ -5,6 +5,7 @@ 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 net.minecraft.client.input.MouseInput; import org.joml.Vector2i; import org.lwjgl.glfw.GLFW; @@ -28,7 +29,7 @@ public class EmotecraftCompat { InputManager.INPUT_MANAGER.updateMousePosition(client); if (stickReleased) { - ((MouseAccessor) client.mouse).midnightcontrols$onMouseButton(client.getWindow().getHandle(), GLFW.GLFW_MOUSE_BUTTON_LEFT, GLFW.GLFW_PRESS, 0); + ((MouseAccessor) client.mouse).midnightcontrols$onMouseButton(client.getWindow().getHandle(), new MouseInput(GLFW.GLFW_MOUSE_BUTTON_LEFT, GLFW.GLFW_PRESS), 0); prevIndex = -1; } else prevIndex = index; diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/YACLCompat.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/YACLCompat.java index 0c75178..5300bdc 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/YACLCompat.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/YACLCompat.java @@ -5,6 +5,7 @@ import dev.isxander.yacl.gui.OptionListWidget; import dev.isxander.yacl.gui.YACLScreen; import dev.isxander.yacl.gui.controllers.ControllerWidget; import dev.isxander.yacl.gui.controllers.slider.SliderControllerElement; +import eu.midnightdust.midnightcontrols.client.MidnightInput; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; import org.lwjgl.glfw.GLFW; @@ -13,7 +14,7 @@ public class YACLCompat implements CompatHandler { public static boolean handleAButton(Screen screen, Element element) { if (element instanceof AbstractWidget abstractWidget) { // imitate enter key press - return abstractWidget.keyPressed(GLFW.GLFW_KEY_ENTER, 0, 0); + return abstractWidget.keyPressed(MidnightInput.ENTER_KEY_INPUT); } return false; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/ButtonBinding.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/ButtonBinding.java index 69207ce..38b0e5f 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/ButtonBinding.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/controller/ButtonBinding.java @@ -77,7 +77,7 @@ public class ButtonBinding { public static final ButtonBinding SCREENSHOT = new Builder("screenshot").buttons(GLFW_GAMEPAD_BUTTON_DPAD_UP, GLFW_GAMEPAD_BUTTON_A) .action(InputHandlers::handleScreenshot).cooldown().register(); public static final ButtonBinding DEBUG_SCREEN = new Builder("debug_screen").buttons(GLFW_GAMEPAD_BUTTON_DPAD_UP, GLFW_GAMEPAD_BUTTON_B) - .action((client,binding,value,action) -> {if (action == ButtonState.PRESS) client.inGameHud.getDebugHud().toggleDebugHud(); return true;}).cooldown().register(); + .action((client,binding,value,action) -> {if (action == ButtonState.PRESS) client.inGameHud.getDebugHud().toggleRenderingChart(); return true;}).cooldown().register(); public static final ButtonBinding SLOT_DOWN = new Builder("slot_down").buttons(GLFW_GAMEPAD_BUTTON_DPAD_DOWN) .action(InputHandlers.handleInventorySlotPad(1)).onlyInInventory().cooldown().register(); public static final ButtonBinding SLOT_LEFT = new Builder("slot_left").buttons(GLFW_GAMEPAD_BUTTON_DPAD_LEFT) 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 d5b3398..541f922 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 @@ -177,7 +177,7 @@ public class InputHandlers { if (button.getName().equals("take_all")) { return false; } - slotId = accessor.midnightcontrols$isClickOutsideBounds(x, y, accessor.getX(), accessor.getY(), GLFW_MOUSE_BUTTON_1) ? -999 : -1; + slotId = accessor.midnightcontrols$isClickOutsideBounds(x, y, accessor.getX(), accessor.getY()) ? -999 : -1; } else { slotId = slot.id; } 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 bde0dbe..51742c6 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 @@ -423,6 +423,15 @@ public class InputManager { * @see #makeKeyBinding(Identifier, InputUtil.Type, int, String) */ public static @NotNull KeyBinding makeKeyBinding(@NotNull Identifier id, InputUtil.Type type, int code, @NotNull String category) { - return new KeyBinding(String.format("key.%s.%s", id.getNamespace(), id.getPath()), type, code, category); + return new KeyBinding(String.format("key.%s.%s", id.getNamespace(), id.getPath()), type, code, new KeyBinding.Category(validVanillaId(category))); + } + + private static Identifier validVanillaId(String path) { + for(int i = 0; i < path.length(); ++i) { + if (!Identifier.isPathCharacterValid(path.charAt(i))) { + path = path.replace(path.charAt(i), '_'); + } + } + return Identifier.ofVanilla(path); } } 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 02f3fdc..b9d3b28 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 @@ -32,8 +32,10 @@ import net.minecraft.client.render.*; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.texture.Sprite; import net.minecraft.client.texture.TextureSetup; +import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; +import net.minecraft.util.Atlases; import net.minecraft.util.Identifier; import net.minecraft.util.math.ColorHelper; import org.jetbrains.annotations.NotNull; @@ -221,7 +223,8 @@ public class MidnightControlsRenderer { Identifier spritePath = MidnightControlsClient.WAYLAND_CURSOR_TEXTURE_LIGHT; if (MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.DEFAULT_DARK || MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.SECOND_DARK) spritePath = MidnightControlsClient.WAYLAND_CURSOR_TEXTURE_DARK; - Sprite sprite = client.getGuiAtlasManager().getSprite(spritePath); + + Sprite sprite = client.getAtlasManager().getAtlasTexture(Atlases.GUI).getSprite(spritePath); drawUnalignedTexturedQuad(RenderPipelines.GUI_TEXTURED, sprite.getAtlasId(), context, mouseX, mouseX + 8, mouseY, mouseY + 8, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV()); } catch (IllegalStateException ignored) {} } @@ -265,7 +268,7 @@ public class MidnightControlsRenderer { } try { - Sprite sprite = client.getGuiAtlasManager().getSprite(id(MidnightControlsConfig.virtualMouseSkin.getSpritePath() + (hoverSlot ? "_slot" : ""))); + Sprite sprite = client.getAtlasManager().getAtlasTexture(Atlases.GUI).getSprite(id(MidnightControlsConfig.virtualMouseSkin.getSpritePath() + (hoverSlot ? "_slot" : ""))); drawUnalignedTexturedQuad(RenderPipelines.GUI_TEXTURED, sprite.getAtlasId(), context, mouseX, mouseX + 16, mouseY, mouseY + 16, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV()); } catch (IllegalStateException ignored) {} } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/RingScreen.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/RingScreen.java index ab80c70..9e94269 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/RingScreen.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/RingScreen.java @@ -12,6 +12,7 @@ package eu.midnightdust.midnightcontrols.client.gui; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.ring.RingButtonMode; import eu.midnightdust.midnightcontrols.client.ring.RingPage; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; @@ -79,8 +80,8 @@ public class RingScreen extends Screen { // } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { - if (ring.getCurrentPage().onClick(width, height, (int) mouseX, (int) mouseY)) { + public boolean mouseReleased(Click click) { + if (ring.getCurrentPage().onClick(width, height, (int) click.x(), (int) click.y())) { this.close(); return true; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/render/UnalignedTexturedQuadGuiElementRenderState.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/render/UnalignedTexturedQuadGuiElementRenderState.java index 8c26390..7246030 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/render/UnalignedTexturedQuadGuiElementRenderState.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/render/UnalignedTexturedQuadGuiElementRenderState.java @@ -17,11 +17,11 @@ public record UnalignedTexturedQuadGuiElementRenderState(RenderPipeline pipeline } @Override - public void setupVertices(VertexConsumer vertices, float depth) { - vertices.vertex(pose(), x1(), y1(), depth).texture(u1(), v1()).color(color()); - vertices.vertex(pose(), x1(), y2(), depth).texture(u1(), v2()).color(color()); - vertices.vertex(pose(), x2(), y2(), depth).texture(u2(), v2()).color(color()); - vertices.vertex(pose(), x2(), y1(), depth).texture(u2(), v1()).color(color()); + public void setupVertices(VertexConsumer vertices) { + vertices.vertex(pose(), x1(), y1()).texture(u1(), v1()).color(color()); + vertices.vertex(pose(), x1(), y2()).texture(u1(), v2()).color(color()); + vertices.vertex(pose(), x2(), y2()).texture(u2(), v2()).color(color()); + vertices.vertex(pose(), x2(), y1()).texture(u2(), v1()).color(color()); } @Nullable diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/widget/ControlsListWidget.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/widget/ControlsListWidget.java index 2c70e1a..c2586e6 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/widget/ControlsListWidget.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/widget/ControlsListWidget.java @@ -15,6 +15,9 @@ import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; import eu.midnightdust.midnightcontrols.client.controller.ButtonCategory; import eu.midnightdust.midnightcontrols.client.controller.InputManager; import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.KeyInput; +import net.minecraft.client.input.MouseInput; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; import org.thinkingstudio.obsidianui.Position; @@ -175,7 +178,7 @@ public class ControlsListWidget extends SpruceEntryListWidget element.mouseReleased(mouseX, mouseY, button)).isPresent(); + return this.hoveredElement(mouseX, mouseY).filter(element -> element.mouseReleased(new Click(mouseX, mouseY, new MouseInput(button, 0)))).isPresent(); } @Override protected boolean onMouseDrag(double mouseX, double mouseY, int button, double deltaX, double deltaY) { return this.getFocused() != null && this.dragging && button == GLFW.GLFW_MOUSE_BUTTON_1 - && this.getFocused().mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + && this.getFocused().mouseDragged(new Click(mouseX, mouseY, new MouseInput(button, 0)), deltaX, deltaY); } @Override protected boolean onKeyPress(int keyCode, int scanCode, int modifiers) { - return this.focused != null && this.focused.keyPressed(keyCode, scanCode, modifiers); + return this.focused != null && this.focused.keyPressed(new KeyInput(keyCode, scanCode, modifiers)); } /* Navigation */ 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 af6bdb6..ff8faee 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 @@ -44,7 +44,7 @@ public abstract class GameRendererMixin { //drawContext.draw(); } @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/GameRenderer;renderHand(FZLorg/joml/Matrix4f;)V"), method = "renderWorld") - private void midnigtcontrols$captureMatrices(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 1) Matrix4f projectionMatrix, @Local(ordinal = 2) Matrix4f worldSpaceMatrix) { + private void midnigtcontrols$captureMatrices(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 1) Matrix4f projectionMatrix, @Local(ordinal = 1) Matrix4f worldSpaceMatrix) { TouchUtils.lastProjMat.set(projectionMatrix); TouchUtils.lastModMat.set(RenderSystem.getModelViewMatrix()); TouchUtils.lastWorldSpaceMatrix.set(worldSpaceMatrix); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/HandledScreenMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/HandledScreenMixin.java index 17ac65b..7edb06e 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/HandledScreenMixin.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/HandledScreenMixin.java @@ -46,7 +46,7 @@ public abstract class HandledScreenMixin implements HandledScreenAccessor { public abstract Slot midnightcontrols$getSlotAt(double posX, double posY); @Invoker("isClickOutsideBounds") - public abstract boolean midnightcontrols$isClickOutsideBounds(double mouseX, double mouseY, int x, int y, int button); + public abstract boolean midnightcontrols$isClickOutsideBounds(double mouseX, double mouseY, int left, int top); @Invoker("onMouseClick") diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/KeyboardAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/KeyboardAccessor.java new file mode 100644 index 0000000..110fd58 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/KeyboardAccessor.java @@ -0,0 +1,12 @@ +package eu.midnightdust.midnightcontrols.client.mixin; + +import net.minecraft.client.Keyboard; +import net.minecraft.client.input.KeyInput; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(Keyboard.class) +public interface KeyboardAccessor { + @Invoker("onKey") + void midnightcontrols$onKey(long window, int action, KeyInput 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 d277f58..0b941c5 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 @@ -77,7 +77,7 @@ public abstract class MinecraftClientMixin { if (!MidnightControlsFeature.FAST_BLOCK_PLACING.isAvailable()) return; if (this.midnightcontrols$lastPos == null) - this.midnightcontrols$lastPos = this.player.getPos(); + this.midnightcontrols$lastPos = this.player.getEntityPos(); int cooldown = this.itemUseCooldown; BlockHitResult hitResult; @@ -106,7 +106,7 @@ public abstract class MinecraftClientMixin { // this.itemUseCooldown = 0; // } // } - this.midnightcontrols$lastPos = this.player.getPos(); + this.midnightcontrols$lastPos = this.player.getEntityPos(); } @Inject(at = @At("TAIL"), method = "setScreen") diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseAccessor.java index e0df7a8..e3a641f 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseAccessor.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/MouseAccessor.java @@ -1,6 +1,7 @@ package eu.midnightdust.midnightcontrols.client.mixin; import net.minecraft.client.Mouse; +import net.minecraft.client.input.MouseInput; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @@ -9,5 +10,5 @@ public interface MouseAccessor { @Invoker("onCursorPos") void midnightcontrols$onCursorPos(long window, double x, double y); @Invoker("onMouseButton") - void midnightcontrols$onMouseButton(long window, int button, int action, int mods); + void midnightcontrols$onMouseButton(long window, MouseInput input, int action); } 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 c251141..c9d23c4 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 @@ -17,6 +17,8 @@ import eu.midnightdust.midnightcontrols.client.touch.TouchInput; import eu.midnightdust.midnightcontrols.client.touch.TouchUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.MouseInput; import net.minecraft.client.util.GlfwUtil; import net.minecraft.item.ItemStack; import net.minecraft.item.ThrowablePotionItem; @@ -64,12 +66,12 @@ public abstract class MouseMixin implements MouseAccessor { @Shadow private boolean leftButtonClicked; @Inject(method = "onMouseButton", at = @At(value = "HEAD"), cancellable = true) - private void midnightcontrols$onMouseButton(long window, int button, int action, int mods, CallbackInfo ci) { + private void midnightcontrols$onMouseButton(long window, MouseInput input, int action, CallbackInfo ci) { if (window != this.client.getWindow().getHandle()) return; - if (action == 1 && button == GLFW.GLFW_MOUSE_BUTTON_4 && client.currentScreen != null) { + if (action == 1 && input.button() == GLFW.GLFW_MOUSE_BUTTON_4 && client.currentScreen != null) { MidnightControlsClient.input.tryGoBack(client.currentScreen); } - else if ((client.currentScreen == null && doMixedInput() || client.currentScreen instanceof TouchscreenOverlay) && client.player != null && button == GLFW_MOUSE_BUTTON_1) { + else if ((client.currentScreen == null && doMixedInput() || client.currentScreen instanceof TouchscreenOverlay) && client.player != null && input.button() == GLFW_MOUSE_BUTTON_1) { double mouseX = x / client.getWindow().getScaleFactor(); double mouseY = y / client.getWindow().getScaleFactor(); int centerX = client.getWindow().getScaledWidth() / 2; @@ -87,11 +89,11 @@ public abstract class MouseMixin implements MouseAccessor { if (action == 1) { TouchInput.clickStartTime = System.currentTimeMillis(); boolean bl = false; - if (client.currentScreen instanceof TouchscreenOverlay overlay) bl = overlay.mouseClicked(mouseX, mouseY, button); + if (client.currentScreen instanceof TouchscreenOverlay overlay) bl = overlay.mouseClicked(new Click(mouseX, mouseY, input), false); if (!bl) TouchInput.firstHitResult = TouchUtils.getTargetedObject(mouseX, mouseY); if (client.currentScreen == null) ci.cancel(); } - else if (TouchInput.mouseReleased(mouseX, mouseY, button)) ci.cancel(); + else if (TouchInput.mouseReleased(mouseX, mouseY, input.button())) ci.cancel(); } } @@ -140,7 +142,7 @@ public abstract class MouseMixin implements MouseAccessor { stack.getUseAction() == UseAction.SPEAR || stack.getItem() instanceof ThrowablePotionItem)); } - @Inject(method = "lockCursor", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/InputUtil;setCursorParameters(JIDD)V",shift = At.Shift.BEFORE), cancellable = true) + @Inject(method = "lockCursor", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/InputUtil;setCursorParameters(Lnet/minecraft/client/util/Window;IDD)V",shift = At.Shift.BEFORE), cancellable = true) private void midnightcontrols$lockCursor(CallbackInfo ci) { if ((doMixedInput() || MidnightControlsConfig.eyeTrackerAsMouse)) { //In eye tracking mode, we cannot have the cursor locked to the center. diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java index 6e9d56e..e173aba 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/WorldRendererMixin.java @@ -18,6 +18,7 @@ import eu.midnightdust.midnightcontrols.client.util.RainbowColor; import net.minecraft.block.ShapeContext; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.*; +import net.minecraft.client.render.state.WorldRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; import net.minecraft.item.BlockItem; @@ -58,24 +59,23 @@ public abstract class WorldRendererMixin { @Final private BufferBuilderStorage bufferBuilders; - @Redirect(method = "renderTargetBlockOutline", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/hit/BlockHitResult;getType()Lnet/minecraft/util/hit/HitResult$Type;")) - private HitResult.Type dontRenderOutline(BlockHitResult instance) { + @Inject(method = "renderTargetBlockOutline", at = @At("HEAD"), cancellable = true) + private void dontRenderOutline(VertexConsumerProvider.Immediate immediate, MatrixStack matrices, boolean renderBlockOutline, WorldRenderState renderStates, CallbackInfo ci) { if (MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN && MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) { - return HitResult.Type.MISS; + ci.cancel(); } - return instance.getType(); } @Inject( method = "renderTargetBlockOutline", at = @At("HEAD") ) - private void onOutlineRender(Camera camera, VertexConsumerProvider.Immediate vertexConsumers, MatrixStack matrices, boolean translucent, CallbackInfo ci) { + private void onOutlineRender(VertexConsumerProvider.Immediate immediate, MatrixStack matrices, boolean renderBlockOutline, WorldRenderState renderStates, CallbackInfo ci) { if (((MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && MidnightControlsConfig.touchInControllerMode) || MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN) && MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) { - this.midnightcontrols$renderFingerOutline(matrices, camera); + this.midnightcontrols$renderFingerOutline(matrices, client.gameRenderer.getCamera()); } - this.midnightcontrols$renderReacharoundOutline(matrices, camera); + this.midnightcontrols$renderReacharoundOutline(matrices, client.gameRenderer.getCamera()); } @Unique private void midnightcontrols$renderFingerOutline(MatrixStack matrices, Camera camera) { diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java index 2c9597a..cee81d0 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mouse/EyeTrackerHandler.java @@ -60,7 +60,7 @@ public class EyeTrackerHandler { // The player entity's needs their facing rotated. double invertY = 1.0; double moveMagnitude = Math.sqrt(normalizedX*normalizedX + normalizedY*normalizedY); - if (client.options.getInvertYMouse().getValue()) { + if (client.options.getInvertMouseY().getValue()) { invertY = -1.0; } boolean notInDeadzone = (moveMagnitude > MidnightControlsConfig.eyeTrackerDeadzone) && !usingLongRangedTool; 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 c2edfd7..c6f8d20 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 @@ -4,6 +4,9 @@ import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; import eu.midnightdust.midnightcontrols.client.touch.gui.TouchscreenOverlay; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.MouseInput; +import net.minecraft.client.particle.BlockDustParticle; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; @@ -46,7 +49,7 @@ public class TouchInput { if (result instanceof BlockHitResult blockHit && firstHitResult instanceof BlockHitResult firstBlock && blockHit.getBlockPos().equals(firstBlock.getBlockPos())) { if (MidnightControlsConfig.debug) System.out.println(blockHit.getBlockPos().toString()); if (client.interactionManager.updateBlockBreakingProgress(blockHit.getBlockPos(), blockHit.getSide())) { - client.particleManager.addBlockBreakingParticles(blockHit.getBlockPos(), blockHit.getSide()); + //client.particleManager.addBlockBreakingParticles(blockHit.getBlockPos(), blockHit.getSide()); // TODO Re-implement block breaking particles!!! client.player.swingHand(Hand.MAIN_HAND); } else client.interactionManager.cancelBlockBreaking(); firstHitResult = TouchUtils.getTargetedObject(mouseX, mouseY); @@ -62,7 +65,7 @@ public class TouchInput { isDragging = false; firstHitResult = null; if (client.interactionManager != null) client.interactionManager.cancelBlockBreaking(); - if ((client.currentScreen == null || !client.currentScreen.mouseReleased(mouseX, mouseY, button)) && System.currentTimeMillis() - clickStartTime < MidnightControlsConfig.touchBreakDelay) { + if ((client.currentScreen == null || !client.currentScreen.mouseReleased(new Click(mouseX, mouseY, new MouseInput(button, 0)))) && System.currentTimeMillis() - clickStartTime < MidnightControlsConfig.touchBreakDelay) { assert client.player != null; assert client.world != null; assert client.interactionManager != null; 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 49b1e3f..e6a84ef 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 @@ -34,13 +34,13 @@ public class TouchUtils { Vec3d far = screenSpaceToWorldSpace(mouseX, mouseY, 1); float playerRange = getPlayerRange(client); - EntityHitResult entityCast = ProjectileUtil.raycast(client.player, near, far, Box.from(client.player.getPos()).expand(playerRange), entity -> (!entity.isSpectator() && entity.isAttackable()), playerRange * playerRange); + EntityHitResult entityCast = ProjectileUtil.raycast(client.player, near, far, Box.from(client.player.getEntityPos()).expand(playerRange), entity -> (!entity.isSpectator() && entity.isAttackable()), playerRange * playerRange); if (entityCast != null && entityCast.getType() == HitResult.Type.ENTITY) return entityCast; 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; + if (client.player.getEntityPos().distanceTo(result.getPos()) > playerRange) return null; return result; } 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 2547c21..96e467c 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 @@ -11,12 +11,15 @@ package eu.midnightdust.midnightcontrols.client.touch.gui; import eu.midnightdust.midnightcontrols.client.touch.TouchInput; import eu.midnightdust.midnightcontrols.client.util.storage.AxisStorage; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.GameMenuScreen; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.component.DataComponentTypes; import net.minecraft.item.consume.UseAction; import net.minecraft.util.Arm; +import net.minecraft.util.Atlases; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import org.thinkingstudio.obsidianui.Position; @@ -170,7 +173,7 @@ public class TouchscreenOverlay extends Screen { this.addDrawableChild(emoteButton); } - TextIconButtonWidget chatButton = TextIconButtonWidget.builder(Text.empty(), btn -> this.client.setScreen(new ChatScreen("")), true).width(20).texture(id("touch/chat"), 20, 20).build(); + TextIconButtonWidget chatButton = TextIconButtonWidget.builder(Text.empty(), btn -> this.client.setScreen(new ChatScreen("", true)), true).width(20).texture(id("touch/chat"), 20, 20).build(); chatButton.setPosition(scaledWidth / 2 - 20 + emoteOffset, 0); this.addDrawableChild(chatButton); TextIconButtonWidget pauseButton = TextIconButtonWidget.builder(Text.empty(), btn -> this.pauseGame(), true).width(20).texture(id("touch/pause"), 20, 20).build(); @@ -289,12 +292,12 @@ public class TouchscreenOverlay extends Screen { assert client != null; Identifier emptySprite = id("touch/empty"); List list = left ? MidnightControlsConfig.leftTouchBinds : MidnightControlsConfig.rightTouchBinds; - Sprite missingSprite = client.getGuiAtlasManager().getSprite(MissingSprite.getMissingSpriteId()); + Sprite missingSprite = client.getAtlasManager().getAtlasTexture(Atlases.GUI).getMissingSprite(); for (int i = 0; i < list.size(); i++) { String bindName = list.get(i); ButtonBinding binding = InputManager.getBinding(bindName); if (binding == null) continue; - boolean hasTexture = client.getGuiAtlasManager().getSprite(id("binding/"+bindName)) != missingSprite; + boolean hasTexture = client.getAtlasManager().getAtlasTexture(Atlases.GUI).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.0f, ButtonState.PRESS); @@ -349,8 +352,8 @@ public class TouchscreenOverlay extends Screen { } @Override - public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - if (button == GLFW.GLFW_MOUSE_BUTTON_1 && this.client != null) { + public boolean mouseDragged(Click click, double deltaX, double deltaY) { + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_1 && this.client != null) { if (TouchInput.isDragging) { if (!MidnightControlsConfig.invertTouch) { deltaX = -deltaX; @@ -361,6 +364,6 @@ public class TouchscreenOverlay extends Screen { } else TouchInput.isDragging = true; } - return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + return super.mouseDragged(click, deltaX, deltaY); } } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/HandledScreenAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/HandledScreenAccessor.java index 8f8d221..bbd74bb 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/HandledScreenAccessor.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/HandledScreenAccessor.java @@ -40,7 +40,7 @@ public interface HandledScreenAccessor { */ Slot midnightcontrols$getSlotAt(double posX, double posY); - boolean midnightcontrols$isClickOutsideBounds(double mouseX, double mouseY, int x, int y, int button); + boolean midnightcontrols$isClickOutsideBounds(double mouseX, double mouseY, int left, int top); /** * Handles a mouse click on the specified slot. diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java index ca48f1c..fabcf4d 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java @@ -1,6 +1,7 @@ package eu.midnightdust.midnightcontrols.client.util.platform; import dev.architectury.injectables.annotations.ExpectPlatform; +import eu.midnightdust.midnightcontrols.client.MidnightInput; import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAccessor; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; @@ -11,6 +12,8 @@ import org.jetbrains.annotations.NotNull; import java.util.List; +import static eu.midnightdust.midnightcontrols.client.MidnightInput.ENTER_KEY_INPUT; + public class ItemGroupUtil { @ExpectPlatform public static List getVisibleGroups(CreativeInventoryScreen screen) { @@ -24,10 +27,10 @@ public class ItemGroupUtil { .filter(element -> element.getMessage() != null && element.getMessage().getContent() != null) .anyMatch(element -> { if (next && element.getMessage().getString().equals(">")) { - element.onPress(); + element.onPress(ENTER_KEY_INPUT); return true; } else if (element.getMessage().getString().equals("<")) { - element.onPress(); + element.onPress(ENTER_KEY_INPUT); return true; } return false; diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/MouseClickInterceptor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/MouseClickInterceptor.java index 799f33e..5cfe8a7 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/MouseClickInterceptor.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/MouseClickInterceptor.java @@ -4,6 +4,7 @@ import eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler.Abst import eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler.BookEditScreenClickHandler; import eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler.DefaultScreenClickHandler; import eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler.SignEditScreenClickHandler; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.BookEditScreen; import net.minecraft.client.gui.screen.ingame.BookSigningScreen; @@ -26,13 +27,13 @@ public class MouseClickInterceptor { } @SuppressWarnings("unchecked") - public void intercept(T screen, double mouseX, double mouseY) { + public void intercept(T screen, Click click) { AbstractScreenClickHandler handler = (AbstractScreenClickHandler) clickHandlers.get(screen.getClass()); if (handler == null) { handler = (AbstractScreenClickHandler) clickHandlers.get(Screen.class); } - handler.handle(screen, mouseX, mouseY); + handler.handle(screen, click.x(), click.y()); } } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/DefaultScreenClickHandler.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/DefaultScreenClickHandler.java index 78842e2..1b89a3b 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/DefaultScreenClickHandler.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/DefaultScreenClickHandler.java @@ -14,6 +14,7 @@ import java.util.Collections; import java.util.List; import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client; +import static eu.midnightdust.midnightcontrols.client.MidnightInput.ENTER_KEY_INPUT; public class DefaultScreenClickHandler extends AbstractScreenClickHandler { @@ -54,7 +55,7 @@ public class DefaultScreenClickHandler extends AbstractScreenClickHandler { // send the chat message - chatScreen.keyPressed(GLFW.GLFW_KEY_ENTER, 0, 0); + chatScreen.keyPressed(ENTER_KEY_INPUT); } default -> { } diff --git a/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/event/MouseClickListener.java b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/event/MouseClickListener.java index d1e22e8..3e872ca 100644 --- a/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/event/MouseClickListener.java +++ b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/event/MouseClickListener.java @@ -1,6 +1,7 @@ package eu.midnightdust.midnightcontrols.fabric.event; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.Screen; import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.clickInterceptor; @@ -13,9 +14,9 @@ public class MouseClickListener implements ScreenMouseEvents.AllowMouseClick { } @Override - public boolean allowMouseClick(Screen screen, double mouseX, double mouseY, int button) { + public boolean allowMouseClick(Screen screen, Click click) { if(MidnightControlsConfig.virtualKeyboard) { - clickInterceptor.intercept(screen, mouseX, mouseY); + clickInterceptor.intercept(screen, click); } return true; } @@ -33,8 +34,4 @@ public class MouseClickListener implements ScreenMouseEvents.AllowMouseClick { public int hashCode() { return screen.hashCode(); } - - - - } diff --git a/gradle.properties b/gradle.properties index 55116ab..be100ee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,9 +2,9 @@ org.gradle.parallel=true org.gradle.jvmargs=-Xmx2048M -minecraft_version=1.21.6 -supported_versions=1.21.8 -yarn_mappings=1.21.6+build.1 +minecraft_version=1.21.9-rc1 +supported_versions= +yarn_mappings=1.21.9-rc1+build.2 enabled_platforms=fabric,neoforge archives_base_name=midnightcontrols @@ -15,10 +15,10 @@ modrinth_id = bXX9h73M curseforge_id = 621768 # Configure the IDs here after creating the projects on the websites -midnightlib_version=1.7.5+1.21.6 +midnightlib_version=1.8.0+1.21.9-rc1 -fabric_loader_version=0.16.14 -fabric_api_version=0.127.0+1.21.6 +fabric_loader_version=0.17.2 +fabric_api_version=0.133.13+1.21.9 neoforge_version=21.6.0-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 diff --git a/settings.gradle b/settings.gradle index d4da0ae..73f5b22 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,6 +10,6 @@ pluginManagement { include("common") include("fabric") //include("quilt") // Native quilt support is disabled atm, as the Quilt libraries are currently in maintenance mode -include("neoforge") +//include("neoforge") rootProject.name = "midnightcontrols"