From 443b415a3be5fb58803acbc4defc8a885dc5394f Mon Sep 17 00:00:00 2001 From: glyceryl <494192175@qq.com> Date: Wed, 21 Aug 2024 12:58:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=92=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=8C=85=E7=9A=84=E5=86=85=E5=AE=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/event/WGModBusEvent.java | 21 ++++++ .../core/network/PlayerVisceraS2CPacket.java | 38 ++++++++++ .../whispergrove/core/network/WGPayload.java | 71 ------------------- .../whispergrove/registers/WGAttachment.java | 19 ++--- 4 files changed, 69 insertions(+), 80 deletions(-) create mode 100644 src/main/java/org/hiedacamellia/whispergrove/core/event/WGModBusEvent.java create mode 100644 src/main/java/org/hiedacamellia/whispergrove/core/network/PlayerVisceraS2CPacket.java delete mode 100644 src/main/java/org/hiedacamellia/whispergrove/core/network/WGPayload.java diff --git a/src/main/java/org/hiedacamellia/whispergrove/core/event/WGModBusEvent.java b/src/main/java/org/hiedacamellia/whispergrove/core/event/WGModBusEvent.java new file mode 100644 index 0000000..4ae9421 --- /dev/null +++ b/src/main/java/org/hiedacamellia/whispergrove/core/event/WGModBusEvent.java @@ -0,0 +1,21 @@ +package org.hiedacamellia.whispergrove.core.event; + +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; +import org.hiedacamellia.whispergrove.WhisperGrove; +import org.hiedacamellia.whispergrove.core.network.PlayerVisceraS2CPacket; + +@EventBusSubscriber(modid = WhisperGrove.MODID, bus = EventBusSubscriber.Bus.MOD) +public class WGModBusEvent { + + @SubscribeEvent + public static void register(final RegisterPayloadHandlersEvent event) { + final PayloadRegistrar registrar = event.registrar("1"); + registrar.playToClient(PlayerVisceraS2CPacket.TYPE, + PlayerVisceraS2CPacket.STREAM_CODEC, + PlayerVisceraS2CPacket::handleData); + } + +} \ No newline at end of file diff --git a/src/main/java/org/hiedacamellia/whispergrove/core/network/PlayerVisceraS2CPacket.java b/src/main/java/org/hiedacamellia/whispergrove/core/network/PlayerVisceraS2CPacket.java new file mode 100644 index 0000000..cab3a41 --- /dev/null +++ b/src/main/java/org/hiedacamellia/whispergrove/core/network/PlayerVisceraS2CPacket.java @@ -0,0 +1,38 @@ +package org.hiedacamellia.whispergrove.core.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.neoforged.neoforge.registries.NeoForgeRegistries; +import org.hiedacamellia.whispergrove.WhisperGrove; +import org.hiedacamellia.whispergrove.content.common.viscera.Viscera; + +public record PlayerVisceraS2CPacket(ResourceLocation name, Double yin, Double yang) implements CustomPacketPayload { + + public static final Type TYPE = new Type<>(WhisperGrove.prefix("network.viscera")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceLocation.STREAM_CODEC, PlayerVisceraS2CPacket::name, + ByteBufCodecs.DOUBLE, PlayerVisceraS2CPacket::yin, + ByteBufCodecs.DOUBLE, PlayerVisceraS2CPacket::yang, + PlayerVisceraS2CPacket::new); + + @Override + public Type type() { + return TYPE; + } + + @SuppressWarnings("unchecked") + public static void handleData(PlayerVisceraS2CPacket packet, IPayloadContext context) { + context.enqueueWork(() -> { + AttachmentType type = (AttachmentType) NeoForgeRegistries.ATTACHMENT_TYPES.get(packet.name); + if (type != null) { + context.player().setData(type, new Viscera(packet.name, packet.yin, packet.yang)); + } + }); + } + +} \ No newline at end of file diff --git a/src/main/java/org/hiedacamellia/whispergrove/core/network/WGPayload.java b/src/main/java/org/hiedacamellia/whispergrove/core/network/WGPayload.java deleted file mode 100644 index 993b4e1..0000000 --- a/src/main/java/org/hiedacamellia/whispergrove/core/network/WGPayload.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.hiedacamellia.whispergrove.core.network; - -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; -import net.neoforged.neoforge.network.handling.DirectionalPayloadHandler; -import net.neoforged.neoforge.network.registration.PayloadRegistrar; -import org.hiedacamellia.whispergrove.core.codec.button.SpringingButton; -import org.hiedacamellia.whispergrove.core.codec.record.*; - -public class WGPayload { - @SubscribeEvent - public static void register(final RegisterPayloadHandlersEvent event) { - final PayloadRegistrar registrar = event.registrar("1"); - registrar.playBidirectional( - Heart.TYPE, - Heart.STREAM_CODEC, - new DirectionalPayloadHandler<>( - Heart::handleData, - Heart::handleData - ) - ); - registrar.playBidirectional( - Kidney.TYPE, - Kidney.STREAM_CODEC, - new DirectionalPayloadHandler<>( - Kidney::handleData, - Kidney::handleData - ) - ); - registrar.playBidirectional( - Liver.TYPE, - Liver.STREAM_CODEC, - new DirectionalPayloadHandler<>( - Liver::handleData, - Liver::handleData - ) - ); - registrar.playBidirectional( - Lung.TYPE, - Lung.STREAM_CODEC, - new DirectionalPayloadHandler<>( - Lung::handleData, - Lung::handleData - ) - ); - registrar.playBidirectional( - Spleen.TYPE, - Spleen.STREAM_CODEC, - new DirectionalPayloadHandler<>( - Spleen::handleData, - Spleen::handleData - ) - ); - registrar.playBidirectional( - NameMap.TYPE, - NameMap.STREAM_CODEC, - new DirectionalPayloadHandler<>( - NameMap::handleData, - NameMap::handleData - ) - ); - registrar.playBidirectional( - SpringingButton.TYPE, - SpringingButton.STREAM_CODEC, - new DirectionalPayloadHandler<>( - SpringingButton::handleData, - SpringingButton::handleData - ) - ); - } -} diff --git a/src/main/java/org/hiedacamellia/whispergrove/registers/WGAttachment.java b/src/main/java/org/hiedacamellia/whispergrove/registers/WGAttachment.java index b72e9ad..935fbfb 100644 --- a/src/main/java/org/hiedacamellia/whispergrove/registers/WGAttachment.java +++ b/src/main/java/org/hiedacamellia/whispergrove/registers/WGAttachment.java @@ -1,9 +1,11 @@ package org.hiedacamellia.whispergrove.registers; import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.NeoForgeRegistries; import org.hiedacamellia.whispergrove.WhisperGrove; +import org.hiedacamellia.whispergrove.content.common.viscera.Viscera; import org.hiedacamellia.whispergrove.core.codec.WGCodec; import org.hiedacamellia.whispergrove.core.codec.record.*; @@ -13,14 +15,7 @@ public class WGAttachment { // Create the DeferredRegister for attachment types public static final DeferredRegister> ATTACHMENTS = DeferredRegister.create(NeoForgeRegistries.ATTACHMENT_TYPES, WhisperGrove.MODID); -// // Serialization via INBTSerializable -// private static final Supplier> HANDLER = ATTACHMENTS.register( -// "handler", () -> AttachmentType.serializable(() -> new ItemStackHandler(1)).build() -// ); -// // Serialization via codec -// private static final Supplier> MANA = ATTACHMENTS.register( -// "mana", () -> AttachmentType.builder(() -> 0).serialize(Codec.INT).build() -// ); + public static final DeferredHolder, AttachmentType> HEART_ = registerViscera("heart"); //Heart public static final Supplier> HEART = ATTACHMENTS.register( @@ -54,4 +49,10 @@ public class WGAttachment { public static final Supplier> NAMEMAP = ATTACHMENTS.register( "namemap", () -> AttachmentType.builder(() -> new NameMap(null)).serialize(WGCodec.NAMEMAP_CODEC).build() ); -} + + private static DeferredHolder, AttachmentType> registerViscera(String name) { + Viscera viscera = new Viscera(WhisperGrove.prefix(name), 100.0D, 100.0D); + return ATTACHMENTS.register(name, () -> AttachmentType.builder(() -> viscera).serialize(Viscera.CODEC).build()); + } + +} \ No newline at end of file