diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index e41654c337d..6df33ca9c01 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -131,4 +131,5 @@ A large number of machine feature interfaces have been removed, and have had the - Example usage: `SimpleCookingRecipeBuilder.campfireCooking("cooking_chicken").input(new ItemStack(Items.CHICKEN)).output(new ItemStacks(Items.COOKED_CHICKEN)).cookingTime(100).experience(100).save(provider);` - `GTFluidImpl` has been merged into `GTFluid`, use `GTFluid.Flowing` and `GTFluid.Source` instead of `GTFluidImpl.Flowing` and `GTFluidImpl.Source`. - Item behaviors have been moved to `common/item/behavior`, and some items have been moved from `api/item` to `common/item`. -- Changed the minimum value of the `compat.minimap.surfaceRockProspectRange` and `compat.minimap.oreBlockProspectRange` configs from -1 to 0. The behavior is still disabled with 0. \ No newline at end of file +- Changed the minimum value of the `compat.minimap.surfaceRockProspectRange` and `compat.minimap.oreBlockProspectRange` configs from -1 to 0. The behavior is still disabled with 0. +- All materials are now stored in a single registry, instead of a registry per addon. Replace references to `GTCEuAPI.materialManager` with `GTRegistries.MATERIALS`. \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java b/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java index e9bdd6edacf..e203cd914d2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java +++ b/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.addon.IGTAddon; import com.gregtechceu.gtceu.api.block.ICoilType; import com.gregtechceu.gtceu.api.block.IFilterType; -import com.gregtechceu.gtceu.api.data.chemical.material.IMaterialRegistryManager; import com.gregtechceu.gtceu.api.machine.multiblock.IBatteryData; import com.gregtechceu.gtceu.api.registry.GTRegistry; import com.gregtechceu.gtceu.common.block.BatteryBlock; @@ -28,8 +27,6 @@ public class GTCEuAPI { /** Will always be available */ public static GTCEu instance; - /** Will be available at the Construction stage */ - public static IMaterialRegistryManager materialManager; /** Will be available at the Pre-Initialization stage */ @Getter diff --git a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java index 7aa4eb45714..c7d6a23213c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java +++ b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java @@ -42,15 +42,6 @@ default void registerTagPrefixes() {} */ default void registerElements() {} - /** - * Call init on your custom Material class(es) here - * - * @deprecated use {@link com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialRegistryEvent} and - * {@link com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialEvent} instead. - */ - @Deprecated(forRemoval = true, since = "1.0.21") - default void registerMaterials() {} - /** * Call init on your custom Sound class(es) here */ diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java index 3cc568351df..414ae5b2168 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.api.data.chemical; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.ItemMaterialData; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidProperty; @@ -12,6 +11,7 @@ import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.data.tag.TagUtil; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTMaterials; import net.minecraft.MethodsReturnNonnullByDefault; @@ -97,7 +97,7 @@ public static MaterialStack getMaterialStack(ItemLike itemLike) { public static Material getMaterial(Fluid fluid) { if (FLUID_MATERIAL.isEmpty()) { Set> allFluidTags = BuiltInRegistries.FLUID.getTagNames().collect(Collectors.toSet()); - for (final Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + for (final Material material : GTRegistries.MATERIALS.values()) { if (material.hasProperty(PropertyKey.FLUID)) { FluidProperty property = material.getProperty(PropertyKey.FLUID); FluidStorageKey.allKeys().stream() @@ -209,7 +209,7 @@ public static MaterialEntry getMaterialEntry(TagKey tag) { // lookups. Set> allItemTags = BuiltInRegistries.ITEM.getTagNames().collect(Collectors.toSet()); for (TagPrefix prefix : TagPrefix.values()) { - for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + for (Material material : GTRegistries.MATERIALS.values()) { prefix.getItemTags(material).stream() .filter(allItemTags::contains) .forEach(tagKey -> { diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistryManager.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistryManager.java deleted file mode 100644 index b5a55466bac..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistryManager.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.gregtechceu.gtceu.api.data.chemical.material; - -import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; - -import net.minecraft.resources.ResourceLocation; - -import com.mojang.serialization.Codec; -import com.mojang.serialization.DataResult; -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; -import java.util.Optional; - -public interface IMaterialRegistryManager { - - /** - * Create a registry for a modid. Accessible when in phase {@link Phase#PRE}. - * - * @param modid the mod id for the registry - * @return the registry for the mod - */ - @NotNull - MaterialRegistry createRegistry(@NotNull String modid); - - /** - * Get a mod's registry. Accessible during all phases. - * - * @param modid the modid of the mod - * @return the registry associated with the mod, or the GregTech registry if it does not have one - */ - @NotNull - MaterialRegistry getRegistry(@NotNull String modid); - - /** - * Get a mod's registry. Accessible during all phases. - * - * @param networkId the network ID of the registry - * @return the registry associated with the network ID, or the GregTech registry if it does not have one - */ - @NotNull - MaterialRegistry getRegistry(int networkId); - - /** - * Accessible when in phases: - *
    - *
  • {@link Phase#OPEN}
  • - *
  • {@link Phase#CLOSED}
  • - *
  • {@link Phase#FROZEN}
  • - *
- * - * @return all the Material Registries - */ - @NotNull - Collection getRegistries(); - - /** - * Accessible when in phases: - *
    - *
  • {@link Phase#CLOSED}
  • - *
  • {@link Phase#FROZEN}
  • - *
- * - * @return all registered materials. - */ - @NotNull - Collection getRegisteredMaterials(); - - /** - * Get a material from a String in formats: - *
    - *
  • {@code "modid:registry_name"}
  • - *
  • {@code "registry_name"} - where modid is inferred to be {@link com.gregtechceu.gtceu.GTCEu#MOD_ID}
  • - *
- * - * Intended for use in reading/writing materials from/to NBT tags. - * - * @param name the name of the material in the above format - * @return the material associated with the name - */ - Material getMaterial(String name); - - Material getMaterial(ResourceLocation resourceLocation); - - ResourceLocation getKey(Material material); - - /** - * @return the current phase in the material registration process - * @see Phase - */ - @NotNull - Phase getPhase(); - - default boolean canModifyMaterials() { - return this.getPhase() != Phase.FROZEN && this.getPhase() != Phase.PRE; - } - - default Codec codec() { - return ResourceLocation.CODEC - .flatXmap( - id -> Optional.ofNullable(this.getRegistry(id.getNamespace()).get(id.getPath())) - .map(DataResult::success) - .orElseGet(() -> DataResult - .error(() -> "Unknown registry key in material registry: " + id)), - obj -> DataResult.success(obj.getResourceLocation())); - } - - enum Phase { - /** Material Registration and Modification is not started */ - PRE, - /** Material Registration and Modification is available */ - OPEN, - /** Material Registration is unavailable and only Modification is available */ - CLOSED, - /** Material Registration and Modification is unavailable */ - FROZEN - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java index 063d6addcb3..17c0074e4c2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.data.chemical.material; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.Element; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlag; @@ -16,6 +15,7 @@ import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; import com.gregtechceu.gtceu.api.item.tool.MaterialToolTier; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.BuilderBase; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTMedicalConditions; @@ -150,7 +150,7 @@ protected Material(ResourceLocation resourceLocation) { } protected void registerMaterial() { - GTCEuAPI.materialManager.getRegistry(getModid()).register(this); + GTRegistries.MATERIALS.register(getResourceLocation(), this); } public String getName() { @@ -176,7 +176,7 @@ public boolean shouldGenerateRecipesFor(@NotNull TagPrefix prefix) { } public void addFlags(MaterialFlag... flags) { - if (!GTCEuAPI.materialManager.canModifyMaterials()) + if (!GTRegistries.MATERIALS.canModifyMaterials()) throw new IllegalStateException("Cannot add flag to material when registry is frozen!"); this.flags.addFlags(flags).verify(this); } @@ -533,7 +533,7 @@ public void removeProperty(PropertyKey key) { } public void setProperty(PropertyKey key, IMaterialProperty property) { - if (!GTCEuAPI.materialManager.canModifyMaterials()) { + if (!GTRegistries.MATERIALS.canModifyMaterials()) { throw new IllegalStateException("Cannot add properties to a Material when registry is frozen!"); } properties.setProperty(key, property); @@ -1875,7 +1875,7 @@ public Material buildAndRegister() { @Override @HideFromJS - public Material register() { + public @NotNull Material register() { return value = buildAndRegister(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/event/MaterialRegistryEvent.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/event/MaterialRegistryEvent.java deleted file mode 100644 index 4749df8e1a5..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/event/MaterialRegistryEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.gregtechceu.gtceu.api.data.chemical.material.event; - -import com.gregtechceu.gtceu.api.data.chemical.material.IMaterialRegistryManager; - -import net.minecraftforge.eventbus.api.Event; -import net.minecraftforge.fml.event.IModBusEvent; - -/** - * Event to add a material registry in. - *
- * Material events are fired on the MOD bus as the forge bus isn't active until all mods have loaded. - * - * @see IMaterialRegistryManager#createRegistry(String) - */ -public class MaterialRegistryEvent extends Event implements IModBusEvent { - - public MaterialRegistryEvent() { - super(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java index 25e4d6a59d8..75123443bcf 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java @@ -1,58 +1,98 @@ package com.gregtechceu.gtceu.api.data.chemical.material.registry; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.addon.AddonFinder; -import com.gregtechceu.gtceu.api.addon.IGTAddon; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.registry.GTRegistry; -import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.common.registry.GTRegistration; +import com.gregtechceu.gtceu.common.data.GTMaterials; import net.minecraft.resources.ResourceLocation; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import lombok.Getter; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.UnmodifiableView; -import java.util.Collection; +import java.util.Set; -public abstract class MaterialRegistry extends GTRegistry.String { +public class MaterialRegistry extends GTRegistry.RL { @Getter - private final GTRegistrate registrate; + private final Set usedNamespaces = new ObjectOpenHashSet<>(); - public MaterialRegistry(java.lang.String modId) { - super(new ResourceLocation(modId, "material")); - IGTAddon addon = AddonFinder.getAddon(modId); - this.registrate = addon != null ? addon.getRegistrate() : - GTCEu.MOD_ID.equals(modId) ? GTRegistration.REGISTRATE : GTRegistrate.create(modId); - } + private Phase registrationPhase = Phase.PRE; - public abstract void register(Material material); + public MaterialRegistry() { + super(GTCEu.id("material")); + } - @NotNull - public abstract Collection getAllMaterials(); + public Material get(java.lang.String name) { + ResourceLocation location = ResourceLocation.tryParse(GTCEu.appendIdString(name)); + if (location != null) return get(location); + return GTMaterials.NULL; + } - /** - * Set the fallback material for this registry. - * This is only for manual fallback usage. - * - * @param material the fallback material - */ - public abstract void setFallbackMaterial(@NotNull Material material); + @Override + public T register(@NotNull ResourceLocation key, @NotNull T value) { + if (registrationPhase == Phase.CLOSED || registrationPhase == Phase.FROZEN) { + GTCEu.LOGGER.error( + "Materials cannot be registered in the PostMaterialEvent (or after)! Must be added in the MaterialEvent. Skipping material {}...", + key); + return null; + } + super.register(key, value); + usedNamespaces.add(key.getNamespace()); + return value; + } /** - * This is only for manual fallback usage. + * Accessible when in phases: + *
    + *
  • {@link Phase#CLOSED}
  • + *
  • {@link Phase#FROZEN}
  • + *
* - * @return the fallback material, used for when another material does not exist + * @return all registered materials. */ @NotNull - public abstract Material getFallbackMaterial(); + public @UnmodifiableView Set values() { + if (registrationPhase == Phase.PRE || registrationPhase == Phase.OPEN) + throw new IllegalStateException("Cannot retrieve all materials before registration"); + return super.values(); + } - /** - * @return the network ID for this registry - */ - public abstract int getNetworkId(); + public void closeRegistry() { + registrationPhase = Phase.CLOSED; + } + + @Override + public void freeze() { + super.freeze(); + registrationPhase = Phase.FROZEN; + } + + @Override + public void unfreeze() { + super.unfreeze(); + registrationPhase = Phase.OPEN; + } @NotNull - public abstract java.lang.String getModid(); + public Phase getPhase() { + return registrationPhase; + } + + public boolean canModifyMaterials() { + return getPhase() != Phase.FROZEN && getPhase() != Phase.PRE; + } + + public enum Phase { + /** Material Registration and Modification is not started */ + PRE, + /** Material Registration and Modification is available */ + OPEN, + /** Material Registration is unavailable and only Modification is available */ + CLOSED, + /** Material Registration and Modification is unavailable */ + FROZEN + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTLayerPattern.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTLayerPattern.java index 1e3f77f0b85..e2ce393ef5a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTLayerPattern.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTLayerPattern.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.api.data.worldgen; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.Block; @@ -84,7 +84,7 @@ public GTLayerPattern build() { public static class Layer { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.list(Codec.either(TargetBlockState.CODEC.listOf(), GTCEuAPI.materialManager.codec())) + Codec.list(Codec.either(TargetBlockState.CODEC.listOf(), GTRegistries.MATERIALS.codec())) .fieldOf("targets") .forGetter(layer -> layer.targets), Codec.intRange(0, Integer.MAX_VALUE) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/WeightedMaterial.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/WeightedMaterial.java index d2406a5a58b..c6aa5690de6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/WeightedMaterial.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/bedrockore/WeightedMaterial.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.data.worldgen.bedrockore; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.utils.WeightedEntry; import com.mojang.serialization.Codec; @@ -11,7 +11,7 @@ public record WeightedMaterial(Material material, int weight) implements Weighte public static final Codec CODEC = RecordCodecBuilder.create( instance -> instance.group( - GTCEuAPI.materialManager.codec().fieldOf("material").forGetter(WeightedMaterial::material), + GTRegistries.MATERIALS.codec().fieldOf("material").forGetter(WeightedMaterial::material), Codec.INT.fieldOf("weight").forGetter(WeightedMaterial::weight)) .apply(instance, WeightedMaterial::new)); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java index 6ea881caa33..5a05bdb55f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/indicators/SurfaceIndicatorGenerator.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.api.data.worldgen.generator.indicators; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.WorldGeneratorUtils; import com.gregtechceu.gtceu.api.data.worldgen.generator.IndicatorGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.GeneratedVeinMetadata; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreIndicatorPlacer; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import net.minecraft.MethodsReturnNonnullByDefault; @@ -50,7 +50,7 @@ public class SurfaceIndicatorGenerator extends IndicatorGenerator { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.either(BlockState.CODEC, GTCEuAPI.materialManager.codec()).fieldOf("block") + Codec.either(BlockState.CODEC, GTRegistries.MATERIALS.codec()).fieldOf("block") .forGetter(ext -> ext.block), IntProvider.codec(1, 32).fieldOf("radius").forGetter(ext -> ext.radius), FloatProvider.codec(0.0f, 2.0f).fieldOf("density").forGetter(ext -> ext.density), diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/ClassicVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/ClassicVeinGenerator.java index 37dd3c02296..9f5ed39de59 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/ClassicVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/ClassicVeinGenerator.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.api.data.worldgen.generator.veins; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; @@ -230,7 +230,7 @@ public ClassicVeinGenerator sporadic(Consumer builder) { public static class Layer { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.either(OreConfiguration.TargetBlockState.CODEC.listOf(), GTCEuAPI.materialManager.codec()) + Codec.either(OreConfiguration.TargetBlockState.CODEC.listOf(), GTRegistries.MATERIALS.codec()) .fieldOf("targets").forGetter(layer -> layer.target), ExtraCodecs.intRange(-1, Integer.MAX_VALUE).optionalFieldOf("layers", -1) .forGetter(layer -> layer.layers)) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java index 6d294d07826..46de33fa340 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/DikeVeinGenerator.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.api.data.worldgen.generator.veins; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.WeightedEntry; @@ -180,7 +180,7 @@ public record DikeBlockDefinition(Either, Material> block implements WeightedEntry { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.either(TargetBlockState.CODEC.listOf(), GTCEuAPI.materialManager.codec()).fieldOf("block") + Codec.either(TargetBlockState.CODEC.listOf(), GTRegistries.MATERIALS.codec()).fieldOf("block") .forGetter(x -> x.block), Codec.INT.fieldOf("weight").forGetter(x -> x.weight), Codec.INT.fieldOf("min_y").orElse(320).forGetter(x -> x.minY), diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java index b15a38b6f85..3d01a4249ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/GeodeVeinGenerator.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.api.data.worldgen.generator.veins; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import net.minecraft.Util; import net.minecraft.core.BlockPos; @@ -324,16 +324,16 @@ public record GeodeBlockSettings(Either fillingPro TagKey invalidBlocks, @NotNull TagPrefix providerMaterialPrefix) { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.either(BlockStateProvider.CODEC, GTCEuAPI.materialManager.codec()).fieldOf("filling_provider") + Codec.either(BlockStateProvider.CODEC, GTRegistries.MATERIALS.codec()).fieldOf("filling_provider") .forGetter(config -> config.fillingProvider), - Codec.either(BlockStateProvider.CODEC, GTCEuAPI.materialManager.codec()).fieldOf("inner_layer_provider") + Codec.either(BlockStateProvider.CODEC, GTRegistries.MATERIALS.codec()).fieldOf("inner_layer_provider") .forGetter(config -> config.innerLayerProvider), - Codec.either(BlockStateProvider.CODEC, GTCEuAPI.materialManager.codec()) + Codec.either(BlockStateProvider.CODEC, GTRegistries.MATERIALS.codec()) .fieldOf("alternate_inner_layer_provider") .forGetter(config -> config.alternateInnerLayerProvider), - Codec.either(BlockStateProvider.CODEC, GTCEuAPI.materialManager.codec()) + Codec.either(BlockStateProvider.CODEC, GTRegistries.MATERIALS.codec()) .fieldOf("middle_layer_provider").forGetter(config -> config.middleLayerProvider), - Codec.either(BlockStateProvider.CODEC, GTCEuAPI.materialManager.codec()).fieldOf("outer_layer_provider") + Codec.either(BlockStateProvider.CODEC, GTRegistries.MATERIALS.codec()).fieldOf("outer_layer_provider") .forGetter(config -> config.outerLayerProvider), ExtraCodecs.nonEmptyList(BlockState.CODEC.listOf()).fieldOf("inner_placements") .forGetter(config -> config.innerPlacements), diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java index 4a5e7860366..a2f82482d63 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/StandardVeinGenerator.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.api.data.worldgen.generator.veins; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; @@ -47,7 +47,7 @@ public class StandardVeinGenerator extends VeinGenerator { .apply(instance, StandardVeinGenerator::new)); public static final Codec CODEC_LIST = RecordCodecBuilder.create(instance -> instance.group( - Codec.either(OreConfiguration.TargetBlockState.CODEC.listOf(), GTCEuAPI.materialManager.codec()) + Codec.either(OreConfiguration.TargetBlockState.CODEC.listOf(), GTRegistries.MATERIALS.codec()) .fieldOf("targets").forGetter(ext -> ext.blocks)) .apply(instance, StandardVeinGenerator::new)); diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java index efcded6a955..502a12d15e4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/generator/veins/VeinedVeinGenerator.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.api.data.worldgen.generator.veins; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerator; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreBlockPlacer; import com.gregtechceu.gtceu.api.data.worldgen.ores.OreVeinUtil; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTFeatures; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.WeightedEntry; @@ -54,7 +54,7 @@ public class VeinedVeinGenerator extends VeinGenerator { public static final Codec, Material>> BLOCK_ENTRY_CODEC = Codec - .either(TargetBlockState.CODEC.listOf(), GTCEuAPI.materialManager.codec()); + .either(TargetBlockState.CODEC.listOf(), GTRegistries.MATERIALS.codec()); public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( VeinBlockDefinition.CODEC.listOf().fieldOf("ore_blocks").forGetter(it -> it.oreBlocks), diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java b/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java index 0a00d5a9c19..e84c7213a39 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/misc/ProspectorMode.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.gui.misc; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; @@ -10,6 +9,7 @@ import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.FluidVeinWorldEntry; import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreVeinSavedData; import com.gregtechceu.gtceu.api.gui.texture.ProspectingTexture; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.FormattingUtil; @@ -340,7 +340,7 @@ public void serialize(OreInfo item, FriendlyByteBuf buf) { public OreInfo deserialize(FriendlyByteBuf buf) { ResourceLocation materialId = buf.readResourceLocation(); return new OreInfo( - GTCEuAPI.materialManager.getRegistry(materialId.getNamespace()).get(materialId.getPath()), + GTRegistries.MATERIALS.get(materialId), buf.readVarInt(), buf.readVarInt(), buf.readVarInt()); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java index a42b600a203..17ec04169e5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.data.DimensionMarker; import com.gregtechceu.gtceu.api.data.chemical.Element; +import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.BedrockFluidDefinition; @@ -44,6 +45,9 @@ public final class GTRegistries { // GT Registry + + public static final MaterialRegistry MATERIALS = new MaterialRegistry(); + public static final GTRegistry.String ELEMENTS = new GTRegistry.String<>(GTCEu.id("element")); public static final GTRegistry.RL RECIPE_TYPES = new GTRegistry.RL<>(GTCEu.id("recipe_type")); diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 251bc5b670c..13461e0b085 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -25,8 +25,10 @@ import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.javafmlmod.FMLModContainer; import net.minecraftforge.registries.RegisterEvent; import net.minecraftforge.registries.RegistryObject; @@ -40,11 +42,13 @@ import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullFunction; import com.tterrag.registrate.util.nullness.NonNullSupplier; -import org.jetbrains.annotations.NotNull; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import java.util.IdentityHashMap; import java.util.Map; +import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.BiFunction; import java.util.function.Consumer; @@ -57,27 +61,83 @@ @MethodsReturnNonnullByDefault public class GTRegistrate extends AbstractRegistrate { + private static final Map EXISTING_REGISTRATES = new Object2ObjectOpenHashMap<>(); + private final AtomicBoolean registered = new AtomicBoolean(false); protected GTRegistrate(String modId) { super(modId); } - public static IGTFluidBuilder fluid(GTRegistrate parent, Material material, String name, String langKey, - ResourceLocation stillTexture, ResourceLocation flowingTexture) { - return parent.entry(name, - callback -> new GTFluidBuilder<>(parent, parent, material, name, langKey, callback, stillTexture, - flowingTexture, GTFluidBuilder::defaultFluidType).defaultLang().defaultSource() - .setData(ProviderType.LANG, NonNullBiConsumer.noop())); + public ResourceLocation makeResourceLocation(String path) { + return new ResourceLocation(this.getModid(), path); } - @NotNull + /** + * Get or create a new {@link GTRegistrate} and register event listeners for registration and data generation. + * A new {@code GTRegistrate} instance is only made if one doesn't already exist in the cache. + * + * @param modId The mod ID for which objects will be registered + * @return The {@link GTRegistrate} instance + */ public static GTRegistrate create(String modId) { - return new GTRegistrate(modId); + return create(modId, true); } - public void registerRegistrate() { - registerEventListeners(FMLJavaModLoadingContext.get().getModEventBus()); + /** + * Get or create a new {@link GTRegistrate} and conditionally register event listeners. + * A new {@code GTRegistrate} instance is only made if one doesn't already exist in the cache. + *
+ * Note that if you do not allow event listeners to be registered automatically, you must + * call {@link #registerEventListeners(IEventBus)} yourself with your {@link IEventBus mod event bus}. + * + * @param modId The mod ID for which objects will be registered + * @param registerEvents Whether to register required event listeners. + * @return The {@link GTRegistrate} instance + */ + public static GTRegistrate create(String modId, boolean registerEvents) { + return innerCreate(modId, registerEvents, registerEvents); + } + + /** + * Get or create a new {@link GTRegistrate} and register event listeners for registration and data generation. + * A new {@code GTRegistrate} instance is only made if one doesn't already exist in the cache. + *
+ * Completely skips all mod id validity messages and defaults to GT's bus instead. ADDON DEVS DO NOT USE. + * + * @param modId The mod ID for which objects will be registered + * @return The {@link GTRegistrate} instance + */ + @ApiStatus.Internal + public static GTRegistrate createIgnoringListenerErrors(String modId) { + return innerCreate(modId, true, false); + } + + private static GTRegistrate innerCreate(String modId, boolean registerEvents, boolean requireValidEventBus) { + var existing = EXISTING_REGISTRATES.get(modId); + if (existing != null) return existing; + var registrate = new GTRegistrate(modId); + + if (registerEvents) { + Optional modEventBus = ModList.get().getModContainerById(modId) + .filter(FMLModContainer.class::isInstance) + .map(FMLModContainer.class::cast) + .map(FMLModContainer::getEventBus); + if (requireValidEventBus) { + modEventBus.ifPresentOrElse(registrate::registerEventListeners, () -> { + String message = "# [GTRegistrate] Failed to register eventListeners for mod " + modId + + ", This should be reported to this mod's dev #"; + String hashtags = "#".repeat(message.length()); + GTCEu.LOGGER.fatal(hashtags); + GTCEu.LOGGER.fatal(message); + GTCEu.LOGGER.fatal(hashtags); + }); + } else { + registrate.registerEventListeners(modEventBus.orElse(FMLJavaModLoadingContext.get().getModEventBus())); + } + } + EXISTING_REGISTRATES.put(modId, registrate); + return registrate; } @Override @@ -116,7 +176,10 @@ protected

NoConfigBuilder createCreativ public IGTFluidBuilder createFluid(String name, String langKey, Material material, ResourceLocation stillTexture, ResourceLocation flowingTexture) { - return fluid(this, material, name, langKey, stillTexture, flowingTexture); + return entry(name, + callback -> new GTFluidBuilder<>(this, this, material, name, langKey, callback, stillTexture, + flowingTexture, GTFluidBuilder::defaultFluidType).defaultLang().defaultSource() + .setData(ProviderType.LANG, NonNullBiConsumer.noop())); } public MachineBuilder machine(String name, diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java index 0f1b5a75b6c..d568c17b031 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.sync_system.data_transformers; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -194,7 +193,7 @@ public static void registerTransformerSupplier(Class type, Supplier( GTRecipeType::getRegistryName, GTRegistries.RECIPE_TYPES::get)); registerTransformer(Material.class, new ResourceLocationReferenceTransformer<>( - Material::getResourceLocation, GTCEuAPI.materialManager::getMaterial)); + Material::getResourceLocation, GTRegistries.MATERIALS::get)); registerTransformer(MonitorGroup.class, new MonitorGroupTransformer()); registerTransformer(CoverBehavior.class, new CoverBehaviorTransformer()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index aa13751d7bd..354ff71ba48 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.BlockAttributes; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; @@ -548,7 +547,7 @@ public static void modifyBreakSpeed(PlayerEvent.BreakSpeed event) { @SubscribeEvent public static void addAlloyBlastProperties(PostMaterialEvent event) { - for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + for (Material material : GTRegistries.MATERIALS.values()) { if (!material.hasFlag(MaterialFlags.DISABLE_ALLOY_PROPERTY)) { addAlloyBlastProperty(material); } @@ -720,7 +719,7 @@ public static void remapIds(MissingMappingsEvent event) { Matcher matcher = idPattern.matcher(mapping.getKey().getPath()); if (matcher.matches()) { BlockEntry block = GTMaterialBlocks.MATERIAL_BLOCKS.get(prefix, - GTCEuAPI.materialManager.getRegistry(GTCEu.MOD_ID).get(matcher.group(1))); + GTRegistries.MATERIALS.get(GTCEu.id(matcher.group(1)))); if (block != null && block.isPresent()) { mapping.remap(block.get()); } @@ -730,12 +729,12 @@ public static void remapIds(MissingMappingsEvent event) { Matcher matcher = idPattern.matcher(mapping.getKey().getPath()); if (matcher.matches()) { BlockEntry block = GTMaterialBlocks.MATERIAL_BLOCKS.get(prefix, - GTCEuAPI.materialManager.getRegistry(GTCEu.MOD_ID).get(matcher.group(1))); + GTRegistries.MATERIALS.get(GTCEu.id(matcher.group(1)))); if (block != null && block.isPresent()) { mapping.remap(block.asItem()); } else { ItemEntry item = GTMaterialItems.MATERIAL_ITEMS.get(prefix, - GTCEuAPI.materialManager.getRegistry(GTCEu.MOD_ID).get(matcher.group(1))); + GTRegistries.MATERIALS.get(GTCEu.id(matcher.group(1)))); if (item != null && item.isPresent()) { mapping.remap(item.asItem()); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index ccd0d830521..3f05df69dae 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -8,7 +8,6 @@ import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialEvent; -import com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialRegistryEvent; import com.gregtechceu.gtceu.api.data.chemical.material.event.PostMaterialEvent; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialIconSet; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialIconType; @@ -25,6 +24,7 @@ import com.gregtechceu.gtceu.api.recipe.lookup.ingredient.fluid.*; import com.gregtechceu.gtceu.api.recipe.lookup.ingredient.item.*; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.common.data.*; import com.gregtechceu.gtceu.common.data.GTPlaceholders; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; @@ -33,8 +33,6 @@ import com.gregtechceu.gtceu.common.machine.multiblock.electric.FusionReactorMachine; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.network.GTNetwork; -import com.gregtechceu.gtceu.common.registry.GTRegistration; -import com.gregtechceu.gtceu.common.unification.material.MaterialRegistryManager; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; import com.gregtechceu.gtceu.data.GregTechDatagen; @@ -71,12 +69,10 @@ import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoader; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLConstructModEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.javafmlmod.FMLModContainer; import net.minecraftforge.registries.RegisterEvent; import com.google.common.collect.Multimaps; @@ -93,9 +89,6 @@ public CommonProxy() { // used for forge events (ClientProxy + CommonProxy) IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); eventBus.register(this); - // must be set here because of KubeJS compat - // trying to read this before the pre-init stage - GTCEuAPI.materialManager = MaterialRegistryManager.getInstance(); ConfigHolder.init(); GTCEuAPI.initializeHighTier(); if (GTCEu.isDev()) { @@ -158,32 +151,25 @@ public static void init() { WaypointManager.init(); AddonFinder.getAddons().forEach(IGTAddon::initializeAddon); - GTRegistration.REGISTRATE.registerRegistrate(); - GregTechDatagen.initPost(); // Register all material manager registries, for materials with mod ids. - GTCEuAPI.materialManager.getRegistries().forEach(registry -> { + GTRegistries.MATERIALS.forEach(material -> { + var location = material.getResourceLocation(); // Force the material lang generator to be at index 0, so that addons' lang generators can override it. - AbstractRegistrateAccessor accessor = (AbstractRegistrateAccessor) registry.getRegistrate(); + var registrate = GTRegistrate.createIgnoringListenerErrors(location.getNamespace()); + AbstractRegistrateAccessor accessor = (AbstractRegistrateAccessor) registrate; if (accessor.getDoDatagen().get()) { // noinspection UnstableApiUsage List> providers = Multimaps.asMap(accessor.getDatagens()) .get(ProviderType.LANG); NonNullConsumer generator = (provider) -> MaterialLangGenerator - .generate((RegistrateLangProvider) provider, registry); + .generate((RegistrateLangProvider) provider, location.getNamespace()); if (providers == null) { accessor.getDatagens().put(ProviderType.LANG, generator); } else { providers.add(0, generator); } } - - registry.getRegistrate() - .registerEventListeners(ModList.get().getModContainerById(registry.getModid()) - .filter(FMLModContainer.class::isInstance) - .map(FMLModContainer.class::cast) - .map(FMLModContainer::getEventBus) - .orElse(FMLJavaModLoadingContext.get().getModEventBus())); }); WorldGenLayers.registerAll(); @@ -203,19 +189,10 @@ public static void init() { } private static void initMaterials() { - // First, register other mods' Registries - MaterialRegistryManager managerInternal = (MaterialRegistryManager) GTCEuAPI.materialManager; - - GTCEu.LOGGER.info("Registering material registries"); - ModLoader.get().postEvent(new MaterialRegistryEvent()); - // First, register CEu Materials - managerInternal.unfreezeRegistries(); + GTRegistries.MATERIALS.unfreeze(); GTCEu.LOGGER.info("Registering GTCEu Materials"); GTMaterials.init(); - MaterialRegistryManager.getInstance() - .getRegistry(GTCEu.MOD_ID) - .setFallbackMaterial(GTMaterials.Aluminium); // Then, register addon Materials GTCEu.LOGGER.info("Registering addon Materials"); @@ -227,14 +204,14 @@ private static void initMaterials() { // Fire Post-Material event, intended for when Materials need to be iterated over in-full before freezing // Block entirely new Materials from being added in the Post event - managerInternal.closeRegistries(); + GTRegistries.MATERIALS.closeRegistry(); ModLoader.get().postEvent(new PostMaterialEvent()); if (GTCEu.Mods.isKubeJSLoaded()) { KJSEventWrapper.materialModification(); } // Freeze Material Registry before processing Items, Blocks, and Fluids - managerInternal.freezeRegistries(); + GTRegistries.MATERIALS.freeze(); /* End Material Registration */ } @@ -332,7 +309,7 @@ public void registerPackFinders(AddPackFindersEvent event) { public static final class KJSEventWrapper { public static void materialRegistry() { - GTRegistryInfo.registerFor(GTCEuAPI.materialManager.getRegistry(GTCEu.MOD_ID).getRegistryName()); + GTRegistryInfo.registerFor(GTRegistries.MATERIALS.getRegistryName()); } public static void materialModification() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialArgument.java b/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialArgument.java index b752292f67f..94fa8826d92 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialArgument.java +++ b/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialArgument.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.commands.arguments; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; @@ -26,7 +26,7 @@ public static MaterialArgument material() { @Override public Material parse(StringReader reader) throws CommandSyntaxException { - return MaterialParser.parseForMaterial(GTCEuAPI.materialManager, reader); + return MaterialParser.parseForMaterial(GTRegistries.MATERIALS, reader); } public static Material getMaterial(CommandContext context, String name) { @@ -35,7 +35,7 @@ public static Material getMaterial(CommandContext context, String name) { @Override public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { - return MaterialParser.fillSuggestions(GTCEuAPI.materialManager, builder); + return MaterialParser.fillSuggestions(GTRegistries.MATERIALS, builder); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialParser.java b/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialParser.java index 1fd78749b78..efcf1c84fd1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialParser.java +++ b/src/main/java/com/gregtechceu/gtceu/common/commands/arguments/MaterialParser.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.commands.arguments; -import com.gregtechceu.gtceu.api.data.chemical.material.IMaterialRegistryManager; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; import net.minecraft.commands.SharedSuggestionProvider; import net.minecraft.network.chat.Component; @@ -28,7 +28,7 @@ public class MaterialParser { private static final char SYNTAX_START_NBT = '{'; private static final char SYNTAX_TAG = '#'; private static final Function> SUGGEST_NOTHING = SuggestionsBuilder::buildFuture; - private final IMaterialRegistryManager materials; + private final MaterialRegistry materials; private final StringReader reader; private Material result; /** @@ -36,12 +36,12 @@ public class MaterialParser { */ private Function> suggestions = SUGGEST_NOTHING; - private MaterialParser(IMaterialRegistryManager materials, StringReader reader) { + private MaterialParser(MaterialRegistry materials, StringReader reader) { this.materials = materials; this.reader = reader; } - public static Material parseForMaterial(IMaterialRegistryManager registry, + public static Material parseForMaterial(MaterialRegistry registry, StringReader reader) throws CommandSyntaxException { int i = reader.getCursor(); @@ -55,7 +55,7 @@ public static Material parseForMaterial(IMaterialRegistryManager registry, } } - public static CompletableFuture fillSuggestions(IMaterialRegistryManager lookup, + public static CompletableFuture fillSuggestions(MaterialRegistry lookup, SuggestionsBuilder builder) { StringReader stringReader = new StringReader(builder.getInput()); stringReader.setCursor(builder.getStart()); @@ -72,7 +72,7 @@ private void readMaterial() throws CommandSyntaxException { int i = this.reader.getCursor(); ResourceLocation id = ResourceLocation.read(this.reader); - Material material = this.materials.getRegistry(id.getNamespace()).get(id.getPath()); + Material material = materials.get(id); if (material == null || material.isNull()) { this.reader.setCursor(i); throw ERROR_UNKNOWN_ITEM.createWithContext(this.reader, id); @@ -87,6 +87,6 @@ private void parse() throws CommandSyntaxException { private CompletableFuture suggestMaterial(SuggestionsBuilder builder) { return SharedSuggestionProvider.suggestResource( - this.materials.getRegisteredMaterials().stream().map(Material::getResourceLocation), builder); + materials.values().stream().map(Material::getResourceLocation), builder); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java index db7b5d1a282..0bfb28de312 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java @@ -1,11 +1,10 @@ package com.gregtechceu.gtceu.common.data; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.common.fluid.potion.PotionFluid; import com.gregtechceu.gtceu.data.recipe.CustomTags; @@ -40,14 +39,11 @@ public static void init() { // register fluids for materials REGISTRATE.creativeModeTab(() -> GTCreativeModeTabs.MATERIAL_FLUID); - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (var material : registry.getAllMaterials()) { - var fluidProperty = material.getProperty(PropertyKey.FLUID); + for (var material : GTRegistries.MATERIALS.values()) { + var fluidProperty = material.getProperty(PropertyKey.FLUID); - if (fluidProperty != null) { - fluidProperty.registerFluids(material, registrate); - } + if (fluidProperty != null) { + fluidProperty.registerFluids(material, GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialBlocks.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialBlocks.java index 7600b448de6..4c21ff2b8a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialBlocks.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialBlocks.java @@ -1,16 +1,15 @@ package com.gregtechceu.gtceu.common.data; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.block.MaterialBlock; import com.gregtechceu.gtceu.api.block.MaterialPipeBlock; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.item.MaterialBlockItem; import com.gregtechceu.gtceu.api.item.MaterialPipeBlockItem; import com.gregtechceu.gtceu.api.item.SurfaceRockBlockItem; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.common.block.*; import com.gregtechceu.gtceu.common.pipelike.cable.Insulation; @@ -59,12 +58,10 @@ public static void generateMaterialBlocks() { for (TagPrefix tagPrefix : TagPrefix.values()) { if (!TagPrefix.ORES.containsKey(tagPrefix) && tagPrefix.doGenerateBlock()) { - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (tagPrefix.doGenerateBlock(material)) { - registerMaterialBlock(tagPrefix, material, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (tagPrefix.doGenerateBlock(material)) { + registerMaterialBlock(tagPrefix, material, + GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } @@ -94,12 +91,9 @@ private static void registerMaterialBlock(TagPrefix tagPrefix, Material material // Material Ore Blocks public static void generateOreBlocks() { GTCEu.LOGGER.debug("Generating GTCEu Ore Blocks..."); - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (allowOreBlock(material)) { - registerOreBlock(material, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (allowOreBlock(material)) { + registerOreBlock(material, GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } GTCEu.LOGGER.debug("Generating GTCEu Ore Blocks... Complete!"); @@ -145,12 +139,9 @@ private static void registerOreBlock(Material material, GTRegistrate registrate) // Material Ore Indicator Piles public static void generateOreIndicators() { GTCEu.LOGGER.debug("Generating GTCEu Surface Rock Indicator Blocks..."); - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (allowOreIndicator(material)) { - registerOreIndicator(material, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (allowOreIndicator(material)) { + registerOreIndicator(material, GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } SURFACE_ROCK_BLOCKS = SURFACE_ROCK_BLOCKS_BUILDER.build(); @@ -184,12 +175,10 @@ private static void registerOreIndicator(Material material, GTRegistrate registr public static void generateCableBlocks() { GTCEu.LOGGER.debug("Generating GTCEu Cable/Wire Blocks..."); for (Insulation insulation : Insulation.values()) { - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (allowCableBlock(material, insulation)) { - registerCableBlock(material, insulation, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (allowCableBlock(material, insulation)) { + registerCableBlock(material, insulation, + GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } @@ -227,12 +216,10 @@ private static void registerCableBlock(Material material, Insulation insulation, public static void generateFluidPipeBlocks() { GTCEu.LOGGER.debug("Generating GTCEu Fluid Pipe Blocks..."); for (var fluidPipeType : FluidPipeType.values()) { - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (allowFluidPipeBlock(material, fluidPipeType)) { - registerFluidPipeBlock(material, fluidPipeType, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (allowFluidPipeBlock(material, fluidPipeType)) { + registerFluidPipeBlock(material, fluidPipeType, + GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } @@ -275,12 +262,10 @@ private static void registerFluidPipeBlock(Material material, FluidPipeType flui public static void generateItemPipeBlocks() { GTCEu.LOGGER.debug("Generating GTCEu Item Pipe Blocks..."); for (var itemPipeType : ItemPipeType.values()) { - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (allowItemPipeBlock(material, itemPipeType)) { - registerItemPipeBlock(material, itemPipeType, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (allowItemPipeBlock(material, itemPipeType)) { + registerItemPipeBlock(material, itemPipeType, + GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialItems.java index 64f9ceb1bd7..ff9e9cc4c2b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterialItems.java @@ -1,15 +1,14 @@ package com.gregtechceu.gtceu.common.data; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlags; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.item.IGTTool; import com.gregtechceu.gtceu.api.item.TagPrefixItem; import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.common.item.armor.GTArmorItem; import com.gregtechceu.gtceu.common.item.armor.GTDyeableArmorItem; @@ -56,12 +55,12 @@ public class GTMaterialItems { // Reference Tables public static Table> MATERIAL_ITEMS; public static final Table> TOOL_ITEMS = ArrayTable.create( - GTCEuAPI.materialManager.getRegisteredMaterials().stream() + GTRegistries.MATERIALS.values().stream() .filter(mat -> mat.hasProperty(PropertyKey.TOOL)) .toList(), GTToolType.getTypes().values().stream().toList()); public static final Table> ARMOR_ITEMS = ArrayTable.create( - GTCEuAPI.materialManager.getRegisteredMaterials().stream() + GTRegistries.MATERIALS.values().stream() .filter(mat -> mat.hasProperty(PropertyKey.ARMOR)) .toList(), Arrays.asList(ArmorItem.Type.values())); @@ -71,12 +70,10 @@ public static void generateMaterialItems() { REGISTRATE.creativeModeTab(() -> MATERIAL_ITEM); for (var tagPrefix : TagPrefix.values()) { if (tagPrefix.doGenerateItem()) { - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (tagPrefix.doGenerateItem(material)) { - generateMaterialItem(tagPrefix, material, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (tagPrefix.doGenerateItem(material)) { + generateMaterialItem(tagPrefix, material, + GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } @@ -103,14 +100,12 @@ private static void generateMaterialItem(TagPrefix tagPrefix, Material material, public static void generateTools() { REGISTRATE.creativeModeTab(() -> TOOL); for (GTToolType toolType : GTToolType.getTypes().values()) { - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (material.hasProperty(PropertyKey.TOOL)) { - var property = material.getProperty(PropertyKey.TOOL); - if (property.hasType(toolType)) { - generateTool(material, toolType, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (material.hasProperty(PropertyKey.TOOL)) { + var property = material.getProperty(PropertyKey.TOOL); + if (property.hasType(toolType)) { + generateTool(material, toolType, + GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } @@ -135,12 +130,9 @@ private static void generateTool(Material material, GTToolType toolType, GTRegis public static void generateArmors() { REGISTRATE.creativeModeTab(() -> TOOL); for (ArmorItem.Type type : ArmorItem.Type.values()) { - for (MaterialRegistry registry : GTCEuAPI.materialManager.getRegistries()) { - GTRegistrate registrate = registry.getRegistrate(); - for (Material material : registry.getAllMaterials()) { - if (material.hasProperty(PropertyKey.ARMOR)) { - generateArmor(material, type, registrate); - } + for (Material material : GTRegistries.MATERIALS.values()) { + if (material.hasProperty(PropertyKey.ARMOR)) { + generateArmor(material, type, GTRegistrate.createIgnoringListenerErrors(material.getModid())); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java index a4fb7dad431..f8043257a6c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java @@ -1,13 +1,13 @@ package com.gregtechceu.gtceu.common.data; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.MarkerMaterial; import com.gregtechceu.gtceu.api.data.chemical.material.MarkerMaterials; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlag; import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialStack; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.materials.*; import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; @@ -272,7 +272,7 @@ public static void init() { @NotNull public static Material get(String name) { - var mat = GTCEuAPI.materialManager.getMaterial(name); + var mat = GTRegistries.MATERIALS.get(name); // material could be null here due to the registry grabbing a material that isn't in the map if (mat == null) { GTCEu.LOGGER.warn("{} is not a known Material", name); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipes.java index b6197f6adec..eca7dcea107 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipes.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.common.data; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.addon.AddonFinder; import com.gregtechceu.gtceu.api.data.chemical.material.ItemMaterialData; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlags; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.data.recipe.MaterialInfoLoader; import com.gregtechceu.gtceu.data.recipe.configurable.RecipeAddition; import com.gregtechceu.gtceu.data.recipe.configurable.RecipeRemoval; @@ -51,7 +51,7 @@ public static void recipeAddition(Consumer originalConsumer) { MaterialInfoLoader.init(); // com.gregtechceu.gtceu.data.recipe.generated.* - for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + for (Material material : GTRegistries.MATERIALS.values()) { if (material.hasFlag(MaterialFlags.NO_UNIFICATION) || material.hasFlag(MaterialFlags.DISABLE_MATERIAL_RECIPES)) { continue; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTModels.java b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTModels.java index 12fe1cbfa01..c08f6dfe332 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTModels.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTModels.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common.data.models; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.block.*; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialIconSet; @@ -10,6 +9,7 @@ import com.gregtechceu.gtceu.api.fluids.store.FluidStorage; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; import com.gregtechceu.gtceu.api.machine.multiblock.IBatteryData; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.common.block.*; import com.gregtechceu.gtceu.core.MixinHelpers; @@ -297,7 +297,7 @@ public static void createPipeBlockModel(DataGenContext items) { - for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + for (Material material : GTRegistries.MATERIALS.values()) { if (!material.shouldGenerateRecipesFor(turbineBlade) || !material.hasProperty(PropertyKey.INGOT)) { continue; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryImpl.java b/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryImpl.java deleted file mode 100644 index 97caae9df6a..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryImpl.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.gregtechceu.gtceu.common.unification.material; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; -import com.gregtechceu.gtceu.common.data.GTMaterials; - -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; - -public class MaterialRegistryImpl extends MaterialRegistry { - - private static int networkIdCounter; - - private final int networkId = networkIdCounter++; - private final java.lang.String modid; - - private boolean isRegistryClosed = false; - @NotNull - private Material fallbackMaterial = GTMaterials.NULL; - - protected MaterialRegistryImpl(@NotNull java.lang.String modid) { - super(modid); - this.modid = modid; - } - - @Override - public void register(Material material) { - this.register(material.getName(), material); - } - - @Override - public T register(@NotNull java.lang.String key, @NotNull T value) { - if (isRegistryClosed) { - GTCEu.LOGGER.error( - "Materials cannot be registered in the PostMaterialEvent (or after)! Must be added in the MaterialEvent. Skipping material {}...", - key); - return null; - } - super.register(key, value); - return value; - } - - @NotNull - @Override - public Collection getAllMaterials() { - return this.values(); - } - - @Override - public void setFallbackMaterial(@NotNull Material material) { - this.fallbackMaterial = material; - } - - @NotNull - @Override - public Material getFallbackMaterial() { - if (this.fallbackMaterial.isNull()) { - this.fallbackMaterial = MaterialRegistryManager.getInstance().getDefaultFallback(); - } - return this.fallbackMaterial; - } - - @Override - public int getNetworkId() { - return this.networkId; - } - - @NotNull - @Override - public java.lang.String getModid() { - return this.modid; - } - - public void closeRegistry() { - this.isRegistryClosed = true; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryManager.java b/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryManager.java deleted file mode 100644 index 88836ecc457..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryManager.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.gregtechceu.gtceu.common.unification.material; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.data.chemical.material.IMaterialRegistryManager; -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.chemical.material.registry.MaterialRegistry; -import com.gregtechceu.gtceu.common.data.GTMaterials; - -import net.minecraft.resources.ResourceLocation; - -import com.google.common.base.Preconditions; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -public final class MaterialRegistryManager implements IMaterialRegistryManager { - - private static MaterialRegistryManager INSTANCE; - - private final Object2ObjectMap registries = new Object2ObjectOpenHashMap<>(); - private final Int2ObjectMap networkIds = new Int2ObjectOpenHashMap<>(); - - @Nullable - private Collection registeredMaterials; - - private final MaterialRegistryImpl gregtechRegistry = createInternalRegistry(); - - private Phase registrationPhase = Phase.PRE; - - private MaterialRegistryManager() {} - - public static MaterialRegistryManager getInstance() { - if (INSTANCE == null) { - INSTANCE = new MaterialRegistryManager(); - } - return INSTANCE; - } - - @NotNull - @Override - public MaterialRegistry createRegistry(@NotNull String modid) { - if (getPhase() != Phase.PRE) { - throw new IllegalStateException("Cannot create registries in phase " + getPhase()); - } - - Preconditions.checkArgument(!registries.containsKey(modid), - "Material registry already exists for modid %s", modid); - MaterialRegistryImpl registry = new MaterialRegistryImpl(modid); - registries.put(modid, registry); - networkIds.put(registry.getNetworkId(), registry); - return registry; - } - - @NotNull - @Override - public MaterialRegistry getRegistry(@NotNull String modid) { - MaterialRegistry registry = registries.get(modid); - return registry != null ? registry : gregtechRegistry; - } - - @NotNull - @Override - public MaterialRegistry getRegistry(int networkId) { - MaterialRegistry registry = networkIds.get(networkId); - return registry != null ? registry : gregtechRegistry; - } - - @NotNull - @Override - public Collection getRegistries() { - if (getPhase() == Phase.PRE) { - throw new IllegalStateException("Cannot get all material registries during phase " + getPhase()); - } - return Collections.unmodifiableCollection(registries.values()); - } - - @NotNull - @Override - public Collection getRegisteredMaterials() { - if (registeredMaterials == null || - (getPhase() != Phase.CLOSED && getPhase() != Phase.FROZEN)) { - throw new IllegalStateException("Cannot retrieve all materials before registration"); - } - return registeredMaterials; - } - - @Override - public Material getMaterial(@NotNull String name) { - if (!name.isEmpty()) { - String modid; - String materialName; - int index = name.indexOf(':'); - if (index >= 0) { - modid = name.substring(0, index); - materialName = name.substring(index + 1); - } else { - modid = GTCEu.MOD_ID; - materialName = name; - } - return getRegistry(modid).get(materialName); - } - return GTMaterials.NULL; - } - - @Override - public Material getMaterial(ResourceLocation resourceLocation) { - return getRegistry(resourceLocation.getNamespace()).get(resourceLocation.getPath()); - } - - @Override - public ResourceLocation getKey(Material material) { - return material.getResourceLocation(); - } - - @NotNull - @Override - public Phase getPhase() { - return registrationPhase; - } - - public void unfreezeRegistries() { - registries.values().forEach(MaterialRegistryImpl::unfreeze); - registrationPhase = Phase.OPEN; - } - - public void closeRegistries() { - registries.values().forEach(MaterialRegistryImpl::closeRegistry); - Collection collection = new ArrayList<>(); - for (MaterialRegistry registry : registries.values()) { - collection.addAll(registry.getAllMaterials()); - } - registeredMaterials = Collections.unmodifiableCollection(collection); - registrationPhase = Phase.CLOSED; - } - - public void freezeRegistries() { - registries.values().forEach(MaterialRegistryImpl::freeze); - registrationPhase = Phase.FROZEN; - } - - @NotNull - private MaterialRegistryImpl createInternalRegistry() { - MaterialRegistryImpl registry = new MaterialRegistryImpl(GTCEu.MOD_ID); - this.registries.put(GTCEu.MOD_ID, registry); - return registry; - } - - @NotNull - public Material getDefaultFallback() { - return gregtechRegistry.getFallbackMaterial(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java b/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java index 26da2a0bc53..151d5f293bb 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java +++ b/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.core; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.ItemMaterialData; @@ -124,7 +123,7 @@ public static void generateGTDynamicTags(Map void generateGTDynamicTags(Map material.hasProperty(PropertyKey.ORE) && !material.hasFlag(MaterialFlags.NO_ORE_PROCESSING_TAB)) .map(GTOreProcessingInfoWrapper::new) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTRegistryInfo.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTRegistryInfo.java index 1b9310443f2..b995d5559d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTRegistryInfo.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTRegistryInfo.java @@ -16,7 +16,6 @@ import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.GTRegistry; import com.gregtechceu.gtceu.api.registry.registrate.BuilderBase; -import com.gregtechceu.gtceu.common.unification.material.MaterialRegistryManager; import com.gregtechceu.gtceu.integration.kjs.built.KJSTagPrefix; import com.gregtechceu.gtceu.integration.kjs.events.GTRegistryEventJS; @@ -48,8 +47,8 @@ public record BuilderType(String type, Class> ALL_BUILDERS = new ArrayList<>(); public static final GTRegistryInfo ELEMENT = add(GTRegistries.ELEMENTS, Element.class); - public static final GTRegistryInfo MATERIAL = add( - MaterialRegistryManager.getInstance().getRegistry(GTCEu.MOD_ID), Material.class); + public static final GTRegistryInfo MATERIAL = add(GTRegistries.MATERIALS, + Material.class); public static final GTRegistryInfo RECIPE_TYPE = add(GTRegistries.RECIPE_TYPES, GTRecipeType.class); public static final GTRegistryInfo RECIPE_CATEGORY = add( diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index e007aa4151b..d7f0e4a5f3c 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -70,7 +70,6 @@ import com.gregtechceu.gtceu.common.data.models.GTModels; import com.gregtechceu.gtceu.common.item.armor.PowerlessJetpack; import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitiveFancyUIWorkableMachine; -import com.gregtechceu.gtceu.common.unification.material.MaterialRegistryManager; import com.gregtechceu.gtceu.core.mixins.IngredientAccessor; import com.gregtechceu.gtceu.data.recipe.CraftingComponent; import com.gregtechceu.gtceu.data.recipe.GTCraftingComponents; @@ -284,7 +283,6 @@ public void registerBindings(BindingsEvent event) { // Material related event.add("GTElements", GTElements.class); event.add("GTMaterials", GTMaterials.class); - event.add("GTMaterialRegistry", MaterialRegistryManager.getInstance()); event.add("TagPrefix", TagPrefix.class); event.add("ItemGenerationCondition", TagPrefix.Conditions.class); event.add("MaterialEntry", MaterialEntry.class); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/rei/oreprocessing/GTOreProcessingDisplayCategory.java b/src/main/java/com/gregtechceu/gtceu/integration/rei/oreprocessing/GTOreProcessingDisplayCategory.java index 0d86bae41c9..134bacbdcab 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/rei/oreprocessing/GTOreProcessingDisplayCategory.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/rei/oreprocessing/GTOreProcessingDisplayCategory.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.integration.rei.oreprocessing; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlags; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture; import com.lowdragmc.lowdraglib.rei.IGui2Renderer; @@ -62,7 +62,7 @@ public Component getTitle() { } public static void registerDisplays(DisplayRegistry registry) { - for (Material mat : GTCEuAPI.materialManager.getRegisteredMaterials()) { + for (Material mat : GTRegistries.MATERIALS.values()) { if (mat.hasProperty(ORE) && !mat.hasFlag(MaterialFlags.NO_ORE_PROCESSING_TAB)) { registry.add(new GTOreProcessingDisplay(mat)); }