/* * Minecraft Forge * Copyright (c) 2016-2019. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation version 2.1 * of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package net.minecraftforge.fml; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.fml.config.ModConfig; import java.util.function.Supplier; public class ModLoadingContext { private static ThreadLocal context = ThreadLocal.withInitial(ModLoadingContext::new); private Object languageExtension; public static ModLoadingContext get() { return context.get(); } private ModContainer activeContainer; public void setActiveContainer(final ModContainer container, final Object languageExtension) { this.activeContainer = container; this.languageExtension = languageExtension; } public ModContainer getActiveContainer() { return activeContainer == null ? DefaultModContainers.MINECRAFT : activeContainer; } /** * Register an {@link ExtensionPoint} with the mod container. * @param point The extension point to register * @param extension An extension operator * @param The type signature of the extension operator */ public void registerExtensionPoint(ExtensionPoint point, Supplier extension) { getActiveContainer().registerExtensionPoint(point, extension); } public void registerConfig(ModConfig.Type type, ForgeConfigSpec spec) { getActiveContainer().addConfig(new ModConfig(type, spec, getActiveContainer())); } public void registerConfig(ModConfig.Type type, ForgeConfigSpec spec, String fileName) { getActiveContainer().addConfig(new ModConfig(type, spec, getActiveContainer(), fileName)); } @SuppressWarnings("unchecked") public T extension() { return (T)languageExtension; } }