diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractSignEditScreenAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractSignEditScreenAccessor.java deleted file mode 100644 index fa5036c..0000000 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractSignEditScreenAccessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package eu.midnightdust.midnightcontrols.client.mixin; - -import net.minecraft.block.entity.SignText; -import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(AbstractSignEditScreen.class) -public interface AbstractSignEditScreenAccessor { - @Accessor("text") - SignText midnightcontrols$getText(); - - @Accessor("text") - void midnightcontrols$setText(SignText text); -} diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractSignEditScreenMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractSignEditScreenMixin.java new file mode 100644 index 0000000..90084ed --- /dev/null +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/AbstractSignEditScreenMixin.java @@ -0,0 +1,34 @@ +package eu.midnightdust.midnightcontrols.client.mixin; + +import eu.midnightdust.midnightcontrols.client.util.AbstractSignEditScreenAccessor; +import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.block.entity.SignText; +import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(AbstractSignEditScreen.class) +public class AbstractSignEditScreenMixin implements AbstractSignEditScreenAccessor { + @Shadow @Final private String[] messages; + @Shadow private SignText text; + @Shadow @Final protected SignBlockEntity blockEntity; + @Shadow @Final private boolean front; + + @Override + public String[] midnightcontrols$getMessages() { + return messages; + } + + @Override + public void midnightcontrols$setMessage(int line, String text) { + this.messages[line] = text; + this.text = this.text.withMessage(line, Text.literal(text)); + } + + @Override + public void midnightcontrols$writeToBlockEntity() { + this.blockEntity.setText(this.text, this.front); + } +} diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/AbstractSignEditScreenAccessor.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/AbstractSignEditScreenAccessor.java new file mode 100644 index 0000000..3828077 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/AbstractSignEditScreenAccessor.java @@ -0,0 +1,14 @@ +package eu.midnightdust.midnightcontrols.client.util; + +import org.spongepowered.asm.mixin.Unique; + +public interface AbstractSignEditScreenAccessor { + @Unique + String[] midnightcontrols$getMessages(); + + @Unique + void midnightcontrols$setMessage(int line, String text); + + @Unique + void midnightcontrols$writeToBlockEntity(); +} diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/SignEditScreenClickHandler.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/SignEditScreenClickHandler.java index ced8546..f052193 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/SignEditScreenClickHandler.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/virtualkeyboard/clickhandler/SignEditScreenClickHandler.java @@ -1,8 +1,11 @@ package eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler; -import eu.midnightdust.midnightcontrols.client.mixin.AbstractSignEditScreenAccessor; +import eu.midnightdust.midnightcontrols.client.util.AbstractSignEditScreenAccessor; +import eu.midnightdust.midnightcontrols.client.virtualkeyboard.gui.VirtualKeyboardScreen; import net.minecraft.client.gui.screen.ingame.SignEditScreen; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client; + public class SignEditScreenClickHandler extends AbstractScreenClickHandler { @Override public void handle(SignEditScreen screen, double mouseX, double mouseY) { @@ -12,5 +15,22 @@ public class SignEditScreenClickHandler extends AbstractScreenClickHandler { + client.setScreen(screen); + String[] lines = text.split("\n"); + for (int i = 0; i < 4; i++) accessor.midnightcontrols$setMessage(i, lines.length > i ? lines[i] : ""); + accessor.midnightcontrols$writeToBlockEntity(); + }, true); + + client.setScreen(virtualKeyboardScreen); } } diff --git a/common/src/main/resources/midnightcontrols.mixins.json b/common/src/main/resources/midnightcontrols.mixins.json index c745ebd..5e0673e 100644 --- a/common/src/main/resources/midnightcontrols.mixins.json +++ b/common/src/main/resources/midnightcontrols.mixins.json @@ -3,6 +3,8 @@ "package": "eu.midnightdust.midnightcontrols.client.mixin", "compatibilityLevel": "JAVA_21", "client": [ + "AbstractBlockAccessor", + "AbstractSignEditScreenMixin", "AdvancementsScreenAccessor", "BookEditScreenAccessor", "ChatScreenMixin", @@ -24,10 +26,8 @@ "RecipeBookScreenAccessor", "RecipeBookWidgetAccessor", "ScreenMixin", - "AbstractSignEditScreenAccessor", "TabNavigationWidgetAccessor", - "WorldRendererMixin", - "AbstractBlockAccessor" + "WorldRendererMixin" ], "injectors": { "defaultRequire": 1