Files
PictureSign/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java
Motschen 24b9d4f5b7 PictureSign 2.0.0-beta.2 - 1.20.2
- Ported to 1.20.2
- Updated MidnightLib & VideoLib
- No more crashes when VLC is not installed
- Video now gets properly cleared on disconnect
- Fixed the helper screen not saving changes permanently
2023-11-10 19:16:07 +01:00

81 lines
3.7 KiB
Java

package eu.midnightdust.picturesign.mixin;
import eu.midnightdust.picturesign.PictureSignClient;
import eu.midnightdust.picturesign.config.PictureSignConfig;
import eu.midnightdust.picturesign.screen.PictureSignHelperScreen;
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen;
import net.minecraft.client.gui.widget.TextIconButtonWidget;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Objects;
import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID;
@Mixin(AbstractSignEditScreen.class)
public abstract class MixinSignEditScreen extends Screen {
private static final Identifier PICTURESIGN_ICON_TEXTURE = new Identifier(MOD_ID,"icon/picturesign");
private static final Identifier CLIPBOARD_ICON_TEXTURE = new Identifier(MOD_ID,"icon/clipboard");
private static final Identifier TRASHBIN_ICON_TEXTURE = new Identifier(MOD_ID,"icon/trashbin");
@Shadow @Final private SignBlockEntity blockEntity;
@Shadow @Final private String[] messages;
@Shadow @Final private boolean front;
private static boolean switchScreen = false;
protected MixinSignEditScreen(Text title) {
super(title);
}
@Inject(at = @At("TAIL"),method = "init")
private void picturesign$init(CallbackInfo ci) {
if (PictureSignClient.clipboard != null && PictureSignClient.clipboard[0] != null) {
TextIconButtonWidget clipboardBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> {
for (int i = 0; i < 4; i++) {
messages[i] = PictureSignClient.clipboard[i];
int finalI = i;
blockEntity.changeText(changer -> changer.withMessage(finalI, Text.of(messages[finalI])), front);
}
}, true).texture(CLIPBOARD_ICON_TEXTURE, 16, 16).dimension(20, 20).build();
clipboardBuilder.setPosition(this.width - 84, this.height - 40);
this.addDrawableChild(clipboardBuilder);
}
if (PictureSignConfig.helperUi) {
TextIconButtonWidget trashbinBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> {
for (int i = 0; i < 4; i++) {
messages[i] = "";
int finalI = i;
blockEntity.changeText(changer -> changer.withMessage(finalI, Text.empty()), front);
}
}, true).texture(TRASHBIN_ICON_TEXTURE, 16, 16).dimension(20, 20).build();
trashbinBuilder.setPosition(this.width - 62, this.height - 40);
this.addDrawableChild(trashbinBuilder);
TextIconButtonWidget picturesignBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> {
switchScreen = true;
Objects.requireNonNull(client).setScreen(new PictureSignHelperScreen(this.blockEntity, front, false));
}, true).texture(PICTURESIGN_ICON_TEXTURE, 16, 16).dimension(20, 20).build();
picturesignBuilder.setPosition(this.width - 40, this.height - 40);
this.addDrawableChild(picturesignBuilder);
}
}
@Inject(at = @At("HEAD"), method = "removed", cancellable = true)
private void picturesign$removed(CallbackInfo ci) {
if (switchScreen) {
switchScreen = false;
ci.cancel();
}
}
}