Unicopia/src/main/java/com/minelittlepony/unicopia/particle/SphereParticleEffect.java

78 lines
2.9 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia.particle;
2020-05-03 19:20:51 +02:00
import java.util.Locale;
2022-12-18 22:07:24 +01:00
import org.joml.Vector3f;
2020-06-26 11:44:47 +02:00
import com.minelittlepony.common.util.Color;
2020-05-03 19:20:51 +02:00
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
2021-12-22 12:10:45 +01:00
import net.minecraft.particle.AbstractDustParticleEffect;
2020-05-03 19:20:51 +02:00
import net.minecraft.particle.ParticleEffect;
import net.minecraft.particle.ParticleType;
2020-06-26 11:44:47 +02:00
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.math.Vec3d;
2022-12-18 22:07:24 +01:00
import net.minecraft.registry.Registries;
2020-05-03 19:20:51 +02:00
2023-10-18 19:29:49 +02:00
public record SphereParticleEffect (
ParticleType<? extends SphereParticleEffect> type,
Vector3f color,
float alpha,
float radius,
Vec3d offset
) implements ParticleEffect {
2021-12-23 23:38:02 +01:00
@SuppressWarnings("deprecation")
2021-12-22 12:10:45 +01:00
public static final Factory<SphereParticleEffect> FACTORY = ParticleFactoryHelper.of(SphereParticleEffect::new, SphereParticleEffect::new);
2020-05-03 19:20:51 +02:00
private static final Vec3d DEFAULT_OFFSET = new Vec3d(0, 0.5, 0);
2021-12-22 12:10:45 +01:00
protected SphereParticleEffect(ParticleType<? extends SphereParticleEffect> type, StringReader reader) throws CommandSyntaxException {
this(type, AbstractDustParticleEffect.readColor(reader), ParticleFactoryHelper.readFloat(reader), ParticleFactoryHelper.readFloat(reader), ParticleFactoryHelper.readVector(reader));
2020-05-03 19:20:51 +02:00
}
2021-12-22 12:10:45 +01:00
protected SphereParticleEffect(ParticleType<? extends SphereParticleEffect> type, PacketByteBuf buf) {
2023-10-18 19:29:49 +02:00
this(type, buf.readVector3f(), buf.readFloat(), buf.readFloat(), ParticleFactoryHelper.readVector(buf));
2020-05-03 19:20:51 +02:00
}
public SphereParticleEffect(ParticleType<? extends SphereParticleEffect> type, int tint, float alpha, float rad) {
this(type, tint, alpha, rad, DEFAULT_OFFSET);
2020-05-03 19:20:51 +02:00
}
2022-12-18 22:07:24 +01:00
public SphereParticleEffect(ParticleType<? extends SphereParticleEffect> type, Vector3f color, float alpha, float rad) {
this(type, color, alpha, rad, DEFAULT_OFFSET);
}
public SphereParticleEffect(ParticleType<? extends SphereParticleEffect> type, int tint, float alpha, float rad, Vec3d offset) {
2022-12-18 22:07:24 +01:00
this(type, new Vector3f(Color.r(tint) * 255, Color.g(tint) * 255, Color.b(tint) * 255), alpha, rad, offset);
}
2023-10-18 19:29:49 +02:00
public SphereParticleEffect withOffset(Vec3d offset) {
return new SphereParticleEffect(type, color, alpha, radius, offset);
2020-05-03 19:20:51 +02:00
}
@Override
public ParticleType<?> getType() {
return type;
2020-05-03 19:20:51 +02:00
}
@Override
public void write(PacketByteBuf buf) {
2023-10-18 19:29:49 +02:00
buf.writeVector3f(color);
2020-05-03 19:20:51 +02:00
buf.writeFloat(alpha);
buf.writeFloat(radius);
2023-10-18 19:29:49 +02:00
ParticleFactoryHelper.writeVector(buf, offset);
2020-05-03 19:20:51 +02:00
}
@Override
public String asString() {
return String.format(Locale.ROOT, "%s %.2f %.2f %.2f %.2f %.2f %.2f %.2f",
2022-12-18 22:07:24 +01:00
Registries.PARTICLE_TYPE.getId(getType()),
color.x, color.y, color.z,
alpha,
radius,
offset.getX(), offset.getY(), offset.getZ()
);
2020-05-03 19:20:51 +02:00
}
}