mirror of
https://github.com/TeamMidnightDust/MidnightControls.git
synced 2025-12-14 07:35:10 +01:00
feat: edit signs using the virtual keyboard!
This commit is contained in:
@@ -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);
|
|
||||||
}
|
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
package eu.midnightdust.midnightcontrols.client.virtualkeyboard.clickhandler;
|
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 net.minecraft.client.gui.screen.ingame.SignEditScreen;
|
||||||
|
|
||||||
|
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client;
|
||||||
|
|
||||||
public class SignEditScreenClickHandler extends AbstractScreenClickHandler<SignEditScreen> {
|
public class SignEditScreenClickHandler extends AbstractScreenClickHandler<SignEditScreen> {
|
||||||
@Override
|
@Override
|
||||||
public void handle(SignEditScreen screen, double mouseX, double mouseY) {
|
public void handle(SignEditScreen screen, double mouseX, double mouseY) {
|
||||||
@@ -12,5 +15,22 @@ public class SignEditScreenClickHandler extends AbstractScreenClickHandler<SignE
|
|||||||
}
|
}
|
||||||
|
|
||||||
var accessor = (AbstractSignEditScreenAccessor) screen;
|
var accessor = (AbstractSignEditScreenAccessor) screen;
|
||||||
|
|
||||||
|
StringBuilder linesToString = new StringBuilder();
|
||||||
|
String[] messages = accessor.midnightcontrols$getMessages();
|
||||||
|
for (int i = 0; i < Math.min(4, messages.length); i++) {
|
||||||
|
String line = messages[i];
|
||||||
|
linesToString.append(line);
|
||||||
|
if (!line.isEmpty() && i < 3) linesToString.append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualKeyboardScreen virtualKeyboardScreen = new VirtualKeyboardScreen(linesToString.toString(), (text) -> {
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
"package": "eu.midnightdust.midnightcontrols.client.mixin",
|
"package": "eu.midnightdust.midnightcontrols.client.mixin",
|
||||||
"compatibilityLevel": "JAVA_21",
|
"compatibilityLevel": "JAVA_21",
|
||||||
"client": [
|
"client": [
|
||||||
|
"AbstractBlockAccessor",
|
||||||
|
"AbstractSignEditScreenMixin",
|
||||||
"AdvancementsScreenAccessor",
|
"AdvancementsScreenAccessor",
|
||||||
"BookEditScreenAccessor",
|
"BookEditScreenAccessor",
|
||||||
"ChatScreenMixin",
|
"ChatScreenMixin",
|
||||||
@@ -24,10 +26,8 @@
|
|||||||
"RecipeBookScreenAccessor",
|
"RecipeBookScreenAccessor",
|
||||||
"RecipeBookWidgetAccessor",
|
"RecipeBookWidgetAccessor",
|
||||||
"ScreenMixin",
|
"ScreenMixin",
|
||||||
"AbstractSignEditScreenAccessor",
|
|
||||||
"TabNavigationWidgetAccessor",
|
"TabNavigationWidgetAccessor",
|
||||||
"WorldRendererMixin",
|
"WorldRendererMixin"
|
||||||
"AbstractBlockAccessor"
|
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|||||||
Reference in New Issue
Block a user