From ce1bc60a872dfa6ba66979286ac7740e69cc2699 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Thu, 20 Jun 2024 23:14:29 +0200 Subject: [PATCH] Neoforge support --- .../picturesign/PictureSignClient.java | 4 +- .../MixinHangingSignBlockEntityRenderer.java | 1 - .../mixin/MixinSignBlockEntityRenderer.java | 4 +- .../screen/PictureSignHelperScreen.java | 6 +- .../picturesign/util/GIFHandler.java | 5 +- .../picturesign/util/NetworkUtil.java | 11 ++++ .../util/fabric/NetworkUtilImpl.java | 15 +++++ gradle.properties | 2 +- .../neoforge/PictureSignClientEvents.java | 17 ++++++ .../neoforge/PictureSignClientGameEvents.java | 55 +++++++++++++++++++ .../neoforge/PictureSignClientNeoForge.java | 10 ++-- .../util/neoforge/NetworkUtilImpl.java | 15 +++++ 12 files changed, 130 insertions(+), 15 deletions(-) create mode 100644 common/src/main/java/eu/midnightdust/picturesign/util/NetworkUtil.java create mode 100644 fabric/src/main/java/eu/midnightdust/picturesign/util/fabric/NetworkUtilImpl.java create mode 100644 neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientEvents.java create mode 100644 neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientGameEvents.java create mode 100644 neoforge/src/main/java/eu/midnightdust/picturesign/util/neoforge/NetworkUtilImpl.java diff --git a/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java b/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java index 0fc3dcf..3b109ee 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java +++ b/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java @@ -2,6 +2,7 @@ package eu.midnightdust.picturesign; import eu.midnightdust.lib.util.PlatformFunctions; import eu.midnightdust.picturesign.config.PictureSignConfig; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; import net.minecraft.util.Identifier; @@ -11,9 +12,10 @@ import org.lwjgl.glfw.GLFW; public class PictureSignClient { public static Logger LOGGER = LogManager.getLogger("PictureSign"); - public static String MOD_ID = "picturesign"; + public static final String MOD_ID = "picturesign"; public static final boolean hasWaterMedia = PlatformFunctions.isModLoaded("watermedia"); public static String[] clipboard = new String[4]; + public static final MinecraftClient client = MinecraftClient.getInstance(); 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); diff --git a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinHangingSignBlockEntityRenderer.java b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinHangingSignBlockEntityRenderer.java index 1f24351..827b367 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinHangingSignBlockEntityRenderer.java +++ b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinHangingSignBlockEntityRenderer.java @@ -17,7 +17,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(HangingSignBlockEntityRenderer.class) public abstract class MixinHangingSignBlockEntityRenderer implements BlockEntityRenderer { - @Unique private static final MinecraftClient client = MinecraftClient.getInstance(); @Unique PictureSignRenderer psRenderer = new PictureSignRenderer(); @Inject(at = @At("HEAD"), method = "render") diff --git a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java index d5d6ddb..0d66135 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java +++ b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java @@ -4,7 +4,6 @@ import eu.midnightdust.picturesign.config.PictureSignConfig; import eu.midnightdust.picturesign.render.PictureSignRenderer; import eu.midnightdust.picturesign.util.PictureSignType; import net.minecraft.block.entity.SignBlockEntity; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.*; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; @@ -18,9 +17,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import static eu.midnightdust.picturesign.PictureSignClient.client; + @Mixin(SignBlockEntityRenderer.class) public abstract class MixinSignBlockEntityRenderer implements BlockEntityRenderer { - @Unique private static final MinecraftClient client = MinecraftClient.getInstance(); @Unique private PictureSignRenderer psRenderer; @Inject(at = @At("TAIL"), method = "") diff --git a/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java b/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java index 025c146..343183a 100644 --- a/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java +++ b/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java @@ -2,6 +2,7 @@ package eu.midnightdust.picturesign.screen; import eu.midnightdust.picturesign.PictureSignClient; import eu.midnightdust.picturesign.config.PictureSignConfig; +import eu.midnightdust.picturesign.util.NetworkUtil; import eu.midnightdust.picturesign.util.PictureSignType; import eu.midnightdust.picturesign.util.PictureURLUtils; import net.minecraft.block.*; @@ -229,14 +230,11 @@ public class PictureSignHelperScreen extends Screen { } public void removed() { if (this.client == null || switchScreen) return; - ClientPlayNetworkHandler clientPlayNetworkHandler = this.client.getNetworkHandler(); for (int i = 0; i < 4; i++) { int finalI = i; sign.changeText(changer -> changer.withMessage(finalI, Text.of(text[finalI])), front); } - if (clientPlayNetworkHandler != null) { - clientPlayNetworkHandler.sendPacket(new UpdateSignC2SPacket(this.sign.getPos(), front, this.text[0], this.text[1], this.text[2], this.text[3])); - } + NetworkUtil.sendPacket(new UpdateSignC2SPacket(this.sign.getPos(), front, this.text[0], this.text[1], this.text[2], this.text[3])); } private String[] breakLink(String prefix, String link) { diff --git a/common/src/main/java/eu/midnightdust/picturesign/util/GIFHandler.java b/common/src/main/java/eu/midnightdust/picturesign/util/GIFHandler.java index ca66962..8d6e722 100644 --- a/common/src/main/java/eu/midnightdust/picturesign/util/GIFHandler.java +++ b/common/src/main/java/eu/midnightdust/picturesign/util/GIFHandler.java @@ -11,13 +11,14 @@ import java.net.MalformedURLException; import java.util.HashMap; import java.util.Map; +import static eu.midnightdust.picturesign.PictureSignClient.client; + public class GIFHandler { public static Map gifPlayers = new HashMap<>(); public final Identifier id; public boolean playbackStarted; private ImageCache player; - private static final MinecraftClient client = MinecraftClient.getInstance(); private long tick = 0L; private GIFHandler(Identifier id) { @@ -59,7 +60,7 @@ public class GIFHandler { } public int getTexture() { return player.getRenderer().texture(tick, - (MathAPI.tickToMs(GIFHandler.client.getRenderTickCounter().getTickDelta(true))), true); + (MathAPI.tickToMs(client.getRenderTickCounter().getTickDelta(true))), true); } public boolean isWorking() { if (player != null && player.getException() != null) player.getException().fillInStackTrace(); diff --git a/common/src/main/java/eu/midnightdust/picturesign/util/NetworkUtil.java b/common/src/main/java/eu/midnightdust/picturesign/util/NetworkUtil.java new file mode 100644 index 0000000..d06d385 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/picturesign/util/NetworkUtil.java @@ -0,0 +1,11 @@ +package eu.midnightdust.picturesign.util; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.minecraft.network.packet.Packet; + +public class NetworkUtil { + @ExpectPlatform + public static void sendPacket(Packet packet) { + throw new AssertionError(); + } +} diff --git a/fabric/src/main/java/eu/midnightdust/picturesign/util/fabric/NetworkUtilImpl.java b/fabric/src/main/java/eu/midnightdust/picturesign/util/fabric/NetworkUtilImpl.java new file mode 100644 index 0000000..ba655db --- /dev/null +++ b/fabric/src/main/java/eu/midnightdust/picturesign/util/fabric/NetworkUtilImpl.java @@ -0,0 +1,15 @@ +package eu.midnightdust.picturesign.util.fabric; + +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.network.packet.Packet; + +import static eu.midnightdust.picturesign.PictureSignClient.client; + +public class NetworkUtilImpl { + private static final ClientPlayNetworkHandler handler = client.getNetworkHandler(); + + public static void sendPacket(Packet packet) { + if (handler != null) + handler.sendPacket(packet); + } +} diff --git a/gradle.properties b/gradle.properties index c9a7fed..7d764f8 100755 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ yarn_mappings=1.21+build.2 enabled_platforms=fabric,neoforge archives_base_name=picturesign -mod_version=2.0.0-beta.2 +mod_version=2.0.0-pre.1 maven_group=eu.midnightdust release_type=release curseforge_id=432008 diff --git a/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientEvents.java b/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientEvents.java new file mode 100644 index 0000000..fce9c61 --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientEvents.java @@ -0,0 +1,17 @@ +package eu.midnightdust.picturesign.neoforge; + +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; + +import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID; +import static eu.midnightdust.picturesign.PictureSignClient.BINDING_COPY_SIGN; + +@EventBusSubscriber(modid = MOD_ID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) +public class PictureSignClientEvents { + @SubscribeEvent + public static void registerKeybinding(RegisterKeyMappingsEvent event) { + event.register(BINDING_COPY_SIGN); + } +} diff --git a/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientGameEvents.java b/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientGameEvents.java new file mode 100644 index 0000000..9bf48bd --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientGameEvents.java @@ -0,0 +1,55 @@ +package eu.midnightdust.picturesign.neoforge; + +import eu.midnightdust.picturesign.util.GIFHandler; +import eu.midnightdust.picturesign.util.MediaHandler; +import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.util.Identifier; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.event.level.ChunkEvent; + +import static eu.midnightdust.picturesign.PictureSignClient.id; +import static eu.midnightdust.picturesign.PictureSignClient.client; +import static eu.midnightdust.picturesign.PictureSignClient.clipboard; +import static eu.midnightdust.picturesign.PictureSignClient.hasWaterMedia; +import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID; +import static eu.midnightdust.picturesign.PictureSignClient.BINDING_COPY_SIGN; + +@EventBusSubscriber(modid = MOD_ID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) +public class PictureSignClientGameEvents { + @SubscribeEvent() + public static void sendPacketOnLogin(ClientPlayerNetworkEvent.LoggingIn event) { + if (hasWaterMedia) MediaHandler.closeAll(); + } + @SubscribeEvent + public static void onBlockEntityUnload(ChunkEvent.Unload event) { + for (BlockPos pos : event.getChunk().getBlockEntityPositions()) { + if (hasWaterMedia) { + Identifier videoId = id(pos.getX() + "_" + pos.getY() + "_" + pos.getZ() + "_f"); + MediaHandler.closePlayer(videoId); + Identifier videoId2 = id(pos.getX() + "_" + pos.getY() + "_" + pos.getZ() + "_b"); + MediaHandler.closePlayer(videoId2); + } + } + } + @SubscribeEvent + public static void endClientTick(ClientTickEvent.Post event) { + GIFHandler.gifPlayers.forEach(((identifier, handler) -> handler.tick())); + if (!BINDING_COPY_SIGN.isPressed()) return; + BINDING_COPY_SIGN.setPressed(false); + if (client.player == null || client.world == null || client.crosshairTarget == null || client.crosshairTarget.getType() != HitResult.Type.BLOCK) return; + if (client.crosshairTarget.getType() == HitResult.Type.BLOCK && client.world.getBlockState(BlockPos.ofFloored(client.crosshairTarget.getPos())).hasBlockEntity()) { + if (client.world.getBlockEntity(BlockPos.ofFloored(client.crosshairTarget.getPos())) instanceof SignBlockEntity sign) { + boolean front = sign.isPlayerFacingFront(client.player); + for (int i = 0; i < 4; i++) { + clipboard[i] = sign.getText(front).getMessage(i, false).getString(); + } + } + } + } +} diff --git a/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientNeoForge.java b/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientNeoForge.java index d1677c7..26ba688 100644 --- a/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientNeoForge.java +++ b/neoforge/src/main/java/eu/midnightdust/picturesign/neoforge/PictureSignClientNeoForge.java @@ -2,18 +2,20 @@ package eu.midnightdust.picturesign.neoforge; import eu.midnightdust.picturesign.PictureSignClient; import net.minecraft.resource.ResourcePackProfile; -import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.common.Mod; import org.apache.commons.compress.utils.Lists; import java.util.List; +import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID; + @SuppressWarnings("all") +@Mod(value = MOD_ID, dist = Dist.CLIENT) public class PictureSignClientNeoForge { public static List defaultEnabledPacks = Lists.newArrayList(); - public static void initClient() { + public PictureSignClientNeoForge() { PictureSignClient.init(); } - public static void doClientTick(ClientTickEvent.Pre event) { - } } \ No newline at end of file diff --git a/neoforge/src/main/java/eu/midnightdust/picturesign/util/neoforge/NetworkUtilImpl.java b/neoforge/src/main/java/eu/midnightdust/picturesign/util/neoforge/NetworkUtilImpl.java new file mode 100644 index 0000000..1366e22 --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/picturesign/util/neoforge/NetworkUtilImpl.java @@ -0,0 +1,15 @@ +package eu.midnightdust.picturesign.util.neoforge; + +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.network.packet.Packet; + +import static eu.midnightdust.picturesign.PictureSignClient.client; + +public class NetworkUtilImpl { + private static final ClientPlayNetworkHandler handler = client.getNetworkHandler(); + + public static void sendPacket(Packet packet) { + if (handler != null) + handler.send(packet); + } +}