Skip to content

Commit

Permalink
feat(network): ClientboundDrawParticleShapePacket
Browse files Browse the repository at this point in the history
  • Loading branch information
WakelessSloth56 committed Aug 11, 2022
1 parent 9700875 commit 6a9c5de
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 3 deletions.
Expand Up @@ -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 <MSG extends IHPacket> void sendToServer(MSG msg) {
HANDLER.sendToServer(msg);
Expand Down
@@ -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);
}

}
@@ -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 extends ParticleOptions> T readParticle(FriendlyByteBuf buffer, ParticleType<T> particleType) {
return particleType.getDeserializer().fromNetwork(particleType, buffer);
}

}

0 comments on commit 6a9c5de

Please sign in to comment.