From 6a9c5def0c350cbbdc1e632984f7384e32f2a5c5 Mon Sep 17 00:00:00 2001 From: WakelessSloth56 Date: Thu, 11 Aug 2022 17:46:36 +0800 Subject: [PATCH] feat(network): ClientboundDrawParticleShapePacket --- .../common/network/AHPacketHandler.java | 8 ++- .../arnicalib/common/network/AHPackets.java | 12 ++++ .../ClientboundDrawParticleShapePacket.java | 59 +++++++++++++++++++ 3 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPackets.java create mode 100644 src/main/java/org/auioc/mcmod/arnicalib/common/network/packet/client/ClientboundDrawParticleShapePacket.java diff --git a/src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPacketHandler.java b/src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPacketHandler.java index ba4600e7..24e62730 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPacketHandler.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPacketHandler.java @@ -7,10 +7,12 @@ public final class AHPacketHandler { - public static void init() {} - private static final String PROTOCOL_VERSION = Integer.toString(1); - private static final HPacketHandler HANDLER = new HPacketHandler(ArnicaLib.id("main"), PROTOCOL_VERSION); + protected static final HPacketHandler HANDLER = new HPacketHandler(ArnicaLib.id("main"), PROTOCOL_VERSION); + + public static void init() { + AHPackets.register(); + } public static void sendToServer(MSG msg) { HANDLER.sendToServer(msg); diff --git a/src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPackets.java b/src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPackets.java new file mode 100644 index 00000000..f8f0dd46 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/common/network/AHPackets.java @@ -0,0 +1,12 @@ +package org.auioc.mcmod.arnicalib.common.network; + +import static org.auioc.mcmod.arnicalib.common.network.AHPacketHandler.HANDLER; +import org.auioc.mcmod.arnicalib.common.network.packet.client.ClientboundDrawParticleShapePacket; + +public final class AHPackets { + + protected static void register() { + HANDLER.registerServerToClient(ClientboundDrawParticleShapePacket.class, ClientboundDrawParticleShapePacket::decode); + } + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/common/network/packet/client/ClientboundDrawParticleShapePacket.java b/src/main/java/org/auioc/mcmod/arnicalib/common/network/packet/client/ClientboundDrawParticleShapePacket.java new file mode 100644 index 00000000..8033f9c2 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/common/network/packet/client/ClientboundDrawParticleShapePacket.java @@ -0,0 +1,59 @@ +package org.auioc.mcmod.arnicalib.common.network.packet.client; + +import org.auioc.mcmod.arnicalib.api.game.network.IHPacket; +import org.auioc.mcmod.arnicalib.api.game.phys.Shape; +import org.auioc.mcmod.arnicalib.utils.game.ParticlePainter; +import org.auioc.mcmod.arnicalib.utils.game.ParticlePainter.Options; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent.Context; +import net.minecraftforge.registries.ForgeRegistries; + +public class ClientboundDrawParticleShapePacket implements IHPacket { + + private final Shape shape; + private final CompoundTag data; + private final Options options; + + public ClientboundDrawParticleShapePacket(Shape shape, CompoundTag data, Options options) { + this.shape = shape; + this.data = data; + this.options = options; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void handle(Context ctx) { + ParticlePainter.Client.draw(this.shape, this.data, this.options); + } + + @Override + public void encode(FriendlyByteBuf buffer) { + buffer.writeEnum(this.shape); + buffer.writeNbt(this.data); + buffer.writeDouble(this.options.stepLength()); + buffer.writeResourceLocation(this.options.particle().getType().getRegistryName()); + this.options.particle().writeToNetwork(buffer); + buffer.writeBoolean(this.options.force()); + } + + public static ClientboundDrawParticleShapePacket decode(FriendlyByteBuf buffer) { + var shape = buffer.readEnum(Shape.class); + var data = buffer.readNbt(); + var stepLength = buffer.readDouble(); + var _particleType = ForgeRegistries.PARTICLE_TYPES.getValue(buffer.readResourceLocation()); + var particle = readParticle(buffer, _particleType); + var force = buffer.readBoolean(); + return new ClientboundDrawParticleShapePacket(shape, data, new Options(stepLength, particle, force)); + } + + @SuppressWarnings("deprecation") + private static T readParticle(FriendlyByteBuf buffer, ParticleType particleType) { + return particleType.getDeserializer().fromNetwork(particleType, buffer); + } + +}