diff --git a/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md b/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md index 6046c99e039..efae271bdf1 100644 --- a/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md +++ b/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md @@ -75,7 +75,7 @@ title: "Custom Parallel Hatch" GTMachineModels.createWorkableTieredHullMachineModel( GTCEu.id("block/machines/parallel_hatch_mk4") // (6) )[ - "andThen(com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder$ModelInitializer)" + "andThen(com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder$ModelInitializer)" ]((ctx, prov, model) => { model.addReplaceableTextures("bottom", "top", "side"); }) diff --git a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md index 8151c396cca..b60081afb1b 100644 --- a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md +++ b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md @@ -18,9 +18,9 @@ GTCEuStartupEvents.registry('gtceu:machine', event => { you'd get the error: ``` -Error in 'GTCEuStartupEvents.registry': The choice of Java method com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder.tooltips matching JavaScript argument types (net.minecraft.network.chat.MutableComponent) is ambiguous; candidate methods are: - class com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder tooltips(java.util.List) - class com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder tooltips(net.minecraft.network.chat.Component[]) +Error in 'GTCEuStartupEvents.registry': The choice of Java method com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder.tooltips matching JavaScript argument types (net.minecraft.network.chat.MutableComponent) is ambiguous; candidate methods are: + class com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder tooltips(java.util.List) + class com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder tooltips(net.minecraft.network.chat.Component[]) ``` In this case, there's ambiguity between the following 2 java functions: 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 3b6bfe22d10..067785e5419 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java +++ b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java @@ -17,14 +17,6 @@ public interface IGTAddon { */ GTRegistrate getRegistrate(); - /** - * This runs after GTCEu has set up it's content. Set up GT loading-dependent (but NOT ones dependent on - * - * @apiNote DO NOT REGISTER ANY OF YOUR OWN CONTENT HERE, AS IF YOU DO, IT'LL REGISTER AS IF GTCEu REGISTERED IT - * AND YOUR DATAGEN AND EVENTS WILL NOT WORK AS EXPECTED, IF AT ALL. - */ - void gtInitComplete(); - /** * Call init on your custom VeinGenerator class(es) here */ diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java index 8ff961bc599..92089829216 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.capability.recipe; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.trait.notifiable.NotifiableRecipeHandlerTrait; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -63,15 +62,6 @@ protected RecipeCapability(ResourceLocation id, int color, boolean doRenderSlot, this.serializer = serializer; } - /** - * @deprecated Use {@link #RecipeCapability(ResourceLocation, int, boolean, int, IContentSerializer)} - */ - @Deprecated(forRemoval = true, since = "8.0.0") - protected RecipeCapability(String name, int color, boolean doRenderSlot, int sortIndex, - IContentSerializer serializer) { - this(GTCEu.id(name), color, doRenderSlot, sortIndex, serializer); - } - public static Codec> contentCodec(RecipeCapability capability) { return Content.codec(capability).listOf().xmap(ArrayList::new, Function.identity()); } 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 227264f68b1..8b4158f5b8c 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 @@ -22,6 +22,7 @@ import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.TagUtil; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceKey; @@ -1488,7 +1489,7 @@ public Builder radioactiveHazard(float multiplier) { * @param trigger The trigger type for this hazard. * @param condition The condition applied by this hazard. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition) { + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, 1, false)); return this; } @@ -1504,7 +1505,7 @@ public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition con * @param condition The condition applied by this hazard. * @param progressionMultiplier Multiplier for how quickly the condition will progress. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition, float progressionMultiplier) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, progressionMultiplier, false)); @@ -1521,7 +1522,7 @@ public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition con * @param applyToDerivatives Whether the Hazard should be applied to materials with this Material in its * components list. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition, float progressionMultiplier, boolean applyToDerivatives) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, progressionMultiplier, applyToDerivatives)); @@ -1540,7 +1541,7 @@ public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition con * @param applyToDerivatives Whether the Hazard should be applied to materials with this Material in its * components list. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition, boolean applyToDerivatives) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, 1, applyToDerivatives)); return this; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java index 50f710853d4..b0161cc22a4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java @@ -11,6 +11,7 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.CustomTags; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.StringRepresentable; @@ -31,12 +32,12 @@ public class HazardProperty implements IMaterialProperty { - public final MedicalCondition condition; + public final Holder condition; public final HazardTrigger hazardTrigger; public final boolean applyToDerivatives; public final float progressionMultiplier; - public HazardProperty(HazardTrigger hazardTrigger, MedicalCondition condition, float progressionMultiplier, + public HazardProperty(HazardTrigger hazardTrigger, Holder condition, float progressionMultiplier, boolean applyToDerivatives) { this.hazardTrigger = hazardTrigger; this.condition = condition; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java b/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java index 883d2bf7183..6c1290b610e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java @@ -12,9 +12,7 @@ import net.minecraft.world.damagesource.DamageType; import lombok.Getter; -import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.function.Consumer; @@ -47,13 +45,11 @@ public class MedicalCondition { * condition. */ @Getter - @Setter - @NotNull - public Consumer recipeModifier = builder -> {}; + public final Consumer recipeModifier; public MedicalCondition(ResourceLocation id, int color, int maxProgression, IdleProgressionType progressionType, float progressionRate, - boolean canBePermanent, + boolean canBePermanent, Consumer recipeModifier, Symptom.ConfiguredSymptom... symptoms) { this.id = id; this.color = color; @@ -67,6 +63,14 @@ public MedicalCondition(ResourceLocation id, int color, this.idleProgressionType = progressionType; this.idleProgressionRate = progressionRate; this.canBePermanent = canBePermanent; + this.recipeModifier = recipeModifier; + } + + public MedicalCondition(ResourceLocation id, int color, + int maxProgression, IdleProgressionType progressionType, float progressionRate, + boolean canBePermanent, + Symptom.ConfiguredSymptom... symptoms) { + this(id, color, maxProgression, progressionType, progressionRate, canBePermanent, $ -> {}, symptoms); } public ResourceKey getDamageType() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java index 709ea8e72c1..5939dfa1e27 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java @@ -177,6 +177,10 @@ public GTOreDefinition layer(IWorldGenLayer layer) { return this; } + public GTOreDefinition layer(Holder layer) { + return layer(layer.value()); + } + public GTOreDefinition dimensions(Set> dimensions) { this.dimensionFilter = dimensions; return this; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java index a027b9ad61a..de258a9856a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java @@ -1,7 +1,5 @@ package com.gregtechceu.gtceu.api.data.worldgen; -import com.gregtechceu.gtceu.api.registry.GTRegistries; - import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; @@ -25,8 +23,6 @@ public SimpleWorldGenLayer(ResourceLocation id, IWorldGenLayer.RuleTestSupplier this.id = id; this.target = target; this.levels = levels; - - GTRegistries.register(GTRegistries.WORLD_GEN_LAYERS, id, this); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java index b6cc054cdf9..5ee00a02814 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java @@ -1,9 +1,11 @@ package com.gregtechceu.gtceu.api.data.worldgen; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.integration.kjs.GTCEuStartupEvents; -import com.gregtechceu.gtceu.integration.kjs.events.WorldGenLayerEventJS; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceKey; import net.minecraft.tags.BlockTags; import net.minecraft.world.level.Level; import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest; @@ -12,32 +14,27 @@ public class WorldGenLayers { - public static final SimpleWorldGenLayer STONE = new SimpleWorldGenLayer( - GTCEu.id("stone"), () -> new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES), + public static final Holder STONE = register("stone", + () -> new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES), Set.of(Level.OVERWORLD)); - public static final SimpleWorldGenLayer DEEPSLATE = new SimpleWorldGenLayer( - GTCEu.id("deepslate"), () -> new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES), + public static final Holder DEEPSLATE = register("deepslate", + () -> new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES), Set.of(Level.OVERWORLD)); - public static final SimpleWorldGenLayer NETHERRACK = new SimpleWorldGenLayer( - GTCEu.id("netherrack"), () -> new TagMatchTest(BlockTags.NETHER_CARVER_REPLACEABLES), + public static final Holder NETHERRACK = register("netherrack", + () -> new TagMatchTest(BlockTags.NETHER_CARVER_REPLACEABLES), Set.of(Level.NETHER)); - public static final SimpleWorldGenLayer ENDSTONE = new SimpleWorldGenLayer( - GTCEu.id("endstone"), () -> WorldGeneratorUtils.END_ORE_REPLACEABLES, + public static final Holder ENDSTONE = register("endstone", + () -> WorldGeneratorUtils.END_ORE_REPLACEABLES, Set.of(Level.END)); - public static void init() { - if (GTCEu.Mods.isKubeJSLoaded()) { - KJSCallWrapper.postEvent(); - } + private static Holder register(String name, IWorldGenLayer.RuleTestSupplier target, + Set> levels) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.WORLD_GEN_LAYER, + () -> new SimpleWorldGenLayer(GTCEu.id(name), target, levels)); } - private static final class KJSCallWrapper { - - private static void postEvent() { - GTCEuStartupEvents.WORLD_GEN_LAYERS.post(new WorldGenLayerEventJS()); - } - } + public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java b/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java index 8f2f23ebfbf..c29802709bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java +++ b/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.events; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import net.neoforged.bus.api.Event; import net.neoforged.fml.event.IModBusEvent; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java index ccd1fadee73..299e0d1b375 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java @@ -89,7 +89,7 @@ public interface IGTTool extends IUIHolder>, ItemLike IGTToolDefinition getToolStats(); @Nullable - SoundEntry getSound(); + Holder getSound(); boolean playSoundOnBlockDestroy(); @@ -283,7 +283,7 @@ default int getTotalHarvestLevel() { return; } if (!areaOfEffectBlockBreakRoutine(stack, serverPlayer, pos)) { - var behavior = getBehaviorsComponent(stack).getBehavior(GTToolBehaviors.TREE_FELLING); + var behavior = getBehaviorsComponent(stack).getBehavior(GTToolBehaviors.TREE_FELLING.value()); if (behavior != null && behavior.isEnabled() && state.is(BlockTags.LOGS)) { TreeFellingHelper.fellTree(stack, player.level(), state, pos, player); } @@ -723,7 +723,7 @@ default boolean canPlaySound(ItemStack stack) { default void playSound(Player player) { if (ConfigHolder.INSTANCE.client.toolUseSounds && getSound() != null) { - player.level().playSound(null, player, getSound().getMainEvent(), SoundSource.PLAYERS, 1F, 1F); + player.level().playSound(null, player, getSound().value().getMainEvent(), SoundSource.PLAYERS, 1F, 1F); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java b/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java index 8696119e5b5..043b52a7cc9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java @@ -130,7 +130,7 @@ public static void playJetpackSound(@NotNull Player player) { cons -= 0.4F; } - player.playSound(GTSoundEntries.JET_ENGINE.getMainEvent(), 0.3F, cons); + player.playSound(GTSoundEntries.JET_ENGINE.value().getMainEvent(), 0.3F, cons); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java index 7978571d49c..275ee056c64 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java @@ -108,7 +108,7 @@ public boolean isElectric() { @Nullable @Override - public SoundEntry getSound() { + public Holder getSound() { return toolType.soundEntry; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java index cbfafba6de3..5e7fb1698c1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java @@ -11,6 +11,7 @@ import com.gregtechceu.gtceu.common.item.tool.behavior.*; import com.gregtechceu.gtceu.data.recipe.CustomTags; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -198,7 +199,7 @@ public class GTToolType { .definition(b -> b.blockBreaking().crafting() .attackDamage(2.0F).attackSpeed(-2.4F) .sneakBypassUse().behaviors(RotateRailBehavior.INSTANCE)) - .sound(new ExistingSoundEntry(SoundEvents.ITEM_BREAK, SoundSource.BLOCKS), true) + .sound(Holder.direct(new ExistingSoundEntry(SoundEvents.ITEM_BREAK, SoundSource.BLOCKS)), true) .symbol('c') .defaultAbilities(GTItemAbilities.CROWBAR_DIG, GTItemAbilities.CROWBAR_REMOVE_COVER) .materialAmount(3 * GTValues.M / 2) @@ -571,7 +572,7 @@ public class GTToolType { public final Set toolClassNames; public final Set toolClasses; @Nullable - public final SoundEntry soundEntry; + public final Holder soundEntry; public final boolean playSoundOnBlockDestroy; public final char symbol; public final long materialAmount; @@ -585,7 +586,7 @@ public GTToolType(String name, String idFormat, char symbol, List> itemTags, List> matchTags, List> craftingTags, List> harvestTags, Set defaultAbilities, Set toolClassNames, ResourceLocation modelLocation, - @Nullable SoundEntry soundEntry, boolean playSoundOnBlockDestroy, + @Nullable Holder soundEntry, boolean playSoundOnBlockDestroy, int electricTier, long materialAmount) { this.name = name; this.idFormat = idFormat; @@ -661,7 +662,7 @@ public static class Builder { private ToolConstructor constructor = GTToolItem::new; @Setter private ResourceLocation modelLocation; - private SoundEntry sound; + private Holder sound; private boolean playSoundOnBlockDestroy; public Builder(String name) { @@ -727,11 +728,11 @@ public Builder definition(UnaryOperator builder) { return this; } - public Builder sound(SoundEntry sound) { + public Builder sound(Holder sound) { return this.sound(sound, false); } - public Builder sound(SoundEntry sound, boolean playSoundOnBlockDestroy) { + public Builder sound(Holder sound, boolean playSoundOnBlockDestroy) { this.sound = sound; this.playSoundOnBlockDestroy = playSoundOnBlockDestroy; return this; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java index 38a2fc34a4a..a16ce91ea68 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java @@ -212,7 +212,7 @@ public static void damageItem(ItemStack stack, @Nullable LivingEntity user, int public static void playToolSound(@Nullable GTToolType toolType, ServerPlayer player) { if (toolType != null && toolType.soundEntry != null) { - toolType.soundEntry.playOnServer(player.level(), player.blockPosition()); + toolType.soundEntry.value().playOnServer(player.level(), player.blockPosition()); } } @@ -563,7 +563,7 @@ public static void onActionDone(@Nullable Player player, ItemStack stack, Level IGTTool tool = (IGTTool) stack.getItem(); ToolHelper.damageItem(stack, player); if (tool.getSound() != null) { - level.playSound(player, pos.x, pos.y, pos.z, tool.getSound().getMainEvent(), + level.playSound(player, pos.x, pos.y, pos.z, tool.getSound().value().getMainEvent(), SoundSource.PLAYERS, 1.0F, 1.0F); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java index ae53be60be6..a667ed8d696 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java @@ -91,7 +91,7 @@ public static void onWorldTick(LevelTickEvent.Pre event) { if (event.getLevel() == helper.player.level()) { ItemStack held = helper.player.getMainHandItem(); if (helper.player.isRemoved() || helper.orderedBlocks.isEmpty() || helper.tool.isEmpty() || - !getBehaviorsComponent(held).hasBehavior(GTToolBehaviors.TREE_FELLING)) { + !getBehaviorsComponent(held).hasBehavior(GTToolBehaviors.TREE_FELLING.value())) { iterator.remove(); continue; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index 7472fd4a914..a7218cd41ac 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -5,43 +5,51 @@ import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.mui.factory.PanelFactory; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; +import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; +import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.core.Direction; import net.minecraft.core.IdMapper; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import net.neoforged.neoforge.registries.DeferredHolder; import brachy.modularui.theme.ThemeAPI; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import it.unimi.dsi.fastutil.objects.Reference2IntMap; import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import java.util.EnumMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.*; /** * Representing basic information of a machine. */ -public class MachineDefinition implements Supplier { +public class MachineDefinition { public static final IdMapper RENDER_STATE_REGISTRY = new IdMapper<>(512); @@ -49,107 +57,122 @@ public class MachineDefinition implements Supplier { private final ResourceLocation id; // This is only stored here for KJS use. @Getter - @Setter @Nullable - private String langValue; - @Setter - private Supplier blockSupplier; - @Setter - private Supplier itemSupplier; - @Setter - private Supplier> blockEntityTypeSupplier; + private final String langValue; + private final DeferredHolder blockHolder; + private final DeferredHolder itemHolder; + private final Supplier> blockEntityTypeSupplier; @Getter - @Setter - private GTRecipeType[] recipeTypes; + private final GTRecipeType[] recipeTypes; @Getter - @Setter - private int tier = -1; + private final int tier; @Getter - @Setter - private int defaultPaintingColor; + private final int defaultPaintingColor; @Getter - @Setter - private RecipeModifier recipeModifier; + private final RecipeModifier recipeModifier; @Getter - @Setter - private boolean alwaysTryModifyRecipe; + private final boolean alwaysTryModifyRecipe; @Getter - @Setter - private BiPredicate beforeWorking = (machine, recipe) -> true; + private final BiPredicate beforeWorking; @Getter - @Setter - private Predicate onWorking = (machine) -> true; + private final Predicate onWorking; @Getter - @Setter - private Consumer onWaiting = (machine) -> {}; + private final Consumer onWaiting; @Getter - @Setter - private Consumer afterWorking = (machine) -> {}; + private final Consumer afterWorking; @Getter - @Setter - private boolean regressWhenWaiting = true; + private final boolean regressWhenWaiting; /** Whether this machine can be rotated or face upwards. */ @Getter - @Setter - private boolean allowExtendedFacing; - + private final boolean allowExtendedFacing; @Getter - @Setter - private RotationState rotationState; - @Setter - private VoxelShape shape; - @Getter - @Setter - private boolean renderWorldPreview; - @Getter - @Setter - private boolean renderXEIPreview; + private final RotationState rotationState; + private final VoxelShape shape; private final Map cache = new EnumMap<>(Direction.class); @Getter - @Setter - private BiConsumer> tooltipBuilder; + private final BiConsumer> tooltipBuilder; @Getter - @Setter - private Supplier appearance; + private final Supplier appearance; @Getter - @Setter - private boolean allowCoverOnFront; + private final boolean allowCoverOnFront; @Getter - @Setter @Nullable - private PanelFactory UI; + private final PanelFactory UI; @Getter - @Setter - private String themeId = ThemeAPI.DEFAULT_ID; + private final String themeId; @Getter - @Setter - private Reference2IntMap> recipeOutputLimits = new Reference2IntOpenHashMap<>(); - + private final Reference2IntMap> recipeOutputLimits; @Getter - @Setter(onMethod_ = @ApiStatus.Internal) - private StateDefinition stateDefinition; + private final StateDefinition stateDefinition; @Accessors(fluent = true) @Getter - private MachineRenderState defaultRenderState; + private final MachineRenderState defaultRenderState; - public MachineDefinition(ResourceLocation id) { + @SuppressWarnings({ "unchecked", "rawtypes" }) + public MachineDefinition(ResourceLocation id, Properties properties) { this.id = id; + + this.rotationState = properties.rotationState(); + this.langValue = properties.langValue(); + this.UI = properties.ui(); + this.themeId = properties.themeId(); + this.recipeTypes = properties.recipeTypes(); + this.blockHolder = properties.blockHolder(); + this.itemHolder = properties.itemHolder(); + this.tier = properties.tier(); + this.recipeOutputLimits = properties.recipeOutputLimits(); + this.blockEntityTypeSupplier = properties.blockEntityTypeSupplier(); + this.tooltipBuilder = (itemStack, components) -> { + components.addAll(properties.tooltips()); + if (properties.tooltipBuilder() != null) properties.tooltipBuilder().accept(itemStack, components); + }; + this.recipeModifier = properties.recipeModifier(); + this.alwaysTryModifyRecipe = properties.alwaysTryModifyRecipe(); + this.beforeWorking = properties.beforeWorking(); + this.onWorking = properties.onWorking(); + this.onWaiting = properties.onWaiting(); + this.afterWorking = properties.afterWorking(); + this.regressWhenWaiting = properties.regressWhenWaiting(); + this.allowCoverOnFront = properties.allowCoverOnFront(); + + for (GTRecipeType type : recipeTypes) { + if (type.getIconSupplier() == null) { + type.setIconSupplier(this::asStack); + } + } + if (properties.appearance() == null) { + properties.appearance(() -> blockHolder.value().defaultBlockState()); + } + this.appearance = properties.appearance(); + this.allowExtendedFacing = properties.allowExtendedFacing(); + this.shape = properties.shape(); + this.defaultPaintingColor = properties.paintingColor(); + + // Initialise render state + + StateDefinition.Builder builder = new StateDefinition.Builder<>( + this); + properties.modelProperties().keySet().forEach(builder::add); + stateDefinition = builder.create(MachineDefinition::defaultRenderState, MachineRenderState::new); + + MachineRenderState defaultState = getStateDefinition().any(); + for (var entry : properties.modelProperties().entrySet()) { + if (entry.getValue() == null) continue; + defaultState = defaultState.setValue((Property) entry.getKey(), (Comparable) entry.getValue()); + } + this.defaultRenderState = defaultState; } public boolean isTiered() { return tier != -1; } - public final void registerDefaultState(MachineRenderState state) { - this.defaultRenderState = state; - } - - public Block getBlock() { - return blockSupplier.get(); + public MetaMachineBlock getBlock() { + return blockHolder.get(); } public MetaMachineItem getItem() { - return itemSupplier.get(); + return itemHolder.get(); } public BlockEntityType getBlockEntityType() { @@ -169,11 +192,6 @@ public VoxelShape getShape(Direction direction) { return this.cache.computeIfAbsent(direction, dir -> GTUtil.rotateVoxelShape(shape, dir)); } - @Override - public MetaMachineBlock get() { - return (MetaMachineBlock) blockSupplier.get(); - } - public String getName() { return id.getPath(); } @@ -206,10 +224,10 @@ public int hashCode() { return id.hashCode(); } - static final ThreadLocal STATE = new ThreadLocal<>(); + static final ThreadLocal<@Nullable MachineDefinition> STATE = new ThreadLocal<>(); public static MachineDefinition getBuilt() { - return STATE.get(); + return Objects.requireNonNull(STATE.get()); } public static void setBuilt(MachineDefinition state) { @@ -242,4 +260,44 @@ public int getOutputSize(RecipeCapability cap, GTRecipeType... recipeTypes) { int machineTypeOutputLimit = this.getRecipeOutputLimits().getOrDefault(cap, recipeTypeOutputSize); return Math.min(recipeTypeOutputSize, machineTypeOutputLimit); } + + @Accessors(fluent = true) + @Getter + @Setter + public static class Properties { + + private DeferredHolder blockHolder; + private DeferredHolder itemHolder; + private Supplier> blockEntityTypeSupplier; + + @Nullable + private MachineBuilder.ModelInitializer model = null; + private @Nullable NonNullBiConsumer, GTBlockstateProvider> blockModel = null; + protected final Map, @Nullable Comparable> modelProperties = new IdentityHashMap<>(); + private VoxelShape shape = Shapes.block(); + private RotationState rotationState = RotationState.NON_Y_AXIS; + private boolean allowExtendedFacing = false; + private boolean hasBER = ConfigHolder.INSTANCE.client.machinesHaveBERsByDefault; + private GTRecipeType[] recipeTypes = new GTRecipeType[0]; + private int tier = -1; + private Reference2IntMap> recipeOutputLimits = new Reference2IntOpenHashMap<>(); + private int paintingColor = ConfigHolder.INSTANCE.client.getDefaultPaintingColor(); + private PartAbility[] abilities = new PartAbility[0]; + private final List tooltips = new ArrayList<>(); + private @Nullable BiConsumer> tooltipBuilder; + private RecipeModifier recipeModifier = new RecipeModifierList(GTRecipeModifiers.OC_NON_PERFECT); + private boolean alwaysTryModifyRecipe; + private BiPredicate beforeWorking = (machine, recipe) -> true; + private Predicate onWorking = (machine) -> true; + private Consumer onWaiting = (machine) -> {}; + private Consumer afterWorking = (machine) -> {}; + private boolean regressWhenWaiting = true; + private boolean allowCoverOnFront = false; + @Nullable + private PanelFactory ui = null; + private String themeId = ThemeAPI.DEFAULT_ID; + private @Nullable Supplier appearance; + @Nullable + private String langValue = null; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java index c5a34bd3210..4bf55cd09f9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; +import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; @@ -11,10 +12,12 @@ import brachy.modularui.api.widget.IWidget; import brachy.modularui.value.sync.PanelSyncManager; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; import lombok.Getter; import lombok.Setter; +import lombok.experimental.Accessors; import org.apache.commons.lang3.function.TriFunction; -import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.BiFunction; @@ -24,35 +27,68 @@ public class MultiblockMachineDefinition extends MachineDefinition { @Getter - @Setter - private boolean generator; + private final boolean generator; @Getter - private Map> structurePatterns = new HashMap<>(); + private final Map> structurePatterns; @Getter - @Setter - private boolean allowFlip; + private final boolean allowFlip; @Getter - @Setter - private boolean renderXEIPreview; - @Setter + private final boolean renderXEIPreview; @Getter - @Nullable - private Supplier recoveryItems; - @Setter + private final boolean renderWorldPreview; @Getter - private Function> partSorter; + private final Supplier recoveryItems; @Getter - @Setter - private TriFunction partAppearance; + private final Function> partSorter; @Getter - @Setter - private BiFunction> additionalDisplay; + private final TriFunction partAppearance; + @Getter + private final BiFunction> additionalDisplay; + + public MultiblockMachineDefinition(ResourceLocation id, Properties properties) { + super(id, properties); + this.generator = properties.generator; - public MultiblockMachineDefinition(ResourceLocation id) { - super(id); + Map> structurePatterns = new Object2ObjectOpenHashMap<>(); + if (properties.patterns().isEmpty()) { + throw new IllegalStateException("Missing default structure pattern for " + getName()); + } + for (Map.Entry> entry : properties.patterns + .entrySet()) { + structurePatterns.put(entry.getKey(), GTMemoizer.memoize(() -> entry.getValue().apply(this))); + } + this.structurePatterns = Collections.unmodifiableMap(structurePatterns); + this.allowFlip = properties.allowFlip(); + this.renderXEIPreview = properties.renderMultiblockXEIPreview; + this.renderWorldPreview = properties.renderMultiblockWorldPreview; + this.recoveryItems = () -> properties.recoveryItems.stream().map(Supplier::get).flatMap(Arrays::stream) + .toArray(ItemStack[]::new); + this.partSorter = GTMemoizer.memoizeFunctionWeakIdent(properties.partSorter()); + this.partAppearance = properties.partAppearance(); + this.additionalDisplay = properties.additionalDisplay(); } - public void setPattern(String structureName, Supplier pattern) { - structurePatterns.put(structureName, pattern); + @Accessors(fluent = true) + @Getter + @Setter + public static class Properties extends MachineDefinition.Properties { + + private boolean generator = false; + private final Map> patterns = new Object2ReferenceOpenHashMap<>(); + private boolean allowFlip = true; + private final List> recoveryItems = new ArrayList<>(); + private Function> partSorter = (c) -> (a, + b) -> 0; + private TriFunction partAppearance = (controller, + part, + side) -> controller + .getDefinition() + .getAppearance() + .get(); + private boolean renderMultiblockWorldPreview = true; + private boolean renderMultiblockXEIPreview = true; + private BiFunction> additionalDisplay = (m, + sm) -> Collections + .emptyList(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java index d5ce1d4e2d3..fe1d214435e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java @@ -24,6 +24,7 @@ import net.neoforged.neoforge.items.wrapper.CombinedInvWrapper; import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.NonNull; import java.util.HashSet; import java.util.Map; @@ -70,7 +71,7 @@ private GTRecipe makeRecipe(ItemStack input, int burnTime) { } @Override - public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { + public @Nullable GTRecipe createCustomRecipe(@NonNull IRecipeCapabilityHolder holder) { var itemInputs = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP).stream() .filter(IItemHandlerModifiable.class::isInstance).map(IItemHandlerModifiable.class::cast) .toArray(IItemHandlerModifiable[]::new); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java index 3add7234775..56735d0a6fc 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java @@ -1,9 +1,6 @@ package com.gregtechceu.gtceu.api.machine.trait.notifiable; -import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; -import com.gregtechceu.gtceu.api.capability.recipe.IFilteredHandler; -import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.trait.ICapabilityTrait; @@ -15,7 +12,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.common.data.GTRecipeCapabilities; import com.gregtechceu.gtceu.utils.GTTransferUtils; import net.minecraft.core.Direction; @@ -202,14 +198,14 @@ public List handleRecipeInner(IO io, @Nullable GTRecipe re for (MultiblockControllerMachine controller : partMachine.getControllers()) { RecipeLogic logic = controller.getTrait(RecipeLogic.class); if (logic != null && logic.getStartingRecipe() == recipe) { - logic.getConsumedInputs().addConsumedInput(GTRecipeCapabilities.FLUID, + logic.getConsumedInputs().addConsumedInput(FluidRecipeCapability.CAP, SizedFluidIngredient.of(copied)); } } } else { getMachine().getTraitOptional(RecipeLogic.class) .map(RecipeLogic::getConsumedInputs) - .ifPresent(inputs -> inputs.addConsumedInput(GTRecipeCapabilities.FLUID, + .ifPresent(inputs -> inputs.addConsumedInput(FluidRecipeCapability.CAP, SizedFluidIngredient.of(copied))); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java index 8256b94d10a..18f8b3af1f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java @@ -18,7 +18,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.data.GTRecipeCapabilities; import com.gregtechceu.gtceu.utils.GTTransferUtils; import net.minecraft.core.Direction; @@ -153,13 +152,13 @@ public static List handleRecipe(IO io, @Nullable GTRecipe recip for (MultiblockControllerMachine controller : partMachine.getControllers()) { RecipeLogic logic = controller.getTrait(RecipeLogic.class); if (logic != null && logic.getStartingRecipe() == recipe) { - logic.getConsumedInputs().addConsumedInput(GTRecipeCapabilities.ITEM, + logic.getConsumedInputs().addConsumedInput(ItemRecipeCapability.CAP, new SizedIngredient(Ingredient.of(copied), 1)); } } } else if (machine != null) machine.getTraitOptional(RecipeLogic.class) .map(RecipeLogic::getConsumedInputs) - .ifPresent(inputs -> inputs.addConsumedInput(GTRecipeCapabilities.ITEM, + .ifPresent(inputs -> inputs.addConsumedInput(ItemRecipeCapability.CAP, new SizedIngredient(Ingredient.of(copied), 1))); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java index d1b94ff269f..e9bb8c941a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java @@ -676,7 +676,7 @@ public void updateSound() { workingSound = null; } if (sound != null) { - workingSound = sound.playAutoReleasedSound( + workingSound = sound.value().playAutoReleasedSound( () -> getRLMachine().shouldWorkingPlaySound() && isWorking() && !getMachine().isRemoved() && getMachine().getLevel().isLoaded(getMachine().getBlockPos()) && MetaMachine.getMachine(getMachine().getLevel(), getMachine().getBlockPos()) == diff --git a/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java b/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java index 9ba7e9aa8ce..4fcc72eb757 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java +++ b/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java @@ -19,6 +19,7 @@ import com.gregtechceu.gtceu.api.multiblock.util.BlockInfo; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -157,11 +158,20 @@ private static String blockToString(Block block) { .orElse("unknown block"); } + public static MultiPredicate machines(MachineEntry definition) { + return machines(definition.value()); + } + + @SafeVarargs + public static MultiPredicate machines(MachineEntry... definitions) { + return machines(Arrays.stream(definitions).map(Holder::value).toArray(MachineDefinition[]::new)); + } + public static MultiPredicate machines(@Nullable MachineDefinition... definitions) { List blocks = new ArrayList<>(); for (MachineDefinition definition : definitions) { if (definition != null) { - blocks.add(definition.get()); + blocks.add(definition.getBlock()); } } if (blocks.isEmpty()) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java b/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java index 94ece51b375..f8a4778080b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java @@ -3,13 +3,13 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.placeholder.exceptions.PlaceholderException; import com.gregtechceu.gtceu.common.capability.PlaceholderSavedData; -import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import lombok.Getter; +import org.jetbrains.annotations.ApiStatus; import java.util.List; @@ -24,8 +24,9 @@ public abstract class Placeholder { public abstract MultiLineComponent apply(PlaceholderContext ctx, List args) throws PlaceholderException; + @ApiStatus.Internal public Placeholder(String str) { - this(GTCEu.id(FormattingUtil.toLowerCaseUnderscore(str))); + this(GTCEu.id(str)); } public Placeholder(ResourceLocation id) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java b/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java index df17d8d47e4..3d638c260d4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java @@ -67,10 +67,6 @@ private static final class RendererHolder { public static final Map renderers = new HashMap<>(); } - public static void addPlaceholder(Placeholder placeholder) { - GTRegistries.register(GTRegistries.PLACEHOLDERS, placeholder.getId(), placeholder); - } - @OnlyIn(Dist.CLIENT) public static void addRenderer(String id, IPlaceholderRenderer renderer) { RendererHolder.renderers.put(id, renderer); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java index a872e2963c2..b058dc6748b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java @@ -325,18 +325,18 @@ public boolean hasTick() { public ChanceLogic getChanceLogicForCapability(RecipeCapability cap, IO io, boolean isTick) { if (io == IO.OUT) { if (isTick) { - return tickOutputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return tickOutputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } else { - return outputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return outputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } } else if (io == IO.IN) { if (isTick) { - return tickInputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return tickInputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } else { - return inputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return inputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } } - return ChanceLogic.OR; + return ChanceLogic.OR.value(); } public GTRecipeSerializer.RecipeIO getRecipeIO() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java index c89242c5c06..bf1a8f3b3e8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java @@ -10,6 +10,7 @@ import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; import com.gregtechceu.gtceu.utils.FormattingUtil; +import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.recipes.RecipeOutput; @@ -24,8 +25,8 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import lombok.experimental.Tolerate; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -60,7 +61,7 @@ public class GTRecipeType implements RecipeType { @Nullable @Setter @Getter - protected SoundEntry sound; + protected Holder sound; @Getter protected List> dataInfos = new ArrayList<>(); @Getter @@ -137,6 +138,11 @@ public GTRecipeType setMaxSize(IO io, RecipeCapability cap, int max) { return this; } + @Tolerate + public GTRecipeType setSound(SoundEntry sound) { + return setSound(Holder.direct(sound)); + } + public GTRecipeType UI(UnaryOperator builder) { uiLayout = builder.apply(new GTRecipeTypeUILayout.Builder(this)).build(); return this; @@ -170,7 +176,7 @@ public String toString() { return registryName.toString(); } - public @NotNull Iterator searchRecipe(IRecipeCapabilityHolder holder, Predicate canHandle) { + public Iterator searchRecipe(IRecipeCapabilityHolder holder, Predicate canHandle) { if (!holder.hasCapabilityProxies()) return Collections.emptyIterator(); var iterator = db.iterator(holder, canHandle); if (iterator == null) { @@ -251,17 +257,17 @@ public GTRecipeType onRecipeBuild(BiConsumer onBu return this; } - public void addDataStickEntry(@NotNull String researchId, @NotNull GTRecipe recipe) { + public void addDataStickEntry(String researchId, GTRecipe recipe) { Collection collection = researchEntries.computeIfAbsent(researchId, (k) -> new ObjectOpenHashSet<>()); collection.add(recipe); } @Nullable - public Collection getDataStickEntry(@NotNull String researchId) { + public Collection getDataStickEntry(String researchId) { return researchEntries.get(researchId); } - public boolean removeDataStickEntry(@NotNull String researchId, @NotNull GTRecipe recipe) { + public boolean removeDataStickEntry(String researchId, GTRecipe recipe) { Collection collection = researchEntries.get(researchId); if (collection == null) return false; if (collection.remove(recipe)) { @@ -317,7 +323,7 @@ public Component getName() { return Component.translatable(getTranslationKey()); } - public @NotNull RecipeDB db() { + public RecipeDB db() { return db; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java index 5c2bf29fc55..ba531a40812 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java @@ -1,14 +1,14 @@ package com.gregtechceu.gtceu.api.recipe.chance.logic; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.registries.DeferredHolder; import com.google.common.collect.ImmutableList; import it.unimi.dsi.fastutil.ints.IntArrayList; @@ -31,7 +31,7 @@ public abstract class ChanceLogic { /** * Chanced Output Logic where any ingredients succeeding their roll will be produced */ - public static final ChanceLogic OR = new ChanceLogic("or") { + public static final DeferredHolder OR = register("or", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -71,12 +71,12 @@ public abstract class ChanceLogic { public String toString() { return "ChanceLogic{OR}"; } - }; + }); /** * Chanced Output Logic where all ingredients must succeed their roll in order for any to be produced */ - public static final ChanceLogic AND = new ChanceLogic("and") { + public static final DeferredHolder AND = register("and", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -108,14 +108,14 @@ public String toString() { public String toString() { return "ChanceLogic{AND}"; } - }; + }); /** * Chanced Output Logic where only the first ingredient succeeding its roll will be produced * Deprecated following the rewrite of XOR */ @Deprecated - public static final ChanceLogic FIRST = new ChanceLogic("first") { + public static final DeferredHolder FIRST = register("first", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -149,12 +149,12 @@ public String toString() { public String toString() { return "ChanceLogic{FIRST}"; } - }; + }); /** * Chanced Output Logic where only one of the ingredients will be output, in a manner weighted to the input chances */ - public static final ChanceLogic XOR = new ChanceLogic("xor") { + public static final DeferredHolder XOR = register("xor", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -245,12 +245,12 @@ public String toString() { public String toString() { return "ChanceLogic{XOR}"; } - }; + }); /** * Chanced Output Logic where nothing is produced */ - public static final ChanceLogic NONE = new ChanceLogic("none") { + public static final DeferredHolder NONE = register("none", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -268,15 +268,7 @@ public String toString() { public String toString() { return "ChanceLogic{NONE}"; } - }; - - public ChanceLogic(ResourceLocation id) { - GTRegistries.register(GTRegistries.CHANCE_LOGICS, id, this); - } - - private ChanceLogic(String id) { - this(GTCEu.id(id)); - } + }); /** * @param entry the entry to get the complete chance for @@ -354,6 +346,10 @@ static void updateCachedChance(Object ingredient, @Nullable Object2IntMap cac @NotNull public abstract Component getTranslation(); + private static DeferredHolder register(String name, ChanceLogic logic) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.CHANCE_LOGIC, () -> logic); + } + @ApiStatus.Internal public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java index b01d57384c4..f06fd728115 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java @@ -91,7 +91,7 @@ public static void addChanceTooltips(RichTooltip tooltip, Content content, Chanc } else { float baseChanceFloat = 100f * content.chance() / content.maxChance(); - if (logic != ChanceLogic.NONE && logic != ChanceLogic.OR) { + if (logic != ChanceLogic.NONE.value() && logic != ChanceLogic.OR.value()) { tooltip.addLine(Component.translatable("gtceu.gui.content.chance_no_boost_logic", FormattingUtil.formatNumber2Places(baseChanceFloat), logic.getTranslation()) .withStyle(ChatFormatting.YELLOW)); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java new file mode 100644 index 00000000000..3ada506f7ec --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.recipe; + +import org.jetbrains.annotations.NotNullByDefault; 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 af05ee3671c..c8e3aa36c29 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 @@ -1,21 +1,28 @@ package com.gregtechceu.gtceu.api.registry.registrate; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.item.MetaMachineItem; +import com.gregtechceu.gtceu.api.cover.CoverDefinition; +import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; +import com.gregtechceu.gtceu.api.data.medicalcondition.Symptom; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.builder.GTBlockBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.SoundEntryBuilder; +import com.gregtechceu.gtceu.client.renderer.cover.ICoverRenderer; +import com.gregtechceu.gtceu.client.renderer.cover.SimpleCoverRenderer; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; +import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; @@ -40,14 +47,13 @@ import com.tterrag.registrate.util.nullness.NonNullSupplier; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; public class GTRegistrate extends AbstractRegistrate { @@ -157,56 +163,49 @@ public GTRegistrate registerEventListeners(IEventBus bus) { return this; } - protected

NoConfigBuilder createCreativeModeTab(P parent, String name, - Consumer config) { - return this.generic(parent, name, Registries.CREATIVE_MODE_TAB, () -> { - var builder = CreativeModeTab.builder() - .icon(() -> getAll(Registries.ITEM).stream().findFirst().map(ItemEntry::cast) - .map(ItemEntry::asStack).orElse(new ItemStack(Items.AIR))); - config.accept(builder); - return builder.build(); - }); - } + /// Machine Builders - public MachineBuilder machine(String name, - Function definitionFactory, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { - return new MachineBuilder<>(this, name, definitionFactory, - blockFactory, itemFactory, blockEntityFactory); + @SuppressWarnings("unchecked") + public > S machine(String name, + MachineInstanceFactory blockEntityFactory) { + return entry(name, + callback -> (S) new MachineBuilder<>(this, name, callback, blockEntityFactory)); } - public MachineBuilder machine(String name, - MachineInstanceFactory blockEntityFactory) { - return new MachineBuilder<>(this, name, MachineDefinition::new, - MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); + @SuppressWarnings("unchecked") + public > S multiblock(String name, + MachineInstanceFactory blockEntityFactory) { + return entry(name, callback -> (S) new MultiblockMachineBuilder<>(this, name, callback, blockEntityFactory)); } - public MultiblockMachineBuilder multiblock(String name, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { - return new MultiblockMachineBuilder<>(this, name, - blockFactory, itemFactory, blockEntityFactory); + /// Cover Registration + + public RegistryEntry cover(String name, + CoverDefinition.CoverBehaviourProvider behaviorCreator, + Supplier> coverRenderer) { + return simple(name, GTRegistries.Keys.COVER, + () -> new CoverDefinition(makeResourceLocation(name), behaviorCreator, coverRenderer)); } - public MultiblockMachineBuilder multiblock(String name, - MachineInstanceFactory blockEntityFactory) { - return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, MetaMachineItem::new, - blockEntityFactory); + public RegistryEntry cover(String name, + CoverDefinition.CoverBehaviourProvider behaviorCreator) { + return cover(name, behaviorCreator, () -> () -> new SimpleCoverRenderer( + ResourceLocation.fromNamespaceAndPath(getModid(), "block/cover/" + name))); } - public SoundEntryBuilder sound(String name) { - return new SoundEntryBuilder(GTCEu.id(name)); + /// Sound Builder + + public SoundEntryBuilder sound(String name) { + return sound(this, name); } - public SoundEntryBuilder sound(ResourceLocation name) { - return new SoundEntryBuilder(name); + public

SoundEntryBuilder

sound(P parent, String name) { + return entry(name, callback -> new SoundEntryBuilder<>(this, parent, name, callback)); } - // Blocks + /// Block Builder + @Override public GTBlockBuilder block(NonNullFunction factory) { return block(this, factory); @@ -219,20 +218,47 @@ public GTBlockBuilder block(String name, } @Override - public GTBlockBuilder block(P parent, + @SuppressWarnings("NullableProblems") + public GTBlockBuilder block(@NotNull P parent, NonNullFunction factory) { return block(parent, currentName(), factory); } @Override - public GTBlockBuilder block(P parent, String name, + @SuppressWarnings("NullableProblems") + public GTBlockBuilder block(@NotNull P parent, String name, NonNullFunction factory) { return (GTBlockBuilder) entry(name, callback -> GTBlockBuilder.create(this, parent, name, callback, factory)); } + /// Medical Conditions + + public RegistryEntry medicalCondition(String name, int color, + int maxProgression, + MedicalCondition.IdleProgressionType progressionType, + float progressionRate, + boolean canBePermanent, + Consumer recipeModifier, + Symptom.ConfiguredSymptom... symptoms) { + return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), + color, maxProgression, progressionType, progressionRate, canBePermanent, recipeModifier, symptoms)); + } + + public RegistryEntry medicalCondition(String name, int color, + int maxProgression, + MedicalCondition.IdleProgressionType progressionType, + float progressionRate, + boolean canBePermanent, + Symptom.ConfiguredSymptom... symptoms) { + return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), + color, maxProgression, progressionType, progressionRate, canBePermanent, symptoms)); + } + + /// Creative Mode Tabs + private @Nullable RegistryEntry currentTab; - private static final Map, RegistryEntry> TAB_LOOKUP = new IdentityHashMap<>(); + private static final Map, @Nullable RegistryEntry> TAB_LOOKUP = new IdentityHashMap<>(); public @Nullable RegistryEntry creativeModeTab() { return this.currentTab; @@ -273,7 +299,20 @@ protected RegistryEntry accept(String name, ResourceKey NoConfigBuilder defaultCreativeTab(P parent, String name, + protected

NoConfigBuilder createCreativeModeTab(P parent, String name, + Consumer config) { + return this.generic(parent, name, Registries.CREATIVE_MODE_TAB, () -> { + var builder = CreativeModeTab.builder() + .icon(() -> getAll(Registries.ITEM).stream().findFirst().map(ItemEntry::cast) + .map(ItemEntry::asStack).orElse(new ItemStack(Items.AIR))); + config.accept(builder); + return builder.build(); + }); + } + + @Override + @SuppressWarnings("NullableProblems") + public

NoConfigBuilder defaultCreativeTab(@NotNull P parent, String name, Consumer config) { return createCreativeModeTab(parent, name, config); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java deleted file mode 100644 index 9ae220fe055..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.gregtechceu.gtceu.api.registry.registrate; - -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.item.MetaMachineItem; -import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; -import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; -import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; -import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; -import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; -import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.Direction; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.ItemLike; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; - -import brachy.modularui.api.widget.IWidget; -import brachy.modularui.value.sync.PanelSyncManager; -import dev.latvian.mods.rhino.util.HideFromJS; -import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; -import lombok.Getter; -import lombok.experimental.Accessors; -import lombok.experimental.Tolerate; -import org.apache.commons.lang3.function.TriFunction; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.function.*; - -import javax.annotation.ParametersAreNonnullByDefault; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -@Accessors(chain = true, fluent = true) -public class MultiblockMachineBuilder> - extends MachineBuilder { - - private boolean generator; - private final Map> patterns; - private boolean allowFlip = true; - private final List> recoveryItems = new ArrayList<>(); - private Function> partSorter = (c) -> (a, b) -> 0; - private @Nullable TriFunction partAppearance; - - @Getter - private BiFunction> additionalDisplay = (m, - sm) -> Collections - .emptyList(); - - public MultiblockMachineBuilder(GTRegistrate registrate, String name, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { - super(registrate, name, (loc -> (DEFINITION) new MultiblockMachineDefinition(loc)), - blockFactory, - itemFactory, blockEntityFactory); - patterns = new Object2ReferenceOpenHashMap<>(); - allowExtendedFacing(true); - allowCoverOnFront(true); - // always add the formed property to multi controllers - modelProperty(GTMachineModelProperties.IS_FORMED, false); - } - - public SELF generator(boolean generator) { - this.generator = generator; - return getThis(); - } - - public SELF pattern(Function pattern) { - this.patterns.put(MultiblockControllerMachine.DEFAULT_STRUCTURE, pattern); - return getThis(); - } - - public SELF pattern(String structureName, Function pattern) { - this.patterns.put(structureName, pattern); - return getThis(); - } - - public SELF allowFlip(boolean allowFlip) { - this.allowFlip = allowFlip; - return getThis(); - } - - public SELF partSorter(Function> partSorter) { - this.partSorter = partSorter; - return getThis(); - } - - public SELF partAppearance(@Nullable TriFunction partAppearance) { - this.partAppearance = partAppearance; - return getThis(); - } - - public SELF additionalDisplay(BiFunction> additionalDisplay) { - this.additionalDisplay = additionalDisplay; - return getThis(); - } - - public SELF recoveryItems(Supplier items) { - this.recoveryItems.add(() -> Arrays.stream(items.get()).map(ItemLike::asItem).map(Item::getDefaultInstance) - .toArray(ItemStack[]::new)); - return getThis(); - } - - public SELF recoveryStacks(Supplier stacks) { - this.recoveryItems.add(stacks); - return getThis(); - } - - @Tolerate - public SELF partSorter(Comparator sorter) { - this.partSorter = $ -> sorter; - return getThis(); - } - - @Override - @HideFromJS - public DEFINITION register() { - var definition = super.register(); - definition.setGenerator(generator); - if (patterns.isEmpty()) { - throw new IllegalStateException("Missing default structure pattern for " + name); - } - for (Map.Entry> entry : patterns.entrySet()) { - definition.setPattern(entry.getKey(), GTMemoizer.memoize(() -> entry.getValue().apply(definition))); - } - - definition.setAllowFlip(allowFlip); - if (!recoveryItems.isEmpty()) { - definition.setRecoveryItems( - () -> recoveryItems.stream().map(Supplier::get).flatMap(Arrays::stream).toArray(ItemStack[]::new)); - } - definition.setPartSorter(GTMemoizer.memoizeFunctionWeakIdent(partSorter)); - if (partAppearance == null) { - partAppearance = (controller, part, side) -> definition.getAppearance().get(); - } - definition.setPartAppearance(partAppearance); - definition.setAdditionalDisplay(additionalDisplay); - return definition; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java similarity index 94% rename from src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTBlockBuilder.java rename to src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java index 17dfee8d336..e36b48cd34b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.registry.registrate; +package com.gregtechceu.gtceu.api.registry.registrate.builder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; @@ -18,6 +18,9 @@ import java.util.function.Supplier; +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault public class GTBlockBuilder extends BlockBuilder { // spotless:off @@ -87,7 +90,7 @@ public GTBlockBuilder defaultBlockstate() { @Override public GTBlockBuilder blockstate(NonNullBiConsumer, RegistrateBlockstateProvider> cons) { - return (GTBlockBuilder) setData(ProviderType.BLOCKSTATE, cons); + return setData(ProviderType.BLOCKSTATE, cons); } @Override @@ -115,12 +118,6 @@ public GTBlockBuilder recipe(NonNullBiConsumer, R return (GTBlockBuilder) super.recipe(cons); } - // why is it final >:( - // @SafeVarargs - // public final BlockBuilder tag(TagKey... tags) { - // return tag(ProviderType.BLOCK_TAGS, tags); - // } - public GTBlockBuilder setDataGeneric(ProviderType type, NonNullBiConsumer, D> cons) { getOwner().setDataGenerator(this, type, prov -> cons.accept(DataGenContext.from(this), prov)); return this; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java similarity index 50% rename from src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java rename to src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index dcfdfc24aa5..8b44fa16d5d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.registry.registrate; +package com.gregtechceu.gtceu.api.registry.registrate.builder; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; @@ -21,18 +21,17 @@ import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; -import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.client.renderer.BlockEntityWithBERModelRenderer; import com.gregtechceu.gtceu.client.renderer.ItemWithBERModelRenderer; -import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.model.builder.MachineModelBuilder; import com.gregtechceu.gtceu.integration.kjs.GTCEuStartupEvents; import com.gregtechceu.gtceu.integration.kjs.events.ModifyMachineEventJS; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.RenderType; import net.minecraft.network.chat.Component; @@ -44,17 +43,16 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.fml.ModLoader; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; +import net.neoforged.neoforge.registries.DeferredHolder; -import brachy.modularui.theme.ThemeAPI; -import com.tterrag.registrate.AbstractRegistrate; +import com.tterrag.registrate.builders.AbstractBuilder; import com.tterrag.registrate.builders.BlockBuilder; +import com.tterrag.registrate.builders.BuilderCallback; import com.tterrag.registrate.builders.ItemBuilder; import com.tterrag.registrate.providers.DataGenContext; import com.tterrag.registrate.providers.ProviderType; @@ -62,112 +60,60 @@ import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer; -import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; import dev.latvian.mods.rhino.util.HideFromJS; -import dev.latvian.mods.rhino.util.RemapPrefixForJS; import it.unimi.dsi.fastutil.objects.Reference2IntMap; -import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; import lombok.Getter; -import lombok.Setter; import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.Validate; import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.NonNull; import java.util.*; import java.util.function.*; -import javax.annotation.ParametersAreNonnullByDefault; - import static com.gregtechceu.gtceu.common.data.models.GTMachineModels.*; -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -@RemapPrefixForJS("kjs$") +@SuppressWarnings("unused") @Accessors(chain = true, fluent = true) public class MachineBuilder> { - - protected final GTRegistrate registrate; - protected final String name; + SELF extends MachineBuilder> + extends AbstractBuilder { - protected final BiFunction blockFactory; - protected final BiFunction itemFactory; protected MachineInstanceFactory instanceFactory; - @Setter - protected Function definition; - @Nullable - @Getter - private MachineBuilder.ModelInitializer model = null; @Getter - private @Nullable NonNullBiConsumer, GTBlockstateProvider> blockModel = null; - @Getter - protected final Map, @Nullable Comparable> modelProperties = new IdentityHashMap<>(); - private VoxelShape shape = Shapes.block(); - private RotationState rotationState = RotationState.NON_Y_AXIS; + private final MachineDefinition.Properties properties; + + private @Nullable BlockBuilder> blockBuilder; + private @Nullable BlockEntry blockEntry; + private @Nullable ItemBuilder> itemBuilder; - /** - * Whether this machine can be rotated or face upwards. - */ - private boolean allowExtendedFacing = false; - private boolean hasBER = ConfigHolder.INSTANCE.client.machinesHaveBERsByDefault; - private boolean renderMultiblockWorldPreview = true; - private boolean renderMultiblockXEIPreview = true; - private NonNullUnaryOperator blockProp = p -> p; - private NonNullUnaryOperator itemProp = p -> p; - private @Nullable Consumer> blockBuilder; - private @Nullable Consumer> itemBuilder; private NonNullConsumer> onBlockEntityRegister = NonNullConsumer.noop(); - @Getter // getter for KJS - private GTRecipeType[] recipeTypes = new GTRecipeType[0]; - @Getter // getter for KJS - private int tier = -1; - private Reference2IntMap> recipeOutputLimits = new Reference2IntOpenHashMap<>(); - private int paintingColor = ConfigHolder.INSTANCE.client.getDefaultPaintingColor(); - private BiFunction itemColor = ((itemStack, tintIndex) -> tintIndex == 2 ? - GTValues.VC[tier == -1 ? 0 : tier] : tintIndex == 1 ? paintingColor : -1); - private PartAbility[] abilities = new PartAbility[0]; - private final List tooltips = new ArrayList<>(); - private @Nullable BiConsumer> tooltipBuilder; - private RecipeModifier recipeModifier = new RecipeModifierList(GTRecipeModifiers.OC_NON_PERFECT); - private boolean alwaysTryModifyRecipe; - @Getter - private BiPredicate beforeWorking = (machine, recipe) -> true; - @Getter - private Predicate onWorking = (machine) -> true; - @Getter - private Consumer onWaiting = (machine) -> {}; - @Getter - private Consumer afterWorking = (machine) -> {}; - @Getter - private boolean regressWhenWaiting = true; - private boolean allowCoverOnFront = false; - @Getter - @Nullable - private PanelFactory ui = null; - @Getter - private String themeId = ThemeAPI.DEFAULT_ID; - private @Nullable Supplier appearance; - @Getter // getter for KJS - @Nullable - private String langValue = null; public MachineBuilder(GTRegistrate registrate, String name, - Function definition, - BiFunction blockFactory, - BiFunction itemFactory, + BuilderCallback callback, MachineInstanceFactory instanceFactory) { - this.registrate = registrate; - this.name = name; - this.blockFactory = blockFactory; - this.itemFactory = itemFactory; + super(registrate, registrate, name, callback, GTRegistries.Keys.MACHINE); this.instanceFactory = instanceFactory; - this.definition = definition; - + this.properties = createProperties(); this.defaultLang(); } + protected MachineDefinition.Properties createProperties() { + return new MachineDefinition.Properties(); + } + + protected MachineDefinition.Properties getProperties() { + return properties; + } + + @Override + public GTRegistrate getOwner() { + return (GTRegistrate) super.getOwner(); + } + @SuppressWarnings("unchecked") public SELF getThis() { return (SELF) this; @@ -183,58 +129,119 @@ public SELF machine(MachineInstanceFactory instanceFactory) { } public SELF blockModel(@Nullable NonNullBiConsumer, GTBlockstateProvider> blockModel) { - this.blockModel = blockModel; + properties.blockModel(blockModel); return getThis(); } public SELF shape(VoxelShape shape) { - this.shape = shape; + properties.shape(shape); return getThis(); } public SELF rotationState(RotationState rotationState) { - this.rotationState = rotationState; + properties.rotationState(rotationState); return getThis(); } public SELF allowExtendedFacing(boolean allowExtendedFacing) { - this.allowExtendedFacing = allowExtendedFacing; + properties.allowExtendedFacing(allowExtendedFacing); return getThis(); } public SELF hasBER(boolean hasBER) { - this.hasBER = hasBER; + properties.hasBER(hasBER); return getThis(); } - public SELF renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { - this.renderMultiblockWorldPreview = renderMultiblockWorldPreview; - return getThis(); + /** + * Gets the {@link MetaMachineBlock} builder for this machine so that further customization can be done.
+ * If the {@link BlockBuilder} has not been created yet, then the default one is created. + * + * @return the {@link BlockBuilder} for the {@link MetaMachineBlock} + */ + public BlockBuilder> block() { + if (blockBuilder != null) return blockBuilder; + return block(MetaMachineBlock::new); } - public SELF renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { - this.renderMultiblockXEIPreview = renderMultiblockXEIPreview; - return getThis(); - } + /** + * Create a {@link MetaMachineBlock} for this machine, which is created by the given factory, and return the builder + * for it so that further customization can be done.
+ * Cannot be called if {@link #block()} has already been called. + * + * @param The type of the block. + * @param factory A factory for the block, which accepts the block properties and machine definition and returns a + * new block. + * @return the {@link BlockBuilder} for the {@link MetaMachineBlock} + */ + public BlockBuilder> block(BiFunction factory) { + if (blockBuilder != null) throw new IllegalStateException( + "Block builder for machine %s has already been initialized.".formatted(getName())); - public SELF blockProp(NonNullUnaryOperator blockProp) { - this.blockProp = blockProp; - return getThis(); - } + var newBlockBuilder = this.getOwner().block(this, getName(), properties -> { + MachineDefinition.setBuilt(this.asSupplier().get()); + var b = factory.apply(properties, this.asSupplier().get()); + MachineDefinition.clearBuilt(); + return b; + }) + .color(() -> () -> MetaMachineBlock::colorTinted) + .initialProperties(() -> Blocks.DISPENSER) + .properties(BlockBehaviour.Properties::noLootTable) + .addLayer(() -> RenderType::cutout) + .exBlockstate(properties.blockModel() != null ? properties.blockModel() : + createMachineModel(properties.model())) + .onRegister(b -> Arrays.stream(properties.abilities()).forEach(a -> a.register(properties.tier(), b))); - public SELF itemProp(NonNullUnaryOperator itemProp) { - this.itemProp = itemProp; - return getThis(); + blockBuilder = newBlockBuilder; + return newBlockBuilder; } - public SELF blockBuilder(Consumer> blockBuilder) { - this.blockBuilder = blockBuilder; - return getThis(); + /** + * Gets the {@link MetaMachineItem} builder for this machine so that further customization can be done.
+ * If the {@link ItemBuilder} has not been created yet, then the default one is created. + * + * @return The {@link ItemBuilder} for the {@link MetaMachineItem} + */ + public ItemBuilder> item() { + if (itemBuilder != null) return itemBuilder; + return item(MetaMachineItem::new); } - public SELF itemBuilder(Consumer> itemBuilder) { - this.itemBuilder = itemBuilder; - return getThis(); + /** + * Create a {@link MetaMachineItem} for this machine, which is created by the given factory, and return the builder + * for it so that further customization can be done.
+ * Cannot be called if {@link #item()} has already been called. + * + * @param The type of the item. + * @param factory A factory for the item, which accepts the block and item properties and returns a new item. + * @return the {@link ItemBuilder} for the {@link MetaMachineItem} + */ + public ItemBuilder> item(BiFunction factory) { + if (itemBuilder != null) throw new IllegalStateException( + "Item builder for machine %s has already been initialized.".formatted(getName())); + + var newItemBuilder = getOwner() + .item(this, getName(), + properties -> factory.apply( + Objects.requireNonNull(blockEntry, "Item factory called before block resolved.").get(), + properties)) + .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys + // copied from BlockBuilder#item + .model((ctx, prov) -> prov.withExistingParent(ctx.getName(), + getOwner().makeResourceLocation("block/machine/" + ctx.getName()))) + .color(() -> () -> ((itemStack, tintIndex) -> tintIndex == 2 ? + GTValues.VC[properties.tier() == -1 ? 0 : properties.tier()] : + tintIndex == 1 ? properties.paintingColor() : -1)) + .clientExtension(() -> () -> new IClientItemExtensions() { + + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() { + return ItemWithBERModelRenderer.INSTANCE; + } + }); + + itemBuilder = newItemBuilder; + return newItemBuilder; } public SELF onBlockEntityRegister(NonNullConsumer> onBlockEntityRegister) { @@ -243,77 +250,72 @@ public SELF onBlockEntityRegister(NonNullConsumer> onBl } public SELF tier(int tier) { - this.tier = tier; + properties.tier(tier); return getThis(); } public SELF recipeOutputLimits(Reference2IntMap> recipeOutputLimits) { - this.recipeOutputLimits = recipeOutputLimits; + properties.recipeOutputLimits(recipeOutputLimits); return getThis(); } public SELF paintingColor(int paintingColor) { - this.paintingColor = paintingColor; - return getThis(); - } - - public SELF itemColor(BiFunction itemColor) { - this.itemColor = itemColor; + properties.paintingColor(paintingColor); return getThis(); } public SELF tooltipBuilder(BiConsumer> tooltipBuilder) { - this.tooltipBuilder = tooltipBuilder; + properties.tooltipBuilder(tooltipBuilder); return getThis(); } public SELF alwaysTryModifyRecipe(boolean alwaysTryModifyRecipe) { - this.alwaysTryModifyRecipe = alwaysTryModifyRecipe; + properties.alwaysTryModifyRecipe(alwaysTryModifyRecipe); return getThis(); } public SELF beforeWorking(BiPredicate beforeWorking) { - this.beforeWorking = beforeWorking; + properties.beforeWorking(beforeWorking); return getThis(); } public SELF onWorking(Predicate onWorking) { - this.onWorking = onWorking; + properties.onWorking(onWorking); return getThis(); } public SELF onWaiting(Consumer onWaiting) { - this.onWaiting = onWaiting; + properties.onWaiting(onWaiting); return getThis(); } public SELF afterWorking(Consumer afterWorking) { - this.afterWorking = afterWorking; + properties.afterWorking(afterWorking); return getThis(); } public SELF regressWhenWaiting(boolean regressWhenWaiting) { - this.regressWhenWaiting = regressWhenWaiting; + properties.regressWhenWaiting(regressWhenWaiting); return getThis(); } public SELF allowCoverOnFront(boolean allowCoverOnFront) { - this.allowCoverOnFront = allowCoverOnFront; + properties.allowCoverOnFront(allowCoverOnFront); return getThis(); } public SELF appearance(Supplier appearance) { - this.appearance = appearance; + properties.appearance(appearance); return getThis(); } public SELF ui(PanelFactory ui) { - this.ui = ui; + properties.ui(ui); return getThis(); } public SELF defaultLang() { - return lang(RegistrateLangProvider.toEnglishName(name)); + return lang(RegistrateLangProvider.toEnglishName(getName())); } public SELF lang(String name) { @@ -321,40 +323,33 @@ public SELF lang(String name) { } public SELF langValue(String langValue) { - this.langValue = langValue; + properties.langValue(langValue); return getThis(); } public SELF recipeType(GTRecipeType type) { - // noinspection ConstantValue - if (type == null) { - GTCEu.LOGGER.error( - "Tried to set null recipe type on machine {}. Did you create the recipe type before this machine?", - this.registrate.makeResourceLocation(this.name)); - return getThis(); - } - this.recipeTypes = ArrayUtils.add(this.recipeTypes, type); + Objects.requireNonNull(type, + "Tried to set null recipe type on machine %s. Did you create the recipe type before this machine?" + .formatted( + getOwner().makeResourceLocation(getName()))); + + properties.recipeTypes(ArrayUtils.add(properties.recipeTypes(), type)); initRecipeMachineModelProperties(type); return getThis(); } @Tolerate public SELF recipeTypes(GTRecipeType... types) { + Validate.noNullElements(types, "Cannot add null recipe type to machine."); + List typeList = new ArrayList<>(); - Collections.addAll(typeList, this.recipeTypes); - - for (int i = 0; i < types.length; i++) { - GTRecipeType type = types[i]; - if (type != null) { - initRecipeMachineModelProperties(type); - typeList.add(type); - } else { - GTCEu.LOGGER.error( - "Tried to set null recipe type on machine {} (index {}). Did you create the recipe type before this machine?", - this.registrate.makeResourceLocation(this.name), i); - } + Collections.addAll(typeList, properties.recipeTypes()); + + for (GTRecipeType type : types) { + initRecipeMachineModelProperties(type); + typeList.add(type); } - this.recipeTypes = typeList.toArray(GTRecipeType[]::new); + properties.recipeTypes(typeList.toArray(GTRecipeType[]::new)); return getThis(); } @@ -362,13 +357,13 @@ protected void initRecipeMachineModelProperties(GTRecipeType type) { if (type == GTRecipeTypes.DUMMY_RECIPES) { return; } - if (!modelProperties.containsKey(GTMachineModelProperties.RECIPE_LOGIC_STATUS)) { + if (!properties.modelProperties().containsKey(GTMachineModelProperties.RECIPE_LOGIC_STATUS)) { modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE); } } public SELF model(@Nullable MachineBuilder.ModelInitializer model) { - this.model = model; + properties.model(model); return getThis(); } @@ -377,7 +372,7 @@ public SELF simpleModel(ResourceLocation modelName) { } public SELF defaultModel() { - return simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); + return simpleModel(getOwner().makeResourceLocation("block/machine/template/" + getName())); } public SELF tieredHullModel(ResourceLocation model) { @@ -387,7 +382,7 @@ public SELF tieredHullModel(ResourceLocation model) { public SELF overlayTieredHullModel(String name) { modelProperty(GTMachineModelProperties.IS_FORMED, false); return overlayTieredHullModel( - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), "block/machine/part/" + name)); + getOwner().makeResourceLocation("block/machine/part/" + name)); } public SELF overlayTieredHullModel(ResourceLocation overlayModel) { @@ -402,12 +397,11 @@ public SELF colorOverlayTieredHullModel(String overlay, @Nullable String pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); - ResourceLocation overlayTex = ResourceLocation.fromNamespaceAndPath(registrate.getModid(), - "block/overlay/machine/" + overlay); + ResourceLocation overlayTex = getOwner().makeResourceLocation("block/overlay/machine/" + overlay); ResourceLocation pipeOverlayTex = pipeOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + pipeOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + pipeOverlay); ResourceLocation emissiveOverlayTex = emissiveOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + emissiveOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + emissiveOverlay); return colorOverlayTieredHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } @@ -426,7 +420,7 @@ public SELF colorOverlayTieredHullModel(ResourceLocation overlay, public SELF overlaySteamHullModel(String name) { modelProperty(GTMachineModelProperties.IS_FORMED, false); return overlaySteamHullModel( - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), "block/machine/part/" + name)); + getOwner().makeResourceLocation("block/machine/part/" + name)); } public SELF overlaySteamHullModel(ResourceLocation overlayModel) { @@ -442,13 +436,11 @@ public SELF colorOverlaySteamHullModel(String overlay, @Nullable String pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); - ResourceLocation overlayTex = ResourceLocation.fromNamespaceAndPath(registrate.getModid(), - "block/overlay/machine/" + overlay); + ResourceLocation overlayTex = getOwner().makeResourceLocation("block/overlay/machine/" + overlay); ResourceLocation pipeOverlayTex = pipeOverlay == null ? null : - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), "block/overlay/machine/" + pipeOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + pipeOverlay); ResourceLocation emissiveOverlayTex = emissiveOverlay == null ? null : - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), - "block/overlay/machine/" + emissiveOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + emissiveOverlay); return colorOverlaySteamHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } @@ -456,12 +448,12 @@ public SELF colorOverlaySteamHullModel(String overlay, @Nullable ResourceLocation pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); - ResourceLocation overlayTex = ResourceLocation.fromNamespaceAndPath(registrate.getModid(), + ResourceLocation overlayTex = getOwner().makeResourceLocation( "block/overlay/machine/" + overlay); ResourceLocation pipeOverlayTex = pipeOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + pipeOverlay); + getOwner().makeResourceLocation(("block/overlay/machine/" + pipeOverlay)); ResourceLocation emissiveOverlayTex = emissiveOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + emissiveOverlay); + getOwner().makeResourceLocation(("block/overlay/machine/" + emissiveOverlay)); return colorOverlaySteamHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } @@ -508,7 +500,7 @@ public SELF sidedWorkableCasingModel(ResourceLocation baseCasing, } public SELF appearanceBlock(Supplier block) { - appearance = () -> block.get().defaultBlockState(); + properties.appearance(() -> block.get().defaultBlockState()); return getThis(); } @@ -516,8 +508,9 @@ public SELF tooltips(@Nullable Component... components) { return tooltips(Arrays.asList(components)); } + @SuppressWarnings("NullableProblems") public SELF tooltips(List components) { - tooltips.addAll(components.stream().filter(Objects::nonNull).toList()); + properties.tooltips().addAll(components.stream().filter(Objects::nonNull).toList()); return getThis(); } @@ -527,22 +520,22 @@ public SELF conditionalTooltip(Component component, BooleanSupplier condition) { public SELF conditionalTooltip(Component component, boolean condition) { if (condition) - tooltips.add(component); + properties.tooltips().add(component); return getThis(); } public SELF abilities(PartAbility... abilities) { - this.abilities = abilities; + properties.abilities(abilities); return getThis(); } public SELF themeId(String themeId) { - this.themeId = themeId; + properties.themeId(themeId); return getThis(); } public SELF themeId(Function themeId) { - this.themeId = themeId.apply(tier); + properties.themeId(themeId.apply(properties.tier())); return getThis(); } @@ -552,77 +545,61 @@ public SELF modelProperty(Property property) { public > SELF modelProperty(Property property, @Nullable T defaultValue) { - this.modelProperties.put(property, defaultValue); + properties.modelProperties().put(property, defaultValue); return getThis(); } - // KJS helpers for model property defaults - // These don't need to be copied to the multiblock builder because KJS doesn't care about the return type downgrade - - public SELF kjs$modelPropertyBool(Property property, boolean defaultValue) { - return modelProperty(property, defaultValue); - } - - public SELF kjs$modelPropertyInt(Property property, int defaultValue) { - return modelProperty(property, defaultValue); - } - - public & Comparable> SELF kjs$modelPropertyEnum(Property property, - T defaultValue) { - return modelProperty(property, defaultValue); - } - @Tolerate public SELF modelProperties(Property... properties) { return this.modelProperties(List.of(properties)); } @Tolerate - public SELF modelProperties(Collection> properties) { - for (Property prop : properties) { - this.modelProperties.put(prop, null); + public SELF modelProperties(Collection> modelProperties) { + for (Property prop : modelProperties) { + properties.modelProperties().put(prop, null); } return getThis(); } @Tolerate - public SELF modelProperties(Map, ? extends Comparable> properties) { - this.modelProperties.putAll(properties); + public SELF modelProperties(Map, ? extends Comparable> modelProperties) { + properties.modelProperties().putAll(modelProperties); return getThis(); } public SELF removeModelProperty(Property property) { - this.modelProperties.remove(property); + properties.modelProperties().remove(property); return getThis(); } public SELF clearModelProperties() { - this.modelProperties.clear(); + properties.modelProperties().clear(); return getThis(); } public SELF recipeModifier(RecipeModifier recipeModifier) { - this.recipeModifier = recipeModifier instanceof RecipeModifierList list ? list : - new RecipeModifierList(recipeModifier); + properties.recipeModifier(recipeModifier instanceof RecipeModifierList list ? list : + new RecipeModifierList(recipeModifier)); return getThis(); } public SELF addRecipeModifier(RecipeModifier recipeModifier) { - if (this.recipeModifier instanceof RecipeModifierList list) { - this.recipeModifier = new RecipeModifierList(ArrayUtils.add(list.getModifiers(), recipeModifier)); + if (properties.recipeModifier() instanceof RecipeModifierList list) { + properties.recipeModifier(new RecipeModifierList(ArrayUtils.add(list.getModifiers(), recipeModifier))); } else { - this.recipeModifier = new RecipeModifierList(this.recipeModifier, recipeModifier); + properties.recipeModifier(new RecipeModifierList(properties.recipeModifier(), recipeModifier)); } return getThis(); } public SELF recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { - this.alwaysTryModifyRecipe = alwaysTryModifyRecipe; + properties.alwaysTryModifyRecipe(alwaysTryModifyRecipe); return this.recipeModifier(recipeModifier); } public SELF recipeModifiers(RecipeModifier... recipeModifiers) { - this.recipeModifier = new RecipeModifierList(recipeModifiers); + properties.recipeModifier(new RecipeModifierList(recipeModifiers)); return getThis(); } @@ -632,123 +609,59 @@ public SELF recipeModifiers(boolean alwaysTryModifyRecipe, } public SELF noRecipeModifier() { - this.recipeModifier = new RecipeModifierList(RecipeModifier.NO_MODIFIER); - this.alwaysTryModifyRecipe = false; + properties.recipeModifier(new RecipeModifierList(RecipeModifier.NO_MODIFIER)); + properties.alwaysTryModifyRecipe(false); return getThis(); } public SELF addOutputLimit(RecipeCapability capability, int limit) { - this.recipeOutputLimits.put(capability, limit); - return getThis(); - } - - public SELF multiblockPreviewRenderer(boolean multiBlockWorldPreview, - boolean multiBlockXEIPreview) { - this.renderMultiblockWorldPreview = multiBlockWorldPreview; - this.renderMultiblockXEIPreview = multiBlockXEIPreview; + properties.recipeOutputLimits().put(capability, limit); return getThis(); } - protected DEFINITION createDefinition() { - return definition.apply(registrate.makeResourceLocation(name)); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - protected void setupStateDefinition(MachineDefinition definition) { - StateDefinition.Builder builder = new StateDefinition.Builder<>( - definition); - this.modelProperties.keySet().forEach(builder::add); - definition.setStateDefinition(builder.create(MachineDefinition::defaultRenderState, MachineRenderState::new)); - - MachineRenderState defaultState = definition.getStateDefinition().any(); - for (var entry : this.modelProperties.entrySet()) { - if (entry.getValue() == null) continue; - defaultState = defaultState.setValue((Property) entry.getKey(), (Comparable) entry.getValue()); - } - - definition.registerDefaultState(defaultState); + @SuppressWarnings({ "NullableProblems", "unchecked" }) + protected @NonNull DEFINITION createEntry() { + return (DEFINITION) new MachineDefinition(getOwner().makeResourceLocation(getName()), properties); } @HideFromJS - public DEFINITION register() { + public MachineEntry register() { ModifyMachineEvent event = new ModifyMachineEvent(this); ModLoader.postEvent(event); if (GTCEu.Mods.isKubeJSLoaded()) { KJSCallWrapper.fireKJSEvent(event); } - this.registrate.object(name); - var definition = createDefinition(); - definition.setRotationState(rotationState); - setupStateDefinition(definition); - if (model == null && blockModel == null) { - simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); + if (properties.model() == null && properties.blockModel() == null) { + simpleModel(getOwner().makeResourceLocation("block/machine/template/" + getName())); } - var blockBuilder = BlockBuilderWrapper.makeBlockBuilder(getThis(), definition); - if (this.langValue != null) { - blockBuilder.lang(langValue); - definition.setLangValue(langValue); + if (properties.langValue() != null) { + block().lang(properties.langValue()); } - if (this.blockBuilder != null) { - this.blockBuilder.accept(blockBuilder); - } - var block = blockBuilder.register(); - var itemBuilder = ItemBuilderWrapper.makeItemBuilder(getThis(), block); - if (this.itemBuilder != null) { - this.itemBuilder.accept(itemBuilder); - } - var item = itemBuilder.register(); + blockEntry = block().register(); - var blockEntityBuilder = registrate - .blockEntity( + var blockEntityBuilder = getOwner() + .>blockEntity(this, getName(), (type, pos, state) -> instanceFactory .buildMachine(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) - .validBlock(block); - if (hasBER) { + .validBlock(blockEntry); + + if (properties.hasBER()) { blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); } - var blockEntity = blockEntityBuilder.register(); - if (this.ui != null) { - definition.setUI(ui); - } - definition.setThemeId(themeId); - definition.setRecipeTypes(recipeTypes); - definition.setBlockSupplier(block); - definition.setItemSupplier(item); - definition.setTier(tier); - definition.setRecipeOutputLimits(recipeOutputLimits); - definition.setBlockEntityTypeSupplier(blockEntity::get); - definition.setTooltipBuilder((itemStack, components) -> { - components.addAll(tooltips); - if (tooltipBuilder != null) tooltipBuilder.accept(itemStack, components); - }); - definition.setRecipeModifier(recipeModifier); - definition.setAlwaysTryModifyRecipe(alwaysTryModifyRecipe); - definition.setBeforeWorking(this.beforeWorking); - definition.setOnWorking(this.onWorking); - definition.setOnWaiting(this.onWaiting); - definition.setAfterWorking(this.afterWorking); - definition.setRegressWhenWaiting(this.regressWhenWaiting); - definition.setAllowCoverOnFront(this.allowCoverOnFront); - - for (GTRecipeType type : recipeTypes) { - if (type.getIconSupplier() == null) { - type.setIconSupplier(definition::asStack); - } - } - if (appearance == null) { - appearance = block::getDefaultState; - } - definition.setAppearance(appearance); - definition.setAllowExtendedFacing(allowExtendedFacing); - definition.setShape(shape); - definition.setDefaultPaintingColor(paintingColor); - definition.setRenderXEIPreview(renderMultiblockXEIPreview); - definition.setRenderWorldPreview(renderMultiblockWorldPreview); - GTRegistries.register(GTRegistries.MACHINES, definition.getId(), definition); - return definition; + + properties.blockHolder(blockEntry); + properties.itemHolder(item().register()); + properties.blockEntityTypeSupplier(blockEntityBuilder.register()::get); + + return (MachineEntry) super.register(); + } + + @Override + protected MachineEntry createEntryWrapper(DeferredHolder delegate) { + return new MachineEntry<>(getOwner(), delegate); } @FunctionalInterface @@ -788,56 +701,6 @@ default ModelInitializer compose(UnaryOperator BlockBuilder> makeBlockBuilder(MachineBuilder builder, - DEFINITION definition) { - return builder.registrate.block(properties -> makeBlock(builder, definition, properties)) - .color(() -> () -> MetaMachineBlock::colorTinted) - .initialProperties(() -> Blocks.DISPENSER) - .properties(BlockBehaviour.Properties::noLootTable) - .addLayer(() -> RenderType::cutout) - .exBlockstate(builder.blockModel != null ? builder.blockModel : createMachineModel(builder.model)) - .properties(builder.blockProp) - .onRegister(b -> Arrays.stream(builder.abilities).forEach(a -> a.register(builder.tier, b))); - } - - private static Block makeBlock(MachineBuilder builder, DEFINITION definition, - BlockBehaviour.Properties properties) { - MachineDefinition.setBuilt(definition); - var b = builder.blockFactory.apply(properties, definition); - MachineDefinition.clearBuilt(); - return b; - } - } - - protected static class ItemBuilderWrapper { - - public static ItemBuilder> makeItemBuilder(MachineBuilder builder, - BlockEntry block) { - return builder.registrate - .item(properties -> builder.itemFactory.apply((MetaMachineBlock) block.get(), properties)) - .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys - // copied from BlockBuilder#item - .model((ctx, prov) -> { - prov.withExistingParent(ctx.getName(), - ResourceLocation.fromNamespaceAndPath(builder.registrate.getModid(), - "block/machine/" + ctx.getName())); - }) - .clientExtension(() -> () -> new IClientItemExtensions() { - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return ItemWithBERModelRenderer.INSTANCE; - } - }) - .color(() -> () -> builder.itemColor::apply) - .properties(builder.itemProp); - } - } - // spotless:on - protected static final class KJSCallWrapper { public static void fireKJSEvent(ModifyMachineEvent event) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java new file mode 100644 index 00000000000..a562467dd37 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -0,0 +1,135 @@ +package com.gregtechceu.gtceu.api.registry.registrate.builder; + +import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; +import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; +import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; +import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; + +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.core.Direction; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.state.BlockState; + +import brachy.modularui.api.widget.IWidget; +import brachy.modularui.value.sync.PanelSyncManager; +import com.tterrag.registrate.builders.BuilderCallback; +import lombok.experimental.Accessors; +import lombok.experimental.Tolerate; +import org.apache.commons.lang3.function.TriFunction; +import org.jspecify.annotations.NonNull; + +import java.util.*; +import java.util.function.*; + +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +@Accessors(chain = true, fluent = true) +public class MultiblockMachineBuilder< + MACHINE extends MultiblockControllerMachine, + SELF extends MultiblockMachineBuilder> + extends MachineBuilder { + + public MultiblockMachineBuilder(GTRegistrate registrate, String name, + BuilderCallback callback, + MachineInstanceFactory blockEntityFactory) { + super(registrate, name, callback, blockEntityFactory); + allowExtendedFacing(true); + allowCoverOnFront(true); + // always add the formed property to multi controllers + modelProperty(GTMachineModelProperties.IS_FORMED, false); + } + + public SELF generator(boolean generator) { + getProperties().generator(generator); + return getThis(); + } + + public SELF pattern(Function pattern) { + getProperties().patterns().put(MultiblockControllerMachine.DEFAULT_STRUCTURE, pattern); + return getThis(); + } + + public SELF pattern(String structureName, Function pattern) { + getProperties().patterns().put(structureName, pattern); + return getThis(); + } + + public SELF allowFlip(boolean allowFlip) { + getProperties().allowFlip(allowFlip); + return getThis(); + } + + public SELF partSorter(Function> partSorter) { + getProperties().partSorter(partSorter); + return getThis(); + } + + public SELF partAppearance(TriFunction partAppearance) { + getProperties().partAppearance(partAppearance); + return getThis(); + } + + public SELF additionalDisplay(BiFunction> additionalDisplay) { + getProperties().additionalDisplay(additionalDisplay); + return getThis(); + } + + public SELF recoveryItems(Supplier items) { + getProperties().recoveryItems() + .add(() -> Arrays.stream(items.get()).map(ItemLike::asItem).map(Item::getDefaultInstance) + .toArray(ItemStack[]::new)); + return getThis(); + } + + public SELF recoveryStacks(Supplier stacks) { + getProperties().recoveryItems().add(stacks); + return getThis(); + } + + @Tolerate + public SELF partSorter(Comparator sorter) { + getProperties().partSorter($ -> sorter); + return getThis(); + } + + public SELF renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { + getProperties().renderMultiblockWorldPreview(renderMultiblockWorldPreview); + return getThis(); + } + + public SELF renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { + getProperties().renderMultiblockXEIPreview(renderMultiblockXEIPreview); + return getThis(); + } + + public SELF multiblockPreviewRenderer(boolean multiblockWorldPreview, + boolean multiblockXEIPreview) { + renderMultiblockWorldPreview(multiblockWorldPreview); + renderMultiblockXEIPreview(multiblockXEIPreview); + return getThis(); + } + + @Override + protected MachineDefinition.Properties createProperties() { + return new MultiblockMachineDefinition.Properties(); + } + + @Override + public MultiblockMachineDefinition.Properties getProperties() { + return (MultiblockMachineDefinition.Properties) super.getProperties(); + } + + @Override + @SuppressWarnings("NullableProblems") + protected @NonNull MultiblockMachineDefinition createEntry() { + return new MultiblockMachineDefinition(getOwner().makeResourceLocation(getName()), getProperties()); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/SoundEntryBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java similarity index 58% rename from src/main/java/com/gregtechceu/gtceu/api/registry/registrate/SoundEntryBuilder.java rename to src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java index 39a709fbee2..0e6582622a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/SoundEntryBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.registry.registrate; +package com.gregtechceu.gtceu.api.registry.registrate.builder; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.registry.GTRegistries; @@ -7,6 +7,8 @@ import com.gregtechceu.gtceu.api.sound.SoundEntry; import com.gregtechceu.gtceu.api.sound.WrappedSoundEntry; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; @@ -15,6 +17,10 @@ import net.minecraft.sounds.SoundSource; import com.google.gson.JsonObject; +import com.tterrag.registrate.AbstractRegistrate; +import com.tterrag.registrate.builders.AbstractBuilder; +import com.tterrag.registrate.builders.BuilderCallback; +import com.tterrag.registrate.util.entry.RegistryEntry; import org.jetbrains.annotations.Nullable; import java.nio.file.Path; @@ -22,7 +28,8 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; -public class SoundEntryBuilder { +@SuppressWarnings("unused") +public class SoundEntryBuilder

extends AbstractBuilder> { public static class SoundEntryProvider implements DataProvider { @@ -55,7 +62,6 @@ public CompletableFuture generate(Path path, CachedOutput cache) { } } - protected ResourceLocation id; @Nullable protected String subtitle = "unregistered"; protected SoundSource category = SoundSource.BLOCKS; @@ -63,59 +69,69 @@ public CompletableFuture generate(Path path, CachedOutput cache) { protected List variants; protected int attenuationDistance; - public SoundEntryBuilder(ResourceLocation id) { + public SoundEntryBuilder(AbstractRegistrate owner, P parent, String name, BuilderCallback callback) { + super(owner, parent, name, callback, GTRegistries.Keys.SOUND); wrappedEvents = new ArrayList<>(); variants = new ArrayList<>(); - this.id = id; } - public SoundEntryBuilder subtitle(String subtitle) { + public SoundEntryBuilder

subtitle(String subtitle) { this.subtitle = subtitle; return this; } - public SoundEntryBuilder attenuationDistance(int distance) { + public SoundEntryBuilder

attenuationDistance(int distance) { this.attenuationDistance = distance; return this; } - public SoundEntryBuilder noSubtitle() { + public SoundEntryBuilder

noSubtitle() { this.subtitle = null; return this; } - public SoundEntryBuilder category(SoundSource category) { + public SoundEntryBuilder

category(SoundSource category) { this.category = category; return this; } - public SoundEntryBuilder addVariant(String name) { + public SoundEntryBuilder

addVariant(String name) { return addVariant(GTCEu.id(name)); } - public SoundEntryBuilder addVariant(ResourceLocation id) { + public SoundEntryBuilder

addVariant(ResourceLocation id) { variants.add(id); return this; } - public SoundEntryBuilder playExisting(Supplier event, float volume, float pitch) { + public SoundEntryBuilder

playExisting(Supplier event, float volume, float pitch) { wrappedEvents.add(new ConfiguredSoundEvent(event, volume, pitch)); return this; } - public SoundEntryBuilder playExisting(SoundEvent event, float volume, float pitch) { + public SoundEntryBuilder

playExisting(SoundEvent event, float volume, float pitch) { return playExisting(() -> event, volume, pitch); } - public SoundEntryBuilder playExisting(SoundEvent event) { + public SoundEntryBuilder

playExisting(SoundEvent event) { return playExisting(event, 1, 1); } - public SoundEntry build() { + @Override + protected SoundEntry createEntry() { SoundEntry entry = wrappedEvents.isEmpty() ? - new CustomSoundEntry(id, variants, subtitle, category, attenuationDistance) : - new WrappedSoundEntry(id, subtitle, wrappedEvents, category, attenuationDistance); - GTRegistries.register(GTRegistries.SOUNDS, entry.getId(), entry); + new CustomSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), variants, + subtitle, category, attenuationDistance) : + new WrappedSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), subtitle, + wrappedEvents, category, attenuationDistance); + entry.prepare(); + entry.register( + soundEvent -> Registry.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), soundEvent)); return entry; } + + @Override + public RegistryEntry register() { + return super.register(); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java new file mode 100644 index 00000000000..8377158090c --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.registry.registrate.builder; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java new file mode 100644 index 00000000000..c148d94555d --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java @@ -0,0 +1,51 @@ +package com.gregtechceu.gtceu.api.registry.registrate.entry; + +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.item.MetaMachineItem; +import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.neoforge.registries.DeferredHolder; + +import com.tterrag.registrate.util.entry.RegistryEntry; + +public class MachineEntry extends RegistryEntry implements ItemLike { + + public MachineEntry(GTRegistrate owner, DeferredHolder key) { + super(owner, key); + } + + public int getTier() { + return value().getTier(); + } + + public MetaMachineBlock getBlock() { + return value().getBlock(); + } + + public MetaMachineItem getItem() { + return value().getItem(); + } + + public BlockEntityType getBlockEntityType() { + return value().getBlockEntityType(); + } + + @Override + public Item asItem() { + return getItem(); + } + + public ItemStack asStack() { + return new ItemStack(getItem()); + } + + public ItemStack asStack(int count) { + return new ItemStack(getItem(), count); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/package-info.java new file mode 100644 index 00000000000..690da38992c --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.registry.registrate.entry; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java b/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java index cbc2701fc4c..127d86fe406 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java @@ -14,13 +14,16 @@ import net.neoforged.api.distmarker.OnlyIn; import com.google.gson.JsonObject; +import lombok.Getter; import java.util.function.BooleanSupplier; import java.util.function.Consumer; public abstract class SoundEntry { + @Getter protected ResourceLocation id; + @Getter protected String subtitle; protected SoundSource category; protected int attenuationDistance; @@ -41,21 +44,13 @@ public SoundEntry(ResourceLocation id, String subtitle, SoundSource category, in public abstract SoundEvent getMainEvent(); public String getSubtitleKey() { - return id.getNamespace() + ".subtitle." + id.getPath(); - } - - public ResourceLocation getId() { - return id; + return id.toLanguageKey("subtitle"); } public boolean hasSubtitle() { return subtitle != null; } - public String getSubtitle() { - return subtitle; - } - public void playOnServer(Level world, Vec3i pos) { playOnServer(world, pos, 1, 1); } diff --git a/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java b/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java index 50184f06b4f..a5167f367a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java +++ b/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.client.model.pipe; import com.gregtechceu.gtceu.api.block.PipeBlock; -import com.gregtechceu.gtceu.api.registry.registrate.GTBlockBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.GTBlockBuilder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.data.model.builder.PipeModelBuilder; import com.gregtechceu.gtceu.data.pack.event.RegisterDynamicResourcesEvent; diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index ddac1fae085..9b153c7b9ce 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -2,8 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.addon.AddonFinder; -import com.gregtechceu.gtceu.api.addon.IGTAddon; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.compat.EUToFEProvider; @@ -43,14 +41,17 @@ 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.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.common.block.*; import com.gregtechceu.gtceu.common.data.*; +import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.item.*; import com.gregtechceu.gtceu.common.data.loot.*; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.data.materials.GTFoods; import com.gregtechceu.gtceu.common.data.worldgen.*; +import com.gregtechceu.gtceu.common.data.worldgen.GTFeatures; import com.gregtechceu.gtceu.common.fluid.potion.BottleItemFluidHandler; import com.gregtechceu.gtceu.common.fluid.potion.PotionItemFluidHandler; import com.gregtechceu.gtceu.common.item.DrumMachineItem; @@ -119,7 +120,6 @@ import com.tterrag.registrate.providers.RegistrateProvider; import com.tterrag.registrate.util.nullness.NonNullConsumer; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import org.jetbrains.annotations.ApiStatus; import java.util.Arrays; import java.util.List; @@ -143,14 +143,16 @@ public static void init(final IEventBus modBus) { GTRegistries.init(modBus); REGISTRATE.registerEventListeners(modBus); + GTElements.init(); MaterialIconSet.init(); MaterialIconType.init(); - initMaterials(); + GTMaterials.init(); GTMedicalConditions.init(); TagPrefix.init(); + GTAttachmentTypes.init(modBus); - GTSoundEntries.init(modBus); + GTSoundEntries.init(); GTDamageTypes.init(); GTPlaceholders.init(); @@ -164,7 +166,7 @@ public static void init(final IEventBus modBus) { GTBlocks.init(); GTFluids.init(); - GTDimensionMarkers.init(); + GTDimensionMarkers.init(modBus); GTRecipeCapabilities.init(); GTRecipeConditions.init(); ChanceLogic.init(); @@ -175,8 +177,8 @@ public static void init(final IEventBus modBus) { GTFoods.init(); GTToolTiers.init(); GTToolBehaviors.init(); - GTDataComponents.DATA_COMPONENTS.register(modBus); - GTArmorMaterials.ARMOR_MATERIALS.register(modBus); + GTDataComponents.init(modBus); + GTArmorMaterials.init(modBus); GTItems.init(); GTMachineUtils.init(); @@ -184,13 +186,11 @@ public static void init(final IEventBus modBus) { GTMachines.init(); GTEntityTypes.init(); - GTIngredientTypes.ITEM_INGREDIENT_TYPES.register(modBus); - GTIngredientTypes.FLUID_INGREDIENT_TYPES.register(modBus); - GTRecipeSerializers.RECIPE_SERIALIZERS.register(modBus); + GTIngredientTypes.init(modBus); + GTRecipeSerializers.init(modBus); - GTCommandArguments.COMMAND_ARGUMENT_TYPES.register(modBus); - GTMobEffects.MOB_EFFECTS.register(modBus); - GTParticleTypes.PARTICLE_TYPES.register(modBus); + GTMobEffects.init(modBus); + GTParticleTypes.init(modBus); WorldGenLayers.init(); GregTechDatagen.initPost(); @@ -208,7 +208,6 @@ public static void init(final IEventBus modBus) { MachineOwner.init(); GTCreativeModeTabs.init(); - GTAttachmentTypes.ATTACHMENT_TYPES.register(modBus); FusionReactorMachine.registerFusionTier(GTValues.LuV, "MKI"); FusionReactorMachine.registerFusionTier(GTValues.ZPM, "MKII"); @@ -220,14 +219,6 @@ public static void init(final IEventBus modBus) { GTGuiTheme.registerThemes(); SpoilableBehavior.init(); - - AddonFinder.getAddonList().forEach(IGTAddon::gtInitComplete); - } - - @ApiStatus.Internal - public static void initMaterials() { - GTCEu.LOGGER.info("Registering GTCEu Materials"); - GTMaterials.init(); } // Fire post material events after all other material registry events. @@ -424,7 +415,7 @@ public static void loadComplete(FMLLoadCompleteEvent event) {} public static void registerCapabilities(RegisterCapabilitiesEvent event) { event.registerItem(FluidHandler.ITEM, BottleItemFluidHandler::new, Items.GLASS_BOTTLE); - Stream quantumTanks = Stream.of(GTMachines.SUPER_TANK, GTMachines.QUANTUM_TANK) + Stream> quantumTanks = Stream.of(GTMachines.SUPER_TANK, GTMachines.QUANTUM_TANK) .flatMap(Arrays::stream); quantumTanks = Stream.concat(quantumTanks, Stream.of(GTMachines.CREATIVE_FLUID)); event.registerItem(FluidHandler.ITEM, (stack, ctx) -> { @@ -436,7 +427,7 @@ public static void registerCapabilities(RegisterCapabilitiesEvent event) { return null; } return new QuantumFluidHandlerItemStack(stack, capacity); - }, quantumTanks.filter(Objects::nonNull).map(MachineDefinition::getItem).toArray(Item[]::new)); + }, quantumTanks.filter(Objects::nonNull).map(MachineEntry::getItem).toArray(Item[]::new)); for (Block block : BuiltInRegistries.BLOCK) { if (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && diff --git a/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java b/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java index 172080e6f5b..3a47cb62e50 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java @@ -80,7 +80,7 @@ public void progressRelatedCondition(@NotNull MaterialEntry materialEntry, int c HazardProperty materialHazard = materialEntry.material().getProperty(PropertyKey.HAZARD); float strength = (float) (materialEntry.getMaterialAmount() / GTValues.M) * count * materialHazard.progressionMultiplier; - progressCondition(materialHazard.condition, strength); + progressCondition(materialHazard.condition.value(), strength); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java index 5f48d47966e..ac2789fe29b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.common.capability.MedicalConditionTracker; import net.minecraft.world.entity.player.Player; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.attachment.AttachmentType; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; @@ -11,7 +12,7 @@ public class GTAttachmentTypes { - public static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create( + private static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create( NeoForgeRegistries.ATTACHMENT_TYPES, GTCEu.MOD_ID); public static final DeferredHolder, AttachmentType> MEDICAL_CONDITION_TRACKER = ATTACHMENT_TYPES @@ -21,4 +22,8 @@ public class GTAttachmentTypes { } return null; }).build()); + + public static void init(IEventBus modBus) { + ATTACHMENT_TYPES.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java deleted file mode 100644 index cd7e8a47632..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.gregtechceu.gtceu.common.data; - -import com.gregtechceu.gtceu.GTCEu; - -import net.minecraft.commands.synchronization.ArgumentTypeInfo; -import net.minecraft.core.registries.Registries; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.neoforge.registries.DeferredRegister; - -import com.mojang.brigadier.arguments.ArgumentType; - -@SuppressWarnings("unused") -public class GTCommandArguments { - - public static final DeferredRegister> COMMAND_ARGUMENT_TYPES = DeferredRegister - .create(Registries.COMMAND_ARGUMENT_TYPE, GTCEu.MOD_ID); - - @SuppressWarnings({ "SameParameterValue", "unchecked" }) - private static > Class fixClassType(Class type) { - return (Class) type; - } - - public static void init(IEventBus modBus) { - COMMAND_ARGUMENT_TYPES.register(modBus); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java index 5ba309c829b..b9504cbf052 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.cover.CoverDefinition; -import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.client.renderer.cover.*; import com.gregtechceu.gtceu.common.cover.*; import com.gregtechceu.gtceu.common.cover.detector.*; @@ -16,14 +16,18 @@ import com.gregtechceu.gtceu.common.cover.voiding.FluidVoidingCover; import com.gregtechceu.gtceu.common.cover.voiding.ItemVoidingCover; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.core.Holder; +import com.tterrag.registrate.util.entry.RegistryEntry; import it.unimi.dsi.fastutil.ints.Int2ObjectFunction; import java.util.Arrays; import java.util.Locale; import java.util.function.Supplier; +import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; + +@SuppressWarnings("unused") public class GTCovers { public static final int[] ALL_TIERS = GTValues.tiersBetween(GTValues.LV, @@ -31,23 +35,26 @@ public class GTCovers { public static final int[] ALL_TIERS_WITH_ULV = GTValues.tiersBetween(GTValues.ULV, GTCEuAPI.isHighTier() ? GTValues.OpV : GTValues.UV); - public final static CoverDefinition FACADE = register("facade", FacadeCover::new, + public static final Holder FACADE = REGISTRATE.cover("facade", FacadeCover::new, () -> () -> FacadeCoverRenderer.INSTANCE); - public final static CoverDefinition ITEM_FILTER = register("item_filter", ItemFilterCover::new); - public final static CoverDefinition FLUID_FILTER = register("fluid_filter", FluidFilterCover::new); + public static final Holder ITEM_FILTER = REGISTRATE.cover("item_filter", ItemFilterCover::new); + public static final Holder FLUID_FILTER = REGISTRATE.cover("fluid_filter", FluidFilterCover::new); - public final static CoverDefinition INFINITE_WATER = register("infinite_water", InfiniteWaterCover::new); - public final static CoverDefinition ENDER_FLUID_LINK = register("ender_fluid_link", EnderFluidLinkCover::new); - public final static CoverDefinition ENDER_ITEM_LINK = register("ender_item_link", EnderItemLinkCover::new); - public final static CoverDefinition ENDER_REDSTONE_LINK = register("ender_redstone_link", + public static final Holder INFINITE_WATER = REGISTRATE.cover("infinite_water", + InfiniteWaterCover::new); + public static final Holder ENDER_FLUID_LINK = REGISTRATE.cover("ender_fluid_link", + EnderFluidLinkCover::new); + public static final Holder ENDER_ITEM_LINK = REGISTRATE.cover("ender_item_link", + EnderItemLinkCover::new); + public static final Holder ENDER_REDSTONE_LINK = REGISTRATE.cover("ender_redstone_link", EnderRedstoneLinkCover::new); - public final static CoverDefinition SHUTTER = register("shutter", ShutterCover::new); - public final static CoverDefinition COVER_STORAGE = register("storage", StorageCover::new); - public final static CoverDefinition WIRELESS_TRANSMITTER = register("wireless_transmitter", + public static final Holder SHUTTER = REGISTRATE.cover("shutter", ShutterCover::new); + public static final Holder COVER_STORAGE = REGISTRATE.cover("storage", StorageCover::new); + public static final Holder WIRELESS_TRANSMITTER = REGISTRATE.cover("wireless_transmitter", WirelessTransmitterCover::new); - public final static CoverDefinition[] CONVEYORS = registerTiered("conveyor", ConveyorCover::new, + public static final Holder[] CONVEYORS = registerTiered(REGISTRATE, "conveyor", ConveyorCover::new, () -> tier -> new IOCoverRenderer( GTCEu.id("block/cover/conveyor"), null, @@ -55,7 +62,8 @@ public class GTCovers { GTCEu.id("block/cover/conveyor_inverted_emissive")), ALL_TIERS); - public final static CoverDefinition[] ROBOT_ARMS = registerTiered("robot_arm", RobotArmCover::new, + public static final Holder[] ROBOT_ARMS = registerTiered(REGISTRATE, "robot_arm", + RobotArmCover::new, () -> tier -> new IOCoverRenderer( GTCEu.id("block/cover/arm"), null, @@ -63,84 +71,70 @@ public class GTCovers { GTCEu.id("block/cover/arm_inverted_emissive")), ALL_TIERS); - public final static CoverDefinition[] PUMPS = registerTiered("pump", PumpCover::new, + public static final Holder[] PUMPS = registerTiered(REGISTRATE, "pump", PumpCover::new, () -> tier -> IOCoverRenderer.PUMP_LIKE_COVER_RENDERER, ALL_TIERS); - public final static CoverDefinition[] FLUID_REGULATORS = registerTiered("fluid_regulator", FluidRegulatorCover::new, + public static final Holder[] FLUID_REGULATORS = registerTiered(REGISTRATE, "fluid_regulator", + FluidRegulatorCover::new, () -> tier -> IOCoverRenderer.PUMP_LIKE_COVER_RENDERER, ALL_TIERS); - public final static CoverDefinition COMPUTER_MONITOR = register("computer_monitor", ComputerMonitorCover::new); + public static final Holder COMPUTER_MONITOR = REGISTRATE.cover("computer_monitor", + ComputerMonitorCover::new); - public final static CoverDefinition MACHINE_CONTROLLER = register("machine_controller", + public static final Holder MACHINE_CONTROLLER = REGISTRATE.cover("machine_controller", MachineControllerCover::new); // Voiding - public final static CoverDefinition ITEM_VOIDING = register("item_voiding", ItemVoidingCover::new); - public final static CoverDefinition ITEM_VOIDING_ADVANCED = register("item_voiding_advanced", + public static final Holder ITEM_VOIDING = REGISTRATE.cover("item_voiding", ItemVoidingCover::new); + public static final Holder ITEM_VOIDING_ADVANCED = REGISTRATE.cover("item_voiding_advanced", AdvancedItemVoidingCover::new); - public final static CoverDefinition FLUID_VOIDING = register("fluid_voiding", FluidVoidingCover::new); - public final static CoverDefinition FLUID_VOIDING_ADVANCED = register("fluid_voiding_advanced", + public static final Holder FLUID_VOIDING = REGISTRATE.cover("fluid_voiding", + FluidVoidingCover::new); + public static final Holder FLUID_VOIDING_ADVANCED = REGISTRATE.cover("fluid_voiding_advanced", AdvancedFluidVoidingCover::new); // Detectors - public final static CoverDefinition ACTIVITY_DETECTOR = register("activity_detector", ActivityDetectorCover::new); - public final static CoverDefinition ACTIVITY_DETECTOR_ADVANCED = register("activity_detector_advanced", + public static final Holder ACTIVITY_DETECTOR = REGISTRATE.cover("activity_detector", + ActivityDetectorCover::new); + public static final Holder ACTIVITY_DETECTOR_ADVANCED = REGISTRATE.cover( + "activity_detector_advanced", AdvancedActivityDetectorCover::new); - public final static CoverDefinition FLUID_DETECTOR = register("fluid_detector", FluidDetectorCover::new); - public final static CoverDefinition FLUID_DETECTOR_ADVANCED = register("fluid_detector_advanced", + public static final Holder FLUID_DETECTOR = REGISTRATE.cover("fluid_detector", + FluidDetectorCover::new); + public static final Holder FLUID_DETECTOR_ADVANCED = REGISTRATE.cover("fluid_detector_advanced", AdvancedFluidDetectorCover::new); - public final static CoverDefinition ITEM_DETECTOR = register("item_detector", ItemDetectorCover::new); - public final static CoverDefinition ITEM_DETECTOR_ADVANCED = register("item_detector_advanced", + public static final Holder ITEM_DETECTOR = REGISTRATE.cover("item_detector", + ItemDetectorCover::new); + public static final Holder ITEM_DETECTOR_ADVANCED = REGISTRATE.cover("item_detector_advanced", AdvancedItemDetectorCover::new); - public final static CoverDefinition ENERGY_DETECTOR = register("energy_detector", EnergyDetectorCover::new); - public final static CoverDefinition ENERGY_DETECTOR_ADVANCED = register("energy_detector_advanced", + public static final Holder ENERGY_DETECTOR = REGISTRATE.cover("energy_detector", + EnergyDetectorCover::new); + public static final Holder ENERGY_DETECTOR_ADVANCED = REGISTRATE.cover("energy_detector_advanced", AdvancedEnergyDetectorCover::new); - public final static CoverDefinition MAINTENANCE_DETECTOR = register("maintenance_detector", + public static final Holder MAINTENANCE_DETECTOR = REGISTRATE.cover("maintenance_detector", MaintenanceDetectorCover::new); // Solar Panels - public final static CoverDefinition SOLAR_PANEL_BASIC = register("solar_panel", CoverSolarPanel::new); - public final static CoverDefinition[] SOLAR_PANEL = registerTiered("solar_panel", CoverSolarPanel::new, + public static final Holder SOLAR_PANEL_BASIC = REGISTRATE.cover("solar_panel", + CoverSolarPanel::new); + public static final Holder[] SOLAR_PANEL = registerTiered(REGISTRATE, "solar_panel", + CoverSolarPanel::new, () -> tier -> new SimpleCoverRenderer(GTCEu.id("block/cover/solar_panel")), ALL_TIERS_WITH_ULV); /////////////////////////////////////////////// // *********** UTIL METHODS ***********// /////////////////////////////////////////////// - private static CoverDefinition register(String id, CoverDefinition.CoverBehaviourProvider behaviorCreator) { - return register(id, behaviorCreator, () -> () -> new SimpleCoverRenderer(GTCEu.id("block/cover/" + id))); - } - - private static CoverDefinition register(String id, CoverDefinition.CoverBehaviourProvider behaviorCreator, - Supplier> coverRenderer) { - return register(GTCEu.id(id), behaviorCreator, coverRenderer); - } - - public static CoverDefinition register(ResourceLocation id, CoverDefinition.CoverBehaviourProvider behaviorCreator, - Supplier> coverRenderer) { - var definition = new CoverDefinition(id, behaviorCreator, coverRenderer); - GTRegistries.register(GTRegistries.COVERS, definition.getId(), definition); - return definition; - } - - private static CoverDefinition[] registerTiered(String id, - CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, - Supplier> coverRenderer, - int... tiers) { + @SuppressWarnings("unchecked") + public static Holder[] registerTiered(GTRegistrate registrate, String id, + CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, + Supplier> coverRenderer, + int... tiers) { return Arrays.stream(tiers).mapToObj(tier -> { var name = id + "." + GTValues.VN[tier].toLowerCase(Locale.ROOT); - return register(name, (def, coverable, side) -> behaviorCreator.create(def, coverable, side, tier), + return registrate.cover(name, (def, coverable, side) -> behaviorCreator.create(def, coverable, side, tier), () -> () -> coverRenderer.get().apply(tier)); - }).toArray(CoverDefinition[]::new); - } - - private static CoverDefinition[] registerTiered(String id, - CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, - int... tiers) { - return Arrays.stream(tiers).mapToObj(tier -> { - var name = id + "." + GTValues.VN[tier].toLowerCase(Locale.ROOT); - return register(name, (def, coverable, side) -> behaviorCreator.create(def, coverable, side, tier)); - }).toArray(CoverDefinition[]::new); + }).toArray(RegistryEntry[]::new); } public static void init() {} diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java index 8bb6da55f37..61c658f22cb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java @@ -2,20 +2,15 @@ import com.gregtechceu.gtceu.api.data.DimensionMarker; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.common.recipe.condition.DimensionCondition; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.ItemLike; -import net.minecraft.world.level.Level; +import net.minecraft.core.Holder; import net.minecraft.world.level.block.Block; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; import com.tterrag.registrate.util.entry.BlockEntry; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Supplier; import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; @@ -26,28 +21,19 @@ public class GTDimensionMarkers { REGISTRATE.resetCreativeModeTab(); } + private static final DeferredRegister BASE_MC_DIMENSION_MARKERS = DeferredRegister + .create(GTRegistries.Keys.DIMENSION_MARKER, "minecraft"); + public static final BlockEntry OVERWORLD_MARKER = createMarker("overworld"); public static final BlockEntry NETHER_MARKER = createMarker("the_nether"); public static final BlockEntry END_MARKER = createMarker("the_end"); - public static final DimensionMarker OVERWORLD = createAndRegister(Level.OVERWORLD, 0, - () -> OVERWORLD_MARKER, null); - public static final DimensionMarker NETHER = createAndRegister(Level.NETHER, 0, - () -> NETHER_MARKER, null); - public static final DimensionMarker END = createAndRegister(Level.END, 0, - () -> END_MARKER, null); - - public static DimensionMarker createAndRegister(ResourceKey dimension, int tier, Supplier supplier, - @Nullable Component overrideName) { - if (overrideName == null) { - // if a special name hasn't been set, use the dimension's 'translated' name as a default - overrideName = DimensionCondition.getDimensionName(dimension); - } - - DimensionMarker marker = new DimensionMarker(tier, supplier, overrideName); - GTRegistries.register(GTRegistries.DIMENSION_MARKERS, dimension.location(), marker); - return marker; - } + public static final Holder OVERWORLD = BASE_MC_DIMENSION_MARKERS.register("overworld", + () -> new DimensionMarker(0, () -> OVERWORLD_MARKER, null)); + public static final Holder NETHER = BASE_MC_DIMENSION_MARKERS.register("nether", + () -> new DimensionMarker(0, () -> NETHER_MARKER, null)); + public static final Holder END = BASE_MC_DIMENSION_MARKERS.register("end", + () -> new DimensionMarker(0, () -> END_MARKER, null)); private static BlockEntry createMarker(String name) { return REGISTRATE.block("%s_marker".formatted(name), Block::new) @@ -65,5 +51,7 @@ private static BlockEntry createMarker(String name) { .register(); } - public static void init() {} + public static void init(IEventBus modBus) { + BASE_MC_DIMENSION_MARKERS.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java index 4b13d8c26da..f797e94e6ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java @@ -15,7 +15,7 @@ public class GTJukeboxSongs { public static void bootstrap(BootstrapContext ctx) { ctx.register(SUS, new JukeboxSong( - BuiltInRegistries.SOUND_EVENT.wrapAsHolder(GTSoundEntries.SUS_RECORD.getMainEvent()), + BuiltInRegistries.SOUND_EVENT.wrapAsHolder(GTSoundEntries.SUS_RECORD.value().getMainEvent()), Component.translatable("item.gtceu.sus_record.desc"), 820, 1)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java index 539f3c54681..e4baa9e456d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -16,6 +16,7 @@ import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.DynamicRenderHelper; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.data.item.GTDataComponents; @@ -74,7 +75,7 @@ public class GTMachines { ////////////////////////////////////// // ****** Steam Machine ******// ////////////////////////////////////// - public static final Pair STEAM_SOLID_BOILER = registerSteamMachines( + public static final Pair, MachineEntry> STEAM_SOLID_BOILER = registerSteamMachines( REGISTRATE, "steam_solid_boiler", SteamSolidBoilerMachine::new, @@ -89,7 +90,7 @@ public class GTMachines { FluidType.BUCKET_VOLUME / 20000)) .register()); - public static final Pair STEAM_LIQUID_BOILER = registerSteamMachines( + public static final Pair, MachineEntry> STEAM_LIQUID_BOILER = registerSteamMachines( REGISTRATE, "steam_liquid_boiler", SteamLiquidBoilerMachine::new, @@ -104,7 +105,7 @@ public class GTMachines { FluidType.BUCKET_VOLUME / 20000)) .register()); - public static final Pair STEAM_SOLAR_BOILER = registerSteamMachines( + public static final Pair, MachineEntry> STEAM_SOLAR_BOILER = registerSteamMachines( REGISTRATE, "steam_solar_boiler", SteamSolarBoiler::new, @@ -119,11 +120,12 @@ public class GTMachines { FluidType.BUCKET_VOLUME / 20000)) .register()); - public static final Pair STEAM_EXTRACTOR = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_EXTRACTOR = registerSimpleSteamMachines( REGISTRATE, "extractor", GTRecipeTypes.EXTRACTOR_RECIPES); - public static final Pair STEAM_MACERATOR = registerSteamMachines(REGISTRATE, + public static final Pair, MachineEntry> STEAM_MACERATOR = registerSteamMachines( + REGISTRATE, "steam_macerator", SimpleSteamMachine::new, (pressure, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.MACERATOR_RECIPES) @@ -135,22 +137,23 @@ public class GTMachines { .workableSteamHullModel(pressure, GTCEu.id("block/machines/macerator")) .register()); - public static final Pair STEAM_COMPRESSOR = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_COMPRESSOR = registerSimpleSteamMachines( REGISTRATE, "compressor", GTRecipeTypes.COMPRESSOR_RECIPES); - public static final Pair STEAM_HAMMER = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_HAMMER = registerSimpleSteamMachines( REGISTRATE, "forge_hammer", GTRecipeTypes.FORGE_HAMMER_RECIPES); - public static final Pair STEAM_FURNACE = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_FURNACE = registerSimpleSteamMachines( REGISTRATE, "furnace", GTRecipeTypes.FURNACE_RECIPES); - public static final Pair STEAM_ALLOY_SMELTER = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_ALLOY_SMELTER = registerSimpleSteamMachines( REGISTRATE, "alloy_smelter", GTRecipeTypes.ALLOY_SMELTER_RECIPES); - public static final Pair STEAM_ROCK_CRUSHER = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_ROCK_CRUSHER = registerSimpleSteamMachines( REGISTRATE, "rock_crusher", GTRecipeTypes.ROCK_BREAKER_RECIPES); - public static final Pair STEAM_MINER = registerSteamMachines(REGISTRATE, + public static final Pair, MachineEntry> STEAM_MINER = registerSteamMachines( + REGISTRATE, "steam_miner", (holder, isHP) -> isHP ? new SteamMinerMachine(holder, true, 240, 6, 0, 32) : new SteamMinerMachine(holder, false, 320, 4, 0, 16), @@ -175,7 +178,8 @@ public class GTMachines { ////////////////////////////////////// // *** SimpleTieredMachine ***// ////////////////////////////////////// - public static final MachineDefinition[] HULL = GTMachineUtils.registerTieredMachines(REGISTRATE, "machine_hull", + public static final MachineEntry[] HULL = GTMachineUtils.registerTieredMachines(REGISTRATE, + "machine_hull", HullMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) @@ -187,12 +191,15 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ELECTRIC_FURNACE = new SimpleMachineBuilder(REGISTRATE, "electric_furnace", + public static final MachineEntry[] ELECTRIC_FURNACE = new SimpleMachineBuilder(REGISTRATE, + "electric_furnace", GTRecipeTypes.FURNACE_RECIPES).register(); - public static final MachineDefinition[] ALLOY_SMELTER = new SimpleMachineBuilder(REGISTRATE, "alloy_smelter", + public static final MachineEntry[] ALLOY_SMELTER = new SimpleMachineBuilder(REGISTRATE, + "alloy_smelter", GTRecipeTypes.ALLOY_SMELTER_RECIPES).register(); - public static final MachineDefinition[] ARC_FURNACE = registerTieredMachines(REGISTRATE, "arc_furnace", + public static final MachineEntry[] ARC_FURNACE = registerTieredMachines(REGISTRATE, + "arc_furnace", SimpleTieredMachine::new, (tier, builder) -> builder .langValue("%s Arc Furnace %s".formatted(VLVH[tier], VLVT[tier])) .rotationState(RotationState.NON_Y_AXIS) @@ -204,106 +211,119 @@ public class GTMachines { GTRecipeTypes.ARC_FURNACE_RECIPES, defaultTankSizeFunction.applyAsInt(tier), true)) .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, "assembler", + public static final MachineEntry[] ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, "assembler", GTRecipeTypes.ASSEMBLER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] AUTOCLAVE = new SimpleMachineBuilder(REGISTRATE, "autoclave", + public static final MachineEntry[] AUTOCLAVE = new SimpleMachineBuilder(REGISTRATE, "autoclave", GTRecipeTypes.AUTOCLAVE_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] BENDER = new SimpleMachineBuilder(REGISTRATE, "bender", + public static final MachineEntry[] BENDER = new SimpleMachineBuilder(REGISTRATE, "bender", GTRecipeTypes.BENDER_RECIPES) .register(); - public static final MachineDefinition[] BREWERY = new SimpleMachineBuilder(REGISTRATE, "brewery", + public static final MachineEntry[] BREWERY = new SimpleMachineBuilder(REGISTRATE, "brewery", GTRecipeTypes.BREWING_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] CANNER = new SimpleMachineBuilder(REGISTRATE, "canner", + public static final MachineEntry[] CANNER = new SimpleMachineBuilder(REGISTRATE, "canner", GTRecipeTypes.CANNER_RECIPES) .register(); - public static final MachineDefinition[] CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, "centrifuge", + public static final MachineEntry[] CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, + "centrifuge", GTRecipeTypes.CENTRIFUGE_RECIPES).tankScalingFunction(largeTankSizeFunction).register(); - public static final MachineDefinition[] CHEMICAL_BATH = new SimpleMachineBuilder(REGISTRATE, "chemical_bath", + public static final MachineEntry[] CHEMICAL_BATH = new SimpleMachineBuilder(REGISTRATE, + "chemical_bath", GTRecipeTypes.CHEMICAL_BATH_RECIPES).tankScalingFunction(hvCappedTankSizeFunction).register(); - public static final MachineDefinition[] CHEMICAL_REACTOR = new SimpleMachineBuilder(REGISTRATE, "chemical_reactor", + public static final MachineEntry[] CHEMICAL_REACTOR = new SimpleMachineBuilder(REGISTRATE, + "chemical_reactor", GTRecipeTypes.CHEMICAL_RECIPES) .tankScalingFunction(tier -> 16 * FluidType.BUCKET_VOLUME) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] COMPRESSOR = new SimpleMachineBuilder(REGISTRATE, "compressor", + public static final MachineEntry[] COMPRESSOR = new SimpleMachineBuilder(REGISTRATE, + "compressor", GTRecipeTypes.COMPRESSOR_RECIPES).register(); - public static final MachineDefinition[] CUTTER = new SimpleMachineBuilder(REGISTRATE, "cutter", + public static final MachineEntry[] CUTTER = new SimpleMachineBuilder(REGISTRATE, "cutter", GTRecipeTypes.CUTTER_RECIPES) .register(); - public static final MachineDefinition[] DISTILLERY = new SimpleMachineBuilder(REGISTRATE, "distillery", + public static final MachineEntry[] DISTILLERY = new SimpleMachineBuilder(REGISTRATE, + "distillery", GTRecipeTypes.DISTILLERY_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] ELECTROLYZER = new SimpleMachineBuilder(REGISTRATE, "electrolyzer", + public static final MachineEntry[] ELECTROLYZER = new SimpleMachineBuilder(REGISTRATE, + "electrolyzer", GTRecipeTypes.ELECTROLYZER_RECIPES) .tankScalingFunction(largeTankSizeFunction) .register(); - public static final MachineDefinition[] ELECTROMAGNETIC_SEPARATOR = new SimpleMachineBuilder(REGISTRATE, + public static final MachineEntry[] ELECTROMAGNETIC_SEPARATOR = new SimpleMachineBuilder( + REGISTRATE, "electromagnetic_separator", GTRecipeTypes.ELECTROMAGNETIC_SEPARATOR_RECIPES).register(); - public static final MachineDefinition[] EXTRACTOR = new SimpleMachineBuilder(REGISTRATE, "extractor", + public static final MachineEntry[] EXTRACTOR = new SimpleMachineBuilder(REGISTRATE, "extractor", GTRecipeTypes.EXTRACTOR_RECIPES).register(); - public static final MachineDefinition[] EXTRUDER = new SimpleMachineBuilder(REGISTRATE, "extruder", + public static final MachineEntry[] EXTRUDER = new SimpleMachineBuilder(REGISTRATE, "extruder", GTRecipeTypes.EXTRUDER_RECIPES).register(); - public static final MachineDefinition[] FERMENTER = new SimpleMachineBuilder(REGISTRATE, "fermenter", + public static final MachineEntry[] FERMENTER = new SimpleMachineBuilder(REGISTRATE, "fermenter", GTRecipeTypes.FERMENTING_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] FLUID_HEATER = new SimpleMachineBuilder(REGISTRATE, "fluid_heater", + public static final MachineEntry[] FLUID_HEATER = new SimpleMachineBuilder(REGISTRATE, + "fluid_heater", GTRecipeTypes.FLUID_HEATER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] FLUID_SOLIDIFIER = new SimpleMachineBuilder(REGISTRATE, "fluid_solidifier", + public static final MachineEntry[] FLUID_SOLIDIFIER = new SimpleMachineBuilder(REGISTRATE, + "fluid_solidifier", GTRecipeTypes.FLUID_SOLIDFICATION_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] FORGE_HAMMER = new SimpleMachineBuilder(REGISTRATE, "forge_hammer", + public static final MachineEntry[] FORGE_HAMMER = new SimpleMachineBuilder(REGISTRATE, + "forge_hammer", GTRecipeTypes.FORGE_HAMMER_RECIPES).register(); - public static final MachineDefinition[] FORMING_PRESS = new SimpleMachineBuilder(REGISTRATE, "forming_press", + public static final MachineEntry[] FORMING_PRESS = new SimpleMachineBuilder(REGISTRATE, + "forming_press", GTRecipeTypes.FORMING_PRESS_RECIPES).register(); - public static final MachineDefinition[] LATHE = new SimpleMachineBuilder(REGISTRATE, "lathe", + public static final MachineEntry[] LATHE = new SimpleMachineBuilder(REGISTRATE, "lathe", GTRecipeTypes.LATHE_RECIPES) .register(); - public static final MachineDefinition[] SCANNER = new SimpleMachineBuilder(REGISTRATE, "scanner", + public static final MachineEntry[] SCANNER = new SimpleMachineBuilder(REGISTRATE, "scanner", GTRecipeTypes.SCANNER_RECIPES) .register(); - public static final MachineDefinition[] MIXER = new SimpleMachineBuilder(REGISTRATE, "mixer", + public static final MachineEntry[] MIXER = new SimpleMachineBuilder(REGISTRATE, "mixer", GTRecipeTypes.MIXER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] ORE_WASHER = new SimpleMachineBuilder(REGISTRATE, "ore_washer", + public static final MachineEntry[] ORE_WASHER = new SimpleMachineBuilder(REGISTRATE, + "ore_washer", GTRecipeTypes.ORE_WASHER_RECIPES).register(); - public static final MachineDefinition[] PACKER = new SimpleMachineBuilder(REGISTRATE, "packer", + public static final MachineEntry[] PACKER = new SimpleMachineBuilder(REGISTRATE, "packer", GTRecipeTypes.PACKER_RECIPES) .register(); - public static final MachineDefinition[] POLARIZER = new SimpleMachineBuilder(REGISTRATE, "polarizer", + public static final MachineEntry[] POLARIZER = new SimpleMachineBuilder(REGISTRATE, "polarizer", GTRecipeTypes.POLARIZER_RECIPES).register(); - public static final MachineDefinition[] LASER_ENGRAVER = new SimpleMachineBuilder(REGISTRATE, "laser_engraver", + public static final MachineEntry[] LASER_ENGRAVER = new SimpleMachineBuilder(REGISTRATE, + "laser_engraver", GTRecipeTypes.LASER_ENGRAVER_RECIPES) .tankScalingFunction(defaultTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] SIFTER = new SimpleMachineBuilder(REGISTRATE, "sifter", + public static final MachineEntry[] SIFTER = new SimpleMachineBuilder(REGISTRATE, "sifter", GTRecipeTypes.SIFTER_RECIPES) .register(); - public static final MachineDefinition[] THERMAL_CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, + public static final MachineEntry[] THERMAL_CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, "thermal_centrifuge", GTRecipeTypes.THERMAL_CENTRIFUGE_RECIPES).register(); - public static final MachineDefinition[] WIREMILL = new SimpleMachineBuilder(REGISTRATE, "wiremill", + public static final MachineEntry[] WIREMILL = new SimpleMachineBuilder(REGISTRATE, "wiremill", GTRecipeTypes.WIREMILL_RECIPES).register(); - public static final MachineDefinition[] CIRCUIT_ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, + public static final MachineEntry[] CIRCUIT_ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, "circuit_assembler", GTRecipeTypes.CIRCUIT_ASSEMBLER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] MACERATOR = registerTieredMachines(REGISTRATE, "macerator", + public static final MachineEntry[] MACERATOR = registerTieredMachines(REGISTRATE, "macerator", SimpleTieredMachine::new, (tier, builder) -> builder .langValue("%s Macerator %s".formatted(VLVH[tier], VLVT[tier])) .rotationState(RotationState.NON_Y_AXIS) @@ -320,13 +340,15 @@ public class GTMachines { GTRecipeTypes.MACERATOR_RECIPES, defaultTankSizeFunction.applyAsInt(tier), true)) .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] GAS_COLLECTOR = new SimpleMachineBuilder(REGISTRATE, "gas_collector", + public static final MachineEntry[] GAS_COLLECTOR = new SimpleMachineBuilder(REGISTRATE, + "gas_collector", GTRecipeTypes.GAS_COLLECTOR_RECIPES) .tankScalingFunction(largeTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] ROCK_CRUSHER = registerTieredMachines(REGISTRATE, "rock_crusher", + public static final MachineEntry[] ROCK_CRUSHER = registerTieredMachines(REGISTRATE, + "rock_crusher", GTMachineInstanceFactories.ROCK_CRUSHER, (tier, builder) -> builder .langValue("%s Rock Crusher %s".formatted(VLVH[tier], VLVT[tier])) .ui(GTSingleblockMachinePanels.GENERAL_MACHINE) @@ -339,7 +361,8 @@ public class GTMachines { .tooltips(explosion()) .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] AIR_SCRUBBER = registerTieredMachines(REGISTRATE, "air_scrubber", + public static final MachineEntry[] AIR_SCRUBBER = registerTieredMachines(REGISTRATE, + "air_scrubber", AirScrubberMachine::new, (tier, builder) -> builder .langValue("%s Air Scrubber %s".formatted(VLVH[tier], VLVT[tier])) .ui(GTSingleblockMachinePanels.GENERAL_MACHINE) @@ -356,32 +379,37 @@ public class GTMachines { ////////////////////////////////////// // **** Simple Generator ****// ////////////////////////////////////// - public static final MachineDefinition[] COMBUSTION = registerSimpleGenerator(REGISTRATE, "combustion", + public static final MachineEntry[] COMBUSTION = registerSimpleGenerator(REGISTRATE, "combustion", GTRecipeTypes.COMBUSTION_GENERATOR_FUELS, genericGeneratorTankSizeFunction, 0.1f, GTValues.LV, GTValues.MV, GTValues.HV); - public static final MachineDefinition[] STEAM_TURBINE = registerSimpleGenerator(REGISTRATE, "steam_turbine", + public static final MachineEntry[] STEAM_TURBINE = registerSimpleGenerator(REGISTRATE, + "steam_turbine", GTRecipeTypes.STEAM_TURBINE_FUELS, steamGeneratorTankSizeFunction, 0.0f, GTValues.LV, GTValues.MV, GTValues.HV); - public static final MachineDefinition[] GAS_TURBINE = registerSimpleGenerator(REGISTRATE, "gas_turbine", + public static final MachineEntry[] GAS_TURBINE = registerSimpleGenerator(REGISTRATE, + "gas_turbine", GTRecipeTypes.GAS_TURBINE_FUELS, genericGeneratorTankSizeFunction, 0.1f, GTValues.LV, GTValues.MV, GTValues.HV); ////////////////////////////////////// // ******** Electric ********// ////////////////////////////////////// - public static final MachineDefinition[] TRANSFORMER = registerTransformerMachines(REGISTRATE, "", 1); - public static final MachineDefinition[] HI_AMP_TRANSFORMER_2A = registerTransformerMachines(REGISTRATE, + public static final MachineEntry[] TRANSFORMER = registerTransformerMachines(REGISTRATE, "", 1); + public static final MachineEntry[] HI_AMP_TRANSFORMER_2A = registerTransformerMachines( + REGISTRATE, "Hi-Amp (2x)", 2); - public static final MachineDefinition[] HI_AMP_TRANSFORMER_4A = registerTransformerMachines(REGISTRATE, + public static final MachineEntry[] HI_AMP_TRANSFORMER_4A = registerTransformerMachines( + REGISTRATE, "Hi-Amp (4x)", 4); - public static final MachineDefinition[] POWER_TRANSFORMER = registerTransformerMachines(REGISTRATE, "Power", 16); + public static final MachineEntry[] POWER_TRANSFORMER = registerTransformerMachines(REGISTRATE, + "Power", 16); - public static final MachineDefinition[] ENERGY_CONVERTER_1A = registerConverter(REGISTRATE, 1); - public static final MachineDefinition[] ENERGY_CONVERTER_4A = registerConverter(REGISTRATE, 4); - public static final MachineDefinition[] ENERGY_CONVERTER_8A = registerConverter(REGISTRATE, 8); - public static final MachineDefinition[] ENERGY_CONVERTER_16A = registerConverter(REGISTRATE, 16); + public static final MachineEntry[] ENERGY_CONVERTER_1A = registerConverter(REGISTRATE, 1); + public static final MachineEntry[] ENERGY_CONVERTER_4A = registerConverter(REGISTRATE, 4); + public static final MachineEntry[] ENERGY_CONVERTER_8A = registerConverter(REGISTRATE, 8); + public static final MachineEntry[] ENERGY_CONVERTER_16A = registerConverter(REGISTRATE, 16); - public static final MachineDefinition LONG_DIST_ITEM_ENDPOINT = REGISTRATE + public static final MachineEntry LONG_DIST_ITEM_ENDPOINT = REGISTRATE .machine("long_distance_item_pipeline_endpoint", LDItemEndpointMachine::new) .langValue("Long Distance Item Pipeline Endpoint") .rotationState(RotationState.ALL) @@ -397,7 +425,7 @@ public class GTMachines { }) .register(); - public static final MachineDefinition LONG_DIST_FLUID_ENDPOINT = REGISTRATE + public static final MachineEntry LONG_DIST_FLUID_ENDPOINT = REGISTRATE .machine("long_distance_fluid_pipeline_endpoint", LDFluidEndpointMachine::new) .langValue("Long Distance Fluid Pipeline Endpoint") .rotationState(RotationState.ALL) @@ -415,15 +443,16 @@ public class GTMachines { }) .register(); - public static final MachineDefinition[] BATTERY_BUFFER_4 = registerBatteryBuffer(REGISTRATE, 4); + public static final MachineEntry[] BATTERY_BUFFER_4 = registerBatteryBuffer(REGISTRATE, 4); - public static final MachineDefinition[] BATTERY_BUFFER_8 = registerBatteryBuffer(REGISTRATE, 8); + public static final MachineEntry[] BATTERY_BUFFER_8 = registerBatteryBuffer(REGISTRATE, 8); - public static final MachineDefinition[] BATTERY_BUFFER_16 = registerBatteryBuffer(REGISTRATE, 16); + public static final MachineEntry[] BATTERY_BUFFER_16 = registerBatteryBuffer(REGISTRATE, 16); - public static final MachineDefinition[] CHARGER_4 = registerCharger(REGISTRATE, 4); + public static final MachineEntry[] CHARGER_4 = registerCharger(REGISTRATE, 4); - public static final MachineDefinition[] PUMP = registerTieredMachines(REGISTRATE, "pump", PumpMachine::new, + public static final MachineEntry[] PUMP = registerTieredMachines(REGISTRATE, "pump", + PumpMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) .tieredHullModel(GTCEu.id("block/machine/template/pump_machine")) @@ -442,7 +471,8 @@ public class GTMachines { .register(), LV, MV, HV, EV); - public static final MachineDefinition[] FISHER = registerTieredMachines(REGISTRATE, "fisher", FisherMachine::new, + public static final MachineEntry[] FISHER = registerTieredMachines(REGISTRATE, "fisher", + FisherMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) // .editableUI(FisherMachine.EDITABLE_UI_CREATOR.apply(GTCEu.id("fisher"), (tier + 1) * (tier + 1))) @@ -460,7 +490,8 @@ public class GTMachines { .register(), LV, MV, HV, EV, IV, LuV); - public static final MachineDefinition[] BLOCK_BREAKER = registerTieredMachines(REGISTRATE, "block_breaker", + public static final MachineEntry[] BLOCK_BREAKER = registerTieredMachines(REGISTRATE, + "block_breaker", BlockBreakerMachine::new, (tier, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) @@ -477,7 +508,7 @@ public class GTMachines { .register(), LV, MV, HV, EV); - public static final MachineDefinition[] MINER = registerTieredMachines(REGISTRATE, "miner", + public static final MachineEntry[] MINER = registerTieredMachines(REGISTRATE, "miner", (holder, tier) -> new MinerMachine(holder, tier, ConfigHolder.INSTANCE.machines.minerSpeed / (tier * 2), tier * 8, tier), (tier, builder) -> builder @@ -505,7 +536,8 @@ public class GTMachines { .register(), LV, MV, HV); - public static final MachineDefinition[] WORLD_ACCELERATOR = registerTieredMachines(REGISTRATE, "world_accelerator", + public static final MachineEntry[] WORLD_ACCELERATOR = registerTieredMachines(REGISTRATE, + "world_accelerator", WorldAcceleratorMachine::new, (tier, builder) -> builder .rotationState(RotationState.NONE) @@ -534,7 +566,8 @@ public class GTMachines { .register(), LV, MV, HV, EV, IV, LuV, ZPM, UV); - public static final MachineDefinition[] ITEM_COLLECTOR = registerTieredMachines(REGISTRATE, "item_collector", + public static final MachineEntry[] ITEM_COLLECTOR = registerTieredMachines(REGISTRATE, + "item_collector", ItemCollectorMachine::new, (tier, builder) -> builder .rotationState(RotationState.NONE) @@ -559,7 +592,7 @@ public class GTMachines { // ********* Storage *********// ////////////////////////////////////// - public static final MachineDefinition[] BUFFER = registerTieredMachines(REGISTRATE, "buffer", + public static final MachineEntry[] BUFFER = registerTieredMachines(REGISTRATE, "buffer", BufferMachine::new, (tier, builder) -> builder .langValue("%s Buffer %s".formatted(VLVH[tier], VLVT[tier])) @@ -583,7 +616,7 @@ public class GTMachines { .withStyle(TooltipHelper.RAINBOW_HSL_SLOW)) .append(Component.translatable("gtceu.creative_tooltip.3"))); - public static final MachineDefinition CREATIVE_ENERGY = REGISTRATE + public static final MachineEntry CREATIVE_ENERGY = REGISTRATE .machine("creative_energy", CreativeEnergyContainerMachine::new) .rotationState(RotationState.NONE) .model(createSingleOverlayTieredHullMachineModel(GTModels.BLANK_TEXTURE, @@ -592,7 +625,7 @@ public class GTMachines { .tier(MAX) .register(); - public static final MachineDefinition CREATIVE_COMPUTATION_PROVIDER = REGISTRATE + public static final MachineEntry CREATIVE_COMPUTATION_PROVIDER = REGISTRATE .machine("creative_computation_provider", CreativeComputationProviderMachine::new) .rotationState(RotationState.NONE) .model(createSingleOverlayTieredHullMachineModel( @@ -602,7 +635,7 @@ public class GTMachines { .tier(MAX) .register(); - public static final MachineDefinition CREATIVE_FLUID = REGISTRATE + public static final MachineEntry CREATIVE_FLUID = REGISTRATE .machine("creative_tank", CreativeTankMachine::new) .rotationState(RotationState.ALL) .allowExtendedFacing(true) @@ -622,7 +655,7 @@ public class GTMachines { .hasBER(true) .register(); - public static final MachineDefinition CREATIVE_ITEM = REGISTRATE + public static final MachineEntry CREATIVE_ITEM = REGISTRATE .machine("creative_chest", CreativeChestMachine::new) .rotationState(RotationState.ALL) .allowExtendedFacing(true) @@ -642,51 +675,65 @@ public class GTMachines { .hasBER(true) .register(); - public static final MachineDefinition[] SUPER_CHEST = registerQuantumChests(REGISTRATE, "super_chest", LOW_TIERS); - public static final MachineDefinition[] QUANTUM_CHEST = registerQuantumChests(REGISTRATE, "quantum_chest", + public static final MachineEntry[] SUPER_CHEST = registerQuantumChests(REGISTRATE, "super_chest", + LOW_TIERS); + public static final MachineEntry[] QUANTUM_CHEST = registerQuantumChests(REGISTRATE, + "quantum_chest", HIGH_TIERS); - public static final MachineDefinition[] SUPER_TANK = registerQuantumTanks(REGISTRATE, "super_tank", LOW_TIERS); - public static final MachineDefinition[] QUANTUM_TANK = registerQuantumTanks(REGISTRATE, "quantum_tank", HIGH_TIERS); - - public static MachineDefinition WOODEN_CRATE = registerCrate(REGISTRATE, GTMaterials.Wood, 27, 9, "Wooden Crate"); - public static MachineDefinition BRONZE_CRATE = registerCrate(REGISTRATE, GTMaterials.Bronze, 54, 9, "Bronze Crate"); - public static MachineDefinition STEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.Steel, 72, 9, "Steel Crate"); - public static MachineDefinition ALUMINIUM_CRATE = registerCrate(REGISTRATE, GTMaterials.Aluminium, 90, 10, + public static final MachineEntry[] SUPER_TANK = registerQuantumTanks(REGISTRATE, "super_tank", + LOW_TIERS); + public static final MachineEntry[] QUANTUM_TANK = registerQuantumTanks(REGISTRATE, + "quantum_tank", HIGH_TIERS); + + public static final MachineEntry WOODEN_CRATE = registerCrate(REGISTRATE, GTMaterials.Wood, 27, + 9, "Wooden Crate"); + public static final MachineEntry BRONZE_CRATE = registerCrate(REGISTRATE, GTMaterials.Bronze, 54, + 9, "Bronze Crate"); + public static final MachineEntry STEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.Steel, 72, + 9, "Steel Crate"); + public static final MachineEntry ALUMINIUM_CRATE = registerCrate(REGISTRATE, + GTMaterials.Aluminium, 90, 10, "Aluminium Crate"); - public static MachineDefinition STAINLESS_STEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.StainlessSteel, 108, + public static final MachineEntry STAINLESS_STEEL_CRATE = registerCrate(REGISTRATE, + GTMaterials.StainlessSteel, 108, 12, "Stainless Steel Crate"); - public static MachineDefinition TITANIUM_CRATE = registerCrate(REGISTRATE, GTMaterials.Titanium, 126, 14, + public static final MachineEntry TITANIUM_CRATE = registerCrate(REGISTRATE, GTMaterials.Titanium, + 126, 14, "Titanium Crate"); - public static MachineDefinition TUNGSTENSTEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.TungstenSteel, 144, 16, + public static final MachineEntry TUNGSTENSTEEL_CRATE = registerCrate(REGISTRATE, + GTMaterials.TungstenSteel, 144, 16, "Tungstensteel Crate"); - public static MachineDefinition WOODEN_DRUM = registerDrum(REGISTRATE, GTMaterials.Wood, + public static final MachineEntry WOODEN_DRUM = registerDrum(REGISTRATE, GTMaterials.Wood, (16 * FluidType.BUCKET_VOLUME), "Wooden Barrel"); - public static MachineDefinition BRONZE_DRUM = registerDrum(REGISTRATE, GTMaterials.Bronze, + public static final MachineEntry BRONZE_DRUM = registerDrum(REGISTRATE, GTMaterials.Bronze, (32 * FluidType.BUCKET_VOLUME), "Bronze Drum"); - public static MachineDefinition STEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.Steel, + public static final MachineEntry STEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.Steel, (64 * FluidType.BUCKET_VOLUME), "Steel Drum"); - public static MachineDefinition ALUMINIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Aluminium, + public static final MachineEntry ALUMINIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Aluminium, (128 * FluidType.BUCKET_VOLUME), "Aluminium Drum"); - public static MachineDefinition STAINLESS_STEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.StainlessSteel, + public static final MachineEntry STAINLESS_STEEL_DRUM = registerDrum(REGISTRATE, + GTMaterials.StainlessSteel, (256 * FluidType.BUCKET_VOLUME), "Stainless Steel Drum"); - public static MachineDefinition GOLD_DRUM = registerDrum(REGISTRATE, GTMaterials.Gold, + public static final MachineEntry GOLD_DRUM = registerDrum(REGISTRATE, GTMaterials.Gold, (32 * FluidType.BUCKET_VOLUME), "Gold Drum"); - public static MachineDefinition TITANIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Titanium, + public static final MachineEntry TITANIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Titanium, (512 * FluidType.BUCKET_VOLUME), "Titanium Drum"); - public static MachineDefinition TUNGSTENSTEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.TungstenSteel, + public static final MachineEntry TUNGSTENSTEEL_DRUM = registerDrum(REGISTRATE, + GTMaterials.TungstenSteel, (1024 * FluidType.BUCKET_VOLUME), "Tungstensteel Drum"); ////////////////////////////////////// // ********** Part **********// ////////////////////////////////////// - public static final MachineDefinition[] ITEM_IMPORT_BUS = registerTieredMachines(REGISTRATE, "input_bus", + public static final MachineEntry[] ITEM_IMPORT_BUS = registerTieredMachines(REGISTRATE, + "input_bus", (holder, tier) -> new ItemBusPartMachine(holder, tier, IN), (tier, builder) -> builder .langValue(VNF[tier] + " Input Bus") @@ -701,7 +748,8 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ITEM_EXPORT_BUS = registerTieredMachines(REGISTRATE, "output_bus", + public static final MachineEntry[] ITEM_EXPORT_BUS = registerTieredMachines(REGISTRATE, + "output_bus", (holder, tier) -> new ItemBusPartMachine(holder, tier, OUT), (tier, builder) -> builder .langValue(VNF[tier] + " Output Bus") @@ -716,43 +764,43 @@ public class GTMachines { .register(), ALL_TIERS); - public final static MachineDefinition[] FLUID_IMPORT_HATCH = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_IMPORT_HATCH = registerFluidHatches(REGISTRATE, "input_hatch", "Input Hatch", "fluid_hatch.import", IN, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, 1, ALL_TIERS, PartAbility.IMPORT_FLUIDS, PartAbility.IMPORT_FLUIDS_1X); - public final static MachineDefinition[] FLUID_IMPORT_HATCH_4X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_IMPORT_HATCH_4X = registerFluidHatches(REGISTRATE, "input_hatch_4x", "Quadruple Input Hatch", "fluid_hatch.import", IN, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_4X, 4, MULTI_HATCH_TIERS, PartAbility.IMPORT_FLUIDS, PartAbility.IMPORT_FLUIDS_4X); - public final static MachineDefinition[] FLUID_IMPORT_HATCH_9X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_IMPORT_HATCH_9X = registerFluidHatches(REGISTRATE, "input_hatch_9x", "Nonuple Input Hatch", "fluid_hatch.import", IN, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_9X, 9, MULTI_HATCH_TIERS, PartAbility.IMPORT_FLUIDS, PartAbility.IMPORT_FLUIDS_9X); - public final static MachineDefinition[] FLUID_EXPORT_HATCH = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_EXPORT_HATCH = registerFluidHatches(REGISTRATE, "output_hatch", "Output Hatch", "fluid_hatch.export", OUT, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, 1, ALL_TIERS, PartAbility.EXPORT_FLUIDS, PartAbility.EXPORT_FLUIDS_1X); - public final static MachineDefinition[] FLUID_EXPORT_HATCH_4X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_EXPORT_HATCH_4X = registerFluidHatches(REGISTRATE, "output_hatch_4x", "Quadruple Output Hatch", "fluid_hatch.export", OUT, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_4X, 4, MULTI_HATCH_TIERS, PartAbility.EXPORT_FLUIDS, PartAbility.EXPORT_FLUIDS_4X); - public final static MachineDefinition[] FLUID_EXPORT_HATCH_9X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_EXPORT_HATCH_9X = registerFluidHatches(REGISTRATE, "output_hatch_9x", "Nonuple Output Hatch", "fluid_hatch.export", OUT, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_9X, 9, MULTI_HATCH_TIERS, PartAbility.EXPORT_FLUIDS, PartAbility.EXPORT_FLUIDS_9X); - public static final MachineDefinition[] ENERGY_INPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_INPUT_HATCH = registerTieredMachines(REGISTRATE, "energy_input_hatch", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 2), (tier, builder) -> builder @@ -771,7 +819,7 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ENERGY_OUTPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_OUTPUT_HATCH = registerTieredMachines(REGISTRATE, "energy_output_hatch", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 2), (tier, builder) -> builder @@ -790,7 +838,7 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ENERGY_INPUT_HATCH_4A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_INPUT_HATCH_4A = registerTieredMachines(REGISTRATE, "energy_input_hatch_4a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 4), (tier, builder) -> builder @@ -809,7 +857,7 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] ENERGY_OUTPUT_HATCH_4A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_OUTPUT_HATCH_4A = registerTieredMachines(REGISTRATE, "energy_output_hatch_4a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 4), (tier, builder) -> builder @@ -828,7 +876,7 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] ENERGY_INPUT_HATCH_16A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_INPUT_HATCH_16A = registerTieredMachines(REGISTRATE, "energy_input_hatch_16a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 16), (tier, builder) -> builder @@ -847,7 +895,7 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] ENERGY_OUTPUT_HATCH_16A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_OUTPUT_HATCH_16A = registerTieredMachines(REGISTRATE, "energy_output_hatch_16a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 16), (tier, builder) -> builder @@ -866,7 +914,8 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] SUBSTATION_ENERGY_INPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] SUBSTATION_ENERGY_INPUT_HATCH = registerTieredMachines( + REGISTRATE, "substation_input_hatch_64a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 64), (tier, builder) -> builder @@ -885,7 +934,8 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] SUBSTATION_ENERGY_OUTPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] SUBSTATION_ENERGY_OUTPUT_HATCH = registerTieredMachines( + REGISTRATE, "substation_output_hatch_64a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 64), (tier, builder) -> builder @@ -904,7 +954,8 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] MUFFLER_HATCH = registerTieredMachines(REGISTRATE, "muffler_hatch", + public static final MachineEntry[] MUFFLER_HATCH = registerTieredMachines(REGISTRATE, + "muffler_hatch", MufflerPartMachine::new, (tier, builder) -> builder .langValue("Muffler Hatch " + VNF[tier]) @@ -920,7 +971,7 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition STEAM_IMPORT_BUS = REGISTRATE + public static final MachineEntry STEAM_IMPORT_BUS = REGISTRATE .machine("steam_input_bus", holder -> new SteamItemBusPartMachine(holder, IN)) .rotationState(RotationState.ALL) .abilities(PartAbility.STEAM_IMPORT_ITEMS) @@ -934,7 +985,7 @@ public class GTMachines { .allowCoverOnFront(true) .register(); - public static final MachineDefinition STEAM_EXPORT_BUS = REGISTRATE + public static final MachineEntry STEAM_EXPORT_BUS = REGISTRATE .machine("steam_output_bus", holder -> new SteamItemBusPartMachine(holder, OUT)) .rotationState(RotationState.ALL) .abilities(PartAbility.STEAM_EXPORT_ITEMS) @@ -948,7 +999,7 @@ public class GTMachines { .allowCoverOnFront(true) .register(); - public static final MachineDefinition STEAM_HATCH = REGISTRATE + public static final MachineEntry STEAM_HATCH = REGISTRATE .machine("steam_input_hatch", SteamHatchPartMachine::new) .rotationState(RotationState.ALL) .abilities(PartAbility.STEAM) @@ -961,7 +1012,8 @@ public class GTMachines { .allowCoverOnFront(true) .register(); - public static final MachineDefinition COKE_OVEN_HATCH = REGISTRATE.machine("coke_oven_hatch", CokeOvenHatch::new) + public static final MachineEntry COKE_OVEN_HATCH = REGISTRATE + .machine("coke_oven_hatch", CokeOvenHatch::new) .rotationState(RotationState.ALL) .modelProperty(IS_FORMED, false) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) @@ -969,7 +1021,8 @@ public class GTMachines { .themeId(GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MachineDefinition PUMP_HATCH = REGISTRATE.machine("pump_hatch", PumpHatchPartMachine::new) + public static final MachineEntry PUMP_HATCH = REGISTRATE + .machine("pump_hatch", PumpHatchPartMachine::new) .rotationState(RotationState.ALL) .abilities(PartAbility.PUMP_FLUID_HATCH) .modelProperty(IS_FORMED, false) @@ -988,7 +1041,7 @@ public class GTMachines { .themeId(GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MachineDefinition MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry MAINTENANCE_HATCH = REGISTRATE .machine("maintenance_hatch", (blockEntity) -> new MaintenanceHatchPartMachine(blockEntity, false)) .rotationState(RotationState.ALL) .abilities(PartAbility.MAINTENANCE) @@ -999,7 +1052,7 @@ public class GTMachines { .tier(LV) .register(); - public static final MachineDefinition CONFIGURABLE_MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry CONFIGURABLE_MAINTENANCE_HATCH = REGISTRATE .machine("configurable_maintenance_hatch", (blockEntity) -> new MaintenanceHatchPartMachine(blockEntity, true)) .rotationState(RotationState.ALL) @@ -1011,7 +1064,7 @@ public class GTMachines { .tier(HV) .register(); - public static final MachineDefinition CLEANING_MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry CLEANING_MAINTENANCE_HATCH = REGISTRATE .machine("cleaning_maintenance_hatch", holder -> new CleaningMaintenanceHatchPartMachine(holder, CleanroomType.CLEANROOM)) .rotationState(RotationState.ALL) @@ -1028,7 +1081,7 @@ public class GTMachines { .tier(HV) .register(); - public static final MachineDefinition AUTO_MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry AUTO_MAINTENANCE_HATCH = REGISTRATE .machine("auto_maintenance_hatch", AutoMaintenanceHatchPartMachine::new) .rotationState(RotationState.ALL) .abilities(PartAbility.MAINTENANCE) @@ -1038,7 +1091,7 @@ public class GTMachines { .tier(HV) .register(); - public static final MachineDefinition[] ITEM_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ITEM_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, "item_passthrough_hatch", (holder, tier) -> new ItemBusPartMachine(holder, tier, IO.BOTH), (tier, builder) -> builder @@ -1054,7 +1107,7 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] FLUID_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] FLUID_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, "fluid_passthrough_hatch", (holder, tier) -> new FluidHatchPartMachine(holder, tier, IO.BOTH, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, 1), @@ -1071,7 +1124,7 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition RESERVOIR_HATCH = REGISTRATE + public static final MachineEntry RESERVOIR_HATCH = REGISTRATE .machine("reservoir_hatch", ReservoirHatchPartMachine::new) .langValue("Reservoir Hatch") .tier(EV) @@ -1085,7 +1138,7 @@ public class GTMachines { .overlayTieredHullModel("reservoir_hatch") .register(); - public static final MachineDefinition[] DUAL_IMPORT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] DUAL_IMPORT_HATCH = registerTieredMachines(REGISTRATE, "dual_input_hatch", (holder, tier) -> new DualHatchPartMachine(holder, tier, IN), (tier, builder) -> builder @@ -1108,7 +1161,7 @@ public class GTMachines { .register(), DUAL_HATCH_TIERS); - public static final MachineDefinition[] DUAL_EXPORT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] DUAL_EXPORT_HATCH = registerTieredMachines(REGISTRATE, "dual_output_hatch", (holder, tier) -> new DualHatchPartMachine(holder, tier, OUT), (tier, builder) -> builder @@ -1131,7 +1184,7 @@ public class GTMachines { .register(), DUAL_HATCH_TIERS); - public static final MachineDefinition[] DIODE = registerTieredMachines(REGISTRATE, "diode", + public static final MachineEntry[] DIODE = registerTieredMachines(REGISTRATE, "diode", DiodePartMachine::new, (tier, builder) -> builder .langValue("%s Diode".formatted(VNF[tier])) @@ -1150,7 +1203,8 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] ROTOR_HOLDER = registerTieredMachines(REGISTRATE, "rotor_holder", + public static final MachineEntry[] ROTOR_HOLDER = registerTieredMachines(REGISTRATE, + "rotor_holder", RotorHolderPartMachine::new, (tier, builder) -> builder .langValue("%s Rotor Holder".formatted(VNF[tier])) @@ -1166,25 +1220,31 @@ public class GTMachines { .register(), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); - public static final MachineDefinition[] LASER_INPUT_HATCH_256 = registerLaserHatch(REGISTRATE, IN, 256, + public static final MachineEntry[] LASER_INPUT_HATCH_256 = registerLaserHatch(REGISTRATE, IN, + 256, PartAbility.INPUT_LASER); - public static final MachineDefinition[] LASER_OUTPUT_HATCH_256 = registerLaserHatch(REGISTRATE, OUT, 256, + public static final MachineEntry[] LASER_OUTPUT_HATCH_256 = registerLaserHatch(REGISTRATE, OUT, + 256, PartAbility.OUTPUT_LASER); - public static final MachineDefinition[] LASER_INPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, IN, 1024, + public static final MachineEntry[] LASER_INPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, IN, + 1024, PartAbility.INPUT_LASER); - public static final MachineDefinition[] LASER_OUTPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, OUT, 1024, + public static final MachineEntry[] LASER_OUTPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, OUT, + 1024, PartAbility.OUTPUT_LASER); - public static final MachineDefinition[] LASER_INPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, IN, 4096, + public static final MachineEntry[] LASER_INPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, IN, + 4096, PartAbility.INPUT_LASER); - public static final MachineDefinition[] LASER_OUTPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, OUT, 4096, + public static final MachineEntry[] LASER_OUTPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, OUT, + 4096, PartAbility.OUTPUT_LASER); - public static final MachineDefinition MONITOR = REGISTRATE.machine("monitor", MonitorPartMachine::new) + public static final MachineEntry MONITOR = REGISTRATE.machine("monitor", MonitorPartMachine::new) .rotationState(RotationState.ALL) .model(createOverlayCasingMachineModel(GTCEu.id("block/casings/solid/machine_casing_frost_proof"), GTCEu.id("block/machine/part/computer_monitor"))) .tier(MV) .register(); - public static final MachineDefinition ADVANCED_MONITOR = REGISTRATE + public static final MachineEntry ADVANCED_MONITOR = REGISTRATE .machine("advanced_monitor", AdvancedMonitorPartMachine::new) .rotationState(RotationState.ALL) .model(createOverlayCasingMachineModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), @@ -1193,7 +1253,7 @@ public class GTMachines { .allowExtendedFacing(true) .register(); - public static final MachineDefinition MUI_TEST = REGISTRATE + public static final MachineEntry MUI_TEST = REGISTRATE .machine("test_mui", TestMuiMachine::new) .rotationState(RotationState.ALL) .model(createOverlayCasingMachineModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java index 75d4f2ce3b8..7fe39ca8802 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java @@ -1,61 +1,64 @@ package com.gregtechceu.gtceu.common.data; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.data.medicalcondition.Symptom; -import com.gregtechceu.gtceu.api.registry.GTRegistries; -import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.registries.DeferredHolder; import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.dust; import static com.gregtechceu.gtceu.common.data.GTMaterials.*; +import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; public class GTMedicalConditions { + // spotless:off + // General Conditions - public static final MedicalCondition NONE = register("none", 0xffffff, 0, + public static final DeferredHolder NONE = REGISTRATE.medicalCondition("none", 0xffffff, 0, MedicalCondition.IdleProgressionType.NONE, 0, false); + // takes 5 minutes of having burn-causing items in the player's inventory for them to get the weakness effect // heals 2 seconds' worth of progression every second when not holding those items - public static final MedicalCondition CHEMICAL_BURNS = register("chemical_burns", 0xbc305a, 300, + public static final DeferredHolder CHEMICAL_BURNS = REGISTRATE.medicalCondition("chemical_burns", 0xbc305a, 300, MedicalCondition.IdleProgressionType.HEAL, 2, false, - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS)) - .setRecipeModifier(builder -> builder + builder -> builder .outputFluids(DilutedHydrochloricAcid.getFluid(500)) - .outputFluids(DilutedSulfuricAcid.getFluid(750))); + .outputFluids(DilutedSulfuricAcid.getFluid(750)), + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS)); + // takes 5 minutes of having poisonous items in the player's inventory for them to get the weakness effect // at 10 minutes, they get a weaker version of the poison effect // heals 2 seconds' worth of progression every second when not holding those items - public static final MedicalCondition POISON = register("poison", 0xA36300, 600, + public static final DeferredHolder POISON = REGISTRATE.medicalCondition("poison", 0xA36300, 600, MedicalCondition.IdleProgressionType.HEAL, 2, true, + builder -> builder.outputFluids(SulfurTrioxide.getFluid(1000)), new Symptom.ConfiguredSymptom(Symptom.WEAK_POISONING), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)) - .setRecipeModifier(builder -> builder - .outputFluids(SulfurTrioxide.getFluid(1000))); + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)); + // having weakly poisonous items in the player's inventory gives them the weak poison effect // the effect ramps up in 6 "stages", getting progressively worse every stage. It caps out at Weak Poison 10. // does NOT heal automatically - public static final MedicalCondition WEAK_POISON = register("weak_poison", 0x6D7917, 1800, + public static final DeferredHolder WEAK_POISON = REGISTRATE.medicalCondition("weak_poison", 0x6D7917, 1800, MedicalCondition.IdleProgressionType.NONE, 0, false, - new Symptom.ConfiguredSymptom(Symptom.WEAK_POISONING, 6, 1800)) - .setRecipeModifier(builder -> builder - .outputFluids(NitricOxide.getFluid(1000))); + builder -> builder.outputFluids(NitricOxide.getFluid(1000)), + new Symptom.ConfiguredSymptom(Symptom.WEAK_POISONING, 6, 1800)); + // takes 2.5 minutes of having irritating items in the player's inventory for them to get the weakness effect // at 5 minutes, they begin getting random damage every so often // heals 5 seconds' worth of progression every second when not holding those items - public static final MedicalCondition IRRITANT = register("irritant", 0x02512f, 600, + public static final DeferredHolder IRRITANT = REGISTRATE.medicalCondition("irritant", 0x02512f, 600, MedicalCondition.IdleProgressionType.HEAL, 5, false, + builder -> builder.outputItems(dust, DarkAsh, 4), new Symptom.ConfiguredSymptom(Symptom.RANDOM_DAMAGE), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)) - .setRecipeModifier(builder -> builder - .outputItems(dust, DarkAsh, 4)); + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)); + // takes 5 minutes of having nauseating items in the player's inventory for them to get the nausea effect // heals 5 seconds' worth of progression every second when not holding those items - public static final MedicalCondition NAUSEA = register("nausea", 0x1D4A00, 600, + public static final DeferredHolder NAUSEA = REGISTRATE.medicalCondition("nausea", 0x1D4A00, 600, MedicalCondition.IdleProgressionType.HEAL, 5, false, - new Symptom.ConfiguredSymptom(Symptom.NAUSEA, 1, 420, 600)) - .setRecipeModifier(builder -> builder - .outputFluids(CarbonMonoxide.getFluid(50))); + builder -> builder.outputFluids(CarbonMonoxide.getFluid(50)), + new Symptom.ConfiguredSymptom(Symptom.NAUSEA, 1, 420, 600)); + /** * All effects: *

    @@ -75,7 +78,7 @@ public class GTMedicalConditions { * This condition does NOT heal automatically. You can use {@linkplain GTItems#RAD_AWAY_PILL * rad-away pills} to heal it. */ - public static final MedicalCondition CARCINOGEN = register("carcinogen", 0x0f570f, 36000, + public static final DeferredHolder CARCINOGEN = REGISTRATE.medicalCondition("carcinogen", 0x0f570f, 36000, MedicalCondition.IdleProgressionType.NONE, 0, true, new Symptom.ConfiguredSymptom(Symptom.DEATH), new Symptom.ConfiguredSymptom(Symptom.HEALTH_DEBUFF, 10800, 21600), @@ -86,58 +89,41 @@ public class GTMedicalConditions { new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 3600, 14400)); // Material specific Conditions - public static final MedicalCondition ASBESTOSIS = register("asbestosis", 0xe3e3e3, 5000, + public static final DeferredHolder ASBESTOSIS = REGISTRATE.medicalCondition("asbestosis", 0xe3e3e3, 5000, MedicalCondition.IdleProgressionType.HEAL, 1, true, + builder -> builder.outputItems(dust, Asbestos, 4), // new Symptom.ConfiguredSymptom(Symptom.HEALTH_DEBUFF, 3000, 5000), // new Symptom.ConfiguredSymptom(Symptom.AIR_SUPPLY_DEBUFF, 1500, 3500), // new Symptom.ConfiguredSymptom(Symptom.HUNGER, 500, 4000), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 1200, 5000)) - .setRecipeModifier(builder -> builder - .outputItems(dust, Asbestos, 4)); - public static final MedicalCondition ARSENICOSIS = register("arsenicosis", 0xbd4b15, 1000, + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 1200, 5000)); + + public static final DeferredHolder ARSENICOSIS = REGISTRATE.medicalCondition("arsenicosis", 0xbd4b15, 1000, MedicalCondition.IdleProgressionType.HEAL, 1, true, + builder -> builder.outputItems(dust, Arsenic, 4), new Symptom.ConfiguredSymptom(Symptom.WITHER), new Symptom.ConfiguredSymptom(Symptom.NAUSEA), new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 2, 500, 1000), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 330, 1000)) + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 330, 1000)); // new Symptom.ConfiguredSymptom(Symptom.HUNGER, 2, .2f)) - .setRecipeModifier(builder -> builder - .outputItems(dust, Arsenic, 4)); - public static final MedicalCondition METHANOL_POISONING = register("methanol_poisoning", 0xaa8800, 600, + + public static final DeferredHolder METHANOL_POISONING = REGISTRATE.medicalCondition("methanol_poisoning", 0xaa8800, 600, MedicalCondition.IdleProgressionType.HEAL, .5f, true, + builder -> builder.outputFluids(Methanol.getFluid(1000)), new Symptom.ConfiguredSymptom(Symptom.POISONING), new Symptom.ConfiguredSymptom(Symptom.BLINDNESS, 2, 450, 600), new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 300, 600), - new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 1, 150, 600)) - .setRecipeModifier(builder -> builder - .outputFluids(Methanol.getFluid(1000))); - public static final MedicalCondition CARBON_MONOXIDE_POISONING = register("carbon_monoxide_poisoning", + new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 1, 150, 600)); + + public static final DeferredHolder CARBON_MONOXIDE_POISONING = REGISTRATE.medicalCondition("carbon_monoxide_poisoning", 0x041525, 2000, MedicalCondition.IdleProgressionType.HEAL, 1, true, + builder -> builder.outputFluids(CarbonMonoxide.getFluid(1000)), new Symptom.ConfiguredSymptom(Symptom.DEATH), new Symptom.ConfiguredSymptom(Symptom.NAUSEA), new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 2, 1500, 2000), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 500, 2000)) - .setRecipeModifier(builder -> builder - .outputFluids(CarbonMonoxide.getFluid(1000))); - - public static MedicalCondition register(ResourceLocation id, int color, - int maxProgression, MedicalCondition.IdleProgressionType progressionType, - float progressionRate, boolean canBePermanent, - Symptom.ConfiguredSymptom... symptoms) { - var condition = new MedicalCondition(id, color, maxProgression, - progressionType, progressionRate, canBePermanent, symptoms); - GTRegistries.register(GTRegistries.MEDICAL_CONDITIONS, id, condition); - return condition; - } - - // internal variant of the above that skips having to write `register(GTCEu.id(...` - private static MedicalCondition register(String id, int color, - int maxProgression, MedicalCondition.IdleProgressionType progressionType, - float progressionRate, boolean canBePermanent, - Symptom.ConfiguredSymptom... symptoms) { - return register(GTCEu.id(id), color, maxProgression, progressionType, progressionRate, canBePermanent, - symptoms); - } + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 500, 2000)); + + + // spotless:on public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java index 8ac0dca2a3a..15f93c9ab28 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java @@ -12,7 +12,7 @@ public class GTMobEffects { - public static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, + private static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, GTCEu.MOD_ID); public static final DeferredHolder WEAK_POISON = MOB_EFFECTS.register("weak_poison", diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java index 199ef6a6e99..a21306aa601 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java @@ -17,7 +17,7 @@ public class GTParticleTypes { - public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister + private static final DeferredRegister> PARTICLE_TYPES = DeferredRegister .create(Registries.PARTICLE_TYPE, GTCEu.MOD_ID); public static final DeferredHolder, ParticleType> HAZARD_PARTICLE = PARTICLE_TYPES diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java index c36b7883561..cc2380c96a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEnderRegistry; import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.*; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.client.renderer.placeholder.ModulePlaceholderRenderer; import com.gregtechceu.gtceu.client.renderer.placeholder.QuadPlaceholderRenderer; import com.gregtechceu.gtceu.client.renderer.placeholder.RectPlaceholderRenderer; @@ -24,6 +25,7 @@ import com.gregtechceu.gtceu.common.item.modules.ImageModuleBehaviour; import com.gregtechceu.gtceu.common.machine.multiblock.part.MaintenanceHatchPartMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.monitor.AdvancedMonitorPartMachine; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.GTAEPlaceholders; import com.gregtechceu.gtceu.integration.cctweaked.CCTweakedPlugin; @@ -98,9 +100,13 @@ public static int countItems(@Nullable Filter filter, @Nullable IItem return cnt; } + private static void registerPlaceholder(Placeholder placeholder) { + GTRegistration.REGISTRATE.simple(placeholder.getName(), GTRegistries.Keys.PLACEHOLDER, () -> placeholder); + } + public static void init() { RegistrateDistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> GTPlaceholders::initRenderers); - PlaceholderHandler.addPlaceholder(new Placeholder("energy") { + registerPlaceholder(new Placeholder("energy") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -119,7 +125,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("energyCapacity") { + registerPlaceholder(new Placeholder("energy_capacity") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -137,7 +143,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("calc") { + registerPlaceholder(new Placeholder("calc") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -154,7 +160,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("itemCount") { + registerPlaceholder(new Placeholder("item_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -188,7 +194,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("fluidCount") { + registerPlaceholder(new Placeholder("fluid_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -208,7 +214,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("if") { + registerPlaceholder(new Placeholder("if") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -232,7 +238,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("color") { + registerPlaceholder(new Placeholder("color") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -243,7 +249,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return new MultiLineComponent(args.get(1).stream().map(c -> c.withStyle(color)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("underline") { + registerPlaceholder(new Placeholder("underline") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -253,7 +259,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, args.getFirst().stream().map(c -> c.withStyle(ChatFormatting.UNDERLINE)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("strike") { + registerPlaceholder(new Placeholder("strike") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -263,7 +269,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, args.getFirst().stream().map(c -> c.withStyle(ChatFormatting.STRIKETHROUGH)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("obf") { + registerPlaceholder(new Placeholder("obf") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -273,7 +279,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, args.getFirst().stream().map(c -> c.withStyle(ChatFormatting.OBFUSCATED)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("random") { + registerPlaceholder(new Placeholder("random") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -283,7 +289,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, PlaceholderUtils.toInt(args.getFirst()), PlaceholderUtils.toInt(args.get(1)))); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("repeat") { + registerPlaceholder(new Placeholder("repeat") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -306,7 +312,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("block") { + registerPlaceholder(new Placeholder("block") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -320,7 +326,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("tick") { + registerPlaceholder(new Placeholder("tick") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -334,7 +340,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("select") { + registerPlaceholder(new Placeholder("select") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -352,7 +358,7 @@ public boolean isPure() { }); if (!GTCEu.Mods.isCreateLoaded() || !ConfigHolder.INSTANCE.compat.createCompat) { - PlaceholderHandler.addPlaceholder(new Placeholder("redstone") { + registerPlaceholder(new Placeholder("redstone") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -374,9 +380,8 @@ public MultiLineComponent apply(PlaceholderContext ctx, throw new InvalidArgsException(); } }); - } - PlaceholderHandler.addPlaceholder(new Placeholder("previousText") { + registerPlaceholder(new Placeholder("previous_text") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -393,7 +398,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("progress") { + registerPlaceholder(new Placeholder("progress") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -411,7 +416,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("maxProgress") { + registerPlaceholder(new Placeholder("max_progress") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -429,7 +434,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("maintenance") { + registerPlaceholder(new Placeholder("maintenance") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -447,7 +452,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("active") { + registerPlaceholder(new Placeholder("active") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -465,7 +470,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("voltage") { + registerPlaceholder(new Placeholder("voltage") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -483,7 +488,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("amperage") { + registerPlaceholder(new Placeholder("amperage") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -501,7 +506,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("count") { + registerPlaceholder(new Placeholder("count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -520,7 +525,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("data") { + registerPlaceholder(new Placeholder("data") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -533,15 +538,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, if (ctx.itemStackHandler() == null) throw new NotSupportedException(); PlaceholderUtils.checkRange("slot index", 0, ctx.itemStackHandler().getSlots(), slot); ItemStack stack; - if (slot == 0) { - if (ctx.monitorGroup() == null) throw new NotSupportedException(); - if (ctx.monitorGroup().getTargetRaw() == null) throw new NoTargetException(); - IMonitorComponent component = GTCapabilityHelper.getMonitorComponent(ctx.level(), - ctx.monitorGroup().getTargetRaw(), null); - if (component != null && component.getDataItems() != null) { - stack = component.getDataItems().getStackInSlot(ctx.monitorGroup().getDataSlot()); - } else throw new NotSupportedException(); - } else stack = ctx.itemStackHandler().getStackInSlot(slot - 1); + stack = ctx.itemStackHandler().getStackInSlot(slot - 1); int capacity = -1; DataItem component = stack.get(GTDataComponents.DATA_ITEM); if (component != null) capacity = component.capacity(); @@ -585,7 +582,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } } }); - PlaceholderHandler.addPlaceholder(new Placeholder("combine") { + registerPlaceholder(new Placeholder("combine") { @Override public MultiLineComponent apply(PlaceholderContext ctx, List args) { @@ -602,7 +599,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("nbt") { + registerPlaceholder(new Placeholder("nbt") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -620,7 +617,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("toChars") { + registerPlaceholder(new Placeholder("to_chars") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -638,7 +635,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("toAscii") { + registerPlaceholder(new Placeholder("to_ascii") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -654,7 +651,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("fromAscii") { + registerPlaceholder(new Placeholder("from_ascii") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -668,7 +665,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("subList") { + registerPlaceholder(new Placeholder("sub_list") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -690,7 +687,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("cmp") { + registerPlaceholder(new Placeholder("cmp") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -715,7 +712,7 @@ public boolean isPure() { } }); - PlaceholderHandler.addPlaceholder(new Placeholder("bf") { + registerPlaceholder(new Placeholder("bf") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -800,7 +797,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, default -> throw new PlaceholderException(Component .translatable("gtceu.computer_monitor_cover.error.bf_invalid", i).getString()); } - } catch (Exception e) { + } catch (Exception ignored) { } if (Character.isDigit(code.charAt(i))) { @@ -812,7 +809,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } }); - PlaceholderHandler.addPlaceholder(new Placeholder("cmd") { + registerPlaceholder(new Placeholder("cmd") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -877,7 +874,7 @@ public boolean shouldInformAdmins() { return output; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("tm") { + registerPlaceholder(new Placeholder("tm") { @Override public MultiLineComponent apply(PlaceholderContext ctx, List args) { @@ -889,7 +886,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("formatInt") { + registerPlaceholder(new Placeholder("format_int") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -915,7 +912,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("click") { + registerPlaceholder(new Placeholder("click") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -936,7 +933,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ender") { + registerPlaceholder(new Placeholder("ender") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1028,7 +1025,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } } }); - PlaceholderHandler.addPlaceholder(new Placeholder("eval") { + registerPlaceholder(new Placeholder("eval") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1042,7 +1039,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } }); - PlaceholderHandler.addPlaceholder(new Placeholder("module") { + registerPlaceholder(new Placeholder("module") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1065,7 +1062,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, (CompoundTag) stack.save(ctx.level().registryAccess()))); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("setImage") { + registerPlaceholder(new Placeholder("set_image") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1086,7 +1083,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.empty(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("rect") { + registerPlaceholder(new Placeholder("rect") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1110,7 +1107,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, renderData)); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("quad") { + registerPlaceholder(new Placeholder("quad") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1144,7 +1141,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, renderData)); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("item") { + registerPlaceholder(new Placeholder("item") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1156,7 +1153,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(ctx.itemStackHandler().getStackInSlot(slot - 1).toString()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("blockNbt") { + registerPlaceholder(new Placeholder("block_nbt") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1180,7 +1177,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return tag == null ? MultiLineComponent.empty() : MultiLineComponent.literal(tag.toString()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("setTargetSlot") { + registerPlaceholder(new Placeholder("set_target_slot") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1199,7 +1196,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.empty(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("targetSlot") { + registerPlaceholder(new Placeholder("target_slot") { @Override public MultiLineComponent apply(PlaceholderContext ctx, diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java index 0297fae9d24..ea3f1d41792 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java @@ -8,19 +8,23 @@ import net.neoforged.neoforge.common.crafting.SizedIngredient; import net.neoforged.neoforge.fluids.crafting.SizedFluidIngredient; +import com.tterrag.registrate.util.entry.RegistryEntry; + +import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; + public class GTRecipeCapabilities { - public final static RecipeCapability ITEM = ItemRecipeCapability.CAP; - public final static RecipeCapability FLUID = FluidRecipeCapability.CAP; - public final static RecipeCapability BLOCK_STATE = BlockStateRecipeCapability.CAP; - public final static RecipeCapability EU = EURecipeCapability.CAP; - public final static RecipeCapability CWU = CWURecipeCapability.CAP; - - public static void init() { - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, ITEM.id, ITEM); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, FLUID.id, FLUID); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, BLOCK_STATE.id, BLOCK_STATE); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, EU.id, EU); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, CWU.id, CWU); + // spotless:off + public final static RegistryEntry, RecipeCapability> ITEM = register(ItemRecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> FLUID = register(FluidRecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> BLOCK_STATE = register(BlockStateRecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> EU = register(EURecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> CWU = register(CWURecipeCapability.CAP); + //spotless:on + + public static void init() {} + + private static > RegistryEntry, T> register(T cap) { + return REGISTRATE.simple(cap.id.getPath(), GTRegistries.Keys.RECIPE_CAPABILITY, () -> cap); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java index 7e85576b713..cc98474af51 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java @@ -5,31 +5,33 @@ import com.gregtechceu.gtceu.api.recipe.condition.RecipeConditionType; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.recipe.condition.*; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.mojang.serialization.MapCodec; +import com.tterrag.registrate.util.entry.RegistryEntry; public final class GTRecipeConditions { private GTRecipeConditions() {} // spotless:off - public static final RecipeConditionType BIOME = register("biome", BiomeCondition::new, BiomeCondition.CODEC); - public static final RecipeConditionType DIMENSION = register("dimension", DimensionCondition::new, DimensionCondition.CODEC); - public static final RecipeConditionType BIOME_TAG = register("biome_tag", BiomeTagCondition::new, BiomeTagCondition.CODEC); - public static final RecipeConditionType POSITION_Y = register("pos_y", PositionYCondition::new, PositionYCondition.CODEC); - public static final RecipeConditionType RAINING = register("rain", RainingCondition::new, RainingCondition.CODEC); - public static final RecipeConditionType ADJACENT_FLUID = register("adjacent_fluid", AdjacentFluidCondition::new, AdjacentFluidCondition.CODEC); - public static final RecipeConditionType ADJACENT_BLOCK = register("adjacent_block", AdjacentBlockCondition::new, AdjacentBlockCondition.CODEC); - public static final RecipeConditionType THUNDER = register("thunder", ThunderCondition::new, ThunderCondition.CODEC); - public static final RecipeConditionType VENT = register("steam_vent", VentCondition::new, VentCondition.CODEC); - public static final RecipeConditionType CLEANROOM = register("cleanroom", CleanroomCondition::new, CleanroomCondition.CODEC); - public static final RecipeConditionType EU_TO_START = register("eu_to_start", EUToStartCondition::new, EUToStartCondition.CODEC); - public static final RecipeConditionType RESEARCH = register("research", ResearchCondition::new, ResearchCondition.CODEC); - public static final RecipeConditionType ENVIRONMENTAL_HAZARD = register("environmental_hazard", EnvironmentalHazardCondition::new, EnvironmentalHazardCondition.CODEC); - public static final RecipeConditionType DAYTIME = register("daytime", DaytimeCondition::new, DaytimeCondition.CODEC); - public static RecipeConditionType FTB_QUEST; + public static final RegistryEntry, RecipeConditionType> BIOME = register("biome", BiomeCondition::new, BiomeCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> DIMENSION = register("dimension", DimensionCondition::new, DimensionCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> BIOME_TAG = register("biome_tag", BiomeTagCondition::new, BiomeTagCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> POSITION_Y = register("pos_y", PositionYCondition::new, PositionYCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> RAINING = register("rain", RainingCondition::new, RainingCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> ADJACENT_FLUID = register("adjacent_fluid", AdjacentFluidCondition::new, AdjacentFluidCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> ADJACENT_BLOCK = register("adjacent_block", AdjacentBlockCondition::new, AdjacentBlockCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> THUNDER = register("thunder", ThunderCondition::new, ThunderCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> VENT = register("steam_vent", VentCondition::new, VentCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> CLEANROOM = register("cleanroom", CleanroomCondition::new, CleanroomCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> EU_TO_START = register("eu_to_start", EUToStartCondition::new, EUToStartCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> RESEARCH = register("research", ResearchCondition::new, ResearchCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> ENVIRONMENTAL_HAZARD = register("environmental_hazard", EnvironmentalHazardCondition::new, EnvironmentalHazardCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> DAYTIME = register("daytime", DaytimeCondition::new, DaytimeCondition.CODEC); + public static RegistryEntry, RecipeConditionType> FTB_QUEST; // public static RecipeConditionType GAMESTAGE; - public static RecipeConditionType HERACLES_QUEST; + public static RegistryEntry, RecipeConditionType> HERACLES_QUEST; public static void init() { if (GTCEu.Mods.isFTBQuestsLoaded()) { @@ -44,10 +46,11 @@ public static void init() { } // spotless:on - private static > RecipeConditionType register(String name, - RecipeConditionType.ConditionFactory factory, - MapCodec codec) { - return GTRegistries.register(GTRegistries.RECIPE_CONDITIONS, GTCEu.id(name), - new RecipeConditionType<>(factory, codec)); + private static < + T extends RecipeCondition> RegistryEntry, RecipeConditionType> register(String name, + RecipeConditionType.ConditionFactory factory, + MapCodec codec) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.RECIPE_CONDITION, + () -> new RecipeConditionType<>(factory, codec)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java index a4bb514ea17..d3ade870231 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.item.component.ISpoilableItem; import com.gregtechceu.gtceu.api.item.component.SpoilContext; @@ -26,6 +27,7 @@ import net.minecraft.Util; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; @@ -70,7 +72,7 @@ public class GTRecipeModifiers { ConsumedInputsData inputs = machine.getTraitOptional(RecipeLogic.class) .map(RecipeLogic::getConsumedInputs).orElse(null); if (inputs == null) return; - for (Object inObject : inputs.getConsumedInputs(GTRecipeCapabilities.ITEM)) { + for (Object inObject : inputs.getConsumedInputs(ItemRecipeCapability.CAP)) { if (!(inObject instanceof SizedIngredient ingredient)) continue; if (ingredient.getItems().length == 0) continue; ItemStack in = ingredient.getItems()[0]; @@ -87,14 +89,14 @@ public class GTRecipeModifiers { } }).build(); - public static final BiFunction ENVIRONMENT_REQUIREMENT = Util - .memoize((condition, maxAllowedStrength) -> (machine, recipe) -> { + public static final BiFunction, Integer, RecipeModifier> ENVIRONMENT_REQUIREMENT = Util + .memoize((conditionHolder, maxAllowedStrength) -> (machine, recipe) -> { if (!ConfigHolder.INSTANCE.gameplay.environmentalHazards) return ModifierFunction.IDENTITY; if (!(machine.getLevel() instanceof ServerLevel serverLevel)) return ModifierFunction.NULL; EnvironmentalHazardSavedData data = EnvironmentalHazardSavedData.getOrCreate(serverLevel); BlockPos machinePos = machine.getBlockPos(); - var zone = data.getZoneByContainedPosAndCondition(machinePos, condition); + var zone = data.getZoneByContainedPosAndCondition(machinePos, conditionHolder.value()); if (zone == null) return ModifierFunction.IDENTITY; float strength = zone.strength(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java index 11148edf857..dc18df6fae0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java @@ -6,12 +6,13 @@ import net.minecraft.core.registries.Registries; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; public class GTRecipeSerializers { - public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister + private static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister .create(Registries.RECIPE_SERIALIZER, GTCEu.MOD_ID); public static final DeferredHolder, StrictShapedRecipe.Serializer> CRAFTING_SHAPED_STRICT = RECIPE_SERIALIZERS @@ -27,4 +28,8 @@ public class GTRecipeSerializers { public static final DeferredHolder, SimpleCraftingRecipeSerializer> CRAFTING_FACADE_COVER = RECIPE_SERIALIZERS .register("crafting_facade_cover", () -> new SimpleCraftingRecipeSerializer<>(FacadeCoverRecipe::new)); + + public static void init(IEventBus modBus) { + RECIPE_SERIALIZERS.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java index 724386d6819..d7731655aed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; @@ -468,7 +469,7 @@ public class GTRecipeTypes { public static final GTRecipeType RESEARCH_STATION_RECIPES = register("research_station", ELECTRIC) .setEUIO(IO.IN) - .setMaxSize(IO.IN, GTRecipeCapabilities.CWU, 1) + .setMaxSize(IO.IN, CWURecipeCapability.CAP, 1) .setMaxIOSize(2, 1, 0, 0) .UI(builder -> builder.setProgressBar(GTGuiTextures.PROGRESS_ARROW) .setItemSlotOverlay(IO.IN, 0, GTGuiTextures.SCANNER_OVERLAY) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java index 5f910b59dbb..b7b740bf29e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java @@ -1,71 +1,55 @@ package com.gregtechceu.gtceu.common.data; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.sound.SoundEntry; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.registries.RegisterEvent; +import net.neoforged.neoforge.registries.DeferredHolder; import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; public class GTSoundEntries { // Machine Sounds - public static final SoundEntry FORGE_HAMMER = REGISTRATE.sound("forge_hammer").build(); - public static final SoundEntry MACERATOR = REGISTRATE.sound("macerator").build(); - public static final SoundEntry CHEMICAL = REGISTRATE.sound("chemical").build(); - public static final SoundEntry ASSEMBLER = REGISTRATE.sound("assembler").build(); - public static final SoundEntry CENTRIFUGE = REGISTRATE.sound("centrifuge").build(); - public static final SoundEntry COMPRESSOR = REGISTRATE.sound("compressor").build(); - public static final SoundEntry ELECTROLYZER = REGISTRATE.sound("electrolyzer").build(); - public static final SoundEntry MIXER = REGISTRATE.sound("mixer").build(); - public static final SoundEntry REPLICATOR = REGISTRATE.sound("replicator").build(); - public static final SoundEntry ARC = REGISTRATE.sound("arc").build(); - public static final SoundEntry BOILER = REGISTRATE.sound("boiler").build(); - public static final SoundEntry FURNACE = REGISTRATE.sound("furnace").build(); - public static final SoundEntry COOLING = REGISTRATE.sound("cooling").build(); - public static final SoundEntry FIRE = REGISTRATE.sound("fire").build(); - public static final SoundEntry BATH = REGISTRATE.sound("bath").build(); - public static final SoundEntry MOTOR = REGISTRATE.sound("motor").build(); - public static final SoundEntry CUT = REGISTRATE.sound("cut").build(); - public static final SoundEntry TURBINE = REGISTRATE.sound("turbine").build(); - public static final SoundEntry COMBUSTION = REGISTRATE.sound("combustion").build(); - public static final SoundEntry COMPUTATION = REGISTRATE.sound("computation").build(); - public static final SoundEntry MINER = REGISTRATE.sound("miner").build(); - public static final SoundEntry SCIENCE = REGISTRATE.sound("science").build(); - public static final SoundEntry JET_ENGINE = REGISTRATE.sound("jet_engine").build(); - public static final SoundEntry WRENCH_TOOL = REGISTRATE.sound("wrench").build(); - public static final SoundEntry SOFT_MALLET_TOOL = REGISTRATE.sound("soft_hammer").build(); - public static final SoundEntry DRILL_TOOL = REGISTRATE.sound("drill").build(); - public static final SoundEntry PLUNGER_TOOL = REGISTRATE.sound("plunger").build(); - public static final SoundEntry FILE_TOOL = REGISTRATE.sound("file").build(); - public static final SoundEntry SAW_TOOL = REGISTRATE.sound("saw").build(); - public static final SoundEntry SCREWDRIVER_TOOL = REGISTRATE.sound("screwdriver").build(); - public static final SoundEntry CHAINSAW_TOOL = REGISTRATE.sound("chainsaw").build(); - public static final SoundEntry WIRECUTTER_TOOL = REGISTRATE.sound("wirecutter").build(); - public static final SoundEntry SPRAY_CAN_TOOL = REGISTRATE.sound("spray_can").build(); - public static final SoundEntry PORTABLE_SCANNER = REGISTRATE.sound("portable_scanner").build(); - public static final SoundEntry MORTAR_TOOL = REGISTRATE.sound("mortar").build(); - public static final SoundEntry SUS_RECORD = REGISTRATE.sound("sus").build(); - public static final SoundEntry PORTAL_OPENING = REGISTRATE.sound("portal_opening").build(); - public static final SoundEntry PORTAL_CLOSING = REGISTRATE.sound("portal_closing").build(); - public static final SoundEntry METAL_PIPE = REGISTRATE.sound("metal_pipe").build(); - - public static void init(IEventBus modBus) { - modBus.register(GTSoundEntries.class); - } - - @SubscribeEvent - private static void registerSounds(RegisterEvent event) { - if (event.getRegistryKey() != Registries.SOUND_EVENT) return; - - for (SoundEntry entry : GTRegistries.SOUNDS) { - entry.prepare(); - entry.register(soundEvent -> GTRegistries.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), - soundEvent)); - } - } + // spotless:off + public static final DeferredHolder FORGE_HAMMER = REGISTRATE.sound("forge_hammer").register(); + public static final DeferredHolder MACERATOR = REGISTRATE.sound("macerator").register(); + public static final DeferredHolder CHEMICAL = REGISTRATE.sound("chemical").register(); + public static final DeferredHolder ASSEMBLER = REGISTRATE.sound("assembler").register(); + public static final DeferredHolder CENTRIFUGE = REGISTRATE.sound("centrifuge").register(); + public static final DeferredHolder COMPRESSOR = REGISTRATE.sound("compressor").register(); + public static final DeferredHolder ELECTROLYZER = REGISTRATE.sound("electrolyzer").register(); + public static final DeferredHolder MIXER = REGISTRATE.sound("mixer").register(); + public static final DeferredHolder REPLICATOR = REGISTRATE.sound("replicator").register(); + public static final DeferredHolder ARC = REGISTRATE.sound("arc").register(); + public static final DeferredHolder BOILER = REGISTRATE.sound("boiler").register(); + public static final DeferredHolder FURNACE = REGISTRATE.sound("furnace").register(); + public static final DeferredHolder COOLING = REGISTRATE.sound("cooling").register(); + public static final DeferredHolder FIRE = REGISTRATE.sound("fire").register(); + public static final DeferredHolder BATH = REGISTRATE.sound("bath").register(); + public static final DeferredHolder MOTOR = REGISTRATE.sound("motor").register(); + public static final DeferredHolder CUT = REGISTRATE.sound("cut").register(); + public static final DeferredHolder TURBINE = REGISTRATE.sound("turbine").register(); + public static final DeferredHolder COMBUSTION = REGISTRATE.sound("combustion").register(); + public static final DeferredHolder COMPUTATION = REGISTRATE.sound("computation").register(); + public static final DeferredHolder MINER = REGISTRATE.sound("miner").register(); + public static final DeferredHolder SCIENCE = REGISTRATE.sound("science").register(); + public static final DeferredHolder JET_ENGINE = REGISTRATE.sound("jet_engine").register(); + public static final DeferredHolder WRENCH_TOOL = REGISTRATE.sound("wrench").register(); + public static final DeferredHolder SOFT_MALLET_TOOL = REGISTRATE.sound("soft_hammer").register(); + public static final DeferredHolder DRILL_TOOL = REGISTRATE.sound("drill").register(); + public static final DeferredHolder PLUNGER_TOOL = REGISTRATE.sound("plunger").register(); + public static final DeferredHolder FILE_TOOL = REGISTRATE.sound("file").register(); + public static final DeferredHolder SAW_TOOL = REGISTRATE.sound("saw").register(); + public static final DeferredHolder SCREWDRIVER_TOOL = REGISTRATE.sound("screwdriver").register(); + public static final DeferredHolder CHAINSAW_TOOL = REGISTRATE.sound("chainsaw").register(); + public static final DeferredHolder WIRECUTTER_TOOL = REGISTRATE.sound("wirecutter").register(); + public static final DeferredHolder SPRAY_CAN_TOOL = REGISTRATE.sound("spray_can").register(); + public static final DeferredHolder PORTABLE_SCANNER = REGISTRATE.sound("portable_scanner").register(); + public static final DeferredHolder MORTAR_TOOL = REGISTRATE.sound("mortar").register(); + public static final DeferredHolder SUS_RECORD = REGISTRATE.sound("sus").register(); + public static final DeferredHolder PORTAL_OPENING = REGISTRATE.sound("portal_opening").register(); + public static final DeferredHolder PORTAL_CLOSING = REGISTRATE.sound("portal_closing").register(); + public static final DeferredHolder METAL_PIPE = REGISTRATE.sound("metal_pipe").register(); + //spotless:on + + public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java index 29dd6768837..41a27812be4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java @@ -7,6 +7,6 @@ public class GTSoundTypes { public static final SoundType METAL_PIPE = new SoundType(1.0f, 1.0f, - GTSoundEntries.METAL_PIPE.getMainEvent(), + GTSoundEntries.METAL_PIPE.value().getMainEvent(), SoundEvents.STONE_STEP, SoundEvents.STONE_PLACE, SoundEvents.STONE_HIT, SoundEvents.STONE_FALL); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java index 18a41a6e53e..7fffcfa5888 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java @@ -1,49 +1,47 @@ package com.gregtechceu.gtceu.common.data; -import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.item.tool.behavior.IToolBehavior; import com.gregtechceu.gtceu.api.item.tool.behavior.ToolBehaviorType; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.item.tool.behavior.*; +import com.gregtechceu.gtceu.common.registry.GTRegistration; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; + +import com.mojang.serialization.Codec; +import com.tterrag.registrate.util.entry.RegistryEntry; public class GTToolBehaviors { private GTToolBehaviors() {} // spotless:off - public static final ToolBehaviorType AOE_CONFIG_UI = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("aoe_config_ui"), new ToolBehaviorType<>(AOEConfigUIBehavior.CODEC, AOEConfigUIBehavior.STREAM_CODEC)); - public static final ToolBehaviorType BLOCK_ROTATING = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("rotate_block"), new ToolBehaviorType<>(BlockRotatingBehavior.CODEC, BlockRotatingBehavior.STREAM_CODEC)); - public static final ToolBehaviorType DISABLE_SHIELD = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("disable_shield"), new ToolBehaviorType<>(DisableShieldBehavior.CODEC, DisableShieldBehavior.STREAM_CODEC)); - public static final ToolBehaviorType ENTITY_DAMAGE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("entity_damage"), new ToolBehaviorType<>(EntityDamageBehavior.CODEC, EntityDamageBehavior.STREAM_CODEC)); - public static final ToolBehaviorType PATH = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("path"), new ToolBehaviorType<>(GrassPathBehavior.CODEC, GrassPathBehavior.STREAM_CODEC)); - public static final ToolBehaviorType HARVEST_CROPS = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("harvest_crops"), new ToolBehaviorType<>(HarvestCropsBehavior.CODEC, HarvestCropsBehavior.STREAM_CODEC)); - public static final ToolBehaviorType HARVEST_ICE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("harvest_ice"), new ToolBehaviorType<>(HarvestIceBehavior.CODEC, HarvestIceBehavior.STREAM_CODEC)); - public static final ToolBehaviorType HOE_GROUND = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("hoe_ground"), new ToolBehaviorType<>(HoeGroundBehavior.CODEC, HoeGroundBehavior.STREAM_CODEC)); - public static final ToolBehaviorType STRIP_LOG = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("strip_log"), new ToolBehaviorType<>(LogStripBehavior.CODEC, LogStripBehavior.STREAM_CODEC)); - public static final ToolBehaviorType PLUNGER = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("plunger"), new ToolBehaviorType<>(PlungerBehavior.CODEC, PlungerBehavior.STREAM_CODEC)); - public static final ToolBehaviorType ROTATE_RAIL = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("rotate_rail"), new ToolBehaviorType<>(RotateRailBehavior.CODEC, RotateRailBehavior.STREAM_CODEC)); - public static final ToolBehaviorType SCRAPE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("scrape"), new ToolBehaviorType<>(ScrapeBehavior.CODEC, ScrapeBehavior.STREAM_CODEC)); - public static final ToolBehaviorType TORCH_PLACE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("torch_place"), new ToolBehaviorType<>(TorchPlaceBehavior.CODEC, TorchPlaceBehavior.STREAM_CODEC)); - public static final ToolBehaviorType TREE_FELLING = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("tree_felling"), new ToolBehaviorType<>(TreeFellingBehavior.CODEC, TreeFellingBehavior.STREAM_CODEC)); - public static final ToolBehaviorType WAX_OFF = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("wax_off"), new ToolBehaviorType<>(WaxOffBehavior.CODEC, WaxOffBehavior.STREAM_CODEC)); - public static final ToolBehaviorType MODE_SWITCH = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("mode_switch"), new ToolBehaviorType<>(ToolModeSwitchBehavior.CODEC, ToolModeSwitchBehavior.STREAM_CODEC)); - public static final ToolBehaviorType PROSPECTING = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("prospecting"), new ToolBehaviorType<>(ProspectingBehavior.CODEC, ProspectingBehavior.STREAM_CODEC)); + public static final RegistryEntry, ToolBehaviorType> AOE_CONFIG_UI = register("aoe_config_ui", AOEConfigUIBehavior.CODEC, AOEConfigUIBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> BLOCK_ROTATING = register("rotate_block", BlockRotatingBehavior.CODEC, BlockRotatingBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> DISABLE_SHIELD = register("disable_shield", DisableShieldBehavior.CODEC, DisableShieldBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> ENTITY_DAMAGE = register("entity_damage", EntityDamageBehavior.CODEC, EntityDamageBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> PATH = register("path", GrassPathBehavior.CODEC, GrassPathBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> HARVEST_CROPS = register("harvest_crops", HarvestCropsBehavior.CODEC, HarvestCropsBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> HARVEST_ICE = register("harvest_ice", HarvestIceBehavior.CODEC, HarvestIceBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> HOE_GROUND = register("hoe_ground", HoeGroundBehavior.CODEC, HoeGroundBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> STRIP_LOG = register("strip_log", LogStripBehavior.CODEC, LogStripBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> PLUNGER = register("plunger", PlungerBehavior.CODEC, PlungerBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> ROTATE_RAIL = register("rotate_rail", RotateRailBehavior.CODEC, RotateRailBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> SCRAPE = register("scrape", ScrapeBehavior.CODEC, ScrapeBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> TORCH_PLACE = register("torch_place", TorchPlaceBehavior.CODEC, TorchPlaceBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> TREE_FELLING = register("tree_felling", TreeFellingBehavior.CODEC, TreeFellingBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> WAX_OFF = register("wax_off", WaxOffBehavior.CODEC, WaxOffBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> MODE_SWITCH = register("mode_switch", ToolModeSwitchBehavior.CODEC, ToolModeSwitchBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> PROSPECTING = register("prospecting", ProspectingBehavior.CODEC, ProspectingBehavior.STREAM_CODEC); // spotless:on public static void init() {} + + private static < + T extends IToolBehavior> RegistryEntry, ToolBehaviorType> register(String name, + Codec codec, + StreamCodec streamCodec) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.TOOL_BEHAVIOR, + () -> new ToolBehaviorType<>(codec, streamCodec)); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java b/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java index ec21f58b6c5..f4876dd1f3c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java @@ -25,6 +25,7 @@ import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.enchantment.ItemEnchantments; import net.minecraft.world.level.material.Fluid; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.SimpleFluidContent; import net.neoforged.neoforge.registries.DeferredHolder; @@ -38,7 +39,7 @@ public class GTDataComponents { private static final StreamCodec UNIT_STREAM_CODEC = StreamCodec.unit(Unit.INSTANCE); - public static final DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister + private static final DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister .createDataComponents(Registries.DATA_COMPONENT_TYPE, GTCEu.MOD_ID); // Tool-related @@ -207,4 +208,8 @@ public class GTDataComponents { public static final DeferredHolder, DataComponentType> LIGHTER_OPEN = DATA_COMPONENTS .registerComponentType("lighter_open", builder -> builder.persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL)); + + public static void init(IEventBus modBus) { + DATA_COMPONENTS.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java index dd4fe58ec1d..51ae5c23c3b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.multiblock.MultiPredicate; import com.gregtechceu.gtceu.api.multiblock.Predicates; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.DynamicRenderHelper; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; @@ -54,7 +55,8 @@ public class GCYMMachines { public static void init() {} - public static final MachineDefinition[] PARALLEL_HATCH = registerTieredMachines(REGISTRATE, "parallel_hatch", + public static final MachineEntry[] PARALLEL_HATCH = registerTieredMachines(REGISTRATE, + "parallel_hatch", ParallelHatchPartMachine::new, (tier, builder) -> builder .langValue(switch (tier) { @@ -78,7 +80,7 @@ public static void init() {} .register(), IV, LuV, ZPM, UV); - public final static MultiblockMachineDefinition LARGE_MACERATION_TOWER = REGISTRATE + public static final MachineEntry LARGE_MACERATION_TOWER = REGISTRATE .multiblock("large_maceration_tower", LargeMacerationTowerMachine::new) .langValue("Large Maceration Tower") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -94,7 +96,7 @@ public static void init() {} .slice("XXXXX", "XGGGX", "XGGGX", "XAAAX") .slice("XXXXX", "XGGGX", "XGGGX", "XAAAX") .slice("XXXXX", "XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_SECURE_MACERATION.get()).setMinGlobalLimited(55) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -105,7 +107,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_maceration_tower")) .register(); - public final static MultiblockMachineDefinition LARGE_CHEMICAL_BATH = REGISTRATE + public static final MachineEntry LARGE_CHEMICAL_BATH = REGISTRATE .multiblock("large_chemical_bath", GTMachineInstanceFactories.LARGE_CHEM_BATH) .langValue("Large Chemical Bath") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -123,7 +125,7 @@ public static void init() {} .slice("XXXXX", "X X", "X X") .slice("XXXXX", "XTTTX", "X X") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(55) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -137,7 +139,7 @@ public static void init() {} .andThen(b -> b.addDynamicRenderer(DynamicRenderHelper::makeRecipeFluidAreaRender))) .register(); - public final static MultiblockMachineDefinition LARGE_CENTRIFUGE = REGISTRATE + public static final MachineEntry LARGE_CENTRIFUGE = REGISTRATE .multiblock("large_centrifuge", WorkableElectricMultiblockMachine::new) .langValue("Large Centrifugal Unit") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -153,7 +155,7 @@ public static void init() {} .slice("XXXXX", "XPAPX", "XXXXX") .slice("XXXXX", "XAPAX", "XXXXX") .slice("#XXX#", "XXSXX", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_VIBRATION_SAFE.get()).setMinGlobalLimited(40) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -165,7 +167,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_centrifuge")) .register(); - public final static MultiblockMachineDefinition LARGE_MIXER = REGISTRATE + public static final MachineEntry LARGE_MIXER = REGISTRATE .multiblock("large_mixer", GTMachineInstanceFactories.LARGE_MIXER) .langValue("Large Mixing Vessel") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -181,7 +183,7 @@ public static void init() {} .slice("XXXXX", "XPPPX", "XAPAX", "XPPPX", "XAGAX", "FFGFF") .slice("XXXXX", "XAPAX", "XAAAX", "XAPAX", "XAAAX", "##F##") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#", "#XXX#", "##F##") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_REACTION_SAFE.get()).setMinGlobalLimited(50) .and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -198,7 +200,7 @@ public static void init() {} .andThen(b -> b.addDynamicRenderer(DynamicRenderHelper::makeRecipeFluidAreaRender))) .register(); - public final static MultiblockMachineDefinition LARGE_ELECTROLYZER = REGISTRATE + public static final MachineEntry LARGE_ELECTROLYZER = REGISTRATE .multiblock("large_electrolyzer", WorkableElectricMultiblockMachine::new) .langValue("Large Electrolysis Chamber") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -213,7 +215,7 @@ public static void init() {} .slice("XXXXX", "XCCCX", "XCCCX") .slice("XXXXX", "XCCCX", "XCCCX") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_NONCONDUCTING.get()).setMinGlobalLimited(30) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -223,7 +225,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_electrolyzer")) .register(); - public final static MultiblockMachineDefinition LARGE_ELECTROMAGNET = REGISTRATE + public static final MachineEntry LARGE_ELECTROMAGNET = REGISTRATE .multiblock("large_electromagnet", WorkableElectricMultiblockMachine::new) .langValue("Large Electromagnet") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -239,7 +241,7 @@ public static void init() {} .slice("XCXCX", "XCXCX", "XCXCX") .slice("XCXCX", "XCXCX", "XCXCX") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_NONCONDUCTING.get()).setMinGlobalLimited(35) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -249,7 +251,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_electrolyzer")) .register(); - public final static MultiblockMachineDefinition LARGE_PACKER = REGISTRATE + public static final MachineEntry LARGE_PACKER = REGISTRATE .multiblock("large_packer", WorkableElectricMultiblockMachine::new) .langValue("Large Packaging Machine") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -266,7 +268,7 @@ public static void init() {} .slice("XXX", "XAX", "XXX") .slice("XXX", "XAX", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_TUNGSTENSTEEL_ROBUST.get()).setMinGlobalLimited(30) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -276,7 +278,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_packer")) .register(); - public final static MultiblockMachineDefinition LARGE_ASSEMBLER = REGISTRATE + public static final MachineEntry LARGE_ASSEMBLER = REGISTRATE .multiblock("large_assembler", WorkableElectricMultiblockMachine::new) .langValue("Large Assembling Factory") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -294,7 +296,7 @@ public static void init() {} .slice("XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX") .slice("XXXXXXXXX", "XAAAXAAAX", "XGGGXXXXX") .slice("XXXXXXXXX", "XGGGXXSXX", "XGGGX###X") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_LARGE_SCALE_ASSEMBLING.get()).setMinGlobalLimited(40) .and(Predicates.autoAbilities(definition.getRecipeTypes(), false, false, true, true, true, true)) @@ -308,7 +310,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_assembler")) .register(); - public final static MultiblockMachineDefinition LARGE_CIRCUIT_ASSEMBLER = REGISTRATE + public static final MachineEntry LARGE_CIRCUIT_ASSEMBLER = REGISTRATE .multiblock("large_circuit_assembler", WorkableElectricMultiblockMachine::new) .langValue("Large Circuit Assembling Facility") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -328,7 +330,7 @@ public static void init() {} .slice("XXXXXXX", "XAAAAPX", "XGGGGGX") .slice("XXXXXXX", "XTTTTXX", "XXXXXXX") .slice("#####XX", "#####SX", "#####XX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_LARGE_SCALE_ASSEMBLING.get()).setMinGlobalLimited(55) .and(Predicates.autoAbilities(definition.getRecipeTypes(), false, false, true, true, true, true)) @@ -344,7 +346,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_circuit_assembler")) .register(); - public final static MultiblockMachineDefinition LARGE_ARC_SMELTER = REGISTRATE + public static final MachineEntry LARGE_ARC_SMELTER = REGISTRATE .multiblock("large_arc_smelter", WorkableElectricMultiblockMachine::new) .langValue("Large Arc Smelter") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -360,7 +362,7 @@ public static void init() {} .slice("XXXXX", "XAAAX", "XAAAX", "XXMXX") .slice("XXXXX", "XACAX", "XACAX", "XXXXX") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_HIGH_TEMPERATURE_SMELTING.get()).setMinGlobalLimited(45) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -373,7 +375,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_arc_smelter")) .register(); - public final static MultiblockMachineDefinition LARGE_ENGRAVING_LASER = REGISTRATE + public static final MachineEntry LARGE_ENGRAVING_LASER = REGISTRATE .multiblock("large_engraving_laser", WorkableElectricMultiblockMachine::new) .langValue("Large Engraving Laser") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -392,7 +394,7 @@ public static void init() {} .slice("XXXXX", "GAAAG", "GACAG", "XKXKX") .slice("XXXXX", "XAAAX", "XAAAX", "XKKKX") .slice("XXSXX", "XXGXX", "XXGXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('C', blocks(CASING_TUNGSTENSTEEL_PIPE.get())) .where('X', blocks(CASING_LASER_SAFE_ENGRAVING.get()).setMinGlobalLimited(50) .and(Predicates.autoAbilities(definition.getRecipeTypes())) @@ -405,7 +407,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_engraving_laser")) .register(); - public final static MultiblockMachineDefinition LARGE_SIFTING_FUNNEL = REGISTRATE + public static final MachineEntry LARGE_SIFTING_FUNNEL = REGISTRATE .multiblock("large_sifting_funnel", WorkableElectricMultiblockMachine::new) .langValue("Large Sifting Funnel") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -421,7 +423,7 @@ public static void init() {} .slice("#XXX#", "#XAX#", "XKKKX", "XKKKX", "X###X") .slice("XXXXX", "XAXAX", "XKKKX", "XKKKX", "X###X") .slice("#X#X#", "#X#X#", "#XSX#", "XXXXX", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_VIBRATION_SAFE.get()).setMinGlobalLimited(50) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -433,7 +435,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_sifting_funnel")) .register(); - public final static MultiblockMachineDefinition BLAST_ALLOY_SMELTER = REGISTRATE + public static final MachineEntry BLAST_ALLOY_SMELTER = REGISTRATE .multiblock("alloy_blast_smelter", CoilWorkableElectricMultiblockMachine::new) .langValue("Alloy Blast Smelter") .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", @@ -451,7 +453,7 @@ public static void init() {} .slice("XXXXX", "CAAAC", "GAAAG", "CAAAC", "XXMXX") .slice("XXXXX", "CAAAC", "GAAAG", "CAAAC", "XXXXX") .slice("#XSX#", "#CCC#", "#GGG#", "#CCC#", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_HIGH_TEMPERATURE_SMELTING.get()).setMinGlobalLimited(30) .and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, false))) @@ -471,7 +473,7 @@ public static void init() {} IntSyncValue coilTemperature = syncManager.getOrCreateSyncHandler("coilTemperature", IntSyncValue.class, () -> new IntSyncValue(() -> coilMachine.getCoilType().getCoilTemperature())); IntSyncValue machineTier = syncManager.getOrCreateSyncHandler("machineTier", IntSyncValue.class, - () -> new IntSyncValue(() -> coilMachine.getTier())); + () -> new IntSyncValue(coilMachine::getTier)); return Collections.singletonList(Text .dynamic(() -> Component.translatable("gtceu.multiblock.blast_furnace.max_temperature", @@ -483,7 +485,7 @@ public static void init() {} }) .register(); - public final static MultiblockMachineDefinition LARGE_AUTOCLAVE = REGISTRATE + public static final MachineEntry LARGE_AUTOCLAVE = REGISTRATE .multiblock("large_autoclave", WorkableElectricMultiblockMachine::new) .langValue("Large Crystallization Chamber") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -499,7 +501,7 @@ public static void init() {} .slice("XXX", "XTX", "XXX") .slice("XXX", "XTX", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(30) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -510,7 +512,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_autoclave")) .register(); - public final static MultiblockMachineDefinition LARGE_MATERIAL_PRESS = REGISTRATE + public static final MachineEntry LARGE_MATERIAL_PRESS = REGISTRATE .multiblock("large_material_press", WorkableElectricMultiblockMachine::new) .langValue("Large Material Press") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -525,7 +527,7 @@ public static void init() {} .slice("XXXXXXX", "XXXXXXX", "XXXXXXX") .slice("XXXXXXX", "XAXGGGX", "XXXXXXX") .slice("XXXXXXX", "XSXCCCX", "XXXXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STRESS_PROOF.get()).setMinGlobalLimited(40) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -537,7 +539,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_material_press")) .register(); - public final static MultiblockMachineDefinition LARGE_BREWER = REGISTRATE + public static final MachineEntry LARGE_BREWER = REGISTRATE .multiblock("large_brewer", WorkableElectricMultiblockMachine::new) .langValue("Large Brewing Vat") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -554,7 +556,7 @@ public static void init() {} .slice("XXXXX", "XCPCX", "XAPAX", "XAPAX", "#XXX#") .slice("XXXXX", "XCCCX", "XAAAX", "XXAXX", "##X##") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#", "#####") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_CORROSION_PROOF.get()).setMinGlobalLimited(50) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -567,7 +569,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_brewer")) .register(); - public final static MultiblockMachineDefinition LARGE_CUTTER = REGISTRATE + public static final MachineEntry LARGE_CUTTER = REGISTRATE .multiblock("large_cutter", WorkableElectricMultiblockMachine::new) .langValue("Large Cutting Saw") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -582,7 +584,7 @@ public static void init() {} .slice("XXXXXXX", "XAXCCCX", "XXXAAAX", "##XXXXX") .slice("XXXXXXX", "XAXCCCX", "XXXAAAX", "##XXXXX") .slice("XXXXXXX", "XSXGGGX", "XXXGGGX", "##XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_SHOCK_PROOF.get()).setMinGlobalLimited(65) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -595,7 +597,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_cutter")) .register(); - public final static MultiblockMachineDefinition LARGE_DISTILLERY = REGISTRATE + public static final MachineEntry LARGE_DISTILLERY = REGISTRATE .multiblock("large_distillery", DistillationTowerMachine::new) .langValue("Large Fractionating Distillery") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -609,14 +611,14 @@ public static void init() {} MultiPredicate casingPredicate = blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(40); MultiPredicate exportPredicate = abilities(PartAbility.EXPORT_FLUIDS_1X); if (GTCEu.Mods.isAE2Loaded()) - exportPredicate = exportPredicate.xor(blocks(GTAEMachines.FLUID_EXPORT_HATCH_ME.get())); + exportPredicate = exportPredicate.xor(machines(GTAEMachines.FLUID_EXPORT_HATCH_ME)); exportPredicate = exportPredicate.setMaxLayerLimited(1); return MultiblockPatternBuilder.start(UP, BACK, RIGHT) .slice("#YYY#", "YYYYY", "YYYYY", "YYYYY", "#YYY#") .slice("#YSY#", "YAAAY", "YAAAY", "YAAAY", "#YYY#") .sliceRepeatable(1, 12, "##X##", "#XAX#", "XAPAX", "#XAX#", "##X##") .slice("#####", "#ZZZ#", "#ZZZ#", "#ZZZ#", "#####") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('Y', casingPredicate.and(abilities(IMPORT_ITEMS)) .and(abilities(INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2)) .and(abilities(IMPORT_FLUIDS).setMinGlobalLimited(1)) @@ -635,7 +637,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_distillery")) .register(); - public final static MultiblockMachineDefinition LARGE_EXTRACTOR = REGISTRATE + public static final MachineEntry LARGE_EXTRACTOR = REGISTRATE .multiblock("large_extractor", WorkableElectricMultiblockMachine::new) .langValue("Large Extraction Machine") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -649,7 +651,7 @@ public static void init() {} .slice("XXXXX", "XXXXX", "XXXXX") .slice("XXXXX", "XCACX", "XXXXX") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(25) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -660,7 +662,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_extractor")) .register(); - public final static MultiblockMachineDefinition LARGE_EXTRUDER = REGISTRATE + public static final MachineEntry LARGE_EXTRUDER = REGISTRATE .multiblock("large_extruder", WorkableElectricMultiblockMachine::new) .langValue("Large Extrusion Machine") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -676,7 +678,7 @@ public static void init() {} .slice("XXXXX", "XXXPX", "XXXGX") .sliceRepeatable(2, 2, "##XXX", "##XPX", "##XGX") .slice("##XXX", "##XXX", "##XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STRESS_PROOF.get()).setMinGlobalLimited(40) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -689,7 +691,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_extruder")) .register(); - public final static MultiblockMachineDefinition LARGE_SOLIDIFIER = REGISTRATE + public static final MachineEntry LARGE_SOLIDIFIER = REGISTRATE .multiblock("large_solidifier", WorkableElectricMultiblockMachine::new) .langValue("Large Solidification Array") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -705,7 +707,7 @@ public static void init() {} .slice("XXXXX", "XAAAX", "XAAAX", "XXXXX") .slice("XXXXX", "XCACX", "XCACX", "XXXXX") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(45) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -717,7 +719,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_solidifier")) .register(); - public final static MultiblockMachineDefinition LARGE_WIREMILL = REGISTRATE + public static final MachineEntry LARGE_WIREMILL = REGISTRATE .multiblock("large_wiremill", WorkableElectricMultiblockMachine::new) .langValue("Large Wire Factory") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -731,7 +733,7 @@ public static void init() {} .slice("XXXXX", "XXXXX", "XXX##") .slice("XXXXX", "X#CCX", "XXXXX") .slice("XXXXX", "XSXXX", "XXX##") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STRESS_PROOF.get()).setMinGlobalLimited(25) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -743,7 +745,7 @@ public static void init() {} .register(); // spotless:off - public static final MultiblockMachineDefinition ROTARY_HEARTH_FURNACE = REGISTRATE + public static final MachineEntry ROTARY_HEARTH_FURNACE = REGISTRATE .multiblock("rotary_hearth_furnace", CoilWorkableElectricMultiblockMachine::new) .langValue("Rotary Hearth Furnace") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -774,7 +776,7 @@ public static void init() {} .slice("#XXXXXXXXXXX#", "#XXXXXXXXXXX#", "###F#####F###", "###F#####F###", "###FFFFFFF###", "#############", "#############", "#############", "#############", "#############", "####FFFFF####", "#############", "#############", "#############", "#############", "#############", "#############") .slice("##XXXXXXXXX##", "##XXXXSXXXX##", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############") // spotless:on - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', casing.and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) .where('C', heatingCoils()) @@ -800,7 +802,7 @@ public static void init() {} IntSyncValue coilTemperature = syncManager.getOrCreateSyncHandler("coilTemperature", IntSyncValue.class, () -> new IntSyncValue(() -> coilMachine.getCoilType().getCoilTemperature())); IntSyncValue machineTier = syncManager.getOrCreateSyncHandler("machineTier", IntSyncValue.class, - () -> new IntSyncValue(() -> coilMachine.getTier())); + () -> new IntSyncValue(coilMachine::getTier)); return Collections.singletonList(Text .dynamic(() -> Component.translatable("gtceu.multiblock.blast_furnace.max_temperature", @@ -812,7 +814,7 @@ public static void init() {} }) .register(); - public final static MultiblockMachineDefinition MEGA_VACUUM_FREEZER = REGISTRATE + public static final MachineEntry MEGA_VACUUM_FREEZER = REGISTRATE .multiblock("mega_vacuum_freezer", WorkableElectricMultiblockMachine::new) .langValue("Bulk Blast Chiller") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -831,7 +833,7 @@ public static void init() {} .slice("XXXXXXX#KKK", "XPPPPPX#KVK", "XPA#APX#KVK", "XPAAAPX#KVK", "XPAAAPX#KKK", "XPPPPPX####", "XXXXXXX####") .slice("#XXXXX#####", "#XXSXX#####", "#XGGGX#####", "#XGGGX#####", "#XGGGX#####", "#XXXXX#####", "###########") // spotless:on - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_ALUMINIUM_FROSTPROOF.get()).setMinGlobalLimited(140) .and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java index 58e86286821..434e9d79d30 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.integration.ae2.machine.*; import net.minecraft.network.chat.Component; @@ -16,7 +17,7 @@ @SuppressWarnings("unused") public class GTAEMachines { - public final static MachineDefinition ITEM_IMPORT_BUS_ME = REGISTRATE + public final static MachineEntry ITEM_IMPORT_BUS_ME = REGISTRATE .machine("me_input_bus", MEInputBusPartMachine::new) .langValue("ME Input Bus") .tier(EV) @@ -30,7 +31,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition STOCKING_IMPORT_BUS_ME = REGISTRATE + public final static MachineEntry STOCKING_IMPORT_BUS_ME = REGISTRATE .machine("me_stocking_input_bus", MEStockingBusPartMachine::new) .langValue("ME Stocking Input Bus") .tier(IV) @@ -46,7 +47,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition ITEM_EXPORT_BUS_ME = REGISTRATE + public final static MachineEntry ITEM_EXPORT_BUS_ME = REGISTRATE .machine("me_output_bus", MEOutputBusPartMachine::new) .langValue("ME Output Bus") .tier(EV) @@ -60,7 +61,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition FLUID_IMPORT_HATCH_ME = REGISTRATE + public final static MachineEntry FLUID_IMPORT_HATCH_ME = REGISTRATE .machine("me_input_hatch", MEInputHatchPartMachine::new) .langValue("ME Input Hatch") .tier(EV) @@ -74,7 +75,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition STOCKING_IMPORT_HATCH_ME = REGISTRATE + public final static MachineEntry STOCKING_IMPORT_HATCH_ME = REGISTRATE .machine("me_stocking_input_hatch", MEStockingHatchPartMachine::new) .langValue("ME Stocking Input Hatch") .tier(IV) @@ -90,7 +91,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition FLUID_EXPORT_HATCH_ME = REGISTRATE + public final static MachineEntry FLUID_EXPORT_HATCH_ME = REGISTRATE .machine("me_output_hatch", MEOutputHatchPartMachine::new) .langValue("ME Output Hatch") .tier(EV) @@ -103,7 +104,7 @@ public class GTAEMachines { Component.translatable("gtceu.machine.me.export.tooltip"), Component.translatable("gtceu.part_sharing.enabled")) .register(); - public static final MachineDefinition ME_PATTERN_BUFFER = REGISTRATE + public static final MachineEntry ME_PATTERN_BUFFER = REGISTRATE .machine("me_pattern_buffer", MEPatternBufferPartMachine::new) .tier(LuV) .rotationState(RotationState.ALL) @@ -117,7 +118,7 @@ public class GTAEMachines { Component.translatable("block.gtceu.pattern_buffer.desc.2"), Component.translatable("gtceu.part_sharing.enabled")) .register(); - public static final MachineDefinition ME_PATTERN_BUFFER_PROXY = REGISTRATE + public static final MachineEntry ME_PATTERN_BUFFER_PROXY = REGISTRATE .machine("me_pattern_buffer_proxy", MEPatternBufferProxyPartMachine::new) .tier(LuV) .rotationState(RotationState.ALL) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTDevMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTDevMachines.java index ac2e69602a7..04225bda6ce 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTDevMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTDevMachines.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.multiblock.Predicates; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; import static com.gregtechceu.gtceu.api.multiblock.Predicates.*; @@ -14,7 +15,7 @@ public class GTDevMachines { - public static final MultiblockMachineDefinition CONNECTED_TEXTURE_TEST = REGISTRATE + public static final MachineEntry CONNECTED_TEXTURE_TEST = REGISTRATE .multiblock("connected_texture_test", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.LARGE_CHEMICAL_RECIPES) @@ -30,7 +31,7 @@ public class GTDevMachines { .slice(" ", " ", " ", " ", " ") .slice(" ", " ", " ", " ", " ") .slice(" ", " ", " XX", " XX", " XX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CTM_TEST) .or(autoAbilities(definition.getRecipeTypes())) .or(Predicates.autoAbilities(true, true, true))) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index 114d8d63771..e9065009ce6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -30,8 +29,9 @@ import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.*; import com.gregtechceu.gtceu.common.block.BoilerFireboxType; import com.gregtechceu.gtceu.common.data.GTMaterialItems; @@ -61,15 +61,18 @@ import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.FluidType; import net.neoforged.neoforge.fluids.SimpleFluidContent; +import brachy.modularui.api.drawable.Text; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.Int2IntFunction; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; @@ -95,7 +98,6 @@ import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.*; import static com.gregtechceu.gtceu.common.data.models.GTMachineModels.*; import static com.gregtechceu.gtceu.common.machine.electric.BatteryBufferMachine.AMPS_PER_BATTERY_NORMAL; -import static com.gregtechceu.gtceu.common.machine.storage.QuantumTankMachine.TANK_CAPACITY; import static com.gregtechceu.gtceu.utils.FormattingUtil.toEnglishName; public class GTMachineUtils { @@ -129,71 +131,14 @@ public class GTMachineUtils { PartAbility.EXPORT_ITEMS, PartAbility.EXPORT_FLUIDS, }; - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - boolean hasPollutionDebuff, PanelFactory panelFactory) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .tankScalingFunction(tankScalingFunction) - .hasPollutionDebuff(hasPollutionDebuff) - .panelFactory(panelFactory) - .register(); - } - - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - PanelFactory panelFactory) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .panelFactory(panelFactory) - .tankScalingFunction(tankScalingFunction) - .register(); - } - - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, String name, - GTRecipeType recipeType, PanelFactory panelFactory) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .panelFactory(panelFactory) - .register(); - } - - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, - String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - boolean hasPollutionDebuff, - PanelFactory panelFactory, - int... tiers) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .tankScalingFunction(tankScalingFunction) - .hasPollutionDebuff(hasPollutionDebuff) - .panelFactory(panelFactory) - .tiers(tiers) - .register(); - } - - public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate, - String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MachineDefinition> builder, - int... tiers) { - MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; + @SuppressWarnings("unchecked") + public static < + MACHINE extends MetaMachine> MachineEntry[] registerTieredMachines(GTRegistrate registrate, + String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MachineEntry> builder, + int... tiers) { + MachineEntry[] definitions = new MachineEntry[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate .machine(GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, @@ -205,25 +150,26 @@ public static MachineDefinition[] registerTieredMa } public static < - MACHINE extends MetaMachine> Pair registerSteamMachines(GTRegistrate registrate, - String name, - MachineInstanceFactory.Steam factory, - BiFunction, MachineDefinition> builder) { - MachineDefinition lowTier = builder.apply(false, + MACHINE extends MetaMachine> Pair, MachineEntry> registerSteamMachines(GTRegistrate registrate, + String name, + MachineInstanceFactory.Steam factory, + BiFunction, MachineEntry> builder) { + MachineEntry lowTier = builder.apply(false, registrate.machine("lp_%s".formatted(name), holder -> factory.buildMachine(holder, false)) .langValue("Low Pressure " + FormattingUtil.toEnglishName(name)) .tier(0)); - MachineDefinition highTier = builder.apply(true, + MachineEntry highTier = builder.apply(true, registrate.machine("hp_%s".formatted(name), holder -> factory.buildMachine(holder, true)) .langValue("High Pressure " + FormattingUtil.toEnglishName(name)) .tier(1)); return Pair.of(lowTier, highTier); } - public static MachineDefinition[] registerFluidHatches(GTRegistrate registrate, String name, String displayName, - String tooltip, - IO io, int initialCapacity, int slots, - int[] tiers, PartAbility... abilities) { + public static MachineEntry[] registerFluidHatches(GTRegistrate registrate, String name, + String displayName, + String tooltip, + IO io, int initialCapacity, int slots, + int[] tiers, PartAbility... abilities) { final String pipeOverlay; if (slots >= 9) { pipeOverlay = "overlay_pipe_9x"; @@ -259,18 +205,19 @@ public static MachineDefinition[] registerFluidHatches(GTRegistrate registrate, tiers); } - public static MachineDefinition[] registerTransformerMachines(GTRegistrate registrate, String langName, - int baseAmp) { + public static MachineEntry[] registerTransformerMachines(GTRegistrate registrate, + String langName, + int baseAmp) { return registerTieredMachines(registrate, "transformer_%da".formatted(baseAmp), (holder, tier) -> new TransformerMachine(holder, tier, baseAmp), (tier, builder) -> builder .rotationState(RotationState.ALL) - .itemColor((itemStack, index) -> switch (index) { + .item().color(() -> () -> (itemStack, index) -> switch (index) { case 1 -> ConfigHolder.INSTANCE.client.getDefaultPaintingColor(); case 2 -> VC[tier + 1]; case 3 -> VC[tier]; default -> -1; - }) + }).build() .modelProperty(GTMachineModelProperties.IS_TRANSFORM_UP, false) .model(createTransformerModel(baseAmp)) .langValue("%s %sTransformer".formatted(VCF[tier] + VOLTAGE_NAMES[tier] + ChatFormatting.RESET, @@ -291,11 +238,11 @@ public static MachineDefinition[] registerTransformerMachines(GTRegistrate regis // UHV not needed, as a UV transformer transforms up to UHV } - public static MachineDefinition[] registerSimpleGenerator(GTRegistrate registrate, String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - float hazardStrengthPerOperation, - int... tiers) { + public static MachineEntry[] registerSimpleGenerator(GTRegistrate registrate, String name, + GTRecipeType recipeType, + Int2IntFunction tankScalingFunction, + float hazardStrengthPerOperation, + int... tiers) { return registerTieredMachines(registrate, name, (holder, tier) -> new SimpleGeneratorMachine(holder, tier, hazardStrengthPerOperation * tier, tankScalingFunction), @@ -314,9 +261,9 @@ public static MachineDefinition[] registerSimpleGenerator(GTRegistrate registrat tiers); } - public static Pair registerSimpleSteamMachines(GTRegistrate registrate, - String name, - GTRecipeType recipeType) { + public static Pair, MachineEntry> registerSimpleSteamMachines(GTRegistrate registrate, + String name, + GTRecipeType recipeType) { return registerSteamMachines(registrate, "steam_" + name, SimpleSteamMachine::new, (pressure, builder) -> builder .rotationState(RotationState.ALL) @@ -329,7 +276,8 @@ public static Pair registerSimpleSteamMach .register()); } - public static MachineDefinition[] registerBatteryBuffer(GTRegistrate registrate, int batterySlotSize) { + public static MachineEntry[] registerBatteryBuffer(GTRegistrate registrate, + int batterySlotSize) { return registerTieredMachines(registrate, "battery_buffer_" + batterySlotSize + "x", (holder, tier) -> new BatteryBufferMachine(holder, tier, batterySlotSize, AMPS_PER_BATTERY_NORMAL, batterySlotSize), @@ -352,7 +300,7 @@ public static MachineDefinition[] registerBatteryBuffer(GTRegistrate registrate, ALL_TIERS); } - public static MachineDefinition[] registerCharger(GTRegistrate registrate, int itemSlotSize) { + public static MachineEntry[] registerCharger(GTRegistrate registrate, int itemSlotSize) { return registerTieredMachines(registrate, "charger_" + itemSlotSize + "x", (holder, tier) -> new BatteryBufferMachine(holder, tier, itemSlotSize, BatteryBufferMachine.AMPS_PER_BATTERY_CHARGER, 0), @@ -373,14 +321,15 @@ public static MachineDefinition[] registerCharger(GTRegistrate registrate, int i ALL_TIERS); } - public static MachineDefinition[] registerConverter(GTRegistrate registrate, int amperage) { + public static MachineEntry[] registerConverter(GTRegistrate registrate, int amperage) { final var tab = registrate.creativeModeTab(); if (!ConfigHolder.INSTANCE.compat.energy.enableFEConverters) { registrate.creativeModeTab(() -> null); } - MachineDefinition[] converters = registerTieredMachines(registrate, amperage + "a_energy_converter", + MachineEntry[] converters = registerTieredMachines(registrate, + amperage + "a_energy_converter", (holder, tier) -> new ConverterMachine(holder, tier, amperage), (tier, builder) -> builder .rotationState(RotationState.ALL) @@ -407,8 +356,8 @@ public static MachineDefinition[] registerConverter(GTRegistrate registrate, int return converters; } - public static MachineDefinition[] registerLaserHatch(GTRegistrate registrate, IO io, int amperage, - PartAbility ability) { + public static MachineEntry[] registerLaserHatch(GTRegistrate registrate, IO io, int amperage, + PartAbility ability) { String name = io == IN ? "target" : "source"; return registerTieredMachines(registrate, amperage + "a_laser_" + name + "_hatch", (holder, tier) -> new LaserHatchPartMachine(holder, io, tier, amperage), (tier, builder) -> builder @@ -432,8 +381,9 @@ public static MachineDefinition[] registerLaserHatch(GTRegistrate registrate, IO HIGH_TIERS); } - public static MachineDefinition registerCrate(GTRegistrate registrate, Material material, int capacity, - int rowLength, String lang) { + public static MachineEntry registerCrate(GTRegistrate registrate, Material material, + int capacity, + int rowLength, String lang) { final boolean wooden = material.hasProperty(PropertyKey.WOOD); return registrate @@ -445,18 +395,16 @@ public static MachineDefinition registerCrate(GTRegistrate registrate, Material .modelProperty(GTMachineModelProperties.IS_TAPED, false) .model(GTMachineModels.createCrateModel(wooden)) .paintingColor(wooden ? 0xFFFFFF : material.getMaterialRGB()) - .itemColor((s, t) -> wooden ? 0xFFFFFF : material.getMaterialRGB()) + .item().color(() -> () -> (s, t) -> wooden ? 0xFFFFFF : material.getMaterialRGB()).build() .register(); } - public static MachineDefinition registerDrum(GTRegistrate registrate, Material material, int capacity, - String lang) { + public static MachineEntry registerDrum(GTRegistrate registrate, Material material, int capacity, + String lang) { boolean wooden = material.hasProperty(PropertyKey.WOOD); var definition = registrate - .machine(material.getName() + "_drum", MachineDefinition::new, - MetaMachineBlock::new, - (holder, prop) -> DrumMachineItem.create(holder, prop, material), - info -> new DrumMachine(info, material, capacity)) + .machine(material.getName() + "_drum", info -> new DrumMachine(info, material, capacity)) + .item((holder, prop) -> DrumMachineItem.create(holder, prop, material)).build() .langValue(lang) .rotationState(RotationState.NONE) .simpleModel(GTCEu.id("block/machine/template/drum/" + (wooden ? "wooden" : "metal") + "_drum")) @@ -471,23 +419,24 @@ public static MachineDefinition registerDrum(GTRegistrate registrate, Material m Component.translatable("gtceu.universal.tooltip.fluid_storage_capacity", FormattingUtil.formatNumbers(capacity))) .paintingColor(wooden ? 0xFFFFFF : material.getMaterialRGB()) - .itemColor((s, i) -> wooden ? 0xFFFFFF : material.getMaterialRGB()) + .item().color(() -> () -> (s, i) -> wooden ? 0xFFFFFF : material.getMaterialRGB()).build() + .onRegister(d -> DRUM_CAPACITY.put(d, capacity)) .register(); - DRUM_CAPACITY.put(definition, capacity); return definition; } - public static MachineDefinition[] registerQuantumTanks(GTRegistrate registrate, String name, int... tiers) { - MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; + @SuppressWarnings("unchecked") + public static MachineEntry[] registerQuantumTanks(GTRegistrate registrate, String name, + int... tiers) { + MachineEntry[] definitions = new MachineEntry[GTValues.TIER_COUNT]; for (int tier : tiers) { long maxAmount = 4000 * FluidType.BUCKET_VOLUME * (long) Math.pow(2, tier - 1); var register = registrate.machine( GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, - MachineDefinition::new, - MetaMachineBlock::new, QuantumTankMachineItem::new, (holder) -> new QuantumTankMachine(holder, tier, maxAmount)) .langValue(toEnglishName(name) + " " + LVT[tier]) - .blockProp(Block.Properties::dynamicShape) + .item(QuantumTankMachineItem::new).build() + .block().properties(Block.Properties::dynamicShape).build() .rotationState(RotationState.ALL) .allowExtendedFacing(true) .model(createTieredHullMachineModel(GTCEu.id("block/machine/template/quantum/quantum_tank")) @@ -498,19 +447,20 @@ public static MachineDefinition[] registerQuantumTanks(GTRegistrate registrate, Component.translatable("gtceu.universal.tooltip.fluid_storage_capacity", FormattingUtil.formatNumbers(maxAmount))) .tier(tier) + .onRegister(d -> QuantumTankMachine.TANK_CAPACITY.put(d, maxAmount)) .register(); - QuantumTankMachine.TANK_CAPACITY.put(register, maxAmount); definitions[tier] = register; } return definitions; } - public static MachineDefinition[] registerQuantumChests(GTRegistrate registrate, String name, int... tiers) { + public static MachineEntry[] registerQuantumChests(GTRegistrate registrate, String name, + int... tiers) { return registerTieredMachines(registrate, name, (holder, tier) -> new QuantumChestMachine(holder, tier, tier == MAX ? Long.MAX_VALUE : 4_000_000 * (long) Math.pow(2, tier - 1)), (tier, builder) -> builder.langValue(toEnglishName(name) + " " + LVT[tier]) - .blockProp(Block.Properties::dynamicShape) + .block().properties(BlockBehaviour.Properties::dynamicShape).build() .rotationState(RotationState.ALL) .allowExtendedFacing(true) .model(createTieredHullMachineModel(GTCEu.id("block/machine/template/quantum/quantum_chest")) @@ -531,13 +481,13 @@ public static MachineDefinition[] registerQuantumChests(GTRegistrate registrate, ////////////////////////////////////// // multi register helpers - public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate registrate, String name, - String displayName, int capacity, - Supplier casing, - Supplier valve, - @Nullable PropertyFluidFilter filter, - BiConsumer, ResourceLocation> rendererSetup) { - MultiblockMachineBuilder builder = registrate + public static MachineEntry registerMultiblockTank(GTRegistrate registrate, String name, + String displayName, int capacity, + Supplier casing, + MachineEntry valve, + @Nullable PropertyFluidFilter filter, + BiConsumer, ResourceLocation> rendererSetup) { + MultiblockMachineBuilder builder = registrate .multiblock(name, holder -> new MultiblockTankMachine(holder, capacity, filter)) .langValue(displayName) .tooltips( @@ -551,9 +501,9 @@ public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate re .slice("CCC", "CCC", "CCC") .slice("CCC", "C#C", "CCC") .slice("CCC", "CSC", "CCC") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('C', blocks(casing.get()) - .and(blocks(valve.get()).setMaxGlobalLimited(2, 0))) + .and(machines(valve).setMaxGlobalLimited(2, 0))) .where('#', air()) .build()) .appearanceBlock(casing); @@ -561,9 +511,10 @@ public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate re return builder.register(); } - public static MachineDefinition registerTankValve(GTRegistrate registrate, String name, String displayName, - boolean isMetal, - BiConsumer, ResourceLocation> rendererSetup) { + public static MachineEntry registerTankValve(GTRegistrate registrate, String name, + String displayName, + boolean isMetal, + BiConsumer, ResourceLocation> rendererSetup) { MachineBuilder builder = registrate .machine(name, holder -> new TankValvePartMachine(holder, isMetal)) .langValue(displayName) @@ -574,13 +525,14 @@ public static MachineDefinition registerTankValve(GTRegistrate registrate, Strin return builder.register(); } + @SuppressWarnings("unchecked") public static < - MACHINE extends MultiblockControllerMachine> MultiblockMachineDefinition[] registerTieredMultis(GTRegistrate registrate, - String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MultiblockMachineDefinition> builder, - int... tiers) { - MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[GTValues.TIER_COUNT]; + MACHINE extends MultiblockControllerMachine> MachineEntry[] registerTieredMultis(GTRegistrate registrate, + String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MachineEntry> builder, + int... tiers) { + MachineEntry[] definitions = new MachineEntry[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate .multiblock(GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, @@ -591,12 +543,13 @@ MACHINE extends MultiblockControllerMachine> MultiblockMachineDefinition[] regis return definitions; } - public static MultiblockMachineDefinition registerLargeBoiler(GTRegistrate registrate, String name, - Supplier casing, - Supplier pipe, - Supplier fireBox, - ResourceLocation texture, BoilerFireboxType firebox, - int maxTemperature, int heatSpeed) { + public static MachineEntry registerLargeBoiler(GTRegistrate registrate, String name, + Supplier casing, + Supplier pipe, + Supplier fireBox, + ResourceLocation texture, + BoilerFireboxType firebox, + int maxTemperature, int heatSpeed) { // spotless:off return registrate .multiblock("%s_large_boiler".formatted(name), @@ -652,13 +605,13 @@ public static MultiblockMachineDefinition registerLargeBoiler(GTRegistrate regis // spotless:on } - public static MultiblockMachineDefinition registerLargeCombustionEngine(GTRegistrate registrate, - String name, int tier, - Supplier casing, - Supplier gear, - Supplier intake, - ResourceLocation casingTexture, - ResourceLocation overlayModel) { + public static MachineEntry registerLargeCombustionEngine(GTRegistrate registrate, + String name, int tier, + Supplier casing, + Supplier gear, + Supplier intake, + ResourceLocation casingTexture, + ResourceLocation overlayModel) { return registrate.multiblock(name, holder -> new LargeCombustionEngineMachine(holder, tier)) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.COMBUSTION_GENERATOR_FUELS) @@ -703,23 +656,25 @@ public static MultiblockMachineDefinition registerLargeCombustionEngine(GTRegist .register(); } - public static MultiblockMachineDefinition registerLargeTurbine(GTRegistrate registrate, - String name, int tier, GTRecipeType recipeType, - Supplier casing, - Supplier gear, - ResourceLocation casingTexture, - ResourceLocation overlayModel) { + public static MachineEntry registerLargeTurbine(GTRegistrate registrate, + String name, int tier, + GTRecipeType recipeType, + Supplier casing, + Supplier gear, + ResourceLocation casingTexture, + ResourceLocation overlayModel) { return registerLargeTurbine(registrate, name, tier, recipeType, casing, gear, casingTexture, overlayModel, true); } - public static MultiblockMachineDefinition registerLargeTurbine(GTRegistrate registrate, - String name, int tier, GTRecipeType recipeType, - Supplier casing, - Supplier gear, - ResourceLocation casingTexture, - ResourceLocation overlayModel, - boolean needsMuffler) { + public static MachineEntry registerLargeTurbine(GTRegistrate registrate, + String name, int tier, + GTRecipeType recipeType, + Supplier casing, + Supplier gear, + ResourceLocation casingTexture, + ResourceLocation overlayModel, + boolean needsMuffler) { return registrate.multiblock(name, holder -> new LargeTurbineMachine(holder, tier)) .rotationState(RotationState.ALL) .recipeType(recipeType) @@ -774,8 +729,10 @@ public static Component explosion() { return null; } - public static Component environmentRequirement(MedicalCondition condition) { - return Component.translatable("gtceu.recipe.environmental_hazard.reverse", condition.getTranslatableName()); + public static Component environmentRequirement(Holder condition) { + // Dynamic to avoid resolving the medical condition holder until the component is actually used. + return Text.dynamic(() -> Component.translatable("gtceu.recipe.environmental_hazard.reverse", + condition.value().getTranslatableName())); } public static Component defaultEnvironmentRequirement() { @@ -857,7 +814,7 @@ public SimpleMachineBuilder tiers(int... tiers) { return this; } - public MachineDefinition[] register() { + public MachineEntry[] register() { if (panelFactory == null) { panelFactory = GTSingleblockMachinePanels.GENERAL_MACHINE; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java index d9051e44e8f..8427f870d25 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java @@ -16,6 +16,7 @@ import com.gregtechceu.gtceu.api.multiblock.MultiPredicate; import com.gregtechceu.gtceu.api.multiblock.Predicates; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.DynamicRenderHelper; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.block.BoilerFireboxType; @@ -75,22 +76,26 @@ public class GTMultiMachines { ////////////////////////////////////// // ******* Multiblock *******// ////////////////////////////////////// - public static final MultiblockMachineDefinition LARGE_BOILER_BRONZE = registerLargeBoiler(REGISTRATE, "bronze", + public static final MachineEntry LARGE_BOILER_BRONZE = registerLargeBoiler(REGISTRATE, + "bronze", CASING_BRONZE_BRICKS, CASING_BRONZE_PIPE, FIREBOX_BRONZE, GTCEu.id("block/casings/solid/machine_casing_bronze_plated_bricks"), BoilerFireboxType.BRONZE_FIREBOX, ConfigHolder.INSTANCE.machines.largeBoilers.bronzeBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.bronzeBoilerHeatSpeed); - public static final MultiblockMachineDefinition LARGE_BOILER_STEEL = registerLargeBoiler(REGISTRATE, "steel", + public static final MachineEntry LARGE_BOILER_STEEL = registerLargeBoiler(REGISTRATE, + "steel", CASING_STEEL_SOLID, CASING_STEEL_PIPE, FIREBOX_STEEL, GTCEu.id("block/casings/solid/machine_casing_solid_steel"), BoilerFireboxType.STEEL_FIREBOX, ConfigHolder.INSTANCE.machines.largeBoilers.steelBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.steelBoilerHeatSpeed); - public static final MultiblockMachineDefinition LARGE_BOILER_TITANIUM = registerLargeBoiler(REGISTRATE, "titanium", + public static final MachineEntry LARGE_BOILER_TITANIUM = registerLargeBoiler( + REGISTRATE, "titanium", CASING_TITANIUM_STABLE, CASING_TITANIUM_PIPE, FIREBOX_TITANIUM, GTCEu.id("block/casings/solid/machine_casing_stable_titanium"), BoilerFireboxType.TITANIUM_FIREBOX, ConfigHolder.INSTANCE.machines.largeBoilers.titaniumBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.titaniumBoilerHeatSpeed); - public static final MultiblockMachineDefinition LARGE_BOILER_TUNGSTENSTEEL = registerLargeBoiler(REGISTRATE, + public static final MachineEntry LARGE_BOILER_TUNGSTENSTEEL = registerLargeBoiler( + REGISTRATE, "tungstensteel", CASING_TUNGSTENSTEEL_ROBUST, CASING_TUNGSTENSTEEL_PIPE, FIREBOX_TUNGSTENSTEEL, GTCEu.id("block/casings/solid/machine_casing_robust_tungstensteel"), @@ -98,7 +103,8 @@ public class GTMultiMachines { ConfigHolder.INSTANCE.machines.largeBoilers.tungstensteelBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.tungstensteelBoilerHeatSpeed); - public static final MultiblockMachineDefinition COKE_OVEN = REGISTRATE.multiblock("coke_oven", CokeOvenMachine::new) + public static final MachineEntry COKE_OVEN = REGISTRATE + .multiblock("coke_oven", CokeOvenMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.COKE_OVEN_RECIPES) .appearanceBlock(CASING_COKE_BRICKS) @@ -107,16 +113,16 @@ public class GTMultiMachines { .slice("XXX", "X#X", "XXX") .slice("XXX", "XYX", "XXX") .where('X', - blocks(CASING_COKE_BRICKS.get()).and(blocks(COKE_OVEN_HATCH.get()).setMaxGlobalLimited(5))) + blocks(CASING_COKE_BRICKS.get()).and(machines(COKE_OVEN_HATCH).setMaxGlobalLimited(5))) .where('#', Predicates.air()) - .where('Y', Predicates.controller(blocks(definition.getBlock()))) + .where('Y', Predicates.controller(definition)) .build()) .workableCasingModel(GTCEu.id("block/casings/solid/machine_coke_bricks"), GTCEu.id("block/multiblock/coke_oven")) .themeId((i) -> GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MultiblockMachineDefinition PRIMITIVE_BLAST_FURNACE = REGISTRATE + public static final MachineEntry PRIMITIVE_BLAST_FURNACE = REGISTRATE .multiblock("primitive_blast_furnace", PrimitiveBlastFurnaceMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.PRIMITIVE_BLAST_FURNACE_RECIPES) @@ -142,7 +148,7 @@ public class GTMultiMachines { .themeId((i) -> GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MultiblockMachineDefinition ELECTRIC_BLAST_FURNACE = REGISTRATE + public static final MachineEntry ELECTRIC_BLAST_FURNACE = REGISTRATE .multiblock("electric_blast_furnace", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.BLAST_RECIPES) @@ -188,7 +194,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition LARGE_CHEMICAL_REACTOR = REGISTRATE + public static final MachineEntry LARGE_CHEMICAL_REACTOR = REGISTRATE .multiblock("large_chemical_reactor", WorkableElectricMultiblockMachine::new) .conditionalTooltip(defaultEnvironmentRequirement(), ConfigHolder.INSTANCE.gameplay.environmentalHazards) @@ -216,7 +222,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/large_chemical_reactor")) .register(); - public static final MultiblockMachineDefinition IMPLOSION_COMPRESSOR = REGISTRATE + public static final MachineEntry IMPLOSION_COMPRESSOR = REGISTRATE .multiblock("implosion_compressor", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.IMPLOSION_RECIPES) @@ -226,7 +232,7 @@ public class GTMultiMachines { .slice("XXX", "XXX", "XXX") .slice("XXX", "X#X", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STEEL_SOLID.get()).setMinGlobalLimited(14) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, true, false))) @@ -236,7 +242,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/implosion_compressor")) .register(); - public static final MultiblockMachineDefinition PYROLYSE_OVEN = REGISTRATE + public static final MachineEntry PYROLYSE_OVEN = REGISTRATE .multiblock("pyrolyse_oven", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.PYROLYSE_RECIPES) @@ -247,7 +253,7 @@ public class GTMultiMachines { .slice("CCC", "C#C", "CCC") .slice("CCC", "C#C", "CCC") .slice("XXX", "XSX", "XXX") - .where('S', Predicates.controller(blocks(definition.get()))) + .where('S', Predicates.controller(definition)) .where('X', blocks(MACHINE_CASING_ULV.get()).setMinGlobalLimited(6) .and(Predicates.autoAbilities(definition.getRecipeTypes())) @@ -273,7 +279,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition MULTI_SMELTER = REGISTRATE + public static final MachineEntry MULTI_SMELTER = REGISTRATE .multiblock("multi_smelter", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeTypes(GTRecipeTypes.FURNACE_RECIPES, GTRecipeTypes.ALLOY_SMELTER_RECIPES) @@ -285,7 +291,7 @@ public class GTMultiMachines { .slice("XXX", "CCC", "XXX") .slice("XXX", "C#C", "XMX") .slice("XSX", "CCC", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_INVAR_HEATPROOF.get()).setMinGlobalLimited(9) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, false))) @@ -318,7 +324,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition CRACKER = REGISTRATE + public static final MachineEntry CRACKER = REGISTRATE .multiblock("cracker", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.CRACKING_RECIPES) @@ -328,7 +334,7 @@ public class GTMultiMachines { .slice("HCHCH", "HCHCH", "HCHCH") .slice("HCHCH", "H###H", "HCHCH") .slice("HCHCH", "HCOCH", "HCHCH") - .where('O', Predicates.controller(blocks(definition.get()))) + .where('O', Predicates.controller(definition)) .where('H', blocks(CASING_STAINLESS_CLEAN.get()).setMinGlobalLimited(12) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, true, false))) @@ -353,7 +359,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition DISTILLATION_TOWER = REGISTRATE + public static final MachineEntry DISTILLATION_TOWER = REGISTRATE .multiblock("distillation_tower", DistillationTowerMachine::new) .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.DISTILLATION_RECIPES) @@ -362,7 +368,7 @@ public class GTMultiMachines { .pattern(definition -> { MultiPredicate exportPredicate = abilities(PartAbility.EXPORT_FLUIDS_1X); if (GTCEu.Mods.isAE2Loaded()) { - exportPredicate = exportPredicate.xor(blocks(GTAEMachines.FLUID_EXPORT_HATCH_ME.get())); + exportPredicate = exportPredicate.xor(machines(GTAEMachines.FLUID_EXPORT_HATCH_ME)); } exportPredicate = exportPredicate.setMaxLayerLimited(1); MultiPredicate maint = autoAbilities(true, false, false) @@ -392,7 +398,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/distillation_tower")) .register(); - public static final MultiblockMachineDefinition VACUUM_FREEZER = REGISTRATE + public static final MachineEntry VACUUM_FREEZER = REGISTRATE .multiblock("vacuum_freezer", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.VACUUM_RECIPES) @@ -412,7 +418,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/vacuum_freezer")) .register(); - public static final MultiblockMachineDefinition ASSEMBLY_LINE = REGISTRATE + public static final MachineEntry ASSEMBLY_LINE = REGISTRATE .multiblock("assembly_line", AssemblyLineMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.ASSEMBLY_LINE_RECIPES) @@ -423,7 +429,7 @@ public class GTMultiMachines { .slice("FIF", "RTR", "SAG", "#Y#") .sliceRepeatable(3, 15, "FIF", "RTR", "DAG", "#Y#") .slice("FOF", "RTR", "DAG", "#Y#") - .where('S', Predicates.controller(blocks(definition.getBlock()))) + .where('S', Predicates.controller(definition)) .where('F', blocks(CASING_STEEL_SOLID.get()) .and(!ConfigHolder.INSTANCE.machines.orderedAssemblyLineFluids ? Predicates.abilities(PartAbility.IMPORT_FLUIDS_1X, @@ -451,7 +457,7 @@ public class GTMultiMachines { .hasBER(true) .register(); - public static final MultiblockMachineDefinition PRIMITIVE_PUMP = REGISTRATE + public static final MachineEntry PRIMITIVE_PUMP = REGISTRATE .multiblock("primitive_pump", PrimitivePumpMachine::new) .rotationState(RotationState.NON_Y_AXIS) .appearanceBlock(CASING_PUMP_DECK) @@ -460,12 +466,12 @@ public class GTMultiMachines { .slice("XXXX", "##F#", "##F#") .slice("XXHX", "F##F", "FFFF") .slice("SXXX", "##F#", "##F#") - .where('S', Predicates.controller(blocks(definition.getBlock()))) + .where('S', Predicates.controller(definition)) .where('X', blocks(CASING_PUMP_DECK.get())) .where('F', Predicates.frames(GTMaterials.TreatedWood)) .where('H', Predicates.abilities(PartAbility.PUMP_FLUID_HATCH) - .xor(blocks(FLUID_EXPORT_HATCH[ULV].get(), FLUID_EXPORT_HATCH[LV].get()))) + .xor(machines(FLUID_EXPORT_HATCH[ULV], FLUID_EXPORT_HATCH[LV]))) .where('#', Predicates.any()) .build()) .allowExtendedFacing(false) @@ -485,7 +491,7 @@ public class GTMultiMachines { })) .register(); - public static final MultiblockMachineDefinition STEAM_GRINDER = REGISTRATE + public static final MachineEntry STEAM_GRINDER = REGISTRATE .multiblock("steam_grinder", SteamParallelMultiblockMachine::new) .rotationState(RotationState.ALL) .appearanceBlock(CASING_BRONZE_BRICKS) @@ -509,7 +515,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/steam_grinder")) .register(); - public static final MultiblockMachineDefinition STEAM_OVEN = REGISTRATE + public static final MachineEntry STEAM_OVEN = REGISTRATE .multiblock("steam_oven", SteamParallelMultiblockMachine::new) .rotationState(RotationState.ALL) .appearanceBlock(CASING_BRONZE_BRICKS) @@ -539,7 +545,7 @@ public class GTMultiMachines { BoilerFireboxType.BRONZE_FIREBOX, CASING_BRONZE_BRICKS)))) .register(); - public static final MultiblockMachineDefinition[] FUSION_REACTOR = registerTieredMultis(REGISTRATE, + public static final MachineEntry[] FUSION_REACTOR = registerTieredMultis(REGISTRATE, "fusion_reactor", FusionReactorMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) @@ -572,7 +578,7 @@ public class GTMultiMachines { .slice("####CC###CC####", "###EAAOGOAAE###", "####CC###CC####") .slice("######ICI######", "####GGAAAGG####", "######ICI######") .slice("###############", "######OSO######", "###############") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('G', blocks(FUSION_GLASS.get()).or(casing)) .where('E', casing.and( blocks(PartAbility.INPUT_ENERGY.getBlockRange(tier, UV).toArray(Block[]::new)) @@ -593,7 +599,8 @@ public class GTMultiMachines { .register(), LuV, ZPM, UV); - public static final MultiblockMachineDefinition[] FLUID_DRILLING_RIG = registerTieredMultis(REGISTRATE, + public static final MachineEntry[] FLUID_DRILLING_RIG = registerTieredMultis( + REGISTRATE, "fluid_drilling_rig", FluidDrillMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) .langValue("%s Fluid Drilling Rig %s".formatted(VLVH[tier], VLVT[tier])) @@ -612,7 +619,7 @@ public class GTMultiMachines { .slice("XXX", "#F#", "#F#", "#F#", "###", "###", "###") .slice("XXX", "FCF", "FCF", "FCF", "#F#", "#F#", "#F#") .slice("XSX", "#F#", "#F#", "#F#", "###", "###", "###") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(FluidDrillMachine.getCasingState(tier)).setMinGlobalLimited(3) .and(abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1) .setMaxGlobalLimited(2)) @@ -626,7 +633,8 @@ public class GTMultiMachines { .register(), MV, HV, EV); - public static final MultiblockMachineDefinition[] LARGE_MINER = registerTieredMultis(REGISTRATE, "large_miner", + public static final MachineEntry[] LARGE_MINER = registerTieredMultis(REGISTRATE, + "large_miner", (holder, tier) -> new LargeMinerMachine(holder, tier, 64 / tier, 2 * tier - 5, tier, 8 - (tier - 5)), (tier, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) @@ -685,7 +693,7 @@ public class GTMultiMachines { .register(), EV, IV, LuV); - public static final MultiblockMachineDefinition CLEANROOM = REGISTRATE + public static final MachineEntry CLEANROOM = REGISTRATE .multiblock("cleanroom", CleanroomMachine::new) .rotationState(RotationState.NONE) .recipeType(DUMMY_RECIPES) @@ -720,20 +728,21 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/cleanroom")) .register(); - public static final MultiblockMachineDefinition LARGE_COMBUSTION_ENGINE = registerLargeCombustionEngine(REGISTRATE, + public static final MachineEntry LARGE_COMBUSTION_ENGINE = registerLargeCombustionEngine( + REGISTRATE, "large_combustion_engine", EV, CASING_TITANIUM_STABLE, CASING_TITANIUM_GEARBOX, CASING_ENGINE_INTAKE, GTCEu.id("block/casings/solid/machine_casing_stable_titanium"), GTCEu.id("block/multiblock/generator/large_combustion_engine")); - public static final MultiblockMachineDefinition EXTREME_COMBUSTION_ENGINE = registerLargeCombustionEngine( + public static final MachineEntry EXTREME_COMBUSTION_ENGINE = registerLargeCombustionEngine( REGISTRATE, "extreme_combustion_engine", IV, CASING_TUNGSTENSTEEL_ROBUST, CASING_TUNGSTENSTEEL_GEARBOX, CASING_EXTREME_ENGINE_INTAKE, GTCEu.id("block/casings/solid/machine_casing_robust_tungstensteel"), GTCEu.id("block/multiblock/generator/extreme_combustion_engine")); - public static final MultiblockMachineDefinition LARGE_STEAM_TURBINE = registerLargeTurbine(REGISTRATE, + public static final MachineEntry LARGE_STEAM_TURBINE = registerLargeTurbine(REGISTRATE, "steam_large_turbine", HV, GTRecipeTypes.STEAM_TURBINE_FUELS, @@ -742,7 +751,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/generator/large_steam_turbine"), false); - public static final MultiblockMachineDefinition LARGE_GAS_TURBINE = registerLargeTurbine(REGISTRATE, + public static final MachineEntry LARGE_GAS_TURBINE = registerLargeTurbine(REGISTRATE, "gas_large_turbine", EV, GTRecipeTypes.GAS_TURBINE_FUELS, @@ -751,7 +760,8 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/generator/large_gas_turbine"), true); - public static final MultiblockMachineDefinition LARGE_PLASMA_TURBINE = registerLargeTurbine(REGISTRATE, + public static final MachineEntry LARGE_PLASMA_TURBINE = registerLargeTurbine( + REGISTRATE, "plasma_large_turbine", IV, GTRecipeTypes.PLASMA_GENERATOR_FUELS, @@ -760,7 +770,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/generator/large_plasma_turbine"), false); - public static final MultiblockMachineDefinition ACTIVE_TRANSFORMER = REGISTRATE + public static final MachineEntry ACTIVE_TRANSFORMER = REGISTRATE .multiblock("active_transformer", ActiveTransformerMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.DUMMY_RECIPES) @@ -785,7 +795,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/data_bank")) .register(); - public static final MultiblockMachineDefinition POWER_SUBSTATION = REGISTRATE + public static final MachineEntry POWER_SUBSTATION = REGISTRATE .multiblock("power_substation", PowerSubstationMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.DUMMY_RECIPES) @@ -825,7 +835,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/power_substation")) .register(); - public static final MultiblockMachineDefinition CHARCOAL_PILE_IGNITER = REGISTRATE + public static final MachineEntry CHARCOAL_PILE_IGNITER = REGISTRATE .multiblock("charcoal_pile_igniter", CharcoalPileIgniterMachine::new) .rotationState(RotationState.NONE) .recipeType(DUMMY_RECIPES) @@ -841,7 +851,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/charcoal_pile_igniter")) .register(); - public static MultiblockMachineDefinition[] BEDROCK_ORE_MINER = registerTieredMultis(REGISTRATE, + public static final MachineEntry[] BEDROCK_ORE_MINER = registerTieredMultis(REGISTRATE, "bedrock_ore_miner", BedrockOreMinerMachine::new, (tier, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) .langValue("%s Bedrock Ore Miner %s".formatted(VLVH[tier], VLVT[tier])) @@ -862,7 +872,7 @@ public class GTMultiMachines { .slice("XXX", "#F#", "#F#", "#F#", "###", "###", "###") .slice("XXX", "FCF", "FCF", "FCF", "#F#", "#F#", "#F#") .slice("XSX", "#F#", "#F#", "#F#", "###", "###", "###") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(BedrockOreMinerMachine.getCasingState(tier)).setMinGlobalLimited(3) .and(abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1) @@ -878,38 +888,41 @@ public class GTMultiMachines { MV, HV, EV); // Multiblock Tanks - public static final MachineDefinition WOODEN_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, + public static final MachineEntry WOODEN_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, "wooden_tank_valve", "Wooden Tank Valve", false, (builder, overlay) -> builder.sidedWorkableCasingModel(GTCEu.id("block/casings/wood_wall"), overlay)); - public static final MultiblockMachineDefinition WOODEN_MULTIBLOCK_TANK = registerMultiblockTank(REGISTRATE, + public static final MachineEntry WOODEN_MULTIBLOCK_TANK = registerMultiblockTank( + REGISTRATE, "wooden_multiblock_tank", "Wooden Multiblock Tank", 250 * 1000, CASING_WOOD_WALL, WOODEN_TANK_VALVE, new PropertyFluidFilter(340, false, false, false, false), (builder, overlay) -> builder.sidedWorkableCasingModel(GTCEu.id("block/casings/wood_wall"), overlay)); - public static final MachineDefinition BRONZE_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, + public static final MachineEntry BRONZE_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, "bronze_tank_valve", "Bronze Tank Valve", true, (builder, overlay) -> builder .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_bronze_plated_bricks"), overlay)); - public static final MultiblockMachineDefinition BRONZE_MULTIBLOCK_TANK = registerMultiblockTank(REGISTRATE, + public static final MachineEntry BRONZE_MULTIBLOCK_TANK = registerMultiblockTank( + REGISTRATE, "bronze_multiblock_tank", "Bronze Multiblock Tank", 500 * 1000, CASING_BRONZE_BRICKS, BRONZE_TANK_VALVE, new PropertyFluidFilter(1696, true, false, false, false), (builder, overlay) -> builder .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_bronze_plated_bricks"), overlay)); - public static final MachineDefinition STEEL_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, + public static final MachineEntry STEEL_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, "steel_tank_valve", "Steel Tank Valve", true, (builder, overlay) -> builder.workableCasingModel( GTCEu.id("block/casings/solid/machine_casing_solid_steel"), overlay)); - public static final MultiblockMachineDefinition STEEL_MULTIBLOCK_TANK = registerMultiblockTank(REGISTRATE, + public static final MachineEntry STEEL_MULTIBLOCK_TANK = registerMultiblockTank( + REGISTRATE, "steel_multiblock_tank", "Steel Multiblock Tank", 1000 * 1000, CASING_STEEL_SOLID, STEEL_TANK_VALVE, null, (builder, overlay) -> builder.workableCasingModel( GTCEu.id("block/casings/solid/machine_casing_solid_steel"), overlay)); - public static final MultiblockMachineDefinition CENTRAL_MONITOR = REGISTRATE + public static final MachineEntry CENTRAL_MONITOR = REGISTRATE .multiblock("central_monitor", CentralMonitorMachine::new) .rotationState(RotationState.ALL) .recipeType(DUMMY_RECIPES) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java index eefb8023a7a..7d6b04d1170 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java @@ -11,7 +11,8 @@ import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.recipe.RecipeLogic; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; @@ -50,7 +51,7 @@ @ParametersAreNonnullByDefault public class GTResearchMachines { - public static final MultiblockMachineDefinition RESEARCH_STATION = REGISTRATE + public static final MachineEntry RESEARCH_STATION = REGISTRATE .multiblock("research_station", ResearchStationMachine::new) .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.RESEARCH_STATION_RECIPES) @@ -64,7 +65,7 @@ public class GTResearchMachines { .slice(" X ", "XAX", "---", "---", "---", "XAX", " X ") .slice(" X ", "XAX", "-A-", "-H-", "-A-", "XAX", " X ") .slice(" ", "XXX", "---", "---", "---", "XXX", " ") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('X', blocks(COMPUTER_CASING.get())) .where(' ', any()) .where('-', air()) @@ -80,7 +81,8 @@ public class GTResearchMachines { GTCEu.id("block/multiblock/research_station")) .register(); - public static final MachineDefinition OBJECT_HOLDER = REGISTRATE.machine("object_holder", ObjectHolderMachine::new) + public static final MachineEntry OBJECT_HOLDER = REGISTRATE + .machine("object_holder", ObjectHolderMachine::new) .langValue("Object Holder") .tier(ZPM) .rotationState(RotationState.ALL) @@ -91,7 +93,8 @@ public class GTResearchMachines { .andThen((ctx, prov, model) -> model.addReplaceableTextures("bottom", "top", "side"))) .register(); - public static final MultiblockMachineDefinition DATA_BANK = REGISTRATE.multiblock("data_bank", DataBankMachine::new) + public static final MachineEntry DATA_BANK = REGISTRATE + .multiblock("data_bank", DataBankMachine::new) .langValue("Data Bank") .rotationState(RotationState.NON_Y_AXIS) .appearanceBlock(COMPUTER_CASING) @@ -107,7 +110,7 @@ public class GTResearchMachines { .slice("XDDDX", "XDDDX", "XDDDX") .slice("XDDDX", "XAAAX", "XDDDX") .slice("XCCCX", "XCSCX", "XCCCX") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('X', blocks(COMPUTER_HEAT_VENT.get())) .where('D', blocks(COMPUTER_CASING.get()).setMinGlobalLimited(3) .and(abilities(PartAbility.DATA_ACCESS).setPreviewCount(3)) @@ -122,7 +125,7 @@ public class GTResearchMachines { GTCEu.id("block/multiblock/data_bank")) .register(); - public static final MultiblockMachineDefinition NETWORK_SWITCH = REGISTRATE + public static final MachineEntry NETWORK_SWITCH = REGISTRATE .multiblock("network_switch", NetworkSwitchMachine::new) .langValue("Network Switch") .rotationState(RotationState.NON_Y_AXIS) @@ -137,7 +140,7 @@ public class GTResearchMachines { .slice("XXX", "XXX", "XXX") .slice("XXX", "XAX", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('A', blocks(ADVANCED_COMPUTER_CASING.get())) .where('X', blocks(COMPUTER_CASING.get()).setMinGlobalLimited(7) .and(abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2, 1)) @@ -149,7 +152,7 @@ public class GTResearchMachines { GTCEu.id("block/multiblock/network_switch")) .register(); - public static final MultiblockMachineDefinition HIGH_PERFORMANCE_COMPUTING_ARRAY = REGISTRATE + public static final MachineEntry HIGH_PERFORMANCE_COMPUTING_ARRAY = REGISTRATE .multiblock("high_performance_computation_array", HPCAMachine::new) .langValue("High Performance Computation Array (HPCA)") .rotationState(RotationState.NON_Y_AXIS) @@ -164,7 +167,7 @@ public class GTResearchMachines { .slice("VA", "XV", "XV", "XV", "VA") .slice("VA", "XV", "XV", "XV", "VA") .slice("SA", "CC", "CC", "CC", "AA") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('A', blocks(ADVANCED_COMPUTER_CASING.get())) .where('V', blocks(COMPUTER_HEAT_VENT.get())) .where('X', abilities(PartAbility.HPCA_COMPONENT)) @@ -182,35 +185,35 @@ public class GTResearchMachines { // ******** MULTIBLOCK PARTS ********// //////////////////////////////////////////// - public static final MachineDefinition COMPUTATION_HATCH_TRANSMITTER = registerDataHatch( + public static final MachineEntry COMPUTATION_HATCH_TRANSMITTER = registerDataHatch( "computation_transmitter_hatch", "Computation Data Transmission Hatch", ZPM, (holder) -> new OpticalComputationHatchMachine(holder, true), "computation_data_hatch", PartAbility.COMPUTATION_DATA_TRANSMISSION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition COMPUTATION_HATCH_RECEIVER = registerDataHatch( + public static final MachineEntry COMPUTATION_HATCH_RECEIVER = registerDataHatch( "computation_receiver_hatch", "Computation Data Reception Hatch", ZPM, (holder) -> new OpticalComputationHatchMachine(holder, false), "computation_data_hatch", PartAbility.COMPUTATION_DATA_RECEPTION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition DATA_HATCH_TRANSMITTER = registerDataHatch( + public static final MachineEntry DATA_HATCH_TRANSMITTER = registerDataHatch( "data_transmitter_hatch", "Optical Data Transmission Hatch", LuV, (holder) -> new OpticalDataHatchMachine(holder, true), "optical_data_hatch", PartAbility.OPTICAL_DATA_TRANSMISSION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition DATA_HATCH_RECEIVER = registerDataHatch( + public static final MachineEntry DATA_HATCH_RECEIVER = registerDataHatch( "data_receiver_hatch", "Optical Data Reception Hatch", LuV, (holder) -> new OpticalDataHatchMachine(holder, false), "optical_data_hatch", PartAbility.OPTICAL_DATA_RECEPTION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition BASIC_DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry BASIC_DATA_ACCESS_HATCH = REGISTRATE .machine("basic_data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, HV, false)) .langValue("Basic Data Access Hatch") .tier(HV) @@ -222,7 +225,7 @@ public class GTResearchMachines { .overlayTieredHullModel("data_access_hatch") .register(); - public static final MachineDefinition DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry DATA_ACCESS_HATCH = REGISTRATE .machine("data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, EV, false)) .langValue("Data Access Hatch") .tier(EV) @@ -234,7 +237,7 @@ public class GTResearchMachines { .overlayTieredHullModel("data_access_hatch") .register(); - public static final MachineDefinition ADVANCED_DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry ADVANCED_DATA_ACCESS_HATCH = REGISTRATE .machine("advanced_data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, LuV, false)) .langValue("Advanced Data Access Hatch") .tier(LuV) @@ -246,7 +249,7 @@ public class GTResearchMachines { .overlayTieredHullModel("data_access_hatch") .register(); - public static final MachineDefinition CREATIVE_DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry CREATIVE_DATA_ACCESS_HATCH = REGISTRATE .machine("creative_data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, MAX, true)) .langValue("Creative Data Access Hatch") .tier(MAX) @@ -269,13 +272,13 @@ public class GTResearchMachines { .add(Component.translatable("gtceu.machine.hpca.component_type.damaged") .withStyle(style -> style.withColor(TooltipHelper.BLINKING_ORANGE.getCurrent()))); - public static final MachineDefinition HPCA_EMPTY_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_EMPTY_COMPONENT = registerHPCAPart( "hpca_empty_component", "Empty HPCA Component", GTMachineInstanceFactories.HPCA_EMPTY, "empty", false) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition HPCA_COMPUTATION_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_COMPUTATION_COMPONENT = registerHPCAPart( "hpca_computation_component", "HPCA Computation Component", GTMachineInstanceFactories.HPCA_COMPUTATION, "computation", false) .tooltips( @@ -286,7 +289,7 @@ public class GTResearchMachines { Component.translatable("gtceu.part_sharing.disabled")) .tooltipBuilder(OVERHEAT_TOOLTIPS) .register(); - public static final MachineDefinition HPCA_ADVANCED_COMPUTATION_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_ADVANCED_COMPUTATION_COMPONENT = registerHPCAPart( "hpca_advanced_computation_component", "HPCA Advanced Computation Component", GTMachineInstanceFactories.HPCA_COMPUTATION_ADVANCED, "advanced_computation", true) .tooltips( @@ -297,14 +300,14 @@ public class GTResearchMachines { Component.translatable("gtceu.part_sharing.disabled")) .tooltipBuilder(OVERHEAT_TOOLTIPS) .register(); - public static final MachineDefinition HPCA_HEAT_SINK_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_HEAT_SINK_COMPONENT = registerHPCAPart( "hpca_heat_sink_component", "HPCA Heat Sink Component", GTMachineInstanceFactories.HPCA_HEAT_SINK, "heat_sink", false) .tooltips(Component.translatable("gtceu.machine.hpca.component_type.cooler_passive"), Component.translatable("gtceu.machine.hpca.component_type.cooler_cooling", 1), Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition HPCA_ACTIVE_COOLER_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_ACTIVE_COOLER_COMPONENT = registerHPCAPart( "hpca_active_cooler_component", "HPCA Active Cooling Component", GTMachineInstanceFactories.HPCA_COOLER_ADVANCED, "active_cooler", true) .tooltips(Component.translatable("gtceu.machine.hpca.component_general.max_eut", GTValues.VA[GTValues.IV]), @@ -314,7 +317,7 @@ public class GTResearchMachines { Component.translatable("gtceu.machine.hpca.component_type.cooler_cooling", 2), Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition HPCA_BRIDGE_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_BRIDGE_COMPONENT = registerHPCAPart( "hpca_bridge_component", "HPCA Bridge Component", GTMachineInstanceFactories.HPCA_BRIDGE, "bridge", false) .tooltips(Component.translatable("gtceu.machine.hpca.component_type.bridge"), diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java index 2116db238e0..b5f6e5d5961 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java @@ -7,7 +7,7 @@ import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.trait.recipe.RecipeLogic; import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.client.model.machine.overlays.EnergyIOOverlay; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java index bc7be737437..6b45f55e6f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java @@ -8,6 +8,7 @@ import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.crafting.Ingredient; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; @@ -16,7 +17,7 @@ public class GTArmorMaterials { - public static final DeferredRegister ARMOR_MATERIALS = DeferredRegister + private static final DeferredRegister ARMOR_MATERIALS = DeferredRegister .create(BuiltInRegistries.ARMOR_MATERIAL, GTCEu.MOD_ID); public static final List BLANK_LAYERS = List.of(new ArmorMaterial.Layer(GTCEu.id("armor"))); @@ -58,4 +59,8 @@ public class GTArmorMaterials { map.put(ArmorItem.Type.CHESTPLATE, 6); map.put(ArmorItem.Type.HELMET, 2); }), 10, SoundEvents.ARMOR_EQUIP_GENERIC, () -> Ingredient.EMPTY, BLANK_LAYERS, 0.0F, 0.0F)); + + public static void init(IEventBus modBus) { + ARMOR_MATERIALS.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java index 4b24296e47b..9ba0c15037e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java @@ -4,10 +4,13 @@ import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.capability.MedicalConditionTracker; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; @@ -18,10 +21,7 @@ import org.jetbrains.annotations.Nullable; -import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; /** * Defines an antidote for a hazard (e.g. poisoning) @@ -30,12 +30,12 @@ * @param removePercent how many 'counts' should be removed from the chosen condition(s), * as a percentage of the current 'counts' in the range [0, 100]. -1 for all. */ -public record AntidoteBehavior(Set types, int removePercent) +public record AntidoteBehavior(HolderSet types, int removePercent) implements IInteractionItem, IAddInformation { - public AntidoteBehavior(int removePercent, MedicalCondition... types) { - this(new HashSet<>(), removePercent); - this.types.addAll(Arrays.asList(types)); + @SafeVarargs + public AntidoteBehavior(int removePercent, Holder... types) { + this(HolderSet.direct(types), removePercent); } @Override @@ -53,7 +53,7 @@ public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livi if (condition == null) { continue; } - if (!this.types.contains(condition)) { + if (!this.types.contains(GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition))) { continue; } if (removePercent == -1) { @@ -76,7 +76,7 @@ public void appendHoverText(ItemStack stack, @Nullable Item.TooltipContext conte if (GTUtil.isShiftDown()) { tooltipComponents.add(Component.translatable("tooltip.gtceu.antidote.description_shift")); for (var type : types) { - tooltipComponents.add(type.getAffectedName()); + tooltipComponents.add(type.value().getAffectedName()); } if (removePercent == -1) { tooltipComponents diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java index 636e62d8d07..a27db580019 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java @@ -183,7 +183,7 @@ public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext contex if (first == null || !handleSpecialBlockEntities(first, maxBlocksToRecolor, context)) { handleBlocks(pos, maxBlocksToRecolor, context); } - GTSoundEntries.SPRAY_CAN_TOOL.play(level, null, player.position(), 1.0f, 1.0f); + GTSoundEntries.SPRAY_CAN_TOOL.value().play(level, null, player.position(), 1.0f, 1.0f); return InteractionResult.SUCCESS; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java index e4e183164e2..ddde69eb088 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.item.component.IItemComponent; import com.gregtechceu.gtceu.common.data.item.GTItemAbilities; +import net.minecraft.core.Holder; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.Item; @@ -19,7 +20,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Predicate; -public record CoverPlaceBehavior(CoverDefinition coverDefinition) implements IInteractionItem { +public record CoverPlaceBehavior(Holder coverDefinition) implements IInteractionItem { @Override public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext context) { @@ -31,9 +32,10 @@ public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext contex if (coverable != null) { var coverSide = ICoverable.rayTraceCoverableSide(coverable, player); if (coverSide != null && coverable.getCoverAtSide(coverSide) == null && - coverable.canPlaceCoverOnSide(coverDefinition, coverSide)) { + coverable.canPlaceCoverOnSide(coverDefinition.value(), coverSide)) { if (player instanceof ServerPlayer serverPlayer) { - boolean result = coverable.placeCoverOnSide(coverSide, itemStack, coverDefinition, serverPlayer); + boolean result = coverable.placeCoverOnSide(coverSide, itemStack, coverDefinition.value(), + serverPlayer); if (result && !player.isCreative()) { itemStack.shrink(1); } @@ -50,8 +52,8 @@ public static boolean isCoverBehaviorItem(ItemStack itemStack, @Nullable Boolean Item item = itemStack.getItem(); if (item instanceof IComponentItem componentItem) { for (IItemComponent component : componentItem.getComponents()) { - if (component instanceof CoverPlaceBehavior(CoverDefinition definition)) { - if (canPlaceCover == null || canPlaceCover.test(definition)) { + if (component instanceof CoverPlaceBehavior(Holder definition)) { + if (canPlaceCover == null || canPlaceCover.test(definition.value())) { return true; } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java index efedb320f21..62491f41fdb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java @@ -108,7 +108,7 @@ public InteractionResult useOn(UseOnContext context) { player.sendSystemMessage(line); } - GTSoundEntries.PORTABLE_SCANNER.play(level, null, player.position(), 1.0f, 1.0f); + GTSoundEntries.PORTABLE_SCANNER.value().play(level, null, player.position(), 1.0f, 1.0f); return InteractionResult.CONSUME; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java index afaced1e396..03a97c2e473 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java @@ -122,7 +122,7 @@ public static List onHarvestDrops(Player player, ItemStack tool, Serv ToolBehaviors behaviorTag = ToolHelper.getBehaviorsComponent(tool); Block block = state.getBlock(); - if (!isSilkTouch && state.is(BlockTags.ICE) && behaviorTag.hasBehavior(GTToolBehaviors.HARVEST_ICE)) { + if (!isSilkTouch && state.is(BlockTags.ICE) && behaviorTag.hasBehavior(GTToolBehaviors.HARVEST_ICE.value())) { Item iceBlock = block.asItem(); if (drops.stream().noneMatch(drop -> drop.getItem() == iceBlock)) { drops.add(new ItemStack(iceBlock)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java index df80eddfc4d..cf8ca55567c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java @@ -134,6 +134,6 @@ public ModularPanel buildUI(PlayerInventoryGuiData data, PanelSyncManager @Override public ToolBehaviorType getType() { - return GTToolBehaviors.AOE_CONFIG_UI; + return GTToolBehaviors.AOE_CONFIG_UI.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java index ab75e841ccd..77dda604c48 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java @@ -99,7 +99,7 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.BLOCK_ROTATING; + return GTToolBehaviors.BLOCK_ROTATING.value(); } public static BlockHitResult retraceBlock(BlockGetter level, Player player, BlockPos pos) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java index 3e2ceef0cdc..7ae91132479 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java @@ -32,7 +32,7 @@ public boolean canDisableShield(ItemStack stack, ItemStack shield, LivingEntity @Override public ToolBehaviorType getType() { - return GTToolBehaviors.DISABLE_SHIELD; + return GTToolBehaviors.DISABLE_SHIELD.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java index 26bd54b44e0..d0335aa33c5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java @@ -166,7 +166,7 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.ENTITY_DAMAGE; + return GTToolBehaviors.ENTITY_DAMAGE.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java index 612f85d1739..6b0c7cfe85d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java @@ -116,6 +116,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.PATH; + return GTToolBehaviors.PATH.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java index 6fa8a524cd2..62bf6e05bc3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java @@ -122,6 +122,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.HARVEST_CROPS; + return GTToolBehaviors.HARVEST_CROPS.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java index 824ed35ecb1..de3b2511c0c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java @@ -31,7 +31,7 @@ protected HarvestIceBehavior() {/**/} @Override public ToolBehaviorType getType() { - return GTToolBehaviors.HARVEST_ICE; + return GTToolBehaviors.HARVEST_ICE.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java index c7e08e14d65..c9a74de50f9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java @@ -116,6 +116,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.HOE_GROUND; + return GTToolBehaviors.HOE_GROUND.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java index 2e57b597a89..8a085d8e4d2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java @@ -105,6 +105,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.STRIP_LOG; + return GTToolBehaviors.STRIP_LOG.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java index dc98cea1198..8a03164b6eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java @@ -85,7 +85,7 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.PLUNGER; + return GTToolBehaviors.PLUNGER.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java index 53e4c1600f6..761f4e663e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java @@ -111,6 +111,6 @@ private static List getSurroundingBlocks(Direction dir) { @Override public ToolBehaviorType getType() { - return GTToolBehaviors.PROSPECTING; + return GTToolBehaviors.PROSPECTING.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java index 43dbaada20d..91a6678772a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java @@ -63,6 +63,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.ROTATE_RAIL; + return GTToolBehaviors.ROTATE_RAIL.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java index f85a9017951..8570a2e72d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java @@ -106,6 +106,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.SCRAPE; + return GTToolBehaviors.SCRAPE.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java index e6f6f13edb4..c0b59f69e25 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java @@ -80,7 +80,7 @@ public boolean canPerformAction(ItemStack stack, ItemAbility action) { .forEach(stack -> player.getInventory().placeItemBackInInventory(stack)); state.spawnAfterBreak(serverLevel, pos, ItemStack.EMPTY, true); world.destroyBlock(pos, false); - GTSoundEntries.WRENCH_TOOL.playOnServer(serverLevel, pos, 1, GTValues.RNG.nextFloat() * .5f + .5f); + GTSoundEntries.WRENCH_TOOL.value().playOnServer(serverLevel, pos, 1, GTValues.RNG.nextFloat() * .5f + .5f); return InteractionResult.SUCCESS; } @@ -110,7 +110,7 @@ public boolean canPerformAction(ItemStack stack, ItemAbility action) { @Override public ToolBehaviorType getType() { - return GTToolBehaviors.MODE_SWITCH; + return GTToolBehaviors.MODE_SWITCH.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java index d94570f790d..2d2a6d450a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java @@ -140,7 +140,7 @@ private static boolean checkAndPlaceTorch(UseOnContext context, ItemStack slotSt @Override public ToolBehaviorType getType() { - return GTToolBehaviors.TORCH_PLACE; + return GTToolBehaviors.TORCH_PLACE.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java index a8fdbbdad65..9e459e42123 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java @@ -48,7 +48,7 @@ protected TreeFellingBehavior(boolean enabled) { @Override public ToolBehaviorType getType() { - return GTToolBehaviors.TREE_FELLING; + return GTToolBehaviors.TREE_FELLING.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java index 92d6d391c46..b527e14e36c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java @@ -108,6 +108,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.WAX_OFF; + return GTToolBehaviors.WAX_OFF.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java index b643edb2068..7f56228584f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java @@ -268,7 +268,7 @@ public IBlockPattern getDefaultStructurePattern() { return MultiblockPatternBuilder.start() .slice(slice) .where('B', getMultiPredicate()) - .where('C', Predicates.controller(Predicates.blocks(this.getDefinition().get()))) + .where('C', Predicates.controller(this.getDefinition())) .build(); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java index dc6fc000ccf..e95592bca86 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java @@ -136,9 +136,9 @@ public boolean swapIO() { MachineDefinition newDefinition = null; if (io == IO.IN) { - newDefinition = GTMachines.DUAL_EXPORT_HATCH[this.getTier()]; + newDefinition = GTMachines.DUAL_EXPORT_HATCH[this.getTier()].value(); } else if (io == IO.OUT) { - newDefinition = GTMachines.DUAL_IMPORT_HATCH[this.getTier()]; + newDefinition = GTMachines.DUAL_IMPORT_HATCH[this.getTier()].value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index bcf468dc184..2ff4534f9b4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -204,13 +204,13 @@ public boolean swapIO() { MachineDefinition newDefinition = null; if (io == IO.IN) { - if (this.slots == 1) newDefinition = GTMachines.FLUID_EXPORT_HATCH[this.getTier()]; - else if (this.slots == 4) newDefinition = GTMachines.FLUID_EXPORT_HATCH_4X[this.getTier()]; - else if (this.slots == 9) newDefinition = GTMachines.FLUID_EXPORT_HATCH_9X[this.getTier()]; + if (this.slots == 1) newDefinition = GTMachines.FLUID_EXPORT_HATCH[this.getTier()].value(); + else if (this.slots == 4) newDefinition = GTMachines.FLUID_EXPORT_HATCH_4X[this.getTier()].value(); + else if (this.slots == 9) newDefinition = GTMachines.FLUID_EXPORT_HATCH_9X[this.getTier()].value(); } else if (io == IO.OUT) { - if (this.slots == 1) newDefinition = GTMachines.FLUID_IMPORT_HATCH[this.getTier()]; - else if (this.slots == 4) newDefinition = GTMachines.FLUID_IMPORT_HATCH_4X[this.getTier()]; - else if (this.slots == 9) newDefinition = GTMachines.FLUID_IMPORT_HATCH_9X[this.getTier()]; + if (this.slots == 1) newDefinition = GTMachines.FLUID_IMPORT_HATCH[this.getTier()].value(); + else if (this.slots == 4) newDefinition = GTMachines.FLUID_IMPORT_HATCH_4X[this.getTier()].value(); + else if (this.slots == 9) newDefinition = GTMachines.FLUID_IMPORT_HATCH_9X[this.getTier()].value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index 3fb59e7d275..5f63ddd168a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -221,9 +221,9 @@ public boolean swapIO() { BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { - newDefinition = GTMachines.ITEM_EXPORT_BUS[this.getTier()]; + newDefinition = GTMachines.ITEM_EXPORT_BUS[this.getTier()].value(); } else if (io == IO.OUT) { - newDefinition = GTMachines.ITEM_IMPORT_BUS[this.getTier()]; + newDefinition = GTMachines.ITEM_IMPORT_BUS[this.getTier()].value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java index c0075572bc8..0bfd5f89402 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java @@ -20,9 +20,9 @@ public boolean swapIO() { BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { - newDefinition = GTMachines.STEAM_EXPORT_BUS; + newDefinition = GTMachines.STEAM_EXPORT_BUS.value(); } else if (io == IO.OUT) { - newDefinition = GTMachines.STEAM_IMPORT_BUS; + newDefinition = GTMachines.STEAM_IMPORT_BUS.value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java index 8037624b80f..46846ccf403 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; import com.gregtechceu.gtceu.config.ConfigHolder; +import net.minecraft.core.Holder; import net.minecraft.server.level.ServerLevel; import lombok.Getter; @@ -36,6 +37,13 @@ public EnvironmentalHazardEmitterTrait(MedicalCondition conditionToEmit, this.emissionStrength = emissionStrength; } + public EnvironmentalHazardEmitterTrait(Holder conditionToEmit, + float emissionStrength) { + super(); + this.conditionToEmit = conditionToEmit.value(); + this.emissionStrength = emissionStrength; + } + @Override public void afterWorking() { if (emitHazardOnRecipeFinished) emitHazard(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java b/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java index a617403ec80..a98e66b7267 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java @@ -136,7 +136,7 @@ public ModularPanel buildUIFunction(PosGuiData data, PanelSyncManager syncMan .draggable(true) .padding(5) .excludeAreaInRecipeViewer() - .child(GTMuiWidgets.createTitleBar(GTMultiMachines.CENTRAL_MONITOR, 176)) + .child(GTMuiWidgets.createTitleBar(GTMultiMachines.CENTRAL_MONITOR.value(), 176)) .child(new Flow(GuiAxis.Y) .heightRel(1) .widthRel(1) diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java index ba1bcc3bb7b..56998ae23ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java @@ -91,7 +91,7 @@ public static AdjacentBlockCondition fromTags(TagKey... tags) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.ADJACENT_BLOCK; + return GTRecipeConditions.ADJACENT_BLOCK.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java index f858ba631f5..01973508bed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java @@ -95,7 +95,7 @@ public static AdjacentFluidCondition fromTags(TagKey... tags) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.ADJACENT_FLUID; + return GTRecipeConditions.ADJACENT_FLUID.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java index 616987c7b31..003be22a9f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java @@ -43,7 +43,7 @@ public BiomeCondition(ResourceKey biome) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.BIOME; + return GTRecipeConditions.BIOME.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java index 6a156ad835e..3d31ada848d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java @@ -43,7 +43,7 @@ public BiomeTagCondition(TagKey biome) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.BIOME_TAG; + return GTRecipeConditions.BIOME_TAG.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java index 4bc13e47946..b730126b289 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java @@ -40,7 +40,7 @@ public CleanroomCondition(boolean isReverse, CleanroomType cleanroom) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.CLEANROOM; + return GTRecipeConditions.CLEANROOM.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java index c1305564cd5..8699e286147 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java @@ -28,7 +28,7 @@ public DaytimeCondition(boolean isReverse) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.DAYTIME; + return GTRecipeConditions.DAYTIME.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java index c4a22114968..35029b2615d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java @@ -52,7 +52,7 @@ public DimensionCondition(boolean isReverse, ResourceKey dimension) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.DIMENSION; + return GTRecipeConditions.DIMENSION.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java index 7ab5dd2ae5b..a81317dbc68 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java @@ -37,7 +37,7 @@ public EUToStartCondition(boolean isReverse, long euToStart) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.EU_TO_START; + return GTRecipeConditions.EU_TO_START.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java index c07acb8ba83..00f0fd2dc5b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java @@ -32,7 +32,7 @@ public class EnvironmentalHazardCondition extends RecipeCondition getType() { - return GTRecipeConditions.ENVIRONMENTAL_HAZARD; + return GTRecipeConditions.ENVIRONMENTAL_HAZARD.value(); } @Override @@ -59,7 +59,7 @@ public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic reci } EnvironmentalHazardSavedData savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); var zone = savedData.getZoneByContainedPos(recipeLogic.getMachine().getBlockPos()); - return zone != null && zone.strength() > 0; + return zone != null && zone.strength() > 0 && zone.condition() == condition; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java index 2bcf2a971e5..9680dc9e222 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java @@ -48,7 +48,7 @@ private QuestObject getQuest() { @Override public RecipeConditionType getType() { - return GTRecipeConditions.FTB_QUEST; + return GTRecipeConditions.FTB_QUEST.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java index 90fc53b95e5..19b0e3e6d1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java @@ -41,7 +41,7 @@ public HeraclesQuestCondition(boolean isReverse, String questId) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.HERACLES_QUEST; + return GTRecipeConditions.HERACLES_QUEST.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java index d3342677b10..d37f9601ebe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java @@ -40,7 +40,7 @@ public PositionYCondition(boolean isReverse, int min, int max) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.POSITION_Y; + return GTRecipeConditions.POSITION_Y.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java index e9d86e9b443..ae75168e503 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java @@ -37,7 +37,7 @@ public RainingCondition(float level) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.RAINING; + return GTRecipeConditions.RAINING.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java index 2bd613897ad..9b9e773fdb7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java @@ -40,7 +40,7 @@ public ResearchCondition(boolean isReverse, ResearchData data) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.RESEARCH; + return GTRecipeConditions.RESEARCH.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java index 3986d705c05..3e1bd399a09 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java @@ -39,7 +39,7 @@ public ThunderCondition(float level) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.THUNDER; + return GTRecipeConditions.THUNDER.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java index 27eb62de373..7a0f6ec2786 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java @@ -25,7 +25,7 @@ public VentCondition(boolean isReverse) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.VENT; + return GTRecipeConditions.VENT.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java index e2d9c6e8cd3..d4a03093325 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java @@ -25,7 +25,7 @@ public void beforeTick(CallbackInfo ci) { ItemEntity entity = (ItemEntity) (Object) this; if (GTValues.FOOLS.getAsBoolean() && !gtceu$wasOnGround && entity.onGround() && ChemicalHelper.getPrefix(entity.getItem().getItem()) == TagPrefix.rodLong) { - GTSoundEntries.METAL_PIPE.playFrom(entity, 10, 1); + GTSoundEntries.METAL_PIPE.value().playFrom(entity, 10, 1); } gtceu$wasOnGround = entity.onGround(); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java b/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java index fe5362da09d..77b49af92e1 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java +++ b/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.api.registry.registrate.SoundEntryBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.SoundEntryBuilder; import com.gregtechceu.gtceu.common.data.*; import com.gregtechceu.gtceu.common.data.worldgen.*; import com.gregtechceu.gtceu.data.loot.GTLootModifications; diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java index 7594c4b27be..269d8d4a2ff 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.recipe.ingredient.*; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.common.crafting.IngredientType; import net.neoforged.neoforge.fluids.crafting.FluidIngredientType; import net.neoforged.neoforge.registries.DeferredHolder; @@ -11,9 +12,9 @@ public class GTIngredientTypes { - public static final DeferredRegister> ITEM_INGREDIENT_TYPES = DeferredRegister + private static final DeferredRegister> ITEM_INGREDIENT_TYPES = DeferredRegister .create(NeoForgeRegistries.INGREDIENT_TYPES, GTCEu.MOD_ID); - public static final DeferredRegister> FLUID_INGREDIENT_TYPES = DeferredRegister + private static final DeferredRegister> FLUID_INGREDIENT_TYPES = DeferredRegister .create(NeoForgeRegistries.FLUID_INGREDIENT_TYPES, GTCEu.MOD_ID); public static final DeferredHolder, IngredientType> INT_CIRCUIT_INGREDIENT = ITEM_INGREDIENT_TYPES @@ -33,4 +34,9 @@ public class GTIngredientTypes { public static final DeferredHolder, FluidIngredientType> INT_PROVIDER_FLUID_INGREDIENT = FLUID_INGREDIENT_TYPES .register("int_provider", () -> new FluidIngredientType<>(IntProviderFluidIngredient.CODEC)); + + public static void init(IEventBus modBus) { + ITEM_INGREDIENT_TYPES.register(modBus); + FLUID_INGREDIENT_TYPES.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java index 0b6f154cf2f..17e727b6ed6 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java @@ -29,6 +29,7 @@ import com.gregtechceu.gtceu.utils.ResearchManager; import com.gregtechceu.gtceu.utils.codec.CodecUtils; +import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderSet; import net.minecraft.core.registries.Registries; @@ -302,7 +303,7 @@ public GTRecipeBuilder outputCWU(int cwu) { public GTRecipeBuilder inputItems(Object input) { return switch (input) { - case Item item -> inputItems(item); + case ItemLike item -> inputItems(item); case Supplier supplier when supplier.get() instanceof ItemLike item -> inputItems(item.asItem()); case ItemStack stack -> inputItems(stack); case Ingredient ingredient -> inputItems(ingredient); @@ -326,7 +327,7 @@ public GTRecipeBuilder inputItems(Object input) { public GTRecipeBuilder inputItems(Object input, int count) { return switch (input) { - case Item item -> inputItems(item, count); + case ItemLike item -> inputItems(item, count); case Supplier supplier when supplier.get() instanceof ItemLike item -> inputItems(item.asItem(), count); case ItemStack stack -> inputItems(stack.copyWithCount(count)); case Ingredient ingredient -> inputItems(ingredient, count); @@ -425,22 +426,14 @@ public GTRecipeBuilder inputItems(TagKey tag) { return inputItems(tag, 1); } - public GTRecipeBuilder inputItems(Item input, int amount) { + public GTRecipeBuilder inputItems(ItemLike input, int amount) { return inputItems(new ItemStack(input, amount)); } - public GTRecipeBuilder inputItems(Item input) { + public GTRecipeBuilder inputItems(ItemLike input) { return inputItems(input, 1); } - public GTRecipeBuilder inputItems(Supplier input) { - return inputItems(input.get()); - } - - public GTRecipeBuilder inputItems(Supplier input, int amount) { - return inputItems(input.get(), amount); - } - public GTRecipeBuilder inputItems(TagPrefix orePrefix, Material material) { return inputItems(orePrefix, material, 1); } @@ -524,7 +517,7 @@ public GTRecipeBuilder inputItemsRanged(MachineDefinition machine, IntProvider i public GTRecipeBuilder outputItems(Object output) { return switch (output) { - case Item item -> outputItems(item); + case ItemLike item -> outputItems(item); case Ingredient ingredient -> outputItems(ingredient); case Supplier supplier when supplier.get() instanceof ItemLike item -> outputItems(item.asItem()); case ItemStack stack -> outputItems(stack); @@ -544,7 +537,7 @@ public GTRecipeBuilder outputItems(Object output) { public GTRecipeBuilder outputItems(Object output, int count) { return switch (output) { - case Item item -> outputItems(item, count); + case ItemLike item -> outputItems(item, count); case Ingredient ingredient -> outputItems(ingredient, count); case Supplier supplier when supplier.get() instanceof ItemLike item -> outputItems(item.asItem(), count); case ItemStack stack -> outputItems(stack.copyWithCount(count)); @@ -590,22 +583,14 @@ public GTRecipeBuilder outputItems(ItemStack... outputs) { return output(ItemRecipeCapability.CAP, ingredients.toArray(SizedIngredient[]::new)); } - public GTRecipeBuilder outputItems(Item output, int amount) { + public GTRecipeBuilder outputItems(ItemLike output, int amount) { return outputItems(new ItemStack(output, amount)); } - public GTRecipeBuilder outputItems(Item output) { + public GTRecipeBuilder outputItems(ItemLike output) { return outputItems(new ItemStack(output)); } - public GTRecipeBuilder outputItems(Supplier input) { - return outputItems(new ItemStack(input.get().asItem())); - } - - public GTRecipeBuilder outputItems(Supplier input, int amount) { - return outputItems(new ItemStack(input.get().asItem(), amount)); - } - public GTRecipeBuilder outputItems(TagPrefix orePrefix, Material material) { return outputItems(orePrefix, material, 1); } @@ -1229,6 +1214,14 @@ public GTRecipeBuilder environmentalHazard(MedicalCondition condition) { return environmentalHazard(condition, false); } + public GTRecipeBuilder environmentalHazard(Holder condition, boolean reverse) { + return addCondition(new EnvironmentalHazardCondition(condition.value()).setReverse(reverse)); + } + + public GTRecipeBuilder environmentalHazard(Holder condition) { + return environmentalHazard(condition, false); + } + public final GTRecipeBuilder adjacentFluids(Fluid... fluids) { return adjacentFluids(false, fluids); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java index acbd0ef3d7b..b0a16d89c2e 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialStack; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.block.LampBlock; import com.gregtechceu.gtceu.common.block.StoneBlockType; import com.gregtechceu.gtceu.common.data.GTBlocks; @@ -1471,28 +1472,28 @@ private static void registerMossRecipe(RecipeOutput provider, List re } private static void registerNBTRemoval(RecipeOutput provider) { - for (MachineDefinition chest : GTMachines.SUPER_CHEST) { + for (MachineEntry chest : GTMachines.SUPER_CHEST) { if (chest != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "super_chest_nbt_" + chest.getTier(), chest.asStack(), chest.asStack()); } } - for (MachineDefinition tank : GTMachines.SUPER_TANK) { + for (MachineEntry tank : GTMachines.SUPER_TANK) { if (tank != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "super_tank_nbt_" + tank.getTier(), tank.asStack(), tank.asStack()); } } - for (MachineDefinition chest : GTMachines.QUANTUM_CHEST) { + for (MachineEntry chest : GTMachines.QUANTUM_CHEST) { if (chest != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "quantum_chest_nbt_" + chest.getTier(), chest.asStack(), chest.asStack()); } } - for (MachineDefinition tank : GTMachines.QUANTUM_TANK) { + for (MachineEntry tank : GTMachines.QUANTUM_TANK) { if (tank != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "quantum_tank_nbt_" + tank.getTier(), tank.asStack(), tank.asStack()); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java index 0e0cf5e26f3..8d648f7310a 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMachines; @@ -18,6 +19,7 @@ import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; +import net.minecraft.core.Holder; import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.Item; @@ -32,6 +34,7 @@ import java.util.Arrays; import java.util.Locale; +import java.util.Objects; import static com.gregtechceu.gtceu.api.GTValues.*; import static com.gregtechceu.gtceu.data.recipe.GTCraftingComponents.*; @@ -1241,6 +1244,21 @@ public static void registerMachineRecipe(RecipeOutput provider, MachineDefinitio registerMachineRecipe(provider, true, machines, recipe); } + public static void registerMachineRecipe(RecipeOutput provider, boolean setMaterialInfoData, + MachineEntry[] machines, Object... recipe) { + registerMachineRecipe(provider, setMaterialInfoData, + Arrays.stream(machines).filter(Objects::nonNull).map(Holder::value).toArray(MachineDefinition[]::new), + recipe); + } + + public static void registerMachineRecipe(RecipeOutput provider, + MachineEntry[] machines, + Object... recipe) { + registerMachineRecipe(provider, true, + Arrays.stream(machines).filter(Objects::nonNull).map(Holder::value).toArray(MachineDefinition[]::new), + recipe); + } + private static Object[] prepareRecipe(int tier, Object... recipe) { for (int i = 3; i < recipe.length; i++) { if (recipe[i] instanceof CraftingComponent) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java index 3b307662ba7..d878ff3421b 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; import com.gregtechceu.gtceu.common.data.machines.GTMultiMachines; import com.gregtechceu.gtceu.data.recipe.CustomTags; @@ -414,7 +415,7 @@ public static void init(RecipeOutput provider) { var hatch = ENERGY_INPUT_HATCH_16A[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = HI_AMP_TRANSFORMER_4A[tier - 1]; } else { @@ -436,7 +437,7 @@ public static void init(RecipeOutput provider) { var hatch = SUBSTATION_ENERGY_INPUT_HATCH[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = POWER_TRANSFORMER[tier - 1]; } else { @@ -472,7 +473,7 @@ public static void init(RecipeOutput provider) { var hatch = ENERGY_OUTPUT_HATCH_16A[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = HI_AMP_TRANSFORMER_4A[tier - 1]; } else { @@ -494,7 +495,7 @@ public static void init(RecipeOutput provider) { var hatch = SUBSTATION_ENERGY_OUTPUT_HATCH[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = POWER_TRANSFORMER[tier - 1]; } else { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java index 07e32d30178..a5a244dc922 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java @@ -4,6 +4,8 @@ import com.gregtechceu.gtceu.api.cover.filter.Filters; import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.*; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.utils.GTStringUtils; import net.minecraft.MethodsReturnNonnullByDefault; @@ -103,8 +105,12 @@ private static Vector3i getSpatialSize(IGrid grid) { return new Vector3i(tmp.getX(), tmp.getY(), tmp.getZ()).absolute(); } + private static void registerPlaceholder(Placeholder placeholder) { + GTRegistration.REGISTRATE.simple(placeholder.getName(), GTRegistries.Keys.PLACEHOLDER, () -> placeholder); + } + public static void init() { - PlaceholderHandler.addPlaceholder(new Placeholder("ae2itemCount") { + registerPlaceholder(new Placeholder("ae2_item_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -127,7 +133,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, throw new InvalidArgsException(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2fluidCount") { + registerPlaceholder(new Placeholder("ae2_fluid_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -139,7 +145,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, throw new WrongNumberOfArgsException(1, args.size()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2power") { + registerPlaceholder(new Placeholder("ae2_power") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -149,7 +155,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(grid.getEnergyService().getStoredPower()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2maxPower") { + registerPlaceholder(new Placeholder("ae2_max_power") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -159,7 +165,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(grid.getEnergyService().getMaxStoredPower()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2powerUsage") { + registerPlaceholder(new Placeholder("ae2_power_usage") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -169,7 +175,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(grid.getEnergyService().getAvgPowerUsage()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2spatial") { + registerPlaceholder(new Placeholder("ae2_spatial") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -189,7 +195,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } else throw new InvalidArgsException(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2crafting") { + registerPlaceholder(new Placeholder("ae2_crafting") { @Override public MultiLineComponent apply(PlaceholderContext ctx, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 30c210e0c09..ea6d4df7757 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -880,7 +880,7 @@ public PatternContainerGroup getTerminalGroup() { } else { return new PatternContainerGroup( AEItemKey.of(GTAEMachines.ME_PATTERN_BUFFER.getItem()), - GTAEMachines.ME_PATTERN_BUFFER.get().getDefinition().getItem().getDescription(), + GTAEMachines.ME_PATTERN_BUFFER.getItem().getDescription(), Collections.emptyList()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java index 05bdc33d6ef..548dba76b40 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java @@ -4,6 +4,8 @@ import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.NotSupportedException; import com.gregtechceu.gtceu.api.placeholder.exceptions.PlaceholderException; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.integration.cctweaked.peripherals.*; import dan200.computercraft.api.ComputerCraftAPI; @@ -28,17 +30,19 @@ public static void init() { } public static void initPlaceholders() { - PlaceholderHandler.addPlaceholder(new Placeholder("bufferText") { + GTRegistration.REGISTRATE.simple("buffer_text", GTRegistries.Keys.PLACEHOLDER, + () -> new Placeholder("buffer_text") { - @Override - public MultiLineComponent apply(PlaceholderContext ctx, - List args) throws PlaceholderException { - PlaceholderUtils.checkArgs(args, 1); - if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) throw new NotSupportedException(); - int i = PlaceholderUtils.toInt(args.get(0)); - PlaceholderUtils.checkRange("line number", 1, 100, i); - return MultiLineComponent.of(cover.getComputerCraftTextBuffer().get(i - 1)); - } - }); + @Override + public MultiLineComponent apply(PlaceholderContext ctx, + List args) throws PlaceholderException { + PlaceholderUtils.checkArgs(args, 1); + if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) + throw new NotSupportedException(); + int i = PlaceholderUtils.toInt(args.get(0)); + PlaceholderUtils.checkRange("line number", 1, 100, i); + return MultiLineComponent.of(cover.getComputerCraftTextBuffer().get(i - 1)); + } + }); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java b/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java index 5cb90e50d18..6438bd3c39c 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java @@ -2,6 +2,8 @@ import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.*; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.utils.GTStringUtils; import net.createmod.catnip.data.Couple; @@ -36,7 +38,7 @@ public static void init() { } public static void initPlaceholders() { - PlaceholderHandler.addPlaceholder(new Placeholder("redstone") { + GTRegistration.REGISTRATE.simple("redstone", GTRegistries.Keys.PLACEHOLDER, () -> new Placeholder("redstone") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -44,18 +46,20 @@ public MultiLineComponent apply(PlaceholderContext ctx, return processRedstonePlaceholder(ctx, args); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("displayTarget") { - - @Override - public MultiLineComponent apply(PlaceholderContext ctx, - List args) throws PlaceholderException { - PlaceholderUtils.checkArgs(args, 1); - if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) throw new NotSupportedException(); - int i = PlaceholderUtils.toInt(args.get(0)); - PlaceholderUtils.checkRange("line number", 1, 100, i); - return MultiLineComponent.of(cover.getCreateDisplayTargetBuffer().get(i - 1)); - } - }); + GTRegistration.REGISTRATE.simple("display_target", GTRegistries.Keys.PLACEHOLDER, + () -> new Placeholder("display_target") { + + @Override + public MultiLineComponent apply(PlaceholderContext ctx, + List args) throws PlaceholderException { + PlaceholderUtils.checkArgs(args, 1); + if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) + throw new NotSupportedException(); + int i = PlaceholderUtils.toInt(args.get(0)); + PlaceholderUtils.checkRange("line number", 1, 100, i); + return MultiLineComponent.of(cover.getCreateDisplayTargetBuffer().get(i - 1)); + } + }); } private static int getRedstoneLinkPower(PlaceholderContext ctx, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java index 9283b6752ff..1513971a428 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java @@ -25,7 +25,6 @@ public interface GTCEuStartupEvents { EventGroup GROUP = EventGroup.of("GTCEuStartupEvents"); EventHandler MATERIAL_ICON_INFO = GROUP.startup("materialIconInfo", () -> MaterialIconInfoEventJS.class); - EventHandler WORLD_GEN_LAYERS = GROUP.startup("worldGenLayers", () -> WorldGenLayerEventJS.class); TargetedEventHandler>> REGISTRY = GROUP.startup("registry", () -> GTRegistryKubeEvent.class) .requiredTarget(REGISTRY_ASSUME_GT); 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 7a67fc2a5d8..7d552768575 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -86,10 +86,7 @@ import com.gregtechceu.gtceu.integration.kjs.builders.material.TagPrefixBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeCategoryBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeTypeBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockFluidDefinitionBuilderJS; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockOreDefinitionBuilderJS; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.DimensionMarkerBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.OreVeinDefinitionBuilderJS; +import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.*; import com.gregtechceu.gtceu.integration.kjs.helpers.GTResourceLocation; import com.gregtechceu.gtceu.integration.kjs.helpers.MachineConstructors; import com.gregtechceu.gtceu.integration.kjs.helpers.MachineModifiers; @@ -171,6 +168,9 @@ public void registerBuilderTypes(BuilderTypeRegistry registry) { reg.add(GTCEu.id("coil"), CoilBlockBuilder.class, CoilBlockBuilder::new); }); + registry.addDefault(GTRegistries.Keys.WORLD_GEN_LAYER, WorldGenLayerBuilderJS.class, + WorldGenLayerBuilderJS::new); + registry.addDefault(GTRegistries.Keys.ORE_VEIN, OreVeinDefinitionBuilderJS.class, OreVeinDefinitionBuilderJS::new); registry.addDefault(GTRegistries.Keys.BEDROCK_FLUID, BedrockFluidDefinitionBuilderJS.class, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java index 11755aee603..b749d1ea63c 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.common.data.models.GTMachineModels; import com.gregtechceu.gtceu.utils.data.RuntimeBlockstateProvider; @@ -18,15 +18,16 @@ public interface IMachineBuilderKJS { default void generateMachineModel(@Nullable MachineBuilder builder, @Nullable MachineDefinition definition) { if (builder == null || definition == null) return; - if (builder.model() == null && builder.blockModel() == null) return; + if (builder.properties().model() == null && builder.properties().blockModel() == null) return; // Fake a data provider for the GT model builders - DataGenContext context = new DataGenContext<>(definition::get, + DataGenContext context = new DataGenContext<>(definition::getBlock, definition.getName(), definition.getId()); - if (builder.blockModel() != null) { - builder.blockModel().accept(context, RuntimeBlockstateProvider.INSTANCE); + if (builder.properties().blockModel() != null) { + builder.properties().blockModel().accept(context, RuntimeBlockstateProvider.INSTANCE); } else { - GTMachineModels.createMachineModel(builder.model()).accept(context, RuntimeBlockstateProvider.INSTANCE); + GTMachineModels.createMachineModel(builder.properties().model()).accept(context, + RuntimeBlockstateProvider.INSTANCE); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java index 2b20e6ccc80..365dd9c07c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java @@ -8,7 +8,8 @@ import com.gregtechceu.gtceu.api.machine.steam.SimpleSteamMachine; import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.resources.ResourceLocation; @@ -20,6 +21,8 @@ import lombok.experimental.Accessors; import org.jetbrains.annotations.Nullable; +import java.util.Objects; + @Accessors(fluent = true, chain = true) public class KJSSteamMachineBuilder extends BuilderBase implements IMachineBuilderKJS { @@ -30,9 +33,9 @@ public class KJSSteamMachineBuilder extends BuilderBase imple @Setter public transient SteamDefinitionFunction definition = (isHP, def) -> def.tier(isHP ? 1 : 0); - private @Nullable MachineBuilder lowPressureBuilder = null, highPressureBuilder = null; + private @Nullable MachineBuilder lowPressureBuilder = null, highPressureBuilder = null; @Nullable - private MachineDefinition lpObject = null, hpObject = null; + private MachineEntry lpObject = null, hpObject = null; public KJSSteamMachineBuilder(ResourceLocation id) { super(id); @@ -40,8 +43,7 @@ public KJSSteamMachineBuilder(ResourceLocation id) { } @Override - public MachineDefinition createObject() { - MachineDefinition value = null; + public @Nullable MachineDefinition createObject() { if (hasLowPressure) { this.lowPressureBuilder = GTRegistrate.createIgnoringListenerErrors(this.id.getNamespace()) .machine(String.format("lp_%s", this.id.getPath()), @@ -54,7 +56,6 @@ public MachineDefinition createObject() { definition.apply(false, lowPressureBuilder); this.lpObject = lowPressureBuilder.register(); - value = lpObject; } if (hasHighPressure) { @@ -69,16 +70,15 @@ public MachineDefinition createObject() { definition.apply(true, highPressureBuilder); this.hpObject = highPressureBuilder.register(); - if (value == null) value = hpObject; } - return value; + return null; } @Override public void generateMachineModels() { - generateMachineModel(lowPressureBuilder, lpObject); - generateMachineModel(highPressureBuilder, hpObject); + generateMachineModel(lowPressureBuilder, Objects.requireNonNull(lpObject).value()); + generateMachineModel(highPressureBuilder, Objects.requireNonNull(hpObject).value()); } @Override @@ -100,10 +100,10 @@ public String getTranslationKeyGroup() { @Override public void generateLang(LangKubeEvent lang) { if (lpObject != null) { - lang.add(GTCEu.MOD_ID, lpObject.getDescriptionId(), lpObject.getLangValue()); + lang.add(GTCEu.MOD_ID, lpObject.value().getDescriptionId(), lpObject.value().getLangValue()); } if (hpObject != null) { - lang.add(GTCEu.MOD_ID, hpObject.getDescriptionId(), hpObject.getLangValue()); + lang.add(GTCEu.MOD_ID, hpObject.value().getDescriptionId(), hpObject.value().getLangValue()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java index c0368f0d59d..9e609a20a83 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java @@ -7,7 +7,8 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.mui.GTSingleblockMachinePanels; @@ -20,7 +21,6 @@ import it.unimi.dsi.fastutil.ints.Int2IntFunction; import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -29,11 +29,14 @@ import static com.gregtechceu.gtceu.utils.FormattingUtil.toEnglishName; @Accessors(fluent = true, chain = true) -public class KJSTieredMachineBuilder extends BuilderBase<@Nullable MachineDefinition @NotNull []> +public class KJSTieredMachineBuilder extends BuilderBase implements IMachineBuilderKJS { private final MachineBuilder[] builders = new MachineBuilder[TIER_COUNT]; + @SuppressWarnings("unchecked") + public final MachineEntry[] machines = new MachineEntry[TIER_COUNT]; + @Setter public transient int[] tiers = GTMachineUtils.ELECTRIC_TIERS; @Setter @@ -67,14 +70,14 @@ public KJSTieredMachineBuilder(ResourceLocation id, TieredCreationFunction machi @Override public void generateMachineModels() { for (int tier : this.tiers) { - generateMachineModel(this.builders[tier], this.object[tier]); + generateMachineModel(this.builders[tier], this.machines[tier].value()); } } @Override public void generateAssets(KubeAssetGenerator generator) { for (int tier : this.tiers) { - MachineDefinition definition = this.object[tier]; + MachineEntry definition = this.machines[tier]; if (definition == null) continue; final ResourceLocation id = definition.getId(); @@ -86,29 +89,30 @@ public void generateAssets(KubeAssetGenerator generator) { public void generateLang(LangKubeEvent lang) { super.generateLang(lang); for (int tier : this.tiers) { - MachineDefinition def = this.object[tier]; - if (def != null && def.getLangValue() != null) { - lang.add(GTCEu.MOD_ID, def.getDescriptionId(), def.getLangValue()); + MachineEntry definition = this.machines[tier]; + if (definition == null) continue; + if (definition.value().getLangValue() != null) { + lang.add(GTCEu.MOD_ID, definition.value().getDescriptionId(), definition.value().getLangValue()); } } } @Override - public @Nullable MachineDefinition @NotNull [] createObject() { + public @org.jspecify.annotations.Nullable MachineDefinition createObject() { Preconditions.checkNotNull(tiers, "Tiers can't be null!"); Preconditions.checkArgument(tiers.length > 0, "tiers must have at least one tier!"); Preconditions.checkNotNull(machine, "You must set a machine creation function! " + "example: `builder.machine((holder, tier) => new SimpleTieredMachine(holder, tier, t => t * 3200)`"); Preconditions.checkNotNull(definition, "You must set a definition function! " + "See GTMachines for examples"); - @Nullable - MachineDefinition @NotNull [] definitions = new MachineDefinition[TIER_COUNT]; + for (final int tier : tiers) { String tierName = VN[tier].toLowerCase(Locale.ROOT); final Int2IntFunction tankFunction = Objects.requireNonNullElse(tankScalingFunction, GTMachineUtils.defaultTankSizeFunction); - MachineBuilder builder = GTRegistrate.createIgnoringListenerErrors(this.id.getNamespace()) + MachineBuilder builder = GTRegistrate + .createIgnoringListenerErrors(this.id.getNamespace()) .machine(String.format("%s_%s", tierName, this.id.getPath()), holder -> machine.create(holder, tier, tankFunction)); @@ -119,22 +123,22 @@ public void generateLang(LangKubeEvent lang) { } this.definition.apply(tier, builder); - if (builder.recipeTypes().length > 0) { - GTRecipeType recipeType = builder.recipeTypes()[0]; + if (builder.properties().recipeTypes().length > 0) { + GTRecipeType recipeType = builder.properties().recipeTypes()[0]; if (tankScalingFunction != null && addDefaultTooltips) { builder.tooltips( GTMachineUtils.workableTiered(tier, GTValues.V[tier], GTValues.V[tier] * 64, recipeType, tankScalingFunction.applyAsInt(tier), !isGenerator)); } } - if (builder.ui() == null) { + if (builder.properties().ui() == null) { builder.ui(GTSingleblockMachinePanels.GENERAL_MACHINE); } this.builders[tier] = builder; - definitions[tier] = builder.register(); + machines[tier] = builder.register(); } - return definitions; + return null; } @FunctionalInterface @@ -143,12 +147,6 @@ public interface TieredCreationFunction { MetaMachine create(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScaling); } - @FunctionalInterface - public interface CreationFunction { - - T create(BlockEntityCreationInfo info); - } - @FunctionalInterface public interface DefinitionFunction { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java index f9eafc7f271..33e1a923d1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import net.minecraft.resources.ResourceLocation; @@ -17,7 +17,6 @@ import dev.latvian.mods.kubejs.registry.BuilderBase; import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Locale; @@ -25,11 +24,12 @@ import static com.gregtechceu.gtceu.api.GTValues.*; @Accessors(fluent = true, chain = true) -public class KJSTieredMultiblockBuilder extends BuilderBase<@Nullable MultiblockMachineDefinition @NotNull []> +public class KJSTieredMultiblockBuilder extends BuilderBase implements IMachineBuilderKJS { - private final MultiblockMachineBuilder[] builders = new MultiblockMachineBuilder[TIER_COUNT]; - + private final MultiblockMachineBuilder[] builders = new MultiblockMachineBuilder[TIER_COUNT]; + @SuppressWarnings("unchecked") + private final MachineEntry[] machines = new MachineEntry[TIER_COUNT]; @Setter public transient int[] tiers = GTMachineUtils.ELECTRIC_TIERS; @Setter @@ -51,14 +51,14 @@ public KJSTieredMultiblockBuilder(ResourceLocation id, TieredCreationFunction ma @Override public void generateMachineModels() { for (int tier : this.tiers) { - generateMachineModel(this.builders[tier], this.object[tier]); + generateMachineModel(this.builders[tier], this.machines[tier].value()); } } @Override public void generateAssets(KubeAssetGenerator generator) { for (int tier : this.tiers) { - MachineDefinition definition = this.object[tier]; + MachineEntry definition = this.machines[tier]; if (definition == null) continue; final ResourceLocation id = definition.getId(); @@ -74,25 +74,24 @@ public String getTranslationKeyGroup() { @Override public void generateLang(LangKubeEvent lang) { for (int tier : tiers) { - MachineDefinition def = object[tier]; - if (def != null && def.getLangValue() != null) { - lang.add(def.getId().getNamespace(), def.getDescriptionId(), def.getLangValue()); + var def = this.machines[tier]; + if (def != null && def.value().getLangValue() != null) { + lang.add(def.getId().getNamespace(), def.value().getDescriptionId(), def.value().getLangValue()); } } } @Override - public @Nullable MultiblockMachineDefinition @NotNull [] createObject() { + public @Nullable MultiblockMachineDefinition createObject() { Preconditions.checkNotNull(tiers, "Tiers can't be null!"); Preconditions.checkArgument(tiers.length > 0, "tiers must have at least one tier!"); Preconditions.checkNotNull(machine, "You must set a machine creation function! " + "example: `builder.machine((holder, tier) => new SimpleTieredMachine(holder, tier, t => t * 3200)`"); Preconditions.checkNotNull(definition, "You must set a definition function! " + "See GTMachines for examples"); - MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[TIER_COUNT]; for (final int tier : tiers) { String tierName = VN[tier].toLowerCase(Locale.ROOT); - MultiblockMachineBuilder builder = GTRegistrate + MultiblockMachineBuilder builder = GTRegistrate .createIgnoringListenerErrors(this.id.getNamespace()) .multiblock(String.format("%s_%s", tierName, this.id.getPath()), holder -> machine.create(holder, tier)); @@ -101,9 +100,9 @@ public void generateLang(LangKubeEvent lang) { .tier(tier); this.definition.apply(tier, builder); this.builders[tier] = builder; - definitions[tier] = builder.register(); + this.machines[tier] = builder.register(); } - return definitions; + return null; } @FunctionalInterface diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java index 32c43732985..519a783859f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java @@ -11,8 +11,7 @@ import dev.latvian.mods.rhino.util.HideFromJS; import it.unimi.dsi.fastutil.ints.Int2IntFunction; import lombok.Getter; - -import java.util.Arrays; +import org.jspecify.annotations.Nullable; @SuppressWarnings("unused") public class KJSWrappingMachineBuilder extends BuilderBase implements IMachineBuilderKJS { @@ -83,14 +82,7 @@ public void generateLang(LangKubeEvent lang) { } @Override - public MachineDefinition createObject() { - for (var def : tieredBuilder.createTransformedObject()) { - if (def != null) { - return def; - } - } - // should never happen. - throw new IllegalStateException("Empty tiered machine builder " + Arrays.toString(tieredBuilder.get()) + - " With id " + tieredBuilder.id); + public @Nullable MachineDefinition createObject() { + return null; } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java index f13138e7cad..199e3c23a3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java @@ -10,8 +10,7 @@ import dev.latvian.mods.kubejs.registry.BuilderBase; import dev.latvian.mods.rhino.util.HideFromJS; import lombok.Getter; - -import java.util.Arrays; +import org.jspecify.annotations.Nullable; public class KJSWrappingMultiblockBuilder extends BuilderBase implements IMachineBuilderKJS { @@ -62,14 +61,7 @@ public void generateLang(LangKubeEvent lang) { } @Override - public MultiblockMachineDefinition createObject() { - for (var def : tieredBuilder.createTransformedObject()) { - if (def != null) { - return def; - } - } - // should never happen. - throw new IllegalStateException("Empty tiered multiblock builder " + Arrays.toString(tieredBuilder.get()) + - " With id " + tieredBuilder.id); + public @Nullable MultiblockMachineDefinition createObject() { + return null; } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java index 1151318da31..5916a74cfa8 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java @@ -1,9 +1,7 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.data.RotationState; -import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.*; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -15,26 +13,21 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.VoxelShape; -import com.tterrag.registrate.builders.BlockBuilder; -import com.tterrag.registrate.builders.ItemBuilder; import com.tterrag.registrate.providers.DataGenContext; import com.tterrag.registrate.util.nullness.NonNullBiConsumer; -import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; import dev.latvian.mods.kubejs.client.LangKubeEvent; import dev.latvian.mods.kubejs.generator.KubeAssetGenerator; import dev.latvian.mods.kubejs.registry.BuilderBase; @@ -50,10 +43,10 @@ public class MultiblockMachineBuilderWrapper extends BuilderBase implements IMachineBuilderKJS { - private final MultiblockMachineBuilder internal; + private final MultiblockMachineBuilder internal; public MultiblockMachineBuilderWrapper(ResourceLocation id, - MultiblockMachineBuilder internal) { + MultiblockMachineBuilder internal) { super(id); this.internal = internal; this.dummyBuilder = true; @@ -94,11 +87,6 @@ public MultiblockMachineBuilderWrapper recoveryStacks(Supplier stac return this; } - public MultiblockMachineBuilderWrapper definition(Function definition) { - internal.definition(definition); - return this; - } - public MultiblockMachineBuilderWrapper blockEntityFactory(MachineInstanceFactory machine) { internal.instanceFactory(machine); return this; @@ -135,26 +123,6 @@ public MultiblockMachineBuilderWrapper hasBER(boolean hasBER) { return this; } - public MultiblockMachineBuilderWrapper blockProp(NonNullUnaryOperator blockProp) { - internal.blockProp(blockProp); - return this; - } - - public MultiblockMachineBuilderWrapper itemProp(NonNullUnaryOperator itemProp) { - internal.itemProp(itemProp); - return this; - } - - public MultiblockMachineBuilderWrapper blockBuilder(@Nullable Consumer> blockBuilder) { - internal.blockBuilder(blockBuilder); - return this; - } - - public MultiblockMachineBuilderWrapper itemBuilder(@Nullable Consumer> itemBuilder) { - internal.itemBuilder(itemBuilder); - return this; - } - public MultiblockMachineBuilderWrapper recipeTypes(GTRecipeType... recipeTypes) { internal.recipeTypes(recipeTypes); return this; @@ -180,11 +148,6 @@ public MultiblockMachineBuilderWrapper addOutputLimit(RecipeCapability capabi return this; } - public MultiblockMachineBuilderWrapper itemColor(BiFunction itemColor) { - internal.itemColor(itemColor); - return this; - } - public MultiblockMachineBuilderWrapper simpleModel(ResourceLocation model) { internal.simpleModel(model); return this; @@ -393,26 +356,21 @@ public void generateLang(LangKubeEvent lang) { } } - public MultiblockMachineDefinition createObject() { - return internal.register(); + public @Nullable MultiblockMachineDefinition createObject() { + internal.register(); + return null; } public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id) { - var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), - id.getPath(), - MetaMachineBlock::new, - MetaMachineItem::new, + var baseBuilder = GTRegistrate.createIgnoringListenerErrors(id.getNamespace()).multiblock(id.getPath(), WorkableElectricMultiblockMachine::new); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id, - KJSTieredMachineBuilder.CreationFunction machine) { - var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), - id.getPath(), - MetaMachineBlock::new, - MetaMachineItem::new, - machine::create); + MachineInstanceFactory machine) { + var baseBuilder = GTRegistrate.createIgnoringListenerErrors(id.getNamespace()).multiblock(id.getPath(), + machine); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java index c9107ed135f..8ca3d9ee81b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java @@ -12,6 +12,7 @@ import com.gregtechceu.gtceu.api.fluids.FluidBuilder; import com.gregtechceu.gtceu.api.fluids.FluidState; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.integration.kjs.helpers.MaterialStackWrapper; import net.minecraft.resources.ResourceLocation; @@ -538,25 +539,26 @@ public MaterialBuilderWrapper radioactiveHazard(float multiplier) { } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition) { - internal.hazard(trigger, condition); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition)); return this; } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, float progressionMultiplier) { - internal.hazard(trigger, condition, progressionMultiplier); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), progressionMultiplier); return this; } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, float progressionMultiplier, boolean applyToDerivatives) { - internal.hazard(trigger, condition, progressionMultiplier, applyToDerivatives); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), progressionMultiplier, + applyToDerivatives); return this; } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, boolean applyToDerivatives) { - internal.hazard(trigger, condition, applyToDerivatives); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), applyToDerivatives); return this; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java index d47ee7d68e0..117e8583b3a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java @@ -42,7 +42,7 @@ public class OreVeinDefinitionBuilderJS extends BuilderBase { private float density; @Setter private int weight; - private IWorldGenLayer layer = WorldGenLayers.STONE; + private IWorldGenLayer layer = WorldGenLayers.STONE.value(); @Setter private Set> dimensionFilter = Set.of(); @Setter diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java similarity index 73% rename from src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilder.java rename to src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java index 74dcfa99765..29b4d91b2bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.Level; import dev.latvian.mods.kubejs.level.ruletest.AnyMatchRuleTest; +import dev.latvian.mods.kubejs.registry.BuilderBase; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.experimental.Accessors; @@ -16,30 +17,30 @@ import java.util.Set; @Accessors(fluent = true, chain = true) -public class WorldGenLayerBuilder { +public class WorldGenLayerBuilderJS extends BuilderBase { - public transient ResourceLocation id; public transient List targets = new ObjectArrayList<>(); public transient List> dimensions = new ObjectArrayList<>(); - public WorldGenLayerBuilder(ResourceLocation id) { - this.id = id; + public WorldGenLayerBuilderJS(ResourceLocation id) { + super(id); } - public SimpleWorldGenLayer build() { - return new SimpleWorldGenLayer( - this.id, - () -> new AnyMatchRuleTest(targets.stream().map(IWorldGenLayer.RuleTestSupplier::get).toList()), - Set.copyOf(dimensions)); - } - - public WorldGenLayerBuilder targets(IWorldGenLayer.RuleTestSupplier... targets) { + public WorldGenLayerBuilderJS targets(IWorldGenLayer.RuleTestSupplier... targets) { Collections.addAll(this.targets, targets); return this; } - public WorldGenLayerBuilder dimensions(List> dimensions) { + public WorldGenLayerBuilderJS dimensions(List> dimensions) { this.dimensions.addAll(dimensions); return this; } + + @Override + public IWorldGenLayer createObject() { + return new SimpleWorldGenLayer( + this.id, + () -> new AnyMatchRuleTest(targets.stream().map(IWorldGenLayer.RuleTestSupplier::get).toList()), + Set.copyOf(dimensions)); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java index 7af9f38bda2..71718644dd7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.kjs.events; import com.gregtechceu.gtceu.api.events.ModifyMachineEvent; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import dev.latvian.mods.kubejs.event.KubeEvent; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/WorldGenLayerEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/WorldGenLayerEventJS.java deleted file mode 100644 index 998150e4eb7..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/WorldGenLayerEventJS.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gregtechceu.gtceu.integration.kjs.events; - -import com.gregtechceu.gtceu.api.data.worldgen.SimpleWorldGenLayer; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.WorldGenLayerBuilder; - -import net.minecraft.resources.ResourceLocation; - -import dev.latvian.mods.kubejs.event.KubeEvent; -import dev.latvian.mods.kubejs.typings.Info; - -import java.util.function.Consumer; - -public class WorldGenLayerEventJS implements KubeEvent { - - @Info("Create a new material icon set with the default parent.") - public SimpleWorldGenLayer create(ResourceLocation id, Consumer consumer) { - WorldGenLayerBuilder builder = new WorldGenLayerBuilder(id); - consumer.accept(builder); - return builder.build(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java index 95a3d2ff1f4..7dc3f243fc6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.recipe.RecipeCondition; import com.gregtechceu.gtceu.api.recipe.chance.logic.ChanceLogic; import com.gregtechceu.gtceu.api.recipe.ingredient.EnergyStack; -import com.gregtechceu.gtceu.common.data.GTRecipeCapabilities; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; @@ -28,10 +27,10 @@ public class GTRecipeComponents { public static final RecipeComponent ENERGY_STACK = EnergyStackComponent.ENERGY_STACK.instance(); - public static final ContentJS ITEM = ContentJS.create(SizedIngredientComponent.SIZED_INGREDIENT, GTRecipeCapabilities.ITEM); - public static final ContentJS FLUID = ContentJS.create(SizedFluidIngredientComponent.NESTED, GTRecipeCapabilities.FLUID); - public static final ContentJS EU = ContentJS.create(EnergyStackComponent.ENERGY_STACK, GTRecipeCapabilities.EU); - public static final ContentJS CWU = ContentJS.create(NumberComponent.NON_NEGATIVE_INT, GTRecipeCapabilities.CWU); + public static final ContentJS ITEM = ContentJS.create(SizedIngredientComponent.SIZED_INGREDIENT, ItemRecipeCapability.CAP); + public static final ContentJS FLUID = ContentJS.create(SizedFluidIngredientComponent.NESTED, FluidRecipeCapability.CAP); + public static final ContentJS EU = ContentJS.create(EnergyStackComponent.ENERGY_STACK, EURecipeCapability.CAP); + public static final ContentJS CWU = ContentJS.create(NumberComponent.NON_NEGATIVE_INT, CWURecipeCapability.CAP); public static final RecipeComponent, ChanceLogic>> CHANCE_LOGIC_MAP = new JavaMapRecipeComponent<>(RECIPE_CAPABILITY, CHANCE_LOGIC); // spotless:on @@ -42,10 +41,10 @@ public class GTRecipeComponents { public static final Map, ContentJS> VALID_CAPS = new IdentityHashMap<>(); static { - VALID_CAPS.put(GTRecipeCapabilities.ITEM, ITEM); - VALID_CAPS.put(GTRecipeCapabilities.FLUID, FLUID); - VALID_CAPS.put(GTRecipeCapabilities.EU, EU); - VALID_CAPS.put(GTRecipeCapabilities.CWU, CWU); + VALID_CAPS.put(ItemRecipeCapability.CAP, ITEM); + VALID_CAPS.put(FluidRecipeCapability.CAP, FLUID); + VALID_CAPS.put(EURecipeCapability.CAP, EU); + VALID_CAPS.put(CWURecipeCapability.CAP, CWU); KJSRecipeKeyEvent event = new KJSRecipeKeyEvent(); ModLoader.postEvent(event); diff --git a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java index 6411e557e89..3c93e921d88 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java @@ -562,7 +562,7 @@ public static void appendHazardTooltips(Material material, List toolt if (GTUtil.isShiftDown()) { tooltipComponents.add(Component.translatable("tooltip.gtceu.medical_condition.description_shift")); - tooltipComponents.add(material.getProperty(HAZARD).condition.getTranslatableName()); + tooltipComponents.add(material.getProperty(HAZARD).condition.value().getTranslatableName()); tooltipComponents.add(Component.translatable("tooltip.gtceu.hazard_trigger")); tooltipComponents.add(material.getProperty(HAZARD).hazardTrigger.getTranslatableName()); return; diff --git a/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java b/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java index 93504eebaa4..13d0bcc15fd 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java +++ b/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.gametest.util.TestUtils; +import net.minecraft.core.Holder; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; @@ -14,19 +15,19 @@ public class MedicalConditionTestHelpers { public static void addMedicalConditionCounts(GameTestHelper helper, Player player, - MedicalCondition condition, float counts) { - getMedicalConditionTracker(helper, player).progressCondition(condition, counts); + Holder condition, float counts) { + getMedicalConditionTracker(helper, player).progressCondition(condition.value(), counts); } public static void setMedicalConditionCounts(GameTestHelper helper, Player player, - MedicalCondition condition, float counts) { + Holder condition, float counts) { MedicalConditionTracker tracker = getMedicalConditionTracker(helper, player); - tracker.medicalConditions.put(condition, counts); + tracker.medicalConditions.put(condition.value(), counts); tracker.updateActiveSymptoms(); } - public static void clearMedicalCondition(GameTestHelper helper, Player player, MedicalCondition condition) { - getMedicalConditionTracker(helper, player).removeMedicalCondition(condition); + public static void clearMedicalCondition(GameTestHelper helper, Player player, Holder condition) { + getMedicalConditionTracker(helper, player).removeMedicalCondition(condition.value()); } public static MedicalConditionTracker getMedicalConditionTracker(GameTestHelper helper, Player player) { @@ -37,21 +38,21 @@ public static MedicalConditionTracker getMedicalConditionTracker(GameTestHelper return tracker; } - public static void assertHasCondition(GameTestHelper helper, Player player, MedicalCondition condition) { - helper.assertTrue(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition), - "Player " + player + " should have medical condition " + condition.id); + public static void assertHasCondition(GameTestHelper helper, Player player, Holder condition) { + helper.assertTrue(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition.value()), + "Player " + player + " should have medical condition " + condition.getKey()); } - public static void assertFreeOfCondition(GameTestHelper helper, Player player, MedicalCondition condition) { - helper.assertFalse(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition), - "Player " + player + " should not have medical condition " + condition.id); + public static void assertFreeOfCondition(GameTestHelper helper, Player player, Holder condition) { + helper.assertFalse(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition.value()), + "Player " + player + " should not have medical condition " + condition.getKey()); } public static void assertConditionCountEquals(GameTestHelper helper, Player player, - MedicalCondition condition, float expectedCounts) { - float counts = getMedicalConditionTracker(helper, player).medicalConditions.getFloat(condition); + Holder condition, float expectedCounts) { + float counts = getMedicalConditionTracker(helper, player).medicalConditions.getFloat(condition.value()); helper.assertTrue(Mth.equal(counts, expectedCounts), "Player " + player + " should have " + expectedCounts + " 'counts' of medical condition " + - condition.id + ", has " + counts); + condition.getKey() + ", has " + counts); } } diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java index f1e10c39b29..6f2cfc718b0 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java @@ -18,12 +18,11 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.gregtechceu.gtceu.utils.fakeplayer.FakeServerGamePacketListenerImpl; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.MappedRegistry; +import net.minecraft.core.*; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.gametest.framework.GameTestAssertPosException; import net.minecraft.gametest.framework.GameTestHelper; @@ -247,7 +246,7 @@ public static GTRecipeType createRecipeType(String name, int maxInputs, int maxO .setEUIO(IO.IN) .setMaxIOSize(maxInputs, maxOutputs, maxFluidInputs, maxFluidOutputs); - GTRegistries.register(BuiltInRegistries.RECIPE_TYPE, type.registryName, type); + Registry.register(BuiltInRegistries.RECIPE_TYPE, type.registryName, type); GTRegistries.RECIPE_CATEGORIES.freeze(); BuiltInRegistries.RECIPE_TYPE.freeze(); return type; @@ -275,9 +274,8 @@ public static CoverBehavior placeCover(GameTestHelper helper, MetaMachine machin CoverDefinition coverDefinition = null; if (stack.getItem() instanceof IComponentItem componentItem) { for (IItemComponent component : componentItem.getComponents()) { - if (component instanceof CoverPlaceBehavior coverPlaceBehavior) { - helper.assertTrue(coverDefinition == null, "stack has multiple coverPlaceBehaviours"); - coverDefinition = coverPlaceBehavior.coverDefinition(); + if (component instanceof CoverPlaceBehavior(Holder definition)) { + coverDefinition = definition.value(); } } } @@ -287,9 +285,14 @@ public static CoverBehavior placeCover(GameTestHelper helper, MetaMachine machin return machine.getCoverContainer().getCoverAtSide(direction); } + public static MetaMachine setMachine(GameTestHelper helper, BlockPos pos, MachineEntry entry) { + helper.setBlock(pos, entry.getBlock()); + return Objects.requireNonNull(helper.getBlockEntity(pos)); + } + public static MetaMachine setMachine(GameTestHelper helper, BlockPos pos, MachineDefinition machineDefinition) { helper.setBlock(pos, machineDefinition.getBlock()); - return ((MetaMachine) Objects.requireNonNull(helper.getBlockEntity(pos))); + return Objects.requireNonNull(helper.getBlockEntity(pos)); } public static void assertEqual(GameTestHelper helper, List text, String s) {