ModController.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package me.lortseam.completeconfig;
  2. import lombok.AccessLevel;
  3. import lombok.Getter;
  4. import lombok.RequiredArgsConstructor;
  5. import me.lortseam.completeconfig.data.ColorEntry;
  6. import me.lortseam.completeconfig.util.TypeUtils;
  7. import net.fabricmc.loader.api.FabricLoader;
  8. import net.fabricmc.loader.api.ModContainer;
  9. import net.fabricmc.loader.api.metadata.ModMetadata;
  10. import org.spongepowered.configurate.serialize.TypeSerializerCollection;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
  14. public final class ModController {
  15. private static final Map<String, ModController> controllers = new HashMap<>();
  16. private static final TypeSerializerCollection GLOBAL_TYPE_SERIALIZERS = TypeSerializerCollection.builder()
  17. .registerExact(ColorEntry.TEXT_COLOR_SERIALIZER)
  18. .build();
  19. /**
  20. * Gets the mod controller of a loaded mod.
  21. *
  22. * @param id the ID of the mod
  23. * @return the corresponding mod controller
  24. */
  25. public static ModController of(String id) {
  26. ModMetadata metadata = FabricLoader.getInstance().getModContainer(id).map(ModContainer::getMetadata).orElseThrow(() -> {
  27. return new IllegalArgumentException("Mod " + id + " is not loaded");
  28. });
  29. if (!controllers.containsKey(metadata.getId())) {
  30. ModController controller = new ModController(metadata);
  31. controllers.put(metadata.getId(), controller);
  32. return controller;
  33. }
  34. return controllers.get(metadata.getId());
  35. }
  36. @Getter
  37. private final ModMetadata metadata;
  38. @Getter
  39. private TypeSerializerCollection typeSerializers = TypeSerializerCollection.builder().registerAll(GLOBAL_TYPE_SERIALIZERS).build();
  40. public String getID() {
  41. return metadata.getId();
  42. }
  43. public String getName() {
  44. return metadata.getName();
  45. }
  46. /**
  47. * Registers custom type serializers, applied to all following mod configs.
  48. *
  49. * @param typeSerializers the type serializers
  50. */
  51. public void registerTypeSerializers(TypeSerializerCollection typeSerializers) {
  52. this.typeSerializers = TypeUtils.mergeSerializers(this.typeSerializers, typeSerializers);
  53. }
  54. }