LeadParticleEffect.java 1.72 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
package com.owlmaddie.particle;

import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.particle.ParticleType;

import static com.owlmaddie.network.ServerPackets.LEAD_PARTICLE;

/**
 * The {@code LeadParticleEffect} class allows for an 'angle' to be passed along with the Particle, to rotate it in the direction of LEAD behavior.
 */
public class LeadParticleEffect implements ParticleEffect {
    public static final ParticleEffect.Factory<LeadParticleEffect> DESERIALIZER = new Factory<>() {
        @Override
        public LeadParticleEffect read(ParticleType<LeadParticleEffect> particleType, PacketByteBuf buf) {
            // Read the angle (or any other data) from the packet
            double angle = buf.readDouble();
            return new LeadParticleEffect(angle);
        }

        @Override
        public LeadParticleEffect read(ParticleType<LeadParticleEffect> particleType, StringReader reader) throws CommandSyntaxException {
            // Read the angle from a string
            double angle = reader.readDouble();
            return new LeadParticleEffect(angle);
        }
    };

    private final double angle;

    public LeadParticleEffect(double angle) {
        this.angle = angle;
    }

    @Override
    public ParticleType<?> getType() {
        return LEAD_PARTICLE;
    }

    public double getAngle() {
        return angle;
    }

    @Override
    public void write(PacketByteBuf buf) {
        // Write the angle to the packet
        buf.writeDouble(angle);
    }

    @Override
    public String asString() {
        return Double.toString(angle);
    }
}