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 a1395b0fe83..119857731b7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -5,11 +5,17 @@ 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; @@ -18,15 +24,19 @@ 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.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; @@ -35,16 +45,13 @@ 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.Objects; +import java.util.*; import java.util.function.*; /** * Representing basic information of a machine. */ -public class MachineDefinition { +public class MachineDefinition implements ItemLike { public static final IdMapper RENDER_STATE_REGISTRY = new IdMapper<>(512); @@ -52,119 +59,137 @@ public class MachineDefinition { private final ResourceLocation id; // This is only stored here for KJS use. @Getter - @Setter @Nullable - private String langValue; - @Setter(onMethod_ = @ApiStatus.Internal) - private DeferredHolder blockHolder; + private final String langValue; + private final DeferredHolder blockHolder; @Setter(onMethod_ = @ApiStatus.Internal) private DeferredHolder itemHolder; @Setter private 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; - - @Getter - @Setter - private RotationState rotationState; - @Setter - private VoxelShape shape; - @Getter - @Setter - private boolean renderWorldPreview; + private final boolean allowExtendedFacing; @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 MetaMachineBlock getBlock() { return blockHolder.get(); } - public MetaMachineItem getItem() { + @Override + public Item asItem() { return itemHolder.get(); } - public BlockEntityType getBlockEntityType() { - return blockEntityTypeSupplier.get(); - } - public ItemStack asStack() { - return new ItemStack(getItem()); + return new ItemStack(this); } public ItemStack asStack(int count) { - return new ItemStack(getItem(), count); + return new ItemStack(this, count); + } + + public BlockEntityType getBlockEntityType() { + return blockEntityTypeSupplier.get(); } public VoxelShape getShape(Direction direction) { @@ -243,4 +268,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/multiblock/Predicates.java b/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java index 250643f4a24..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,6 +158,15 @@ 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) { 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 78c3445a7dc..807399eca60 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 @@ -165,14 +165,16 @@ public GTRegistrate registerEventListeners(IEventBus bus) { /// Machine Builders - public MachineBuilder machine(String name, - MachineInstanceFactory blockEntityFactory) { - return new MachineBuilder<>(this, name, MachineDefinition::new, blockEntityFactory); + @SuppressWarnings("unchecked") + public > S machine(String name, + MachineInstanceFactory blockEntityFactory) { + return entry(name, + callback -> (S) new MachineBuilder<>(this, name, callback, blockEntityFactory)); } - public MultiblockMachineBuilder multiblock(String name, - MachineInstanceFactory blockEntityFactory) { - return new MultiblockMachineBuilder<>(this, name, blockEntityFactory); + public MultiblockMachineBuilder multiblock(String name, + MachineInstanceFactory blockEntityFactory) { + return entry(name, callback -> new MultiblockMachineBuilder<>(this, name, callback, blockEntityFactory)); } /// Cover Registration diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java index f45deecd9c1..e36b48cd34b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java @@ -90,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 @@ -118,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/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 2ef7d499abd..0446945745c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -22,11 +22,10 @@ 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; @@ -35,6 +34,7 @@ import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.RenderType; +import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; @@ -44,36 +44,33 @@ 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.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; import com.tterrag.registrate.providers.RegistrateLangProvider; -import com.tterrag.registrate.util.entry.BlockEntityEntry; import com.tterrag.registrate.util.entry.BlockEntry; +import com.tterrag.registrate.util.entry.ItemEntry; import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer; -import com.tterrag.registrate.util.nullness.NonNullSupplier; import dev.latvian.mods.rhino.util.HideFromJS; 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.ApiStatus; import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.NonNull; import java.util.*; import java.util.function.*; @@ -83,83 +80,41 @@ @SuppressWarnings("unused") @Accessors(chain = true, fluent = true) public class MachineBuilder> { - - protected final GTRegistrate registrate; - protected final String name; + SELF extends MachineBuilder> + extends AbstractBuilder { protected MachineInstanceFactory instanceFactory; - @Setter(onMethod_ = @ApiStatus.Internal) - public Function definitionFactory; - - private @Nullable BlockBuilder> blockBuilder; - private @Nullable BlockEntry blockEntry; - - private @Nullable ItemBuilder> itemBuilder; - private @Nullable BlockEntityEntry blockEntityEntry; - - @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 boolean defaultBlock = true; + private boolean defaultItem = true; - /** - * 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 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 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 definitionFactory, + BuilderCallback callback, MachineInstanceFactory instanceFactory) { - this.registrate = registrate; - this.name = name; + super(registrate, registrate, name, callback, GTRegistries.Keys.MACHINE); this.instanceFactory = instanceFactory; - this.definitionFactory = definitionFactory; - + 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; @@ -175,58 +130,40 @@ 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; - return getThis(); - } - - public SELF renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { - this.renderMultiblockWorldPreview = renderMultiblockWorldPreview; - return getThis(); - } - - public SELF renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { - this.renderMultiblockXEIPreview = renderMultiblockXEIPreview; + properties.hasBER(hasBER); return getThis(); } /** - * Gets the {@link MetaMachineBlock} builder for this machine so that further customization can be done.
+ * Creates a {@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); } - @SuppressWarnings("unchecked") - public NonNullSupplier asSupplier() { - // TODO replace with better method once this is converted to an actual registrate builder - return () -> (DEFINITION) Objects - .requireNonNull(GTRegistries.MACHINES.get(registrate.makeResourceLocation(name))); - } - /** * 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.
@@ -238,12 +175,14 @@ public NonNullSupplier asSupplier() { * @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(name)); + if (!defaultBlock) throw new IllegalStateException( + "Block builder for machine %s has already been initialized.".formatted(getName())); + + defaultBlock = false; - var newBlockBuilder = this.registrate.block(this, name, properties -> { + return this.getOwner().block(this, getName(), properties1 -> { MachineDefinition.setBuilt(this.asSupplier().get()); - var b = factory.apply(properties, this.asSupplier().get()); + var b = factory.apply(properties1, this.asSupplier().get()); MachineDefinition.clearBuilt(); return b; }) @@ -251,21 +190,18 @@ public BlockBuilder Blocks.DISPENSER) .properties(BlockBehaviour.Properties::noLootTable) .addLayer(() -> RenderType::cutout) - .exBlockstate(this.blockModel != null ? this.blockModel : createMachineModel(this.model)) - .onRegister(b -> Arrays.stream(this.abilities).forEach(a -> a.register(this.tier, b))); - - blockBuilder = newBlockBuilder; - return newBlockBuilder; + .exBlockstate(properties.blockModel() != null ? properties.blockModel() : + createMachineModel(properties.model())) + .onRegister(b -> Arrays.stream(properties.abilities()).forEach(a -> a.register(properties.tier(), b))); } /** - * Gets the {@link MetaMachineItem} builder for this machine so that further customization can be done.
+ * Creates {@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); } @@ -279,22 +215,26 @@ public ItemBuilder ItemBuilder> item(BiFunction factory) { - if (itemBuilder != null) throw new IllegalStateException( - "Item builder for machine %s has already been initialized.".formatted(name)); - - var newItemBuilder = this.registrate - .item(this, name, - properties -> factory.apply( - Objects.requireNonNull(blockEntry, "Item factory called before block resolved.").get(), - properties)) + if (!defaultItem) throw new IllegalStateException( + "Item builder for machine %s has already been initialized.".formatted(getName())); + + defaultItem = false; + + return getOwner() + .item(this, getName(), + properties1 -> factory.apply( + (MetaMachineBlock) Objects + .requireNonNull(BlockEntry.cast(getOwner().get(getName(), Registries.BLOCK)), + "Item factory called before block resolved.") + .get(), + properties1)) .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys // copied from BlockBuilder#item - .model((ctx, prov) -> { - prov.withExistingParent(ctx.getName(), - registrate.makeResourceLocation("block/machine/" + ctx.getName())); - }) + .model((ctx, prov) -> prov.withExistingParent(ctx.getName(), + getOwner().makeResourceLocation("block/machine/" + ctx.getName()))) .color(() -> () -> ((itemStack, tintIndex) -> tintIndex == 2 ? - GTValues.VC[tier == -1 ? 0 : tier] : tintIndex == 1 ? paintingColor : -1)) + GTValues.VC[properties.tier() == -1 ? 0 : properties.tier()] : + tintIndex == 1 ? properties.paintingColor() : -1)) .clientExtension(() -> () -> new IClientItemExtensions() { @Override @@ -302,9 +242,6 @@ public BlockEntityWithoutLevelRenderer getCustomRenderer() { return ItemWithBERModelRenderer.INSTANCE; } }); - - itemBuilder = newItemBuilder; - return newItemBuilder; } public SELF onBlockEntityRegister(NonNullConsumer> onBlockEntityRegister) { @@ -313,92 +250,95 @@ 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; + 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) { return langValue(name); } - public SELF langValue(String langValue) { - this.langValue = langValue; + public SELF langValue(@Nullable String langValue) { + if (langValue != null) { + this.lang(MachineDefinition::getDescriptionId, langValue); + } else { + this.setData(ProviderType.LANG, NonNullBiConsumer.noop()); + } + 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(); } @@ -408,13 +348,13 @@ public SELF recipeTypes(GTRecipeType... types) { Validate.noNullElements(types, "Cannot add null recipe type to machine."); List typeList = new ArrayList<>(); - Collections.addAll(typeList, this.recipeTypes); + 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(); } @@ -422,13 +362,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(); } @@ -437,7 +377,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) { @@ -447,7 +387,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) { @@ -462,12 +402,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); } @@ -486,7 +425,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) { @@ -502,13 +441,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); } @@ -516,12 +453,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); } @@ -568,7 +505,7 @@ public SELF sidedWorkableCasingModel(ResourceLocation baseCasing, } public SELF appearanceBlock(Supplier block) { - appearance = () -> block.get().defaultBlockState(); + properties.appearance(() -> block.get().defaultBlockState()); return getThis(); } @@ -576,8 +513,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(); } @@ -587,22 +525,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(); } @@ -612,7 +550,7 @@ 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(); } @@ -622,51 +560,51 @@ public SELF modelProperties(Property... 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(); } @@ -676,91 +614,57 @@ 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 definitionFactory.apply(registrate.makeResourceLocation(name)); - } + protected void createAdditionalObjects() { + if (properties.model() == null && properties.blockModel() == null) { + simpleModel(getOwner().makeResourceLocation("block/machine/template/" + getName())); + } - @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)); + final BlockEntry block; + if (defaultBlock) { + block = this.block().register(); + } else { + block = BlockEntry.cast(getOwner().get(getName(), Registries.BLOCK)); + } - 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()); + final ItemEntry item; + if (defaultItem) { + item = this.item().register(); + } else { + item = ItemEntry.cast(getOwner().get(getName(), Registries.ITEM)); } - definition.registerDefaultState(defaultState); - } + var blockEntityBuilder = getOwner() + .>blockEntity(this, getName(), + (type, pos, state) -> instanceFactory + .buildMachine(new BlockEntityCreationInfo(type, pos, state))) + .onRegister(onBlockEntityRegister) + .validBlock(block); - protected DEFINITION createEntry() { - DEFINITION definition = createDefinition(); - definition.setRotationState(rotationState); - setupStateDefinition(definition); - if (this.langValue != null) { - definition.setLangValue(langValue); + if (properties.hasBER()) { + blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); } - if (this.ui != null) { - definition.setUI(ui); - } - definition.setThemeId(themeId); - definition.setRecipeTypes(recipeTypes); - - definition.setBlockHolder(Objects.requireNonNull(blockEntry)); - definition.setItemHolder(item().register()); - definition.setTier(tier); - definition.setRecipeOutputLimits(recipeOutputLimits); - definition.setBlockEntityTypeSupplier(Objects.requireNonNull(blockEntityEntry)::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 = blockEntry::getDefaultState; - } - definition.setAppearance(appearance); - definition.setAllowExtendedFacing(allowExtendedFacing); - definition.setShape(shape); - definition.setDefaultPaintingColor(paintingColor); - definition.setRenderXEIPreview(renderMultiblockXEIPreview); - definition.setRenderWorldPreview(renderMultiblockWorldPreview); + var blockEntityEntry = blockEntityBuilder.register(); - return definition; + properties.blockHolder(block); + properties.itemHolder(item); + properties.blockEntityTypeSupplier(blockEntityEntry::get); + } + + @SuppressWarnings({ "NullableProblems", "unchecked" }) + protected @NonNull DEFINITION createEntry() { + createAdditionalObjects(); + return (DEFINITION) new MachineDefinition(getOwner().makeResourceLocation(getName()), properties); } /** @@ -768,37 +672,19 @@ protected DEFINITION createEntry() { * the register event in {@link #createEntry()} */ @HideFromJS - public DEFINITION register() { + public MachineEntry register() { ModifyMachineEvent event = new ModifyMachineEvent(this); ModLoader.postEvent(event); if (GTCEu.Mods.isKubeJSLoaded()) { KJSCallWrapper.fireKJSEvent(event); } - if (model == null && blockModel == null) { - simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); - } - if (this.langValue != null) { - block().lang(langValue); - } - - blockEntry = block().register(); - - var blockEntityBuilder = registrate - .>blockEntity(this, name, - (type, pos, state) -> instanceFactory - .buildMachine(new BlockEntityCreationInfo(type, pos, state))) - .onRegister(onBlockEntityRegister) - .validBlock(blockEntry); - if (hasBER) { - blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); - } - blockEntityEntry = blockEntityBuilder.register(); + return (MachineEntry) super.register(); + } - // TODO remove once this is a registrate builder - var definition = createEntry(); - GTRegistries.register(GTRegistries.MACHINES, definition.getId(), definition); - return definition; + @Override + protected MachineEntry createEntryWrapper(DeferredHolder delegate) { + return new MachineEntry<>(getOwner(), delegate); } @FunctionalInterface 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 index 5f4a93bfafc..e321f2aaa8d 100644 --- 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 @@ -1,5 +1,6 @@ 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; @@ -7,9 +8,7 @@ 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 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; @@ -18,122 +17,114 @@ import brachy.modularui.api.widget.IWidget; import brachy.modularui.value.sync.PanelSyncManager; -import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; -import lombok.Getter; +import com.tterrag.registrate.builders.BuilderCallback; import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.function.TriFunction; -import org.jetbrains.annotations.Nullable; +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 { - - 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 class MultiblockMachineBuilder extends + MachineBuilder> { public MultiblockMachineBuilder(GTRegistrate registrate, String name, + BuilderCallback callback, MachineInstanceFactory blockEntityFactory) { - super(registrate, name, (MultiblockMachineDefinition::new), blockEntityFactory); - patterns = new Object2ReferenceOpenHashMap<>(); + 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) { - this.generator = generator; + public MultiblockMachineBuilder generator(boolean generator) { + getProperties().generator(generator); return getThis(); } - public SELF pattern(Function pattern) { - this.patterns.put(MultiblockControllerMachine.DEFAULT_STRUCTURE, pattern); + public MultiblockMachineBuilder pattern(Function pattern) { + getProperties().patterns().put(MultiblockControllerMachine.DEFAULT_STRUCTURE, pattern); return getThis(); } - public SELF pattern(String structureName, Function pattern) { - this.patterns.put(structureName, pattern); + public MultiblockMachineBuilder pattern(String structureName, + Function pattern) { + getProperties().patterns().put(structureName, pattern); return getThis(); } - public SELF allowFlip(boolean allowFlip) { - this.allowFlip = allowFlip; + public MultiblockMachineBuilder allowFlip(boolean allowFlip) { + getProperties().allowFlip(allowFlip); return getThis(); } - public SELF partSorter(Function> partSorter) { - this.partSorter = partSorter; + public MultiblockMachineBuilder partSorter(Function> partSorter) { + getProperties().partSorter(partSorter); return getThis(); } - public SELF partAppearance(@Nullable TriFunction partAppearance) { - this.partAppearance = partAppearance; + public MultiblockMachineBuilder partAppearance(TriFunction partAppearance) { + getProperties().partAppearance(partAppearance); return getThis(); } - public SELF additionalDisplay(BiFunction> additionalDisplay) { - this.additionalDisplay = additionalDisplay; + public MultiblockMachineBuilder additionalDisplay(BiFunction> additionalDisplay) { + getProperties().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)); + public MultiblockMachineBuilder 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) { - this.recoveryItems.add(stacks); + public MultiblockMachineBuilder recoveryStacks(Supplier stacks) { + getProperties().recoveryItems().add(stacks); return getThis(); } @Tolerate - public SELF partSorter(Comparator sorter) { - this.partSorter = $ -> sorter; + public MultiblockMachineBuilder partSorter(Comparator sorter) { + getProperties().partSorter($ -> sorter); + return getThis(); + } + + public MultiblockMachineBuilder renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { + getProperties().renderMultiblockWorldPreview(renderMultiblockWorldPreview); + return getThis(); + } + + public MultiblockMachineBuilder renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { + getProperties().renderMultiblockXEIPreview(renderMultiblockXEIPreview); + return getThis(); + } + + public MultiblockMachineBuilder multiblockPreviewRenderer(boolean multiblockWorldPreview, + boolean multiblockXEIPreview) { + renderMultiblockWorldPreview(multiblockWorldPreview); + renderMultiblockXEIPreview(multiblockXEIPreview); return getThis(); } @Override - protected MultiblockMachineDefinition createEntry() { - var definition = super.createEntry(); - 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; + 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() { + createAdditionalObjects(); + return new MultiblockMachineDefinition(getOwner().makeResourceLocation(getName()), getProperties()); } } 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..582e50e9db7 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java @@ -0,0 +1,30 @@ +package com.gregtechceu.gtceu.api.registry.registrate.entry; + +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +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.level.block.entity.BlockEntityType; +import net.neoforged.neoforge.registries.DeferredHolder; + +import com.tterrag.registrate.util.entry.ItemProviderEntry; + +public class MachineEntry extends ItemProviderEntry { + + public MachineEntry(GTRegistrate owner, DeferredHolder key) { + super(owner, key); + } + + public int getTier() { + return value().getTier(); + } + + public MetaMachineBlock getBlock() { + return value().getBlock(); + } + + public BlockEntityType getBlockEntityType() { + return value().getBlockEntityType(); + } +} 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/client/renderer/machine/impl/QuantumChestItemRender.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/QuantumChestItemRender.java index dfd3a1c0702..c32536142e9 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/QuantumChestItemRender.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/QuantumChestItemRender.java @@ -51,7 +51,7 @@ public DynamicRenderType getType() @Override public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { - if (CREATIVE_CHEST_ITEM == null) CREATIVE_CHEST_ITEM = GTMachines.CREATIVE_ITEM.getItem(); + if (CREATIVE_CHEST_ITEM == null) CREATIVE_CHEST_ITEM = GTMachines.CREATIVE_ITEM.asItem(); LargeItemContent content = stack.get(GTDataComponents.LARGE_ITEM_CONTENT); if (content != null) { diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/QuantumTankFluidRender.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/QuantumTankFluidRender.java index f097574497d..656755b2c6f 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/QuantumTankFluidRender.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/machine/impl/QuantumTankFluidRender.java @@ -56,7 +56,7 @@ public DynamicRenderType getType() { @Override public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { - if (CREATIVE_FLUID_ITEM == null) CREATIVE_FLUID_ITEM = GTMachines.CREATIVE_FLUID.getItem(); + if (CREATIVE_FLUID_ITEM == null) CREATIVE_FLUID_ITEM = GTMachines.CREATIVE_FLUID.asItem(); LargeFluidContent content = stack.get(GTDataComponents.LARGE_FLUID_CONTENT); if (content != null) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 50a342f286d..d6d495e7aa8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -41,6 +41,7 @@ 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.*; @@ -410,7 +411,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) -> { @@ -422,7 +423,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::asItem).toArray(Item[]::new)); for (Block block : BuiltInRegistries.BLOCK) { if (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && 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/machines/GCYMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java index 4d44549f7a3..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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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", @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) @@ -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")) 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 fa7cd42991b..8b914cea592 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,15 +6,17 @@ 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.*; import static com.gregtechceu.gtceu.common.data.blocks.GTDevBlocks.CTM_TEST; import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; +@SuppressWarnings("unused") 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) 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 14579f995e1..fd22a29db5f 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 @@ -31,6 +31,7 @@ import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; 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; @@ -60,6 +61,7 @@ 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; @@ -70,6 +72,7 @@ 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; @@ -128,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, @@ -204,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"; @@ -258,8 +205,9 @@ 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 @@ -290,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), @@ -313,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) @@ -328,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), @@ -351,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), @@ -372,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) @@ -406,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 @@ -431,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 @@ -448,12 +399,14 @@ public static MachineDefinition registerCrate(GTRegistrate registrate, Material .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", info -> new DrumMachine(info, material, capacity)) - .item((holder, prop) -> DrumMachineItem.create(holder, prop, material)).build() + .item((holder, prop) -> DrumMachineItem.create(holder, prop, material)) + .color(() -> () -> (s, i) -> wooden ? 0xFFFFFF : material.getMaterialRGB()) + .build() .langValue(lang) .rotationState(RotationState.NONE) .simpleModel(GTCEu.id("block/machine/template/drum/" + (wooden ? "wooden" : "metal") + "_drum")) @@ -468,14 +421,15 @@ public static MachineDefinition registerDrum(GTRegistrate registrate, Material m Component.translatable("gtceu.universal.tooltip.fluid_storage_capacity", FormattingUtil.formatNumbers(capacity))) .paintingColor(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( @@ -494,14 +448,15 @@ 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)), @@ -527,13 +482,13 @@ public static MachineDefinition[] registerQuantumChests(GTRegistrate registrate, ////////////////////////////////////// // multi register helpers - public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate registrate, String name, - String displayName, int capacity, - Supplier casing, - MachineDefinition 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( @@ -557,9 +512,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) @@ -570,13 +526,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, @@ -587,12 +544,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), @@ -648,13 +606,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) @@ -699,23 +657,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) @@ -770,13 +730,14 @@ 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() { - // TODO fix - return Component.empty();// environmentRequirement(GTMedicalConditions.CARBON_MONOXIDE_POISONING); + return environmentRequirement(GTMedicalConditions.CARBON_MONOXIDE_POISONING); } public static BiConsumer> TANK_TOOLTIPS = (stack, list) -> { @@ -854,7 +815,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 4da383fce7e..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) @@ -116,7 +122,7 @@ public class GTMultiMachines { .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) @@ -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) @@ -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) @@ -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) @@ -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) @@ -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) @@ -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) @@ -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])) @@ -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])) @@ -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 a3bf02a1c22..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 @@ -12,6 +12,7 @@ import com.gregtechceu.gtceu.api.machine.trait.recipe.RecipeLogic; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; 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/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/multiblock/part/hpca/HPCAComponentPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java index b771c1aa115..a4c06735ee5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java @@ -74,7 +74,7 @@ public boolean canShared(MultiblockControllerMachine controller, String substruc public void modifyDrops(List drops) { for (int i = 0; i < drops.size(); ++i) { ItemStack drop = drops.get(i); - if (drop.getItem() == this.getDefinition().getItem()) { + if (drop.getItem() == this.getDefinition().asItem()) { if (hpcaComponentTrait.isDamaged()) { if (isAdvanced()) { drops.set(i, GTBlocks.ADVANCED_COMPUTER_CASING.asStack()); 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/data/recipe/builder/GTRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java index 02ab056f93c..ba824bc38ea 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 @@ -303,14 +303,13 @@ 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); case SizedIngredient ingredient -> inputItems(ingredient); case MaterialEntry entry -> inputItems(entry); case TagKey tag -> inputItems((TagKey) tag); - case MachineDefinition machine -> inputItems(machine); case IntProviderIngredient ingredient -> inputItems( new SizedIngredient(ingredient.toVanilla(), ingredient.getCountProvider().getMaxValue())); default -> { @@ -327,14 +326,13 @@ 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); case SizedIngredient ingredient -> inputItems(ingredient.ingredient(), count); case MaterialEntry entry -> inputItems(entry, count); case TagKey tag -> inputItems((TagKey) tag, count); - case MachineDefinition machine -> inputItems(machine, count); case IntProviderIngredient ingredient -> inputItems( new SizedIngredient(ingredient.toVanilla(), ingredient.getCountProvider().getMaxValue())); default -> { @@ -426,22 +424,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); } @@ -521,12 +511,11 @@ 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); case MaterialEntry entry -> outputItems(entry); - case MachineDefinition machine -> outputItems(machine); case IntProviderIngredient ingredient -> outputItems( new SizedIngredient(ingredient.toVanilla(), ingredient.getCountProvider().getMaxValue())); default -> { @@ -541,12 +530,11 @@ 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)); case MaterialEntry entry -> outputItems(entry, count); - case MachineDefinition machine -> outputItems(machine, count); case IntProviderIngredient ingredient -> outputItems( new SizedIngredient(ingredient.toVanilla(), ingredient.getCountProvider().getMaxValue())); default -> { @@ -587,22 +575,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); } 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/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index ea6d4df7757..3ab6b82263d 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 @@ -874,13 +874,13 @@ public PatternContainerGroup getTerminalGroup() { } else { if (!customName.isEmpty()) { return new PatternContainerGroup( - AEItemKey.of(GTAEMachines.ME_PATTERN_BUFFER.getItem()), + AEItemKey.of(GTAEMachines.ME_PATTERN_BUFFER), Component.literal(customName), Collections.emptyList()); } else { return new PatternContainerGroup( - AEItemKey.of(GTAEMachines.ME_PATTERN_BUFFER.getItem()), - GTAEMachines.ME_PATTERN_BUFFER.getItem().getDescription(), + AEItemKey.of(GTAEMachines.ME_PATTERN_BUFFER), + GTAEMachines.ME_PATTERN_BUFFER.asItem().getDescription(), Collections.emptyList()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java index c675fc70be2..b3aa7bb5351 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java @@ -36,7 +36,7 @@ protected SerializableManagedGridNode createManagedNode(IGridConnectedMachine ma return (SerializableManagedGridNode) new SerializableManagedGridNode(machine, BlockEntityNodeListener.INSTANCE) .setFlags(GridFlags.REQUIRE_CHANNEL) - .setVisualRepresentation(machine.self().getDefinition().getItem()) + .setVisualRepresentation(machine.self().getDefinition()) .setIdlePowerUsage(ConfigHolder.INSTANCE.compat.ae2.meHatchEnergyUsage) .setInWorldNode(true) .setExposedOnSides( diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java index 3ee56c8a915..2b443083cd1 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHostTrait.java @@ -19,7 +19,7 @@ public GridNodeHostTrait(MetaMachine machine) { super(); this.proxy = GridHelper.createManagedNode(this, BlockEntityNodeListener.INSTANCE) .setInWorldNode(true) - .setVisualRepresentation(machine.getDefinition().getItem()); + .setVisualRepresentation(machine.getDefinition()); } public void init() { 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 f90d2279faa..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 @@ -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::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 cf1759f4236..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 @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; 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 caf8cdb2c85..a0f86e95d68 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 @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; 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 @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 c809d1ccaf0..4f30356614a 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.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 aadef71e7f8..6f99166657f 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 @@ -43,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; @@ -356,21 +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(), - WorkableElectricMultiblockMachine::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(), 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/recipeviewer/emi/MultiblockInfoEmiCategory.java b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/MultiblockInfoEmiCategory.java index 277e16bc3e8..7415f2cb47a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/MultiblockInfoEmiCategory.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/MultiblockInfoEmiCategory.java @@ -42,7 +42,7 @@ public class MultiblockInfoEmiCategory extends EmiRecipeCategory { public static final MultiblockInfoEmiCategory CATEGORY = new MultiblockInfoEmiCategory(); private MultiblockInfoEmiCategory() { - super(GTCEu.id("multiblock_info"), EmiStack.of(GTMultiMachines.ELECTRIC_BLAST_FURNACE.getItem())); + super(GTCEu.id("multiblock_info"), EmiStack.of(GTMultiMachines.ELECTRIC_BLAST_FURNACE)); } public static void registerDisplays(EmiRegistry registry) { 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 47785acc9b3..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,6 +18,7 @@ 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; @@ -284,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) {