diff --git a/src/main/java/org/betterx/bclib/particles/BCLParticleType.java b/src/main/java/org/betterx/bclib/particles/BCLParticleType.java index 69b5f567..d9a5f698 100644 --- a/src/main/java/org/betterx/bclib/particles/BCLParticleType.java +++ b/src/main/java/org/betterx/bclib/particles/BCLParticleType.java @@ -1,14 +1,48 @@ package org.betterx.bclib.particles; import net.minecraft.core.Registry; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.resources.ResourceLocation; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +import com.mojang.serialization.Codec; + public class BCLParticleType { - public static SimpleParticleType simple(boolean alwaysSpawn) { - return new SimpleParticleType(alwaysSpawn) { + + public static ParticleType deserializer(ParticleOptions.Deserializer factory, + Codec codec) { + return deserializer(false, factory, codec); + } + + public static ParticleType deserializer(boolean overrideLimiter, + ParticleOptions.Deserializer factory, + Codec codec) { + return new ParticleType(overrideLimiter, factory) { + @Override + public Codec codec() { + return codec; + } + }; + } + + public static ParticleType register(ResourceLocation location, + ParticleOptions.Deserializer factory, + Codec codec) { + return register(location, false, factory, codec); + } + + public static ParticleType register(ResourceLocation location, + boolean overrideLimiter, + ParticleOptions.Deserializer factory, + Codec codec) { + return Registry.register(Registry.PARTICLE_TYPE, location, deserializer(overrideLimiter, factory, codec)); + } + + public static SimpleParticleType simple(boolean overrideLimiter) { + return new SimpleParticleType(overrideLimiter) { }; } @@ -16,23 +50,23 @@ public class BCLParticleType { return simple(false); } - public static SimpleParticleType registerSimple(ResourceLocation location) { - return registerSimple(location, false); + public static SimpleParticleType register(ResourceLocation location) { + return register(location, false); } - public static SimpleParticleType registerSimple(ResourceLocation location, boolean alwaysSpawn) { - return Registry.register(Registry.PARTICLE_TYPE, location, simple(alwaysSpawn)); + public static SimpleParticleType register(ResourceLocation location, boolean overrideLimiter) { + return Registry.register(Registry.PARTICLE_TYPE, location, simple(overrideLimiter)); } - public static SimpleParticleType registerSimple(ResourceLocation location, - ParticleFactoryRegistry.PendingParticleFactory provider) { - return registerSimple(location, false, provider); + public static SimpleParticleType register(ResourceLocation location, + ParticleFactoryRegistry.PendingParticleFactory provider) { + return register(location, false, provider); } - public static SimpleParticleType registerSimple(ResourceLocation location, - boolean alwaysSpawn, - ParticleFactoryRegistry.PendingParticleFactory provider) { - SimpleParticleType type = Registry.register(Registry.PARTICLE_TYPE, location, simple(alwaysSpawn)); + public static SimpleParticleType register(ResourceLocation location, + boolean overrideLimiter, + ParticleFactoryRegistry.PendingParticleFactory provider) { + SimpleParticleType type = Registry.register(Registry.PARTICLE_TYPE, location, simple(overrideLimiter)); ParticleFactoryRegistry.getInstance().register(type, provider); return type; }