From 9e4686be32aeedce80f3205aa9f8ab26dbf87f2f Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 21 Jun 2025 09:29:37 +0200 Subject: [PATCH] fix: get book working again with virtualkeyboard --- .../client/mixin/BookEditScreenAccessor.java | 12 ++---- .../mixin/BookSigningScreenAccessor.java | 12 ++++++ .../MouseClickInterceptor.java | 2 + .../BookEditScreenClickHandler.java | 42 ++++++++++++------- .../resources/midnightcontrols.mixins.json | 1 + 5 files changed, 44 insertions(+), 25 deletions(-) create mode 100644 common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookSigningScreenAccessor.java diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookEditScreenAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookEditScreenAccessor.java index 6fe94c0..0283928 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookEditScreenAccessor.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookEditScreenAccessor.java @@ -1,18 +1,12 @@ package eu.midnightdust.midnightcontrols.client.mixin; import net.minecraft.client.gui.screen.ingame.BookEditScreen; -import net.minecraft.client.util.SelectionManager; +import net.minecraft.client.gui.widget.EditBoxWidget; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; - -import java.util.List; @Mixin(BookEditScreen.class) public interface BookEditScreenAccessor { - @Accessor("pages") - List midnightcontrols$getPages(); - - @Accessor("currentPage") - int midnightcontrols$getCurrentPage(); + @Accessor("editBox") + EditBoxWidget midnightcontrols$getEditBox(); } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookSigningScreenAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookSigningScreenAccessor.java new file mode 100644 index 0000000..a652b33 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/BookSigningScreenAccessor.java @@ -0,0 +1,12 @@ +package eu.midnightdust.midnightcontrols.client.mixin; + +import net.minecraft.client.gui.screen.ingame.BookSigningScreen; +import net.minecraft.client.gui.widget.TextFieldWidget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(BookSigningScreen.class) +public interface BookSigningScreenAccessor { + @Accessor("bookTitleTextField") + TextFieldWidget midnightcontrols$getBookTitleTextField(); +} 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 85441c2..799f33e 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 @@ -6,6 +6,7 @@ import eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler.Defa import eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler.SignEditScreenClickHandler; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.BookEditScreen; +import net.minecraft.client.gui.screen.ingame.BookSigningScreen; import net.minecraft.client.gui.screen.ingame.SignEditScreen; import java.util.HashMap; @@ -18,6 +19,7 @@ public class MouseClickInterceptor { public MouseClickInterceptor() { this.clickHandlers = new HashMap<>(); + this.clickHandlers.put(BookSigningScreen.class, new BookEditScreenClickHandler.Signing()); this.clickHandlers.put(BookEditScreen.class, new BookEditScreenClickHandler()); this.clickHandlers.put(SignEditScreen.class, new SignEditScreenClickHandler()); this.clickHandlers.put(Screen.class, new DefaultScreenClickHandler()); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/BookEditScreenClickHandler.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/BookEditScreenClickHandler.java index bbbb192..4055924 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/BookEditScreenClickHandler.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/BookEditScreenClickHandler.java @@ -1,8 +1,11 @@ package eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler; import eu.midnightdust.midnightcontrols.client.mixin.BookEditScreenAccessor; +import eu.midnightdust.midnightcontrols.client.mixin.BookSigningScreenAccessor; import eu.midnightdust.midnightcontrols.client.virtualkeyboard.gui.VirtualKeyboardScreen; import net.minecraft.client.gui.screen.ingame.BookEditScreen; +import net.minecraft.client.gui.screen.ingame.BookSigningScreen; +import net.minecraft.client.gui.widget.EditBoxWidget; import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client; @@ -10,28 +13,35 @@ public class BookEditScreenClickHandler extends AbstractScreenClickHandler { -// client.setScreen(screen); -// accessor.midnightcontrols$setTitle(text); -// }, true); -// } -// else { - virtualKeyboardScreen = new VirtualKeyboardScreen(accessor.midnightcontrols$getPages().get(accessor.midnightcontrols$getCurrentPage()), (text) -> { - client.setScreen(screen); - accessor.midnightcontrols$getPages().add(accessor.midnightcontrols$getCurrentPage(), text); - accessor.midnightcontrols$getPages().remove(accessor.midnightcontrols$getCurrentPage()+1); - //accessor.midnightcontrols$getCurrentPageSelectionManager().putCursorAtEnd(); - }, true); - //} + VirtualKeyboardScreen virtualKeyboardScreen = new VirtualKeyboardScreen(accessor.midnightcontrols$getEditBox().getText(), (text) -> { + client.setScreen(screen); + accessor.midnightcontrols$getEditBox().setText(text); + }, true); client.setScreen(virtualKeyboardScreen); } + public static class Signing extends AbstractScreenClickHandler { + @Override + public void handle(BookSigningScreen screen, double mouseX, double mouseY) { + // don't open the keyboard if a UI element was clicked + if(screen.hoveredElement(mouseX, mouseY).isPresent()) { + return; + } + + var accessor = (BookSigningScreenAccessor) screen; + + VirtualKeyboardScreen virtualKeyboardScreen = new VirtualKeyboardScreen(accessor.midnightcontrols$getBookTitleTextField().getText(), (text) -> { + client.setScreen(screen); + accessor.midnightcontrols$getBookTitleTextField().setText(text); + }, false); + + client.setScreen(virtualKeyboardScreen); + } + } } diff --git a/common/src/main/resources/midnightcontrols.mixins.json b/common/src/main/resources/midnightcontrols.mixins.json index 5e0673e..cdd9a8b 100644 --- a/common/src/main/resources/midnightcontrols.mixins.json +++ b/common/src/main/resources/midnightcontrols.mixins.json @@ -7,6 +7,7 @@ "AbstractSignEditScreenMixin", "AdvancementsScreenAccessor", "BookEditScreenAccessor", + "BookSigningScreenAccessor", "ChatScreenMixin", "ClickableWidgetAccessor", "ClientPlayerEntityMixin",