/*
* Copyright (c) Forge Development LLC and contributors
* SPDX-License-Identifier: LGPL-2.1-only
*/
package net.minecraftforge.client;
import net.minecraft.client.renderer.DimensionSpecialEffects;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
import net.minecraftforge.client.event.RegisterDimensionSpecialEffectsEvent;
import net.minecraftforge.fml.ModLoader;
import org.jetbrains.annotations.ApiStatus;
import java.util.HashMap;
import java.util.Map;
/**
* Manager for {@link DimensionSpecialEffects} instances.
*
* Provides a lookup by dimension type.
*/
public final class DimensionSpecialEffectsManager {
private DimensionSpecialEffectsManager() {}
private static Map EFFECTS;
private static DimensionSpecialEffects DEFAULT_EFFECTS;
/**
* Finds the {@link DimensionSpecialEffects} for a given dimension type, or the default if none is registered.
*/
public static DimensionSpecialEffects getForType(ResourceLocation type) {
return EFFECTS.getOrDefault(type, DEFAULT_EFFECTS);
}
@ApiStatus.Internal
public static void init() {
var effects = new HashMap();
DEFAULT_EFFECTS = preRegisterVanillaEffects(effects);
var event = new RegisterDimensionSpecialEffectsEvent(effects);
ModLoader.get().postEventWrapContainerInModOrder(event);
EFFECTS = Map.copyOf(effects);
}
/**
* Pre-registers vanilla dimension effects and returns the default fallback effects instance.
*
* Borrowed from {@link DimensionSpecialEffects#EFFECTS}.
*/
private static DimensionSpecialEffects preRegisterVanillaEffects(Map effects) {
var overworldEffects = new DimensionSpecialEffects.OverworldEffects();
effects.put(BuiltinDimensionTypes.OVERWORLD_EFFECTS, overworldEffects);
effects.put(BuiltinDimensionTypes.NETHER_EFFECTS, new DimensionSpecialEffects.NetherEffects());
effects.put(BuiltinDimensionTypes.END_EFFECTS, new DimensionSpecialEffects.EndEffects());
return overworldEffects;
}
}