mirror of
https://github.com/architectury/architectury-api.git
synced 2026-03-28 03:56:59 -05:00
Fix ParticleProviderRegistry not working properly on Forge, add Javadocs (#305)
* Fix ParticleProviderRegistry not working properly on Forge, add Javadocs Based on https://github.com/architectury/architectury-api/pull/196#issuecomment-1200268981, supersedes #196 * Update testmod, fix bounds on deferred register * Warn when registering particles too late on Forge
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
|
||||
package dev.architectury.registry.client.particle.forge;
|
||||
|
||||
import com.mojang.logging.LogUtils;
|
||||
import dev.architectury.forge.ArchitecturyForge;
|
||||
import dev.architectury.registry.client.particle.ParticleProviderRegistry;
|
||||
import net.minecraft.client.Minecraft;
|
||||
@@ -33,13 +34,17 @@ import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.client.event.ParticleFactoryRegisterEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID, value = Dist.CLIENT)
|
||||
@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
public class ParticleProviderRegistryImpl {
|
||||
|
||||
public static final Logger LOGGER = LogUtils.getLogger();
|
||||
|
||||
private static final class ExtendedSpriteSetImpl implements ParticleProviderRegistry.ExtendedSpriteSet {
|
||||
private final ParticleEngine engine;
|
||||
private final SpriteSet delegate;
|
||||
@@ -72,28 +77,30 @@ public class ParticleProviderRegistryImpl {
|
||||
|
||||
private static ArrayList<Runnable> deferred = new ArrayList<>();
|
||||
|
||||
private static <T extends ParticleOptions> void _register(ParticleType<T> type, ParticleProvider<T> provider) {
|
||||
private static <T extends ParticleOptions> void doRegister(ParticleType<T> type, ParticleProvider<T> provider) {
|
||||
Minecraft.getInstance().particleEngine.register(type, provider);
|
||||
}
|
||||
|
||||
private static <T extends ParticleOptions> void _register(ParticleType<T> type, ParticleProviderRegistry.DeferredParticleProvider<T> provider) {
|
||||
private static <T extends ParticleOptions> void doRegister(ParticleType<T> type, ParticleProviderRegistry.DeferredParticleProvider<T> provider) {
|
||||
Minecraft.getInstance().particleEngine.register(type, sprites ->
|
||||
provider.create(new ExtendedSpriteSetImpl(Minecraft.getInstance().particleEngine, sprites)));
|
||||
}
|
||||
|
||||
public static <T extends ParticleOptions> void register(ParticleType<T> type, ParticleProvider<T> provider) {
|
||||
if (deferred == null) {
|
||||
_register(type, provider);
|
||||
LOGGER.warn("Something is attempting to register particle providers at a later point than intended! This might cause issues!", new Throwable());
|
||||
doRegister(type, provider);
|
||||
} else {
|
||||
deferred.add(() -> _register(type, provider));
|
||||
deferred.add(() -> doRegister(type, provider));
|
||||
}
|
||||
}
|
||||
|
||||
public static <T extends ParticleOptions> void register(ParticleType<T> type, ParticleProviderRegistry.DeferredParticleProvider<T> provider) {
|
||||
if (deferred == null) {
|
||||
_register(type, provider);
|
||||
LOGGER.warn("Something is attempting to register particle providers at a later point than intended! This might cause issues!", new Throwable());
|
||||
doRegister(type, provider);
|
||||
} else {
|
||||
deferred.add(() -> _register(type, provider));
|
||||
deferred.add(() -> doRegister(type, provider));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user