package io.gitlab.jfronny.libjf.config.impl; import com.google.common.collect.ImmutableMap; import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.config.api.ConfigHolder; import io.gitlab.jfronny.libjf.config.api.ConfigInstance; import org.jetbrains.annotations.ApiStatus; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; public class ConfigHolderImpl implements ConfigHolder { @ApiStatus.Internal public static final ConfigHolderImpl INSTANCE = new ConfigHolderImpl(); private ConfigHolderImpl() { } public static final String MODULE_ID = "libjf:config"; public static final String CUSTOM_ID = MODULE_ID + "_custom"; private final Map configs = new HashMap<>(); private final Map configsByPath = new HashMap<>(); @Override public void register(String modId, ConfigInstance config) { if (isRegistered(modId)) { LibJf.LOGGER.warn("Overriding config class of " + modId + " to " + config); } configs.put(modId, config); config.getFilePath().ifPresent(path -> configsByPath.put(path, config)); } @Override public Map getRegistered() { return ImmutableMap.copyOf(configs); } @Override public ConfigInstance get(String configClass) { return configs.get(configClass); } @Override public ConfigInstance get(Path configPath) { return configsByPath.get(configPath); } @Override public boolean isRegistered(String modId) { return configs.containsKey(modId); } @Override public boolean isRegistered(Path configPath) { return configsByPath.containsKey(configPath); } }