From 87e30588424fca6dd4a2d30baa1da5095fed16ba Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 8 May 2026 11:41:52 +1000 Subject: [PATCH 01/12] programmable circuit slot trait --- .../api/machine/SimpleTieredMachine.java | 18 ++- .../api/machine/feature/IHasCircuitSlot.java | 12 -- .../machine/mui/MachineUIPanelBuilder.java | 5 - .../part/MultiblockPartMachine.java | 5 + .../gtceu/api/machine/trait/MachineTrait.java | 15 +++ .../trait/ProgrammableCircuitSlotTrait.java | 109 ++++++++++++++++++ .../item/behavior/IntCircuitBehaviour.java | 10 +- .../behavior/MachineConfigCopyBehaviour.java | 17 ++- .../part/FluidHatchPartMachine.java | 48 +------- .../multiblock/part/ItemBusPartMachine.java | 67 ++--------- .../part/SteamHatchPartMachine.java | 24 +--- .../part/SteamItemBusPartMachine.java | 6 +- .../gtceu/common/mui/GTMuiWidgets.java | 24 ++-- .../gtceu/config/ConfigHolder.java | 4 - .../ae2/machine/MEInputBusPartMachine.java | 8 +- .../ae2/machine/MEInputHatchPartMachine.java | 9 +- .../machine/MEPatternBufferPartMachine.java | 2 +- .../ae2/machine/MEStockingBusPartMachine.java | 4 +- .../machine/MEStockingHatchPartMachine.java | 4 +- .../trait/InternalSlotRecipeHandler.java | 2 +- .../machine/trait/ProxySlotRecipeHandler.java | 2 +- 21 files changed, 185 insertions(+), 210 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasCircuitSlot.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index a6e94605482..ce47b46a98f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -5,12 +5,10 @@ import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.machine.feature.IHasBatterySlot; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.ISubscription; @@ -26,14 +24,11 @@ * All simple single machines are implemented here. */ public class SimpleTieredMachine extends WorkableTieredMachine - implements IHasCircuitSlot, IHasBatterySlot { + implements IHasBatterySlot { @Getter @SaveField protected final CustomItemStackHandler chargerInventory; - @Getter - @SaveField - protected final NotifiableItemStackHandler circuitInventory; @Nullable protected TickableSubscription batterySubs; @Nullable @@ -42,10 +37,15 @@ public class SimpleTieredMachine extends WorkableTieredMachine @SyncToClient public final AutoOutputTrait autoOutput; + @Getter + @SaveField + protected final ProgrammableCircuitSlotTrait circuitSlot; + public SimpleTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { super(info, tier, tankScalingFunction); this.autoOutput = attachTrait(new AutoOutputTrait(List.of(exportItems), List.of(exportFluids))); + this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); this.chargerInventory = new CustomItemStackHandler() { @@ -56,10 +56,6 @@ public int getSlotLimit(int slot) { chargerInventory.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && GTCapabilityHelper.getForgeEnergyItem(item) != null)); - - this.circuitInventory = attachTrait(new NotifiableItemStackHandler(1, IO.IN, IO.NONE) - .shouldDropInventoryInWorld(!ConfigHolder.INSTANCE.machines.ghostCircuit) - .setFilter(IntCircuitBehaviour::isIntegratedCircuit)); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasCircuitSlot.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasCircuitSlot.java deleted file mode 100644 index e77804a9a98..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasCircuitSlot.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; - -public interface IHasCircuitSlot { - - default boolean isCircuitSlotEnabled() { - return true; - } - - NotifiableItemStackHandler getCircuitInventory(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java index 4fb2dd0f2ae..907eb349411 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IHasBatterySlot; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.IVoidable; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDistinctPart; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; @@ -68,10 +67,6 @@ public MachineUIPanel build(PanelSyncManager syncManager, UISettings settings) { var attachMain = panel.getMainContents(); if (addDefaultConfigurators) { - if (machine instanceof IHasCircuitSlot circuitSlot && circuitSlot.isCircuitSlotEnabled()) { - attachLeft.child(GTMuiWidgets.createCircuitSlotPanel(circuitSlot, panel, syncManager)); - } - if (machine instanceof IControllable controllable) { attachRight.child(GTMuiWidgets.createPowerButton(controllable)); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java index fd9279b8834..7aa8d49f6b9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java @@ -135,6 +135,9 @@ public void removedFromController(MultiblockControllerMachine controller) { setRenderState(renderState.setValue(GTMachineModelProperties.IS_FORMED, false)); } } + + getAllTraits().forEach(t -> t.removedFromController(controller)); + syncDataHolder.markClientSyncFieldDirty("controllerPositions"); } @@ -149,6 +152,8 @@ public void addedToController(MultiblockControllerMachine controller) { if (renderState.hasProperty(GTMachineModelProperties.IS_FORMED)) { setRenderState(renderState.setValue(GTMachineModelProperties.IS_FORMED, true)); } + + getAllTraits().forEach(t -> t.addedToController(controller)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java index c6d8669b9b4..bee176754b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; @@ -138,6 +139,20 @@ public void onMachineUnload() {} */ public void onMachineDestroyed() {} + /** + * Called when the machine is attached to a controller
+ * Only called if this trait is attached to a multiblock part machine. + * @param controller The multiblock controller + */ + public void addedToController(MultiblockControllerMachine controller) {} + + /** + * Called when the machine is removed from a controller
+ * Only called if this trait is attached to a multiblock part machine. + * @param controller The multiblock controller + */ + public void removedFromController(MultiblockControllerMachine controller) {} + /** * Called when a neighboring block is updated. * diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java new file mode 100644 index 00000000000..986282c7314 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java @@ -0,0 +1,109 @@ +package com.gregtechceu.gtceu.api.machine.trait; + +import brachy.modularui.screen.ModularPanel; +import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widgets.layout.Flow; +import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; +import com.gregtechceu.gtceu.api.machine.trait.feature.IAttachConfiguratorsTrait; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.world.item.crafting.Ingredient; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ProgrammableCircuitSlotTrait extends NotifiableRecipeHandlerTrait implements IAttachConfiguratorsTrait, ICapabilityTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>(ProgrammableCircuitSlotTrait.class); + + @SaveField + public final CustomItemStackHandler storage; + + @Getter + @Setter + private boolean enabled = true; + + public ProgrammableCircuitSlotTrait() { + storage = new CustomItemStackHandler(1); + storage.setFilter(IntCircuitBehaviour::isIntegratedCircuit); + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + // Returns the current circuit value + public int getCurrentCircuit() { + return IntCircuitBehaviour.getCircuitConfiguration(storage.getStackInSlot(0)); + } + + public void setCurrentCircuit(int circuit) { + storage.setStackInSlot(0, IntCircuitBehaviour.stack(circuit)); + } + + @Override + public void attachLeftConfigurators(Flow flow, ModularPanel panel, PanelSyncManager syncManager) { + if (!enabled) return; + flow.child(GTMuiWidgets.createCircuitSlotPanel(this, panel, syncManager)); + } + + @Override + public void addedToController(MultiblockControllerMachine controller) { + if (!controller.allowCircuitSlots()) setEnabled(false); + } + + @Override + public void removedFromController(MultiblockControllerMachine controller) { + var allControllersAllowCircuits = true; + for (var c : ((MultiblockPartMachine)getMachine()).getControllers()) { + if (!c.allowCircuitSlots()) { + allControllersAllowCircuits = false; + break; + } + } + setEnabled(allControllersAllowCircuits); + } + + // Capability handler stuff + + @Override + public IO getHandlerIO() { + return enabled ? IO.IN : IO.NONE; + } + + @Override + public IO getCapabilityIO() { + return IO.NONE; + } + + @Override + public @Nullable List handleRecipeInner(IO io, GTRecipe recipe, List left, boolean simulate) { + if (!enabled) return left; + return NotifiableItemStackHandler.handleRecipe(io, recipe, left, simulate, getHandlerIO(), storage); + } + + @Override + public List getContents() { + return List.of(storage.getStackInSlot(0)); + } + + @Override + public double getTotalContentAmount() { + return 1; + } + + @Override + public RecipeCapability getCapability() { + return ItemRecipeCapability.CAP; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java index 6597e21223e..d7d280cb8a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java @@ -2,11 +2,10 @@ import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; +import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; import com.gregtechceu.gtceu.api.mui.IItemUIHolder; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; -import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; @@ -79,12 +78,7 @@ public InteractionResult useOn(UseOnContext context) { int circuitSetting = getCircuitConfiguration(stack); BlockEntity entity = context.getLevel().getBlockEntity(context.getClickedPos()); if (entity instanceof MetaMachine machine && context.isSecondaryUseActive()) { - if (machine instanceof IHasCircuitSlot circuitMachine && - circuitMachine.getCircuitInventory().getSlots() > 0) { - setCircuitConfiguration(circuitMachine.getCircuitInventory().getStackInSlot(0), circuitSetting); - } - if (!ConfigHolder.INSTANCE.machines.ghostCircuit) - stack.shrink(1); + machine.getTraitOptional(ProgrammableCircuitSlotTrait.TYPE).ifPresent(t -> t.setCurrentCircuit(circuitSetting)); return InteractionResult.SUCCESS; } return IItemUIHolder.super.useOn(context); diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java index 6fef298b849..2ed3ab63045 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.item.component.IInteractionItem; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.*; +import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; import com.gregtechceu.gtceu.utils.GTTransferUtils; @@ -204,12 +205,10 @@ private static CompoundTag gatherMachineConfig(MetaMachine machine) { tag.putBoolean(MUFFLED, mufflableMachine.isMuffled()); } - if (machine instanceof IHasCircuitSlot circuitMachine) { - var circuit = IntCircuitBehaviour - .getCircuitConfiguration(circuitMachine.getCircuitInventory().getStackInSlot(0)); - if (circuitMachine.isCircuitSlotEnabled() && circuit != 0) { - tag.putInt(CIRCUIT, circuit); - } + var circuit = machine.getTrait(ProgrammableCircuitSlotTrait.TYPE); + + if (circuit != null && circuit.isEnabled() && circuit.getCurrentCircuit() != 0) { + tag.putInt(CIRCUIT, circuit.getCurrentCircuit()); } tag.put(COVER, machine.getCoverContainer().copyConfig(new CompoundTag())); @@ -242,9 +241,9 @@ private static void pasteMachineConfig(ServerPlayer player, MetaMachine machine, if (tag.contains(MUFFLED)) mufflableMachine.setMuffled(tag.getBoolean(MUFFLED)); } - if (machine instanceof IHasCircuitSlot circuitMachine) { - if (tag.contains(CIRCUIT)) - circuitMachine.getCircuitInventory().setStackInSlot(0, IntCircuitBehaviour.stack(tag.getInt(CIRCUIT))); + if (tag.contains(CIRCUIT)) { + machine.getTraitOptional(ProgrammableCircuitSlotTrait.TYPE) + .ifPresent(t -> t.setCurrentCircuit(tag.getInt(CIRCUIT))); } machine.getCoverContainer().pasteConfig(player, tag.getCompound(COVER)); 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 a2a671f050a..a521d91210b 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 @@ -5,20 +5,16 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.TickableSubscription; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.mui.MachineUIPanel; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMachines; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTMuiMachineUtil; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; @@ -31,7 +27,6 @@ import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionResult; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.fluids.FluidStack; @@ -58,7 +53,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class FluidHatchPartMachine extends TieredIOPartMachine implements IMuiMachine, IHasCircuitSlot, IPaintable { +public class FluidHatchPartMachine extends TieredIOPartMachine implements IMuiMachine, IPaintable { public static final int INITIAL_TANK_CAPACITY_1X = 8 * FluidType.BUCKET_VOLUME; public static final int INITIAL_TANK_CAPACITY_4X = 2 * FluidType.BUCKET_VOLUME; @@ -75,24 +70,17 @@ public class FluidHatchPartMachine extends TieredIOPartMachine implements IMuiMa @SaveField @SyncToClient protected boolean circuitSlotEnabled; - @Getter + @SaveField - protected final NotifiableItemStackHandler circuitInventory; + protected final ProgrammableCircuitSlotTrait circuitSlot; public FluidHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, int initialCapacity, int slots) { super(info, tier, io); this.slots = slots; this.tank = attachTrait(createTank(initialCapacity, slots)); - if (io == IO.IN) { - this.circuitSlotEnabled = true; - this.circuitInventory = attachTrait(new NotifiableItemStackHandler(1, IO.IN, IO.NONE)) - .setFilter(IntCircuitBehaviour::isIntegratedCircuit).shouldSearchContent(false) - .shouldDropInventoryInWorld(!ConfigHolder.INSTANCE.machines.ghostCircuit); - } else { - this.circuitSlotEnabled = false; - this.circuitInventory = attachTrait(new NotifiableItemStackHandler(0, IO.NONE)).shouldSearchContent(false); - } + this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); + circuitSlot.setEnabled(io == IO.IN); } ////////////////////////////////////// @@ -131,30 +119,6 @@ public void onPaintingColorChanged(int color) { getHandlerList().setColor(color, true); } - @Override - public void addedToController(MultiblockControllerMachine controller) { - if (!controller.allowCircuitSlots()) { - if (!ConfigHolder.INSTANCE.machines.ghostCircuit) { - circuitInventory.dropInventoryInWorld(); - } else { - circuitInventory.setStackInSlot(0, ItemStack.EMPTY); - } - setCircuitSlotEnabled(false); - } - super.addedToController(controller); - } - - @Override - public void removedFromController(MultiblockControllerMachine controller) { - super.removedFromController(controller); - for (var c : controllers) { - if (!c.allowCircuitSlots()) { - return; - } - } - setCircuitSlotEnabled(true); - } - @Override public int tintColor(int index) { if (index == 9) return getRealColor(); 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 406231b8665..a71b9376300 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 @@ -8,22 +8,18 @@ import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.TickableSubscription; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDistinctPart; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMachines; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.TickTask; @@ -41,16 +37,11 @@ import brachy.modularui.widgets.layout.Grid; import brachy.modularui.widgets.slot.ItemSlot; import brachy.modularui.widgets.slot.SlotGroup; -import lombok.AccessLevel; import lombok.Getter; import org.jetbrains.annotations.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault public class ItemBusPartMachine extends TieredIOPartMachine - implements IDistinctPart, IHasCircuitSlot, IPaintable, IMuiMachine { + implements IDistinctPart, IMuiMachine, IPaintable { @Getter @SaveField @@ -59,17 +50,12 @@ public class ItemBusPartMachine extends TieredIOPartMachine protected TickableSubscription autoIOSubs; @Nullable protected ISubscription inventorySubs; - @Getter(AccessLevel.PROTECTED) - private boolean hasCircuitSlot = true; @Getter @SaveField @SyncToClient protected boolean circuitSlotEnabled; @Getter @SaveField - protected final NotifiableItemStackHandler circuitInventory; - @Getter - @SaveField @SyncToClient private boolean isDistinct = false; @SaveField @@ -77,11 +63,14 @@ public class ItemBusPartMachine extends TieredIOPartMachine @Getter protected final FilterHandler filterHandler; + @Getter + @SaveField + protected final ProgrammableCircuitSlotTrait circuitSlot; + public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io) { super(info, tier, io); this.inventory = attachTrait(createInventory()); - this.circuitSlotEnabled = true; - this.circuitInventory = attachTrait(createCircuitItemHandler(io)).shouldSearchContent(false); + this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); filterHandler = FilterHandlers.item(this); inventory.setFilter(this::matchesFilter); @@ -106,18 +95,6 @@ protected boolean matchesFilter(ItemStack stack) { return true; } - protected NotifiableItemStackHandler createCircuitItemHandler(IO io) { - if (io == IO.IN) { - return new NotifiableItemStackHandler(1, IO.IN, IO.NONE) - .setFilter(IntCircuitBehaviour::isIntegratedCircuit) - .shouldDropInventoryInWorld(!ConfigHolder.INSTANCE.machines.ghostCircuit); - } else { - hasCircuitSlot = false; - setCircuitSlotEnabled(false); - return new NotifiableItemStackHandler(0, IO.NONE); - } - } - @Override public void onLoad() { super.onLoad(); @@ -150,42 +127,12 @@ public void setDistinct(boolean distinct) { getHandlerList().setDistinctAndNotify(isDistinct); } - @Override - public void addedToController(MultiblockControllerMachine controller) { - if (hasCircuitSlot && !controller.allowCircuitSlots()) { - if (!ConfigHolder.INSTANCE.machines.ghostCircuit) { - circuitInventory.dropInventoryInWorld(); - } else { - circuitInventory.setStackInSlot(0, ItemStack.EMPTY); - } - setCircuitSlotEnabled(false); - } - super.addedToController(controller); - } - - @Override - public void removedFromController(MultiblockControllerMachine controller) { - super.removedFromController(controller); - if (!hasCircuitSlot) return; - for (var c : controllers) { - if (!c.allowCircuitSlots()) { - return; - } - } - setCircuitSlotEnabled(true); - } - @Override public int tintColor(int index) { if (index == 9) return getRealColor(); return -1; } - public void setCircuitSlotEnabled(boolean enabled) { - circuitSlotEnabled = enabled; - syncDataHolder.markClientSyncFieldDirty("circuitSlotEnabled"); - } - ////////////////////////////////////// // ******** Auto IO *********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java index ed684a53e79..2e4f98f207a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java @@ -16,10 +16,10 @@ public class SteamHatchPartMachine extends FluidHatchPartMachine { public static final int INITIAL_TANK_CAPACITY = 64 * FluidType.BUCKET_VOLUME; - public static final boolean IS_STEEL = ConfigHolder.INSTANCE.machines.steelSteamMultiblocks; public SteamHatchPartMachine(BlockEntityCreationInfo info) { super(info, 0, IO.IN, SteamHatchPartMachine.INITIAL_TANK_CAPACITY, 1); + circuitSlot.setEnabled(false); } @Override @@ -28,23 +28,6 @@ protected NotifiableFluidTank createTank(int initialCapacity, int slots) { .setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Steam.getFluidTag())); } - /* - * @Override - * public ModularUI createUI(Player entityPlayer) { - * return new ModularUI(176, 166, this, entityPlayer) - * .background(GuiTextures.BACKGROUND_STEAM.get(IS_STEEL)) - * .widget(new ImageWidget(7, 16, 81, 55, GuiTextures.DISPLAY_STEAM.get(IS_STEEL))) - * .widget(new LabelWidget(11, 20, "gtceu.gui.fluid_amount")) - * .widget(new LabelWidget(11, 30, () -> tank.getFluidInTank(0).getAmount() + "").setTextColor(-1) - * .setDropShadow(true)) - * .widget(new LabelWidget(6, 6, getBlockState().getBlock().getDescriptionId())) - * .widget(new TankWidget(tank.getStorages()[0], 90, 35, true, true) - * .setBackground(GuiTextures.FLUID_SLOT)) - * .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), - * GuiTextures.SLOT_STEAM.get(IS_STEEL), 7, 84, true)); - * } - */ - // By returning false here, we don't allow shift-clicking // with a screwdriver to swap the IO, since this is a // hatch that only allows steam in, not @@ -53,9 +36,4 @@ protected NotifiableFluidTank createTank(int initialCapacity, int slots) { public boolean swapIO() { return false; } - - @Override - public boolean isCircuitSlotEnabled() { - 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 b0babdf61d0..e187cd9494c 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 @@ -14,6 +14,7 @@ public class SteamItemBusPartMachine extends ItemBusPartMachine { public SteamItemBusPartMachine(BlockEntityCreationInfo info, IO io) { super(info, 1, io); + circuitSlot.setEnabled(false); autoTooltipKey = io == IO.IN ? "gtceu.gui.item_auto_input.tooltip" : "gtceu.gui.item_auto_output.tooltip"; } @@ -42,9 +43,4 @@ public boolean swapIO() { } return true; } - - @Override - public boolean isCircuitSlotEnabled() { - return false; - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 00de1e82a8b..91728d1612a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -6,10 +6,11 @@ import com.gregtechceu.gtceu.api.cover.filter.FilterHandler; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.IHasBatterySlot; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.IVoidable; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDistinctPart; +import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; +import com.gregtechceu.gtceu.api.recipe.gui.GTRecipeTypeUILayout; import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; @@ -256,11 +257,11 @@ public static ModularPanel createCircuitSlotPanel(Consumer circuit return createCircuitSlotPanel(circuitSyncValue, syncManager); } - public static ButtonWidget createCircuitSlotPanel(IHasCircuitSlot machine, ModularPanel parentPanel, + public static ButtonWidget createCircuitSlotPanel(ProgrammableCircuitSlotTrait circuitTrait, ModularPanel parentPanel, PanelSyncManager syncManager) { IntSyncValue circuitSyncValue = createCircuitSlotSyncValue( - i -> machine.getCircuitInventory().setStackInSlot(0, i), - () -> machine.getCircuitInventory().getStackInSlot(0)); + i -> circuitTrait.storage.setStackInSlot(0, i), + () -> circuitTrait.storage.getStackInSlot(0)); syncManager.syncValue("circuit_slot", circuitSyncValue); IPanelHandler circuitPanelHandler = syncManager.syncedPanel("circuit_panel", true, @@ -279,24 +280,21 @@ public static ButtonWidget createCircuitSlotPanel(IHasCircuitSlot machine, Mo return true; }) .onMouseScrolled((context, delta) -> { - int newValue = nextCircuitValue(machine.getCircuitInventory().getStackInSlot(0), + int newValue = nextCircuitValue(circuitTrait.storage.getStackInSlot(0), circuitSyncValue.getIntValue(), delta); circuitSyncValue.setValue(newValue); return true; }) .overlay(new DynamicDrawable(() -> { - if (machine.getCircuitInventory().getStackInSlot(0).isEmpty()) { + if (circuitTrait.storage.getStackInSlot(0).isEmpty()) { return new DrawableStack(new ItemDrawable(IntCircuitBehaviour.stack(0)), new ItemDrawable(Items.BARRIER)).asIcon().size(16); } - return new ItemDrawable(machine.getCircuitInventory().getStackInSlot(0)) + return new ItemDrawable(circuitTrait.storage.getStackInSlot(0)) .asIcon().size(16); })) .tooltipAutoUpdate(true) - .tooltipBuilder((r) -> r.addLine(Text.lang("metaitem.int_circuit.configuration", - (machine.getCircuitInventory().getStackInSlot(0).isEmpty() ? 0 : - IntCircuitBehaviour - .getCircuitConfiguration(machine.getCircuitInventory().getStackInSlot(0)))))); + .tooltipBuilder((r) -> r.addLine(Text.lang("metaitem.int_circuit.configuration", circuitTrait.getCircuit()))); } private static int nextCircuitValue(ItemStack stack, int current, double delta) { @@ -313,10 +311,10 @@ private static int nextCircuitValue(ItemStack stack, int current, double delta) } } else { if (stack.isEmpty() || - (current == 0 && !ConfigHolder.INSTANCE.machines.ghostCircuit)) { + (current == 0)) { // if at no circuit, loop around to max return IntCircuitBehaviour.CIRCUIT_MAX; - } else if (current == 1 && ConfigHolder.INSTANCE.machines.ghostCircuit) { + } else if (current == 1) { // if at 1, skip 0 and return no circuit return -1; } else { diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 7222b9af8a4..a5ac75e5b4d 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -567,10 +567,6 @@ public static class MachineConfigs { @Configurable.Synchronized public boolean gt6StylePipesCables = true; @Configurable - @Configurable.Comment({ "Whether the machine's circuit slot need to be inserted a real circuit." }) - @Configurable.Synchronized - public boolean ghostCircuit = true; - @Configurable @Configurable.Comment({ "Whether to add a \"Bedrock Ore Miner\" (also enables bedrock ore generation)", "Default: false" }) @Configurable.UpdateRestriction(UpdateRestrictions.GAME_RESTART) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java index 9dc9630a05c..5338b1e8a20 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java @@ -3,9 +3,7 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.integration.ae2.gui.AEConfigWidget; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemList; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemSlot; @@ -36,7 +34,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class MEInputBusPartMachine extends MEBusPartMachine - implements IDataStickInteractable, IHasCircuitSlot { + implements IDataStickInteractable { protected final static int CONFIG_SIZE = 16; @@ -250,7 +248,7 @@ protected CompoundTag writeConfigToTag() { configStacks.put(Integer.toString(i), stackTag); } tag.putByte("GhostCircuit", - (byte) IntCircuitBehaviour.getCircuitConfiguration(circuitInventory.getStackInSlot(0))); + (byte)circuitSlot.getCurrentCircuit()); tag.putBoolean("DistinctBuses", isDistinct()); return tag; } @@ -269,7 +267,7 @@ protected void readConfigFromTag(CompoundTag tag) { } } if (tag.contains("GhostCircuit")) { - circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(tag.getByte("GhostCircuit"))); + circuitSlot.setCurrentCircuit(tag.getByte("GhostCircuit")); } if (tag.contains("DistinctBuses")) { setDistinct(tag.getBoolean("DistinctBuses")); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java index 02ad4789c0b..6b242d73d73 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java @@ -3,9 +3,7 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; -import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.integration.ae2.gui.AEConfigWidget; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidList; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidSlot; @@ -39,7 +37,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class MEInputHatchPartMachine extends MEHatchPartMachine - implements IDataStickInteractable, IHasCircuitSlot { + implements IDataStickInteractable { protected ExportOnlyAEFluidList aeFluidHandler; @@ -234,8 +232,7 @@ protected CompoundTag writeConfigToTag() { CompoundTag stackTag = GenericStack.writeTag(config); configStacks.put(Integer.toString(i), stackTag); } - tag.putByte("GhostCircuit", - (byte) IntCircuitBehaviour.getCircuitConfiguration(circuitInventory.getStackInSlot(0))); + tag.putByte("GhostCircuit", (byte)circuitSlot.getCurrentCircuit()); return tag; } @@ -253,7 +250,7 @@ protected void readConfigFromTag(CompoundTag tag) { } } if (tag.contains("GhostCircuit")) { - circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(tag.getByte("GhostCircuit"))); + circuitSlot.setCurrentCircuit(tag.getByte("GhostCircuit")); } } } 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 12f2a8c8120..5111fd9e2e6 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 @@ -479,7 +479,7 @@ public PatternContainerGroup getTerminalGroup() { Component.literal(customName), Collections.emptyList()); } else { - ItemStack circuitStack = isHasCircuitSlot() ? circuitInventory.storage.getStackInSlot(0) : + ItemStack circuitStack = circuitSlot.isEnabled() ? circuitSlot.storage.getStackInSlot(0) : ItemStack.EMPTY; int circuitConfiguration = circuitStack.isEmpty() ? -1 : IntCircuitBehaviour.getCircuitConfiguration(circuitStack); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java index 10f10aefa39..9a0f494b651 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java @@ -280,7 +280,7 @@ protected CompoundTag writeConfigToTag() { CompoundTag tag = new CompoundTag(); tag.putBoolean("AutoPull", true); tag.putByte("GhostCircuit", - (byte) IntCircuitBehaviour.getCircuitConfiguration(circuitInventory.getStackInSlot(0))); + (byte)circuitSlot.getCurrentCircuit()); return tag; } @@ -289,7 +289,7 @@ protected void readConfigFromTag(CompoundTag tag) { if (tag.getBoolean("AutoPull")) { // if being set to auto-pull, no need to read the configured slots this.setAutoPull(true); - circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(tag.getByte("GhostCircuit"))); + circuitSlot.setCurrentCircuit(tag.getByte("GhostCircuit")); return; } // set auto pull first to avoid issues with clearing the config after reading from the data stick diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java index d82b46c2a68..6913cbd99b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java @@ -268,7 +268,7 @@ protected CompoundTag writeConfigToTag() { CompoundTag tag = new CompoundTag(); tag.putBoolean("AutoPull", true); tag.putByte("GhostCircuit", - (byte) IntCircuitBehaviour.getCircuitConfiguration(circuitInventory.getStackInSlot(0))); + (byte)circuitSlot.getCurrentCircuit()); return tag; } @@ -277,7 +277,7 @@ protected void readConfigFromTag(CompoundTag tag) { if (tag.getBoolean("AutoPull")) { // if being set to auto-pull, no need to read the configured slots this.setAutoPull(true); - circuitInventory.setStackInSlot(0, IntCircuitBehaviour.stack(tag.getByte("GhostCircuit"))); + circuitSlot.setCurrentCircuit(tag.getByte("GhostCircuit")); return; } // set auto pull first to avoid issues with clearing the config after reading from the data stick diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/InternalSlotRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/InternalSlotRecipeHandler.java index eb1fcdd2763..655e10ac75b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/InternalSlotRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/InternalSlotRecipeHandler.java @@ -43,7 +43,7 @@ public SlotRHL(MEPatternBufferPartMachine buffer, InternalSlot slot, int idx) { super(IO.IN); itemRecipeHandler = buffer.attachTrait(new SlotItemRecipeHandler(slot, idx)); fluidRecipeHandler = buffer.attachTrait(new SlotFluidRecipeHandler(slot, idx)); - addHandlers(buffer.getCircuitInventory(), buffer.getShareInventory(), buffer.getShareTank(), + addHandlers(buffer.getCircuitSlot(), buffer.getShareInventory(), buffer.getShareTank(), itemRecipeHandler, fluidRecipeHandler); this.setGroup(RecipeHandlerGroupDistinctness.BUS_DISTINCT); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/ProxySlotRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/ProxySlotRecipeHandler.java index 5e5fdfa0bdc..53792d2f482 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/ProxySlotRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/ProxySlotRecipeHandler.java @@ -65,7 +65,7 @@ public ProxyRHL(MEPatternBufferProxyPartMachine machine) { } public void setBuffer(MEPatternBufferPartMachine buffer, SlotRHL slotRHL) { - circuit.setProxy(buffer.getCircuitInventory()); + circuit.setProxy(buffer.getCircuitSlot()); sharedItem.setProxy(buffer.getShareInventory()); sharedFluid.setProxy(buffer.getShareTank()); slotItem.setProxy(slotRHL.getItemRecipeHandler()); From 6c2189b99bc5d3f916c118c5a339c014b6374ab1 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 8 May 2026 12:00:51 +1000 Subject: [PATCH 02/12] battery slot trait --- .../gtceu/api/machine/MetaMachine.java | 3 + .../api/machine/SimpleTieredMachine.java | 81 ++--------------- .../api/machine/feature/IHasBatterySlot.java | 8 -- .../machine/mui/MachineUIPanelBuilder.java | 4 - .../machine/electric/BlockBreakerMachine.java | 52 ++--------- .../machine/trait/BatterySlotTrait.java | 89 +++++++++++++++++++ .../gtceu/common/mui/GTMuiWidgets.java | 6 +- .../utils/data/TagCompatibilityFixer.java | 10 +++ 8 files changed, 121 insertions(+), 132 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasBatterySlot.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index f4b398b1222..d8b64ae4aed 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -130,6 +130,8 @@ public class MetaMachine extends ManagedSyncBlockEntity implements IGregtechBloc private final long offset = GTValues.RNG.nextInt(20); @Getter + @SaveField + @SyncToClient protected final MachineTraitHolder traitHolder; private final List serverTicks; @@ -151,6 +153,7 @@ public MetaMachine(BlockEntityCreationInfo info) { @Override public void load(CompoundTag tag) { TagCompatibilityFixer.fixMachineAutoOutputTag(tag); + TagCompatibilityFixer.fixBatterySlotTag(tag); super.load(tag); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index ce47b46a98f..a88ed119076 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -2,37 +2,22 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.recipe.*; -import com.gregtechceu.gtceu.api.machine.feature.IHasBatterySlot; import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; -import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.utils.ISubscription; +import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import it.unimi.dsi.fastutil.ints.Int2IntFunction; import lombok.Getter; -import org.jetbrains.annotations.Nullable; import java.util.*; -import java.util.function.*; /** * All simple single machines are implemented here. */ -public class SimpleTieredMachine extends WorkableTieredMachine - implements IHasBatterySlot { +public class SimpleTieredMachine extends WorkableTieredMachine { - @Getter - @SaveField - protected final CustomItemStackHandler chargerInventory; - @Nullable - protected TickableSubscription batterySubs; - @Nullable - protected ISubscription energySubs; @SaveField @SyncToClient public final AutoOutputTrait autoOutput; @@ -41,68 +26,16 @@ public class SimpleTieredMachine extends WorkableTieredMachine @SaveField protected final ProgrammableCircuitSlotTrait circuitSlot; + @Getter + @SaveField + protected final BatterySlotTrait batterySlot; + public SimpleTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { super(info, tier, tankScalingFunction); this.autoOutput = attachTrait(new AutoOutputTrait(List.of(exportItems), List.of(exportFluids))); this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); - - this.chargerInventory = new CustomItemStackHandler() { - - public int getSlotLimit(int slot) { - return 1; - } - }; - chargerInventory.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || - (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && - GTCapabilityHelper.getForgeEnergyItem(item) != null)); - } - - ////////////////////////////////////// - // ***** Initialization ******// - ////////////////////////////////////// - - @Override - public void onLoad() { - super.onLoad(); - if (!isRemote()) { - updateBatterySubscription(); - energySubs = energyContainer.addChangedListener(this::updateBatterySubscription); - chargerInventory.setOnContentsChanged(this::updateBatterySubscription); - } - } - - @Override - public void onUnload() { - super.onUnload(); - if (energySubs != null) { - energySubs.unsubscribe(); - energySubs = null; - } - } - - protected void updateBatterySubscription() { - if (energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, true)) { - batterySubs = subscribeServerTick(batterySubs, this::chargeBattery); - } else if (batterySubs != null) { - batterySubs.unsubscribe(); - batterySubs = null; - } - } - - protected void chargeBattery() { - if (!energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, false)) { - updateBatterySubscription(); - } - } - - ////////////////////////////////////// - // ********** MISC ***********// - ////////////////////////////////////// - @Override - public void onMachineDestroyed() { - super.onMachineDestroyed(); - chargerInventory.dropInventoryInWorld(getLevel(), getBlockPos()); + this.batterySlot = attachTrait(new BatterySlotTrait(energyContainer)); } ///////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasBatterySlot.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasBatterySlot.java deleted file mode 100644 index 9ff7e106831..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IHasBatterySlot.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; - -public interface IHasBatterySlot extends IMachineFeature { - - CustomItemStackHandler getChargerInventory(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java index 907eb349411..2bd473ed9a9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IHasBatterySlot; import com.gregtechceu.gtceu.api.machine.feature.IVoidable; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDistinctPart; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; @@ -70,9 +69,6 @@ public MachineUIPanel build(PanelSyncManager syncManager, UISettings settings) { if (machine instanceof IControllable controllable) { attachRight.child(GTMuiWidgets.createPowerButton(controllable)); } - if (machine instanceof IHasBatterySlot batterySlot) { - attachRight.child(GTMuiWidgets.createBatterySlot(batterySlot, syncManager)); - } if (machine instanceof IVoidable voidable && machine instanceof WorkableElectricMultiblockMachine) { attachRight.child(GTMuiWidgets.createVoidingButton(voidable)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java index 20a314d9bf7..7680a742bbf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java @@ -2,21 +2,18 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; -import com.gregtechceu.gtceu.api.machine.feature.IHasBatterySlot; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.mui.MachineUIPanel; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; +import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import com.gregtechceu.gtceu.common.mui.GTMuiMachineUtil; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.ISubscription; import net.minecraft.MethodsReturnNonnullByDefault; @@ -43,15 +40,12 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class BlockBreakerMachine extends TieredEnergyMachine - implements IMuiMachine, IControllable, IHasBatterySlot { + implements IMuiMachine, IControllable { @SaveField protected final NotifiableItemStackHandler cache; - @Getter - @SaveField - protected final CustomItemStackHandler chargerInventory; @Nullable - protected TickableSubscription batterySubs, breakerSubs; + protected TickableSubscription breakerSubs; @Nullable protected ISubscription energySubs; private final int inventorySize; @@ -64,6 +58,10 @@ public class BlockBreakerMachine extends TieredEnergyMachine @SyncToClient public final AutoOutputTrait autoOutput; + @Getter + @SaveField + protected final BatterySlotTrait batterySlot; + @Getter @SaveField @SyncToClient @@ -73,7 +71,7 @@ public BlockBreakerMachine(BlockEntityCreationInfo info, int tier) { super(info, tier); this.inventorySize = (tier + 1) * (tier + 1); this.cache = attachTrait(createCacheItemHandler()); - this.chargerInventory = createChargerItemHandler(); + this.batterySlot = attachTrait(new BatterySlotTrait(energyContainer)); this.energyPerTick = GTValues.V[tier - 1]; this.efficiencyMultiplier = 1.0f - getEfficiencyMultiplier(tier); this.autoOutput = attachTrait(AutoOutputTrait.ofItems(cache)); @@ -95,14 +93,6 @@ else if (efficiencyMultiplier < .1f) // ***** Initialization *****// ////////////////////////////////////// - protected CustomItemStackHandler createChargerItemHandler() { - var handler = new CustomItemStackHandler(); - handler.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || - (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && - GTCapabilityHelper.getForgeEnergyItem(item) != null)); - return handler; - } - protected NotifiableItemStackHandler createCacheItemHandler() { return new NotifiableItemStackHandler(inventorySize, IO.BOTH, IO.OUT); } @@ -114,11 +104,7 @@ public void onLoad() { if (getLevel() instanceof ServerLevel serverLevel) { serverLevel.getServer().tell(new TickTask(0, this::updateBreakerSubscription)); } - energySubs = energyContainer.addChangedListener(() -> { - this.updateBatterySubscription(); - this.updateBreakerSubscription(); - }); - chargerInventory.setOnContentsChanged(this::updateBatterySubscription); + energySubs = energyContainer.addChangedListener(this::updateBreakerSubscription); } } @@ -131,12 +117,6 @@ public void onUnload() { } } - @Override - public void onMachineDestroyed() { - super.onMachineDestroyed(); - chargerInventory.dropInventoryInWorld(getLevel(), getBlockPos()); - } - @Override public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { super.onNeighborChanged(block, fromPos, isMoving); @@ -244,20 +224,6 @@ public boolean drainEnergy(boolean simulate) { // ******* Auto Output *******// ////////////////////////////////////// - protected void updateBatterySubscription() { - if (energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, true)) - batterySubs = subscribeServerTick(batterySubs, this::chargeBattery); - else if (batterySubs != null) { - batterySubs.unsubscribe(); - batterySubs = null; - } - } - - protected void chargeBattery() { - if (!energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, false)) - updateBatterySubscription(); - } - public void setWorkingEnabled(boolean workingEnabled) { isWorkingEnabled = workingEnabled; syncDataHolder.markClientSyncFieldDirty("isWorkingEnabled"); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java new file mode 100644 index 00000000000..6733cbe3576 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java @@ -0,0 +1,89 @@ +package com.gregtechceu.gtceu.common.machine.trait; + +import brachy.modularui.screen.ModularPanel; +import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widgets.layout.Flow; +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; +import com.gregtechceu.gtceu.api.machine.TickableSubscription; +import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; +import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.machine.trait.feature.IAttachConfiguratorsTrait; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; +import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; +import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.utils.ISubscription; +import lombok.Getter; +import org.jetbrains.annotations.Nullable; + +public class BatterySlotTrait extends MachineTrait implements IAttachConfiguratorsTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>(BatterySlotTrait.class); + @SaveField + @Getter + private final CustomItemStackHandler storage; + + @Nullable + protected TickableSubscription batterySubs; + @Nullable + protected ISubscription energySubs; + + private final NotifiableEnergyContainer energyContainer; + + public BatterySlotTrait(NotifiableEnergyContainer energyContainerToUse) { + energyContainer = energyContainerToUse; + storage = new CustomItemStackHandler(1); + storage.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || + (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && + GTCapabilityHelper.getForgeEnergyItem(item) != null)); + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + @Override + public void onMachineLoad() { + if (!isRemote()) { + updateBatterySubscription(); + energySubs = energyContainer.addChangedListener(this::updateBatterySubscription); + storage.setOnContentsChanged(this::updateBatterySubscription); + } + } + + @Override + public void onMachineUnload() { + if (energySubs != null) { + energySubs.unsubscribe(); + energySubs = null; + } + } + + protected void updateBatterySubscription() { + if (energyContainer.dischargeOrRechargeEnergyContainers(storage, 0, true)) { + batterySubs = subscribeServerTick(batterySubs, this::chargeBattery); + } else if (batterySubs != null) { + batterySubs.unsubscribe(); + batterySubs = null; + } + } + + protected void chargeBattery() { + if (!energyContainer.dischargeOrRechargeEnergyContainers(storage, 0, false)) { + updateBatterySubscription(); + } + } + + + @Override + public void onMachineDestroyed() { + storage.dropInventoryInWorld(getLevel(), getBlockPos()); + } + + @Override + public void attachRightConfigurators(Flow flow, ModularPanel panel, PanelSyncManager syncManager) { + flow.child(GTMuiWidgets.createBatterySlot(this, syncManager)); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 91728d1612a..b8c893bc6c5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.cover.filter.Filter; import com.gregtechceu.gtceu.api.cover.filter.FilterHandler; import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.machine.feature.IHasBatterySlot; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.IVoidable; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDistinctPart; @@ -14,6 +13,7 @@ import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; +import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTMath; @@ -165,8 +165,8 @@ public static FluidSlot createTankWidget() { return new FluidSlot().size(20, 58).alwaysShowFull(false); } - public static ItemSlot createBatterySlot(IHasBatterySlot batterySlot, PanelSyncManager syncManager) { - ItemSlotSyncHandler battery = new ItemSlotSyncHandler(new ModularSlot(batterySlot.getChargerInventory(), 0)); + public static ItemSlot createBatterySlot(BatterySlotTrait batterySlot, PanelSyncManager syncManager) { + ItemSlotSyncHandler battery = new ItemSlotSyncHandler(new ModularSlot(batterySlot.getStorage(), 0)); syncManager.syncValue("battery", battery); return new ItemSlot().syncHandler("battery").background(GTGuiTextures.SLOT, GTGuiTextures.CHARGER_OVERLAY); } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java index f6ee9efc56f..b31236fee2f 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java @@ -6,9 +6,19 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import java.util.Objects; + @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TagCompatibilityFixer { + public static void fixBatterySlotTag(CompoundTag tag) { + if (tag.contains("chargerInventory")) { + var newTag = new CompoundTag(); + newTag.put("storage", Objects.requireNonNull(tag.get("chargerInventory"))); + tag.put("batterySlot", newTag); + } + } + public static void fixMachineAutoOutputTag(CompoundTag machineTag) { if (!machineTag.contains("autoOutput")) { var outputTag = new CompoundTag(); From 7dcba95c1f7c82c914516b0a21dd6c0d0c1507b9 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 8 May 2026 16:07:45 +1000 Subject: [PATCH 03/12] machine instance factory interface --- .../api/machine/MachineInstanceFactory.java | 14 ++++ .../gtceu/api/machine/MetaMachine.java | 3 +- .../api/machine/SimpleTieredMachine.java | 26 ++----- .../gtceu/api/machine/trait/MachineTrait.java | 3 + .../api/machine/trait/MachineTraitHolder.java | 1 + .../api/registry/registrate/GTRegistrate.java | 11 ++- .../registry/registrate/MachineBuilder.java | 8 +- .../registrate/MultiblockMachineBuilder.java | 5 +- .../gtceu/common/data/GTMachines.java | 7 +- .../common/data/machines/GTMachineUtils.java | 6 +- .../machine/MachineInstanceFactories.java | 16 ++++ .../machine/electric/RockCrusherMachine.java | 13 ---- .../common/machine/trait/AutoOutputTrait.java | 15 ++-- .../utils/data/TagCompatibilityFixer.java | 74 ++++++++++++++----- 14 files changed, 124 insertions(+), 78 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java new file mode 100644 index 00000000000..c9b8ccd5ed1 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java @@ -0,0 +1,14 @@ +package com.gregtechceu.gtceu.api.machine; + +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; + +@FunctionalInterface +public interface MachineInstanceFactory { + + MetaMachine buildMachine(BlockEntityCreationInfo info); + + @FunctionalInterface + interface Tiered { + MetaMachine buildMachine(BlockEntityCreationInfo info, int tier); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index d8b64ae4aed..d5e45751a76 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -152,8 +152,7 @@ public MetaMachine(BlockEntityCreationInfo info) { @Override public void load(CompoundTag tag) { - TagCompatibilityFixer.fixMachineAutoOutputTag(tag); - TagCompatibilityFixer.fixBatterySlotTag(tag); + TagCompatibilityFixer.fixTraitTags(this, tag); super.load(tag); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index a88ed119076..831b2934f86 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -3,13 +3,11 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; -import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; -import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import it.unimi.dsi.fastutil.ints.Int2IntFunction; -import lombok.Getter; import java.util.*; @@ -18,24 +16,16 @@ */ public class SimpleTieredMachine extends WorkableTieredMachine { - @SaveField - @SyncToClient - public final AutoOutputTrait autoOutput; - - @Getter - @SaveField - protected final ProgrammableCircuitSlotTrait circuitSlot; - - @Getter - @SaveField - protected final BatterySlotTrait batterySlot; - public SimpleTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { super(info, tier, tankScalingFunction); - this.autoOutput = attachTrait(new AutoOutputTrait(List.of(exportItems), List.of(exportFluids))); - this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); - this.batterySlot = attachTrait(new BatterySlotTrait(energyContainer)); + attachPersistentTrait("autoOutput", new AutoOutputTrait(List.of(exportItems), List.of(exportFluids))); + attachPersistentTrait("circuit", new ProgrammableCircuitSlotTrait()); + attachPersistentTrait("batterySlot", new BatterySlotTrait(energyContainer)); + } + + public SimpleTieredMachine(BlockEntityCreationInfo info, int tier) { + this(info, tier, GTMachineUtils.defaultTankSizeFunction); } ///////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java index bee176754b8..47496d20d9b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java @@ -42,6 +42,9 @@ public abstract class MachineTrait implements ISyncManaged { @Setter protected Predicate<@Nullable Direction> capabilityValidator = $ -> true; + @Getter + @Setter(onMethod_ = @ApiStatus.Internal) + private @Nullable String traitName; /** * The trait's callback priority. Traits with a higher priority will have their events fired * first, which may prevent traits with a lower priority from handling some events. diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java index decb4702f2e..d543388cae7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java @@ -87,6 +87,7 @@ public MachineTraitHolder registerPersistentTrait(String traitName, MachineTrait if (trait.getMachine() != machine) throw new IllegalArgumentException("Trait does not belong to this machine."); if (traitsToSave.containsKey(traitName)) throw new IllegalArgumentException("Attempted to register duplicate trait save key \"" + traitName + "\""); + trait.setTraitName(traitName); traitsToSave.put(traitName, trait); return this; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 251bc5b670c..8accf1b59b7 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 @@ -2,11 +2,10 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.registry.registrate.forge.GTFluidBuilder; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; @@ -123,13 +122,13 @@ public IGTFluidBuilder createFluid(String name, String langKey, Material materia Function definitionFactory, BiFunction blockFactory, BiFunction itemFactory, - Function blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, definitionFactory, blockFactory, itemFactory, blockEntityFactory); } public MachineBuilder machine(String name, - Function blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, MachineDefinition::new, MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } @@ -137,13 +136,13 @@ public IGTFluidBuilder createFluid(String name, String langKey, Material materia public MultiblockMachineBuilder multiblock(String name, BiFunction blockFactory, BiFunction itemFactory, - Function blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, blockFactory, itemFactory, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, - Function blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java index 38c0b42c421..c42ede0f653 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java @@ -8,7 +8,7 @@ import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; @@ -89,7 +89,7 @@ public class MachineBuilder blockFactory; protected final BiFunction itemFactory; - protected final Function blockEntityFactory; + protected final MachineInstanceFactory blockEntityFactory; protected final Function definition; @Nullable @@ -159,7 +159,7 @@ public MachineBuilder(GTRegistrate registrate, String name, Function definition, BiFunction blockFactory, BiFunction itemFactory, - Function blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { super(new ResourceLocation(registrate.getModid(), name)); this.registrate = registrate; this.name = name; @@ -680,7 +680,7 @@ public DEFINITION register() { var blockEntityBuilder = registrate .blockEntity( - (type, pos, state) -> blockEntityFactory.apply(new BlockEntityCreationInfo(type, pos, state))) + (type, pos, state) -> blockEntityFactory.buildMachine(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) .validBlock(block); if (hasBER) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java index 0a73bf0bb08..58ae002e141 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java @@ -1,9 +1,8 @@ package com.gregtechceu.gtceu.api.registry.registrate; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.item.MetaMachineItem; -import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -54,7 +53,7 @@ public class MultiblockMachineBuilder blockFactory, BiFunction itemFactory, - Function blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { super(registrate, name, (loc -> (DEFINITION) new MultiblockMachineDefinition(loc)), blockFactory, itemFactory, blockEntityFactory); 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 1946e35aa26..40486739b9d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -21,6 +21,7 @@ import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.data.machines.*; import com.gregtechceu.gtceu.common.data.models.GTModels; +import com.gregtechceu.gtceu.common.machine.MachineInstanceFactories; import com.gregtechceu.gtceu.common.machine.electric.*; import com.gregtechceu.gtceu.common.machine.multiblock.part.*; import com.gregtechceu.gtceu.common.machine.multiblock.part.monitor.AdvancedMonitorPartMachine; @@ -184,7 +185,7 @@ public class GTMachines { GTRecipeTypes.ALLOY_SMELTER_RECIPES).register(); public static final MachineDefinition[] ARC_FURNACE = registerTieredMachines("arc_furnace", - (holder, tier) -> new SimpleTieredMachine(holder, tier, defaultTankSizeFunction), (tier, builder) -> builder + SimpleTieredMachine::new, (tier, builder) -> builder .langValue("%s Arc Furnace %s".formatted(VLVH[tier], VLVT[tier])) .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.ARC_FURNACE_RECIPES) @@ -284,7 +285,7 @@ public class GTMachines { .hasPollutionDebuff(true) .register(); public static final MachineDefinition[] MACERATOR = registerTieredMachines("macerator", - (holder, tier) -> new SimpleTieredMachine(holder, tier, defaultTankSizeFunction), (tier, builder) -> builder + SimpleTieredMachine::new, (tier, builder) -> builder .langValue("%s Macerator %s".formatted(VLVH[tier], VLVT[tier])) .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.MACERATOR_RECIPES) @@ -307,7 +308,7 @@ public class GTMachines { .register(); public static final MachineDefinition[] ROCK_CRUSHER = registerTieredMachines("rock_crusher", - RockCrusherMachine::new, (tier, builder) -> builder + MachineInstanceFactories.ROCK_CRUSHER, (tier, builder) -> builder .langValue("%s Rock Crusher %s".formatted(VLVH[tier], VLVT[tier])) .ui(GTSingleblockMachinePanels.GENERAL_MACHINE) .rotationState(RotationState.NON_Y_AXIS) 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 17aa56276a9..b692d3e7557 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 @@ -203,7 +203,7 @@ public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate } public static MachineDefinition[] registerTieredMachines(String name, - BiFunction factory, + MachineInstanceFactory.Tiered factory, BiFunction, MachineDefinition> builder, int... tiers) { return registerTieredMachines(REGISTRATE, name, factory, builder, tiers); @@ -211,14 +211,14 @@ public static MachineDefinition[] registerTieredMachines(String name, public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate, String name, - BiFunction factory, + MachineInstanceFactory.Tiered factory, BiFunction, MachineDefinition> builder, int... tiers) { MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate .machine(GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, - info -> factory.apply(info, tier)) + info -> factory.buildMachine(info, tier)) .tier(tier); definitions[tier] = builder.apply(tier, register); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java b/src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java new file mode 100644 index 00000000000..ddfec4addb3 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java @@ -0,0 +1,16 @@ +package com.gregtechceu.gtceu.common.machine; + +import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; +import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; +import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.NonExtendable +public interface MachineInstanceFactories { + + MachineInstanceFactory.Tiered ROCK_CRUSHER = (info, tier) -> { + var machine = new SimpleTieredMachine(info, tier, GTMachineUtils.defaultTankSizeFunction); + machine.getEnvironmentalExplosionTrait().setEnableEnvironmentalExplosions(false); + return machine; + }; +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java deleted file mode 100644 index 24824e61c92..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.gregtechceu.gtceu.common.machine.electric; - -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; -import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; - -public class RockCrusherMachine extends SimpleTieredMachine { - - public RockCrusherMachine(BlockEntityCreationInfo info, int tier) { - super(info, tier, GTMachineUtils.defaultTankSizeFunction); - environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/AutoOutputTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/AutoOutputTrait.java index 12670ed989f..2bf4568cdef 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/AutoOutputTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/AutoOutputTrait.java @@ -48,6 +48,9 @@ import static com.gregtechceu.gtceu.api.item.tool.ToolHelper.getBehaviorsTag; +/** + * A machine trait which handles the auto output behaviour that most singleblock machines use. + */ public class AutoOutputTrait extends MachineTrait implements IRenderingTrait, IInteractionTrait, IFrontFacingTrait, IAttachConfiguratorsTrait { @@ -236,18 +239,14 @@ public void setItemOutputDirection(@Nullable Direction outputFacing) { private boolean shouldKeepItemSubscription() { if (!supportsAutoOutputItems()) return false; - if (!isAutoOutputItems() || getItemOutputDirection() == null || - !GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), getItemOutputDirection())) - return false; - return true; + return isAutoOutputItems() && getItemOutputDirection() != null && + GTTransferUtils.hasAdjacentItemHandler(getLevel(), getBlockPos(), getItemOutputDirection()); } private boolean shouldKeepFluidSubscription() { if (!supportsAutoOutputFluids()) return false; - if (!isAutoOutputFluids() || getFluidOutputDirection() == null || - !GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), getFluidOutputDirection())) - return false; - return true; + return isAutoOutputFluids() && getFluidOutputDirection() != null && + GTTransferUtils.hasAdjacentFluidHandler(getLevel(), getBlockPos(), getFluidOutputDirection()); } protected void updateItemOutputSubscription() { diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java index b31236fee2f..164dc9c4371 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java @@ -1,5 +1,11 @@ package com.gregtechceu.gtceu.utils.data; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; +import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; +import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; +import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -11,33 +17,65 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TagCompatibilityFixer { - public static void fixBatterySlotTag(CompoundTag tag) { + public static void putTraitTag(MetaMachine machine, CompoundTag machineTag, + MachineTraitType type, String defaultName, + CompoundTag data) { + var traits = machine.getTraits(type); + + if (traits.size() != 1 || traits.get(0).getTraitName() == null) { + machineTag.put(defaultName, data); + return; + } + + var persistent = traits.get(0).getTraitName(); + machineTag.getCompound("traitHolder").put(Objects.requireNonNull(persistent), data); + } + + public static void fixTraitTags(MetaMachine machine, CompoundTag tag) { + if (!tag.contains("traitHolder")) { + tag.put("traitHolder", new CompoundTag()); + + fixBatterySlotTag(machine, tag); + fixProgrammedCircutTag(machine, tag); + fixMachineAutoOutputTag(machine, tag); + } + } + + public static void fixBatterySlotTag(MetaMachine machine, CompoundTag tag) { if (tag.contains("chargerInventory")) { var newTag = new CompoundTag(); newTag.put("storage", Objects.requireNonNull(tag.get("chargerInventory"))); - tag.put("batterySlot", newTag); + + putTraitTag(machine, tag, BatterySlotTrait.TYPE, "batterySlot", newTag); } } - public static void fixMachineAutoOutputTag(CompoundTag machineTag) { - if (!machineTag.contains("autoOutput")) { - var outputTag = new CompoundTag(); - Tag itemOutputDirection = machineTag.get("outputFacingItems"); - Tag fluidOutputDirection = machineTag.get("outputFacingFluids"); - Tag autoOutputItems = machineTag.get("autoOutputItems"); - Tag autoOutputFluids = machineTag.get("autoOutputFluids"); - Tag allowInputItems = machineTag.get("allowInputFromOutputSideItems"); - Tag allowInputFluids = machineTag.get("allowInputFromOutputSideFluids"); - if (itemOutputDirection != null) outputTag.put("itemOutputDirection", itemOutputDirection); - if (fluidOutputDirection != null) outputTag.put("fluidOutputDirection", fluidOutputDirection); - if (autoOutputItems != null) outputTag.put("autoOutputItems", autoOutputItems); - if (autoOutputFluids != null) outputTag.put("autoOutputFluids", autoOutputFluids); - if (allowInputItems != null) outputTag.put("allowItemInputFromOutputSide", allowInputItems); - if (allowInputFluids != null) outputTag.put("allowFluidInputFromOutputSide", allowInputFluids); - machineTag.put("autoOutput", outputTag); + public static void fixProgrammedCircutTag(MetaMachine machine, CompoundTag tag) { + if (tag.contains("circuitInventory")) { + var oldData = tag.getCompound("circuitInventory"); + + putTraitTag(machine, tag, ProgrammableCircuitSlotTrait.TYPE, "circuitSlot", oldData); } } + public static void fixMachineAutoOutputTag(MetaMachine machine, CompoundTag machineTag) { + var outputTag = new CompoundTag(); + Tag itemOutputDirection = machineTag.get("outputFacingItems"); + Tag fluidOutputDirection = machineTag.get("outputFacingFluids"); + Tag autoOutputItems = machineTag.get("autoOutputItems"); + Tag autoOutputFluids = machineTag.get("autoOutputFluids"); + Tag allowInputItems = machineTag.get("allowInputFromOutputSideItems"); + Tag allowInputFluids = machineTag.get("allowInputFromOutputSideFluids"); + if (itemOutputDirection != null) outputTag.put("itemOutputDirection", itemOutputDirection); + if (fluidOutputDirection != null) outputTag.put("fluidOutputDirection", fluidOutputDirection); + if (autoOutputItems != null) outputTag.put("autoOutputItems", autoOutputItems); + if (autoOutputFluids != null) outputTag.put("autoOutputFluids", autoOutputFluids); + if (allowInputItems != null) outputTag.put("allowItemInputFromOutputSide", allowInputItems); + if (allowInputFluids != null) outputTag.put("allowFluidInputFromOutputSide", allowInputFluids); + + putTraitTag(machine, machineTag, AutoOutputTrait.TYPE, "autoOutput", outputTag); + } + public static Tag stripLDLibPayloadWrapper(Tag t) { if (!(t instanceof CompoundTag tag)) return t; if (tag.contains("p") && tag.contains("t")) { From afccb51d6b04780f04700dc05fe6a6c54fa7318f Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 8 May 2026 16:19:47 +1000 Subject: [PATCH 04/12] remove drop save machine interface --- .../gtceu/api/block/MetaMachineBlock.java | 18 +++------ .../gtceu/api/machine/MetaMachine.java | 13 +++++++ .../api/machine/feature/IDropSaveMachine.java | 39 ------------------- .../common/machine/storage/CrateMachine.java | 12 ++---- .../machine/storage/CreativeChestMachine.java | 2 +- .../machine/storage/CreativeTankMachine.java | 2 +- .../common/machine/storage/DrumMachine.java | 16 ++------ .../machine/storage/QuantumChestMachine.java | 16 ++------ .../machine/storage/QuantumTankMachine.java | 16 ++------ 9 files changed, 32 insertions(+), 102 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDropSaveMachine.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java index b52a2a787dc..44abd05b599 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java @@ -124,12 +124,8 @@ public void setPlacedBy(Level pLevel, BlockPos pPos, BlockState pState, @Nullabl machine.setOwnerUUID(sPlayer.getUUID()); } - if (machine instanceof IDropSaveMachine dropSaveMachine) { - CompoundTag tag = pStack.getTag(); - if (tag != null) { - dropSaveMachine.loadFromItem(tag); - } - } + CompoundTag tag = pStack.getTag(); + if (tag != null) machine.loadFromItem(tag); } } } @@ -180,10 +176,8 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { @Override public ItemStack getCloneItemStack(BlockGetter level, BlockPos pos, BlockState state) { ItemStack itemStack = super.getCloneItemStack(level, pos, state); - if (MetaMachine.getMachine(level, pos) instanceof IDropSaveMachine dropSaveMachine && - dropSaveMachine.savePickClone()) { - dropSaveMachine.saveToItem(itemStack.getOrCreateTag()); - } + var machine = MetaMachine.getMachine(level, pos); + if (machine != null) machine.saveToItem(itemStack.getOrCreateTag(), true); return itemStack; } @@ -234,14 +228,12 @@ public List getDrops(BlockState state, LootParams.Builder builder) { BlockEntity be = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); if (be instanceof MetaMachine machine) { machine.modifyDrops(drops); - if (machine instanceof IDropSaveMachine dropSaveMachine && dropSaveMachine.saveBreak()) { for (ItemStack drop : drops) { if (drop.getItem() instanceof MetaMachineItem item && item.getBlock() == this) { - dropSaveMachine.saveToItem(drop.getOrCreateTag()); + machine.saveToItem(drop.getOrCreateTag(), false); // break here to not dupe contents if a machine drops multiple of itself for whatever reason. break; } - } } } return drops; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index d5e45751a76..72a316b1515 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -206,6 +206,19 @@ public void onMachineDestroyed() { */ public void modifyDrops(List drops) {} + /** + * Saves machine data to an item stack tag. + * + * @param tag The tag to save to. + * @param clone If this data is being save to an item stack created by cloning the block (pick block) + */ + public void saveToItem(CompoundTag tag, boolean clone) {} + + /** + * Loads machine data from an item stack tag. + */ + public void loadFromItem(CompoundTag tag) {} + ////////////////////////////////////// // ***** Tickable Manager ****// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDropSaveMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDropSaveMachine.java deleted file mode 100644 index 1f55ee1dfcc..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDropSaveMachine.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import net.minecraft.nbt.CompoundTag; - -import org.jetbrains.annotations.MustBeInvokedByOverriders; - -/** - * A machine that can save its contents when dropped. - */ -public interface IDropSaveMachine extends IMachineFeature { - - /** - * Whether save for breaking. - */ - default boolean saveBreak() { - return true; - } - - /** - * Whether save for cloning. - */ - default boolean savePickClone() { - return true; - } - - /** - * Saves the contents of the block entity to a compound tag. - * - * @param tag The tag to save to. - */ - @MustBeInvokedByOverriders - void saveToItem(CompoundTag tag); - - /** - * Loads the contents of the block entity from a compound tag. - */ - @MustBeInvokedByOverriders - void loadFromItem(CompoundTag tag); -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java index a58e2e150a3..faa4f729724 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java @@ -27,8 +27,7 @@ import brachy.modularui.widgets.slot.ItemSlot; import lombok.Getter; -public class CrateMachine extends MetaMachine implements IMuiMachine, - IDropSaveMachine { +public class CrateMachine extends MetaMachine implements IMuiMachine { @Getter private final Material material; @@ -105,8 +104,8 @@ public InteractionResult onUseWithItem(ExtendedUseOnContext context) { } @Override - public void saveToItem(CompoundTag tag) { - if (isTaped) tag.put("inventory", inventory.storage.serializeNBT()); + public void saveToItem(CompoundTag tag, boolean clone) { + if (isTaped && !clone) tag.put("inventory", inventory.storage.serializeNBT()); } @Override @@ -115,9 +114,4 @@ public void loadFromItem(CompoundTag tag) { this.inventory.storage.deserializeNBT(tag.getCompound("inventory")); } } - - @Override - public boolean saveBreak() { - return isTaped; - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java index 2b00a9aea46..f55af986048 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java @@ -68,7 +68,7 @@ private void setItemsPerCycle(int value) { } @Override - public void saveToItem(CompoundTag tag) { + public void saveToItem(CompoundTag tag, boolean clone) { tag.putInt("itemsPerCycle", itemsPerCycle); tag.putInt("ticksPerCycle", ticksPerCycle); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java index 36ca4d81a53..8e86d233121 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java @@ -77,7 +77,7 @@ private void setmBPerCycle(int value) { } @Override - public void saveToItem(CompoundTag tag) { + public void saveToItem(CompoundTag tag, boolean clone) { tag.putInt("mBPerCycle", mBPerCycle); tag.putInt("ticksPerCycle", ticksPerCycle); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java index f9e3dded3ec..a6c4f7d420e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IDropSaveMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; @@ -29,7 +28,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class DrumMachine extends MetaMachine implements IDropSaveMachine { +public class DrumMachine extends MetaMachine { @Getter private final int maxStoredFluids; @@ -96,7 +95,8 @@ public void onUnload() { ////////////////////////////////////// @Override - public void saveToItem(CompoundTag tag) { + public void saveToItem(CompoundTag tag, boolean clone) { + if (clone || stored.isEmpty()) return; tag.put("Fluid", stored.writeToNBT(new CompoundTag())); } @@ -109,11 +109,6 @@ public void loadFromItem(CompoundTag tag) { cache.getStorages()[0].setFluid(stored.copy()); } - @Override - public boolean savePickClone() { - return false; - } - @Override public InteractionResult onUseWithItem(ExtendedUseOnContext context) { if (!isRemote()) { @@ -129,9 +124,4 @@ protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { autoOutput.setAllowAutoOutputItems(!autoOutput.isAutoOutputItems()); return InteractionResult.SUCCESS; } - - @Override - public boolean saveBreak() { - return !stored.isEmpty(); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java index a758496f203..552cb26515e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.TieredMachine; -import com.gregtechceu.gtceu.api.machine.feature.IDropSaveMachine; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; @@ -55,7 +54,7 @@ import java.util.function.Predicate; public class QuantumChestMachine extends TieredMachine implements IControllable, - IDropSaveMachine, IMuiMachine { + IMuiMachine { /** * Sourced from FunctionalStorage's @@ -114,17 +113,8 @@ protected void onItemChanged() { } @Override - public boolean savePickClone() { - return false; - } - - @Override - public boolean saveBreak() { - return !stored.isEmpty(); - } - - @Override - public void saveToItem(CompoundTag tag) { + public void saveToItem(CompoundTag tag, boolean clone) { + if (clone || stored.isEmpty()) return; tag.put("stored", stored.save(new CompoundTag())); tag.putLong("storedAmount", storedAmount); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java index 6a56c8400d6..3dc42fdcb30 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.*; -import com.gregtechceu.gtceu.api.machine.feature.IDropSaveMachine; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; @@ -51,7 +50,7 @@ import java.util.function.Predicate; public class QuantumTankMachine extends TieredMachine implements IControllable, - IDropSaveMachine, IMuiMachine { + IMuiMachine { public static Object2LongMap TANK_CAPACITY = new Object2LongArrayMap<>(); @@ -108,16 +107,6 @@ protected void onFluidChanged() { } } - @Override - public boolean savePickClone() { - return false; - } - - @Override - public boolean saveBreak() { - return !stored.isEmpty(); - } - ////////////////////////////////////// // ****** Capability ********// ////////////////////////////////////// @@ -188,7 +177,8 @@ public FluidStack getLockedFluid() { } @Override - public void saveToItem(CompoundTag tag) { + public void saveToItem(CompoundTag tag, boolean clone) { + if (clone || stored.isEmpty()) return; tag.put("stored", stored.writeToNBT(new CompoundTag())); tag.putLong("storedAmount", storedAmount); } From 5fed085495862cce4943a910f9cbcbba4da67ad2 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 9 May 2026 12:47:04 +1000 Subject: [PATCH 05/12] add generic arg to machine instance factory --- .../gtceu/api/machine/MachineDefinition.java | 7 +---- .../api/machine/MachineInstanceFactory.java | 26 ++++++++++++++++--- .../registry/registrate/MachineBuilder.java | 13 ++++++---- 3 files changed, 31 insertions(+), 15 deletions(-) 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 ff57306e85e..0b7c14e9360 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -32,7 +32,6 @@ import lombok.Setter; import lombok.experimental.Accessors; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.EnumMap; @@ -61,7 +60,7 @@ public class MachineDefinition implements Supplier { private Supplier> blockEntityTypeSupplier; @Getter @Setter - private @NotNull GTRecipeType @NotNull [] recipeTypes; + private GTRecipeType [] recipeTypes; @Getter @Setter private int tier; @@ -74,19 +73,15 @@ public class MachineDefinition implements Supplier { @Getter @Setter private boolean alwaysTryModifyRecipe; - @NotNull @Getter @Setter private BiPredicate beforeWorking = (machine, recipe) -> true; - @NotNull @Getter @Setter private Predicate onWorking = (machine) -> true; - @NotNull @Getter @Setter private Consumer onWaiting = (machine) -> {}; - @NotNull @Getter @Setter private Consumer afterWorking = (machine) -> {}; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java index c9b8ccd5ed1..485df276ec7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java @@ -2,13 +2,31 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import java.util.function.Consumer; + @FunctionalInterface -public interface MachineInstanceFactory { +public interface MachineInstanceFactory { + + T buildMachine(BlockEntityCreationInfo info); - MetaMachine buildMachine(BlockEntityCreationInfo info); + default MachineInstanceFactory andThen(Consumer modifier) { + return (info) -> { + T machine = this.buildMachine(info); + modifier.accept(machine); + return machine; + }; + } @FunctionalInterface - interface Tiered { - MetaMachine buildMachine(BlockEntityCreationInfo info, int tier); + interface Tiered { + T buildMachine(BlockEntityCreationInfo info, int tier); + + default Tiered andThen(Consumer modifier) { + return (info, tier) -> { + T machine = buildMachine(info, tier); + modifier.accept(machine); + return machine; + }; + } } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java index c42ede0f653..4176353d601 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; @@ -89,7 +90,7 @@ public class MachineBuilder blockFactory; protected final BiFunction itemFactory; - protected final MachineInstanceFactory blockEntityFactory; + protected final MachineInstanceFactory instanceFactory; protected final Function definition; @Nullable @@ -159,13 +160,13 @@ public MachineBuilder(GTRegistrate registrate, String name, Function definition, BiFunction blockFactory, BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { + MachineInstanceFactory instanceFactory) { super(new ResourceLocation(registrate.getModid(), name)); this.registrate = registrate; this.name = name; this.blockFactory = blockFactory; this.itemFactory = itemFactory; - this.blockEntityFactory = blockEntityFactory; + this.instanceFactory = instanceFactory; this.definition = definition; } @@ -652,6 +653,7 @@ protected void setupStateDefinition(MachineDefinition definition) { definition.registerDefaultState(defaultState); } + @HideFromJS public DEFINITION register() { this.registrate.object(name); @@ -680,7 +682,7 @@ public DEFINITION register() { var blockEntityBuilder = registrate .blockEntity( - (type, pos, state) -> blockEntityFactory.buildMachine(new BlockEntityCreationInfo(type, pos, state))) + (type, pos, state) -> instanceFactory.buildMachine(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) .validBlock(block); if (hasBER) { @@ -733,7 +735,8 @@ public DEFINITION register() { @FunctionalInterface public interface ModelInitializer { - void configureModel(DataGenContext context, GTBlockstateProvider provider, + void configureModel(DataGenContext context, + GTBlockstateProvider provider, MachineModelBuilder builder); default ModelInitializer andThen(ModelInitializer after) { From 29b1d71490e14b19c539512d73d1588b514ec206 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 9 May 2026 13:34:13 +1000 Subject: [PATCH 06/12] add machine class generic arg to builders & condense hpca machine classes --- docs/content/Modpacks/Changes/v8.0.0.md | 2 +- .../api/machine/MachineInstanceFactory.java | 5 + .../machine/MultiblockMachineDefinition.java | 2 - .../api/registry/registrate/GTRegistrate.java | 30 +-- .../registry/registrate/MachineBuilder.java | 175 +++++++++--------- .../registrate/MultiblockMachineBuilder.java | 29 +-- .../api/registry/registrate/package-info.java | 4 +- .../gtceu/common/data/GTMachines.java | 4 +- .../common/data/machines/GTMachineUtils.java | 55 +++--- .../data/machines/GTResearchMachines.java | 32 ++-- .../machine/GTMachineInstanceFactories.java | 51 +++++ .../machine/MachineInstanceFactories.java | 16 -- .../electric/research/HPCAMachine.java | 8 +- .../part/hpca/HPCABridgePartMachine.java | 31 ---- .../part/hpca/HPCAComponentPartMachine.java | 34 +++- .../part/hpca/HPCAComputationPartMachine.java | 45 ----- .../part/hpca/HPCACoolerPartMachine.java | 40 ---- .../part/hpca/HPCAEmptyPartMachine.java | 30 --- .../machine/KJSSteamMachineBuilder.java | 4 +- .../machine/KJSTieredMachineBuilder.java | 12 +- .../machine/KJSTieredMultiblockBuilder.java | 10 +- .../machine/KJSWrappingMultiblockBuilder.java | 4 +- 22 files changed, 267 insertions(+), 356 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index c8ad53df433..45bae3f1ffa 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -91,7 +91,7 @@ The constructors for a large number of machines have changed in order to simply - `Int2IntFunction tankScalingFunction` Fluid tank capacity scaling function. #### `WorkableMultiblockMachine`, `WorkableElectricMultiblockMachine` and `SteamWorkableMachine` - Removed `createRecipeLogic` method -- Constructor now has an optional `Supplier` argument, defaults to the standard `RecipeLogic` class +- Constructor now has an optional `RecipeLogic` argument, defaults to the standard `RecipeLogic` class #### IMPORTANT MIGRATION NOTE: diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java index 485df276ec7..b8eb7f39ef8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java @@ -29,4 +29,9 @@ default Tiered andThen(Consumer modifier) { }; } } + + @FunctionalInterface + interface Steam { + T buildMachine(BlockEntityCreationInfo info, boolean isHighPressure); + } } 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 faebe83421d..33034bdbf16 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java @@ -13,7 +13,6 @@ import it.unimi.dsi.fastutil.ints.IntArrayList; import lombok.Getter; -import lombok.NonNull; import lombok.Setter; import org.apache.commons.lang3.function.TriFunction; import org.jetbrains.annotations.Nullable; @@ -30,7 +29,6 @@ public class MultiblockMachineDefinition extends MachineDefinition { private boolean generator; @Setter @Getter - @NonNull private Supplier patternFactory; @Setter @Getter 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 8accf1b59b7..75be4996b92 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 @@ -6,7 +6,9 @@ import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; +import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.registrate.forge.GTFluidBuilder; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; @@ -39,7 +41,6 @@ import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullFunction; import com.tterrag.registrate.util.nullness.NonNullSupplier; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.IdentityHashMap; @@ -70,7 +71,6 @@ public static IGTFluidBuilder fluid(GTRegistrate parent, Material material, Stri .setData(ProviderType.LANG, NonNullBiConsumer.noop())); } - @NotNull public static GTRegistrate create(String modId) { return new GTRegistrate(modId); } @@ -118,31 +118,31 @@ public IGTFluidBuilder createFluid(String name, String langKey, Material materia return fluid(this, material, name, langKey, stillTexture, flowingTexture); } - public MachineBuilder machine(String name, - Function definitionFactory, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { + public MachineBuilder machine(String name, + Function definitionFactory, + BiFunction blockFactory, + BiFunction itemFactory, + MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, definitionFactory, blockFactory, itemFactory, blockEntityFactory); } - public MachineBuilder machine(String name, - MachineInstanceFactory blockEntityFactory) { + public MachineBuilder machine(String name, + MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, MachineDefinition::new, MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } - public MultiblockMachineBuilder multiblock(String name, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { + public MultiblockMachineBuilder multiblock(String name, + BiFunction blockFactory, + BiFunction itemFactory, + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, blockFactory, itemFactory, blockEntityFactory); } - public MultiblockMachineBuilder multiblock(String name, - MachineInstanceFactory blockEntityFactory) { + public MultiblockMachineBuilder multiblock(String name, + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java index 4176353d601..055aed7f9ab 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java @@ -78,19 +78,19 @@ import static com.gregtechceu.gtceu.common.data.models.GTMachineModels.*; -@SuppressWarnings("unused") @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @RemapPrefixForJS("kjs$") @Accessors(chain = true, fluent = true) -public class MachineBuilder> +public class MachineBuilder> extends BuilderBase { protected final GTRegistrate registrate; protected final String name; + protected final BiFunction blockFactory; protected final BiFunction itemFactory; - protected final MachineInstanceFactory instanceFactory; + protected final MachineInstanceFactory instanceFactory; protected final Function definition; @Nullable @@ -103,6 +103,7 @@ public class MachineBuilder, @Nullable Comparable> modelProperties = new IdentityHashMap<>(); private VoxelShape shape = Shapes.block(); private RotationState rotationState = RotationState.NON_Y_AXIS; + /** * Whether this machine can be rotated or face upwards. */ @@ -160,7 +161,7 @@ public MachineBuilder(GTRegistrate registrate, String name, Function definition, BiFunction blockFactory, BiFunction itemFactory, - MachineInstanceFactory instanceFactory) { + MachineInstanceFactory instanceFactory) { super(new ResourceLocation(registrate.getModid(), name)); this.registrate = registrate; this.name = name; @@ -171,146 +172,146 @@ public MachineBuilder(GTRegistrate registrate, String name, } @SuppressWarnings("unchecked") - public TYPE getThis() { - return (TYPE) this; + public SELF getThis() { + return (SELF) this; } - public TYPE blockModel(NonNullBiConsumer, GTBlockstateProvider> blockModel) { + public SELF blockModel(NonNullBiConsumer, GTBlockstateProvider> blockModel) { this.blockModel = blockModel; return getThis(); } - public TYPE shape(VoxelShape shape) { + public SELF shape(VoxelShape shape) { this.shape = shape; return getThis(); } - public TYPE rotationState(RotationState rotationState) { + public SELF rotationState(RotationState rotationState) { this.rotationState = rotationState; return getThis(); } - public TYPE allowExtendedFacing(boolean allowExtendedFacing) { + public SELF allowExtendedFacing(boolean allowExtendedFacing) { this.allowExtendedFacing = allowExtendedFacing; return getThis(); } - public TYPE hasBER(boolean hasBER) { + public SELF hasBER(boolean hasBER) { this.hasBER = hasBER; return getThis(); } - public TYPE renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { + public SELF renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { this.renderMultiblockWorldPreview = renderMultiblockWorldPreview; return getThis(); } - public TYPE renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { + public SELF renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { this.renderMultiblockXEIPreview = renderMultiblockXEIPreview; return getThis(); } - public TYPE blockProp(NonNullUnaryOperator blockProp) { + public SELF blockProp(NonNullUnaryOperator blockProp) { this.blockProp = blockProp; return getThis(); } - public TYPE itemProp(NonNullUnaryOperator itemProp) { + public SELF itemProp(NonNullUnaryOperator itemProp) { this.itemProp = itemProp; return getThis(); } - public TYPE blockBuilder(Consumer> blockBuilder) { + public SELF blockBuilder(Consumer> blockBuilder) { this.blockBuilder = blockBuilder; return getThis(); } - public TYPE itemBuilder(Consumer> itemBuilder) { + public SELF itemBuilder(Consumer> itemBuilder) { this.itemBuilder = itemBuilder; return getThis(); } - public TYPE onBlockEntityRegister(NonNullConsumer> onBlockEntityRegister) { + public SELF onBlockEntityRegister(NonNullConsumer> onBlockEntityRegister) { this.onBlockEntityRegister = onBlockEntityRegister; return getThis(); } - public TYPE tier(int tier) { + public SELF tier(int tier) { this.tier = tier; return getThis(); } - public TYPE recipeOutputLimits(Reference2IntMap> recipeOutputLimits) { + public SELF recipeOutputLimits(Reference2IntMap> recipeOutputLimits) { this.recipeOutputLimits = recipeOutputLimits; return getThis(); } - public TYPE paintingColor(int paintingColor) { + public SELF paintingColor(int paintingColor) { this.paintingColor = paintingColor; return getThis(); } - public TYPE itemColor(BiFunction itemColor) { + public SELF itemColor(BiFunction itemColor) { this.itemColor = itemColor; return getThis(); } - public TYPE tooltipBuilder(BiConsumer> tooltipBuilder) { + public SELF tooltipBuilder(BiConsumer> tooltipBuilder) { this.tooltipBuilder = tooltipBuilder; return getThis(); } - public TYPE alwaysTryModifyRecipe(boolean alwaysTryModifyRecipe) { + public SELF alwaysTryModifyRecipe(boolean alwaysTryModifyRecipe) { this.alwaysTryModifyRecipe = alwaysTryModifyRecipe; return getThis(); } - public TYPE beforeWorking(BiPredicate beforeWorking) { + public SELF beforeWorking(BiPredicate beforeWorking) { this.beforeWorking = beforeWorking; return getThis(); } - public TYPE onWorking(Predicate onWorking) { + public SELF onWorking(Predicate onWorking) { this.onWorking = onWorking; return getThis(); } - public TYPE onWaiting(Consumer onWaiting) { + public SELF onWaiting(Consumer onWaiting) { this.onWaiting = onWaiting; return getThis(); } - public TYPE afterWorking(Consumer afterWorking) { + public SELF afterWorking(Consumer afterWorking) { this.afterWorking = afterWorking; return getThis(); } - public TYPE regressWhenWaiting(boolean regressWhenWaiting) { + public SELF regressWhenWaiting(boolean regressWhenWaiting) { this.regressWhenWaiting = regressWhenWaiting; return getThis(); } - public TYPE allowCoverOnFront(boolean allowCoverOnFront) { + public SELF allowCoverOnFront(boolean allowCoverOnFront) { this.allowCoverOnFront = allowCoverOnFront; return getThis(); } - public TYPE appearance(Supplier appearance) { + public SELF appearance(Supplier appearance) { this.appearance = appearance; return getThis(); } - public TYPE ui(PanelFactory ui) { + public SELF ui(PanelFactory ui) { this.ui = ui; return getThis(); } - public TYPE langValue(String langValue) { + public SELF langValue(String langValue) { this.langValue = langValue; return getThis(); } - public TYPE recipeType(GTRecipeType type) { + public SELF recipeType(GTRecipeType type) { // noinspection ConstantValue if (type == null) { GTCEu.LOGGER.error( @@ -324,7 +325,7 @@ public TYPE recipeType(GTRecipeType type) { } @Tolerate - public TYPE recipeTypes(GTRecipeType... types) { + public SELF recipeTypes(GTRecipeType... types) { List typeList = new ArrayList<>(); Collections.addAll(typeList, this.recipeTypes); @@ -352,37 +353,37 @@ protected void initRecipeMachineModelProperties(GTRecipeType type) { } } - public TYPE model(MachineBuilder.ModelInitializer model) { + public SELF model(MachineBuilder.ModelInitializer model) { this.model = model; return getThis(); } - public TYPE simpleModel(ResourceLocation modelName) { + public SELF simpleModel(ResourceLocation modelName) { return model(createBasicMachineModel(modelName)); } - public TYPE defaultModel() { + public SELF defaultModel() { return simpleModel(new ResourceLocation(registrate.getModid(), "block/machine/template/" + name)); } - public TYPE tieredHullModel(ResourceLocation model) { + public SELF tieredHullModel(ResourceLocation model) { return model(createTieredHullMachineModel(model)); } - public TYPE overlayTieredHullModel(String name) { + public SELF overlayTieredHullModel(String name) { modelProperty(GTMachineModelProperties.IS_FORMED, false); return overlayTieredHullModel(new ResourceLocation(registrate.getModid(), "block/machine/part/" + name)); } - public TYPE overlayTieredHullModel(ResourceLocation overlayModel) { + public SELF overlayTieredHullModel(ResourceLocation overlayModel) { return model(createOverlayTieredHullMachineModel(overlayModel)); } - public TYPE colorOverlayTieredHullModel(String overlay) { + public SELF colorOverlayTieredHullModel(String overlay) { return colorOverlayTieredHullModel(overlay, null, null); } - public TYPE colorOverlayTieredHullModel(String overlay, + public SELF colorOverlayTieredHullModel(String overlay, @Nullable String pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); @@ -394,33 +395,33 @@ public TYPE colorOverlayTieredHullModel(String overlay, return colorOverlayTieredHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } - public TYPE colorOverlayTieredHullModel(ResourceLocation overlay) { + public SELF colorOverlayTieredHullModel(ResourceLocation overlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); return colorOverlayTieredHullModel(overlay, null, null); } - public TYPE colorOverlayTieredHullModel(ResourceLocation overlay, + public SELF colorOverlayTieredHullModel(ResourceLocation overlay, @Nullable ResourceLocation pipeOverlay, @Nullable ResourceLocation emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_PAINTED, false); return model(createColorOverlayTieredHullMachineModel(overlay, pipeOverlay, emissiveOverlay)); } - public TYPE overlaySteamHullModel(String name) { + public SELF overlaySteamHullModel(String name) { modelProperty(GTMachineModelProperties.IS_FORMED, false); return overlaySteamHullModel(new ResourceLocation(registrate.getModid(), "block/machine/part/" + name)); } - public TYPE overlaySteamHullModel(ResourceLocation overlayModel) { + public SELF overlaySteamHullModel(ResourceLocation overlayModel) { modelProperty(GTMachineModelProperties.IS_STEEL_MACHINE, ConfigHolder.INSTANCE.machines.steelSteamMultiblocks); return model(createOverlaySteamHullMachineModel(overlayModel)); } - public TYPE colorOverlaySteamHullModel(String overlay) { + public SELF colorOverlaySteamHullModel(String overlay) { return colorOverlaySteamHullModel(overlay, (String) null, null); } - public TYPE colorOverlaySteamHullModel(String overlay, + public SELF colorOverlaySteamHullModel(String overlay, @Nullable String pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); @@ -432,7 +433,7 @@ public TYPE colorOverlaySteamHullModel(String overlay, return colorOverlaySteamHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } - public TYPE colorOverlaySteamHullModel(String overlay, + public SELF colorOverlaySteamHullModel(String overlay, @Nullable ResourceLocation pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); @@ -444,92 +445,92 @@ public TYPE colorOverlaySteamHullModel(String overlay, return colorOverlaySteamHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } - public TYPE colorOverlaySteamHullModel(ResourceLocation overlay) { + public SELF colorOverlaySteamHullModel(ResourceLocation overlay) { return colorOverlaySteamHullModel(overlay, null, null); } - public TYPE colorOverlaySteamHullModel(ResourceLocation overlay, + public SELF colorOverlaySteamHullModel(ResourceLocation overlay, @Nullable ResourceLocation pipeOverlay, @Nullable ResourceLocation emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_PAINTED, false); return model(createColorOverlaySteamHullMachineModel(overlay, pipeOverlay, emissiveOverlay)); } - public TYPE workableTieredHullModel(ResourceLocation workableModel) { + public SELF workableTieredHullModel(ResourceLocation workableModel) { modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE); return model(createWorkableTieredHullMachineModel(workableModel)); } - public TYPE simpleGeneratorModel(ResourceLocation workableModel) { + public SELF simpleGeneratorModel(ResourceLocation workableModel) { modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE); return model(createSimpleGeneratorModel(workableModel)); } - public TYPE workableSteamHullModel(boolean isHighPressure, ResourceLocation workableModel) { + public SELF workableSteamHullModel(boolean isHighPressure, ResourceLocation workableModel) { modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE); return model(createWorkableSteamHullMachineModel(isHighPressure, workableModel)); } - public TYPE workableCasingModel(ResourceLocation baseCasing, ResourceLocation workableModel) { + public SELF workableCasingModel(ResourceLocation baseCasing, ResourceLocation workableModel) { modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE); return model(createWorkableCasingMachineModel(baseCasing, workableModel)); } - public TYPE sidedOverlayCasingModel(ResourceLocation baseCasing, + public SELF sidedOverlayCasingModel(ResourceLocation baseCasing, ResourceLocation workableModel) { return model(createSidedOverlayCasingMachineModel(baseCasing, workableModel)); } - public TYPE sidedWorkableCasingModel(ResourceLocation baseCasing, + public SELF sidedWorkableCasingModel(ResourceLocation baseCasing, ResourceLocation workableModel) { modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE); return model(createSidedWorkableCasingMachineModel(baseCasing, workableModel)); } - public TYPE appearanceBlock(Supplier block) { + public SELF appearanceBlock(Supplier block) { appearance = () -> block.get().defaultBlockState(); return getThis(); } - public TYPE tooltips(@Nullable Component... components) { + public SELF tooltips(@Nullable Component... components) { return tooltips(Arrays.asList(components)); } - public TYPE tooltips(List components) { + public SELF tooltips(List components) { tooltips.addAll(components.stream().filter(Objects::nonNull).toList()); return getThis(); } - public TYPE conditionalTooltip(Component component, BooleanSupplier condition) { + public SELF conditionalTooltip(Component component, BooleanSupplier condition) { return conditionalTooltip(component, condition.getAsBoolean()); } - public TYPE conditionalTooltip(Component component, boolean condition) { + public SELF conditionalTooltip(Component component, boolean condition) { if (condition) tooltips.add(component); return getThis(); } - public TYPE abilities(PartAbility... abilities) { + public SELF abilities(PartAbility... abilities) { this.abilities = abilities; return getThis(); } - public TYPE themeId(String themeId) { + public SELF themeId(String themeId) { this.themeId = themeId; return getThis(); } - public TYPE themeId(Function themeId) { + public SELF themeId(Function themeId) { this.themeId = themeId.apply(tier); return getThis(); } - public TYPE modelProperty(Property property) { + public SELF modelProperty(Property property) { return modelProperty(property, null); } - public > TYPE modelProperty(Property property, + public > SELF modelProperty(Property property, @Nullable T defaultValue) { this.modelProperties.put(property, defaultValue); return getThis(); @@ -538,26 +539,26 @@ public > TYPE modelProperty(Property property, // KJS helpers for model property defaults // These don't need to be copied to the multiblock builder because KJS doesn't care about the return type downgrade - public TYPE kjs$modelPropertyBool(Property property, boolean defaultValue) { + public SELF kjs$modelPropertyBool(Property property, boolean defaultValue) { return modelProperty(property, defaultValue); } - public TYPE kjs$modelPropertyInt(Property property, int defaultValue) { + public SELF kjs$modelPropertyInt(Property property, int defaultValue) { return modelProperty(property, defaultValue); } - public & Comparable> TYPE kjs$modelPropertyEnum(Property property, + public & Comparable> SELF kjs$modelPropertyEnum(Property property, T defaultValue) { return modelProperty(property, defaultValue); } @Tolerate - public TYPE modelProperties(Property... properties) { + public SELF modelProperties(Property... properties) { return this.modelProperties(List.of(properties)); } @Tolerate - public TYPE modelProperties(Collection> properties) { + public SELF modelProperties(Collection> properties) { for (Property prop : properties) { this.modelProperties.put(prop, null); } @@ -565,54 +566,54 @@ public TYPE modelProperties(Collection> properties) { } @Tolerate - public TYPE modelProperties(Map, ? extends Comparable> properties) { + public SELF modelProperties(Map, ? extends Comparable> properties) { this.modelProperties.putAll(properties); return getThis(); } - public TYPE removeModelProperty(Property property) { + public SELF removeModelProperty(Property property) { this.modelProperties.remove(property); return getThis(); } - public TYPE clearModelProperties() { + public SELF clearModelProperties() { this.modelProperties.clear(); return getThis(); } - public TYPE recipeModifier(RecipeModifier recipeModifier) { + public SELF recipeModifier(RecipeModifier recipeModifier) { this.recipeModifier = recipeModifier instanceof RecipeModifierList list ? list : new RecipeModifierList(recipeModifier); return getThis(); } - public TYPE recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { + public SELF recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { this.alwaysTryModifyRecipe = alwaysTryModifyRecipe; return this.recipeModifier(recipeModifier); } - public TYPE recipeModifiers(RecipeModifier... recipeModifiers) { + public SELF recipeModifiers(RecipeModifier... recipeModifiers) { this.recipeModifier = new RecipeModifierList(recipeModifiers); return getThis(); } - public TYPE recipeModifiers(boolean alwaysTryModifyRecipe, + public SELF recipeModifiers(boolean alwaysTryModifyRecipe, RecipeModifier... recipeModifiers) { return this.recipeModifier(new RecipeModifierList(recipeModifiers), alwaysTryModifyRecipe); } - public TYPE noRecipeModifier() { + public SELF noRecipeModifier() { this.recipeModifier = new RecipeModifierList(RecipeModifier.NO_MODIFIER); this.alwaysTryModifyRecipe = false; return getThis(); } - public TYPE addOutputLimit(RecipeCapability capability, int limit) { + public SELF addOutputLimit(RecipeCapability capability, int limit) { this.recipeOutputLimits.put(capability, limit); return getThis(); } - public TYPE multiblockPreviewRenderer(boolean multiBlockWorldPreview, + public SELF multiblockPreviewRenderer(boolean multiBlockWorldPreview, boolean multiBlockXEIPreview) { this.renderMultiblockWorldPreview = multiBlockWorldPreview; this.renderMultiblockXEIPreview = multiBlockXEIPreview; @@ -772,7 +773,7 @@ default ModelInitializer compose(UnaryOperator BlockBuilder> makeBlockBuilder(MachineBuilder builder, + public static BlockBuilder> makeBlockBuilder(MachineBuilder builder, DEFINITION definition) { return builder.registrate.block(properties -> makeBlock(builder, definition, properties)) .color(() -> () -> MetaMachineBlock::colorTinted) @@ -784,7 +785,7 @@ protected static class BlockBuilderWrapper { .onRegister(b -> Arrays.stream(builder.abilities).forEach(a -> a.register(builder.tier, b))); } - private static Block makeBlock(MachineBuilder builder, DEFINITION definition, + private static Block makeBlock(MachineBuilder builder, DEFINITION definition, BlockBehaviour.Properties properties) { MachineDefinition.setBuilt(definition); var b = builder.blockFactory.apply(properties, definition); @@ -795,7 +796,7 @@ private static Block makeBlock(MachineBui protected static class ItemBuilderWrapper { - public static ItemBuilder> makeItemBuilder(MachineBuilder builder, + public static ItemBuilder> makeItemBuilder(MachineBuilder builder, BlockEntry block) { return builder.registrate .item(properties -> builder.itemFactory.apply((MetaMachineBlock) block.get(), properties)) @@ -812,7 +813,7 @@ protected static class ItemBuilderWrapper { protected static final class KJSCallWrapper { public static void generateAssetJsons(@Nullable AssetJsonGenerator generator, - MachineBuilder builder, + MachineBuilder builder, D definition) { if (builder.model() == null && builder.blockModel() == null) return; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java index 58ae002e141..4f163bfac2c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java @@ -34,8 +34,8 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @Accessors(chain = true, fluent = true) -public class MultiblockMachineBuilder> extends MachineBuilder { +public class MultiblockMachineBuilder> extends MachineBuilder { private boolean generator; private Function pattern; @@ -47,13 +47,14 @@ public class MultiblockMachineBuilder> recoveryItems = new ArrayList<>(); private Function> partSorter = (c) -> (a, b) -> 0; private TriFunction partAppearance; + @Getter private BiConsumer> additionalDisplay = (m, l) -> {}; public MultiblockMachineBuilder(GTRegistrate registrate, String name, BiFunction blockFactory, BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { super(registrate, name, (loc -> (DEFINITION) new MultiblockMachineDefinition(loc)), blockFactory, itemFactory, blockEntityFactory); @@ -63,59 +64,59 @@ public MultiblockMachineBuilder(GTRegistrate registrate, String name, modelProperty(GTMachineModelProperties.IS_FORMED, false); } - public TYPE generator(boolean generator) { + public SELF generator(boolean generator) { this.generator = generator; return getThis(); } - public TYPE pattern(Function pattern) { + public SELF pattern(Function pattern) { this.pattern = pattern; return getThis(); } - public TYPE allowFlip(boolean allowFlip) { + public SELF allowFlip(boolean allowFlip) { this.allowFlip = allowFlip; return getThis(); } - public TYPE partSorter(Function> partSorter) { + public SELF partSorter(Function> partSorter) { this.partSorter = partSorter; return getThis(); } - public TYPE partAppearance(TriFunction partAppearance) { + public SELF partAppearance(TriFunction partAppearance) { this.partAppearance = partAppearance; return getThis(); } - public TYPE additionalDisplay(BiConsumer> additionalDisplay) { + public SELF additionalDisplay(BiConsumer> additionalDisplay) { this.additionalDisplay = additionalDisplay; return getThis(); } - public TYPE shapeInfo(Function shape) { + public SELF shapeInfo(Function shape) { this.shapeInfos.add(d -> List.of(shape.apply(d))); return getThis(); } - public TYPE shapeInfos(Function> shapes) { + public SELF shapeInfos(Function> shapes) { this.shapeInfos.add(shapes); return getThis(); } - public TYPE recoveryItems(Supplier items) { + public SELF recoveryItems(Supplier items) { this.recoveryItems.add(() -> Arrays.stream(items.get()).map(ItemLike::asItem).map(Item::getDefaultInstance) .toArray(ItemStack[]::new)); return getThis(); } - public TYPE recoveryStacks(Supplier stacks) { + public SELF recoveryStacks(Supplier stacks) { this.recoveryItems.add(stacks); return getThis(); } @Tolerate - public TYPE partSorter(Comparator sorter) { + public SELF partSorter(Comparator sorter) { this.partSorter = $ -> sorter; return getThis(); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java index fc849e250f0..5ea07c7de6f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java @@ -1,7 +1,7 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault +@NotNullByDefault package com.gregtechceu.gtceu.api.registry.registrate; import net.minecraft.MethodsReturnNonnullByDefault; +import org.jetbrains.annotations.NotNullByDefault; import javax.annotation.ParametersAreNonnullByDefault; 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 40486739b9d..ce392eedaf5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -21,7 +21,7 @@ import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.data.machines.*; import com.gregtechceu.gtceu.common.data.models.GTModels; -import com.gregtechceu.gtceu.common.machine.MachineInstanceFactories; +import com.gregtechceu.gtceu.common.machine.GTMachineInstanceFactories; import com.gregtechceu.gtceu.common.machine.electric.*; import com.gregtechceu.gtceu.common.machine.multiblock.part.*; import com.gregtechceu.gtceu.common.machine.multiblock.part.monitor.AdvancedMonitorPartMachine; @@ -308,7 +308,7 @@ public class GTMachines { .register(); public static final MachineDefinition[] ROCK_CRUSHER = registerTieredMachines("rock_crusher", - MachineInstanceFactories.ROCK_CRUSHER, (tier, builder) -> builder + GTMachineInstanceFactories.ROCK_CRUSHER, (tier, builder) -> builder .langValue("%s Rock Crusher %s".formatted(VLVH[tier], VLVT[tier])) .ui(GTSingleblockMachinePanels.GENERAL_MACHINE) .rotationState(RotationState.NON_Y_AXIS) 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 b692d3e7557..d22d3f6a3d3 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 @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -202,17 +201,17 @@ public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate .register(); } - public static MachineDefinition[] registerTieredMachines(String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MachineDefinition> builder, + public static MachineDefinition[] registerTieredMachines(String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MachineDefinition> builder, int... tiers) { return registerTieredMachines(REGISTRATE, name, factory, builder, tiers); } - public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate, + public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate, String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MachineDefinition> builder, + MachineInstanceFactory.Tiered factory, + BiFunction, MachineDefinition> builder, int... tiers) { MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; for (int tier : tiers) { @@ -225,21 +224,21 @@ public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate return definitions; } - public static Pair registerSteamMachines(String name, - BiFunction factory, - BiFunction, MachineDefinition> builder) { + public static Pair registerSteamMachines(String name, + MachineInstanceFactory.Steam factory, + BiFunction, MachineDefinition> builder) { return registerSteamMachines(REGISTRATE, name, factory, builder); } - public static Pair registerSteamMachines(GTRegistrate registrate, String name, - BiFunction factory, - BiFunction, MachineDefinition> builder) { + public static Pair registerSteamMachines(GTRegistrate registrate, String name, + MachineInstanceFactory.Steam factory, + BiFunction, MachineDefinition> builder) { MachineDefinition lowTier = builder.apply(false, - registrate.machine("lp_%s".formatted(name), holder -> factory.apply(holder, 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, - registrate.machine("hp_%s".formatted(name), holder -> factory.apply(holder, 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); @@ -617,7 +616,7 @@ public static MultiblockMachineDefinition registerMultiblockTank(String name, St Supplier casing, Supplier valve, @Nullable PropertyFluidFilter filter, - BiConsumer, ResourceLocation> rendererSetup) { + BiConsumer, ResourceLocation> rendererSetup) { return registerMultiblockTank(REGISTRATE, name, displayName, capacity, casing, valve, filter, rendererSetup); } @@ -626,8 +625,8 @@ public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate re Supplier casing, Supplier valve, @Nullable PropertyFluidFilter filter, - BiConsumer, ResourceLocation> rendererSetup) { - MultiblockMachineBuilder builder = registrate + BiConsumer, ResourceLocation> rendererSetup) { + MultiblockMachineBuilder builder = registrate .multiblock(name, holder -> new MultiblockTankMachine(holder, capacity, filter)) .langValue(displayName) .tooltips( @@ -661,14 +660,14 @@ public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate re } public static MachineDefinition registerTankValve(String name, String displayName, boolean isMetal, - BiConsumer, ResourceLocation> rendererSetup) { + BiConsumer, ResourceLocation> rendererSetup) { return registerTankValve(REGISTRATE, name, displayName, isMetal, rendererSetup); } public static MachineDefinition registerTankValve(GTRegistrate registrate, String name, String displayName, boolean isMetal, - BiConsumer, ResourceLocation> rendererSetup) { - MachineBuilder builder = registrate + BiConsumer, ResourceLocation> rendererSetup) { + MachineBuilder builder = registrate .machine(name, holder -> new TankValvePartMachine(holder, isMetal)) .langValue(displayName) .tooltips(Component.translatable("gtceu.machine.tank_valve.tooltip"), @@ -678,22 +677,22 @@ public static MachineDefinition registerTankValve(GTRegistrate registrate, Strin return builder.register(); } - public static MultiblockMachineDefinition[] registerTieredMultis(String name, - BiFunction factory, - BiFunction, MultiblockMachineDefinition> builder, + public static MultiblockMachineDefinition[] registerTieredMultis(String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MultiblockMachineDefinition> builder, int... tiers) { return registerTieredMultis(REGISTRATE, name, factory, builder, tiers); } - public static MultiblockMachineDefinition[] registerTieredMultis(GTRegistrate registrate, String name, - BiFunction factory, - BiFunction, MultiblockMachineDefinition> builder, + public static MultiblockMachineDefinition[] registerTieredMultis(GTRegistrate registrate, String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MultiblockMachineDefinition> builder, int... tiers) { MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate .multiblock(GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, - holder -> factory.apply(holder, tier)) + holder -> factory.buildMachine(holder, tier)) .tier(tier); definitions[tier] = builder.apply(tier, register); } 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 7da3c465326..e8e2152bd2a 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 @@ -2,9 +2,9 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; @@ -17,6 +17,7 @@ import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; +import com.gregtechceu.gtceu.common.machine.GTMachineInstanceFactories; import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.DataBankMachine; import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.HPCAMachine; import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.NetworkSwitchMachine; @@ -36,12 +37,9 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; import java.util.function.BiConsumer; -import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @@ -118,9 +116,7 @@ public class GTResearchMachines { .modelProperty(IS_FORMED, false) .modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE) .model(createWorkableTieredHullMachineModel(GTCEu.id("block/machines/object_holder")) - .andThen((ctx, prov, model) -> { - model.addReplaceableTextures("bottom", "top", "side"); - })) + .andThen((ctx, prov, model) -> model.addReplaceableTextures("bottom", "top", "side"))) .register(); public static final MachineDefinition DATA_BANK = REGISTRATE.multiblock("data_bank", DataBankMachine::new) @@ -387,12 +383,13 @@ public class GTResearchMachines { public static final MachineDefinition HPCA_EMPTY_COMPONENT = registerHPCAPart( "hpca_empty_component", "Empty HPCA Component", - HPCAEmptyPartMachine::new, "empty", false) + GTMachineInstanceFactories.HPCA_EMPTY, "empty", false) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); + public static final MachineDefinition HPCA_COMPUTATION_COMPONENT = registerHPCAPart( "hpca_computation_component", "HPCA Computation Component", - holder -> new HPCAComputationPartMachine(holder, false), "computation", false) + GTMachineInstanceFactories.HPCA_COMPUTATION, "computation", false) .tooltips( Component.translatable("gtceu.machine.hpca.component_general.upkeep_eut", GTValues.VA[GTValues.EV]), Component.translatable("gtceu.machine.hpca.component_general.max_eut", GTValues.VA[GTValues.LuV]), @@ -403,7 +400,7 @@ public class GTResearchMachines { .register(); public static final MachineDefinition HPCA_ADVANCED_COMPUTATION_COMPONENT = registerHPCAPart( "hpca_advanced_computation_component", "HPCA Advanced Computation Component", - holder -> new HPCAComputationPartMachine(holder, true), "advanced_computation", true) + GTMachineInstanceFactories.HPCA_COMPUTATION_ADVANCED, "advanced_computation", true) .tooltips( Component.translatable("gtceu.machine.hpca.component_general.upkeep_eut", GTValues.VA[GTValues.IV]), Component.translatable("gtceu.machine.hpca.component_general.max_eut", GTValues.VA[GTValues.ZPM]), @@ -414,14 +411,14 @@ public class GTResearchMachines { .register(); public static final MachineDefinition HPCA_HEAT_SINK_COMPONENT = registerHPCAPart( "hpca_heat_sink_component", "HPCA Heat Sink Component", - holder -> new HPCACoolerPartMachine(holder, false), "heat_sink", false) + GTMachineInstanceFactories.HPCA_COOLER, "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( "hpca_active_cooler_component", "HPCA Active Cooling Component", - holder -> new HPCACoolerPartMachine(holder, true), "active_cooler", true) + GTMachineInstanceFactories.HPCA_COOLER_ADVANCED, "active_cooler", true) .tooltips(Component.translatable("gtceu.machine.hpca.component_general.max_eut", GTValues.VA[GTValues.IV]), Component.translatable("gtceu.machine.hpca.component_type.cooler_active"), Component.translatable("gtceu.machine.hpca.component_type.cooler_active_coolant", @@ -431,15 +428,14 @@ public class GTResearchMachines { .register(); public static final MachineDefinition HPCA_BRIDGE_COMPONENT = registerHPCAPart( "hpca_bridge_component", "HPCA Bridge Component", - HPCABridgePartMachine::new, "bridge", false) + GTMachineInstanceFactories.HPCA_BRIDGE, "bridge", false) .tooltips(Component.translatable("gtceu.machine.hpca.component_type.bridge"), Component.translatable("gtceu.machine.hpca.component_general.max_eut", GTValues.VA[GTValues.IV]), Component.translatable("gtceu.part_sharing.disabled")) .register(); - @NotNull - private static MachineBuilder registerDataHatch(String name, String displayName, int tier, - Function constructor, + private static MachineBuilder registerDataHatch(String name, String displayName, int tier, + MachineInstanceFactory constructor, String model, PartAbility... abilities) { return REGISTRATE.machine(name, constructor) .langValue(displayName) @@ -449,8 +445,8 @@ public class GTResearchMachines { .overlayTieredHullModel(model); } - private static MachineBuilder registerHPCAPart(String name, String displayName, - Function constructor, + private static MachineBuilder registerHPCAPart(String name, String displayName, + MachineInstanceFactory constructor, String texture, boolean isAdvanced) { return REGISTRATE.machine(name, constructor) .langValue(displayName) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java b/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java new file mode 100644 index 00000000000..24dad0f61fd --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java @@ -0,0 +1,51 @@ +package com.gregtechceu.gtceu.common.machine; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; +import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; +import com.gregtechceu.gtceu.common.machine.multiblock.part.hpca.HPCAComponentPartMachine; +import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.NonExtendable +public interface GTMachineInstanceFactories { + + MachineInstanceFactory.Tiered ROCK_CRUSHER = (info, tier) -> { + var machine = new SimpleTieredMachine(info, tier); + machine.getEnvironmentalExplosionTrait().setEnableEnvironmentalExplosions(false); + return machine; + }; + + ///// HPCA stuff + + MachineInstanceFactory HPCA_EMPTY = (info) -> { + var hpcaTrait = new HPCAComponentTrait(0, 0, false, false); + return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_EMPTY_COMPONENT, GTGuiTextures.HPCA_EMPTY_COMPONENT, hpcaTrait); + }; + + MachineInstanceFactory HPCA_BRIDGE = (info) -> { + var hpcaTrait = new HPCAComponentTrait(GTValues.VA[GTValues.IV], GTValues.VA[GTValues.IV], false, true); + return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_BRIDGE_COMPONENT, GTGuiTextures.HPCA_BRIDGE_COMPONENT, hpcaTrait); + }; + + MachineInstanceFactory HPCA_COMPUTATION = (info) -> { + var hpcaTrait = HPCAComponentPartMachine.createHPCAComputationTrait(false); + return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_COMPUTATION_COMPONENT, GTGuiTextures.HPCA_DAMAGED_COMPUTATION_COMPONENT, hpcaTrait); + }; + + MachineInstanceFactory HPCA_COMPUTATION_ADVANCED = (info) -> { + var hpcaTrait = HPCAComponentPartMachine.createHPCAComputationTrait(true); + return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_ADVANCED_COMPUTATION_COMPONENT, GTGuiTextures.HPCA_DAMAGED_ADVANCED_COMPUTATION_COMPONENT, hpcaTrait); + }; + + MachineInstanceFactory HPCA_COOLER = (info) -> { + var hpcaTrait = HPCAComponentPartMachine.createHPCACoolerTrait(false); + return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_HEAT_SINK_COMPONENT, GTGuiTextures.HPCA_HEAT_SINK_COMPONENT, hpcaTrait); + }; + + MachineInstanceFactory HPCA_COOLER_ADVANCED = (info) -> { + var hpcaTrait = HPCAComponentPartMachine.createHPCACoolerTrait(true); + return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_ACTIVE_COOLER_COMPONENT, GTGuiTextures.HPCA_ACTIVE_COOLER_COMPONENT, hpcaTrait); + }; +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java b/src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java deleted file mode 100644 index ddfec4addb3..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/MachineInstanceFactories.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.gregtechceu.gtceu.common.machine; - -import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; -import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; -import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; -import org.jetbrains.annotations.ApiStatus; - -@ApiStatus.NonExtendable -public interface MachineInstanceFactories { - - MachineInstanceFactory.Tiered ROCK_CRUSHER = (info, tier) -> { - var machine = new SimpleTieredMachine(info, tier, GTMachineUtils.defaultTankSizeFunction); - machine.getEnvironmentalExplosionTrait().setEnableEnvironmentalExplosions(false); - return machine; - }; -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index 63fb624d87a..7ee5fe9bd43 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -427,8 +427,6 @@ public static class HPCAGridHandler implements ISyncManaged { // cached gui info // holding these values past the computation clear because GUI is too "late" to read the state in time @SyncToClient - private long cachedEUt; - @SyncToClient private int cachedCWUt; public HPCAGridHandler(@Nullable HPCAMachine controller) { @@ -472,8 +470,6 @@ public void tick() { cachedCWUt = allocatedCWUt; syncDataHolder.markClientSyncFieldDirty("cachedCWUt"); } - cachedEUt = getCurrentEUt(); - syncDataHolder.markClientSyncFieldDirty("cachedEUt"); if (allocatedCWUt != 0) { allocatedCWUt = 0; } @@ -795,12 +791,12 @@ public void clearClientComponents() { @Override public void markAsChanged() { - controller.markAsChanged(); + if (controller != null) controller.markAsChanged(); } @Override public void scheduleRenderUpdate() { - controller.scheduleRenderUpdate(); + if (controller != null) controller.scheduleRenderUpdate(); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java deleted file mode 100644 index 0faf181fb67..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCABridgePartMachine.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; - -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; -import com.gregtechceu.gtceu.common.mui.GTGuiTextures; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import brachy.modularui.api.drawable.IDrawable; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class HPCABridgePartMachine extends HPCAComponentPartMachine { - - public HPCABridgePartMachine(BlockEntityCreationInfo info) { - super(info, new HPCAComponentTrait(GTValues.VA[GTValues.IV], GTValues.VA[GTValues.IV], false, true)); - } - - @Override - public boolean isAdvanced() { - return true; - } - - @Override - public IDrawable getComponentIcon() { - return GTGuiTextures.HPCA_BRIDGE_COMPONENT; - } -} 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 5dea2a7c27c..730f79bf3f3 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 @@ -1,10 +1,13 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; +import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; +import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComputationProviderTrait; +import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCACoolantProviderTrait; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.item.ItemStack; @@ -17,20 +20,43 @@ @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public abstract class HPCAComponentPartMachine extends MultiblockPartMachine { +public class HPCAComponentPartMachine extends MultiblockPartMachine { @Getter protected final HPCAComponentTrait hpcaComponentTrait; + @Getter + protected final boolean isAdvanced; + protected final IDrawable componentIcon; + protected final IDrawable damagedComponentIcon; - public HPCAComponentPartMachine(BlockEntityCreationInfo info, + public HPCAComponentPartMachine(BlockEntityCreationInfo info, boolean isAdvanced, IDrawable hpcaComponentIcon, IDrawable hpcaComponentIconDamaged, HPCAComponentTrait hpcaTrait) { super(info); + this.isAdvanced = isAdvanced; + this.componentIcon = hpcaComponentIcon; + this.damagedComponentIcon = hpcaComponentIconDamaged; this.hpcaComponentTrait = attachTrait(hpcaTrait); } - public abstract boolean isAdvanced(); + public static HPCAComputationProviderTrait createHPCAComputationTrait(boolean isAdvanced) { + int upkeepEUt = GTValues.VA[isAdvanced ? GTValues.IV : GTValues.EV]; + int maxEUt = GTValues.VA[isAdvanced ? GTValues.ZPM : GTValues.LuV]; + int cooling = isAdvanced ? 4 : 2; + int cwu = isAdvanced ? 16 : 4; + return new HPCAComputationProviderTrait(upkeepEUt, maxEUt, true, false, cwu, cooling); + } - public abstract IDrawable getComponentIcon(); + public static HPCAComponentTrait createHPCACoolerTrait(boolean isAdvanced) { + int upkeepEU = isAdvanced ? GTValues.VA[GTValues.IV] : 0; + int coolingAmount = isAdvanced ? 2 : 1; + int maxCoolant = isAdvanced ? 8 : 0; + return new HPCACoolantProviderTrait(upkeepEU, upkeepEU, false, false, coolingAmount, maxCoolant, + isAdvanced); + } + + public IDrawable getComponentIcon() { + return hpcaComponentTrait.isDamaged() ? damagedComponentIcon : componentIcon; + } @Override public int getDefaultPaintingColor() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java deleted file mode 100644 index c4c12d679e3..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComputationPartMachine.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; - -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; -import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComputationProviderTrait; -import com.gregtechceu.gtceu.common.mui.GTGuiTextures; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import brachy.modularui.api.drawable.IDrawable; -import lombok.Getter; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class HPCAComputationPartMachine extends HPCAComponentPartMachine { - - @Getter - private final boolean advanced; - - public HPCAComputationPartMachine(BlockEntityCreationInfo info, boolean advanced) { - super(info, createHPCATrait(advanced)); - this.advanced = advanced; - } - - public static HPCAComponentTrait createHPCATrait(boolean isAdvanced) { - int upkeepEUt = GTValues.VA[isAdvanced ? GTValues.IV : GTValues.EV]; - int maxEUt = GTValues.VA[isAdvanced ? GTValues.ZPM : GTValues.LuV]; - int cooling = isAdvanced ? 4 : 2; - int cwu = isAdvanced ? 16 : 4; - return new HPCAComputationProviderTrait(upkeepEUt, maxEUt, true, false, cwu, cooling); - } - - @Override - public IDrawable getComponentIcon() { - if (hpcaComponentTrait.isDamaged()) { - return advanced ? GTGuiTextures.HPCA_DAMAGED_ADVANCED_COMPUTATION_COMPONENT : - GTGuiTextures.HPCA_DAMAGED_COMPUTATION_COMPONENT; - } - return advanced ? GTGuiTextures.HPCA_ADVANCED_COMPUTATION_COMPONENT : - GTGuiTextures.HPCA_COMPUTATION_COMPONENT; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java deleted file mode 100644 index 87bd24e861f..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCACoolerPartMachine.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; - -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; -import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCACoolantProviderTrait; -import com.gregtechceu.gtceu.common.mui.GTGuiTextures; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import brachy.modularui.api.drawable.IDrawable; -import lombok.Getter; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class HPCACoolerPartMachine extends HPCAComponentPartMachine { - - @Getter - private final boolean advanced; - - public HPCACoolerPartMachine(BlockEntityCreationInfo info, boolean advanced) { - super(info, createHPCATrait(advanced)); - this.advanced = advanced; - } - - public static HPCAComponentTrait createHPCATrait(boolean isAdvanced) { - int upkeepEU = isAdvanced ? GTValues.VA[GTValues.IV] : 0; - int coolingAmount = isAdvanced ? 2 : 1; - int maxCoolant = isAdvanced ? 8 : 0; - return new HPCACoolantProviderTrait(upkeepEU, upkeepEU, false, false, coolingAmount, maxCoolant, - isAdvanced); - } - - @Override - public IDrawable getComponentIcon() { - return advanced ? GTGuiTextures.HPCA_ACTIVE_COOLER_COMPONENT : GTGuiTextures.HPCA_HEAT_SINK_COMPONENT; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java deleted file mode 100644 index 543fa4a166b..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAEmptyPartMachine.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.gregtechceu.gtceu.common.machine.multiblock.part.hpca; - -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; -import com.gregtechceu.gtceu.common.mui.GTGuiTextures; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import brachy.modularui.api.drawable.IDrawable; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class HPCAEmptyPartMachine extends HPCAComponentPartMachine { - - public HPCAEmptyPartMachine(BlockEntityCreationInfo info) { - super(info, new HPCAComponentTrait(0, 0, false, false)); - } - - @Override - public boolean isAdvanced() { - return false; - } - - @Override - public IDrawable getComponentIcon() { - return GTGuiTextures.HPCA_EMPTY_COMPONENT; - } -} 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 410c7d86043..fe1dbf725e0 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 @@ -30,7 +30,7 @@ public class KJSSteamMachineBuilder extends BuilderBase { @Setter public transient SteamDefinitionFunction definition = (isHP, def) -> def.tier(isHP ? 1 : 0); - private transient MachineBuilder lowPressureBuilder = null, highPressureBuilder = null; + private transient MachineBuilder lowPressureBuilder = null, highPressureBuilder = null; private transient MachineDefinition hpValue = null; public KJSSteamMachineBuilder(ResourceLocation id) { @@ -104,6 +104,6 @@ public interface SteamCreationFunction { @FunctionalInterface public interface SteamDefinitionFunction { - void apply(boolean isHighPressure, MachineBuilder builder); + void apply(boolean isHighPressure, MachineBuilder builder); } } 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 ac1fa4bd609..9c0a5ef5962 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 @@ -29,7 +29,7 @@ @Accessors(fluent = true, chain = true) public class KJSTieredMachineBuilder extends BuilderBase { - private final MachineBuilder[] builders = new MachineBuilder[TIER_COUNT]; + private final MachineBuilder[] builders = new MachineBuilder[TIER_COUNT]; @Setter public transient int[] tiers = GTMachineUtils.ELECTRIC_TIERS; @@ -63,7 +63,7 @@ public KJSTieredMachineBuilder(ResourceLocation id, TieredCreationFunction machi public void generateAssetJsons(@Nullable AssetJsonGenerator generator) { super.generateAssetJsons(generator); for (int tier : this.tiers) { - MachineBuilder builder = this.builders[tier]; + MachineBuilder builder = this.builders[tier]; if (builder != null) { builder.generateAssetJsons(generator); } @@ -71,10 +71,10 @@ public void generateAssetJsons(@Nullable AssetJsonGenerator generator) { } @Override - public void generateLang(@NotNull LangEventJS lang) { + public void generateLang(LangEventJS lang) { super.generateLang(lang); for (int tier : this.tiers) { - MachineBuilder builder = this.builders[tier]; + MachineBuilder builder = this.builders[tier]; if (builder != null) { builder.generateLang(lang); } @@ -92,7 +92,7 @@ public void generateLang(@NotNull LangEventJS lang) { MachineDefinition[] definitions = new MachineDefinition[TIER_COUNT]; for (final int tier : tiers) { String tierName = VN[tier].toLowerCase(Locale.ROOT); - MachineBuilder builder = GTRegistration.REGISTRATE.machine( + MachineBuilder builder = GTRegistration.REGISTRATE.machine( String.format("%s_%s", tierName, this.id.getPath()), holder -> machine.create(holder, tier, tankScalingFunction)); @@ -133,6 +133,6 @@ public interface CreationFunction { @FunctionalInterface public interface DefinitionFunction { - void apply(int tier, MachineBuilder builder); + void apply(int tier, MachineBuilder builder); } } 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 4961497b932..30752a84860 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 @@ -26,7 +26,7 @@ @Accessors(fluent = true, chain = true) public class KJSTieredMultiblockBuilder extends BuilderBase { - private final MultiblockMachineBuilder[] builders = new MultiblockMachineBuilder[TIER_COUNT]; + private final MultiblockMachineBuilder[] builders = new MultiblockMachineBuilder[TIER_COUNT]; @Setter public transient int[] tiers = GTMachineUtils.ELECTRIC_TIERS; @@ -48,7 +48,7 @@ public KJSTieredMultiblockBuilder(ResourceLocation id, TieredCreationFunction ma public void generateAssetJsons(@Nullable AssetJsonGenerator generator) { super.generateAssetJsons(generator); for (int tier : this.tiers) { - MultiblockMachineBuilder builder = this.builders[tier]; + MultiblockMachineBuilder builder = this.builders[tier]; if (builder != null) { builder.generateAssetJsons(generator); } @@ -59,7 +59,7 @@ public void generateAssetJsons(@Nullable AssetJsonGenerator generator) { public void generateLang(LangEventJS lang) { super.generateLang(lang); for (int tier : tiers) { - MultiblockMachineBuilder builder = this.builders[tier]; + MultiblockMachineBuilder builder = this.builders[tier]; if (builder != null) { builder.generateLang(lang); } @@ -77,7 +77,7 @@ public void generateLang(LangEventJS lang) { MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[TIER_COUNT]; for (final int tier : tiers) { String tierName = VN[tier].toLowerCase(Locale.ROOT); - MultiblockMachineBuilder builder = GTRegistration.REGISTRATE.multiblock( + MultiblockMachineBuilder builder = GTRegistration.REGISTRATE.multiblock( String.format("%s_%s", tierName, this.id.getPath()), holder -> machine.create(holder, tier)); @@ -99,6 +99,6 @@ public interface TieredCreationFunction { @FunctionalInterface public interface DefinitionFunction { - void apply(int tier, MachineBuilder builder); + void apply(int tier, MachineBuilder builder); } } 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 dd460fae0e3..1688142a6c1 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 @@ -74,14 +74,14 @@ public MultiblockMachineDefinition register() { " With id " + tieredBuilder.id); } - public static MultiblockMachineBuilder createKJSMulti(ResourceLocation id) { + public static MultiblockMachineBuilder createKJSMulti(ResourceLocation id) { return new MultiblockMachineBuilder<>(GTRegistration.REGISTRATE, id.getPath(), MetaMachineBlock::new, MetaMachineItem::new, WorkableElectricMultiblockMachine::new); } - public static MultiblockMachineBuilder createKJSMulti(ResourceLocation id, + public static MultiblockMachineBuilder createKJSMulti(ResourceLocation id, KJSTieredMachineBuilder.CreationFunction machine) { return new MultiblockMachineBuilder<>(GTRegistration.REGISTRATE, id.getPath(), MetaMachineBlock::new, From 17b2af46b221947506db3c3c4f16715119b96619 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 9 May 2026 14:11:47 +1000 Subject: [PATCH 07/12] clean up some more singleblock machine constructors, add javadocs --- .../api/machine/SimpleGeneratorMachine.java | 8 +-- .../api/machine/SimpleTieredMachine.java | 6 +- .../api/machine/TieredEnergyMachine.java | 68 ++++++------------- .../api/machine/WorkableTieredMachine.java | 29 ++++++-- .../MultiblockControllerMachine.java | 2 +- .../multiblock/WorkableMultiblockMachine.java | 3 + .../machine/electric/BlockBreakerMachine.java | 2 +- .../machine/electric/ConverterMachine.java | 35 +++++----- .../machine/electric/FisherMachine.java | 2 +- .../electric/ItemCollectorMachine.java | 2 +- .../common/machine/electric/PumpMachine.java | 2 +- 11 files changed, 76 insertions(+), 83 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java index 8183c0a87c1..c6e64a4e63c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java @@ -24,7 +24,7 @@ public class SimpleGeneratorMachine extends WorkableTieredMachine { public SimpleGeneratorMachine(BlockEntityCreationInfo info, int tier, float hazardStrengthPerOperation, Int2IntFunction tankScalingFunction) { - super(info, tier, tankScalingFunction); + super(info, tier, true, tankScalingFunction); energyContainer.setSideOutputCondition(side -> !hasFrontFacing() || side == getFrontFacing()); this.hazardEmitter = attachTrait( @@ -38,12 +38,6 @@ public SimpleGeneratorMachine(BlockEntityCreationInfo info, int tier, Int2IntFun ////////////////////////////////////// // ***** Initialization ******// - ////////////////////////////////////// - - @Override - protected boolean isEnergyEmitter() { - return true; - } @Override public int tintColor(int index) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index 831b2934f86..ac84467828c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -17,7 +17,7 @@ public class SimpleTieredMachine extends WorkableTieredMachine { public SimpleTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { - super(info, tier, tankScalingFunction); + super(info, tier, false, tankScalingFunction); attachPersistentTrait("autoOutput", new AutoOutputTrait(List.of(exportItems), List.of(exportFluids))); attachPersistentTrait("circuit", new ProgrammableCircuitSlotTrait()); @@ -28,10 +28,6 @@ public SimpleTieredMachine(BlockEntityCreationInfo info, int tier) { this(info, tier, GTMachineUtils.defaultTankSizeFunction); } - ///////////////////////////////////// - // ****** RECIPE LOGIC *******// - ///////////////////////////////////// - @Override public long getDisplayRecipeVoltage() { return GTValues.V[this.tier]; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index bdcdeb674fc..9a3d475f283 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -11,8 +11,6 @@ import lombok.Getter; -import java.util.function.Function; - /** * A singleblock tiered machine with an energy container. */ @@ -25,6 +23,15 @@ public class TieredEnergyMachine extends TieredMachine { @Getter protected final EnvironmentalExplosionTrait environmentalExplosionTrait; + /** + * Creates a {@link TieredEnergyMachine} using the given energy container.
+ * + * + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine/voltage tier + * @param energyContainer The enegery container to attach + * @see NotifiableEnergyContainer + */ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, NotifiableEnergyContainer energyContainer) { super(info, tier); @@ -33,32 +40,21 @@ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, () -> energyContainer.getEnergyStored() > 0)); } - public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, - Function energyContainer) { - super(info, tier); - this.energyContainer = attachTrait(energyContainer.apply(this)); - environmentalExplosionTrait = attachTrait(new EnvironmentalExplosionTrait(tier, tier * 10, - () -> this.energyContainer.getEnergyStored() > 0)); - } - - public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { - super(info, tier); - - long tierVoltage = GTValues.V[tier]; - if (isEnergyEmitter()) { - energyContainer = attachTrait(NotifiableEnergyContainer.emitterContainer(tierVoltage * 64L, tierVoltage, - getMaxInputOutputAmperage())); - } else { - energyContainer = attachTrait(NotifiableEnergyContainer.receiverContainer(tierVoltage * 64L, tierVoltage, - getMaxInputOutputAmperage())); - } - environmentalExplosionTrait = attachTrait(new EnvironmentalExplosionTrait(tier, tier * 10, - () -> energyContainer.getEnergyStored() > 0)); + /** + * Creates a {@link TieredEnergyMachine} with a default energy container.
+ * Defaults to a container with a capacity of 64A @ the given voltage tier, and a max input/output amperage of 1A @ the given voltage tier. + * + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine/voltage tier + * @param emitsEnergy If the energy container should receive or emit energy. + * @see NotifiableEnergyContainer + */ + public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, boolean emitsEnergy) { + this(info, tier, emitsEnergy ? NotifiableEnergyContainer.emitterContainer(GTValues.V[tier] * 64L, GTValues.V[tier], + 1) : NotifiableEnergyContainer.receiverContainer(GTValues.V[tier] * 64L, GTValues.V[tier], + 1)); } - ////////////////////////////////////// - // ********** MISC ***********// - ////////////////////////////////////// @Override public int getAnalogOutputSignal() { long energyStored = energyContainer.getEnergyStored(); @@ -66,24 +62,4 @@ public int getAnalogOutputSignal() { float f = energyCapacity == 0L ? 0.0f : energyStored / (energyCapacity * 1.0f); return Mth.floor(f * 14.0f) + (energyStored > 0 ? 1 : 0); } - - /** - * Determines max input or output amperage used by this machine - * if emitter, it determines size of energy packets it will emit at once - * if receiver, it determines max input energy per request - * - * @return max amperage received or emitted by this machine - */ - protected long getMaxInputOutputAmperage() { - return 1L; - } - - /** - * Determines if this machine is in energy receiver or emitter mode - * - * @return true if machine emits energy to network, false it it accepts energy from network - */ - protected boolean isEnergyEmitter() { - return false; - } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java index 1ef33be41b7..6b4a5f4a326 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -58,11 +58,23 @@ public abstract class WorkableTieredMachine extends TieredEnergyMachine implemen protected boolean isMuffled; protected boolean previouslyMuffled = true; + /** + * Creates a {@link WorkableTieredMachine}. + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine tier. + * @param recipeLogic The recipe logic to use. + * @param importSlots The amount of item input slots this machine should have (can be 0). + * @param exportSlots The amount of item output slots this machine should have (can be 0). + * @param fluidImportSlots The amount of fluid input slots this machine should have (can be 0). + * @param fluidExportSlots The amount of fluid output slots this machine should have (can be 0). + * @param energyEmitter If this machine should input or output energy. + * @param tankScalingFunction The tank scaling function which determines the capaacity of fluid slots. + */ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, RecipeLogic recipeLogic, int importSlots, int exportSlots, - int fluidImportSlots, int fluidExportSlots, Int2IntFunction tankScalingFunction) { - super(info, tier); + int fluidImportSlots, int fluidExportSlots, boolean energyEmitter, Int2IntFunction tankScalingFunction) { + super(info, tier, energyEmitter); this.overclockTier = getMaxOverclockTier(); this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; @@ -83,8 +95,17 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, this.exportComputation = attachTrait(new NotifiableComputationContainer(IO.OUT, false)); } - public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { - super(info, tier); + /** + * Creates a {@link WorkableTieredMachine} with default settings.
+ * The amount of item and fluid input and output slots is determined by the machine's recipe type. + * + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine tier. + * @param energyEmitter If this machine should input or output energy. + * @param tankScalingFunction The tank scaling function which determines the capaacity of fluid slots. + */ + public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, boolean energyEmitter, Int2IntFunction tankScalingFunction) { + super(info, tier, energyEmitter); this.overclockTier = getMaxOverclockTier(); this.recipeTypes = getDefinition().getRecipeTypes(); this.activeRecipeType = 0; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java index 1d109f7d7ff..a7541a51740 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java @@ -38,7 +38,7 @@ import java.util.concurrent.locks.ReentrantLock; /** - * The base class for all multiblock controllers + * The base class for all multiblock controllers. */ public class MultiblockControllerMachine extends MetaMachine { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java index 12ebb955a68..3634435787b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java @@ -36,6 +36,9 @@ import java.util.*; +/** + * The base class for multiblocks with recipe logic. + */ public abstract class WorkableMultiblockMachine extends MultiblockControllerMachine implements IWorkableMultiController, IMufflableMachine { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java index 7680a742bbf..f20a188509a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java @@ -68,7 +68,7 @@ public class BlockBreakerMachine extends TieredEnergyMachine private boolean isWorkingEnabled = true; public BlockBreakerMachine(BlockEntityCreationInfo info, int tier) { - super(info, tier); + super(info, tier, false); this.inventorySize = (tier + 1) * (tier + 1); this.cache = attachTrait(createCacheItemHandler()); this.batterySlot = attachTrait(new BatterySlotTrait(energyContainer)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java index e50d7a9157d..42a3daaa716 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java @@ -4,12 +4,16 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; -import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; +import com.gregtechceu.gtceu.api.machine.TieredMachine; +import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.machine.trait.ConverterTrait; +import com.gregtechceu.gtceu.common.machine.trait.EnvironmentalExplosionTrait; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; +import lombok.Getter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -17,7 +21,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.BooleanProperty; import brachy.modularui.drawable.UITexture; import org.jetbrains.annotations.Nullable; @@ -28,12 +31,22 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class ConverterMachine extends TieredEnergyMachine { +public class ConverterMachine extends TieredMachine { - public static final BooleanProperty FE_TO_EU_PROPERTY = GTMachineModelProperties.IS_FE_TO_EU; + @SaveField + @SyncToClient + public final NotifiableEnergyContainer energyContainer; + + @Getter + protected final EnvironmentalExplosionTrait environmentalExplosionTrait; public ConverterMachine(BlockEntityCreationInfo info, int tier, int amps) { - super(info, tier, t -> new ConverterTrait((ConverterMachine) t, tier, amps)); + super(info, tier); + + energyContainer = attachTrait(new ConverterTrait(this, tier, amps)); + environmentalExplosionTrait = attachTrait(new EnvironmentalExplosionTrait(tier, tier * 10, + () -> energyContainer.getEnergyStored() > 0)); + } ////////////////////////////////////// @@ -101,14 +114,4 @@ public boolean isFacingValid(Direction facing) { } return super.sideTips(player, pos, state, toolTypes, side); } - - @Override - protected long getMaxInputOutputAmperage() { - return getConverterTrait().getAmps(); - } - - @Override - protected boolean isEnergyEmitter() { - return getConverterTrait().isFeToEu(); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index c5173eaaeaa..74dfd6abb51 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -109,7 +109,7 @@ public class FisherMachine extends TieredEnergyMachine public final AutoOutputTrait autoOutput; public FisherMachine(BlockEntityCreationInfo info, int tier) { - super(info, tier); + super(info, tier, false); this.inventorySize = (tier + 1) * (tier + 1); this.maxProgress = calcMaxProgress(tier); this.energyPerTick = GTValues.V[tier - 1]; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java index 6d45b35e080..4575fadba54 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java @@ -105,7 +105,7 @@ public class ItemCollectorMachine extends TieredEnergyMachine public final AutoOutputTrait autoOutput; public ItemCollectorMachine(BlockEntityCreationInfo info, int tier) { - super(info, tier); + super(info, tier, false); this.inventorySize = INVENTORY_SIZES[Mth.clamp(getTier(), 0, INVENTORY_SIZES.length - 1)]; this.energyPerTick = (long) BASE_EU_CONSUMPTION * (1L << (tier - 1)); this.output = attachTrait(createOutputItemHandler()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java index e4f97298aef..28cf2ce1b7d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java @@ -75,7 +75,7 @@ public class PumpMachine extends TieredEnergyMachine implements IMuiMachine { public final AutoOutputTrait autoOutput; public PumpMachine(BlockEntityCreationInfo info, int tier) { - super(info, tier); + super(info, tier, false); this.cache = attachTrait( new NotifiableFluidTank(1, 16 * FluidType.BUCKET_VOLUME * Math.max(1, getTier()), IO.NONE, IO.OUT)); From 22af07d1650067400b38d8b8e2c5546bafa2c232 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 9 May 2026 14:50:57 +1000 Subject: [PATCH 08/12] add ctor params for item bus/fluid hatch storages --- .../multiblock/part/DualHatchPartMachine.java | 15 ++++--- .../part/FluidHatchPartMachine.java | 10 +++++ .../multiblock/part/ItemBusPartMachine.java | 33 ++++++++------ .../multiblock/part/PumpHatchPartMachine.java | 29 +------------ .../part/ReservoirHatchPartMachine.java | 14 +----- .../part/SteamHatchPartMachine.java | 10 ++--- .../ae2/machine/MEBusPartMachine.java | 5 ++- .../ae2/machine/MEInputBusPartMachine.java | 13 +++--- .../ae2/machine/MEOutputBusPartMachine.java | 33 ++++++++------ .../ae2/machine/MEStockingBusPartMachine.java | 43 +++++++++++-------- 10 files changed, 102 insertions(+), 103 deletions(-) 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 4a89506a959..fbe7dfe9359 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 @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.mui.GTMuiMachineUtil; @@ -48,8 +49,9 @@ public class DualHatchPartMachine extends ItemBusPartMachine { private boolean hasItemHandler; public DualHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io) { - super(info, tier, io); - this.tank = attachTrait(new NotifiableFluidTank((int) Math.sqrt(getInventorySize()), + super(info, tier, io, new NotifiableItemStackHandler(getDualHatchInventorySize(tier), io)); + + this.tank = attachTrait(new NotifiableFluidTank((int) Math.sqrt(getDualHatchInventorySize(tier)), getTankCapacity(INITIAL_TANK_CAPACITY, getTier()), io)); } @@ -61,9 +63,8 @@ public static int getTankCapacity(int initialCapacity, int tier) { return initialCapacity * (1 << (tier - 6)); } - @Override - public int getInventorySize() { - return (int) Math.pow((getTier() - 4), 2); + public static int getDualHatchInventorySize(int tier) { + return (int) Math.pow((tier - 4), 2); } @Override @@ -163,9 +164,9 @@ public boolean swapIO() { public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyncManager syncManager, UISettings settings) { String slotGroupName = "inv_slot_group"; - SlotGroup slotGroup = new SlotGroup(slotGroupName, getInventorySize()); + SlotGroup slotGroup = new SlotGroup(slotGroupName, getDualHatchInventorySize(getTier())); mainWidget.child(SlotGroupWidget.builder() - .matrix(Arrays.stream(GTMuiMachineUtil.createSquareMatrix(getInventorySize(), 'I')) + .matrix(Arrays.stream(GTMuiMachineUtil.createSquareMatrix(getDualHatchInventorySize(getTier()), 'I')) .map(s -> s + 'F') .toArray(String[]::new)) .key('I', i -> { 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 a521d91210b..d7f14cfd0fb 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 @@ -83,6 +83,16 @@ public FluidHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, int circuitSlot.setEnabled(io == IO.IN); } + public FluidHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, NotifiableFluidTank fluidTank) { + super(info, tier, io); + this.slots = fluidTank.getTanks(); + this.tank = attachTrait(fluidTank); + + this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); + circuitSlot.setEnabled(io == IO.IN); + + } + ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// 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 a71b9376300..ab0806e6da9 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 @@ -53,10 +53,6 @@ public class ItemBusPartMachine extends TieredIOPartMachine @Getter @SaveField @SyncToClient - protected boolean circuitSlotEnabled; - @Getter - @SaveField - @SyncToClient private boolean isDistinct = false; @SaveField @SyncToClient @@ -67,9 +63,26 @@ public class ItemBusPartMachine extends TieredIOPartMachine @SaveField protected final ProgrammableCircuitSlotTrait circuitSlot; + /** + * Creates an item bus with the default number of slots + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine tier. + * @param io IO mode of this item bus. + */ public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io) { + this(info, tier, io, new NotifiableItemStackHandler(getInventorySize(tier), io)); + } + + /** + * Creates an item bus with a custom {@link NotifiableItemStackHandler}. + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine tier. + * @param io IO mode of this item bus. + * @param inventory The {@link NotifiableItemStackHandler} to attach + */ + public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io, NotifiableItemStackHandler inventory) { super(info, tier, io); - this.inventory = attachTrait(createInventory()); + this.inventory = attachTrait(inventory); this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); filterHandler = FilterHandlers.item(this); @@ -80,15 +93,11 @@ public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io) { // ***** Initialization ******// ////////////////////////////////////// - protected int getInventorySize() { - int sizeRoot = 1 + Math.min(9, getTier()); + protected static int getInventorySize(int tier) { + int sizeRoot = 1 + Math.min(9, tier); return sizeRoot * sizeRoot; } - protected NotifiableItemStackHandler createInventory() { - return new NotifiableItemStackHandler(getInventorySize(), io); - } - protected boolean matchesFilter(ItemStack stack) { if (filterHandler.isFilterPresent()) return filterHandler.getFilter().test(stack); @@ -231,7 +240,7 @@ public boolean swapIO() { @Override public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyncManager syncManager, UISettings settings) { - int rowSize = (int) Math.sqrt(getInventorySize()); + int rowSize = (int) Math.sqrt(getInventorySize(tier)); SlotGroup group = new SlotGroup("item_inv", rowSize, 0, true); mainWidget.child(new Grid() diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/PumpHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/PumpHatchPartMachine.java index 2d1ca82fe38..f9e17a5f451 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/PumpHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/PumpHatchPartMachine.java @@ -15,35 +15,10 @@ public class PumpHatchPartMachine extends FluidHatchPartMachine { public PumpHatchPartMachine(BlockEntityCreationInfo info) { - super(info, 0, IO.OUT, FluidType.BUCKET_VOLUME, 1); + super(info, 0, IO.OUT, new NotifiableFluidTank(1, FluidType.BUCKET_VOLUME, IO.OUT)); + tank.setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Water.getFluidTag())); } - @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots) { - return super.createTank(initialCapacity, slots) - .setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Water.getFluidTag())); - } - - /* - * @Override - * public ModularUI createUI(Player entityPlayer) { - * return new ModularUI(176, 166, this, entityPlayer) - * .background(GuiTextures.BACKGROUND) - * .widget(new ImageWidget(7, 16, 81, 55, GuiTextures.DISPLAY)) - * .widget(new LabelWidget(11, 20, "gtceu.gui.fluid_amount")) - * .widget(new LabelWidget(11, 30, () -> String.valueOf(tank.getFluidInTank(0).getAmount())) - * .setTextColor(-1).setDropShadow(true)) - * .widget(new LabelWidget(6, 6, getBlockState().getBlock().getDescriptionId())) - * .widget(new TankWidget(tank.getStorages()[0], 90, 35, true, io.support(IO.IN)) - * .setBackground(GuiTextures.FLUID_SLOT)) - * .widget(new ToggleButtonWidget(7, 53, 18, 18, - * GuiTextures.BUTTON_FLUID_OUTPUT, this::isWorkingEnabled, this::setWorkingEnabled) - * .setShouldUseBaseBackground() - * .setTooltipText("gtceu.gui.fluid_auto_input.tooltip")) - * .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), GuiTextures.SLOT, 7, 84, true)); - * } - */ - // By returning false here, we don't allow shift-clicking // with a screwdriver to swap the IO. @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java index fd9d4026875..b73782e44c7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java @@ -24,18 +24,8 @@ public class ReservoirHatchPartMachine extends FluidHatchPartMachine { public static final int FLUID_AMOUNT = 2_000_000_000; public ReservoirHatchPartMachine(BlockEntityCreationInfo info) { - super(info, GTValues.EV, IO.IN, FLUID_AMOUNT, 1); - } - - ////////////////////////////////// - // ****** Initialization ****** // - ////////////////////////////////// - - @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots) { - this.waterTank = new InfiniteWaterTank(initialCapacity); - // allow both importing and exporting from the tank - return new NotifiableFluidTank(Collections.singletonList(waterTank), io, IO.BOTH); + super(info, GTValues.EV, IO.IN, new NotifiableFluidTank(Collections.singletonList(new InfiniteWaterTank(FLUID_AMOUNT)), IO.IN, IO.BOTH)); + waterTank = (InfiniteWaterTank)tank.getStorages()[0]; } ////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java index 2e4f98f207a..08b343d8bd2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java @@ -18,14 +18,10 @@ public class SteamHatchPartMachine extends FluidHatchPartMachine { public static final int INITIAL_TANK_CAPACITY = 64 * FluidType.BUCKET_VOLUME; public SteamHatchPartMachine(BlockEntityCreationInfo info) { - super(info, 0, IO.IN, SteamHatchPartMachine.INITIAL_TANK_CAPACITY, 1); - circuitSlot.setEnabled(false); - } + super(info, 0, IO.IN, new NotifiableFluidTank(1, INITIAL_TANK_CAPACITY, IO.IN)); - @Override - protected NotifiableFluidTank createTank(int initialCapacity, int slots) { - return super.createTank(initialCapacity, slots) - .setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Steam.getFluidTag())); + tank.setFilter(fluidStack -> fluidStack.getFluid().is(GTMaterials.Steam.getFluidTag())); + circuitSlot.setEnabled(false); } // By returning false here, we don't allow shift-clicking diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java index f1c3ece8b61..1bf519a281b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.machine.multiblock.part.ItemBusPartMachine; @@ -34,8 +35,8 @@ public abstract class MEBusPartMachine extends ItemBusPartMachine implements IGr protected final IActionSource actionSource; - public MEBusPartMachine(BlockEntityCreationInfo info, IO io) { - super(info, GTValues.LuV, io); + public MEBusPartMachine(BlockEntityCreationInfo info, IO io, NotifiableItemStackHandler inventory) { + super(info, GTValues.LuV, io, inventory); this.nodeHolder = attachTrait(new GridNodeHolder(this)); this.actionSource = IActionSource.ofMachine(nodeHolder.getMainNode()::getNode); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java index 5338b1e8a20..f76b9af4b13 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java @@ -41,7 +41,12 @@ public class MEInputBusPartMachine extends MEBusPartMachine protected ExportOnlyAEItemList aeItemHandler; public MEInputBusPartMachine(BlockEntityCreationInfo info) { - super(info, IO.IN); + super(info, IO.IN, new ExportOnlyAEItemList(CONFIG_SIZE)); + aeItemHandler = (ExportOnlyAEItemList)getInventory(); + } + + public MEInputBusPartMachine(BlockEntityCreationInfo info, NotifiableItemStackHandler inventory) { + super(info, IO.IN, inventory); } ///////////////////////////////// @@ -53,12 +58,6 @@ public void onMachineDestroyed() { flushInventory(); } - @Override - protected NotifiableItemStackHandler createInventory() { - this.aeItemHandler = new ExportOnlyAEItemList(CONFIG_SIZE); - return this.aeItemHandler; - } - ///////////////////////////////// // ********** Sync ME *********// ///////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java index c4e65bc6760..fa31b945f66 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java @@ -10,6 +10,8 @@ import com.gregtechceu.gtceu.integration.ae2.gui.ScrollPreservingGrid; import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; +import lombok.Getter; +import lombok.Setter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; @@ -28,6 +30,7 @@ import brachy.modularui.widgets.TextWidget; import brachy.modularui.widgets.layout.Flow; import lombok.NoArgsConstructor; +import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; @@ -45,19 +48,14 @@ public class MEOutputBusPartMachine extends MEBusPartMachine { private KeyStorage internalBuffer; // Do not use KeyCounter, use our simple implementation public MEOutputBusPartMachine(BlockEntityCreationInfo info) { - super(info, IO.OUT); + super(info, IO.OUT, new InaccessibleInfiniteHandler()); + internalBuffer = ((InaccessibleInfiniteHandler)getInventory()).getInternalBuffer(); } ///////////////////////////////// // ***** Machine LifeCycle ****// ///////////////////////////////// - @Override - protected NotifiableItemStackHandler createInventory() { - this.internalBuffer = new KeyStorage(); - return new InaccessibleInfiniteHandler(); - } - @Override public void onMachineDestroyed() { var grid = getMainNode().getGrid(); @@ -131,13 +129,18 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn mainWidget.child(flow); } - private class InaccessibleInfiniteHandler extends NotifiableItemStackHandler { + private static class InaccessibleInfiniteHandler extends NotifiableItemStackHandler { + @Getter + private KeyStorage internalBuffer; public InaccessibleInfiniteHandler() { super(1, IO.OUT, IO.NONE, ItemStackHandlerDelegate::new); + internalBuffer = new KeyStorage(); + ((ItemStackHandlerDelegate)storage).setKeyStorage(internalBuffer); internalBuffer.setOnContentsChanged(this::onContentsChanged); } + @Override public List getContents() { return Collections.emptyList(); @@ -155,7 +158,11 @@ public boolean isEmpty() { } @NoArgsConstructor - private class ItemStackHandlerDelegate extends CustomItemStackHandler { + private static class ItemStackHandlerDelegate extends CustomItemStackHandler { + + @Getter + @Setter + @Nullable KeyStorage keyStorage = null; // Necessary for InaccessibleInfiniteHandler public ItemStackHandlerDelegate(Integer integer) { @@ -184,14 +191,16 @@ public void setStackInSlot(int slot, ItemStack stack) { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (keyStorage == null) return stack; + var key = AEItemKey.of(stack); int count = stack.getCount(); - long oldValue = internalBuffer.storage.getOrDefault(key, 0); + long oldValue = keyStorage.storage.getOrDefault(key, 0); long changeValue = Math.min(Long.MAX_VALUE - oldValue, count); if (changeValue > 0) { if (!simulate) { - internalBuffer.storage.put(key, oldValue + changeValue); - internalBuffer.onChanged(); + keyStorage.storage.put(key, oldValue + changeValue); + keyStorage.onChanged(); } return stack.copyWithCount((int) (count - changeValue)); } else { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java index 9a0f494b651..1bf707c8288 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java @@ -3,10 +3,8 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; -import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.machine.feature.multiblock.IMEStockingPart; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemList; @@ -33,6 +31,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Comparator; +import java.util.Objects; import java.util.PriorityQueue; import java.util.function.Predicate; @@ -60,8 +59,10 @@ public class MEStockingBusPartMachine extends MEInputBusPartMachine implements I private Predicate autoPullTest; public MEStockingBusPartMachine(BlockEntityCreationInfo info) { - super(info); + super(info, new ExportOnlyAEStockingItemList(CONFIG_SIZE)); this.autoPullTest = $ -> false; + this.aeItemHandler = (ExportOnlyAEItemList)getInventory(); + ((ExportOnlyAEStockingItemList)getInventory()).setStockingBusPartMachine(this); } ///////////////////////////////// @@ -80,12 +81,6 @@ public void removedFromController(MultiblockControllerMachine controller) { super.removedFromController(controller); } - @Override - protected NotifiableItemStackHandler createInventory() { - this.aeItemHandler = new ExportOnlyAEStockingItemList(CONFIG_SIZE); - return this.aeItemHandler; - } - ///////////////////////////////// // ********** Sync ME *********// ///////////////////////////////// @@ -297,15 +292,25 @@ protected void readConfigFromTag(CompoundTag tag) { super.readConfigFromTag(tag); } - private class ExportOnlyAEStockingItemList extends ExportOnlyAEItemList { + private static class ExportOnlyAEStockingItemList extends ExportOnlyAEItemList { + + @Getter + @Nullable MEStockingBusPartMachine stockingBusPartMachine; public ExportOnlyAEStockingItemList(int slots) { super(slots, ExportOnlyAEStockingItemSlot::new); } + public void setStockingBusPartMachine(@Nullable MEStockingBusPartMachine stockingBusPartMachine) { + this.stockingBusPartMachine = stockingBusPartMachine; + for (var slot: ((ExportOnlyAEStockingItemSlot[])inventory)) { + slot.setStockingBusPartMachine(stockingBusPartMachine); + } + } + @Override public boolean isAutoPull() { - return autoPull; + return Objects.requireNonNull(getStockingBusPartMachine()).isAutoPull(); } @Override @@ -318,13 +323,17 @@ public boolean hasStackInConfig(GenericStack stack, boolean checkExternal) { boolean inThisBus = super.hasStackInConfig(stack, false); if (inThisBus) return true; if (checkExternal) { - return testConfiguredInOtherPart(stack); + return Objects.requireNonNull(getStockingBusPartMachine()).testConfiguredInOtherPart(stack); } return false; } } - private class ExportOnlyAEStockingItemSlot extends ExportOnlyAEItemSlot { + private static class ExportOnlyAEStockingItemSlot extends ExportOnlyAEItemSlot { + + @Getter + @Setter + @Nullable MEStockingBusPartMachine stockingBusPartMachine; public ExportOnlyAEStockingItemSlot() { super(); @@ -336,16 +345,16 @@ public ExportOnlyAEStockingItemSlot(@Nullable GenericStack config, @Nullable Gen @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (slot == 0 && this.stock != null) { + if (slot == 0 && this.stock != null && stockingBusPartMachine != null) { if (this.config != null) { // Extract the items from the real net to either validate (simulate) // or extract (modulate) when this is called - if (!isOnline()) return ItemStack.EMPTY; - MEStorage aeNetwork = getMainNode().getGrid().getStorageService().getInventory(); + if (!stockingBusPartMachine.isOnline()) return ItemStack.EMPTY; + MEStorage aeNetwork = stockingBusPartMachine.getMainNode().getGrid().getStorageService().getInventory(); Actionable action = simulate ? Actionable.SIMULATE : Actionable.MODULATE; var key = config.what(); - long extracted = aeNetwork.extract(key, amount, action, actionSource); + long extracted = aeNetwork.extract(key, amount, action, stockingBusPartMachine.actionSource); if (extracted > 0) { ItemStack resultStack = key instanceof AEItemKey itemKey ? From 28a8f5daf240e33a16b8835c4fd300048bbd8e39 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 10 May 2026 19:49:51 +1000 Subject: [PATCH 09/12] more small changes --- docs/content/Modpacks/Changes/v8.0.0.md | 20 ++----------------- .../steam/SteamEnergyRecipeHandler.java | 2 +- .../machine/trait/FluidTankProxyTrait.java | 8 ++------ .../trait/ProgrammableCircuitSlotTrait.java | 3 +++ .../part/SteamItemBusPartMachine.java | 3 --- .../machine/trait/BatterySlotTrait.java | 7 +++++++ .../trait/EnvironmentalExplosionTrait.java | 3 +++ .../trait/ExhaustVentMachineTrait.java | 5 +++++ 8 files changed, 23 insertions(+), 28 deletions(-) diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index 45bae3f1ffa..4773a13b6b4 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -74,24 +74,8 @@ The constructors for a large number of machines have changed in order to simply #### **All Machines** - Replace the first constructor argument `IMachineBlockEntity holder` with `BlockEntityCreationInfo info` -#### `TieredEnergyMachine` -- Removed `createEnergyContainer` method -- Constructor now has an optional `NotifiableEnergyContainer` argument -#### `WorkableTieredMachine` -- Removed `createRecipeLogic`, `createImportItemHandler`, `createExportItemHandler`, `createImportFluidHandler`, `createExportFluidHandler` methods -- Added a new constructor: - - `BlockEntityCreationInfo info` - - `int tier` - - `RecipeLogic recipeLogic` Recipe logic, defaults to the standard `RecipeLogic` class. - - `int importSlots` Item import slots, defaults to the amount of slots in the machine's default recipe type. - - `int exportSlots` Same as above, but for item export slots. - - `int fluidImportSlots` As above, but for fluid import slots. - - `int fluidExportSlots` As above, but for fluid export slots. - - `boolean isEnergyEmitter` If this machine should emit/receiver energy. - - `Int2IntFunction tankScalingFunction` Fluid tank capacity scaling function. -#### `WorkableMultiblockMachine`, `WorkableElectricMultiblockMachine` and `SteamWorkableMachine` -- Removed `createRecipeLogic` method -- Constructor now has an optional `RecipeLogic` argument, defaults to the standard `RecipeLogic` class +#### Machines with `createX` functions (e.g. `createEnergyContainer`, `createRecipeLogic`) +- Creation functions have been removed in favor of arguments being passed into the constructor. #### IMPORTANT MIGRATION NOTE: diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java index 5b99437bc4b..f3845ad069a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java @@ -59,7 +59,7 @@ public List handleRecipeInner(IO io, GTRecipe recipe, List getContents() { + public List getContents() { List tankContents = new ArrayList<>(); for (int i = 0; i < steamTank.getTanks(); ++i) { FluidStack stack = steamTank.getFluidInTank(i); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java index 96b80b42bf0..cda38391cff 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/FluidTankProxyTrait.java @@ -10,7 +10,6 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @Accessors(chain = true) @@ -43,14 +42,13 @@ public int getTanks() { return proxy == null ? 0 : proxy.getTanks(); } - @NotNull @Override public FluidStack getFluidInTank(int tank) { return proxy == null ? FluidStack.EMPTY : proxy.getFluidInTank(tank); } @Override - public void setFluidInTank(int tank, @NotNull FluidStack fluidStack) { + public void setFluidInTank(int tank, FluidStack fluidStack) { if (proxy != null) { proxy.setFluidInTank(tank, fluidStack); } @@ -62,7 +60,7 @@ public int getTankCapacity(int tank) { } @Override - public boolean isFluidValid(int tank, @NotNull FluidStack stack) { + public boolean isFluidValid(int tank, FluidStack stack) { return proxy != null && proxy.isFluidValid(tank, stack); } @@ -88,7 +86,6 @@ public FluidStack drainInternal(FluidStack resource, FluidAction action) { return FluidStack.EMPTY; } - @NotNull @Override public FluidStack drain(int maxDrain, FluidAction action) { if (proxy != null && canCapOutput()) { @@ -97,7 +94,6 @@ public FluidStack drain(int maxDrain, FluidAction action) { return FluidStack.EMPTY; } - @NotNull @Override public FluidStack drain(FluidStack resource, FluidAction action) { if (proxy != null && canCapOutput()) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java index 986282c7314..f2d909830ea 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java @@ -21,6 +21,9 @@ import java.util.List; +/** + * Machine trait which adds a programmable circuit input slot to the side of a machine. + */ public class ProgrammableCircuitSlotTrait extends NotifiableRecipeHandlerTrait implements IAttachConfiguratorsTrait, ICapabilityTrait { public static final MachineTraitType TYPE = new MachineTraitType<>(ProgrammableCircuitSlotTrait.class); 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 e187cd9494c..c0075572bc8 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 @@ -10,12 +10,9 @@ public class SteamItemBusPartMachine extends ItemBusPartMachine { - private final String autoTooltipKey; - public SteamItemBusPartMachine(BlockEntityCreationInfo info, IO io) { super(info, 1, io); circuitSlot.setEnabled(false); - autoTooltipKey = io == IO.IN ? "gtceu.gui.item_auto_input.tooltip" : "gtceu.gui.item_auto_output.tooltip"; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java index 6733cbe3576..1e9f2b59c28 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java @@ -17,6 +17,9 @@ import lombok.Getter; import org.jetbrains.annotations.Nullable; +/** + * Machine trait that adds a battery charger slot to the side of the machine UI + */ public class BatterySlotTrait extends MachineTrait implements IAttachConfiguratorsTrait { public static final MachineTraitType TYPE = new MachineTraitType<>(BatterySlotTrait.class); @@ -31,6 +34,10 @@ public class BatterySlotTrait extends MachineTrait implements IAttachConfigurato private final NotifiableEnergyContainer energyContainer; + /** + * Creates a battery charger slot trait + * @param energyContainerToUse The energy container which the battery should draw energy from/push energy to. + */ public BatterySlotTrait(NotifiableEnergyContainer energyContainerToUse) { energyContainer = energyContainerToUse; storage = new CustomItemStackHandler(1); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/EnvironmentalExplosionTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/EnvironmentalExplosionTrait.java index 2ed00fce29c..0c8413405db 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/EnvironmentalExplosionTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/EnvironmentalExplosionTrait.java @@ -15,6 +15,9 @@ import java.util.function.BooleanSupplier; +/** + * Machine trait that makes a machine explode when exposed to weather. + */ public class EnvironmentalExplosionTrait extends MachineTrait { public static final MachineTraitType TYPE = new MachineTraitType<>( diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java index b4e413eb320..db59d019c23 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTDamageTypes; +import com.gregtechceu.gtceu.common.recipe.condition.VentCondition; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; @@ -23,6 +24,10 @@ import lombok.Getter; import lombok.Setter; +/** + * Machine trait that adds an exhaust vent to a specific side of a machine. + * @see VentCondition + */ public class ExhaustVentMachineTrait extends MachineTrait { public static final MachineTraitType TYPE = new MachineTraitType<>( From 09ca58983b83641c8053bbdd2f36fbf3bed9a83f Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 15 May 2026 13:44:06 +1000 Subject: [PATCH 10/12] remove IWorkableMultiController --- docs/content/Modpacks/Changes/v8.0.0.md | 1 + .../multiblock/IMaintenanceMachine.java | 3 +- .../feature/multiblock/IMultiPart.java | 10 ++--- .../multiblock/IRotorHolderMachine.java | 1 - .../multiblock/IWorkableMultiController.java | 9 ----- .../multiblock/WorkableMultiblockMachine.java | 16 ++++---- .../gtceu/common/datafixers/TagFixer.java | 39 ------------------- .../multiblock/part/MufflerPartMachine.java | 4 +- .../part/OpticalDataHatchMachine.java | 6 +-- .../part/RotorHolderPartMachine.java | 5 ++- 10 files changed, 24 insertions(+), 70 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IWorkableMultiController.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index 4773a13b6b4..7e9ff593f89 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -94,6 +94,7 @@ When migrating, remove the `this` argument from the machine trait constructor an A large number of machine feature interfaces have been removed, and have had their functionality merged into the standard MetaMachine class, or now use the new machine trait system: +- `IWorkableMultiController` User the `WorkableMultiblockMachine` class directly. - `ITurbineMachine` Use the `LargeTurbineMachine` class directly. - `IRotorHolderMachine` Use the `RotorHolderMachine` class directly. - `IMultiController` Use the `MultiblockControllerMachine` class directly. diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java index 81fb6fbd40b..d27265cb093 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.machine.feature.multiblock; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -117,7 +118,7 @@ default void causeRandomMaintenanceProblems() { } @Override - default boolean onWorking(IWorkableMultiController controller) { + default boolean onWorking(WorkableMultiblockMachine controller) { calculateMaintenance(this); if (hasMaintenanceProblems()) { controller.getRecipeLogic().markLastRecipeDirty(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java index 804ad519d1c..3f3998bb1de 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMultiPart.java @@ -92,35 +92,35 @@ default BlockState getFormedAppearance(BlockState sourceState, BlockPos sourcePo /** * Called per tick in {@link RecipeLogic#handleRecipeWorking()} */ - default boolean onWorking(IWorkableMultiController controller) { + default boolean onWorking(WorkableMultiblockMachine controller) { return true; } /** * Called per tick in {@link RecipeLogic#handleRecipeWorking()} */ - default boolean onWaiting(IWorkableMultiController controller) { + default boolean onWaiting(WorkableMultiblockMachine controller) { return true; } /** * Called in {@link WorkableMultiblockMachine#setWorkingEnabled(boolean)} */ - default boolean onPaused(IWorkableMultiController controller) { + default boolean onPaused(WorkableMultiblockMachine controller) { return true; } /** * Called in {@link RecipeLogic#onRecipeFinish()} before outputs are produced */ - default boolean afterWorking(IWorkableMultiController controller) { + default boolean afterWorking(WorkableMultiblockMachine controller) { return true; } /** * Called in {@link RecipeLogic#setupRecipe(GTRecipe)} */ - default boolean beforeWorking(IWorkableMultiController controller) { + default boolean beforeWorking(WorkableMultiblockMachine controller) { return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java deleted file mode 100644 index 8b137891791..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IRotorHolderMachine.java +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IWorkableMultiController.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IWorkableMultiController.java deleted file mode 100644 index d2fa20e8ba0..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IWorkableMultiController.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature.multiblock; - -import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; - -public interface IWorkableMultiController extends IRecipeLogicMachine { - - MultiblockControllerMachine self(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java index 3634435787b..de7a838b5e3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java @@ -6,8 +6,8 @@ import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.machine.feature.IMufflableMachine; +import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.*; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -40,7 +40,7 @@ * The base class for multiblocks with recipe logic. */ public abstract class WorkableMultiblockMachine extends MultiblockControllerMachine - implements IWorkableMultiController, IMufflableMachine { + implements IRecipeLogicMachine, IMufflableMachine { @Getter protected final CleanroomReceiverTrait cleanroomReceiver; @@ -232,7 +232,7 @@ public boolean keepSubscribing() { @Override public void notifyStatusChanged(RecipeLogic.Status oldStatus, RecipeLogic.Status newStatus) { - IWorkableMultiController.super.notifyStatusChanged(oldStatus, newStatus); + IRecipeLogicMachine.super.notifyStatusChanged(oldStatus, newStatus); if (newStatus == RecipeLogic.Status.WORKING || oldStatus == RecipeLogic.Status.WORKING) { updateActiveBlocks(newStatus == RecipeLogic.Status.WORKING); } @@ -254,7 +254,7 @@ public void afterWorking() { for (IMultiPart part : getParts()) { part.afterWorking(this); } - IWorkableMultiController.super.afterWorking(); + IRecipeLogicMachine.super.afterWorking(); } @Override @@ -264,7 +264,7 @@ public boolean beforeWorking(@Nullable GTRecipe recipe) { return false; } } - return IWorkableMultiController.super.beforeWorking(recipe); + return IRecipeLogicMachine.super.beforeWorking(recipe); } @Override @@ -274,7 +274,7 @@ public boolean onWorking() { return false; } } - return IWorkableMultiController.super.onWorking(); + return IRecipeLogicMachine.super.onWorking(); } @Override @@ -282,7 +282,7 @@ public void onWaiting() { for (IMultiPart part : getParts()) { part.onWaiting(this); } - IWorkableMultiController.super.onWaiting(); + IRecipeLogicMachine.super.onWaiting(); } @Override @@ -292,7 +292,7 @@ public void setWorkingEnabled(boolean isWorkingAllowed) { part.onPaused(this); } } - IWorkableMultiController.super.setWorkingEnabled(isWorkingAllowed); + IRecipeLogicMachine.super.setWorkingEnabled(isWorkingAllowed); } public GTRecipeType getRecipeType() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java b/src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java deleted file mode 100644 index 7bf24e1a6a8..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gregtechceu.gtceu.common.datafixers; - -import com.gregtechceu.gtceu.utils.GTMath; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; - -import java.util.Locale; - -public class TagFixer { - - public static final String[] FLUID_TAGS = { - "currentMilliBucketsPerTick", - "globalTransferSizeMillibuckets", - "minValue", - "maxValue", - }; - - // This is necessary for updating from old versions due to FluidStack long -> int changes - // Any fluid-related long tags need to be turned into int tags - public static void fixFluidTags(CompoundTag tag) { - if (tag.contains("cover", Tag.TAG_COMPOUND)) { - CompoundTag t = tag.getCompound("cover"); - for (String key : t.getAllKeys()) { - var cover = t.getCompound(key); - var id = cover.getCompound("uid").getString("id"); - if ((id.toLowerCase(Locale.ROOT).contains("fluid") || id.toLowerCase(Locale.ROOT).contains("pump"))) { - var data = cover.getCompound("payload").getCompound("d"); - for (String fix_key : FLUID_TAGS) { - if (data.contains(fix_key, Tag.TAG_LONG)) { - var l = data.getLong(fix_key); - data.putInt(fix_key, GTMath.saturatedCast(l)); - } - } - } - } - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java index f597589ed3d..b821310f171 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java @@ -7,8 +7,8 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; @@ -98,7 +98,7 @@ public void clientTick() { } @Override - public boolean afterWorking(IWorkableMultiController controller) { + public boolean afterWorking(WorkableMultiblockMachine controller) { hazardEmitter.emitHazard(); var supplier = controller.self().getDefinition().getRecoveryItems(); if (supplier != null) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java index a5b1eb3cb9d..32ecd82533e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java @@ -4,9 +4,9 @@ import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalDataAccessHatch; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.common.blockentity.OpticalPipeBlockEntity; @@ -37,7 +37,7 @@ public OpticalDataHatchMachine(BlockEntityCreationInfo info, boolean isTransmitt } @Override - public boolean isRecipeAvailable(@NotNull GTRecipe recipe, @NotNull Collection seen) { + public boolean isRecipeAvailable(GTRecipe recipe, Collection seen) { seen.add(this); if (!isFormed()) { return false; @@ -45,7 +45,7 @@ public boolean isRecipeAvailable(@NotNull GTRecipe recipe, @NotNull Collection dataAccesses = new ArrayList<>(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index e13e7f73826..be93be06cd0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.*; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -159,7 +160,7 @@ protected void updateRotorSubscription() { } private void updateRotorSpeed() { - if (isFormed() && getControllers().first() instanceof IWorkableMultiController workable) { + if (isFormed() && getControllers().first() instanceof WorkableMultiblockMachine workable) { if (workable.getRecipeLogic().isWorking()) return; } if (!hasRotor()) { @@ -179,7 +180,7 @@ public void setRotorSpeed(int rotorSpeed) { } @Override - public boolean onWorking(IWorkableMultiController controller) { + public boolean onWorking(WorkableMultiblockMachine controller) { if (getRotorSpeed() < getMaxRotorHolderSpeed()) { setRotorSpeed(getRotorSpeed() + SPEED_INCREMENT); updateRotorSubscription(); From 89f24747d6ff5b6a5aa0449ad0fc2feb966e8a7b Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 15 May 2026 14:02:32 +1000 Subject: [PATCH 11/12] battery slot trait stuff --- .../gtceu/api/machine/MetaMachine.java | 4 +- .../common/data/machines/GCYMMachines.java | 5 +- .../machine/GTMachineInstanceFactories.java | 70 ++++++++++++++++ .../machine/electric/FisherMachine.java | 41 +--------- .../electric/ItemCollectorMachine.java | 49 +---------- .../common/machine/electric/MinerMachine.java | 82 ++----------------- .../gcym/LargeChemicalBathMachine.java | 55 ------------- .../electric/gcym/LargeMixerMachine.java | 57 ------------- .../common/machine/storage/BufferMachine.java | 1 - 9 files changed, 91 insertions(+), 273 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index 72a316b1515..96b781f7dc8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -327,10 +327,10 @@ public T attachTrait(T trait, int callbackPriority) { * @param traitName Unique identifier for this trait. * @param trait The trait to register */ - public T attachPersistentTrait(String traitName, T trait) { + public MetaMachine attachPersistentTrait(String traitName, MachineTrait trait) { traitHolder.attachTrait(trait); traitHolder.registerPersistentTrait(traitName, trait); - return trait; + return this; } /** 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 b8ec948322f..09614101962 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 @@ -21,6 +21,7 @@ import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; +import com.gregtechceu.gtceu.common.machine.GTMachineInstanceFactories; import com.gregtechceu.gtceu.common.machine.multiblock.electric.DistillationTowerMachine; import com.gregtechceu.gtceu.common.machine.multiblock.electric.gcym.*; import com.gregtechceu.gtceu.common.machine.multiblock.part.ParallelHatchPartMachine; @@ -109,7 +110,7 @@ public static void init() {} .register(); public final static MultiblockMachineDefinition LARGE_CHEMICAL_BATH = REGISTRATE - .multiblock("large_chemical_bath", LargeChemicalBathMachine::new) + .multiblock("large_chemical_bath", GTMachineInstanceFactories.LARGE_CHEM_BATH) .langValue("Large Chemical Bath") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) .tooltips(Component.translatable("gtceu.machine.available_recipe_map_2.tooltip", @@ -169,7 +170,7 @@ public static void init() {} .register(); public final static MultiblockMachineDefinition LARGE_MIXER = REGISTRATE - .multiblock("large_mixer", LargeMixerMachine::new) + .multiblock("large_mixer", GTMachineInstanceFactories.LARGE_MIXER) .langValue("Large Mixing Vessel") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java b/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java index 24dad0f61fd..552f3da9372 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java @@ -3,14 +3,84 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; +import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.common.machine.multiblock.part.hpca.HPCAComponentPartMachine; import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; +import com.gregtechceu.gtceu.common.machine.trait.multiblock.MultiblockFluidRendererTrait; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import org.jetbrains.annotations.ApiStatus; +import java.util.HashSet; +import java.util.Set; + @ApiStatus.NonExtendable public interface GTMachineInstanceFactories { + MachineInstanceFactory LARGE_CHEM_BATH = (info) -> { + var machine = new WorkableElectricMultiblockMachine(info); + + // Attach fluid render behaviour + machine.attachPersistentTrait("fluidRendererTrait", new MultiblockFluidRendererTrait(() -> { + var frontFace = machine.getFrontFacing(); + var upwardFace = machine.getUpwardsFacing(); + Direction up = RelativeDirection.UP.getRelative(frontFace, upwardFace, machine.isFlipped()); + Direction back = frontFace.getOpposite(); + Direction clockWise = RelativeDirection.RIGHT.getRelative(frontFace, upwardFace, machine.isFlipped()); + Direction counterClockWise = RelativeDirection.LEFT.getRelative(frontFace, upwardFace, + machine.isFlipped()); + + BlockPos pos = machine.getBlockPos(); + BlockPos center = pos.relative(up); + + Set offsets = new HashSet<>(); + + for (int i = 0; i < 5; i++) { + center = center.relative(back); + offsets.add(center.subtract(pos)); + offsets.add(center.relative(clockWise).subtract(pos)); + offsets.add(center.relative(counterClockWise).subtract(pos)); + } + return offsets; + })); + + return machine; + }; + + MachineInstanceFactory LARGE_MIXER = (info) -> { + var machine = new WorkableElectricMultiblockMachine(info); + + // Attach fluid render behaviour + machine.attachPersistentTrait("fluidRendererTrait", new MultiblockFluidRendererTrait(() -> { + var frontFace = machine.getFrontFacing(); + var upwardFace = machine.getUpwardsFacing(); + var flipped = machine.isFlipped(); + Direction up = RelativeDirection.UP.getRelative(frontFace, upwardFace, flipped); + Direction back = frontFace.getOpposite(); + Direction clockWise = RelativeDirection.RIGHT.getRelative(frontFace, upwardFace, flipped); + Direction counterClockWise = RelativeDirection.LEFT.getRelative(frontFace, upwardFace, flipped); + + BlockPos pos = machine.getBlockPos(); + BlockPos center = pos.relative(up, 3); + + Set offsets = new HashSet<>(); + + for (int i = 0; i < 3; i++) { + center = center.relative(back); + if (i % 2 == 0) { + offsets.add(center.subtract(pos)); + } + offsets.add(center.relative(clockWise).subtract(pos)); + offsets.add(center.relative(counterClockWise).subtract(pos)); + } + return offsets; + })); + + return machine; + }; + MachineInstanceFactory.Tiered ROCK_CRUSHER = (info, tier) -> { var machine = new SimpleTieredMachine(info, tier); machine.getEnvironmentalExplosionTrait().setEnableEnvironmentalExplosions(false); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index 74dfd6abb51..9afabfc0786 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.TickableSubscription; @@ -12,12 +11,11 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; +import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTMuiMachineUtil; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; import com.gregtechceu.gtceu.utils.ISubscription; @@ -69,10 +67,6 @@ public class FisherMachine extends TieredEnergyMachine protected boolean allowInputFromOutputSideItems; @SaveField protected final NotifiableItemStackHandler baitHandler; - - @Getter - @SaveField - protected final CustomItemStackHandler chargerInventory; @Nullable protected TickableSubscription batterySubs, fishingSubs; @Nullable @@ -118,13 +112,10 @@ public FisherMachine(BlockEntityCreationInfo info, int tier) { this.baitHandler = attachTrait(new NotifiableItemStackHandler(1, IO.BOTH, IO.IN)); baitHandler.setFilter(item -> item.is(Items.STRING)); - this.chargerInventory = new CustomItemStackHandler(); - chargerInventory.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || - (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && - GTCapabilityHelper.getForgeEnergyItem(item) != null)); - autoOutput = attachTrait(AutoOutputTrait.ofItems(cache)); environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); + + attachPersistentTrait("batterySlot", new BatterySlotTrait(energyContainer)); } public void setWorkingEnabled(boolean enabled) { @@ -141,12 +132,8 @@ public void setJunkEnabled(boolean enabled) { public void onLoad() { super.onLoad(); if (isRemote()) return; - energySubs = energyContainer.addChangedListener(() -> { - this.updateBatterySubscription(); - this.updateFishingUpdateSubscription(); - }); + energySubs = energyContainer.addChangedListener(this::updateFishingUpdateSubscription); baitSubs = baitHandler.addChangedListener(this::updateFishingUpdateSubscription); - chargerInventory.setOnContentsChanged(this::updateBatterySubscription); this.updateFishingUpdateSubscription(); } @@ -163,12 +150,6 @@ public void onUnload() { } } - @Override - public void onMachineDestroyed() { - super.onMachineDestroyed(); - chargerInventory.dropInventoryInWorld(getLevel(), getBlockPos()); - } - public static int calcMaxProgress(int tier) { return (int) (800.0 - 170 * ((double) tier - 1.0) + (((double) Math.max(0, tier - 4) / 0.012))); } @@ -266,20 +247,6 @@ public boolean drainEnergy(boolean simulate) { return false; } - protected void updateBatterySubscription() { - if (energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, true)) - batterySubs = subscribeServerTick(batterySubs, this::chargeBattery); - else if (batterySubs != null) { - batterySubs.unsubscribe(); - batterySubs = null; - } - } - - protected void chargeBattery() { - if (!energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, false)) - updateBatterySubscription(); - } - ////////////////////////////////////// // ********** GUI ***********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java index 4575fadba54..4e1217cf587 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IWorkable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; @@ -17,9 +16,9 @@ import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; +import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTMuiMachineUtil; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.ISubscription; import net.minecraft.MethodsReturnNonnullByDefault; @@ -64,14 +63,11 @@ public class ItemCollectorMachine extends TieredEnergyMachine @SaveField protected final NotifiableItemStackHandler output; - @Getter - @SaveField - protected final CustomItemStackHandler chargerInventory; @SaveField protected final CustomItemStackHandler filterInventory; @Nullable - protected TickableSubscription batterySubs, collectionSubs; + protected TickableSubscription collectionSubs; @Nullable protected ISubscription energySubs; private final long energyPerTick; @@ -109,24 +105,13 @@ public ItemCollectorMachine(BlockEntityCreationInfo info, int tier) { this.inventorySize = INVENTORY_SIZES[Mth.clamp(getTier(), 0, INVENTORY_SIZES.length - 1)]; this.energyPerTick = (long) BASE_EU_CONSUMPTION * (1L << (tier - 1)); this.output = attachTrait(createOutputItemHandler()); - this.chargerInventory = createChargerItemHandler(); this.filterInventory = createFilterItemHandler(); environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); this.autoOutput = attachTrait(AutoOutputTrait.ofItems(output)); maxRange = (int) Math.pow(2, tier + 2); range = maxRange; - } - ////////////////////////////////////// - // ***** Initialization *****// - ////////////////////////////////////// - - protected CustomItemStackHandler createChargerItemHandler() { - var handler = new CustomItemStackHandler(); - handler.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || - (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && - GTCapabilityHelper.getForgeEnergyItem(item) != null)); - return handler; + attachPersistentTrait("batterySlot", new BatterySlotTrait(energyContainer)); } protected CustomItemStackHandler createFilterItemHandler() { @@ -146,15 +131,10 @@ public void onLoad() { if (isRemote()) return; if (getLevel() instanceof ServerLevel serverLevel) { - serverLevel.getServer().tell(new TickTask(0, this::updateCollectionSubscription)); } - energySubs = energyContainer.addChangedListener(() -> { - this.updateBatterySubscription(); - this.updateCollectionSubscription(); - }); - chargerInventory.setOnContentsChanged(this::updateBatterySubscription); + energySubs = energyContainer.addChangedListener(this::updateCollectionSubscription); } @Override @@ -166,12 +146,6 @@ public void onUnload() { } } - @Override - public void onMachineDestroyed() { - super.onMachineDestroyed(); - chargerInventory.dropInventoryInWorld(getLevel(), getBlockPos()); - } - ////////////////////////////////////// // ********* Logic **********// ////////////////////////////////////// @@ -267,21 +241,6 @@ public boolean drainEnergy(boolean simulate) { return false; } - protected void updateBatterySubscription() { - if (energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, true)) - batterySubs = subscribeServerTick(batterySubs, this::chargeBattery); - else if (batterySubs != null) { - batterySubs.unsubscribe(); - batterySubs = null; - } - } - - protected void chargeBattery() { - if (!energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, false)) { - updateBatterySubscription(); - } - } - @Override public int getProgress() { return 0; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java index e4dde49504b..690f8763a85 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java @@ -2,24 +2,20 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IMiner; -import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.WorkableTieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; +import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; import com.gregtechceu.gtceu.common.machine.trait.miner.MinerLogic; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTMuiMachineUtil; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; -import com.gregtechceu.gtceu.utils.ISubscription; import net.minecraft.ChatFormatting; import net.minecraft.core.Direction; @@ -37,9 +33,7 @@ import brachy.modularui.widgets.TextWidget; import brachy.modularui.widgets.layout.Flow; import com.mojang.blaze3d.MethodsReturnNonnullByDefault; -import lombok.Getter; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collections; @@ -52,46 +46,23 @@ public class MinerMachine extends WorkableTieredMachine implements IControllable, IMuiMachine, IDataInfoProvider, IMiner { - @Getter - @SaveField - protected final CustomItemStackHandler chargerInventory; private final long energyPerTick; - @Nullable - protected TickableSubscription batterySubs; - @Nullable - protected ISubscription energySubs; @SaveField @SyncToClient public final AutoOutputTrait autoOutput; public MinerMachine(BlockEntityCreationInfo info, int tier, int speed, int maximumRadius, int fortune) { - super(info, tier, - new MinerLogic(fortune, speed, maximumRadius), - 0, (tier + 1) * (tier + 1), 0, 0, ($) -> 0); - this.energyPerTick = GTValues.V[tier - 1]; - this.chargerInventory = createChargerItemHandler(); - this.autoOutput = attachTrait(AutoOutputTrait.ofItems(exportItems)); - autoOutput.setItemOutputDirectionValidator(d -> d != Direction.DOWN); - } + super(info, tier, new MinerLogic(fortune, speed, maximumRadius), + 0, (tier + 1) * (tier + 1), 0, + 0, false, ($) -> 0); - ////////////////////////////////////// - // ***** Initialization ******// - ////////////////////////////////////// + this.energyPerTick = GTValues.V[tier - 1]; - protected CustomItemStackHandler createChargerItemHandler() { - var handler = new CustomItemStackHandler(); - handler.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || - (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && - GTCapabilityHelper.getForgeEnergyItem(item) != null)); - return handler; - } + attachPersistentTrait("batterySlot", new BatterySlotTrait(energyContainer)); - @Override - public void onMachineDestroyed() { - super.onMachineDestroyed(); - // Remove the miner pipes below this miner - chargerInventory.dropInventoryInWorld(getLevel(), getBlockPos()); + this.autoOutput = attachTrait(AutoOutputTrait.ofItems(exportItems)); + autoOutput.setItemOutputDirectionValidator(d -> d != Direction.DOWN); } @Override @@ -99,43 +70,6 @@ public MinerLogic getRecipeLogic() { return (MinerLogic) super.getRecipeLogic(); } - @Override - public void onLoad() { - super.onLoad(); - if (!isRemote()) { - updateBatterySubscription(); - energySubs = energyContainer.addChangedListener(this::updateBatterySubscription); - chargerInventory.setOnContentsChanged(this::updateBatterySubscription); - } - } - - @Override - public void onUnload() { - super.onUnload(); - if (energySubs != null) { - energySubs.unsubscribe(); - energySubs = null; - } - } - - ////////////////////////////////////// - // ********** LOGIC **********// - ////////////////////////////////////// - protected void updateBatterySubscription() { - if (energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, true)) { - batterySubs = subscribeServerTick(batterySubs, this::chargeBattery); - } else if (batterySubs != null) { - batterySubs.unsubscribe(); - batterySubs = null; - } - } - - protected void chargeBattery() { - if (!energyContainer.dischargeOrRechargeEnergyContainers(chargerInventory, 0, false)) { - updateBatterySubscription(); - } - } - private void addDisplayText(List textList) { int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); textList.add(recipeLogic.getCustomProgressLine()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java deleted file mode 100644 index c89bebb6bd0..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.gregtechceu.gtceu.common.machine.multiblock.electric.gcym; - -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; -import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; -import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.common.machine.trait.multiblock.MultiblockFluidRendererTrait; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; - -import lombok.Getter; - -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.ParametersAreNonnullByDefault; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class LargeChemicalBathMachine extends WorkableElectricMultiblockMachine { - - @Getter - @SyncToClient - @RerenderOnChanged - private final MultiblockFluidRendererTrait fluidRendererTrait; - - public LargeChemicalBathMachine(BlockEntityCreationInfo info) { - super(info); - fluidRendererTrait = attachTrait(new MultiblockFluidRendererTrait(this::saveOffsets)); - } - - public Set saveOffsets() { - Direction up = RelativeDirection.UP.getRelative(getFrontFacing(), getUpwardsFacing(), isFlipped()); - Direction back = getFrontFacing().getOpposite(); - Direction clockWise = RelativeDirection.RIGHT.getRelative(getFrontFacing(), getUpwardsFacing(), isFlipped()); - Direction counterClockWise = RelativeDirection.LEFT.getRelative(getFrontFacing(), getUpwardsFacing(), - isFlipped()); - - BlockPos pos = getBlockPos(); - BlockPos center = pos.relative(up); - - Set offsets = new HashSet<>(); - - for (int i = 0; i < 5; i++) { - center = center.relative(back); - offsets.add(center.subtract(pos)); - offsets.add(center.relative(clockWise).subtract(pos)); - offsets.add(center.relative(counterClockWise).subtract(pos)); - } - return offsets; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java deleted file mode 100644 index e0ef3b737ba..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.gregtechceu.gtceu.common.machine.multiblock.electric.gcym; - -import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; -import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; -import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.common.machine.trait.multiblock.MultiblockFluidRendererTrait; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; - -import lombok.Getter; - -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.ParametersAreNonnullByDefault; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class LargeMixerMachine extends WorkableElectricMultiblockMachine { - - @Getter - @SyncToClient - @RerenderOnChanged - private final MultiblockFluidRendererTrait fluidRendererTrait; - - public LargeMixerMachine(BlockEntityCreationInfo info) { - super(info); - fluidRendererTrait = attachTrait(new MultiblockFluidRendererTrait(this::saveOffsets)); - } - - public Set saveOffsets() { - Direction up = RelativeDirection.UP.getRelative(getFrontFacing(), getUpwardsFacing(), isFlipped()); - Direction back = getFrontFacing().getOpposite(); - Direction clockWise = RelativeDirection.RIGHT.getRelative(getFrontFacing(), getUpwardsFacing(), isFlipped()); - Direction counterClockWise = RelativeDirection.LEFT.getRelative(getFrontFacing(), getUpwardsFacing(), - isFlipped()); - - BlockPos pos = getBlockPos(); - BlockPos center = pos.relative(up, 3); - - Set offsets = new HashSet<>(); - - for (int i = 0; i < 3; i++) { - center = center.relative(back); - if (i % 2 == 0) { - offsets.add(center.subtract(pos)); - } - offsets.add(center.relative(clockWise).subtract(pos)); - offsets.add(center.relative(counterClockWise).subtract(pos)); - } - return offsets; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java index 23f93c7517e..26d5a12e7a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java @@ -37,7 +37,6 @@ public class BufferMachine extends TieredMachine implements IMuiMachine { protected final NotifiableFluidTank tank; @SaveField @SyncToClient - public final AutoOutputTrait autoOutput; public BufferMachine(BlockEntityCreationInfo info, int tier) { From afc4c4fd4a7c3d0dd3760318320c4828a78f6713 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 16 May 2026 21:22:44 +1000 Subject: [PATCH 12/12] spotless --- .../gtceu/api/block/MetaMachineBlock.java | 12 ++--- .../gtceu/api/machine/MachineDefinition.java | 2 +- .../api/machine/MachineInstanceFactory.java | 2 + .../gtceu/api/machine/MetaMachine.java | 3 +- .../api/machine/TieredEnergyMachine.java | 19 ++++---- .../api/machine/WorkableTieredMachine.java | 29 ++++++----- .../steam/SteamEnergyRecipeHandler.java | 1 - .../gtceu/api/machine/trait/MachineTrait.java | 2 + .../trait/ProgrammableCircuitSlotTrait.java | 21 ++++---- .../api/registry/registrate/GTRegistrate.java | 21 ++++---- .../registry/registrate/MachineBuilder.java | 7 +-- .../registrate/MultiblockMachineBuilder.java | 6 ++- .../api/registry/registrate/package-info.java | 3 -- .../common/data/machines/GTMachineUtils.java | 48 +++++++++++-------- .../data/machines/GTResearchMachines.java | 19 +++++--- .../item/behavior/IntCircuitBehaviour.java | 3 +- .../machine/GTMachineInstanceFactories.java | 20 +++++--- .../machine/electric/ConverterMachine.java | 3 +- .../part/FluidHatchPartMachine.java | 1 - .../multiblock/part/ItemBusPartMachine.java | 10 ++-- .../part/ReservoirHatchPartMachine.java | 5 +- .../part/SteamHatchPartMachine.java | 1 - .../part/hpca/HPCAComponentPartMachine.java | 5 +- .../machine/trait/BatterySlotTrait.java | 9 ++-- .../trait/ExhaustVentMachineTrait.java | 1 + .../gtceu/common/mui/GTMuiWidgets.java | 8 ++-- .../ae2/machine/MEInputBusPartMachine.java | 4 +- .../ae2/machine/MEInputHatchPartMachine.java | 2 +- .../ae2/machine/MEOutputBusPartMachine.java | 13 ++--- .../machine/MEPatternBufferPartMachine.java | 2 +- .../ae2/machine/MEStockingBusPartMachine.java | 17 ++++--- .../machine/MEStockingHatchPartMachine.java | 3 +- .../machine/KJSWrappingMultiblockBuilder.java | 2 +- .../utils/data/TagCompatibilityFixer.java | 2 +- 34 files changed, 175 insertions(+), 131 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java index 44abd05b599..2b80c797788 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java @@ -228,12 +228,12 @@ public List getDrops(BlockState state, LootParams.Builder builder) { BlockEntity be = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); if (be instanceof MetaMachine machine) { machine.modifyDrops(drops); - for (ItemStack drop : drops) { - if (drop.getItem() instanceof MetaMachineItem item && item.getBlock() == this) { - machine.saveToItem(drop.getOrCreateTag(), false); - // break here to not dupe contents if a machine drops multiple of itself for whatever reason. - break; - } + for (ItemStack drop : drops) { + if (drop.getItem() instanceof MetaMachineItem item && item.getBlock() == this) { + machine.saveToItem(drop.getOrCreateTag(), false); + // break here to not dupe contents if a machine drops multiple of itself for whatever reason. + break; + } } } return drops; 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 0b7c14e9360..56237b73b19 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -60,7 +60,7 @@ public class MachineDefinition implements Supplier { private Supplier> blockEntityTypeSupplier; @Getter @Setter - private GTRecipeType [] recipeTypes; + private GTRecipeType[] recipeTypes; @Getter @Setter private int tier; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java index b8eb7f39ef8..7adb795bd99 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineInstanceFactory.java @@ -19,6 +19,7 @@ default MachineInstanceFactory andThen(Consumer modifier) { @FunctionalInterface interface Tiered { + T buildMachine(BlockEntityCreationInfo info, int tier); default Tiered andThen(Consumer modifier) { @@ -32,6 +33,7 @@ default Tiered andThen(Consumer modifier) { @FunctionalInterface interface Steam { + T buildMachine(BlockEntityCreationInfo info, boolean isHighPressure); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index 96b781f7dc8..72f709bbec3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -209,7 +209,7 @@ public void modifyDrops(List drops) {} /** * Saves machine data to an item stack tag. * - * @param tag The tag to save to. + * @param tag The tag to save to. * @param clone If this data is being save to an item stack created by cloning the block (pick block) */ public void saveToItem(CompoundTag tag, boolean clone) {} @@ -459,6 +459,7 @@ protected InteractionResult onHardHammerClick(ExtendedUseOnContext context) { return InteractionResult.PASS; } + @SuppressWarnings("unused") protected InteractionResult onCrowbarClick(ExtendedUseOnContext context) { return InteractionResult.PASS; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index 9a3d475f283..b658fda5cee 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -27,8 +27,8 @@ public class TieredEnergyMachine extends TieredMachine { * Creates a {@link TieredEnergyMachine} using the given energy container.
* * - * @param info {@link BlockEntityCreationInfo} - * @param tier Machine/voltage tier + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine/voltage tier * @param energyContainer The enegery container to attach * @see NotifiableEnergyContainer */ @@ -42,17 +42,20 @@ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, /** * Creates a {@link TieredEnergyMachine} with a default energy container.
- * Defaults to a container with a capacity of 64A @ the given voltage tier, and a max input/output amperage of 1A @ the given voltage tier. + * Defaults to a container with a capacity of 64A @ the given voltage tier, and a max input/output amperage of 1A @ + * the given voltage tier. * - * @param info {@link BlockEntityCreationInfo} - * @param tier Machine/voltage tier + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine/voltage tier * @param emitsEnergy If the energy container should receive or emit energy. * @see NotifiableEnergyContainer */ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, boolean emitsEnergy) { - this(info, tier, emitsEnergy ? NotifiableEnergyContainer.emitterContainer(GTValues.V[tier] * 64L, GTValues.V[tier], - 1) : NotifiableEnergyContainer.receiverContainer(GTValues.V[tier] * 64L, GTValues.V[tier], - 1)); + this(info, tier, + emitsEnergy ? NotifiableEnergyContainer.emitterContainer(GTValues.V[tier] * 64L, GTValues.V[tier], + 1) : + NotifiableEnergyContainer.receiverContainer(GTValues.V[tier] * 64L, GTValues.V[tier], + 1)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java index 6b4a5f4a326..c965b413ae4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -60,20 +60,22 @@ public abstract class WorkableTieredMachine extends TieredEnergyMachine implemen /** * Creates a {@link WorkableTieredMachine}. - * @param info {@link BlockEntityCreationInfo} - * @param tier Machine tier. - * @param recipeLogic The recipe logic to use. - * @param importSlots The amount of item input slots this machine should have (can be 0). - * @param exportSlots The amount of item output slots this machine should have (can be 0). - * @param fluidImportSlots The amount of fluid input slots this machine should have (can be 0). - * @param fluidExportSlots The amount of fluid output slots this machine should have (can be 0). - * @param energyEmitter If this machine should input or output energy. + * + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine tier. + * @param recipeLogic The recipe logic to use. + * @param importSlots The amount of item input slots this machine should have (can be 0). + * @param exportSlots The amount of item output slots this machine should have (can be 0). + * @param fluidImportSlots The amount of fluid input slots this machine should have (can be 0). + * @param fluidExportSlots The amount of fluid output slots this machine should have (can be 0). + * @param energyEmitter If this machine should input or output energy. * @param tankScalingFunction The tank scaling function which determines the capaacity of fluid slots. */ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, RecipeLogic recipeLogic, int importSlots, int exportSlots, - int fluidImportSlots, int fluidExportSlots, boolean energyEmitter, Int2IntFunction tankScalingFunction) { + int fluidImportSlots, int fluidExportSlots, boolean energyEmitter, + Int2IntFunction tankScalingFunction) { super(info, tier, energyEmitter); this.overclockTier = getMaxOverclockTier(); this.recipeTypes = getDefinition().getRecipeTypes(); @@ -99,12 +101,13 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, * Creates a {@link WorkableTieredMachine} with default settings.
* The amount of item and fluid input and output slots is determined by the machine's recipe type. * - * @param info {@link BlockEntityCreationInfo} - * @param tier Machine tier. - * @param energyEmitter If this machine should input or output energy. + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine tier. + * @param energyEmitter If this machine should input or output energy. * @param tankScalingFunction The tank scaling function which determines the capaacity of fluid slots. */ - public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, boolean energyEmitter, Int2IntFunction tankScalingFunction) { + public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, boolean energyEmitter, + Int2IntFunction tankScalingFunction) { super(info, tier, energyEmitter); this.overclockTier = getMaxOverclockTier(); this.recipeTypes = getDefinition().getRecipeTypes(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java index f3845ad069a..f52cbcb1c6f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamEnergyRecipeHandler.java @@ -14,7 +14,6 @@ import net.minecraftforge.fluids.FluidStack; import lombok.Getter; -import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java index 47496d20d9b..35904a0860d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java @@ -145,6 +145,7 @@ public void onMachineDestroyed() {} /** * Called when the machine is attached to a controller
* Only called if this trait is attached to a multiblock part machine. + * * @param controller The multiblock controller */ public void addedToController(MultiblockControllerMachine controller) {} @@ -152,6 +153,7 @@ public void addedToController(MultiblockControllerMachine controller) {} /** * Called when the machine is removed from a controller
* Only called if this trait is attached to a multiblock part machine. + * * @param controller The multiblock controller */ public void removedFromController(MultiblockControllerMachine controller) {} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java index f2d909830ea..85d8b87d0a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ProgrammableCircuitSlotTrait.java @@ -1,8 +1,5 @@ package com.gregtechceu.gtceu.api.machine.trait; -import brachy.modularui.screen.ModularPanel; -import brachy.modularui.value.sync.PanelSyncManager; -import brachy.modularui.widgets.layout.Flow; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; @@ -14,9 +11,14 @@ import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; + +import net.minecraft.world.item.crafting.Ingredient; + +import brachy.modularui.screen.ModularPanel; +import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widgets.layout.Flow; import lombok.Getter; import lombok.Setter; -import net.minecraft.world.item.crafting.Ingredient; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -24,9 +26,11 @@ /** * Machine trait which adds a programmable circuit input slot to the side of a machine. */ -public class ProgrammableCircuitSlotTrait extends NotifiableRecipeHandlerTrait implements IAttachConfiguratorsTrait, ICapabilityTrait { +public class ProgrammableCircuitSlotTrait extends NotifiableRecipeHandlerTrait + implements IAttachConfiguratorsTrait, ICapabilityTrait { - public static final MachineTraitType TYPE = new MachineTraitType<>(ProgrammableCircuitSlotTrait.class); + public static final MachineTraitType TYPE = new MachineTraitType<>( + ProgrammableCircuitSlotTrait.class); @SaveField public final CustomItemStackHandler storage; @@ -68,7 +72,7 @@ public void addedToController(MultiblockControllerMachine controller) { @Override public void removedFromController(MultiblockControllerMachine controller) { var allControllersAllowCircuits = true; - for (var c : ((MultiblockPartMachine)getMachine()).getControllers()) { + for (var c : ((MultiblockPartMachine) getMachine()).getControllers()) { if (!c.allowCircuitSlots()) { allControllersAllowCircuits = false; break; @@ -90,7 +94,8 @@ public IO getCapabilityIO() { } @Override - public @Nullable List handleRecipeInner(IO io, GTRecipe recipe, List left, boolean simulate) { + public @Nullable List handleRecipeInner(IO io, GTRecipe recipe, List left, + boolean simulate) { if (!enabled) return left; return NotifiableItemStackHandler.handleRecipe(io, recipe, left, simulate, getHandlerIO(), storage); } 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 75be4996b92..e28178d47db 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 @@ -118,31 +118,32 @@ public IGTFluidBuilder createFluid(String name, String langKey, Material materia return fluid(this, material, name, langKey, stillTexture, flowingTexture); } - public MachineBuilder machine(String name, - Function definitionFactory, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { + public MachineBuilder machine(String name, + Function definitionFactory, + BiFunction blockFactory, + BiFunction itemFactory, + MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, definitionFactory, blockFactory, itemFactory, blockEntityFactory); } public MachineBuilder machine(String name, - MachineInstanceFactory blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, MachineDefinition::new, MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { + BiFunction blockFactory, + BiFunction itemFactory, + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, blockFactory, itemFactory, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, - MachineInstanceFactory blockEntityFactory) { + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java index 055aed7f9ab..2a6f595a8d2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java @@ -82,7 +82,8 @@ @MethodsReturnNonnullByDefault @RemapPrefixForJS("kjs$") @Accessors(chain = true, fluent = true) -public class MachineBuilder> +public class MachineBuilder> extends BuilderBase { protected final GTRegistrate registrate; @@ -654,7 +655,6 @@ protected void setupStateDefinition(MachineDefinition definition) { definition.registerDefaultState(defaultState); } - @HideFromJS public DEFINITION register() { this.registrate.object(name); @@ -683,7 +683,8 @@ public DEFINITION register() { var blockEntityBuilder = registrate .blockEntity( - (type, pos, state) -> instanceFactory.buildMachine(new BlockEntityCreationInfo(type, pos, state))) + (type, pos, state) -> instanceFactory + .buildMachine(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) .validBlock(block); if (hasBER) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java index 4f163bfac2c..023e31a218b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java @@ -34,8 +34,10 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @Accessors(chain = true, fluent = true) -public class MultiblockMachineBuilder> extends MachineBuilder { +public class MultiblockMachineBuilder> + extends MachineBuilder { private boolean generator; private Function pattern; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java index 5ea07c7de6f..0b906876819 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/package-info.java @@ -1,7 +1,4 @@ @NotNullByDefault package com.gregtechceu.gtceu.api.registry.registrate; -import net.minecraft.MethodsReturnNonnullByDefault; import org.jetbrains.annotations.NotNullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; 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 d22d3f6a3d3..ac9b3cdd1dd 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 @@ -202,17 +202,17 @@ public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate } public static MachineDefinition[] registerTieredMachines(String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MachineDefinition> builder, - int... tiers) { + MachineInstanceFactory.Tiered factory, + BiFunction, MachineDefinition> builder, + int... tiers) { return registerTieredMachines(REGISTRATE, name, factory, builder, tiers); } public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate, - String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MachineDefinition> builder, - int... tiers) { + String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MachineDefinition> builder, + int... tiers) { MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate @@ -224,15 +224,18 @@ public static MachineDefinition[] registerTieredMa return definitions; } - public static Pair registerSteamMachines(String name, - MachineInstanceFactory.Steam factory, - BiFunction, MachineDefinition> builder) { + public static < + MACHINE extends MetaMachine> Pair registerSteamMachines(String name, + MachineInstanceFactory.Steam factory, + BiFunction, MachineDefinition> builder) { return registerSteamMachines(REGISTRATE, name, factory, builder); } - public static Pair registerSteamMachines(GTRegistrate registrate, String name, - MachineInstanceFactory.Steam factory, - BiFunction, MachineDefinition> builder) { + public static < + MACHINE extends MetaMachine> Pair registerSteamMachines(GTRegistrate registrate, + String name, + MachineInstanceFactory.Steam factory, + BiFunction, MachineDefinition> builder) { MachineDefinition lowTier = builder.apply(false, registrate.machine("lp_%s".formatted(name), holder -> factory.buildMachine(holder, false)) .langValue("Low Pressure " + FormattingUtil.toEnglishName(name)) @@ -677,17 +680,20 @@ public static MachineDefinition registerTankValve(GTRegistrate registrate, Strin return builder.register(); } - public static MultiblockMachineDefinition[] registerTieredMultis(String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MultiblockMachineDefinition> builder, - int... tiers) { + public static < + MACHINE extends MultiblockControllerMachine> MultiblockMachineDefinition[] registerTieredMultis(String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MultiblockMachineDefinition> builder, + int... tiers) { return registerTieredMultis(REGISTRATE, name, factory, builder, tiers); } - public static MultiblockMachineDefinition[] registerTieredMultis(GTRegistrate registrate, String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MultiblockMachineDefinition> builder, - int... tiers) { + 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]; for (int tier : tiers) { var register = registrate 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 e8e2152bd2a..7920680be49 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 @@ -434,9 +434,13 @@ public class GTResearchMachines { Component.translatable("gtceu.part_sharing.disabled")) .register(); - private static MachineBuilder registerDataHatch(String name, String displayName, int tier, - MachineInstanceFactory constructor, - String model, PartAbility... abilities) { + private static < + MACHINE extends MetaMachine> MachineBuilder registerDataHatch(String name, + String displayName, + int tier, + MachineInstanceFactory constructor, + String model, + PartAbility... abilities) { return REGISTRATE.machine(name, constructor) .langValue(displayName) .tier(tier) @@ -445,9 +449,12 @@ public class GTResearchMachines { .overlayTieredHullModel(model); } - private static MachineBuilder registerHPCAPart(String name, String displayName, - MachineInstanceFactory constructor, - String texture, boolean isAdvanced) { + private static < + MACHINE extends MetaMachine> MachineBuilder registerHPCAPart(String name, + String displayName, + MachineInstanceFactory constructor, + String texture, + boolean isAdvanced) { return REGISTRATE.machine(name, constructor) .langValue(displayName) .rotationState(RotationState.ALL) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java index d7d280cb8a7..bf39b232185 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java @@ -78,7 +78,8 @@ public InteractionResult useOn(UseOnContext context) { int circuitSetting = getCircuitConfiguration(stack); BlockEntity entity = context.getLevel().getBlockEntity(context.getClickedPos()); if (entity instanceof MetaMachine machine && context.isSecondaryUseActive()) { - machine.getTraitOptional(ProgrammableCircuitSlotTrait.TYPE).ifPresent(t -> t.setCurrentCircuit(circuitSetting)); + machine.getTraitOptional(ProgrammableCircuitSlotTrait.TYPE) + .ifPresent(t -> t.setCurrentCircuit(circuitSetting)); return InteractionResult.SUCCESS; } return IItemUIHolder.super.useOn(context); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java b/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java index 552f3da9372..9f10176de4d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/GTMachineInstanceFactories.java @@ -9,8 +9,10 @@ import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; import com.gregtechceu.gtceu.common.machine.trait.multiblock.MultiblockFluidRendererTrait; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; + import org.jetbrains.annotations.ApiStatus; import java.util.HashSet; @@ -91,31 +93,37 @@ public interface GTMachineInstanceFactories { MachineInstanceFactory HPCA_EMPTY = (info) -> { var hpcaTrait = new HPCAComponentTrait(0, 0, false, false); - return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_EMPTY_COMPONENT, GTGuiTextures.HPCA_EMPTY_COMPONENT, hpcaTrait); + return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_EMPTY_COMPONENT, + GTGuiTextures.HPCA_EMPTY_COMPONENT, hpcaTrait); }; MachineInstanceFactory HPCA_BRIDGE = (info) -> { var hpcaTrait = new HPCAComponentTrait(GTValues.VA[GTValues.IV], GTValues.VA[GTValues.IV], false, true); - return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_BRIDGE_COMPONENT, GTGuiTextures.HPCA_BRIDGE_COMPONENT, hpcaTrait); + return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_BRIDGE_COMPONENT, + GTGuiTextures.HPCA_BRIDGE_COMPONENT, hpcaTrait); }; MachineInstanceFactory HPCA_COMPUTATION = (info) -> { var hpcaTrait = HPCAComponentPartMachine.createHPCAComputationTrait(false); - return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_COMPUTATION_COMPONENT, GTGuiTextures.HPCA_DAMAGED_COMPUTATION_COMPONENT, hpcaTrait); + return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_COMPUTATION_COMPONENT, + GTGuiTextures.HPCA_DAMAGED_COMPUTATION_COMPONENT, hpcaTrait); }; MachineInstanceFactory HPCA_COMPUTATION_ADVANCED = (info) -> { var hpcaTrait = HPCAComponentPartMachine.createHPCAComputationTrait(true); - return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_ADVANCED_COMPUTATION_COMPONENT, GTGuiTextures.HPCA_DAMAGED_ADVANCED_COMPUTATION_COMPONENT, hpcaTrait); + return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_ADVANCED_COMPUTATION_COMPONENT, + GTGuiTextures.HPCA_DAMAGED_ADVANCED_COMPUTATION_COMPONENT, hpcaTrait); }; MachineInstanceFactory HPCA_COOLER = (info) -> { var hpcaTrait = HPCAComponentPartMachine.createHPCACoolerTrait(false); - return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_HEAT_SINK_COMPONENT, GTGuiTextures.HPCA_HEAT_SINK_COMPONENT, hpcaTrait); + return new HPCAComponentPartMachine(info, false, GTGuiTextures.HPCA_HEAT_SINK_COMPONENT, + GTGuiTextures.HPCA_HEAT_SINK_COMPONENT, hpcaTrait); }; MachineInstanceFactory HPCA_COOLER_ADVANCED = (info) -> { var hpcaTrait = HPCAComponentPartMachine.createHPCACoolerTrait(true); - return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_ACTIVE_COOLER_COMPONENT, GTGuiTextures.HPCA_ACTIVE_COOLER_COMPONENT, hpcaTrait); + return new HPCAComponentPartMachine(info, true, GTGuiTextures.HPCA_ACTIVE_COOLER_COMPONENT, + GTGuiTextures.HPCA_ACTIVE_COOLER_COMPONENT, hpcaTrait); }; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java index 42a3daaa716..91829b8c24d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java @@ -13,7 +13,6 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; -import lombok.Getter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -23,6 +22,7 @@ import net.minecraft.world.level.block.state.BlockState; import brachy.modularui.drawable.UITexture; +import lombok.Getter; import org.jetbrains.annotations.Nullable; import java.util.Set; @@ -46,7 +46,6 @@ public ConverterMachine(BlockEntityCreationInfo info, int tier, int amps) { energyContainer = attachTrait(new ConverterTrait(this, tier, amps)); environmentalExplosionTrait = attachTrait(new EnvironmentalExplosionTrait(tier, tier * 10, () -> energyContainer.getEnergyStored() > 0)); - } ////////////////////////////////////// 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 d7f14cfd0fb..49fc97819f2 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 @@ -90,7 +90,6 @@ public FluidHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, Noti this.circuitSlot = attachTrait(new ProgrammableCircuitSlotTrait()); circuitSlot.setEnabled(io == IO.IN); - } ////////////////////////////////////// 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 ab0806e6da9..5b26319ca97 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 @@ -65,9 +65,10 @@ public class ItemBusPartMachine extends TieredIOPartMachine /** * Creates an item bus with the default number of slots + * * @param info {@link BlockEntityCreationInfo} * @param tier Machine tier. - * @param io IO mode of this item bus. + * @param io IO mode of this item bus. */ public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io) { this(info, tier, io, new NotifiableItemStackHandler(getInventorySize(tier), io)); @@ -75,9 +76,10 @@ public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io) { /** * Creates an item bus with a custom {@link NotifiableItemStackHandler}. - * @param info {@link BlockEntityCreationInfo} - * @param tier Machine tier. - * @param io IO mode of this item bus. + * + * @param info {@link BlockEntityCreationInfo} + * @param tier Machine tier. + * @param io IO mode of this item bus. * @param inventory The {@link NotifiableItemStackHandler} to attach */ public ItemBusPartMachine(BlockEntityCreationInfo info, int tier, IO io, NotifiableItemStackHandler inventory) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java index b73782e44c7..ee561bc99b4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ReservoirHatchPartMachine.java @@ -24,8 +24,9 @@ public class ReservoirHatchPartMachine extends FluidHatchPartMachine { public static final int FLUID_AMOUNT = 2_000_000_000; public ReservoirHatchPartMachine(BlockEntityCreationInfo info) { - super(info, GTValues.EV, IO.IN, new NotifiableFluidTank(Collections.singletonList(new InfiniteWaterTank(FLUID_AMOUNT)), IO.IN, IO.BOTH)); - waterTank = (InfiniteWaterTank)tank.getStorages()[0]; + super(info, GTValues.EV, IO.IN, new NotifiableFluidTank( + Collections.singletonList(new InfiniteWaterTank(FLUID_AMOUNT)), IO.IN, IO.BOTH)); + waterTank = (InfiniteWaterTank) tank.getStorages()[0]; } ////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java index 08b343d8bd2..a394919760d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraftforge.fluids.FluidType; 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 730f79bf3f3..65df57d4bf4 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 @@ -5,9 +5,9 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComponentTrait; - import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCAComputationProviderTrait; import com.gregtechceu.gtceu.common.machine.trait.hpca.HPCACoolantProviderTrait; + import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.item.ItemStack; @@ -29,7 +29,8 @@ public class HPCAComponentPartMachine extends MultiblockPartMachine { protected final IDrawable componentIcon; protected final IDrawable damagedComponentIcon; - public HPCAComponentPartMachine(BlockEntityCreationInfo info, boolean isAdvanced, IDrawable hpcaComponentIcon, IDrawable hpcaComponentIconDamaged, + public HPCAComponentPartMachine(BlockEntityCreationInfo info, boolean isAdvanced, IDrawable hpcaComponentIcon, + IDrawable hpcaComponentIconDamaged, HPCAComponentTrait hpcaTrait) { super(info); this.isAdvanced = isAdvanced; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java index 1e9f2b59c28..2cdd0851d1a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/BatterySlotTrait.java @@ -1,8 +1,5 @@ package com.gregtechceu.gtceu.common.machine.trait; -import brachy.modularui.screen.ModularPanel; -import brachy.modularui.value.sync.PanelSyncManager; -import brachy.modularui.widgets.layout.Flow; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; @@ -14,6 +11,10 @@ import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.ISubscription; + +import brachy.modularui.screen.ModularPanel; +import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widgets.layout.Flow; import lombok.Getter; import org.jetbrains.annotations.Nullable; @@ -36,6 +37,7 @@ public class BatterySlotTrait extends MachineTrait implements IAttachConfigurato /** * Creates a battery charger slot trait + * * @param energyContainerToUse The energy container which the battery should draw energy from/push energy to. */ public BatterySlotTrait(NotifiableEnergyContainer energyContainerToUse) { @@ -83,7 +85,6 @@ protected void chargeBattery() { } } - @Override public void onMachineDestroyed() { storage.dropInventoryInWorld(getLevel(), getBlockPos()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java index db59d019c23..6389b9a61a3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ExhaustVentMachineTrait.java @@ -26,6 +26,7 @@ /** * Machine trait that adds an exhaust vent to a specific side of a machine. + * * @see VentCondition */ public class ExhaustVentMachineTrait extends MachineTrait { diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index b8c893bc6c5..0cd9345b1eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -9,12 +9,10 @@ import com.gregtechceu.gtceu.api.machine.feature.IVoidable; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDistinctPart; import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; -import com.gregtechceu.gtceu.api.recipe.gui.GTRecipeTypeUILayout; import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTMath; import net.minecraft.network.chat.Component; @@ -257,7 +255,8 @@ public static ModularPanel createCircuitSlotPanel(Consumer circuit return createCircuitSlotPanel(circuitSyncValue, syncManager); } - public static ButtonWidget createCircuitSlotPanel(ProgrammableCircuitSlotTrait circuitTrait, ModularPanel parentPanel, + public static ButtonWidget createCircuitSlotPanel(ProgrammableCircuitSlotTrait circuitTrait, + ModularPanel parentPanel, PanelSyncManager syncManager) { IntSyncValue circuitSyncValue = createCircuitSlotSyncValue( i -> circuitTrait.storage.setStackInSlot(0, i), @@ -294,7 +293,8 @@ public static ButtonWidget createCircuitSlotPanel(ProgrammableCircuitSlotTrai .asIcon().size(16); })) .tooltipAutoUpdate(true) - .tooltipBuilder((r) -> r.addLine(Text.lang("metaitem.int_circuit.configuration", circuitTrait.getCircuit()))); + .tooltipBuilder((r) -> r + .addLine(Text.lang("metaitem.int_circuit.configuration", circuitTrait.getCurrentCircuit()))); } private static int nextCircuitValue(ItemStack stack, int current, double delta) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java index f76b9af4b13..75443b62bf8 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java @@ -42,7 +42,7 @@ public class MEInputBusPartMachine extends MEBusPartMachine public MEInputBusPartMachine(BlockEntityCreationInfo info) { super(info, IO.IN, new ExportOnlyAEItemList(CONFIG_SIZE)); - aeItemHandler = (ExportOnlyAEItemList)getInventory(); + aeItemHandler = (ExportOnlyAEItemList) getInventory(); } public MEInputBusPartMachine(BlockEntityCreationInfo info, NotifiableItemStackHandler inventory) { @@ -247,7 +247,7 @@ protected CompoundTag writeConfigToTag() { configStacks.put(Integer.toString(i), stackTag); } tag.putByte("GhostCircuit", - (byte)circuitSlot.getCurrentCircuit()); + (byte) circuitSlot.getCurrentCircuit()); tag.putBoolean("DistinctBuses", isDistinct()); return tag; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java index 6b242d73d73..22a97394733 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java @@ -232,7 +232,7 @@ protected CompoundTag writeConfigToTag() { CompoundTag stackTag = GenericStack.writeTag(config); configStacks.put(Integer.toString(i), stackTag); } - tag.putByte("GhostCircuit", (byte)circuitSlot.getCurrentCircuit()); + tag.putByte("GhostCircuit", (byte) circuitSlot.getCurrentCircuit()); return tag; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java index fa31b945f66..92392a7943e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java @@ -10,8 +10,6 @@ import com.gregtechceu.gtceu.integration.ae2.gui.ScrollPreservingGrid; import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; -import lombok.Getter; -import lombok.Setter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; @@ -29,7 +27,9 @@ import brachy.modularui.widgets.DynamicSyncedWidget; import brachy.modularui.widgets.TextWidget; import brachy.modularui.widgets.layout.Flow; +import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import org.jetbrains.annotations.Nullable; import java.util.Collections; @@ -49,7 +49,7 @@ public class MEOutputBusPartMachine extends MEBusPartMachine { public MEOutputBusPartMachine(BlockEntityCreationInfo info) { super(info, IO.OUT, new InaccessibleInfiniteHandler()); - internalBuffer = ((InaccessibleInfiniteHandler)getInventory()).getInternalBuffer(); + internalBuffer = ((InaccessibleInfiniteHandler) getInventory()).getInternalBuffer(); } ///////////////////////////////// @@ -130,17 +130,17 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn } private static class InaccessibleInfiniteHandler extends NotifiableItemStackHandler { + @Getter private KeyStorage internalBuffer; public InaccessibleInfiniteHandler() { super(1, IO.OUT, IO.NONE, ItemStackHandlerDelegate::new); internalBuffer = new KeyStorage(); - ((ItemStackHandlerDelegate)storage).setKeyStorage(internalBuffer); + ((ItemStackHandlerDelegate) storage).setKeyStorage(internalBuffer); internalBuffer.setOnContentsChanged(this::onContentsChanged); } - @Override public List getContents() { return Collections.emptyList(); @@ -162,7 +162,8 @@ private static class ItemStackHandlerDelegate extends CustomItemStackHandler { @Getter @Setter - @Nullable KeyStorage keyStorage = null; + @Nullable + KeyStorage keyStorage = null; // Necessary for InaccessibleInfiniteHandler public ItemStackHandlerDelegate(Integer integer) { 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 5111fd9e2e6..9c2fb6003f3 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 @@ -149,7 +149,7 @@ public void setItemDirect(int slotIndex, ItemStack stack) { protected TickableSubscription updateSubs; public MEPatternBufferPartMachine(BlockEntityCreationInfo info) { - super(info, IO.IN); + super(info, IO.IN, new NotifiableItemStackHandler(9, IO.IN, IO.NONE)); patternInventory.setOnContentsChanged(() -> getSyncDataHolder().markClientSyncFieldDirty("patternInventory")); this.patternInventory.setFilter(stack -> stack.getItem() instanceof ProcessingPatternItem); for (int i = 0; i < this.internalInventory.length; i++) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java index 1bf707c8288..fdb004299af 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java @@ -61,8 +61,8 @@ public class MEStockingBusPartMachine extends MEInputBusPartMachine implements I public MEStockingBusPartMachine(BlockEntityCreationInfo info) { super(info, new ExportOnlyAEStockingItemList(CONFIG_SIZE)); this.autoPullTest = $ -> false; - this.aeItemHandler = (ExportOnlyAEItemList)getInventory(); - ((ExportOnlyAEStockingItemList)getInventory()).setStockingBusPartMachine(this); + this.aeItemHandler = (ExportOnlyAEItemList) getInventory(); + ((ExportOnlyAEStockingItemList) getInventory()).setStockingBusPartMachine(this); } ///////////////////////////////// @@ -275,7 +275,7 @@ protected CompoundTag writeConfigToTag() { CompoundTag tag = new CompoundTag(); tag.putBoolean("AutoPull", true); tag.putByte("GhostCircuit", - (byte)circuitSlot.getCurrentCircuit()); + (byte) circuitSlot.getCurrentCircuit()); return tag; } @@ -295,7 +295,8 @@ protected void readConfigFromTag(CompoundTag tag) { private static class ExportOnlyAEStockingItemList extends ExportOnlyAEItemList { @Getter - @Nullable MEStockingBusPartMachine stockingBusPartMachine; + @Nullable + MEStockingBusPartMachine stockingBusPartMachine; public ExportOnlyAEStockingItemList(int slots) { super(slots, ExportOnlyAEStockingItemSlot::new); @@ -303,7 +304,7 @@ public ExportOnlyAEStockingItemList(int slots) { public void setStockingBusPartMachine(@Nullable MEStockingBusPartMachine stockingBusPartMachine) { this.stockingBusPartMachine = stockingBusPartMachine; - for (var slot: ((ExportOnlyAEStockingItemSlot[])inventory)) { + for (var slot : ((ExportOnlyAEStockingItemSlot[]) inventory)) { slot.setStockingBusPartMachine(stockingBusPartMachine); } } @@ -333,7 +334,8 @@ private static class ExportOnlyAEStockingItemSlot extends ExportOnlyAEItemSlot { @Getter @Setter - @Nullable MEStockingBusPartMachine stockingBusPartMachine; + @Nullable + MEStockingBusPartMachine stockingBusPartMachine; public ExportOnlyAEStockingItemSlot() { super(); @@ -350,7 +352,8 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { // Extract the items from the real net to either validate (simulate) // or extract (modulate) when this is called if (!stockingBusPartMachine.isOnline()) return ItemStack.EMPTY; - MEStorage aeNetwork = stockingBusPartMachine.getMainNode().getGrid().getStorageService().getInventory(); + MEStorage aeNetwork = stockingBusPartMachine.getMainNode().getGrid().getStorageService() + .getInventory(); Actionable action = simulate ? Actionable.SIMULATE : Actionable.MODULATE; var key = config.what(); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java index 6913cbd99b6..9bf935b0cde 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java @@ -7,7 +7,6 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.machine.feature.multiblock.IMEStockingPart; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidList; @@ -268,7 +267,7 @@ protected CompoundTag writeConfigToTag() { CompoundTag tag = new CompoundTag(); tag.putBoolean("AutoPull", true); tag.putByte("GhostCircuit", - (byte)circuitSlot.getCurrentCircuit()); + (byte) circuitSlot.getCurrentCircuit()); return tag; } 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 1688142a6c1..563b94492e8 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 @@ -82,7 +82,7 @@ public MultiblockMachineDefinition register() { } public static MultiblockMachineBuilder createKJSMulti(ResourceLocation id, - KJSTieredMachineBuilder.CreationFunction machine) { + KJSTieredMachineBuilder.CreationFunction machine) { return new MultiblockMachineBuilder<>(GTRegistration.REGISTRATE, id.getPath(), MetaMachineBlock::new, MetaMachineItem::new, diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java index 164dc9c4371..2722dd862e5 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java @@ -1,11 +1,11 @@ package com.gregtechceu.gtceu.utils.data; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; import com.gregtechceu.gtceu.api.machine.trait.ProgrammableCircuitSlotTrait; import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; + import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag;