CompleteConfig.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package me.lortseam.completeconfig;
  2. import lombok.NonNull;
  3. import lombok.extern.log4j.Log4j2;
  4. import me.lortseam.completeconfig.extensions.CompleteConfigExtension;
  5. import me.lortseam.completeconfig.extensions.clothbasicmath.ClothBasicMathExtension;
  6. import net.fabricmc.loader.api.FabricLoader;
  7. import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
  8. import java.lang.reflect.Constructor;
  9. import java.lang.reflect.InvocationTargetException;
  10. import java.util.Collection;
  11. import java.util.Collections;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. @Log4j2
  15. public final class CompleteConfig {
  16. private static final Map<String, CompleteConfigExtension> extensions = new HashMap<>();
  17. static {
  18. registerExternalExtension("cloth-basic-math", ClothBasicMathExtension.class);
  19. for (EntrypointContainer<CompleteConfigExtension> entrypoint : FabricLoader.getInstance().getEntrypointContainers("completeconfig-extension", CompleteConfigExtension.class)) {
  20. extensions.put(entrypoint.getProvider().getMetadata().getId(), entrypoint.getEntrypoint());
  21. }
  22. }
  23. public static void registerExternalExtension(@NonNull String modID, @NonNull Class<? extends CompleteConfigExtension> extensionClass) {
  24. if(!FabricLoader.getInstance().isModLoaded(modID)) return;
  25. try {
  26. Constructor<? extends CompleteConfigExtension> constructor = extensionClass.getDeclaredConstructor();
  27. if (!constructor.isAccessible()) {
  28. constructor.setAccessible(true);
  29. }
  30. extensions.put(modID, constructor.newInstance());
  31. } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
  32. logger.error("[CompleteConfig] Failed to instantiate extension " + modID, e);
  33. }
  34. }
  35. public static Collection<CompleteConfigExtension> getExtensions() {
  36. return Collections.unmodifiableCollection(extensions.values());
  37. }
  38. }