diff --git a/gradle.properties b/gradle.properties index 5e6e038..f57b4e6 100755 --- a/gradle.properties +++ b/gradle.properties @@ -3,20 +3,20 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.20.1 - yarn_mappings=1.20.1+build.2 - loader_version=0.14.21 + minecraft_version=1.20.2 + yarn_mappings=1.20.2+build.4 + loader_version=0.14.24 # Mod Properties - mod_version = 2.0.0-beta.1 + mod_version = 2.0.0-beta.2 maven_group = eu.midnightdust archives_base_name = picturesign # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.83.1+1.20.1 - midnightlib_version=1.4.1-fabric - videolib_version=0.2.1-mnd + fabric_version=0.90.7+1.20.2 + midnightlib_version=1.5.0-fabric + videolib_version=0.2.2-mnd vlcj_version=4.8.2 iris_version=1.6.4+1.20 diff --git a/localMaven/videolib-0.2.1-mnd.jar b/localMaven/videolib-0.2.2-mnd.jar similarity index 84% rename from localMaven/videolib-0.2.1-mnd.jar rename to localMaven/videolib-0.2.2-mnd.jar index f5894bf..ba9f807 100644 Binary files a/localMaven/videolib-0.2.1-mnd.jar and b/localMaven/videolib-0.2.2-mnd.jar differ diff --git a/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java b/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java index 28a4ce2..8a69351 100755 --- a/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java +++ b/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java @@ -7,7 +7,7 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientBlockEntityEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.fabricmc.fabric.api.client.networking.v1.ClientLoginConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.minecraft.block.entity.SignBlockEntity; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; @@ -21,6 +21,7 @@ import org.lwjgl.glfw.GLFW; public class PictureSignClient implements ClientModInitializer { public static Logger LOGGER = LogManager.getLogger("PictureSign"); public static String MOD_ID = "picturesign"; + public static final boolean hasVideoLib = PlatformFunctions.isModLoaded("videolib"); public static String[] clipboard = new String[4]; public static final KeyBinding BINDING_COPY_SIGN = new KeyBinding("key."+MOD_ID+".copy_sign", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_U, "key.categories."+MOD_ID); @@ -29,14 +30,11 @@ public class PictureSignClient implements ClientModInitializer { PictureSignConfig.init(MOD_ID, PictureSignConfig.class); KeyBindingHelper.registerKeyBinding(BINDING_COPY_SIGN); - ClientLoginConnectionEvents.DISCONNECT.register((handler, client) -> { - if (PlatformFunctions.isModLoaded("videolib")) { - VideoHandler.videoPlayers.forEach(VideoHandler::closePlayer); - VideoHandler.playedOnce.clear(); - } + ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> { + if (hasVideoLib) VideoHandler.closeAll(); }); ClientBlockEntityEvents.BLOCK_ENTITY_UNLOAD.register((blockEntity, world) -> { - if (PlatformFunctions.isModLoaded("videolib")) { + if (hasVideoLib) { BlockPos pos = blockEntity.getPos(); Identifier videoId = new Identifier(MOD_ID, pos.getX() + "_" + pos.getY() + "_" + pos.getZ()+"_f"); VideoHandler.closePlayer(videoId); diff --git a/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java b/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java index d94824f..56f0a4f 100644 --- a/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java +++ b/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java @@ -1,12 +1,12 @@ package eu.midnightdust.picturesign.mixin; -import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget; 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; @@ -22,9 +22,9 @@ 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,"textures/gui/picturesign_button.png"); - private static final Identifier CLIPBOARD_ICON_TEXTURE = new Identifier(MOD_ID,"textures/gui/clipboard_button.png"); - private static final Identifier TRASHBIN_ICON_TEXTURE = new Identifier(MOD_ID,"textures/gui/trashbin_button.png"); + 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; @@ -38,27 +38,35 @@ public abstract class MixinSignEditScreen extends Screen { @Inject(at = @At("TAIL"),method = "init") private void picturesign$init(CallbackInfo ci) { - if (PictureSignClient.clipboard != null && PictureSignClient.clipboard[0] != null) - this.addDrawableChild(new TexturedOverlayButtonWidget(this.width - 84, this.height - 40, 20, 20, 0, 0, 20, CLIPBOARD_ICON_TEXTURE, 32, 64, (buttonWidget) -> { + 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); } - }, Text.empty())); - if (PictureSignConfig.helperUi) - this.addDrawableChild(new TexturedOverlayButtonWidget(this.width - 62, this.height - 40, 20, 20, 0, 0, 20, TRASHBIN_ICON_TEXTURE, 32, 64, (buttonWidget) -> { + }, 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); } - }, Text.empty())); - if (PictureSignConfig.helperUi) - this.addDrawableChild(new TexturedOverlayButtonWidget(this.width - 40, this.height - 40, 20, 20, 0, 0, 20, PICTURESIGN_ICON_TEXTURE, 32, 64, (buttonWidget) -> { + }, 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)); - }, Text.empty())); + }, 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) { diff --git a/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java b/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java index 73a9c2d..0915da0 100755 --- a/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java +++ b/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java @@ -50,7 +50,7 @@ public class PictureSignRenderer { }); if (!isSafeUrl && !url.startsWith("https://youtu.be/") && !url.startsWith("https://youtube.com/") && !url.startsWith("https://www.youtube.com/")) return; } - if ((!PictureSignConfig.enableVideoSigns || !PlatformFunctions.isModLoaded("videolib")) && !PictureSignType.isType(signBlockEntity, PictureSignType.PICTURE, front)) return; + if ((!PictureSignConfig.enableVideoSigns || !PictureSignClient.hasVideoLib) && !PictureSignType.isType(signBlockEntity, PictureSignType.PICTURE, front)) return; if (url.startsWith("https://youtube.com/") || url.startsWith("https://www.youtube.com/watch?v=") || url.startsWith("https://youtu.be/")) { url = url.replace("https://www.", "https://"); url = url.replace("youtube.com/watch?v=", PictureSignConfig.invidiousInstance.replace("https://", "").replace("/", "")+"/latest_version?id="); @@ -65,7 +65,7 @@ public class PictureSignRenderer { || (world.getBlockState(pos.up()).getBlock().equals(Blocks.REDSTONE_TORCH) || world.getBlockState(pos.up()).getBlock().equals(Blocks.REDSTONE_WALL_TORCH)) && world.getBlockState(pos.up()).get(Properties.LIT).equals(false))) { - VideoHandler.closePlayer(videoId); + if (PictureSignClient.hasVideoLib) VideoHandler.closePlayer(videoId); PictureURLUtils.cachedJsonData.remove(url); return; } diff --git a/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java b/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java index d92c6ce..f19a2e0 100644 --- a/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java +++ b/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java @@ -1,6 +1,5 @@ package eu.midnightdust.picturesign.screen; -import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget; import eu.midnightdust.picturesign.PictureSignClient; import eu.midnightdust.picturesign.config.PictureSignConfig; import eu.midnightdust.picturesign.util.PictureSignType; @@ -15,6 +14,7 @@ import net.minecraft.client.gui.screen.ingame.SignEditScreen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.SliderWidget; import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.widget.TextIconButtonWidget; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.render.*; import net.minecraft.client.render.block.entity.SignBlockEntityRenderer; @@ -36,9 +36,9 @@ import java.util.stream.IntStream; import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID; public class PictureSignHelperScreen extends Screen { - private static final Identifier TEXTSIGN_ICON_TEXTURE = new Identifier(MOD_ID,"textures/gui/textsign_button.png"); - private static final Identifier CLIPBOARD_ICON_TEXTURE = new Identifier(MOD_ID,"textures/gui/clipboard_button.png"); - private static final Identifier TRASHBIN_ICON_TEXTURE = new Identifier(MOD_ID,"textures/gui/trashbin_button.png"); + private static final Identifier TEXTSIGN_ICON_TEXTURE = new Identifier(MOD_ID,"icon/textsign"); + 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"); private final SignBlockEntity sign; private SignBlockEntityRenderer.SignModel model; protected String[] text; @@ -72,8 +72,8 @@ public class PictureSignHelperScreen extends Screen { } this.addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE, (button) -> this.finishEditing()).dimensions(this.width / 2 - 100, this.height / 4 + 120, 200, 20).build()); - if (PictureSignClient.clipboard != null && PictureSignClient.clipboard[0] != null) - this.addDrawableChild(new TexturedOverlayButtonWidget(this.width - 84, this.height - 40, 20, 20, 0, 0, 20, CLIPBOARD_ICON_TEXTURE, 32, 64, (buttonWidget) -> { + if (PictureSignClient.clipboard != null && PictureSignClient.clipboard[0] != null) { + TextIconButtonWidget clipboardBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> { for (int i = 0; i < 4; i++) { text[i] = PictureSignClient.clipboard[i]; int finalI = i; @@ -81,9 +81,12 @@ public class PictureSignHelperScreen extends Screen { } assert client != null; client.setScreen(this); - }, Text.of(""))); - if (PictureSignConfig.helperUi) - this.addDrawableChild(new TexturedOverlayButtonWidget(this.width - 62, this.height - 40, 20, 20, 0, 0, 20, TRASHBIN_ICON_TEXTURE, 32, 64, (buttonWidget) -> { + }, 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++) { text[i] = ""; int finalI = i; @@ -91,11 +94,17 @@ public class PictureSignHelperScreen extends Screen { } assert client != null; client.setScreen(this); - }, Text.of(""))); - this.addDrawableChild(new TexturedOverlayButtonWidget(this.width - 40, this.height - 40, 20, 20, 0, 0, 20, TEXTSIGN_ICON_TEXTURE, 32, 64, (buttonWidget) -> { - switchScreen = true; - Objects.requireNonNull(client).setScreen(isHanging ? new HangingSignEditScreen(this.sign, false, front) : new SignEditScreen(this.sign, front, false)); - }, Text.of(""))); + }, true).texture(TRASHBIN_ICON_TEXTURE, 16, 16).dimension(20, 20).build(); + trashbinBuilder.setPosition(this.width - 62, this.height - 40); + this.addDrawableChild(trashbinBuilder); + + TextIconButtonWidget textsignBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> { + switchScreen = true; + Objects.requireNonNull(client).setScreen(isHanging ? new HangingSignEditScreen(this.sign, false, front) : new SignEditScreen(this.sign, front, false)); + }, true).texture(TEXTSIGN_ICON_TEXTURE, 16, 16).dimension(20, 20).build(); + textsignBuilder.setPosition(this.width - 40, this.height - 40); + this.addDrawableChild(textsignBuilder); + } if (text[0].startsWith("!VS:")) pictureSignType = PictureSignType.VIDEO; if (text[0].startsWith("!LS:")) pictureSignType = PictureSignType.LOOPED_VIDEO; this.addDrawableChild(ButtonWidget.builder(Text.of(text[0].startsWith("!PS:") ? "Image" : (text[0].startsWith("!VS:") ? "Video" : "Loop")), (buttonWidget) -> { @@ -215,6 +224,11 @@ public class PictureSignHelperScreen extends Screen { this.changedListener = changedListener; } } + private void finishEditing() { + assert this.client != null; + switchScreen = false; + this.client.setScreen(null); + } public void removed() { if (this.client == null || switchScreen) return; ClientPlayNetworkHandler clientPlayNetworkHandler = this.client.getNetworkHandler(); @@ -258,15 +272,9 @@ public class PictureSignHelperScreen extends Screen { this.finishEditing(); } } - private void finishEditing() { - sign.markDirty(); - assert this.client != null; - this.client.setScreen(null); - } public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (this.client == null) return; DiffuseLighting.disableGuiDepthLighting(); - this.renderBackground(context); context.drawTextWithShadow(textRenderer, Text.of("Link" + (PictureSignConfig.safeMode ? (pictureSignType.equals(PictureSignType.PICTURE) ? " (imgur.com/imgbb.com/iili.io/pictshare.net)" : " (youtube.com/youtu.be/vimeo.com)") : "")), this.width / 2 - 175, this.height / 5 + 3, -8816268); diff --git a/src/main/java/eu/midnightdust/picturesign/util/VideoHandler.java b/src/main/java/eu/midnightdust/picturesign/util/VideoHandler.java index 6ea18e8..3054773 100644 --- a/src/main/java/eu/midnightdust/picturesign/util/VideoHandler.java +++ b/src/main/java/eu/midnightdust/picturesign/util/VideoHandler.java @@ -17,6 +17,11 @@ public class VideoHandler { videoPlayers.remove(id); playedOnce.remove(id); } + public static void closeAll() { + try {videoManager.close();} catch (Exception ignored) {} + videoPlayers.clear(); + playedOnce.clear(); + } public static void stop(Identifier id) { videoManager.getOrCreate(id).getControlsInterface().stop(); } diff --git a/src/main/resources/assets/picturesign/textures/gui/clipboard_button.png b/src/main/resources/assets/picturesign/textures/gui/clipboard_button.png deleted file mode 100644 index d8806e8..0000000 Binary files a/src/main/resources/assets/picturesign/textures/gui/clipboard_button.png and /dev/null differ diff --git a/src/main/resources/assets/picturesign/textures/gui/picturesign_button.png b/src/main/resources/assets/picturesign/textures/gui/picturesign_button.png deleted file mode 100644 index f8335ca..0000000 Binary files a/src/main/resources/assets/picturesign/textures/gui/picturesign_button.png and /dev/null differ diff --git a/src/main/resources/assets/picturesign/textures/gui/sprites/icon/clipboard.png b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/clipboard.png new file mode 100644 index 0000000..914f815 Binary files /dev/null and b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/clipboard.png differ diff --git a/src/main/resources/assets/picturesign/textures/gui/sprites/icon/picturesign.png b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/picturesign.png new file mode 100644 index 0000000..026a8be Binary files /dev/null and b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/picturesign.png differ diff --git a/src/main/resources/assets/picturesign/textures/gui/sprites/icon/textsign.png b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/textsign.png new file mode 100644 index 0000000..0d92512 Binary files /dev/null and b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/textsign.png differ diff --git a/src/main/resources/assets/picturesign/textures/gui/sprites/icon/trashbin.png b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/trashbin.png new file mode 100644 index 0000000..2a7dba3 Binary files /dev/null and b/src/main/resources/assets/picturesign/textures/gui/sprites/icon/trashbin.png differ diff --git a/src/main/resources/assets/picturesign/textures/gui/textsign_button.png b/src/main/resources/assets/picturesign/textures/gui/textsign_button.png deleted file mode 100644 index 948edd5..0000000 Binary files a/src/main/resources/assets/picturesign/textures/gui/textsign_button.png and /dev/null differ diff --git a/src/main/resources/assets/picturesign/textures/gui/trashbin_button.png b/src/main/resources/assets/picturesign/textures/gui/trashbin_button.png deleted file mode 100644 index 005a4a3..0000000 Binary files a/src/main/resources/assets/picturesign/textures/gui/trashbin_button.png and /dev/null differ