From f5a8c13a34b5a2bebcaad6493907d44907d540f1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:01:56 -0700 Subject: [PATCH 001/112] initial work of multi abilities --- .../multiblock/IMultiblockAbilityPart.java | 10 ++- .../multiblock/MultiblockAbility.java | 16 ++++- .../multiblock/MultiblockControllerBase.java | 14 ++-- .../electric/MetaTileEntityDiode.java | 5 +- .../electric/MetaTileEntityHull.java | 5 +- .../multi/MetaTileEntityPumpHatch.java | 6 +- .../multi/MetaTileEntityTankValve.java | 5 +- .../MetaTileEntityAutoMaintenanceHatch.java | 6 +- .../MetaTileEntityComputationHatch.java | 5 +- .../MetaTileEntityDataAccessHatch.java | 4 +- .../MetaTileEntityEnergyHatch.java | 5 +- .../MetaTileEntityFluidHatch.java | 69 +++++++++++++++++-- .../multiblockpart/MetaTileEntityItemBus.java | 4 +- .../MetaTileEntityLaserHatch.java | 4 +- .../MetaTileEntityMachineHatch.java | 5 +- .../MetaTileEntityMaintenanceHatch.java | 5 +- .../MetaTileEntityMufflerHatch.java | 5 +- .../MetaTileEntityMultiFluidHatch.java | 6 +- .../MetaTileEntityObjectHolder.java | 5 +- .../MetaTileEntityOpticalDataHatch.java | 5 +- .../MetaTileEntityPassthroughHatchFluid.java | 5 +- .../MetaTileEntityPassthroughHatchItem.java | 5 +- .../MetaTileEntityReservoirHatch.java | 5 +- .../MetaTileEntityRotorHolder.java | 5 +- .../appeng/MetaTileEntityMEInputBus.java | 5 +- .../appeng/MetaTileEntityMEInputHatch.java | 5 +- .../appeng/MetaTileEntityMEOutputBus.java | 5 +- .../appeng/MetaTileEntityMEOutputHatch.java | 5 +- .../hpca/MetaTileEntityHPCAComponent.java | 5 +- .../MetaTileEntitySteamHatch.java | 5 +- .../MetaTileEntitySteamItemBus.java | 5 +- 31 files changed, 179 insertions(+), 65 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index d71121f196d..2f535feafd7 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -1,10 +1,18 @@ package gregtech.api.metatileentity.multiblock; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; import java.util.List; public interface IMultiblockAbilityPart extends IMultiblockPart { MultiblockAbility getAbility(); - void registerAbilities(List abilityList); + default @NotNull List> getAbilities() { + return Collections.singletonList(getAbility()); + } + + @NotNull + List registerAbilities(@NotNull MultiblockAbility key); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index 4c23893823c..b5187267437 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -83,7 +83,21 @@ public static void registerMultiblockAbility(MultiblockAbility ability, MetaT REGISTRY.get(ability).add(part); } + private final String name; + public MultiblockAbility(String name) { - NAME_REGISTRY.put(name.toLowerCase(), this); + this.name = name.toLowerCase(); + NAME_REGISTRY.put(this.name, this); + } + + @Override + public String toString() { + return name; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof MultiblockAbilityother && + this.name.equals(other.toString()); } } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index ff3848b1557..0034534fe12 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -333,6 +333,7 @@ protected Function multiblockPartSorter() { return BlockPos::hashCode; } + @SuppressWarnings({ "rawtypes", "unchecked" }) public void checkStructurePattern() { if (structurePattern == null) return; PatternMatchContext context = structurePattern.checkPatternFastAt(getWorld(), getPos(), @@ -351,12 +352,13 @@ public void checkStructurePattern() { parts.sort(Comparator.comparing(it -> multiblockPartSorter().apply(((MetaTileEntity) it).getPos()))); Map, List> abilities = new HashMap<>(); for (IMultiblockPart multiblockPart : parts) { - if (multiblockPart instanceof IMultiblockAbilityPart) { - @SuppressWarnings("unchecked") - IMultiblockAbilityPart abilityPart = (IMultiblockAbilityPart) multiblockPart; - List abilityInstancesList = abilities.computeIfAbsent(abilityPart.getAbility(), - k -> new ArrayList<>()); - abilityPart.registerAbilities(abilityInstancesList); + if (multiblockPart instanceof IMultiblockAbilityPart multiblockAbilityPart) { + List m = multiblockAbilityPart.getAbilities(); + for (MultiblockAbility ability : m) { + List abilityInstancesList = abilities.computeIfAbsent(ability, + k -> new ArrayList<>()); + abilityInstancesList.addAll(multiblockAbilityPart.registerAbilities(ability)); + } } } this.multiblockParts.addAll(parts); diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index 8512fbb181f..76553ff2c9a 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -36,6 +36,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collections; import java.util.List; import static gregtech.api.capability.GregtechDataCodes.AMP_INDEX; @@ -182,8 +183,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(@NotNull List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java index 328c9d08884..45231ed2fe8 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java @@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityHull extends MetaTileEntityMultiblockPart @@ -110,8 +111,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(@NotNull List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java index bbdfff7ae9d..0afb2a1b39a 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java @@ -41,8 +41,10 @@ import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.RichTextWidget; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityPumpHatch extends MetaTileEntityMultiblockPart @@ -112,8 +114,8 @@ public ICubeRenderer getBaseTexture() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(exportFluids.getTankAt(0)); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(exportFluids.getTankAt(0)); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java index 13f9c9657f3..8d3e3f44297 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityTankValve extends MetaTileEntityMultiblockPart @@ -122,8 +123,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(@NotNull List abilityList) { - abilityList.add(this.getImportFluids()); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this.getImportFluids()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java index c1ac8373b43..82f58689c89 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java @@ -20,8 +20,10 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityAutoMaintenanceHatch extends MetaTileEntityMultiblockPart implements @@ -104,8 +106,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java index 85c2bc25173..ac4817088ef 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; import java.util.List; public class MetaTileEntityComputationHatch extends MetaTileEntityMultiblockPart implements @@ -151,8 +152,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java index a50acc06ba0..1a849aab8ec 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java @@ -213,8 +213,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java index 5d0b13fc491..ad0a37fc548 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.lang.ref.WeakReference; import java.util.List; @@ -116,8 +117,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(energyContainer); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(energyContainer); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 4cb1dd3003e..556806137fd 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -1,8 +1,14 @@ package gregtech.common.metatileentities.multi.multiblockpart; -import gregtech.api.capability.*; +import gregtech.api.capability.GregtechDataCodes; +import gregtech.api.capability.GregtechTileCapabilities; +import gregtech.api.capability.IControllable; +import gregtech.api.capability.IFilter; +import gregtech.api.capability.IFilteredFluidContainer; +import gregtech.api.capability.IGhostSlotConfigurable; import gregtech.api.capability.impl.FilteredItemHandler; import gregtech.api.capability.impl.FluidTankList; +import gregtech.api.capability.impl.GhostCircuitItemStackHandler; import gregtech.api.capability.impl.NotifiableFluidTank; import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; @@ -51,16 +57,20 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collections; import java.util.List; public class MetaTileEntityFluidHatch extends MetaTileEntityMultiblockNotifiablePart - implements IMultiblockAbilityPart, IControllable { + implements IMultiblockAbilityPart, IControllable, + IGhostSlotConfigurable { public static final int INITIAL_INVENTORY_SIZE = 8000; // only holding this for convenience protected final HatchFluidTank fluidTank; protected boolean workingEnabled; + private GhostCircuitItemStackHandler circuitInventory; // export hatch-only fields protected boolean locked; @@ -74,6 +84,31 @@ public MetaTileEntityFluidHatch(ResourceLocation metaTileEntityId, int tier, boo initializeInventory(); } + @Override + protected void initializeInventory() { + super.initializeInventory(); + if (!this.hasGhostCircuitInventory()) return; + + this.circuitInventory = new GhostCircuitItemStackHandler(this); + this.circuitInventory.addNotifiableMetaTileEntity(this); + } + + @Override + public boolean hasGhostCircuitInventory() { + return !isExportHatch; + } + + @Override + public void setGhostCircuitConfig(int config) { + if (this.circuitInventory == null || this.circuitInventory.getCircuitValue() == config) { + return; + } + this.circuitInventory.setCircuitValue(config); + if (!getWorld().isRemote) { + markDirty(); + } + } + @Override public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) { return new MetaTileEntityFluidHatch(metaTileEntityId, getTier(), isExportHatch); @@ -218,8 +253,20 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(fluidTank); + public @NotNull List> getAbilities() { + return isExportHatch ? + Collections.singletonList(MultiblockAbility.EXPORT_FLUIDS): + Arrays.asList(MultiblockAbility.IMPORT_FLUIDS, MultiblockAbility.IMPORT_ITEMS); + } + + @Override + public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { + if (key.equals(MultiblockAbility.EXPORT_FLUIDS) || key.equals(MultiblockAbility.IMPORT_FLUIDS)) { + return Collections.singletonList(fluidTank); + } else if (key.equals(MultiblockAbility.IMPORT_ITEMS)) { + return Collections.singletonList(circuitInventory); + } + return Collections.emptyList(); } @Override @@ -256,6 +303,20 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .addTooltip(true, IKey.lang("gregtech.gui.fluid_lock.tooltip.enabled")) .addTooltip(false, IKey.lang("gregtech.gui.fluid_lock.tooltip.disabled"))) +// if (this.circuitInventory != null) { +// SlotWidget circuitSlot = new GhostCircuitSlotWidget(circuitInventory, 0, 124, 62) +// .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.INT_CIRCUIT_OVERLAY); +// builder.widget(circuitSlot.setConsumer(slotWidget -> { +// String configString; +// if (circuitInventory == null || circuitInventory.getCircuitValue() == GhostCircuitItemStackHandler.NO_CONFIG) { +// configString = new TextComponentTranslation("gregtech.gui.configurator_slot.no_value").getFormattedText(); +// } else { +// configString = String.valueOf(circuitInventory.getCircuitValue()); +// } +// +// slotWidget.setTooltipText("gregtech.gui.configurator_slot.tooltip", configString); +// })); +// } // import specific .childIf(!isExportHatch, GTGuiTextures.TANK_ICON.asWidget() .pos(91, 36) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java index 37c145eab75..90da20b7446 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java @@ -255,12 +255,14 @@ public void receiveCustomData(int dataId, PacketBuffer buf) { } @Override - public void registerAbilities(List abilityList) { + public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { + var abilityList = new ArrayList<>(); if (this.hasGhostCircuitInventory() && this.actualImportItems != null) { abilityList.add(isExportHatch ? this.exportItems : this.actualImportItems); } else { abilityList.add(isExportHatch ? this.exportItems : this.importItems); } + return abilityList; } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java index 3d594d4827d..28d419529a9 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java @@ -71,8 +71,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this.buffer); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this.buffer); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java index 46f47cf3928..852ded77c94 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityMachineHatch extends MetaTileEntityMultiblockNotifiablePart @@ -58,8 +59,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(machineHandler); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(machineHandler); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java index 6c8e3cd2e97..ea9502d71c7 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java @@ -53,6 +53,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.function.Consumer; @@ -516,8 +517,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java index 2d53b425b5f..bd17246dcaf 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java @@ -40,6 +40,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class MetaTileEntityMufflerHatch extends MetaTileEntityMultiblockPart implements @@ -145,8 +146,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java index ff1b2341f32..519fe37b3d9 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java @@ -37,8 +37,10 @@ import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.widgets.layout.Grid; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.ArrayList; import java.util.List; @@ -199,8 +201,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.addAll(fluidTankList.getFluidTanks()); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return fluidTankList.getFluidTanks(); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java index d358d7eccc7..9cc2161be04 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java @@ -40,6 +40,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityObjectHolder extends MetaTileEntityMultiblockNotifiablePart @@ -115,8 +116,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java index b86782957d2..681d4ff9ce3 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java @@ -28,6 +28,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; import java.util.List; public class MetaTileEntityOpticalDataHatch extends MetaTileEntityMultiblockNotifiablePart implements @@ -128,8 +129,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(@NotNull List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 5305afee5e5..ba2e4fa5da5 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -45,6 +45,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class MetaTileEntityPassthroughHatchFluid extends MetaTileEntityMultiblockPart implements IPassthroughHatch, @@ -208,8 +209,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(@NotNull List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 7f9e5dc3b1c..35f39f10e4c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -46,6 +46,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class MetaTileEntityPassthroughHatchItem extends MetaTileEntityMultiblockPart implements IPassthroughHatch, @@ -220,8 +221,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(@NotNull List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index e91f6e4f05d..7d39a0f4f28 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -46,6 +46,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityReservoirHatch extends MetaTileEntityMultiblockNotifiablePart @@ -119,8 +120,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(fluidTank); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(fluidTank); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java index 7f3c732270e..3ff92e560f7 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java @@ -47,6 +47,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public class MetaTileEntityRotorHolder extends MetaTileEntityMultiblockNotifiablePart @@ -165,8 +166,8 @@ void setRotorSpinning(boolean spinning) { } @Override - public void registerAbilities(@NotNull List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java index b1e53f22f4a..f16f331f861 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java @@ -51,6 +51,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collections; import java.util.List; public class MetaTileEntityMEInputBus extends MetaTileEntityAEHostablePart @@ -330,8 +331,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List list) { - list.add(this.actualImportItems); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this.actualImportItems); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java index 2bcdc10f542..72ce10d6358 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java @@ -43,6 +43,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collections; import java.util.List; public class MetaTileEntityMEInputHatch extends MetaTileEntityAEHostablePart @@ -270,8 +271,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List list) { - list.addAll(Arrays.asList(this.getAEFluidHandler().getInventory())); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.unmodifiableList(Arrays.asList(this.getAEFluidHandler().getInventory())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java index 9e008b857e3..318094a30bc 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java @@ -41,6 +41,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class MetaTileEntityMEOutputBus extends MetaTileEntityAEHostablePart @@ -196,8 +197,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java index 26a8fcc7947..4991bb47eb1 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java @@ -43,6 +43,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class MetaTileEntityMEOutputHatch extends MetaTileEntityAEHostablePart @@ -198,8 +199,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List list) { - list.add(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java index dba69e698e8..c6ab8bd7aa4 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java @@ -33,6 +33,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; public abstract class MetaTileEntityHPCAComponent extends MetaTileEntityMultiblockPart implements @@ -67,8 +68,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(this); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java index cdcad82843f..0111f4c70d5 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java @@ -45,6 +45,7 @@ import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.RichTextWidget; import com.cleanroommc.modularui.widgets.SlotGroupWidget; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -128,8 +129,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.addAll(this.importFluids.getFluidTanks()); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return this.importFluids.getFluidTanks(); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java index 56b15d8c93f..896ab92ac38 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class MetaTileEntitySteamItemBus extends MetaTileEntityItemBus { @@ -56,8 +57,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(List abilityList) { - abilityList.add(isExportHatch ? this.exportItems : this.importItems); + public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + return Collections.singletonList(isExportHatch ? this.exportItems : this.importItems); } // Override base texture to have a bus with 4 slots, but ULV textures From ad55eeba3db0fa77f69341cc0ff72d6ff68fe21b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:38:53 -0700 Subject: [PATCH 002/112] add controller to notifiable --- .../multiblockpart/MetaTileEntityFluidHatch.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 556806137fd..66ea0c10576 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -15,6 +15,7 @@ import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; +import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.client.renderer.texture.Textures; @@ -365,6 +366,18 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .bindPlayerInventory(); } + @Override + public void addToMultiBlock(MultiblockControllerBase controllerBase) { + super.addToMultiBlock(controllerBase); + this.circuitInventory.addNotifiableMetaTileEntity(controllerBase); + } + + @Override + public void removeFromMultiBlock(MultiblockControllerBase controllerBase) { + super.removeFromMultiBlock(controllerBase); + this.circuitInventory.removeNotifiableMetaTileEntity(controllerBase); + } + @Override public void addInformation(ItemStack stack, @Nullable World player, @NotNull List tooltip, boolean advanced) { From 87cd43d125cc5672aae22ac504f2fe15d8b8aec0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:46:20 -0700 Subject: [PATCH 003/112] save to nbt --- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 66ea0c10576..72648ee775d 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -124,6 +124,8 @@ public NBTTagCompound writeToNBT(NBTTagCompound data) { if (locked && lockedFluid != null) { data.setTag("LockedFluid", lockedFluid.writeToNBT(new NBTTagCompound())); } + } else { + this.circuitInventory.write(data); } return data; } @@ -142,6 +144,8 @@ public void readFromNBT(NBTTagCompound data) { this.locked = data.getBoolean("IsLocked"); this.lockedFluid = this.locked ? FluidStack.loadFluidStackFromNBT(data.getCompoundTag("LockedFluid")) : null; + } else { + this.circuitInventory.read(data); } } From ab6a5e677751674bfd02e8486ffcb5e09e56c70a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:57:56 -0700 Subject: [PATCH 004/112] renames --- .../multiblock/MultiblockControllerBase.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index 0034534fe12..53c53ffdbf5 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -351,13 +351,13 @@ public void checkStructurePattern() { this.setFlipped(context.neededFlip()); parts.sort(Comparator.comparing(it -> multiblockPartSorter().apply(((MetaTileEntity) it).getPos()))); Map, List> abilities = new HashMap<>(); - for (IMultiblockPart multiblockPart : parts) { - if (multiblockPart instanceof IMultiblockAbilityPart multiblockAbilityPart) { - List m = multiblockAbilityPart.getAbilities(); - for (MultiblockAbility ability : m) { + for (IMultiblockPart part : parts) { + if (part instanceof IMultiblockAbilityPart abilityPart) { + List abilityList = abilityPart.getAbilities(); + for (MultiblockAbility ability : abilityList) { List abilityInstancesList = abilities.computeIfAbsent(ability, k -> new ArrayList<>()); - abilityInstancesList.addAll(multiblockAbilityPart.registerAbilities(ability)); + abilityInstancesList.addAll(abilityPart.registerAbilities(ability)); } } } From 7cba9da5179ccd0243bc4f59e9e339602f8cb0b6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 19 Mar 2024 12:00:28 -0700 Subject: [PATCH 005/112] spotless --- .../multiblockpart/MetaTileEntityFluidHatch.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 72648ee775d..7badfb9e2a8 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -64,7 +64,7 @@ public class MetaTileEntityFluidHatch extends MetaTileEntityMultiblockNotifiablePart implements IMultiblockAbilityPart, IControllable, - IGhostSlotConfigurable { + IGhostSlotConfigurable { public static final int INITIAL_INVENTORY_SIZE = 8000; @@ -260,7 +260,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List> getAbilities() { return isExportHatch ? - Collections.singletonList(MultiblockAbility.EXPORT_FLUIDS): + Collections.singletonList(MultiblockAbility.EXPORT_FLUIDS) : Arrays.asList(MultiblockAbility.IMPORT_FLUIDS, MultiblockAbility.IMPORT_ITEMS); } @@ -307,14 +307,15 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .value(new BooleanSyncValue(this::isLocked, b -> fluidSyncHandler.lockFluid(b, false))) .addTooltip(true, IKey.lang("gregtech.gui.fluid_lock.tooltip.enabled")) .addTooltip(false, IKey.lang("gregtech.gui.fluid_lock.tooltip.disabled"))) - // if (this.circuitInventory != null) { // SlotWidget circuitSlot = new GhostCircuitSlotWidget(circuitInventory, 0, 124, 62) // .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.INT_CIRCUIT_OVERLAY); // builder.widget(circuitSlot.setConsumer(slotWidget -> { // String configString; -// if (circuitInventory == null || circuitInventory.getCircuitValue() == GhostCircuitItemStackHandler.NO_CONFIG) { -// configString = new TextComponentTranslation("gregtech.gui.configurator_slot.no_value").getFormattedText(); +// if (circuitInventory == null || +// circuitInventory.getCircuitValue() == GhostCircuitItemStackHandler.NO_CONFIG) { +// configString = new TextComponentTranslation("gregtech.gui.configurator_slot.no_value") +// .getFormattedText(); // } else { // configString = String.valueOf(circuitInventory.getCircuitValue()); // } From b984e1de99107e3de23601bbea0202da6e2a1da6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:08:20 -0700 Subject: [PATCH 006/112] initial impl of dual handlers --- src/main/java/gregtech/api/DualHandler.java | 147 ++++++++++++++++++ .../multiblock/MultiblockAbility.java | 4 + .../RecipeMapMultiblockController.java | 1 + 3 files changed, 152 insertions(+) create mode 100644 src/main/java/gregtech/api/DualHandler.java diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java new file mode 100644 index 00000000000..941f597d6c6 --- /dev/null +++ b/src/main/java/gregtech/api/DualHandler.java @@ -0,0 +1,147 @@ +package gregtech.api; + +import gregtech.api.capability.INotifiableHandler; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.IDirtyNotifiable; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import net.minecraftforge.items.IItemHandlerModifiable; + +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public final class DualHandler implements IItemHandlerModifiable, IFluidHandler, INotifiableHandler { + + @Nullable + IItemHandlerModifiable itemDelegate; + @Nullable + IFluidHandler fluidDelegate; + @Nullable + IDirtyNotifiable dirtyNotifiable; + private final boolean isExport; + + private final List notifiables = new ArrayList<>(); + + public DualHandler(IItemHandlerModifiable itemDelegate, IFluidHandler fluidDelegate, IDirtyNotifiable notifiable, boolean isExport) { + this.itemDelegate = itemDelegate; + this.fluidDelegate = fluidDelegate; + this.dirtyNotifiable = notifiable; + this.isExport = isExport; + } + + @Override + public int getSlots() { + return itemDelegate == null ? 0 : itemDelegate.getSlots(); + } + + @Override + public ItemStack getStackInSlot(int slot) { + if (itemDelegate == null) return ItemStack.EMPTY; + return itemDelegate.getStackInSlot(slot); + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (itemDelegate == null) return stack; + return itemDelegate.insertItem(slot, stack, simulate); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (itemDelegate == null) return ItemStack.EMPTY; + return itemDelegate.extractItem(slot, amount, simulate); + } + + @Override + public int getSlotLimit(int slot) { + return itemDelegate.getSlotLimit(slot); + } + + public void onContentsCahgned() { + if (this.dirtyNotifiable != null) { + this.dirtyNotifiable.markAsDirty(); + } + notifiables.forEach(mte -> { + if (isExport) { + mte.addNotifiedOutput(this); + } else { + mte.addNotifiedInput(this); + } + }); + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + if (itemDelegate == null) return; + itemDelegate.setStackInSlot(slot, stack); + } + + @Override + public IFluidTankProperties[] getTankProperties() { + return fluidDelegate == null ? + new IFluidTankProperties[0] : + fluidDelegate.getTankProperties(); + } + + @Override + public int fill(FluidStack resource, boolean doFill) { + if (fluidDelegate == null) return 0; + return fluidDelegate.fill(resource, doFill); + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) { + if (fluidDelegate == null) return null; + return fluidDelegate.drain(resource, doDrain); + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + if (fluidDelegate == null) return null; + return fluidDelegate.drain(maxDrain, doDrain); + } + + @Override + public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { + this.notifiables.add(metaTileEntity); + } + + @Override + public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { + this.notifiables.remove(metaTileEntity); + } + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + + IItemHandlerModifiable itemHandler; + IFluidHandler fluidHandler; + IDirtyNotifiable notifiable; + + public Builder itemHandler(IItemHandlerModifiable itemHandler) { + this.itemHandler = itemHandler; + return this; + } + + public Builder fluidTank(IFluidHandler fluidTank) { + this.fluidHandler = fluidTank; + return this; + } + + public Builder notifiable(IDirtyNotifiable notifiable) { + this.notifiable = notifiable; + return this; + } + + public DualHandler build(boolean isExport) { + return new DualHandler(this.itemHandler, this.fluidHandler, this.notifiable, isExport); + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index b5187267437..e43374ad379 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -1,5 +1,6 @@ package gregtech.api.metatileentity.multiblock; +import gregtech.api.DualHandler; import gregtech.api.capability.*; import gregtech.api.metatileentity.MetaTileEntity; @@ -28,6 +29,9 @@ public class MultiblockAbility { public static final MultiblockAbility EXPORT_FLUIDS = new MultiblockAbility<>("export_fluids"); public static final MultiblockAbility IMPORT_FLUIDS = new MultiblockAbility<>("import_fluids"); + public static final MultiblockAbility EXPORT_DUAL = new MultiblockAbility<>("export_dual"); + public static final MultiblockAbility IMPORT_DUAL = new MultiblockAbility<>("import_dual"); + public static final MultiblockAbility INPUT_ENERGY = new MultiblockAbility<>("input_energy"); public static final MultiblockAbility OUTPUT_ENERGY = new MultiblockAbility<>("output_energy"); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 06032732857..e836844e3dd 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -254,6 +254,7 @@ public void setDistinct(boolean isDistinct) { getMultiblockParts().forEach(part -> part.onDistinctChange(isDistinct)); // mark buses as changed on distinct toggle if (this.isDistinct) { + //todo use dual handlers this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); } else { this.notifiedItemInputList.add(this.inputInventory); From 4f88e364eacf27fd5340deec93a08c18320913f0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:09:42 -0700 Subject: [PATCH 007/112] sbobl --- src/main/java/gregtech/api/DualHandler.java | 4 +++- .../multiblock/RecipeMapMultiblockController.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 941f597d6c6..8666a9468b6 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -27,7 +27,8 @@ public final class DualHandler implements IItemHandlerModifiable, IFluidHandler, private final List notifiables = new ArrayList<>(); - public DualHandler(IItemHandlerModifiable itemDelegate, IFluidHandler fluidDelegate, IDirtyNotifiable notifiable, boolean isExport) { + public DualHandler(IItemHandlerModifiable itemDelegate, IFluidHandler fluidDelegate, IDirtyNotifiable notifiable, + boolean isExport) { this.itemDelegate = itemDelegate; this.fluidDelegate = fluidDelegate; this.dirtyNotifiable = notifiable; @@ -115,6 +116,7 @@ public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.notifiables.remove(metaTileEntity); } + public static Builder builder() { return new Builder(); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index e836844e3dd..95c248a5adc 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -254,7 +254,7 @@ public void setDistinct(boolean isDistinct) { getMultiblockParts().forEach(part -> part.onDistinctChange(isDistinct)); // mark buses as changed on distinct toggle if (this.isDistinct) { - //todo use dual handlers + // todo use dual handlers this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); } else { this.notifiedItemInputList.add(this.inputInventory); From fc339142f2e21b7228f755278ec2259aec14b4c6 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Apr 2024 17:42:55 -0700 Subject: [PATCH 008/112] some work on combining abilities --- src/main/java/gregtech/api/DualHandler.java | 37 ++++++++++++++++--- .../impl/MultiblockRecipeLogic.java | 6 ++- .../api/metatileentity/MetaTileEntity.java | 4 +- .../multiblock/MultiblockControllerBase.java | 9 +++-- .../multiblock/MultiblockWithDisplayBase.java | 1 + .../RecipeMapMultiblockController.java | 2 + .../java/gregtech/api/recipes/Recipe.java | 7 ++++ .../electric/MetaTileEntityRockBreaker.java | 2 +- 8 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 8666a9468b6..5a86952d085 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -1,33 +1,39 @@ package gregtech.api; +import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.INotifiableHandler; +import gregtech.api.capability.impl.FluidTankList; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandlerModifiable; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -public final class DualHandler implements IItemHandlerModifiable, IFluidHandler, INotifiableHandler { +public final class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler, INotifiableHandler { @Nullable IItemHandlerModifiable itemDelegate; @Nullable - IFluidHandler fluidDelegate; + IMultipleTankHandler fluidDelegate; @Nullable IDirtyNotifiable dirtyNotifiable; private final boolean isExport; + private static final MultiFluidTankEntry EMPTY = new MultiFluidTankEntry(new FluidTankList(false, new FluidTank[0]), new FluidTank(0)); private final List notifiables = new ArrayList<>(); - public DualHandler(IItemHandlerModifiable itemDelegate, IFluidHandler fluidDelegate, IDirtyNotifiable notifiable, + public DualHandler(IItemHandlerModifiable itemDelegate, IMultipleTankHandler fluidDelegate, IDirtyNotifiable notifiable, boolean isExport) { this.itemDelegate = itemDelegate; this.fluidDelegate = fluidDelegate; @@ -121,10 +127,31 @@ public static Builder builder() { return new Builder(); } + @Override + public @NotNull List getFluidTanks() { + if (this.fluidDelegate == null) return Collections.emptyList(); + return this.fluidDelegate.getFluidTanks(); + } + + @Override + public int getTanks() { + return this.fluidDelegate == null ? 0 : this.fluidDelegate.getTanks(); + } + + @Override + public @NotNull MultiFluidTankEntry getTankAt(int index) { + return this.fluidDelegate == null ? EMPTY : this.fluidDelegate.getTankAt(index); + } + + @Override + public boolean allowSameFluidFill() { + return this.fluidDelegate != null && this.fluidDelegate.allowSameFluidFill(); + } + public static class Builder { IItemHandlerModifiable itemHandler; - IFluidHandler fluidHandler; + IMultipleTankHandler fluidHandler; IDirtyNotifiable notifiable; public Builder itemHandler(IItemHandlerModifiable itemHandler) { @@ -132,7 +159,7 @@ public Builder itemHandler(IItemHandlerModifiable itemHandler) { return this; } - public Builder fluidTank(IFluidHandler fluidTank) { + public Builder fluidTank(IMultipleTankHandler fluidTank) { this.fluidHandler = fluidTank; return this; } diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 728ed138cc9..b8e561b6af4 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -84,7 +85,10 @@ protected IItemHandlerModifiable getInputInventory() { // Used for distinct bus recipe checking protected List getInputBuses() { RecipeMapMultiblockController controller = (RecipeMapMultiblockController) metaTileEntity; - return controller.getAbilities(MultiblockAbility.IMPORT_ITEMS); + List l = new ArrayList<>(); + l.addAll(controller.getAbilitiesModifiable(MultiblockAbility.IMPORT_ITEMS)); + l.addAll(controller.getAbilitiesModifiable(MultiblockAbility.IMPORT_DUAL)); + return Collections.unmodifiableList(l); } @Override diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 9eafc841c65..35d14ed6052 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -393,7 +393,7 @@ public final String getMetaFullName() { return getMetaName() + ".name"; } - public void addNotifiedInput(T input) { + public void addNotifiedInput(Object input) { if (input instanceof IItemHandlerModifiable) { if (!notifiedItemInputList.contains(input)) { this.notifiedItemInputList.add((IItemHandlerModifiable) input); @@ -405,7 +405,7 @@ public void addNotifiedInput(T input) { } } - public void addNotifiedOutput(T output) { + public void addNotifiedOutput(Object output) { if (output instanceof IItemHandlerModifiable) { if (!notifiedItemOutputList.contains(output)) { this.notifiedItemOutputList.add((IItemHandlerModifiable) output); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index 53c53ffdbf5..fa76b69930e 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -396,10 +396,13 @@ public void onRemoval() { } } - @SuppressWarnings("unchecked") public List getAbilities(MultiblockAbility ability) { - List rawList = (List) multiblockAbilities.getOrDefault(ability, Collections.emptyList()); - return Collections.unmodifiableList(rawList); + return Collections.unmodifiableList(getAbilitiesModifiable(ability)); + } + + @SuppressWarnings("unchecked") + public List getAbilitiesModifiable(MultiblockAbility ability) { + return (List) multiblockAbilities.getOrDefault(ability, Collections.emptyList()); } public List getMultiblockParts() { diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java index 8dc938db623..b25df63834e 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java @@ -536,6 +536,7 @@ protected void setVoidingMode(int mode) { this.getNotifiedFluidInputList().add((IFluidHandler) tank); } this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); + this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_DUAL)); markDirty(); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 95c248a5adc..89a109c5ca4 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -1,5 +1,6 @@ package gregtech.api.metatileentity.multiblock; +import gregtech.api.DualHandler; import gregtech.api.GTValues; import gregtech.api.capability.IDistinctBusController; import gregtech.api.capability.IEnergyContainer; @@ -256,6 +257,7 @@ public void setDistinct(boolean isDistinct) { if (this.isDistinct) { // todo use dual handlers this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); + this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_DUAL)); } else { this.notifiedItemInputList.add(this.inputInventory); } diff --git a/src/main/java/gregtech/api/recipes/Recipe.java b/src/main/java/gregtech/api/recipes/Recipe.java index ff495651ac5..260770014c6 100644 --- a/src/main/java/gregtech/api/recipes/Recipe.java +++ b/src/main/java/gregtech/api/recipes/Recipe.java @@ -1,6 +1,8 @@ package gregtech.api.recipes; +import gregtech.api.DualHandler; import gregtech.api.capability.IMultipleTankHandler; +import gregtech.api.capability.impl.FluidTankList; import gregtech.api.recipes.category.GTRecipeCategory; import gregtech.api.recipes.chance.boost.ChanceBoostFunction; import gregtech.api.recipes.chance.output.ChancedOutputList; @@ -17,6 +19,8 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.oredict.OreDictionary; @@ -188,6 +192,9 @@ public final boolean matches(boolean consumeIfSuccessful, IItemHandlerModifiable IMultipleTankHandler fluidInputs) { Pair fluids = null; Pair items = null; + if (inputs instanceof IFluidTank tank) { + fluidInputs = new FluidTankList(false, tank); + } if (fluidInputs.getFluidTanks().size() > 0) { fluids = matchesFluid(GTUtility.fluidHandlerToList(fluidInputs)); diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityRockBreaker.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityRockBreaker.java index 7ff2b055358..db5f83778f6 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityRockBreaker.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityRockBreaker.java @@ -75,7 +75,7 @@ private void checkAdjacentFluids() { } @Override - public void addNotifiedInput(T input) { + public void addNotifiedInput(Object input) { super.addNotifiedInput(input); onNeighborChanged(); } From a4adf304c387695a1a994a2877ce350f897b3587 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Apr 2024 23:42:13 -0700 Subject: [PATCH 009/112] remove builder --- src/main/java/gregtech/api/DualHandler.java | 30 --------------------- 1 file changed, 30 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 5a86952d085..95d7d15dc3d 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -123,10 +123,6 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.notifiables.remove(metaTileEntity); } - public static Builder builder() { - return new Builder(); - } - @Override public @NotNull List getFluidTanks() { if (this.fluidDelegate == null) return Collections.emptyList(); @@ -147,30 +143,4 @@ public int getTanks() { public boolean allowSameFluidFill() { return this.fluidDelegate != null && this.fluidDelegate.allowSameFluidFill(); } - - public static class Builder { - - IItemHandlerModifiable itemHandler; - IMultipleTankHandler fluidHandler; - IDirtyNotifiable notifiable; - - public Builder itemHandler(IItemHandlerModifiable itemHandler) { - this.itemHandler = itemHandler; - return this; - } - - public Builder fluidTank(IMultipleTankHandler fluidTank) { - this.fluidHandler = fluidTank; - return this; - } - - public Builder notifiable(IDirtyNotifiable notifiable) { - this.notifiable = notifiable; - return this; - } - - public DualHandler build(boolean isExport) { - return new DualHandler(this.itemHandler, this.fluidHandler, this.notifiable, isExport); - } - } } From 7628750c8235cccdaf49d604709d74b50c2a7b5d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Apr 2024 23:46:21 -0700 Subject: [PATCH 010/112] dual handler probably works now --- src/main/java/gregtech/api/DualHandler.java | 7 ++++--- .../gregtech/api/capability/impl/AbstractRecipeLogic.java | 7 ++++++- .../multiblock/RecipeMapMultiblockController.java | 1 - src/main/java/gregtech/api/recipes/Recipe.java | 2 -- src/main/java/gregtech/api/recipes/RecipeMap.java | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 95d7d15dc3d..0c975034b85 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -9,7 +9,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandlerModifiable; @@ -29,11 +28,13 @@ public final class DualHandler implements IItemHandlerModifiable, IMultipleTankH @Nullable IDirtyNotifiable dirtyNotifiable; private final boolean isExport; - private static final MultiFluidTankEntry EMPTY = new MultiFluidTankEntry(new FluidTankList(false, new FluidTank[0]), new FluidTank(0)); + private static final MultiFluidTankEntry EMPTY = new MultiFluidTankEntry(new FluidTankList(false, new FluidTank[0]), + new FluidTank(0)); private final List notifiables = new ArrayList<>(); - public DualHandler(IItemHandlerModifiable itemDelegate, IMultipleTankHandler fluidDelegate, IDirtyNotifiable notifiable, + public DualHandler(IItemHandlerModifiable itemDelegate, IMultipleTankHandler fluidDelegate, + IDirtyNotifiable notifiable, boolean isExport) { this.itemDelegate = itemDelegate; this.fluidDelegate = fluidDelegate; diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 23018a736ca..8634050ed33 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -1,5 +1,6 @@ package gregtech.api.capability.impl; +import gregtech.api.DualHandler; import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; @@ -647,7 +648,11 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul return null; } - return map.findRecipe(maxVoltage, inputs, fluidInputs); + if (inputs instanceof DualHandler dualHandler) { + return map.findRecipe(maxVoltage, dualHandler, dualHandler); + } else { + return map.findRecipe(maxVoltage, inputs, fluidInputs); + } } /** diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 89a109c5ca4..00580f2cceb 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -1,6 +1,5 @@ package gregtech.api.metatileentity.multiblock; -import gregtech.api.DualHandler; import gregtech.api.GTValues; import gregtech.api.capability.IDistinctBusController; import gregtech.api.capability.IEnergyContainer; diff --git a/src/main/java/gregtech/api/recipes/Recipe.java b/src/main/java/gregtech/api/recipes/Recipe.java index 260770014c6..089be4aa7ac 100644 --- a/src/main/java/gregtech/api/recipes/Recipe.java +++ b/src/main/java/gregtech/api/recipes/Recipe.java @@ -1,6 +1,5 @@ package gregtech.api.recipes; -import gregtech.api.DualHandler; import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.impl.FluidTankList; import gregtech.api.recipes.category.GTRecipeCategory; @@ -20,7 +19,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.oredict.OreDictionary; diff --git a/src/main/java/gregtech/api/recipes/RecipeMap.java b/src/main/java/gregtech/api/recipes/RecipeMap.java index a2c2ef7b1f4..f463f34744e 100644 --- a/src/main/java/gregtech/api/recipes/RecipeMap.java +++ b/src/main/java/gregtech/api/recipes/RecipeMap.java @@ -534,7 +534,7 @@ amount, getMaxFluidOutputs()), @Nullable public Recipe findRecipe(long voltage, IItemHandlerModifiable inputs, IMultipleTankHandler fluidInputs) { - return this.findRecipe(voltage, GTUtility.itemHandlerToList(inputs), GTUtility.fluidHandlerToList(fluidInputs)); + return findRecipe(voltage, GTUtility.itemHandlerToList(inputs), GTUtility.fluidHandlerToList(fluidInputs)); } /** From b2476f9b1259dbb93b0e6113955576825e68ee36 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Apr 2024 23:52:58 -0700 Subject: [PATCH 011/112] small fixes --- src/main/java/gregtech/api/recipes/Recipe.java | 3 --- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 9 +++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/api/recipes/Recipe.java b/src/main/java/gregtech/api/recipes/Recipe.java index 089be4aa7ac..4f2b34c10ac 100644 --- a/src/main/java/gregtech/api/recipes/Recipe.java +++ b/src/main/java/gregtech/api/recipes/Recipe.java @@ -190,9 +190,6 @@ public final boolean matches(boolean consumeIfSuccessful, IItemHandlerModifiable IMultipleTankHandler fluidInputs) { Pair fluids = null; Pair items = null; - if (inputs instanceof IFluidTank tank) { - fluidInputs = new FluidTankList(false, tank); - } if (fluidInputs.getFluidTanks().size() > 0) { fluids = matchesFluid(GTUtility.fluidHandlerToList(fluidInputs)); diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 7badfb9e2a8..c10f9795c29 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -1,5 +1,6 @@ package gregtech.common.metatileentities.multi.multiblockpart; +import gregtech.api.DualHandler; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; @@ -261,15 +262,15 @@ public MultiblockAbility getAbility() { public @NotNull List> getAbilities() { return isExportHatch ? Collections.singletonList(MultiblockAbility.EXPORT_FLUIDS) : - Arrays.asList(MultiblockAbility.IMPORT_FLUIDS, MultiblockAbility.IMPORT_ITEMS); + Collections.singletonList(MultiblockAbility.IMPORT_DUAL); } @Override public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { - if (key.equals(MultiblockAbility.EXPORT_FLUIDS) || key.equals(MultiblockAbility.IMPORT_FLUIDS)) { + if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { return Collections.singletonList(fluidTank); - } else if (key.equals(MultiblockAbility.IMPORT_ITEMS)) { - return Collections.singletonList(circuitInventory); + } else if (key.equals(MultiblockAbility.IMPORT_DUAL)) { + return Collections.singletonList(new DualHandler(this.circuitInventory, this.importFluids, null, false)); } return Collections.emptyList(); } From 8692f112a0d38f02aa35b1253aef0d1faa52fb10 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 6 Apr 2024 17:51:27 -0700 Subject: [PATCH 012/112] a bit more work --- src/main/java/gregtech/api/DualHandler.java | 7 ------- .../capability/impl/AbstractRecipeLogic.java | 18 ++++++++++++++++-- .../RecipeMapMultiblockController.java | 6 +++++- .../MetaTileEntityFluidHatch.java | 2 +- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 0c975034b85..5b0bb0b0f69 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -25,8 +25,6 @@ public final class DualHandler implements IItemHandlerModifiable, IMultipleTankH IItemHandlerModifiable itemDelegate; @Nullable IMultipleTankHandler fluidDelegate; - @Nullable - IDirtyNotifiable dirtyNotifiable; private final boolean isExport; private static final MultiFluidTankEntry EMPTY = new MultiFluidTankEntry(new FluidTankList(false, new FluidTank[0]), new FluidTank(0)); @@ -34,11 +32,9 @@ public final class DualHandler implements IItemHandlerModifiable, IMultipleTankH private final List notifiables = new ArrayList<>(); public DualHandler(IItemHandlerModifiable itemDelegate, IMultipleTankHandler fluidDelegate, - IDirtyNotifiable notifiable, boolean isExport) { this.itemDelegate = itemDelegate; this.fluidDelegate = fluidDelegate; - this.dirtyNotifiable = notifiable; this.isExport = isExport; } @@ -71,9 +67,6 @@ public int getSlotLimit(int slot) { } public void onContentsCahgned() { - if (this.dirtyNotifiable != null) { - this.dirtyNotifiable.markAsDirty(); - } notifiables.forEach(mte -> { if (isExport) { mte.addNotifiedOutput(this); diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 8634050ed33..a3ca05c57cc 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -37,6 +37,8 @@ import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.MustBeInvokedByOverriders; @@ -648,9 +650,21 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul return null; } - if (inputs instanceof DualHandler dualHandler) { + if (inputs instanceof ItemHandlerList list) { + List items = new ArrayList<>(); + List fluids = new ArrayList<>(); + for (var handler : list.getBackingHandlers()) { + if (handler instanceof DualHandler dualHandler) { + items.add(dualHandler); + fluids.addAll(dualHandler.getFluidTanks()); + } else { + items.add(handler); + } + } + return map.findRecipe(maxVoltage, new ItemHandlerList(items), new FluidTankList(false, fluids)); + } else if (inputs instanceof DualHandler dualHandler) { return map.findRecipe(maxVoltage, dualHandler, dualHandler); - } else { + } else { return map.findRecipe(maxVoltage, inputs, fluidInputs); } } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 00580f2cceb..2d64a2d975c 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -36,6 +36,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public abstract class RecipeMapMultiblockController extends MultiblockWithDisplayBase implements IDataInfoProvider, @@ -119,7 +120,10 @@ public boolean isActive() { } protected void initializeAbilities() { - this.inputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.IMPORT_ITEMS)); + List l = new ArrayList<>(); + l.addAll(getAbilitiesModifiable(MultiblockAbility.IMPORT_ITEMS)); + l.addAll(getAbilitiesModifiable(MultiblockAbility.IMPORT_DUAL)); + this.inputInventory = new ItemHandlerList(Collections.unmodifiableList(l)); this.inputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), getAbilities(MultiblockAbility.IMPORT_FLUIDS)); this.outputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.EXPORT_ITEMS)); diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index c10f9795c29..cfab9045f17 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -270,7 +270,7 @@ public MultiblockAbility getAbility() { if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { return Collections.singletonList(fluidTank); } else if (key.equals(MultiblockAbility.IMPORT_DUAL)) { - return Collections.singletonList(new DualHandler(this.circuitInventory, this.importFluids, null, false)); + return Collections.singletonList(new DualHandler(this.circuitInventory, this.importFluids,false)); } return Collections.emptyList(); } From 171ec622f0aa620d4cce230e9d50c1898a95213d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Apr 2024 08:38:23 -0700 Subject: [PATCH 013/112] try fix tests spotless --- src/main/java/gregtech/api/DualHandler.java | 1 - .../api/capability/impl/AbstractRecipeLogic.java | 16 ++++++---------- src/main/java/gregtech/api/recipes/Recipe.java | 2 -- .../multiblockpart/MetaTileEntityFluidHatch.java | 3 +-- 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 5b0bb0b0f69..a0acfd3f46b 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -4,7 +4,6 @@ import gregtech.api.capability.INotifiableHandler; import gregtech.api.capability.impl.FluidTankList; import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.util.IDirtyNotifiable; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index a3ca05c57cc..c381dbe06e9 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -37,8 +37,6 @@ import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.MustBeInvokedByOverriders; @@ -651,20 +649,18 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul } if (inputs instanceof ItemHandlerList list) { - List items = new ArrayList<>(); - List fluids = new ArrayList<>(); + List items = new ArrayList<>(); + List fluids = new ArrayList<>(); for (var handler : list.getBackingHandlers()) { if (handler instanceof DualHandler dualHandler) { - items.add(dualHandler); - fluids.addAll(dualHandler.getFluidTanks()); - } else { - items.add(handler); + fluids.addAll(GTUtility.fluidHandlerToList(dualHandler)); } + items.addAll(GTUtility.itemHandlerToList((IItemHandlerModifiable) handler)); } - return map.findRecipe(maxVoltage, new ItemHandlerList(items), new FluidTankList(false, fluids)); + return map.findRecipe(maxVoltage, items, fluids); } else if (inputs instanceof DualHandler dualHandler) { return map.findRecipe(maxVoltage, dualHandler, dualHandler); - } else { + } else { return map.findRecipe(maxVoltage, inputs, fluidInputs); } } diff --git a/src/main/java/gregtech/api/recipes/Recipe.java b/src/main/java/gregtech/api/recipes/Recipe.java index 4f2b34c10ac..ff495651ac5 100644 --- a/src/main/java/gregtech/api/recipes/Recipe.java +++ b/src/main/java/gregtech/api/recipes/Recipe.java @@ -1,7 +1,6 @@ package gregtech.api.recipes; import gregtech.api.capability.IMultipleTankHandler; -import gregtech.api.capability.impl.FluidTankList; import gregtech.api.recipes.category.GTRecipeCategory; import gregtech.api.recipes.chance.boost.ChanceBoostFunction; import gregtech.api.recipes.chance.output.ChancedOutputList; @@ -18,7 +17,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.oredict.OreDictionary; diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index cfab9045f17..43f80417919 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -59,7 +59,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -270,7 +269,7 @@ public MultiblockAbility getAbility() { if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { return Collections.singletonList(fluidTank); } else if (key.equals(MultiblockAbility.IMPORT_DUAL)) { - return Collections.singletonList(new DualHandler(this.circuitInventory, this.importFluids,false)); + return Collections.singletonList(new DualHandler(this.circuitInventory, this.importFluids, false)); } return Collections.emptyList(); } From 1b87e42292945ba391c777a61cf181b8f9090baf Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Apr 2024 09:05:45 -0700 Subject: [PATCH 014/112] fix ghost circ init --- .../MetaTileEntityFluidHatch.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 43f80417919..d97d82670d8 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -82,16 +82,10 @@ public MetaTileEntityFluidHatch(ResourceLocation metaTileEntityId, int tier, boo super(metaTileEntityId, tier, isExportHatch); this.fluidTank = new HatchFluidTank(getInventorySize(), this, isExportHatch); this.workingEnabled = true; - initializeInventory(); - } - - @Override - protected void initializeInventory() { - super.initializeInventory(); - if (!this.hasGhostCircuitInventory()) return; - - this.circuitInventory = new GhostCircuitItemStackHandler(this); - this.circuitInventory.addNotifiableMetaTileEntity(this); + if (this.hasGhostCircuitInventory()) { + this.circuitInventory = new GhostCircuitItemStackHandler(this); + this.circuitInventory.addNotifiableMetaTileEntity(this); + } } @Override @@ -374,13 +368,15 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) @Override public void addToMultiBlock(MultiblockControllerBase controllerBase) { super.addToMultiBlock(controllerBase); - this.circuitInventory.addNotifiableMetaTileEntity(controllerBase); + if (hasGhostCircuitInventory()) + this.circuitInventory.addNotifiableMetaTileEntity(controllerBase); } @Override public void removeFromMultiBlock(MultiblockControllerBase controllerBase) { super.removeFromMultiBlock(controllerBase); - this.circuitInventory.removeNotifiableMetaTileEntity(controllerBase); + if (hasGhostCircuitInventory()) + this.circuitInventory.removeNotifiableMetaTileEntity(controllerBase); } @Override From a097d61a33bd8f6294ab18293f2eafb9c9aa1b2a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 14 Apr 2024 09:51:52 -0700 Subject: [PATCH 015/112] fix inventory init --- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index d97d82670d8..98726e09fff 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -81,6 +81,7 @@ public class MetaTileEntityFluidHatch extends MetaTileEntityMultiblockNotifiable public MetaTileEntityFluidHatch(ResourceLocation metaTileEntityId, int tier, boolean isExportHatch) { super(metaTileEntityId, tier, isExportHatch); this.fluidTank = new HatchFluidTank(getInventorySize(), this, isExportHatch); + initializeInventory(); // the fact that this has to be called three times is so dumb this.workingEnabled = true; if (this.hasGhostCircuitInventory()) { this.circuitInventory = new GhostCircuitItemStackHandler(this); From 05aaf4f93b2e499999d7022b4a14f5fd383fa398 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:15:35 -0700 Subject: [PATCH 016/112] add and use better utility methods --- .../gregtech/api/capability/impl/AbstractRecipeLogic.java | 4 ++-- src/main/java/gregtech/api/util/GTUtility.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index c381dbe06e9..2016cadf61d 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -653,9 +653,9 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul List fluids = new ArrayList<>(); for (var handler : list.getBackingHandlers()) { if (handler instanceof DualHandler dualHandler) { - fluids.addAll(GTUtility.fluidHandlerToList(dualHandler)); + GTUtility.addHandlerToCollection(fluids, dualHandler); } - items.addAll(GTUtility.itemHandlerToList((IItemHandlerModifiable) handler)); + GTUtility.addHandlerToCollection(items, handler); } return map.findRecipe(maxVoltage, items, fluids); } else if (inputs instanceof DualHandler dualHandler) { diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index 02701d9b61b..90554f6d12b 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -64,6 +64,7 @@ import java.util.AbstractList; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Map.Entry; From efaf8570e6bf832abd85a90d7ebd764ea29244c2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:29:48 -0700 Subject: [PATCH 017/112] add method overloads for multiple abilities --- .../multiblock/MultiblockControllerBase.java | 16 ++++++++++++++++ .../RecipeMapMultiblockController.java | 4 +--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index fa76b69930e..cd590aa7590 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -400,6 +400,22 @@ public List getAbilities(MultiblockAbility ability) { return Collections.unmodifiableList(getAbilitiesModifiable(ability)); } + public List getAbilities(MultiblockAbility ability1, MultiblockAbility ability2) { + var combined = new ArrayList(); + combined.addAll(getAbilitiesModifiable(ability1)); + combined.addAll(getAbilitiesModifiable(ability2)); + return Collections.unmodifiableList(combined); + } + + @SafeVarargs + public final List getAbilities(MultiblockAbility... abilities) { + var combined = new ArrayList(); + for (var ability : abilities) { + combined.addAll(getAbilitiesModifiable(ability)); + } + return Collections.unmodifiableList(combined); + } + @SuppressWarnings("unchecked") public List getAbilitiesModifiable(MultiblockAbility ability) { return (List) multiblockAbilities.getOrDefault(ability, Collections.emptyList()); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 2d64a2d975c..c2c4e915cee 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -258,9 +258,7 @@ public void setDistinct(boolean isDistinct) { getMultiblockParts().forEach(part -> part.onDistinctChange(isDistinct)); // mark buses as changed on distinct toggle if (this.isDistinct) { - // todo use dual handlers - this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); - this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_DUAL)); + this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); } else { this.notifiedItemInputList.add(this.inputInventory); } From be35c557799292e6faa1d0380ab25bca10af5848 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:56:02 -0700 Subject: [PATCH 018/112] misc + spotless --- .../gregtech/api/capability/impl/MultiblockRecipeLogic.java | 6 +----- .../metatileentity/multiblock/MultiblockControllerBase.java | 3 ++- .../multiblock/RecipeMapMultiblockController.java | 3 ++- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index b8e561b6af4..3fe8c7ddd55 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -24,7 +24,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -85,10 +84,7 @@ protected IItemHandlerModifiable getInputInventory() { // Used for distinct bus recipe checking protected List getInputBuses() { RecipeMapMultiblockController controller = (RecipeMapMultiblockController) metaTileEntity; - List l = new ArrayList<>(); - l.addAll(controller.getAbilitiesModifiable(MultiblockAbility.IMPORT_ITEMS)); - l.addAll(controller.getAbilitiesModifiable(MultiblockAbility.IMPORT_DUAL)); - return Collections.unmodifiableList(l); + return new ArrayList<>(controller.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); } @Override diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index cd590aa7590..bf51955313e 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -400,7 +400,8 @@ public List getAbilities(MultiblockAbility ability) { return Collections.unmodifiableList(getAbilitiesModifiable(ability)); } - public List getAbilities(MultiblockAbility ability1, MultiblockAbility ability2) { + public List getAbilities(MultiblockAbility ability1, + MultiblockAbility ability2) { var combined = new ArrayList(); combined.addAll(getAbilitiesModifiable(ability1)); combined.addAll(getAbilitiesModifiable(ability2)); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index c2c4e915cee..c5393c72f56 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -258,7 +258,8 @@ public void setDistinct(boolean isDistinct) { getMultiblockParts().forEach(part -> part.onDistinctChange(isDistinct)); // mark buses as changed on distinct toggle if (this.isDistinct) { - this.notifiedItemInputList.addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); + this.notifiedItemInputList + .addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); } else { this.notifiedItemInputList.add(this.inputInventory); } From 5966ed9f7e1633497b3664e59c4f2be54202db5f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 15:42:46 -0700 Subject: [PATCH 019/112] wtf distillation tower slightly change signature of registerAbilities() make dual handler implement IFluidTank --- src/main/java/gregtech/api/DualHandler.java | 61 +++++++++++++++---- .../multiblock/IMultiblockAbilityPart.java | 2 +- .../java/gregtech/api/util/GTUtility.java | 20 ++++++ .../electric/MetaTileEntityDiode.java | 3 +- .../electric/MetaTileEntityHull.java | 3 +- .../multi/MetaTileEntityPumpHatch.java | 3 +- .../multi/MetaTileEntityTankValve.java | 3 +- .../MetaTileEntityAutoMaintenanceHatch.java | 3 +- .../MetaTileEntityComputationHatch.java | 3 +- .../MetaTileEntityDataAccessHatch.java | 3 +- .../MetaTileEntityEnergyHatch.java | 3 +- .../MetaTileEntityFluidHatch.java | 2 +- .../multiblockpart/MetaTileEntityItemBus.java | 5 +- .../MetaTileEntityLaserHatch.java | 3 +- .../MetaTileEntityMachineHatch.java | 3 +- .../MetaTileEntityMaintenanceHatch.java | 3 +- .../MetaTileEntityMufflerHatch.java | 3 +- .../MetaTileEntityMultiFluidHatch.java | 3 +- .../MetaTileEntityObjectHolder.java | 3 +- .../MetaTileEntityOpticalDataHatch.java | 3 +- .../MetaTileEntityPassthroughHatchFluid.java | 3 +- .../MetaTileEntityPassthroughHatchItem.java | 3 +- .../MetaTileEntityReservoirHatch.java | 3 +- .../MetaTileEntityRotorHolder.java | 3 +- .../appeng/MetaTileEntityMEInputBus.java | 3 +- .../appeng/MetaTileEntityMEInputHatch.java | 3 +- .../appeng/MetaTileEntityMEOutputBus.java | 3 +- .../appeng/MetaTileEntityMEOutputHatch.java | 3 +- .../hpca/MetaTileEntityHPCAComponent.java | 3 +- .../MetaTileEntitySteamHatch.java | 3 +- .../MetaTileEntitySteamItemBus.java | 3 +- 31 files changed, 127 insertions(+), 41 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index a0acfd3f46b..2fd2851f7ea 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -8,6 +8,8 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandlerModifiable; @@ -18,15 +20,16 @@ import java.util.Collections; import java.util.List; -public final class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler, INotifiableHandler { +public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipleTankHandler, INotifiableHandler { + + private static final IFluidTank NULL_TANK = new FluidTank(0); + private static final IMultipleTankHandler NULL_HANDLER = new FluidTankList(false, NULL_TANK); @Nullable IItemHandlerModifiable itemDelegate; @Nullable IMultipleTankHandler fluidDelegate; private final boolean isExport; - private static final MultiFluidTankEntry EMPTY = new MultiFluidTankEntry(new FluidTankList(false, new FluidTank[0]), - new FluidTank(0)); private final List notifiables = new ArrayList<>(); @@ -81,11 +84,40 @@ public void setStackInSlot(int slot, ItemStack stack) { itemDelegate.setStackInSlot(slot, stack); } + @NotNull + private IFluidTank getFirstTank() { + if (fluidDelegate == null) + return NULL_TANK; + + var tanks = this.fluidDelegate.getFluidTanks(); + tanks.sort(ENTRY_COMPARATOR); + return tanks.get(0); + + } + + @Override + public FluidStack getFluid() { + return getFirstTank().getFluid(); + } + + @Override + public int getFluidAmount() { + return getFirstTank().getFluidAmount(); + } + + @Override + public int getCapacity() { + return getFirstTank().getCapacity(); + } + + @Override + public FluidTankInfo getInfo() { + return getFirstTank().getInfo(); + } + @Override public IFluidTankProperties[] getTankProperties() { - return fluidDelegate == null ? - new IFluidTankProperties[0] : - fluidDelegate.getTankProperties(); + return new IFluidTankProperties[0]; } @Override @@ -118,22 +150,29 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { @Override public @NotNull List getFluidTanks() { - if (this.fluidDelegate == null) return Collections.emptyList(); - return this.fluidDelegate.getFluidTanks(); + return this.fluidDelegate == null ? + NULL_HANDLER.getFluidTanks() : + this.fluidDelegate.getFluidTanks(); } @Override public int getTanks() { - return this.fluidDelegate == null ? 0 : this.fluidDelegate.getTanks(); + return this.fluidDelegate == null ? + NULL_HANDLER.getTanks() : + this.fluidDelegate.getTanks(); } @Override public @NotNull MultiFluidTankEntry getTankAt(int index) { - return this.fluidDelegate == null ? EMPTY : this.fluidDelegate.getTankAt(index); + return this.fluidDelegate == null ? + NULL_HANDLER.getTankAt(0) : + this.fluidDelegate.getTankAt(index); } @Override public boolean allowSameFluidFill() { - return this.fluidDelegate != null && this.fluidDelegate.allowSameFluidFill(); + return this.fluidDelegate == null ? + NULL_HANDLER.allowSameFluidFill() : + this.fluidDelegate.allowSameFluidFill(); } } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index 2f535feafd7..445deb0dee0 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -14,5 +14,5 @@ public interface IMultiblockAbilityPart extends IMultiblockPart { } @NotNull - List registerAbilities(@NotNull MultiblockAbility key); + List registerAbilities(@NotNull MultiblockAbility key); } diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index 90554f6d12b..f8469906aa7 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -458,6 +458,26 @@ public int size() { }; } + public static void addHandlerToCollection(Collection collection, IItemHandler handler) { + for (int i = 0; i < handler.getSlots(); i++) { + var stack = handler.getStackInSlot(i); + if (stack.isEmpty() || collection.contains(stack)) + continue; + + collection.add(stack); + } + } + + public static void addHandlerToCollection(Collection collection, IMultipleTankHandler handler) { + for (var entry : handler.getFluidTanks()) { + var fluid = entry.getFluid(); + if (fluid == null || collection.contains(fluid)) + continue; + + collection.add(fluid); + } + } + public static NBTTagCompound getOrCreateNbtCompound(ItemStack stack) { NBTTagCompound compound = stack.getTagCompound(); if (compound == null) { diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index 76553ff2c9a..d12ecc2b50d 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -183,7 +183,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java index 45231ed2fe8..02c25bc04d9 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java @@ -111,7 +111,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java index 0afb2a1b39a..9503d0bdd8a 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java @@ -114,7 +114,8 @@ public ICubeRenderer getBaseTexture() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(exportFluids.getTankAt(0)); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java index 8d3e3f44297..1f3c440ed97 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java @@ -123,7 +123,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this.getImportFluids()); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java index 82f58689c89..b23916492d2 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java @@ -106,7 +106,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java index ac4817088ef..27ef218229b 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java @@ -152,7 +152,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java index 1a849aab8ec..588b401c9c4 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java @@ -213,7 +213,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java index ad0a37fc548..0c7f94d2d6c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java @@ -117,7 +117,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(energyContainer); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 98726e09fff..c54d73fbf09 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -260,7 +260,7 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { + public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { return Collections.singletonList(fluidTank); } else if (key.equals(MultiblockAbility.IMPORT_DUAL)) { diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java index 90da20b7446..2dc2add460c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java @@ -255,8 +255,9 @@ public void receiveCustomData(int dataId, PacketBuffer buf) { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { - var abilityList = new ArrayList<>(); + public @NotNull List registerAbilities( + @NotNull MultiblockAbility key) { + List abilityList = new ArrayList<>(); if (this.hasGhostCircuitInventory() && this.actualImportItems != null) { abilityList.add(isExportHatch ? this.exportItems : this.actualImportItems); } else { diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java index 28d419529a9..b937a6b04af 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java @@ -71,7 +71,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this.buffer); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java index 852ded77c94..b607214b0e9 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java @@ -59,7 +59,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(machineHandler); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java index ea9502d71c7..ca106277891 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java @@ -517,7 +517,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java index bd17246dcaf..0202793ed7f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java @@ -146,7 +146,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java index 519fe37b3d9..7ce6ad3bf39 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java @@ -201,7 +201,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return fluidTankList.getFluidTanks(); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java index 9cc2161be04..864b226bd06 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java @@ -116,7 +116,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java index 681d4ff9ce3..5f394caa0ed 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java @@ -129,7 +129,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index ba2e4fa5da5..16aeeedd2e6 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -209,7 +209,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 35f39f10e4c..7991b70aaa7 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -221,7 +221,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index 7d39a0f4f28..1bbf82f40c1 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -120,7 +120,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(fluidTank); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java index 3ff92e560f7..3d89fcc331a 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java @@ -166,7 +166,8 @@ void setRotorSpinning(boolean spinning) { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java index f16f331f861..8af88f7a352 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java @@ -331,7 +331,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this.actualImportItems); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java index 72ce10d6358..7f96d8c9a08 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java @@ -271,7 +271,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.unmodifiableList(Arrays.asList(this.getAEFluidHandler().getInventory())); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java index 318094a30bc..e1450d05a46 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java @@ -197,7 +197,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java index 4991bb47eb1..5a995eeb0d6 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java @@ -199,7 +199,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java index c6ab8bd7aa4..30a5bdac587 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java @@ -68,7 +68,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java index 0111f4c70d5..0d19bc4612f 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java @@ -129,7 +129,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return this.importFluids.getFluidTanks(); } diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java index 896ab92ac38..a97c0ca0819 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java @@ -57,7 +57,8 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility multiblockAbility) { + public @NotNull List registerAbilities( + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(isExportHatch ? this.exportItems : this.importItems); } From 4ea526773c8f65344e2885850f52c915e42b39fa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 15:52:15 -0700 Subject: [PATCH 020/112] fix typo + spotless --- src/main/java/gregtech/api/DualHandler.java | 5 ++--- .../metatileentities/electric/MetaTileEntityDiode.java | 2 +- .../common/metatileentities/electric/MetaTileEntityHull.java | 2 +- .../metatileentities/multi/MetaTileEntityPumpHatch.java | 2 +- .../metatileentities/multi/MetaTileEntityTankValve.java | 2 +- .../multiblockpart/MetaTileEntityAutoMaintenanceHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityComputationHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityDataAccessHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityEnergyHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityItemBus.java | 2 +- .../multi/multiblockpart/MetaTileEntityLaserHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityMachineHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityMaintenanceHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityMufflerHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityMultiFluidHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityObjectHolder.java | 2 +- .../multi/multiblockpart/MetaTileEntityOpticalDataHatch.java | 2 +- .../multiblockpart/MetaTileEntityPassthroughHatchFluid.java | 2 +- .../multiblockpart/MetaTileEntityPassthroughHatchItem.java | 2 +- .../multi/multiblockpart/MetaTileEntityReservoirHatch.java | 2 +- .../multi/multiblockpart/MetaTileEntityRotorHolder.java | 2 +- .../multiblockpart/appeng/MetaTileEntityMEInputBus.java | 2 +- .../multiblockpart/appeng/MetaTileEntityMEInputHatch.java | 2 +- .../multiblockpart/appeng/MetaTileEntityMEOutputBus.java | 2 +- .../multiblockpart/appeng/MetaTileEntityMEOutputHatch.java | 2 +- .../multiblockpart/hpca/MetaTileEntityHPCAComponent.java | 2 +- .../steam/multiblockpart/MetaTileEntitySteamHatch.java | 2 +- .../steam/multiblockpart/MetaTileEntitySteamItemBus.java | 2 +- 28 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 2fd2851f7ea..56a304de97f 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -17,7 +17,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipleTankHandler, INotifiableHandler { @@ -68,7 +67,8 @@ public int getSlotLimit(int slot) { return itemDelegate.getSlotLimit(slot); } - public void onContentsCahgned() { + // todo actually use this + public void onContentsChanged() { notifiables.forEach(mte -> { if (isExport) { mte.addNotifiedOutput(this); @@ -92,7 +92,6 @@ private IFluidTank getFirstTank() { var tanks = this.fluidDelegate.getFluidTanks(); tanks.sort(ENTRY_COMPARATOR); return tanks.get(0); - } @Override diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index d12ecc2b50d..22607b4eb84 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -184,7 +184,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java index 02c25bc04d9..0b08cd68a1f 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java @@ -112,7 +112,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java index 9503d0bdd8a..30f930f5bbd 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java @@ -115,7 +115,7 @@ public ICubeRenderer getBaseTexture() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(exportFluids.getTankAt(0)); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java index 1f3c440ed97..e24a90affcf 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java @@ -124,7 +124,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this.getImportFluids()); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java index b23916492d2..4e4767f16d2 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java @@ -107,7 +107,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java index 27ef218229b..c3b3a830009 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java @@ -153,7 +153,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java index 588b401c9c4..cd07a9c585a 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java @@ -214,7 +214,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java index 0c7f94d2d6c..fe6deaa8de6 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java @@ -118,7 +118,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(energyContainer); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java index 2dc2add460c..e32e9359401 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java @@ -256,7 +256,7 @@ public void receiveCustomData(int dataId, PacketBuffer buf) { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility key) { + @NotNull MultiblockAbility key) { List abilityList = new ArrayList<>(); if (this.hasGhostCircuitInventory() && this.actualImportItems != null) { abilityList.add(isExportHatch ? this.exportItems : this.actualImportItems); diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java index b937a6b04af..ccd262921d1 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java @@ -72,7 +72,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this.buffer); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java index b607214b0e9..313239a89b1 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java @@ -60,7 +60,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(machineHandler); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java index ca106277891..20fc841dc40 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java @@ -518,7 +518,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java index 0202793ed7f..f0dfdb0c6eb 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java @@ -147,7 +147,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java index 7ce6ad3bf39..545bed4a21b 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java @@ -202,7 +202,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return fluidTankList.getFluidTanks(); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java index 864b226bd06..f7609e59446 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java @@ -117,7 +117,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java index 5f394caa0ed..f85fdc6d157 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java @@ -130,7 +130,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 16aeeedd2e6..8fd7f2d1b41 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -210,7 +210,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 7991b70aaa7..6ededfc7c64 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -222,7 +222,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index 1bbf82f40c1..7af15dc0fba 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -121,7 +121,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(fluidTank); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java index 3d89fcc331a..18403255b5a 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java @@ -167,7 +167,7 @@ void setRotorSpinning(boolean spinning) { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java index 8af88f7a352..87fa8c4f390 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java @@ -332,7 +332,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this.actualImportItems); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java index 7f96d8c9a08..91e1b81544f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java @@ -272,7 +272,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.unmodifiableList(Arrays.asList(this.getAEFluidHandler().getInventory())); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java index e1450d05a46..3985b3e4a32 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java @@ -198,7 +198,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java index 5a995eeb0d6..b8a32f2a6bd 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java @@ -200,7 +200,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java index 30a5bdac587..06073332875 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java @@ -69,7 +69,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(this); } diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java index 0d19bc4612f..dea407c396d 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java @@ -130,7 +130,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return this.importFluids.getFluidTanks(); } diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java index a97c0ca0819..aa76f0864fb 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java @@ -58,7 +58,7 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { + @NotNull MultiblockAbility multiblockAbility) { return Collections.singletonList(isExportHatch ? this.exportItems : this.importItems); } From 4b09bcf4d7c89b6479a075be698669f15601d5a4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 15:54:27 -0700 Subject: [PATCH 021/112] forgor tank props --- src/main/java/gregtech/api/DualHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 56a304de97f..4b7266707b0 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -116,7 +116,9 @@ public FluidTankInfo getInfo() { @Override public IFluidTankProperties[] getTankProperties() { - return new IFluidTankProperties[0]; + return this.fluidDelegate == null ? + NULL_HANDLER.getTankProperties() : + this.fluidDelegate.getTankProperties(); } @Override From 80513ab2c0e5b4575f62f754d451754ef5704f70 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 15:59:02 -0700 Subject: [PATCH 022/112] use new method --- .../metatileentity/multiblock/MultiblockWithDisplayBase.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java index b25df63834e..4233e771558 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java @@ -535,8 +535,7 @@ protected void setVoidingMode(int mode) { for (IFluidTank tank : this.getAbilities(MultiblockAbility.IMPORT_FLUIDS)) { this.getNotifiedFluidInputList().add((IFluidHandler) tank); } - this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); - this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_DUAL)); + this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); markDirty(); } From 86cf2a129c7b6afb7680eb784ec8a9b2495e7338 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:38:26 -0700 Subject: [PATCH 023/112] try and improve checks for dual handlers --- .../capability/impl/AbstractRecipeLogic.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 2016cadf61d..5dcd22f8654 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -648,21 +648,27 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul return null; } - if (inputs instanceof ItemHandlerList list) { - List items = new ArrayList<>(); - List fluids = new ArrayList<>(); + List items = new ArrayList<>(); + List fluids = new ArrayList<>(); + + GTUtility.addHandlerToCollection(fluids, fluidInputs); + GTUtility.addHandlerToCollection(items, inputs); + + if (fluidInputs instanceof DualHandler dualHandler) { + GTUtility.addHandlerToCollection(items, dualHandler); + } + + if (inputs instanceof DualHandler dualHandler) { + GTUtility.addHandlerToCollection(fluids, dualHandler); + } else if (inputs instanceof ItemHandlerList list) { for (var handler : list.getBackingHandlers()) { if (handler instanceof DualHandler dualHandler) { GTUtility.addHandlerToCollection(fluids, dualHandler); } - GTUtility.addHandlerToCollection(items, handler); } - return map.findRecipe(maxVoltage, items, fluids); - } else if (inputs instanceof DualHandler dualHandler) { - return map.findRecipe(maxVoltage, dualHandler, dualHandler); - } else { - return map.findRecipe(maxVoltage, inputs, fluidInputs); } + + return map.findRecipe(maxVoltage, items, fluids); } /** From 9d3a2ccf6cd97d8ddb4c21f636f039147ff6fdbe Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:41:04 -0700 Subject: [PATCH 024/112] remove contains check --- src/main/java/gregtech/api/util/GTUtility.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index f8469906aa7..b8eb32d6621 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -461,7 +461,7 @@ public int size() { public static void addHandlerToCollection(Collection collection, IItemHandler handler) { for (int i = 0; i < handler.getSlots(); i++) { var stack = handler.getStackInSlot(i); - if (stack.isEmpty() || collection.contains(stack)) + if (stack.isEmpty()) continue; collection.add(stack); @@ -471,7 +471,7 @@ public static void addHandlerToCollection(Collection collection, IIte public static void addHandlerToCollection(Collection collection, IMultipleTankHandler handler) { for (var entry : handler.getFluidTanks()) { var fluid = entry.getFluid(); - if (fluid == null || collection.contains(fluid)) + if (fluid == null) continue; collection.add(fluid); From 0e8590cd5d483d84d65f431658dbd42d5584bd7b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:43:27 -0700 Subject: [PATCH 025/112] mark delegates nonnull use onContentsChanged --- src/main/java/gregtech/api/DualHandler.java | 85 +++++++++---------- .../multiblock/MultiblockWithDisplayBase.java | 3 +- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 4b7266707b0..cb697762b79 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -2,37 +2,32 @@ import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.INotifiableHandler; -import gregtech.api.capability.impl.FluidTankList; import gregtech.api.metatileentity.MetaTileEntity; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipleTankHandler, INotifiableHandler { - private static final IFluidTank NULL_TANK = new FluidTank(0); - private static final IMultipleTankHandler NULL_HANDLER = new FluidTankList(false, NULL_TANK); - - @Nullable + @NotNull IItemHandlerModifiable itemDelegate; - @Nullable + @NotNull IMultipleTankHandler fluidDelegate; private final boolean isExport; private final List notifiables = new ArrayList<>(); - public DualHandler(IItemHandlerModifiable itemDelegate, IMultipleTankHandler fluidDelegate, + public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, + @NotNull IMultipleTankHandler fluidDelegate, boolean isExport) { this.itemDelegate = itemDelegate; this.fluidDelegate = fluidDelegate; @@ -41,25 +36,32 @@ public DualHandler(IItemHandlerModifiable itemDelegate, IMultipleTankHandler flu @Override public int getSlots() { - return itemDelegate == null ? 0 : itemDelegate.getSlots(); + return itemDelegate.getSlots(); } @Override public ItemStack getStackInSlot(int slot) { - if (itemDelegate == null) return ItemStack.EMPTY; return itemDelegate.getStackInSlot(slot); } @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (itemDelegate == null) return stack; - return itemDelegate.insertItem(slot, stack, simulate); + var inserted = itemDelegate.insertItem(slot, stack, simulate); + + if (!simulate && inserted.getCount() != stack.getCount()) + onContentsChanged(); + + return inserted; } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (itemDelegate == null) return ItemStack.EMPTY; - return itemDelegate.extractItem(slot, amount, simulate); + var extracted = itemDelegate.extractItem(slot, amount, simulate); + + if (!simulate && !extracted.isEmpty()) + onContentsChanged(); + + return extracted; } @Override @@ -67,28 +69,23 @@ public int getSlotLimit(int slot) { return itemDelegate.getSlotLimit(slot); } - // todo actually use this public void onContentsChanged() { - notifiables.forEach(mte -> { + for (var mte : this.notifiables) { if (isExport) { mte.addNotifiedOutput(this); } else { mte.addNotifiedInput(this); } - }); + } } @Override public void setStackInSlot(int slot, ItemStack stack) { - if (itemDelegate == null) return; itemDelegate.setStackInSlot(slot, stack); } @NotNull private IFluidTank getFirstTank() { - if (fluidDelegate == null) - return NULL_TANK; - var tanks = this.fluidDelegate.getFluidTanks(); tanks.sort(ENTRY_COMPARATOR); return tanks.get(0); @@ -116,27 +113,37 @@ public FluidTankInfo getInfo() { @Override public IFluidTankProperties[] getTankProperties() { - return this.fluidDelegate == null ? - NULL_HANDLER.getTankProperties() : - this.fluidDelegate.getTankProperties(); + return this.fluidDelegate.getTankProperties(); } @Override public int fill(FluidStack resource, boolean doFill) { - if (fluidDelegate == null) return 0; - return fluidDelegate.fill(resource, doFill); + int filled = fluidDelegate.fill(resource, doFill); + + if (doFill && filled > 0) + onContentsChanged(); + + return filled; } @Override public FluidStack drain(FluidStack resource, boolean doDrain) { - if (fluidDelegate == null) return null; - return fluidDelegate.drain(resource, doDrain); + var drained = fluidDelegate.drain(resource, doDrain); + + if (doDrain && drained != null && drained.amount > 0) + onContentsChanged(); + + return drained; } @Override public FluidStack drain(int maxDrain, boolean doDrain) { - if (fluidDelegate == null) return null; - return fluidDelegate.drain(maxDrain, doDrain); + var drained = fluidDelegate.drain(maxDrain, doDrain); + + if (doDrain && drained != null && drained.amount > 0) + onContentsChanged(); + + return drained; } @Override @@ -151,29 +158,21 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { @Override public @NotNull List getFluidTanks() { - return this.fluidDelegate == null ? - NULL_HANDLER.getFluidTanks() : - this.fluidDelegate.getFluidTanks(); + return this.fluidDelegate.getFluidTanks(); } @Override public int getTanks() { - return this.fluidDelegate == null ? - NULL_HANDLER.getTanks() : - this.fluidDelegate.getTanks(); + return this.fluidDelegate.getTanks(); } @Override public @NotNull MultiFluidTankEntry getTankAt(int index) { - return this.fluidDelegate == null ? - NULL_HANDLER.getTankAt(0) : - this.fluidDelegate.getTankAt(index); + return this.fluidDelegate.getTankAt(index); } @Override public boolean allowSameFluidFill() { - return this.fluidDelegate == null ? - NULL_HANDLER.allowSameFluidFill() : - this.fluidDelegate.allowSameFluidFill(); + return this.fluidDelegate.allowSameFluidFill(); } } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java index 4233e771558..bfb80738d55 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java @@ -535,7 +535,8 @@ protected void setVoidingMode(int mode) { for (IFluidTank tank : this.getAbilities(MultiblockAbility.IMPORT_FLUIDS)) { this.getNotifiedFluidInputList().add((IFluidHandler) tank); } - this.getNotifiedItemInputList().addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); + this.getNotifiedItemInputList() + .addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); markDirty(); } From fcddf45f1d157b0440e3cd89d17842587128a27e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:01:53 -0700 Subject: [PATCH 026/112] INotifiable is not needed add field for dual handler in fluid hatch --- src/main/java/gregtech/api/DualHandler.java | 55 ++----------------- .../MetaTileEntityFluidHatch.java | 6 +- 2 files changed, 9 insertions(+), 52 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index cb697762b79..b9ee884d9de 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -16,7 +16,7 @@ import java.util.ArrayList; import java.util.List; -public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipleTankHandler, INotifiableHandler { +public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipleTankHandler { @NotNull IItemHandlerModifiable itemDelegate; @@ -24,8 +24,6 @@ public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipl IMultipleTankHandler fluidDelegate; private final boolean isExport; - private final List notifiables = new ArrayList<>(); - public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, @NotNull IMultipleTankHandler fluidDelegate, boolean isExport) { @@ -48,20 +46,12 @@ public ItemStack getStackInSlot(int slot) { public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { var inserted = itemDelegate.insertItem(slot, stack, simulate); - if (!simulate && inserted.getCount() != stack.getCount()) - onContentsChanged(); - return inserted; } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - var extracted = itemDelegate.extractItem(slot, amount, simulate); - - if (!simulate && !extracted.isEmpty()) - onContentsChanged(); - - return extracted; + return itemDelegate.extractItem(slot, amount, simulate); } @Override @@ -69,16 +59,6 @@ public int getSlotLimit(int slot) { return itemDelegate.getSlotLimit(slot); } - public void onContentsChanged() { - for (var mte : this.notifiables) { - if (isExport) { - mte.addNotifiedOutput(this); - } else { - mte.addNotifiedInput(this); - } - } - } - @Override public void setStackInSlot(int slot, ItemStack stack) { itemDelegate.setStackInSlot(slot, stack); @@ -118,42 +98,17 @@ public IFluidTankProperties[] getTankProperties() { @Override public int fill(FluidStack resource, boolean doFill) { - int filled = fluidDelegate.fill(resource, doFill); - - if (doFill && filled > 0) - onContentsChanged(); - - return filled; + return fluidDelegate.fill(resource, doFill); } @Override public FluidStack drain(FluidStack resource, boolean doDrain) { - var drained = fluidDelegate.drain(resource, doDrain); - - if (doDrain && drained != null && drained.amount > 0) - onContentsChanged(); - - return drained; + return fluidDelegate.drain(resource, doDrain); } @Override public FluidStack drain(int maxDrain, boolean doDrain) { - var drained = fluidDelegate.drain(maxDrain, doDrain); - - if (doDrain && drained != null && drained.amount > 0) - onContentsChanged(); - - return drained; - } - - @Override - public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { - this.notifiables.add(metaTileEntity); - } - - @Override - public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { - this.notifiables.remove(metaTileEntity); + return fluidDelegate.drain(maxDrain, doDrain); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index c54d73fbf09..6738ead6764 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -72,6 +72,7 @@ public class MetaTileEntityFluidHatch extends MetaTileEntityMultiblockNotifiable protected final HatchFluidTank fluidTank; protected boolean workingEnabled; private GhostCircuitItemStackHandler circuitInventory; + private DualHandler dualHandler; // export hatch-only fields protected boolean locked; @@ -86,6 +87,7 @@ public MetaTileEntityFluidHatch(ResourceLocation metaTileEntityId, int tier, boo if (this.hasGhostCircuitInventory()) { this.circuitInventory = new GhostCircuitItemStackHandler(this); this.circuitInventory.addNotifiableMetaTileEntity(this); + this.dualHandler = new DualHandler(this.circuitInventory, this.importFluids, isExportHatch); } } @@ -262,9 +264,9 @@ public MultiblockAbility getAbility() { @Override public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { - return Collections.singletonList(fluidTank); + return Collections.singletonList(this.fluidTank); } else if (key.equals(MultiblockAbility.IMPORT_DUAL)) { - return Collections.singletonList(new DualHandler(this.circuitInventory, this.importFluids, false)); + return Collections.singletonList(this.dualHandler); } return Collections.emptyList(); } From 4dad2ffc4f95925d7312e11b857ee98de22be686 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:17:15 -0700 Subject: [PATCH 027/112] use new method --- .../multiblock/RecipeMapMultiblockController.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index c5393c72f56..8320797e856 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -120,10 +120,7 @@ public boolean isActive() { } protected void initializeAbilities() { - List l = new ArrayList<>(); - l.addAll(getAbilitiesModifiable(MultiblockAbility.IMPORT_ITEMS)); - l.addAll(getAbilitiesModifiable(MultiblockAbility.IMPORT_DUAL)); - this.inputInventory = new ItemHandlerList(Collections.unmodifiableList(l)); + this.inputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); this.inputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), getAbilities(MultiblockAbility.IMPORT_FLUIDS)); this.outputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.EXPORT_ITEMS)); From ff7f908f7ed4d9a3808715cd0b29d38b34c21d18 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:18:12 -0700 Subject: [PATCH 028/112] improve handler checking --- .../api/capability/impl/AbstractRecipeLogic.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 5dcd22f8654..b2ab59dbffb 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -654,13 +654,14 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul GTUtility.addHandlerToCollection(fluids, fluidInputs); GTUtility.addHandlerToCollection(items, inputs); - if (fluidInputs instanceof DualHandler dualHandler) { - GTUtility.addHandlerToCollection(items, dualHandler); + if (fluidInputs instanceof FluidTankList tankList) { + for (var tank : tankList.getFluidTanks()) { + if (tank.getDelegate() instanceof DualHandler dualHandler) + GTUtility.addHandlerToCollection(items, dualHandler); + } } - if (inputs instanceof DualHandler dualHandler) { - GTUtility.addHandlerToCollection(fluids, dualHandler); - } else if (inputs instanceof ItemHandlerList list) { + if (inputs instanceof ItemHandlerList list) { for (var handler : list.getBackingHandlers()) { if (handler instanceof DualHandler dualHandler) { GTUtility.addHandlerToCollection(fluids, dualHandler); From c8620a14ae5dee628d692af79a1fbdcfbde13257 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:25:35 -0700 Subject: [PATCH 029/112] forgor --- src/main/java/gregtech/api/DualHandler.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index b9ee884d9de..4e041d61cd4 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -44,9 +44,7 @@ public ItemStack getStackInSlot(int slot) { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - var inserted = itemDelegate.insertItem(slot, stack, simulate); - - return inserted; + return itemDelegate.insertItem(slot, stack, simulate); } @Override From 48bd73c8757517b5faea70dd62db14954844747b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:25:56 -0700 Subject: [PATCH 030/112] spobl --- src/main/java/gregtech/api/DualHandler.java | 3 --- .../multiblock/RecipeMapMultiblockController.java | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/DualHandler.java index 4e041d61cd4..6185f2c3456 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/DualHandler.java @@ -1,8 +1,6 @@ package gregtech.api; import gregtech.api.capability.IMultipleTankHandler; -import gregtech.api.capability.INotifiableHandler; -import gregtech.api.metatileentity.MetaTileEntity; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; @@ -13,7 +11,6 @@ import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.List; public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipleTankHandler { diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 8320797e856..52a5aba6ff3 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -36,7 +36,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public abstract class RecipeMapMultiblockController extends MultiblockWithDisplayBase implements IDataInfoProvider, @@ -120,7 +119,8 @@ public boolean isActive() { } protected void initializeAbilities() { - this.inputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); + this.inputInventory = new ItemHandlerList( + getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); this.inputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), getAbilities(MultiblockAbility.IMPORT_FLUIDS)); this.outputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.EXPORT_ITEMS)); From f88ca6139931935aef9fa78c8c803bba5b90acd4 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:01:32 -0700 Subject: [PATCH 031/112] move DualHandler to capability package --- src/main/java/gregtech/api/{ => capability}/DualHandler.java | 4 +--- .../gregtech/api/capability/impl/AbstractRecipeLogic.java | 2 +- .../api/metatileentity/multiblock/MultiblockAbility.java | 2 +- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) rename src/main/java/gregtech/api/{ => capability}/DualHandler.java (97%) diff --git a/src/main/java/gregtech/api/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java similarity index 97% rename from src/main/java/gregtech/api/DualHandler.java rename to src/main/java/gregtech/api/capability/DualHandler.java index 6185f2c3456..dd9c1981ea2 100644 --- a/src/main/java/gregtech/api/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -1,6 +1,4 @@ -package gregtech.api; - -import gregtech.api.capability.IMultipleTankHandler; +package gregtech.api.capability; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index b2ab59dbffb..1aa23a6ac26 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -1,6 +1,6 @@ package gregtech.api.capability.impl; -import gregtech.api.DualHandler; +import gregtech.api.capability.DualHandler; import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index e43374ad379..4edfe1cd9af 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -1,6 +1,6 @@ package gregtech.api.metatileentity.multiblock; -import gregtech.api.DualHandler; +import gregtech.api.capability.DualHandler; import gregtech.api.capability.*; import gregtech.api.metatileentity.MetaTileEntity; diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 6738ead6764..b06aca3a967 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -1,6 +1,6 @@ package gregtech.common.metatileentities.multi.multiblockpart; -import gregtech.api.DualHandler; +import gregtech.api.capability.DualHandler; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; From aa463fb7f763697b7a3abf3ec97980fcd408ad4f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:17:31 -0700 Subject: [PATCH 032/112] add method for checking the ability at pos --- .../multiblock/MultiblockControllerBase.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index bf51955313e..6cb3b20c73b 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -355,6 +355,9 @@ public void checkStructurePattern() { if (part instanceof IMultiblockAbilityPart abilityPart) { List abilityList = abilityPart.getAbilities(); for (MultiblockAbility ability : abilityList) { + if (!checkAbilityPart(ability, ((MetaTileEntity) abilityPart).getPos())) + continue; + List abilityInstancesList = abilities.computeIfAbsent(ability, k -> new ArrayList<>()); abilityInstancesList.addAll(abilityPart.registerAbilities(ability)); @@ -377,6 +380,10 @@ public void checkStructurePattern() { } } + protected boolean checkAbilityPart(MultiblockAbility ability, BlockPos pos) { + return true; + } + protected void formStructure(PatternMatchContext context) {} public void invalidateStructure() { From 3664af0e47648a7482c9fd98898387acbe9a2267 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:21:33 -0700 Subject: [PATCH 033/112] remove unnecessary methods and usages --- .../capability/impl/MultiblockRecipeLogic.java | 2 +- .../multiblock/MultiblockControllerBase.java | 17 ----------------- .../multiblock/MultiblockWithDisplayBase.java | 2 +- .../RecipeMapMultiblockController.java | 5 ++--- 4 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 3fe8c7ddd55..728ed138cc9 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -84,7 +84,7 @@ protected IItemHandlerModifiable getInputInventory() { // Used for distinct bus recipe checking protected List getInputBuses() { RecipeMapMultiblockController controller = (RecipeMapMultiblockController) metaTileEntity; - return new ArrayList<>(controller.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); + return controller.getAbilities(MultiblockAbility.IMPORT_ITEMS); } @Override diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index 6cb3b20c73b..d218d095904 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -407,23 +407,6 @@ public List getAbilities(MultiblockAbility ability) { return Collections.unmodifiableList(getAbilitiesModifiable(ability)); } - public List getAbilities(MultiblockAbility ability1, - MultiblockAbility ability2) { - var combined = new ArrayList(); - combined.addAll(getAbilitiesModifiable(ability1)); - combined.addAll(getAbilitiesModifiable(ability2)); - return Collections.unmodifiableList(combined); - } - - @SafeVarargs - public final List getAbilities(MultiblockAbility... abilities) { - var combined = new ArrayList(); - for (var ability : abilities) { - combined.addAll(getAbilitiesModifiable(ability)); - } - return Collections.unmodifiableList(combined); - } - @SuppressWarnings("unchecked") public List getAbilitiesModifiable(MultiblockAbility ability) { return (List) multiblockAbilities.getOrDefault(ability, Collections.emptyList()); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java index bfb80738d55..12c75ff27e9 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockWithDisplayBase.java @@ -536,7 +536,7 @@ protected void setVoidingMode(int mode) { this.getNotifiedFluidInputList().add((IFluidHandler) tank); } this.getNotifiedItemInputList() - .addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); + .addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); markDirty(); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 52a5aba6ff3..8676bea0200 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -119,8 +119,7 @@ public boolean isActive() { } protected void initializeAbilities() { - this.inputInventory = new ItemHandlerList( - getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); + this.inputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.IMPORT_ITEMS)); this.inputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), getAbilities(MultiblockAbility.IMPORT_FLUIDS)); this.outputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.EXPORT_ITEMS)); @@ -256,7 +255,7 @@ public void setDistinct(boolean isDistinct) { // mark buses as changed on distinct toggle if (this.isDistinct) { this.notifiedItemInputList - .addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_DUAL)); + .addAll(this.getAbilities(MultiblockAbility.IMPORT_ITEMS)); } else { this.notifiedItemInputList.add(this.inputInventory); } From c8101eaaf9cd269b1239ff51eccff1d6fb767ce8 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:33:45 -0700 Subject: [PATCH 034/112] move find recipe changes to MultiblockRecipeLogic --- .../capability/impl/AbstractRecipeLogic.java | 23 +-------------- .../impl/MultiblockRecipeLogic.java | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 1aa23a6ac26..d302a49e462 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -648,28 +648,7 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul return null; } - List items = new ArrayList<>(); - List fluids = new ArrayList<>(); - - GTUtility.addHandlerToCollection(fluids, fluidInputs); - GTUtility.addHandlerToCollection(items, inputs); - - if (fluidInputs instanceof FluidTankList tankList) { - for (var tank : tankList.getFluidTanks()) { - if (tank.getDelegate() instanceof DualHandler dualHandler) - GTUtility.addHandlerToCollection(items, dualHandler); - } - } - - if (inputs instanceof ItemHandlerList list) { - for (var handler : list.getBackingHandlers()) { - if (handler instanceof DualHandler dualHandler) { - GTUtility.addHandlerToCollection(fluids, dualHandler); - } - } - } - - return map.findRecipe(maxVoltage, items, fluids); + return map.findRecipe(maxVoltage, inputs, fluidInputs); } /** diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 728ed138cc9..ac92e175f64 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -1,6 +1,7 @@ package gregtech.api.capability.impl; import gregtech.api.GTValues; +import gregtech.api.capability.DualHandler; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.IMultiblockController; import gregtech.api.capability.IMultipleRecipeMaps; @@ -16,7 +17,9 @@ import gregtech.api.util.GTUtility; import gregtech.common.ConfigHolder; +import net.minecraft.item.ItemStack; import net.minecraft.util.Tuple; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; @@ -240,6 +243,31 @@ protected void trySearchNewRecipeDistinct() { } } + @Override + protected @Nullable Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, + IMultipleTankHandler fluidInputs) { + RecipeMap map = getRecipeMap(); + if (map == null || !isRecipeMapValid(map)) { + return null; + } + + List items = new ArrayList<>(); + List fluids = new ArrayList<>(); + + GTUtility.addHandlerToCollection(fluids, fluidInputs); + GTUtility.addHandlerToCollection(items, inputs); + + if (fluidInputs instanceof DualHandler dualHandler) { + GTUtility.addHandlerToCollection(items, dualHandler); + } + + if (inputs instanceof DualHandler dualHandler) { + GTUtility.addHandlerToCollection(fluids, dualHandler); + } + + return map.findRecipe(maxVoltage, items, fluids); + } + @Override public void invalidateInputs() { MultiblockWithDisplayBase controller = (MultiblockWithDisplayBase) metaTileEntity; From e8ee8a356f3a755c2dd327bdb2df07aca1660f87 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:34:47 -0700 Subject: [PATCH 035/112] remove unnecessary abilities --- .../api/metatileentity/multiblock/MultiblockAbility.java | 3 --- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index 4edfe1cd9af..209f8f56724 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -29,9 +29,6 @@ public class MultiblockAbility { public static final MultiblockAbility EXPORT_FLUIDS = new MultiblockAbility<>("export_fluids"); public static final MultiblockAbility IMPORT_FLUIDS = new MultiblockAbility<>("import_fluids"); - public static final MultiblockAbility EXPORT_DUAL = new MultiblockAbility<>("export_dual"); - public static final MultiblockAbility IMPORT_DUAL = new MultiblockAbility<>("import_dual"); - public static final MultiblockAbility INPUT_ENERGY = new MultiblockAbility<>("input_energy"); public static final MultiblockAbility OUTPUT_ENERGY = new MultiblockAbility<>("output_energy"); diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index b06aca3a967..d9efc273934 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -59,6 +59,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -258,14 +259,14 @@ public MultiblockAbility getAbility() { public @NotNull List> getAbilities() { return isExportHatch ? Collections.singletonList(MultiblockAbility.EXPORT_FLUIDS) : - Collections.singletonList(MultiblockAbility.IMPORT_DUAL); + Collections.singletonList(MultiblockAbility.IMPORT_FLUIDS); } @Override public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { return Collections.singletonList(this.fluidTank); - } else if (key.equals(MultiblockAbility.IMPORT_DUAL)) { + } else if (key.equals(MultiblockAbility.IMPORT_FLUIDS)) { return Collections.singletonList(this.dualHandler); } return Collections.emptyList(); From b8357bf8b10a1fd4c55663c603f2d5b85d639016 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:54:31 -0700 Subject: [PATCH 036/112] return key set which is the correct size --- src/main/java/gregtech/api/capability/impl/ItemHandlerList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/impl/ItemHandlerList.java b/src/main/java/gregtech/api/capability/impl/ItemHandlerList.java index ffb12d0dcd6..4f45f7b6d45 100644 --- a/src/main/java/gregtech/api/capability/impl/ItemHandlerList.java +++ b/src/main/java/gregtech/api/capability/impl/ItemHandlerList.java @@ -90,7 +90,7 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { @NotNull public Collection getBackingHandlers() { - return Collections.unmodifiableCollection(handlerBySlotIndex.values()); + return Collections.unmodifiableCollection(baseIndexOffset.keySet()); } private boolean invalidSlot(int slot) { From 2202dd76d6455701f6562f9bd727d5fec9b4f0ab Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:57:31 -0700 Subject: [PATCH 037/112] actually check correctly remove sort --- .../java/gregtech/api/capability/DualHandler.java | 4 +--- .../api/capability/impl/MultiblockRecipeLogic.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index dd9c1981ea2..8294216e3bd 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -59,9 +59,7 @@ public void setStackInSlot(int slot, ItemStack stack) { @NotNull private IFluidTank getFirstTank() { - var tanks = this.fluidDelegate.getFluidTanks(); - tanks.sort(ENTRY_COMPARATOR); - return tanks.get(0); + return this.fluidDelegate.getTankAt(0); } @Override diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index ac92e175f64..86ec5eceff3 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -20,6 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.Tuple; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; @@ -257,12 +258,18 @@ protected void trySearchNewRecipeDistinct() { GTUtility.addHandlerToCollection(fluids, fluidInputs); GTUtility.addHandlerToCollection(items, inputs); - if (fluidInputs instanceof DualHandler dualHandler) { - GTUtility.addHandlerToCollection(items, dualHandler); + for (IFluidTank tank : fluidInputs.getFluidTanks()) { + if (tank instanceof DualHandler dualHandler) + GTUtility.addHandlerToCollection(items, dualHandler); } if (inputs instanceof DualHandler dualHandler) { GTUtility.addHandlerToCollection(fluids, dualHandler); + } else if (inputs instanceof ItemHandlerList handlerList) { + for (IItemHandler handler : handlerList.getBackingHandlers()) { + if (handler instanceof DualHandler dualHandler) + GTUtility.addHandlerToCollection(fluids, dualHandler); + } } return map.findRecipe(maxVoltage, items, fluids); From c15003abcae1db057ae9aa06937055bc5537d6da Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Jul 2024 00:25:47 -0700 Subject: [PATCH 038/112] minor oopsie --- .../gregtech/api/capability/impl/MultiblockRecipeLogic.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 86ec5eceff3..6cb37cd3415 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -258,8 +258,8 @@ protected void trySearchNewRecipeDistinct() { GTUtility.addHandlerToCollection(fluids, fluidInputs); GTUtility.addHandlerToCollection(items, inputs); - for (IFluidTank tank : fluidInputs.getFluidTanks()) { - if (tank instanceof DualHandler dualHandler) + for (var tank : fluidInputs.getFluidTanks()) { + if (tank.getDelegate() instanceof DualHandler dualHandler) GTUtility.addHandlerToCollection(items, dualHandler); } From 946ff1b8956997380099d40c936e2ac90229654d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Jul 2024 00:37:17 -0700 Subject: [PATCH 039/112] fix issue in prepareRecipe --- .../capability/impl/AbstractRecipeLogic.java | 31 +++++++++++++++++++ .../impl/MultiblockRecipeLogic.java | 21 ++----------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index d302a49e462..b2987791d65 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -37,6 +37,7 @@ import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.MustBeInvokedByOverriders; @@ -763,6 +764,36 @@ protected boolean checkOutputSpaceFluids(@NotNull Recipe recipe, @NotNull IMulti return true; } + protected List gatherItems(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { + List items = new ArrayList<>(); + + GTUtility.addHandlerToCollection(items, inputInventory); + + for (var tank : inputFluids.getFluidTanks()) { + if (tank.getDelegate() instanceof IItemHandlerModifiable modifiable) + GTUtility.addHandlerToCollection(items, modifiable); + } + + return items; + } + + protected List gatherFluids(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { + List fluids = new ArrayList<>(); + + GTUtility.addHandlerToCollection(fluids, inputFluids); + + if (inputInventory instanceof IMultipleTankHandler tankHandler) { + GTUtility.addHandlerToCollection(fluids, tankHandler); + } else if (inputInventory instanceof ItemHandlerList handlerList) { + for (IItemHandler handler : handlerList.getBackingHandlers()) { + if (handler instanceof IMultipleTankHandler tankHandler) + GTUtility.addHandlerToCollection(fluids, tankHandler); + } + } + + return fluids; + } + /** * Overclock a recipe beyond a duration of 1 tick using parallelization. * diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 6cb37cd3415..16a66b571c0 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -252,25 +252,8 @@ protected void trySearchNewRecipeDistinct() { return null; } - List items = new ArrayList<>(); - List fluids = new ArrayList<>(); - - GTUtility.addHandlerToCollection(fluids, fluidInputs); - GTUtility.addHandlerToCollection(items, inputs); - - for (var tank : fluidInputs.getFluidTanks()) { - if (tank.getDelegate() instanceof DualHandler dualHandler) - GTUtility.addHandlerToCollection(items, dualHandler); - } - - if (inputs instanceof DualHandler dualHandler) { - GTUtility.addHandlerToCollection(fluids, dualHandler); - } else if (inputs instanceof ItemHandlerList handlerList) { - for (IItemHandler handler : handlerList.getBackingHandlers()) { - if (handler instanceof DualHandler dualHandler) - GTUtility.addHandlerToCollection(fluids, dualHandler); - } - } + List items = gatherItems(inputs, fluidInputs); + List fluids = gatherFluids(inputs, fluidInputs); return map.findRecipe(maxVoltage, items, fluids); } From 2da95651e91c64259c8ef384b22fa2d5aaa104aa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Jul 2024 00:43:05 -0700 Subject: [PATCH 040/112] spblss --- .../java/gregtech/api/capability/impl/AbstractRecipeLogic.java | 1 - .../gregtech/api/capability/impl/MultiblockRecipeLogic.java | 2 -- .../api/metatileentity/multiblock/MultiblockAbility.java | 1 - .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 1 - 4 files changed, 5 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index b2987791d65..99c688a8e2f 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -1,6 +1,5 @@ package gregtech.api.capability.impl; -import gregtech.api.capability.DualHandler; import gregtech.api.GTValues; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 16a66b571c0..c14977d577e 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -1,7 +1,6 @@ package gregtech.api.capability.impl; import gregtech.api.GTValues; -import gregtech.api.capability.DualHandler; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.IMultiblockController; import gregtech.api.capability.IMultipleRecipeMaps; @@ -20,7 +19,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.Tuple; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index 209f8f56724..b5187267437 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -1,6 +1,5 @@ package gregtech.api.metatileentity.multiblock; -import gregtech.api.capability.DualHandler; import gregtech.api.capability.*; import gregtech.api.metatileentity.MetaTileEntity; diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index d9efc273934..a1f699a9ba0 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -59,7 +59,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.Collections; import java.util.List; From a4b28c08a4d6fa5c3ed43e2dd68c7bdd596e5f63 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 10 Jul 2024 19:41:18 -0700 Subject: [PATCH 041/112] add DualEntry to implement IFluidTank unwrap dual handler into a list of entries --- .../gregtech/api/capability/DualHandler.java | 141 ++++++++++++++---- .../MetaTileEntityFluidHatch.java | 2 +- 2 files changed, 116 insertions(+), 27 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 8294216e3bd..fe89397dd8d 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -9,9 +9,10 @@ import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; -public class DualHandler implements IItemHandlerModifiable, IFluidTank, IMultipleTankHandler { +public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler { @NotNull IItemHandlerModifiable itemDelegate; @@ -27,6 +28,10 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, this.isExport = isExport; } + public boolean isExport() { + return this.isExport; + } + @Override public int getSlots() { return itemDelegate.getSlots(); @@ -57,31 +62,6 @@ public void setStackInSlot(int slot, ItemStack stack) { itemDelegate.setStackInSlot(slot, stack); } - @NotNull - private IFluidTank getFirstTank() { - return this.fluidDelegate.getTankAt(0); - } - - @Override - public FluidStack getFluid() { - return getFirstTank().getFluid(); - } - - @Override - public int getFluidAmount() { - return getFirstTank().getFluidAmount(); - } - - @Override - public int getCapacity() { - return getFirstTank().getCapacity(); - } - - @Override - public FluidTankInfo getInfo() { - return getFirstTank().getInfo(); - } - @Override public IFluidTankProperties[] getTankProperties() { return this.fluidDelegate.getTankProperties(); @@ -121,4 +101,113 @@ public int getTanks() { public boolean allowSameFluidFill() { return this.fluidDelegate.allowSameFluidFill(); } + + public List unwrap() { + int items = itemDelegate.getSlots(); + int fluids = fluidDelegate.getTanks(); + int max = Math.max(items, fluids); + + List list = new ArrayList<>(max); + for (int i = 0; i < max; i++) { + int itemIndex = -1; + if (i < items) + itemIndex = i; + + int fluidIndex = -1; + if (i < fluids) + fluidIndex = i; + + list.add(new DualEntry(this, itemIndex, fluidIndex)); + } + + return list; + } + + public static class DualEntry implements IItemHandlerModifiable, IFluidTank { + + private static final FluidTankInfo NULL = new FluidTankInfo(null, 0); + + private final DualHandler delegate; + private final int itemIndex; + private final int fluidIndex; + + public DualEntry(DualHandler delegate, int itemIndex, int fluidIndex) { + this.delegate = delegate; + this.itemIndex = itemIndex; + this.fluidIndex = fluidIndex; + } + + public DualHandler getDelegate() { + return this.delegate; + } + + @Override + public FluidStack getFluid() { + if (fluidIndex == -1) return null; + return this.delegate.getTankAt(this.fluidIndex).getFluid(); + } + + @Override + public int getFluidAmount() { + if (fluidIndex == -1) return 0; + return this.delegate.getTankAt(this.fluidIndex).getFluidAmount(); + } + + @Override + public int getCapacity() { + if (fluidIndex == -1) return 0; + return this.delegate.getTankAt(this.fluidIndex).getCapacity(); + } + + @Override + public FluidTankInfo getInfo() { + if (fluidIndex == -1) return NULL; + return this.delegate.getTankAt(this.fluidIndex).getInfo(); + } + + @Override + public int fill(FluidStack resource, boolean doFill) { + if (fluidIndex == -1) return 0; + return this.delegate.getTankAt(this.fluidIndex).fill(resource, doFill); + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + if (fluidIndex == -1) return null; + return this.delegate.getTankAt(this.fluidIndex).drain(maxDrain, doDrain); + } + + @Override + public int getSlots() { + return itemIndex == -1 ? 0 : 1; + } + + @Override + public ItemStack getStackInSlot(int slot) { + if (itemIndex == -1) return ItemStack.EMPTY; + return this.delegate.getStackInSlot(this.itemIndex); + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + return this.delegate.insertItem(this.itemIndex, stack, simulate); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return this.delegate.extractItem(this.itemIndex, amount, simulate); + } + + @Override + public int getSlotLimit(int slot) { + if (itemIndex == -1) return 0; + return this.delegate.getSlotLimit(this.itemIndex); + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + if (itemIndex == -1) return; + this.delegate.setStackInSlot(this.itemIndex, stack); + } + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index a1f699a9ba0..cdad5a9ebf4 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -266,7 +266,7 @@ public MultiblockAbility getAbility() { if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { return Collections.singletonList(this.fluidTank); } else if (key.equals(MultiblockAbility.IMPORT_FLUIDS)) { - return Collections.singletonList(this.dualHandler); + return this.dualHandler.unwrap(); } return Collections.emptyList(); } From 15eb53dce5c7d3e1ac84686a360eb479a6b7d2e3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:11:51 -0700 Subject: [PATCH 042/112] lower interface check --- .../gregtech/api/capability/impl/AbstractRecipeLogic.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 99c688a8e2f..f2c4c2bfe0e 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -769,8 +769,8 @@ protected List gatherItems(IItemHandlerModifiable inputInventory, IMu GTUtility.addHandlerToCollection(items, inputInventory); for (var tank : inputFluids.getFluidTanks()) { - if (tank.getDelegate() instanceof IItemHandlerModifiable modifiable) - GTUtility.addHandlerToCollection(items, modifiable); + if (tank.getDelegate() instanceof IItemHandler handler) + GTUtility.addHandlerToCollection(items, handler); } return items; From 1c39bf6d50dafde1f93a9feb2be328d774044478 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jul 2024 10:13:33 -0700 Subject: [PATCH 043/112] move more logic to MultiblockRecipeLogic fix small issue with recipe matching lists --- .../capability/impl/AbstractRecipeLogic.java | 6 +- .../impl/MultiblockRecipeLogic.java | 8 +++ .../java/gregtech/api/recipes/Recipe.java | 57 ++++++++----------- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index f2c4c2bfe0e..296d32b5837 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -428,7 +428,7 @@ protected void trySearchNewRecipe() { protected boolean checkPreviousRecipe() { if (this.previousRecipe == null) return false; if (this.previousRecipe.getEUt() > this.getMaxVoltage()) return false; - return this.previousRecipe.matches(false, getInputInventory(), getInputTank()); + return recipeMatch(this.previousRecipe, getInputInventory(), getInputTank()); } /** @@ -763,6 +763,10 @@ protected boolean checkOutputSpaceFluids(@NotNull Recipe recipe, @NotNull IMulti return true; } + protected boolean recipeMatch(Recipe recipe, IItemHandlerModifiable inputItems, IMultipleTankHandler inputFluids) { + return recipe.matches(true, inputItems, inputFluids); + } + protected List gatherItems(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { List items = new ArrayList<>(); diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index c14977d577e..00ed9a1bd6a 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -256,6 +256,14 @@ protected void trySearchNewRecipeDistinct() { return map.findRecipe(maxVoltage, items, fluids); } + @Override + protected boolean recipeMatch(Recipe recipe, IItemHandlerModifiable inputItems, IMultipleTankHandler inputFluids) { + List items = gatherItems(inputItems, inputFluids); + List fluids = gatherFluids(inputItems, inputFluids); + + return recipe.matches(true, items, fluids); + } + @Override public void invalidateInputs() { MultiblockWithDisplayBase controller = (MultiblockWithDisplayBase) metaTileEntity; diff --git a/src/main/java/gregtech/api/recipes/Recipe.java b/src/main/java/gregtech/api/recipes/Recipe.java index ff495651ac5..dc955c65530 100644 --- a/src/main/java/gregtech/api/recipes/Recipe.java +++ b/src/main/java/gregtech/api/recipes/Recipe.java @@ -245,46 +245,37 @@ public final boolean matches(boolean consumeIfSuccessful, IItemHandlerModifiable * @return true if the recipe matches the given inputs false otherwise. */ public boolean matches(boolean consumeIfSuccessful, List inputs, List fluidInputs) { - Pair fluids = null; - Pair items = null; - - if (fluidInputs.size() > 0) { - fluids = matchesFluid(fluidInputs); - if (!fluids.getKey()) { - return false; - } + Pair fluids = matchesFluid(fluidInputs); + if (!fluids.getKey()) { + return false; } - if (inputs.size() > 0) { - items = matchesItems(inputs); - if (!items.getKey()) { - return false; - } + Pair items = matchesItems(inputs); + if (!items.getKey()) { + return false; } if (consumeIfSuccessful) { - if (fluids != null) { - int[] fluidAmountInTank = fluids.getValue(); + int[] fluidAmountInTank = fluids.getValue(); - for (int i = 0; i < fluidAmountInTank.length; i++) { - FluidStack fluidStack = fluidInputs.get(i); - int fluidAmount = fluidAmountInTank[i]; - if (fluidStack == null || fluidStack.amount == fluidAmount) - continue; - fluidStack.amount = fluidAmount; - if (fluidStack.amount == 0) - fluidInputs.set(i, null); - } + for (int i = 0; i < fluidAmountInTank.length; i++) { + FluidStack fluidStack = fluidInputs.get(i); + int fluidAmount = fluidAmountInTank[i]; + if (fluidStack == null || fluidStack.amount == fluidAmount) + continue; + fluidStack.amount = fluidAmount; + if (fluidStack.amount == 0) + fluidInputs.set(i, null); } - if (items != null) { - int[] itemAmountInSlot = items.getValue(); - for (int i = 0; i < itemAmountInSlot.length; i++) { - ItemStack itemInSlot = inputs.get(i); - int itemAmount = itemAmountInSlot[i]; - if (itemInSlot.isEmpty() || itemInSlot.getCount() == itemAmount) - continue; - itemInSlot.setCount(itemAmountInSlot[i]); - } + + int[] itemAmountInSlot = items.getValue(); + + for (int i = 0; i < itemAmountInSlot.length; i++) { + ItemStack itemInSlot = inputs.get(i); + int itemAmount = itemAmountInSlot[i]; + if (itemInSlot.isEmpty() || itemInSlot.getCount() == itemAmount) + continue; + itemInSlot.setCount(itemAmountInSlot[i]); } } From 052a3064d9cdc494c1e4ecd9e3542ee5eec0ae26 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:50:25 -0700 Subject: [PATCH 044/112] fix dt rebase make dual entry IFluidHandler --- .../gregtech/api/capability/DualHandler.java | 21 ++++++++++++++++++- .../impl/DistillationTowerLogicHandler.java | 5 +++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index fe89397dd8d..3bf65a736db 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -4,6 +4,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandlerModifiable; @@ -123,18 +125,22 @@ public List unwrap() { return list; } - public static class DualEntry implements IItemHandlerModifiable, IFluidTank { + public static class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler { private static final FluidTankInfo NULL = new FluidTankInfo(null, 0); private final DualHandler delegate; private final int itemIndex; private final int fluidIndex; + private final IFluidTankProperties[] props; public DualEntry(DualHandler delegate, int itemIndex, int fluidIndex) { this.delegate = delegate; this.itemIndex = itemIndex; this.fluidIndex = fluidIndex; + this.props = new IFluidTankProperties[] { + new FluidTankProperties(getFluid(), getCapacity()) + }; } public DualHandler getDelegate() { @@ -165,12 +171,23 @@ public FluidTankInfo getInfo() { return this.delegate.getTankAt(this.fluidIndex).getInfo(); } + @Override + public IFluidTankProperties[] getTankProperties() { + return this.props; + } + @Override public int fill(FluidStack resource, boolean doFill) { if (fluidIndex == -1) return 0; return this.delegate.getTankAt(this.fluidIndex).fill(resource, doFill); } + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) { + if (fluidIndex == -1) return null; + return this.delegate.getTankAt(this.fluidIndex).drain(resource, doDrain); + } + @Override public FluidStack drain(int maxDrain, boolean doDrain) { if (fluidIndex == -1) return null; @@ -190,11 +207,13 @@ public ItemStack getStackInSlot(int slot) { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (itemIndex == -1) return stack; return this.delegate.insertItem(this.itemIndex, stack, simulate); } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (itemIndex == -1) return ItemStack.EMPTY; return this.delegate.extractItem(this.itemIndex, amount, simulate); } diff --git a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java index e674db66763..41bbba3bae7 100644 --- a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java +++ b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java @@ -18,6 +18,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -92,9 +93,9 @@ public void determineOrderedFluidOutputs() { } MetaTileEntityMultiblockPart part = fluidExportParts.get(exportIndex); if (part.getPos().getY() == y) { - List hatchTanks = new ObjectArrayList<>(); // noinspection unchecked - ((IMultiblockAbilityPart) part).registerAbilities(hatchTanks); + List hatchTanks = ((IMultiblockAbilityPart) part) + .registerAbilities(MultiblockAbility.EXPORT_FLUIDS); orderedHandlerList.add(new FluidTankList(false, hatchTanks)); tankList.addAll(hatchTanks); exportIndex++; From 8c96e48d95b9600ff6c0c5bb020181725fca0ca3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:50:57 -0700 Subject: [PATCH 045/112] sblss --- .../api/capability/impl/DistillationTowerLogicHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java index 41bbba3bae7..1a0be3c3c22 100644 --- a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java +++ b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java @@ -18,7 +18,6 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; From 89b5578d4e1b37e234031ce948e3afa4b189883e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:56:23 -0700 Subject: [PATCH 046/112] fix props --- src/main/java/gregtech/api/capability/DualHandler.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 3bf65a736db..ededd1b93cf 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -4,7 +4,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.fluids.capability.FluidTankProperties; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandlerModifiable; @@ -138,9 +137,9 @@ public DualEntry(DualHandler delegate, int itemIndex, int fluidIndex) { this.delegate = delegate; this.itemIndex = itemIndex; this.fluidIndex = fluidIndex; - this.props = new IFluidTankProperties[] { - new FluidTankProperties(getFluid(), getCapacity()) - }; + this.props = this.fluidIndex == -1 ? + new IFluidTankProperties[0] : + this.delegate.getTankAt(this.fluidIndex).getTankProperties(); } public DualHandler getDelegate() { From 3b304fb08d389d2e8f26d33fd0adb4bf8851f8b0 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 13 Jul 2024 14:34:18 -0700 Subject: [PATCH 047/112] add constructor add getters for delegates --- .../gregtech/api/capability/DualHandler.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index ededd1b93cf..304247ca826 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -1,5 +1,7 @@ package gregtech.api.capability; +import gregtech.api.capability.impl.FluidTankList; + import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; @@ -29,6 +31,22 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, this.isExport = isExport; } + public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, + @NotNull IFluidTank fluidTank, + boolean isExport) { + this.itemDelegate = itemDelegate; + this.fluidDelegate = new FluidTankList(false, fluidTank); + this.isExport = isExport; + } + + public IItemHandlerModifiable getItemDelegate() { + return this.itemDelegate; + } + + public IMultipleTankHandler getFluidDelegate() { + return this.fluidDelegate; + } + public boolean isExport() { return this.isExport; } From 52e84a6be47b8644dad207114663fbc096c8379d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 15 Jul 2024 10:24:13 -0700 Subject: [PATCH 048/112] fix issue with tests and recipe matching --- .../gregtech/api/capability/impl/AbstractRecipeLogic.java | 6 +++--- .../api/capability/impl/MultiblockRecipeLogic.java | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 296d32b5837..34d6678cd06 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -428,7 +428,7 @@ protected void trySearchNewRecipe() { protected boolean checkPreviousRecipe() { if (this.previousRecipe == null) return false; if (this.previousRecipe.getEUt() > this.getMaxVoltage()) return false; - return recipeMatch(this.previousRecipe, getInputInventory(), getInputTank()); + return recipeMatch(this.previousRecipe, false); } /** @@ -763,8 +763,8 @@ protected boolean checkOutputSpaceFluids(@NotNull Recipe recipe, @NotNull IMulti return true; } - protected boolean recipeMatch(Recipe recipe, IItemHandlerModifiable inputItems, IMultipleTankHandler inputFluids) { - return recipe.matches(true, inputItems, inputFluids); + protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { + return recipe.matches(shouldConsume, getInputInventory(), getInputTank()); } protected List gatherItems(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 00ed9a1bd6a..796c9f9e209 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -257,11 +257,11 @@ protected void trySearchNewRecipeDistinct() { } @Override - protected boolean recipeMatch(Recipe recipe, IItemHandlerModifiable inputItems, IMultipleTankHandler inputFluids) { - List items = gatherItems(inputItems, inputFluids); - List fluids = gatherFluids(inputItems, inputFluids); + protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { + List items = gatherItems(getInputInventory(), getInputTank()); + List fluids = gatherFluids(getInputInventory(), getInputTank()); - return recipe.matches(true, items, fluids); + return recipe.matches(shouldConsume, items, fluids); } @Override From 4ab07fd393fdaef4e07ce312b3680f8b53e658af Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:37:15 -0700 Subject: [PATCH 049/112] fix distinct recipe checking + misc --- .../api/capability/impl/MultiblockRecipeLogic.java | 5 ++++- src/main/java/gregtech/api/util/GTUtility.java | 10 ++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 796c9f9e209..ec6dbb35dc4 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -277,7 +277,10 @@ public void invalidateInputs() { } protected boolean checkPreviousRecipeDistinct(IItemHandlerModifiable previousBus) { - return previousRecipe != null && previousRecipe.matches(false, previousBus, getInputTank()); + List items = gatherItems(previousBus, getInputTank()); + List fluids = gatherFluids(previousBus, getInputTank()); + + return previousRecipe != null && previousRecipe.matches(false, items, fluids); } protected boolean prepareRecipeDistinct(Recipe recipe) { diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index b8eb32d6621..67de30c1478 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -461,20 +461,14 @@ public int size() { public static void addHandlerToCollection(Collection collection, IItemHandler handler) { for (int i = 0; i < handler.getSlots(); i++) { var stack = handler.getStackInSlot(i); - if (stack.isEmpty()) - continue; - - collection.add(stack); + if (!stack.isEmpty()) collection.add(stack); } } public static void addHandlerToCollection(Collection collection, IMultipleTankHandler handler) { for (var entry : handler.getFluidTanks()) { var fluid = entry.getFluid(); - if (fluid == null) - continue; - - collection.add(fluid); + if (fluid != null) collection.add(fluid); } } From 6fdabaadfe524425f379af670698cbecf9befd9b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 14:40:27 -0700 Subject: [PATCH 050/112] refactor IMultiblockAbilityPart to reduce list instantiations --- .../impl/DistillationTowerLogicHandler.java | 6 ++++-- .../multiblock/IMultiblockAbilityPart.java | 3 +-- .../multiblock/MultiblockControllerBase.java | 2 +- .../electric/MetaTileEntityDiode.java | 8 ++++---- .../metatileentities/electric/MetaTileEntityHull.java | 8 ++++---- .../multi/MetaTileEntityPumpHatch.java | 8 ++++---- .../multi/MetaTileEntityTankValve.java | 8 ++++---- .../MetaTileEntityAutoMaintenanceHatch.java | 8 ++++---- .../MetaTileEntityComputationHatch.java | 8 ++++---- .../multiblockpart/MetaTileEntityDataAccessHatch.java | 7 ++++--- .../multiblockpart/MetaTileEntityEnergyHatch.java | 7 ++++--- .../multiblockpart/MetaTileEntityFluidHatch.java | 8 ++++---- .../multi/multiblockpart/MetaTileEntityItemBus.java | 11 +++++------ .../multiblockpart/MetaTileEntityLaserHatch.java | 7 ++++--- .../multiblockpart/MetaTileEntityMachineHatch.java | 8 ++++---- .../MetaTileEntityMaintenanceHatch.java | 8 ++++---- .../multiblockpart/MetaTileEntityMufflerHatch.java | 7 ++++--- .../multiblockpart/MetaTileEntityMultiFluidHatch.java | 7 ++++--- .../multiblockpart/MetaTileEntityObjectHolder.java | 8 ++++---- .../MetaTileEntityOpticalDataHatch.java | 8 ++++---- .../MetaTileEntityPassthroughHatchFluid.java | 7 ++++--- .../MetaTileEntityPassthroughHatchItem.java | 7 ++++--- .../multiblockpart/MetaTileEntityReservoirHatch.java | 8 ++++---- .../multiblockpart/MetaTileEntityRotorHolder.java | 8 ++++---- .../appeng/MetaTileEntityMEInputBus.java | 8 ++++---- .../appeng/MetaTileEntityMEInputHatch.java | 8 ++++---- .../appeng/MetaTileEntityMEOutputBus.java | 8 ++++---- .../appeng/MetaTileEntityMEOutputHatch.java | 8 ++++---- .../hpca/MetaTileEntityHPCAComponent.java | 8 ++++---- .../multiblockpart/MetaTileEntitySteamHatch.java | 7 ++++--- .../multiblockpart/MetaTileEntitySteamItemBus.java | 8 ++++---- 31 files changed, 119 insertions(+), 111 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java index 1a0be3c3c22..4f48af9fb98 100644 --- a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java +++ b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java @@ -18,6 +18,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -92,9 +93,10 @@ public void determineOrderedFluidOutputs() { } MetaTileEntityMultiblockPart part = fluidExportParts.get(exportIndex); if (part.getPos().getY() == y) { + List hatchTanks = new ArrayList<>(); // noinspection unchecked - List hatchTanks = ((IMultiblockAbilityPart) part) - .registerAbilities(MultiblockAbility.EXPORT_FLUIDS); + ((IMultiblockAbilityPart) part) + .registerAbilities(MultiblockAbility.EXPORT_FLUIDS, hatchTanks); orderedHandlerList.add(new FluidTankList(false, hatchTanks)); tankList.addAll(hatchTanks); exportIndex++; diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index 445deb0dee0..140e286acda 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -13,6 +13,5 @@ public interface IMultiblockAbilityPart extends IMultiblockPart { return Collections.singletonList(getAbility()); } - @NotNull - List registerAbilities(@NotNull MultiblockAbility key); + void registerAbilities(@NotNull MultiblockAbility key, @NotNull List abilities); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index d218d095904..ba0dfc1f5bf 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -360,7 +360,7 @@ public void checkStructurePattern() { List abilityInstancesList = abilities.computeIfAbsent(ability, k -> new ArrayList<>()); - abilityInstancesList.addAll(abilityPart.registerAbilities(ability)); + abilityPart.registerAbilities(ability, abilityInstancesList); } } } diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index 22607b4eb84..abdf01f25ea 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -36,7 +36,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; -import java.util.Collections; import java.util.List; import static gregtech.api.capability.GregtechDataCodes.AMP_INDEX; @@ -183,9 +182,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java index 0b08cd68a1f..e32479f0466 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java @@ -29,7 +29,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityHull extends MetaTileEntityMultiblockPart @@ -111,9 +110,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java index 30f930f5bbd..37084fb6c1e 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java @@ -44,7 +44,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityPumpHatch extends MetaTileEntityMultiblockPart @@ -114,9 +113,10 @@ public ICubeRenderer getBaseTexture() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(exportFluids.getTankAt(0)); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(exportFluids.getTankAt(0)); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java index e24a90affcf..28db2c710d8 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java @@ -27,7 +27,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityTankValve extends MetaTileEntityMultiblockPart @@ -123,9 +122,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this.getImportFluids()); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this.getImportFluids()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java index 4e4767f16d2..59cab3b3c2e 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityAutoMaintenanceHatch extends MetaTileEntityMultiblockPart implements @@ -106,9 +105,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java index c3b3a830009..155cdef3e8f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java @@ -27,7 +27,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; -import java.util.Collections; import java.util.List; public class MetaTileEntityComputationHatch extends MetaTileEntityMultiblockPart implements @@ -152,9 +151,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java index cd07a9c585a..12ece6a08ca 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java @@ -213,9 +213,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java index fe6deaa8de6..b6a94c03747 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java @@ -117,9 +117,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(energyContainer); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(energyContainer); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index cdad5a9ebf4..022d10fc206 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -262,13 +262,13 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities(@NotNull MultiblockAbility key) { + public void registerAbilities(@NotNull MultiblockAbility key, + @NotNull List abilities) { if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { - return Collections.singletonList(this.fluidTank); + abilities.add(this.fluidTank); } else if (key.equals(MultiblockAbility.IMPORT_FLUIDS)) { - return this.dualHandler.unwrap(); + abilities.addAll(this.dualHandler.unwrap()); } - return Collections.emptyList(); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java index e32e9359401..e2e9d78b99f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java @@ -255,15 +255,14 @@ public void receiveCustomData(int dataId, PacketBuffer buf) { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility key) { - List abilityList = new ArrayList<>(); + public void registerAbilities( + @NotNull MultiblockAbility key, + @NotNull List abilities) { if (this.hasGhostCircuitInventory() && this.actualImportItems != null) { - abilityList.add(isExportHatch ? this.exportItems : this.actualImportItems); + abilities.add(isExportHatch ? this.exportItems : this.actualImportItems); } else { - abilityList.add(isExportHatch ? this.exportItems : this.importItems); + abilities.add(isExportHatch ? this.exportItems : this.importItems); } - return abilityList; } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java index ccd262921d1..2241f9ecefe 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java @@ -71,9 +71,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this.buffer); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this.buffer); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java index 313239a89b1..0ca43ececbe 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java @@ -34,7 +34,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityMachineHatch extends MetaTileEntityMultiblockNotifiablePart @@ -59,9 +58,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(machineHandler); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(machineHandler); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java index 20fc841dc40..a416ba05be9 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java @@ -53,7 +53,6 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.function.Consumer; @@ -517,9 +516,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java index f0dfdb0c6eb..857e322d7f2 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java @@ -146,9 +146,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java index 545bed4a21b..e25dedf5d3f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java @@ -201,9 +201,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return fluidTankList.getFluidTanks(); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.addAll(fluidTankList.getFluidTanks()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java index f7609e59446..86ad494d0d2 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java @@ -40,7 +40,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityObjectHolder extends MetaTileEntityMultiblockNotifiablePart @@ -116,9 +115,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java index f85fdc6d157..251613e4b2d 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java @@ -28,7 +28,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; -import java.util.Collections; import java.util.List; public class MetaTileEntityOpticalDataHatch extends MetaTileEntityMultiblockNotifiablePart implements @@ -129,9 +128,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 8fd7f2d1b41..9726106670b 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -209,9 +209,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 6ededfc7c64..1f55e509785 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -221,9 +221,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index 7af15dc0fba..659db197d62 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -46,7 +46,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityReservoirHatch extends MetaTileEntityMultiblockNotifiablePart @@ -120,9 +119,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(fluidTank); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(fluidTank); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java index 18403255b5a..c8f2403113d 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java @@ -47,7 +47,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityRotorHolder extends MetaTileEntityMultiblockNotifiablePart @@ -166,9 +165,10 @@ void setRotorSpinning(boolean spinning) { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java index 87fa8c4f390..c97cf65f551 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java @@ -51,7 +51,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; -import java.util.Collections; import java.util.List; public class MetaTileEntityMEInputBus extends MetaTileEntityAEHostablePart @@ -331,9 +330,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this.actualImportItems); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this.actualImportItems); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java index 91e1b81544f..2eb5c4cf95f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java @@ -43,7 +43,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; -import java.util.Collections; import java.util.List; public class MetaTileEntityMEInputHatch extends MetaTileEntityAEHostablePart @@ -271,9 +270,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.unmodifiableList(Arrays.asList(this.getAEFluidHandler().getInventory())); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.addAll(Arrays.asList(this.getAEFluidHandler().getInventory())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java index 3985b3e4a32..0f48a189228 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java @@ -41,7 +41,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class MetaTileEntityMEOutputBus extends MetaTileEntityAEHostablePart @@ -197,9 +196,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java index b8a32f2a6bd..5c3505c26ea 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java @@ -43,7 +43,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class MetaTileEntityMEOutputHatch extends MetaTileEntityAEHostablePart @@ -199,9 +198,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java index 06073332875..027105c0e47 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java @@ -33,7 +33,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public abstract class MetaTileEntityHPCAComponent extends MetaTileEntityMultiblockPart implements @@ -68,9 +67,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(this); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java index dea407c396d..d3c686d74a2 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java @@ -129,9 +129,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return this.importFluids.getFluidTanks(); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.addAll(this.importFluids.getFluidTanks()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java index aa76f0864fb..68cb9c126b0 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java @@ -34,7 +34,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class MetaTileEntitySteamItemBus extends MetaTileEntityItemBus { @@ -57,9 +56,10 @@ public MultiblockAbility getAbility() { } @Override - public @NotNull List registerAbilities( - @NotNull MultiblockAbility multiblockAbility) { - return Collections.singletonList(isExportHatch ? this.exportItems : this.importItems); + public void registerAbilities( + @NotNull MultiblockAbility multiblockAbility, + @NotNull List abilities) { + abilities.add(isExportHatch ? this.exportItems : this.importItems); } // Override base texture to have a bus with 4 slots, but ULV textures From fbc5a23c699e7ea35312fdb11738a82c45afa8e9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 14:42:29 -0700 Subject: [PATCH 051/112] use ObjectArrayList --- .../api/capability/impl/DistillationTowerLogicHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java index 4f48af9fb98..cd8a6108bc7 100644 --- a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java +++ b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java @@ -18,7 +18,6 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -93,7 +92,7 @@ public void determineOrderedFluidOutputs() { } MetaTileEntityMultiblockPart part = fluidExportParts.get(exportIndex); if (part.getPos().getY() == y) { - List hatchTanks = new ArrayList<>(); + List hatchTanks = new ObjectArrayList<>(); // noinspection unchecked ((IMultiblockAbilityPart) part) .registerAbilities(MultiblockAbility.EXPORT_FLUIDS, hatchTanks); From 12aacf16051dc1bcd022f9883937067599102535 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 14:45:03 -0700 Subject: [PATCH 052/112] no need to use this method here --- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 022d10fc206..8a355f26e0c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -59,7 +59,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; public class MetaTileEntityFluidHatch extends MetaTileEntityMultiblockNotifiablePart @@ -254,13 +253,6 @@ public MultiblockAbility getAbility() { return isExportHatch ? MultiblockAbility.EXPORT_FLUIDS : MultiblockAbility.IMPORT_FLUIDS; } - @Override - public @NotNull List> getAbilities() { - return isExportHatch ? - Collections.singletonList(MultiblockAbility.EXPORT_FLUIDS) : - Collections.singletonList(MultiblockAbility.IMPORT_FLUIDS); - } - @Override public void registerAbilities(@NotNull MultiblockAbility key, @NotNull List abilities) { From f140fa1199821b075bcc80b8f8f594b7fccd1b97 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 17:01:57 -0700 Subject: [PATCH 053/112] fix rebase --- .../java/gregtech/api/capability/impl/AbstractRecipeLogic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 34d6678cd06..6b4d99fcbc7 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -723,7 +723,7 @@ protected static boolean areItemStacksEqual(@NotNull ItemStack stackA, @NotNull if (checkOutputSpaceItems(recipe, getOutputInventory()) && checkOutputSpaceFluids(recipe, getOutputTank())) { this.isOutputsFull = false; - if (recipe.matches(true, importInventory, importFluids)) { + if (recipeMatch(recipe, true)) { this.metaTileEntity.addNotifiedInput(importInventory); return recipe; } From a0f56cdc42de490c2467c5c257aa93555273db78 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 17:10:00 -0700 Subject: [PATCH 054/112] return if there's nothing to check --- src/main/java/gregtech/api/recipes/Recipe.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/gregtech/api/recipes/Recipe.java b/src/main/java/gregtech/api/recipes/Recipe.java index dc955c65530..fc275cdf52f 100644 --- a/src/main/java/gregtech/api/recipes/Recipe.java +++ b/src/main/java/gregtech/api/recipes/Recipe.java @@ -245,6 +245,9 @@ public final boolean matches(boolean consumeIfSuccessful, IItemHandlerModifiable * @return true if the recipe matches the given inputs false otherwise. */ public boolean matches(boolean consumeIfSuccessful, List inputs, List fluidInputs) { + if (inputs.size() == 0 && fluidInputs.size() == 0) + return false; + Pair fluids = matchesFluid(fluidInputs); if (!fluids.getKey()) { return false; From 9f61a202f5b4b9c036f25ee5af96a221e7faf6f3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 20:51:55 -0700 Subject: [PATCH 055/112] attempt to retain references to the handlers --- .../capability/impl/AbstractRecipeLogic.java | 24 +++++++++---------- .../impl/MultiblockRecipeLogic.java | 12 +++++----- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 6b4d99fcbc7..fe6c6fdbf86 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -767,34 +767,32 @@ protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { return recipe.matches(shouldConsume, getInputInventory(), getInputTank()); } - protected List gatherItems(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { - List items = new ArrayList<>(); + protected IItemHandlerModifiable gatherItems(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { + List items = new ArrayList<>(); - GTUtility.addHandlerToCollection(items, inputInventory); + items.add(inputInventory); for (var tank : inputFluids.getFluidTanks()) { - if (tank.getDelegate() instanceof IItemHandler handler) - GTUtility.addHandlerToCollection(items, handler); + if (tank.getDelegate() instanceof IItemHandlerModifiable handler) + items.add(handler); } - return items; + return new ItemHandlerList(items); } - protected List gatherFluids(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { - List fluids = new ArrayList<>(); - - GTUtility.addHandlerToCollection(fluids, inputFluids); + protected IMultipleTankHandler gatherFluids(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { + List fluids = new ArrayList<>(inputFluids.getFluidTanks()); if (inputInventory instanceof IMultipleTankHandler tankHandler) { - GTUtility.addHandlerToCollection(fluids, tankHandler); + fluids.addAll(tankHandler.getFluidTanks()); } else if (inputInventory instanceof ItemHandlerList handlerList) { for (IItemHandler handler : handlerList.getBackingHandlers()) { if (handler instanceof IMultipleTankHandler tankHandler) - GTUtility.addHandlerToCollection(fluids, tankHandler); + fluids.addAll(tankHandler.getFluidTanks()); } } - return fluids; + return new FluidTankList(inputFluids.allowSameFluidFill(), fluids); } /** diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index ec6dbb35dc4..6d060b8e92f 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -250,16 +250,16 @@ protected void trySearchNewRecipeDistinct() { return null; } - List items = gatherItems(inputs, fluidInputs); - List fluids = gatherFluids(inputs, fluidInputs); + IItemHandlerModifiable items = gatherItems(inputs, fluidInputs); + IMultipleTankHandler fluids = gatherFluids(inputs, fluidInputs); return map.findRecipe(maxVoltage, items, fluids); } @Override protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { - List items = gatherItems(getInputInventory(), getInputTank()); - List fluids = gatherFluids(getInputInventory(), getInputTank()); + IItemHandlerModifiable items = gatherItems(getInputInventory(), getInputTank()); + IMultipleTankHandler fluids = gatherFluids(getInputInventory(), getInputTank()); return recipe.matches(shouldConsume, items, fluids); } @@ -277,8 +277,8 @@ public void invalidateInputs() { } protected boolean checkPreviousRecipeDistinct(IItemHandlerModifiable previousBus) { - List items = gatherItems(previousBus, getInputTank()); - List fluids = gatherFluids(previousBus, getInputTank()); + IItemHandlerModifiable items = gatherItems(previousBus, getInputTank()); + IMultipleTankHandler fluids = gatherFluids(previousBus, getInputTank()); return previousRecipe != null && previousRecipe.matches(false, items, fluids); } From 3ddd1fb7d1616f0e6310195fb55dc82177142fad Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 20:52:51 -0700 Subject: [PATCH 056/112] remove unused methods + spotless --- .../api/capability/impl/AbstractRecipeLogic.java | 6 ++++-- .../api/capability/impl/MultiblockRecipeLogic.java | 6 ++---- src/main/java/gregtech/api/util/GTUtility.java | 14 -------------- 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index fe6c6fdbf86..29077c510c5 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -767,7 +767,8 @@ protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { return recipe.matches(shouldConsume, getInputInventory(), getInputTank()); } - protected IItemHandlerModifiable gatherItems(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { + protected IItemHandlerModifiable gatherItems(IItemHandlerModifiable inputInventory, + IMultipleTankHandler inputFluids) { List items = new ArrayList<>(); items.add(inputInventory); @@ -780,7 +781,8 @@ protected IItemHandlerModifiable gatherItems(IItemHandlerModifiable inputInvento return new ItemHandlerList(items); } - protected IMultipleTankHandler gatherFluids(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { + protected IMultipleTankHandler gatherFluids(IItemHandlerModifiable inputInventory, + IMultipleTankHandler inputFluids) { List fluids = new ArrayList<>(inputFluids.getFluidTanks()); if (inputInventory instanceof IMultipleTankHandler tankHandler) { diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 6d060b8e92f..a8f3f53ebb9 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -16,9 +16,7 @@ import gregtech.api.util.GTUtility; import gregtech.common.ConfigHolder; -import net.minecraft.item.ItemStack; import net.minecraft.util.Tuple; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; @@ -258,8 +256,8 @@ protected void trySearchNewRecipeDistinct() { @Override protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { - IItemHandlerModifiable items = gatherItems(getInputInventory(), getInputTank()); - IMultipleTankHandler fluids = gatherFluids(getInputInventory(), getInputTank()); + IItemHandlerModifiable items = gatherItems(getInputInventory(), getInputTank()); + IMultipleTankHandler fluids = gatherFluids(getInputInventory(), getInputTank()); return recipe.matches(shouldConsume, items, fluids); } diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index 67de30c1478..90554f6d12b 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -458,20 +458,6 @@ public int size() { }; } - public static void addHandlerToCollection(Collection collection, IItemHandler handler) { - for (int i = 0; i < handler.getSlots(); i++) { - var stack = handler.getStackInSlot(i); - if (!stack.isEmpty()) collection.add(stack); - } - } - - public static void addHandlerToCollection(Collection collection, IMultipleTankHandler handler) { - for (var entry : handler.getFluidTanks()) { - var fluid = entry.getFluid(); - if (fluid != null) collection.add(fluid); - } - } - public static NBTTagCompound getOrCreateNbtCompound(ItemStack stack) { NBTTagCompound compound = stack.getTagCompound(); if (compound == null) { From 84c84a1ba4309ad4cf8a13ad9e88797d5b3c8757 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 26 Jul 2024 21:00:57 -0700 Subject: [PATCH 057/112] try reduce list depth --- .../api/capability/impl/AbstractRecipeLogic.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 29077c510c5..6b586ccbf63 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -769,12 +769,16 @@ protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { protected IItemHandlerModifiable gatherItems(IItemHandlerModifiable inputInventory, IMultipleTankHandler inputFluids) { - List items = new ArrayList<>(); + List items = new ArrayList<>(); - items.add(inputInventory); + if (inputInventory instanceof ItemHandlerList list) { + items.addAll(list.getBackingHandlers()); + } else { + items.add(inputInventory); + } for (var tank : inputFluids.getFluidTanks()) { - if (tank.getDelegate() instanceof IItemHandlerModifiable handler) + if (tank.getDelegate() instanceof IItemHandler handler) items.add(handler); } From 87b079d4b8740b90e6d903dfb16c142f891a9f9d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:36:10 -0700 Subject: [PATCH 058/112] dual handler notifiable --- .../gregtech/api/capability/DualHandler.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 304247ca826..98fb027b7b9 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -2,6 +2,8 @@ import gregtech.api.capability.impl.FluidTankList; +import gregtech.api.metatileentity.MetaTileEntity; + import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; @@ -15,12 +17,14 @@ import java.util.ArrayList; import java.util.List; -public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler { +public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler, INotifiableHandler { @NotNull IItemHandlerModifiable itemDelegate; @NotNull IMultipleTankHandler fluidDelegate; + + List notifiableEntities = new ArrayList<>(); private final boolean isExport; public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, @@ -63,11 +67,13 @@ public ItemStack getStackInSlot(int slot) { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (!simulate) onContentsChanged(); return itemDelegate.insertItem(slot, stack, simulate); } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (!simulate) onContentsChanged(); return itemDelegate.extractItem(slot, amount, simulate); } @@ -79,6 +85,7 @@ public int getSlotLimit(int slot) { @Override public void setStackInSlot(int slot, ItemStack stack) { itemDelegate.setStackInSlot(slot, stack); + if (!stack.isEmpty()) onContentsChanged(); } @Override @@ -88,16 +95,19 @@ public IFluidTankProperties[] getTankProperties() { @Override public int fill(FluidStack resource, boolean doFill) { + if (doFill) onContentsChanged(); return fluidDelegate.fill(resource, doFill); } @Override public FluidStack drain(FluidStack resource, boolean doDrain) { + if (doDrain) onContentsChanged(); return fluidDelegate.drain(resource, doDrain); } @Override public FluidStack drain(int maxDrain, boolean doDrain) { + if (doDrain) onContentsChanged(); return fluidDelegate.drain(maxDrain, doDrain); } @@ -142,6 +152,25 @@ public List unwrap() { return list; } + public void onContentsChanged() { + for (MetaTileEntity metaTileEntity : notifiableEntities) { + if (metaTileEntity != null && metaTileEntity.isValid()) { + addToNotifiedList(metaTileEntity, this, isExport); + } + } + } + + @Override + public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { + if (metaTileEntity == null) return; + this.notifiableEntities.add(metaTileEntity); + } + + @Override + public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { + this.notifiableEntities.remove(metaTileEntity); + } + public static class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler { private static final FluidTankInfo NULL = new FluidTankInfo(null, 0); From 49f6887475b839e27bd03d3bd58d708e7014ff3a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:40:12 -0700 Subject: [PATCH 059/112] size for notifiables --- .../api/capability/INotifiableHandler.java | 13 ++++++++++++ ...etaTileEntityMultiblockNotifiablePart.java | 20 +++++++++---------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/api/capability/INotifiableHandler.java b/src/main/java/gregtech/api/capability/INotifiableHandler.java index 8dddb60482d..c9362912594 100644 --- a/src/main/java/gregtech/api/capability/INotifiableHandler.java +++ b/src/main/java/gregtech/api/capability/INotifiableHandler.java @@ -2,6 +2,9 @@ import gregtech.api.metatileentity.MetaTileEntity; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.items.IItemHandler; + /** * For Item and Fluid handlers capable of notifying entities when * their contents change @@ -30,4 +33,14 @@ default void addToNotifiedList(MetaTileEntity metaTileEntity, T handler, boo void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity); void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity); + + default int size() { + if (this instanceof IFluidTank) + return 1; + else if (this instanceof IItemHandler handler) + return handler.getSlots(); + else if (this instanceof IMultipleTankHandler tankHandler) + return tankHandler.getTanks(); + return 0; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java index 1d3d2be909f..2a97edf4fae 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java @@ -21,14 +21,14 @@ public MetaTileEntityMultiblockNotifiablePart(ResourceLocation metaTileEntityId, this.isExportHatch = isExportHatch; } - private NotifiableItemStackHandler getItemHandler() { - NotifiableItemStackHandler handler = null; - if (isExportHatch && getExportItems() instanceof NotifiableItemStackHandler) { - handler = (NotifiableItemStackHandler) getExportItems(); - } else if (!isExportHatch && getImportItems() instanceof NotifiableItemStackHandler) { - handler = (NotifiableItemStackHandler) getImportItems(); - } else if (getItemInventory() instanceof NotifiableItemStackHandler) { - handler = (NotifiableItemStackHandler) getItemInventory(); + private INotifiableHandler getItemHandler() { + INotifiableHandler handler = null; + if (isExportHatch && getExportItems() instanceof INotifiableHandler) { + handler = (INotifiableHandler) getExportItems(); + } else if (!isExportHatch && getImportItems() instanceof INotifiableHandler) { + handler = (INotifiableHandler) getImportItems(); + } else if (getItemInventory() instanceof INotifiableHandler) { + handler = (INotifiableHandler) getItemInventory(); } return handler; } @@ -46,8 +46,8 @@ private FluidTankList getFluidHandlers() { private List getPartHandlers() { List handlerList = new ArrayList<>(); - NotifiableItemStackHandler itemHandler = getItemHandler(); - if (itemHandler != null && itemHandler.getSlots() > 0) { + INotifiableHandler itemHandler = getItemHandler(); + if (itemHandler != null && itemHandler.size() > 0) { handlerList.add(itemHandler); } From 4fc47906a67cdf8c0abbfac49943757c5d271127 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:31:37 -0700 Subject: [PATCH 060/112] casually refactor notifiables spotless --- .../gregtech/api/capability/DualHandler.java | 1 - .../api/metatileentity/MetaTileEntity.java | 9 +++--- ...etaTileEntityMultiblockNotifiablePart.java | 32 +++++++++++-------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 98fb027b7b9..3c077c86143 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -1,7 +1,6 @@ package gregtech.api.capability; import gregtech.api.capability.impl.FluidTankList; - import gregtech.api.metatileentity.MetaTileEntity; import net.minecraft.item.ItemStack; diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 35d14ed6052..21f373638fb 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -12,7 +12,6 @@ import gregtech.api.capability.impl.FluidHandlerProxy; import gregtech.api.capability.impl.FluidTankList; import gregtech.api.capability.impl.ItemHandlerProxy; -import gregtech.api.capability.impl.NotifiableFluidTank; import gregtech.api.cover.Cover; import gregtech.api.cover.CoverHolder; import gregtech.api.cover.CoverRayTracer; @@ -398,7 +397,8 @@ public void addNotifiedInput(Object input) { if (!notifiedItemInputList.contains(input)) { this.notifiedItemInputList.add((IItemHandlerModifiable) input); } - } else if (input instanceof IFluidHandler) { + } + if (input instanceof IFluidHandler) { if (!notifiedFluidInputList.contains(input)) { this.notifiedFluidInputList.add((IFluidHandler) input); } @@ -410,9 +410,10 @@ public void addNotifiedOutput(Object output) { if (!notifiedItemOutputList.contains(output)) { this.notifiedItemOutputList.add((IItemHandlerModifiable) output); } - } else if (output instanceof NotifiableFluidTank) { + } + if (output instanceof IFluidHandler) { if (!notifiedFluidOutputList.contains(output)) { - this.notifiedFluidOutputList.add((NotifiableFluidTank) output); + this.notifiedFluidOutputList.add((IFluidHandler) output); } } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java index 2a97edf4fae..148f40613f0 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java @@ -3,7 +3,7 @@ import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.INotifiableHandler; import gregtech.api.capability.impl.FluidTankList; -import gregtech.api.capability.impl.NotifiableItemStackHandler; +import gregtech.api.capability.impl.ItemHandlerList; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; import net.minecraft.util.ResourceLocation; @@ -21,16 +21,21 @@ public MetaTileEntityMultiblockNotifiablePart(ResourceLocation metaTileEntityId, this.isExportHatch = isExportHatch; } - private INotifiableHandler getItemHandler() { - INotifiableHandler handler = null; - if (isExportHatch && getExportItems() instanceof INotifiableHandler) { - handler = (INotifiableHandler) getExportItems(); - } else if (!isExportHatch && getImportItems() instanceof INotifiableHandler) { - handler = (INotifiableHandler) getImportItems(); - } else if (getItemInventory() instanceof INotifiableHandler) { - handler = (INotifiableHandler) getItemInventory(); + private List getItemHandlers() { + List notifiables = new ArrayList<>(); + var mteHandler = isExportHatch ? getExportItems() : getImportItems(); + if (mteHandler instanceof INotifiableHandler notifiable) { + notifiables.add(notifiable); + } else if (mteHandler instanceof ItemHandlerList list) { + for (var handler : list.getBackingHandlers()) { + if (handler instanceof INotifiableHandler notifiable) + notifiables.add(notifiable); + } } - return handler; + if (getItemInventory() instanceof INotifiableHandler notifiable) { + notifiables.add(notifiable); + } + return notifiables; } private FluidTankList getFluidHandlers() { @@ -46,9 +51,10 @@ private FluidTankList getFluidHandlers() { private List getPartHandlers() { List handlerList = new ArrayList<>(); - INotifiableHandler itemHandler = getItemHandler(); - if (itemHandler != null && itemHandler.size() > 0) { - handlerList.add(itemHandler); + for (var notif : getItemHandlers()) { + if (notif.size() > 0) { + handlerList.add(notif); + } } if (this.fluidInventory.getTankProperties().length > 0) { From 80ad4c710f3d1d7a1b46c4ab6b777db43895d4bb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:25:23 -0700 Subject: [PATCH 061/112] fix issues with distinct consuming items --- .../api/capability/impl/AbstractRecipeLogic.java | 4 ++-- .../api/capability/impl/MultiblockRecipeLogic.java | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 6b586ccbf63..eec9fcecfbb 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -767,7 +767,7 @@ protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { return recipe.matches(shouldConsume, getInputInventory(), getInputTank()); } - protected IItemHandlerModifiable gatherItems(IItemHandlerModifiable inputInventory, + protected IItemHandlerModifiable gatherItems(IItemHandler inputInventory, IMultipleTankHandler inputFluids) { List items = new ArrayList<>(); @@ -785,7 +785,7 @@ protected IItemHandlerModifiable gatherItems(IItemHandlerModifiable inputInvento return new ItemHandlerList(items); } - protected IMultipleTankHandler gatherFluids(IItemHandlerModifiable inputInventory, + protected IMultipleTankHandler gatherFluids(IItemHandler inputInventory, IMultipleTankHandler inputFluids) { List fluids = new ArrayList<>(inputFluids.getFluidTanks()); diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index a8f3f53ebb9..67adba981b1 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -1,6 +1,7 @@ package gregtech.api.capability.impl; import gregtech.api.GTValues; +import gregtech.api.capability.IDistinctBusController; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.IMultiblockController; import gregtech.api.capability.IMultipleRecipeMaps; @@ -256,8 +257,13 @@ protected void trySearchNewRecipeDistinct() { @Override protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { - IItemHandlerModifiable items = gatherItems(getInputInventory(), getInputTank()); - IMultipleTankHandler fluids = gatherFluids(getInputInventory(), getInputTank()); + IItemHandler input = getInputInventory(); + if (metaTileEntity instanceof IDistinctBusController distinct && distinct.isDistinct()) { + input = currentDistinctInputBus; + } + + IItemHandlerModifiable items = gatherItems(input, getInputTank()); + IMultipleTankHandler fluids = gatherFluids(input, getInputTank()); return recipe.matches(shouldConsume, items, fluids); } From 1524846781721c0dec6f6b39cdb419d708739bdc Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 1 Aug 2024 19:52:22 -0700 Subject: [PATCH 062/112] address reviews --- .../gregtech/api/capability/DualHandler.java | 37 +++++++++++++------ .../impl/MultiblockRecipeLogic.java | 4 +- .../multiblock/MultiblockAbility.java | 2 +- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 3c077c86143..29db8f00d9c 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -2,6 +2,7 @@ import gregtech.api.capability.impl.FluidTankList; import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.ItemStackHashStrategy; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; @@ -18,6 +19,11 @@ public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler, INotifiableHandler { + private static final ItemStackHashStrategy strategy = ItemStackHashStrategy.builder() + .compareItem(true) + .compareDamage(true) + .compareTag(true) + .build(); @NotNull IItemHandlerModifiable itemDelegate; @NotNull @@ -66,14 +72,18 @@ public ItemStack getStackInSlot(int slot) { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (!simulate) onContentsChanged(); - return itemDelegate.insertItem(slot, stack, simulate); + var remainder = itemDelegate.insertItem(slot, stack, simulate); + if (!simulate && !strategy.equals(remainder, stack)) + onContentsChanged(); + return remainder; } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (!simulate) onContentsChanged(); - return itemDelegate.extractItem(slot, amount, simulate); + var extracted = itemDelegate.extractItem(slot, amount, simulate); + if (!simulate && !extracted.isEmpty()) + onContentsChanged(); + return extracted; } @Override @@ -83,8 +93,10 @@ public int getSlotLimit(int slot) { @Override public void setStackInSlot(int slot, ItemStack stack) { + var oldStack = itemDelegate.getStackInSlot(slot); itemDelegate.setStackInSlot(slot, stack); - if (!stack.isEmpty()) onContentsChanged(); + if (!strategy.equals(oldStack, stack)) + onContentsChanged(); } @Override @@ -94,20 +106,23 @@ public IFluidTankProperties[] getTankProperties() { @Override public int fill(FluidStack resource, boolean doFill) { - if (doFill) onContentsChanged(); - return fluidDelegate.fill(resource, doFill); + int filled = fluidDelegate.fill(resource, doFill); + if (doFill && filled > 0) onContentsChanged(); + return filled; } @Override public FluidStack drain(FluidStack resource, boolean doDrain) { - if (doDrain) onContentsChanged(); - return fluidDelegate.drain(resource, doDrain); + var drained = fluidDelegate.drain(resource, doDrain); + if (doDrain && drained != null) onContentsChanged(); + return drained; } @Override public FluidStack drain(int maxDrain, boolean doDrain) { - if (doDrain) onContentsChanged(); - return fluidDelegate.drain(maxDrain, doDrain); + var drained = fluidDelegate.drain(maxDrain, doDrain); + if (doDrain && drained != null) onContentsChanged(); + return drained; } @Override diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 67adba981b1..ed03db0c6f5 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -281,10 +281,12 @@ public void invalidateInputs() { } protected boolean checkPreviousRecipeDistinct(IItemHandlerModifiable previousBus) { + if (previousRecipe == null) return false; + IItemHandlerModifiable items = gatherItems(previousBus, getInputTank()); IMultipleTankHandler fluids = gatherFluids(previousBus, getInputTank()); - return previousRecipe != null && previousRecipe.matches(false, items, fluids); + return previousRecipe.matches(false, items, fluids); } protected boolean prepareRecipeDistinct(Recipe recipe) { diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index b5187267437..2859348bdec 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -98,6 +98,6 @@ public String toString() { @Override public boolean equals(Object obj) { return obj instanceof MultiblockAbilityother && - this.name.equals(other.toString()); + this.name.equals(other.name); } } From 0aae9eba38a73459b7e4b06cb8aa9625aea0dda5 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 16:02:18 -0700 Subject: [PATCH 063/112] store class for type checking add special list for instances --- .../multiblock/AbilityInstances.java | 37 +++++ .../multiblock/MultiblockAbility.java | 141 +++++++++++------- 2 files changed, 122 insertions(+), 56 deletions(-) create mode 100644 src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java new file mode 100644 index 00000000000..7960b80898b --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -0,0 +1,37 @@ +package gregtech.api.metatileentity.multiblock; + +import org.jetbrains.annotations.Nullable; + +import java.util.AbstractList; +import java.util.ArrayList; +import java.util.List; + +public class AbilityInstances extends AbstractList { + + private final MultiblockAbility key; + private final List instances = new ArrayList<>(); + + public AbilityInstances(MultiblockAbility key) { + this.key = key; + } + + @Override + public Object get(int index) { + return instances.get(index); + } + + public @Nullable R getAndCast(int index, MultiblockAbility key) { + return key.checkAndCast(get(index)); + } + + @Override + public boolean add(Object o) { + if (!key.checkType(o)) return false; + return instances.add(o); + } + + @Override + public int size() { + return instances.size(); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index 2859348bdec..745991654a5 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -8,6 +8,7 @@ import net.minecraftforge.items.IItemHandlerModifiable; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; @@ -20,61 +21,73 @@ public class MultiblockAbility { public static final Map> NAME_REGISTRY = new HashMap<>(); public static final Map, List> REGISTRY = new Object2ObjectOpenHashMap<>(); - public static final MultiblockAbility EXPORT_ITEMS = new MultiblockAbility<>( - "export_items"); - public static final MultiblockAbility IMPORT_ITEMS = new MultiblockAbility<>( - "import_items"); - - public static final MultiblockAbility EXPORT_FLUIDS = new MultiblockAbility<>("export_fluids"); - public static final MultiblockAbility IMPORT_FLUIDS = new MultiblockAbility<>("import_fluids"); - - public static final MultiblockAbility INPUT_ENERGY = new MultiblockAbility<>("input_energy"); - public static final MultiblockAbility OUTPUT_ENERGY = new MultiblockAbility<>("output_energy"); - - public static final MultiblockAbility SUBSTATION_INPUT_ENERGY = new MultiblockAbility<>( - "substation_input_energy"); - public static final MultiblockAbility SUBSTATION_OUTPUT_ENERGY = new MultiblockAbility<>( - "substation_output_energy"); - - public static final MultiblockAbility ROTOR_HOLDER = new MultiblockAbility<>("rotor_holder"); - - public static final MultiblockAbility PUMP_FLUID_HATCH = new MultiblockAbility<>("pump_fluid_hatch"); - - public static final MultiblockAbility STEAM = new MultiblockAbility<>("steam"); - public static final MultiblockAbility STEAM_IMPORT_ITEMS = new MultiblockAbility<>( - "steam_import_items"); - public static final MultiblockAbility STEAM_EXPORT_ITEMS = new MultiblockAbility<>( - "steam_export_items"); - - public static final MultiblockAbility MAINTENANCE_HATCH = new MultiblockAbility<>( - "maintenance_hatch"); - public static final MultiblockAbility MUFFLER_HATCH = new MultiblockAbility<>("muffler_hatch"); - - public static final MultiblockAbility MACHINE_HATCH = new MultiblockAbility<>( - "machine_hatch"); - - public static final MultiblockAbility TANK_VALVE = new MultiblockAbility<>("tank_valve"); - - public static final MultiblockAbility PASSTHROUGH_HATCH = new MultiblockAbility<>( - "passthrough_hatch"); - - public static final MultiblockAbility DATA_ACCESS_HATCH = new MultiblockAbility<>( - "data_access_hatch"); - public static final MultiblockAbility OPTICAL_DATA_RECEPTION = new MultiblockAbility<>( - "optical_data_reception"); - public static final MultiblockAbility OPTICAL_DATA_TRANSMISSION = new MultiblockAbility<>( - "optical_data_transmission"); - public static final MultiblockAbility INPUT_LASER = new MultiblockAbility<>("input_laser"); - public static final MultiblockAbility OUTPUT_LASER = new MultiblockAbility<>("output_laser"); - - public static final MultiblockAbility COMPUTATION_DATA_RECEPTION = new MultiblockAbility<>( - "computation_data_reception"); - public static final MultiblockAbility COMPUTATION_DATA_TRANSMISSION = new MultiblockAbility<>( - "computation_data_transmission"); - - public static final MultiblockAbility HPCA_COMPONENT = new MultiblockAbility<>( - "hpca_component"); - public static final MultiblockAbility OBJECT_HOLDER = new MultiblockAbility<>("object_holder"); + public static final MultiblockAbility EXPORT_ITEMS = ability( + "export_items", IItemHandlerModifiable.class); + public static final MultiblockAbility IMPORT_ITEMS = ability( + "import_items", IItemHandlerModifiable.class); + + public static final MultiblockAbility EXPORT_FLUIDS = ability( + "export_fluids", IFluidTank.class); + public static final MultiblockAbility IMPORT_FLUIDS = ability( + "import_fluids", IFluidTank.class); + + public static final MultiblockAbility INPUT_ENERGY = ability( + "input_energy", IEnergyContainer.class); + public static final MultiblockAbility OUTPUT_ENERGY = ability( + "output_energy", IEnergyContainer.class); + + public static final MultiblockAbility SUBSTATION_INPUT_ENERGY = ability( + "substation_input_energy", IEnergyContainer.class); + public static final MultiblockAbility SUBSTATION_OUTPUT_ENERGY = ability( + "substation_output_energy", IEnergyContainer.class); + + public static final MultiblockAbility ROTOR_HOLDER = ability( + "rotor_holder", IRotorHolder.class); + + public static final MultiblockAbility PUMP_FLUID_HATCH = ability( + "pump_fluid_hatch", IFluidTank.class); + + public static final MultiblockAbility STEAM = new MultiblockAbility<>( + "steam", IFluidTank.class); + public static final MultiblockAbility STEAM_IMPORT_ITEMS = ability( + "steam_import_items", IItemHandlerModifiable.class); + public static final MultiblockAbility STEAM_EXPORT_ITEMS = ability( + "steam_export_items", IItemHandlerModifiable.class); + + public static final MultiblockAbility MAINTENANCE_HATCH = ability( + "maintenance_hatch", IMaintenanceHatch.class); + public static final MultiblockAbility MUFFLER_HATCH = ability( + "muffler_hatch", IMufflerHatch.class); + + public static final MultiblockAbility MACHINE_HATCH = ability( + "machine_hatch", IItemHandlerModifiable.class); + + public static final MultiblockAbility TANK_VALVE = ability( + "tank_valve", IFluidHandler.class); + + public static final MultiblockAbility PASSTHROUGH_HATCH = ability( + "passthrough_hatch", IPassthroughHatch.class); + + public static final MultiblockAbility DATA_ACCESS_HATCH = ability( + "data_access_hatch", IDataAccessHatch.class); + public static final MultiblockAbility OPTICAL_DATA_RECEPTION = ability( + "optical_data_reception", IOpticalDataAccessHatch.class); + public static final MultiblockAbility OPTICAL_DATA_TRANSMISSION = ability( + "optical_data_transmission", IOpticalDataAccessHatch.class); + public static final MultiblockAbility INPUT_LASER = ability( + "input_laser", ILaserContainer.class); + public static final MultiblockAbility OUTPUT_LASER = ability( + "output_laser", ILaserContainer.class); + + public static final MultiblockAbility COMPUTATION_DATA_RECEPTION = ability( + "computation_data_reception", IOpticalComputationHatch.class); + public static final MultiblockAbility COMPUTATION_DATA_TRANSMISSION = ability( + "computation_data_transmission", IOpticalComputationHatch.class); + + public static final MultiblockAbility HPCA_COMPONENT = ability( + "hpca_component", IHPCAComponentHatch.class); + public static final MultiblockAbility OBJECT_HOLDER = ability( + "object_holder", IObjectHolder.class); public static void registerMultiblockAbility(MultiblockAbility ability, MetaTileEntity part) { if (!REGISTRY.containsKey(ability)) { @@ -83,10 +96,16 @@ public static void registerMultiblockAbility(MultiblockAbility ability, MetaT REGISTRY.get(ability).add(part); } + public static MultiblockAbility ability(String name, Class clazz) { + return new MultiblockAbility<>(name, clazz); + } + private final String name; + private final Class clazz; - public MultiblockAbility(String name) { + public MultiblockAbility(String name, Class clazz) { this.name = name.toLowerCase(); + this.clazz = clazz; NAME_REGISTRY.put(this.name, this); } @@ -100,4 +119,14 @@ public boolean equals(Object obj) { return obj instanceof MultiblockAbilityother && this.name.equals(other.name); } + + public boolean checkType(Object o) { + return clazz.isAssignableFrom(o.getClass()); + } + + public @Nullable T checkAndCast(Object o) { + if (checkType(o)) + return clazz.cast(o); + else return null; + } } From 85a961e22172ad132e23c291ba5beba69661636c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 16:14:41 -0700 Subject: [PATCH 064/112] utilize new list --- .../multiblock/AbilityInstances.java | 27 +++++++++++++++++++ .../multiblock/MultiblockControllerBase.java | 11 ++++---- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 7960b80898b..7c66053e8af 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -1,5 +1,6 @@ package gregtech.api.metatileentity.multiblock; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.AbstractList; @@ -8,6 +9,23 @@ public class AbilityInstances extends AbstractList { + public static final AbilityInstances EMPTY = new AbilityInstances(null) { + + @Override + public boolean isKey(MultiblockAbility key) { + return false; + } + + @Override + public boolean add(Object o) { + return false; + } + + @Override + public Object get(int index) { + return null; + } + }; private final MultiblockAbility key; private final List instances = new ArrayList<>(); @@ -20,10 +38,19 @@ public Object get(int index) { return instances.get(index); } + public boolean isKey(MultiblockAbility key) { + return this.key.equals(key); + } + public @Nullable R getAndCast(int index, MultiblockAbility key) { return key.checkAndCast(get(index)); } + @SuppressWarnings("unchecked") + public @NotNull List cast() { + return (List) this; + } + @Override public boolean add(Object o) { if (!key.checkType(o)) return false; diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index ba0dfc1f5bf..45fa03841b1 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -80,7 +80,7 @@ public abstract class MultiblockControllerBase extends MetaTileEntity implements @Nullable public BlockPattern structurePattern; - private final Map, List> multiblockAbilities = new HashMap<>(); + private final Map, AbilityInstances> multiblockAbilities = new HashMap<>(); private final List multiblockParts = new ArrayList<>(); private boolean structureFormed; @@ -350,7 +350,7 @@ public void checkStructurePattern() { } this.setFlipped(context.neededFlip()); parts.sort(Comparator.comparing(it -> multiblockPartSorter().apply(((MetaTileEntity) it).getPos()))); - Map, List> abilities = new HashMap<>(); + Map, AbilityInstances> abilities = new HashMap<>(); for (IMultiblockPart part : parts) { if (part instanceof IMultiblockAbilityPart abilityPart) { List abilityList = abilityPart.getAbilities(); @@ -358,8 +358,8 @@ public void checkStructurePattern() { if (!checkAbilityPart(ability, ((MetaTileEntity) abilityPart).getPos())) continue; - List abilityInstancesList = abilities.computeIfAbsent(ability, - k -> new ArrayList<>()); + AbilityInstances abilityInstancesList = abilities.computeIfAbsent(ability, + AbilityInstances::new); abilityPart.registerAbilities(ability, abilityInstancesList); } } @@ -407,9 +407,8 @@ public List getAbilities(MultiblockAbility ability) { return Collections.unmodifiableList(getAbilitiesModifiable(ability)); } - @SuppressWarnings("unchecked") public List getAbilitiesModifiable(MultiblockAbility ability) { - return (List) multiblockAbilities.getOrDefault(ability, Collections.emptyList()); + return multiblockAbilities.getOrDefault(ability, AbilityInstances.EMPTY).cast(); } public List getMultiblockParts() { From 063071b94ec8bdfeb52ea81f5e39cb8be3b4f757 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 16:25:47 -0700 Subject: [PATCH 065/112] update registration to new list --- .../impl/DistillationTowerLogicHandler.java | 9 +++++---- .../multiblock/IMultiblockAbilityPart.java | 2 +- .../multiblock/MultiblockControllerBase.java | 4 ++-- .../electric/MetaTileEntityDiode.java | 7 +++---- .../electric/MetaTileEntityHull.java | 7 +++---- .../multi/MetaTileEntityPumpHatch.java | 7 +++---- .../multi/MetaTileEntityTankValve.java | 7 +++---- .../MetaTileEntityAutoMaintenanceHatch.java | 7 +++---- .../MetaTileEntityComputationHatch.java | 7 +++---- .../MetaTileEntityDataAccessHatch.java | 7 +++---- .../multiblockpart/MetaTileEntityEnergyHatch.java | 7 +++---- .../multiblockpart/MetaTileEntityFluidHatch.java | 12 ++++++------ .../multi/multiblockpart/MetaTileEntityItemBus.java | 9 ++++----- .../multiblockpart/MetaTileEntityLaserHatch.java | 7 +++---- .../multiblockpart/MetaTileEntityMachineHatch.java | 7 +++---- .../MetaTileEntityMaintenanceHatch.java | 11 +++-------- .../multiblockpart/MetaTileEntityMufflerHatch.java | 10 +++------- .../MetaTileEntityMultiFluidHatch.java | 7 +++---- .../multiblockpart/MetaTileEntityObjectHolder.java | 7 +++---- .../MetaTileEntityOpticalDataHatch.java | 7 +++---- .../MetaTileEntityPassthroughHatchFluid.java | 7 +++---- .../MetaTileEntityPassthroughHatchItem.java | 7 +++---- .../multiblockpart/MetaTileEntityReservoirHatch.java | 7 +++---- .../multiblockpart/MetaTileEntityRotorHolder.java | 7 +++---- .../appeng/MetaTileEntityMEInputBus.java | 7 +++---- .../appeng/MetaTileEntityMEInputHatch.java | 7 +++---- .../appeng/MetaTileEntityMEOutputBus.java | 11 +++-------- .../appeng/MetaTileEntityMEOutputHatch.java | 11 +++-------- .../hpca/MetaTileEntityHPCAComponent.java | 8 ++++---- .../multiblockpart/MetaTileEntitySteamHatch.java | 7 +++---- .../multiblockpart/MetaTileEntitySteamItemBus.java | 7 +++---- 31 files changed, 97 insertions(+), 137 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java index cd8a6108bc7..0f5ad3e1bc6 100644 --- a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java +++ b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java @@ -2,6 +2,7 @@ import gregtech.api.capability.IDistillationTower; import gregtech.api.capability.IMultipleTankHandler; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.pattern.BlockPattern; @@ -92,12 +93,12 @@ public void determineOrderedFluidOutputs() { } MetaTileEntityMultiblockPart part = fluidExportParts.get(exportIndex); if (part.getPos().getY() == y) { - List hatchTanks = new ObjectArrayList<>(); + AbilityInstances hatchTanks = new AbilityInstances(MultiblockAbility.EXPORT_FLUIDS); // noinspection unchecked ((IMultiblockAbilityPart) part) - .registerAbilities(MultiblockAbility.EXPORT_FLUIDS, hatchTanks); - orderedHandlerList.add(new FluidTankList(false, hatchTanks)); - tankList.addAll(hatchTanks); + .registerAbilities(hatchTanks); + orderedHandlerList.add(new FluidTankList(false, hatchTanks.cast())); + tankList.addAll(hatchTanks.cast()); exportIndex++; } else if (part.getPos().getY() > y) { orderedHandlerList.add(FakeTank.INSTANCE); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index 140e286acda..8e019d5524d 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -13,5 +13,5 @@ public interface IMultiblockAbilityPart extends IMultiblockPart { return Collections.singletonList(getAbility()); } - void registerAbilities(@NotNull MultiblockAbility key, @NotNull List abilities); + void registerAbilities(@NotNull AbilityInstances abilityInstances); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index 45fa03841b1..593c55db8da 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -358,9 +358,9 @@ public void checkStructurePattern() { if (!checkAbilityPart(ability, ((MetaTileEntity) abilityPart).getPos())) continue; - AbilityInstances abilityInstancesList = abilities.computeIfAbsent(ability, + AbilityInstances instances = abilities.computeIfAbsent(ability, AbilityInstances::new); - abilityPart.registerAbilities(ability, abilityInstancesList); + abilityPart.registerAbilities(instances); } } } diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index abdf01f25ea..de11fab72e4 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -9,6 +9,7 @@ import gregtech.api.metatileentity.MTETrait; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.IPassthroughHatch; import gregtech.api.metatileentity.multiblock.MultiblockAbility; @@ -182,10 +183,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java index e32479f0466..bc194d85474 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityHull.java @@ -5,6 +5,7 @@ import gregtech.api.capability.impl.EnergyContainerHandler; import gregtech.api.metatileentity.MetaTileEntityHolder; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.IPassthroughHatch; import gregtech.api.metatileentity.multiblock.MultiblockAbility; @@ -110,10 +111,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java index 37084fb6c1e..a17b955729c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java @@ -5,6 +5,7 @@ import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.mui.GTGuiTextures; @@ -113,10 +114,8 @@ public ICubeRenderer getBaseTexture() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(exportFluids.getTankAt(0)); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(exportFluids.getTankAt(0)); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java index 28db2c710d8..231a19fee37 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java @@ -4,6 +4,7 @@ import gregtech.api.capability.impl.FluidTankList; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -122,10 +123,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this.getImportFluids()); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this.getImportFluids()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java index 59cab3b3c2e..1159bbb558c 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityAutoMaintenanceHatch.java @@ -3,6 +3,7 @@ import gregtech.api.capability.IMaintenanceHatch; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.client.renderer.texture.Textures; @@ -105,10 +106,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java index 155cdef3e8f..61c7e343392 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityComputationHatch.java @@ -6,6 +6,7 @@ import gregtech.api.capability.IOpticalComputationProvider; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.util.GTLog; @@ -151,10 +152,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java index 12ece6a08ca..ee036b768a2 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityDataAccessHatch.java @@ -9,6 +9,7 @@ import gregtech.api.metatileentity.IDataInfoProvider; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -213,10 +214,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java index b6a94c03747..deb3dd38bf8 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java @@ -8,6 +8,7 @@ import gregtech.api.capability.impl.EnergyContainerHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.util.GTUtility; @@ -117,10 +118,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(energyContainer); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(energyContainer); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 8a355f26e0c..4d3e7271353 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -14,6 +14,7 @@ import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -254,12 +255,11 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities(@NotNull MultiblockAbility key, - @NotNull List abilities) { - if (key.equals(MultiblockAbility.EXPORT_FLUIDS)) { - abilities.add(this.fluidTank); - } else if (key.equals(MultiblockAbility.IMPORT_FLUIDS)) { - abilities.addAll(this.dualHandler.unwrap()); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + if (abilityInstances.isKey(MultiblockAbility.EXPORT_FLUIDS)) { + abilityInstances.add(this.fluidTank); + } else if (abilityInstances.isKey(MultiblockAbility.IMPORT_FLUIDS)) { + abilityInstances.addAll(this.dualHandler.unwrap()); } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java index e2e9d78b99f..16a9a8bcf6d 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityItemBus.java @@ -8,6 +8,7 @@ import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -255,13 +256,11 @@ public void receiveCustomData(int dataId, PacketBuffer buf) { } @Override - public void registerAbilities( - @NotNull MultiblockAbility key, - @NotNull List abilities) { + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { if (this.hasGhostCircuitInventory() && this.actualImportItems != null) { - abilities.add(isExportHatch ? this.exportItems : this.actualImportItems); + abilityInstances.add(isExportHatch ? this.exportItems : this.actualImportItems); } else { - abilities.add(isExportHatch ? this.exportItems : this.importItems); + abilityInstances.add(isExportHatch ? this.exportItems : this.importItems); } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java index 2241f9ecefe..38e1dbdcd31 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityLaserHatch.java @@ -6,6 +6,7 @@ import gregtech.api.metatileentity.IDataInfoProvider; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.client.renderer.texture.Textures; @@ -71,10 +72,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this.buffer); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this.buffer); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java index 0ca43ececbe..ba324cf1dff 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMachineHatch.java @@ -4,6 +4,7 @@ import gregtech.api.metatileentity.IMachineHatchMultiblock; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -58,10 +59,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(machineHandler); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(machineHandler); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java index a416ba05be9..8f6a37b55c2 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMaintenanceHatch.java @@ -14,10 +14,7 @@ import gregtech.api.items.toolitem.ToolHelper; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; -import gregtech.api.metatileentity.multiblock.IMaintenance; -import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; -import gregtech.api.metatileentity.multiblock.MultiblockAbility; -import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; +import gregtech.api.metatileentity.multiblock.*; import gregtech.api.util.GTUtility; import gregtech.client.renderer.texture.Textures; import gregtech.client.utils.TooltipHelper; @@ -516,10 +513,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java index 857e322d7f2..ba68304173f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java @@ -6,9 +6,7 @@ import gregtech.api.metatileentity.ITieredMetaTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; -import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; -import gregtech.api.metatileentity.multiblock.MultiblockAbility; -import gregtech.api.metatileentity.multiblock.MultiblockWithDisplayBase; +import gregtech.api.metatileentity.multiblock.*; import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; import gregtech.api.util.GTUtility; @@ -146,10 +144,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java index e25dedf5d3f..14aa25114cb 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java @@ -7,6 +7,7 @@ import gregtech.api.capability.impl.NotifiableFluidTank; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.mui.GTGuis; @@ -201,10 +202,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.addAll(fluidTankList.getFluidTanks()); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.addAll(fluidTankList.getFluidTanks()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java index 86ad494d0d2..568e897c850 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityObjectHolder.java @@ -9,6 +9,7 @@ import gregtech.api.items.metaitem.stats.IItemBehaviour; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -115,10 +116,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java index 251613e4b2d..204dfd6c9c6 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityOpticalDataHatch.java @@ -6,6 +6,7 @@ import gregtech.api.capability.IOpticalDataAccessHatch; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -128,10 +129,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index 9726106670b..b521d59aa31 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -9,6 +9,7 @@ import gregtech.api.capability.impl.NotifiableItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.IPassthroughHatch; import gregtech.api.metatileentity.multiblock.MultiblockAbility; @@ -209,10 +210,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index 1f55e509785..eff69d051a8 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -8,6 +8,7 @@ import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.IPassthroughHatch; import gregtech.api.metatileentity.multiblock.MultiblockAbility; @@ -221,10 +222,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @NotNull diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index 659db197d62..42ec8a56862 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -6,6 +6,7 @@ import gregtech.api.capability.impl.NotifiableFluidTank; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.mui.GTGuiTextures; @@ -119,10 +120,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(fluidTank); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(fluidTank); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java index c8f2403113d..9401664249d 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityRotorHolder.java @@ -8,6 +8,7 @@ import gregtech.api.metatileentity.ITieredMetaTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.mui.GTGuiTextures; @@ -165,10 +166,8 @@ void setRotorSpinning(boolean spinning) { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java index c97cf65f551..23f1ab2899b 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBus.java @@ -15,6 +15,7 @@ import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -330,10 +331,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this.actualImportItems); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this.actualImportItems); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java index 2eb5c4cf95f..120b25e8827 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputHatch.java @@ -10,6 +10,7 @@ import gregtech.api.gui.widgets.ImageWidget; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.client.renderer.texture.Textures; @@ -270,10 +271,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.addAll(Arrays.asList(this.getAEFluidHandler().getInventory())); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.addAll(Arrays.asList(this.getAEFluidHandler().getInventory())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java index 0f48a189228..de44e64b339 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputBus.java @@ -8,10 +8,7 @@ import gregtech.api.gui.ModularUI; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; -import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; -import gregtech.api.metatileentity.multiblock.MultiblockAbility; -import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; -import gregtech.api.metatileentity.multiblock.MultiblockWithDisplayBase; +import gregtech.api.metatileentity.multiblock.*; import gregtech.client.renderer.texture.Textures; import gregtech.common.gui.widget.appeng.AEItemGridWidget; import gregtech.common.inventory.appeng.SerializableItemList; @@ -196,10 +193,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(new InaccessibleInfiniteSlot(this, this.internalBuffer, this.getController())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java index 5c3505c26ea..77ba57bf656 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEOutputHatch.java @@ -8,10 +8,7 @@ import gregtech.api.gui.ModularUI; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; -import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; -import gregtech.api.metatileentity.multiblock.MultiblockAbility; -import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; -import gregtech.api.metatileentity.multiblock.MultiblockWithDisplayBase; +import gregtech.api.metatileentity.multiblock.*; import gregtech.client.renderer.texture.Textures; import gregtech.common.gui.widget.appeng.AEFluidGridWidget; import gregtech.common.inventory.appeng.SerializableFluidList; @@ -198,10 +195,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(new InaccessibleInfiniteTank(this, this.internalBuffer, this.getController())); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java index 027105c0e47..7f0bf1830ee 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java @@ -5,6 +5,8 @@ import gregtech.api.capability.IHPCAComponentHatch; import gregtech.api.capability.IHPCAComputationProvider; import gregtech.api.capability.IHPCACoolantProvider; +import gregtech.api.gui.ModularUI; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.unification.material.Materials; @@ -67,10 +69,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(this); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(this); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java index d3c686d74a2..bacb525a3aa 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamHatch.java @@ -7,6 +7,7 @@ import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; @@ -129,10 +130,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.addAll(this.importFluids.getFluidTanks()); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.addAll(this.importFluids.getFluidTanks()); } @Override diff --git a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java index 68cb9c126b0..633ca974bac 100644 --- a/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java +++ b/src/main/java/gregtech/common/metatileentities/steam/multiblockpart/MetaTileEntitySteamItemBus.java @@ -2,6 +2,7 @@ import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; import gregtech.api.mui.GTGuiTheme; @@ -56,10 +57,8 @@ public MultiblockAbility getAbility() { } @Override - public void registerAbilities( - @NotNull MultiblockAbility multiblockAbility, - @NotNull List abilities) { - abilities.add(isExportHatch ? this.exportItems : this.importItems); + public void registerAbilities(@NotNull AbilityInstances abilityInstances) { + abilityInstances.add(isExportHatch ? this.exportItems : this.importItems); } // Override base texture to have a bus with 4 slots, but ULV textures From 17e39adb04c686a71631d09996cf8c7632632c14 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 16:34:30 -0700 Subject: [PATCH 066/112] no need for dual handler here anymore --- .../MetaTileEntityFluidHatch.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 4d3e7271353..7af02193ab5 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -60,6 +60,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collections; import java.util.List; public class MetaTileEntityFluidHatch extends MetaTileEntityMultiblockNotifiablePart @@ -72,7 +74,6 @@ public class MetaTileEntityFluidHatch extends MetaTileEntityMultiblockNotifiable protected final HatchFluidTank fluidTank; protected boolean workingEnabled; private GhostCircuitItemStackHandler circuitInventory; - private DualHandler dualHandler; // export hatch-only fields protected boolean locked; @@ -87,7 +88,6 @@ public MetaTileEntityFluidHatch(ResourceLocation metaTileEntityId, int tier, boo if (this.hasGhostCircuitInventory()) { this.circuitInventory = new GhostCircuitItemStackHandler(this); this.circuitInventory.addNotifiableMetaTileEntity(this); - this.dualHandler = new DualHandler(this.circuitInventory, this.importFluids, isExportHatch); } } @@ -254,12 +254,20 @@ public MultiblockAbility getAbility() { return isExportHatch ? MultiblockAbility.EXPORT_FLUIDS : MultiblockAbility.IMPORT_FLUIDS; } + @Override + public @NotNull List> getAbilities() { + return isExportHatch ? + Collections.singletonList(MultiblockAbility.EXPORT_FLUIDS) : + Arrays.asList(MultiblockAbility.IMPORT_FLUIDS, MultiblockAbility.IMPORT_ITEMS); + } + @Override public void registerAbilities(@NotNull AbilityInstances abilityInstances) { - if (abilityInstances.isKey(MultiblockAbility.EXPORT_FLUIDS)) { + if (abilityInstances.isKey(MultiblockAbility.EXPORT_FLUIDS) || + abilityInstances.isKey(MultiblockAbility.IMPORT_FLUIDS)) { abilityInstances.add(this.fluidTank); - } else if (abilityInstances.isKey(MultiblockAbility.IMPORT_FLUIDS)) { - abilityInstances.addAll(this.dualHandler.unwrap()); + } else if (abilityInstances.isKey(MultiblockAbility.IMPORT_ITEMS)) { + abilityInstances.add(this.circuitInventory); } } From 5b4dd985354831f822746a38997cfc99edd522cb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 16:42:24 -0700 Subject: [PATCH 067/112] mark ability as nullable and add default --- .../metatileentity/multiblock/IMultiblockAbilityPart.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index 8e019d5524d..8b501b6f634 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -1,16 +1,19 @@ package gregtech.api.metatileentity.multiblock; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; public interface IMultiblockAbilityPart extends IMultiblockPart { - MultiblockAbility getAbility(); + default @Nullable MultiblockAbility getAbility() { + return null; + } default @NotNull List> getAbilities() { - return Collections.singletonList(getAbility()); + return getAbility() == null ? Collections.emptyList() : Collections.singletonList(getAbility()); } void registerAbilities(@NotNull AbilityInstances abilityInstances); From 61fde03cbe33ae6a73101beaae2eac7b22bbf9ef Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 16:56:13 -0700 Subject: [PATCH 068/112] changes to recipe logic are no longer necessary spotless --- .../capability/impl/AbstractRecipeLogic.java | 43 +------------------ .../impl/MultiblockRecipeLogic.java | 35 +-------------- .../java/gregtech/api/recipes/RecipeMap.java | 2 +- .../MetaTileEntityFluidHatch.java | 1 - 4 files changed, 4 insertions(+), 77 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index eec9fcecfbb..23018a736ca 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -36,7 +36,6 @@ import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.MustBeInvokedByOverriders; @@ -428,7 +427,7 @@ protected void trySearchNewRecipe() { protected boolean checkPreviousRecipe() { if (this.previousRecipe == null) return false; if (this.previousRecipe.getEUt() > this.getMaxVoltage()) return false; - return recipeMatch(this.previousRecipe, false); + return this.previousRecipe.matches(false, getInputInventory(), getInputTank()); } /** @@ -723,7 +722,7 @@ protected static boolean areItemStacksEqual(@NotNull ItemStack stackA, @NotNull if (checkOutputSpaceItems(recipe, getOutputInventory()) && checkOutputSpaceFluids(recipe, getOutputTank())) { this.isOutputsFull = false; - if (recipeMatch(recipe, true)) { + if (recipe.matches(true, importInventory, importFluids)) { this.metaTileEntity.addNotifiedInput(importInventory); return recipe; } @@ -763,44 +762,6 @@ protected boolean checkOutputSpaceFluids(@NotNull Recipe recipe, @NotNull IMulti return true; } - protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { - return recipe.matches(shouldConsume, getInputInventory(), getInputTank()); - } - - protected IItemHandlerModifiable gatherItems(IItemHandler inputInventory, - IMultipleTankHandler inputFluids) { - List items = new ArrayList<>(); - - if (inputInventory instanceof ItemHandlerList list) { - items.addAll(list.getBackingHandlers()); - } else { - items.add(inputInventory); - } - - for (var tank : inputFluids.getFluidTanks()) { - if (tank.getDelegate() instanceof IItemHandler handler) - items.add(handler); - } - - return new ItemHandlerList(items); - } - - protected IMultipleTankHandler gatherFluids(IItemHandler inputInventory, - IMultipleTankHandler inputFluids) { - List fluids = new ArrayList<>(inputFluids.getFluidTanks()); - - if (inputInventory instanceof IMultipleTankHandler tankHandler) { - fluids.addAll(tankHandler.getFluidTanks()); - } else if (inputInventory instanceof ItemHandlerList handlerList) { - for (IItemHandler handler : handlerList.getBackingHandlers()) { - if (handler instanceof IMultipleTankHandler tankHandler) - fluids.addAll(tankHandler.getFluidTanks()); - } - } - - return new FluidTankList(inputFluids.allowSameFluidFill(), fluids); - } - /** * Overclock a recipe beyond a duration of 1 tick using parallelization. * diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index ed03db0c6f5..728ed138cc9 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -1,7 +1,6 @@ package gregtech.api.capability.impl; import gregtech.api.GTValues; -import gregtech.api.capability.IDistinctBusController; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.IMultiblockController; import gregtech.api.capability.IMultipleRecipeMaps; @@ -241,33 +240,6 @@ protected void trySearchNewRecipeDistinct() { } } - @Override - protected @Nullable Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, - IMultipleTankHandler fluidInputs) { - RecipeMap map = getRecipeMap(); - if (map == null || !isRecipeMapValid(map)) { - return null; - } - - IItemHandlerModifiable items = gatherItems(inputs, fluidInputs); - IMultipleTankHandler fluids = gatherFluids(inputs, fluidInputs); - - return map.findRecipe(maxVoltage, items, fluids); - } - - @Override - protected boolean recipeMatch(Recipe recipe, boolean shouldConsume) { - IItemHandler input = getInputInventory(); - if (metaTileEntity instanceof IDistinctBusController distinct && distinct.isDistinct()) { - input = currentDistinctInputBus; - } - - IItemHandlerModifiable items = gatherItems(input, getInputTank()); - IMultipleTankHandler fluids = gatherFluids(input, getInputTank()); - - return recipe.matches(shouldConsume, items, fluids); - } - @Override public void invalidateInputs() { MultiblockWithDisplayBase controller = (MultiblockWithDisplayBase) metaTileEntity; @@ -281,12 +253,7 @@ public void invalidateInputs() { } protected boolean checkPreviousRecipeDistinct(IItemHandlerModifiable previousBus) { - if (previousRecipe == null) return false; - - IItemHandlerModifiable items = gatherItems(previousBus, getInputTank()); - IMultipleTankHandler fluids = gatherFluids(previousBus, getInputTank()); - - return previousRecipe.matches(false, items, fluids); + return previousRecipe != null && previousRecipe.matches(false, previousBus, getInputTank()); } protected boolean prepareRecipeDistinct(Recipe recipe) { diff --git a/src/main/java/gregtech/api/recipes/RecipeMap.java b/src/main/java/gregtech/api/recipes/RecipeMap.java index f463f34744e..a2c2ef7b1f4 100644 --- a/src/main/java/gregtech/api/recipes/RecipeMap.java +++ b/src/main/java/gregtech/api/recipes/RecipeMap.java @@ -534,7 +534,7 @@ amount, getMaxFluidOutputs()), @Nullable public Recipe findRecipe(long voltage, IItemHandlerModifiable inputs, IMultipleTankHandler fluidInputs) { - return findRecipe(voltage, GTUtility.itemHandlerToList(inputs), GTUtility.fluidHandlerToList(fluidInputs)); + return this.findRecipe(voltage, GTUtility.itemHandlerToList(inputs), GTUtility.fluidHandlerToList(fluidInputs)); } /** diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 7af02193ab5..fdd6221c5ab 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -1,6 +1,5 @@ package gregtech.common.metatileentities.multi.multiblockpart; -import gregtech.api.capability.DualHandler; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; From 32efe1f1df93b5c5b12c65241ed093f90da4be4d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 17:05:08 -0700 Subject: [PATCH 069/112] override more methods --- .../multiblock/AbilityInstances.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 7c66053e8af..1eaba5cb0f0 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -57,6 +57,23 @@ public boolean add(Object o) { return instances.add(o); } + @Override + public void add(int index, Object element) { + if (key.checkType(element)) + instances.add(index, element); + } + + @Override + public Object set(int index, Object element) { + if (!key.checkType(element)) return null; + return instances.set(index, element); + } + + @Override + public Object remove(int index) { + return instances.remove(index); + } + @Override public int size() { return instances.size(); From 06a20a7572f3c8dcaad6f6402a7f9c56718999d3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 17:21:44 -0700 Subject: [PATCH 070/112] simplify DualHandler and improve notifiability --- .../gregtech/api/capability/DualHandler.java | 74 +++++++++++-------- 1 file changed, 44 insertions(+), 30 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 29db8f00d9c..0699a51ebb7 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -29,6 +29,8 @@ public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler @NotNull IMultipleTankHandler fluidDelegate; + private final List unwrapped; + List notifiableEntities = new ArrayList<>(); private final boolean isExport; @@ -38,14 +40,23 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, this.itemDelegate = itemDelegate; this.fluidDelegate = fluidDelegate; this.isExport = isExport; + int items = itemDelegate.getSlots(); + int fluids = fluidDelegate.getTanks(); + int max = Math.max(items, fluids); + + List list = new ArrayList<>(max); + for (int i = 0; i < max; i++) { + list.add(new DualEntry(this, + i < items ? i : -1, + i < fluids ? i : -1)); + } + this.unwrapped = list; } public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, @NotNull IFluidTank fluidTank, boolean isExport) { - this.itemDelegate = itemDelegate; - this.fluidDelegate = new FluidTankList(false, fluidTank); - this.isExport = isExport; + this(itemDelegate, new FluidTankList(false, fluidTank), isExport); } public IItemHandlerModifiable getItemDelegate() { @@ -146,24 +157,7 @@ public boolean allowSameFluidFill() { } public List unwrap() { - int items = itemDelegate.getSlots(); - int fluids = fluidDelegate.getTanks(); - int max = Math.max(items, fluids); - - List list = new ArrayList<>(max); - for (int i = 0; i < max; i++) { - int itemIndex = -1; - if (i < items) - itemIndex = i; - - int fluidIndex = -1; - if (i < fluids) - fluidIndex = i; - - list.add(new DualEntry(this, itemIndex, fluidIndex)); - } - - return list; + return this.unwrapped; } public void onContentsChanged() { @@ -185,7 +179,7 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.notifiableEntities.remove(metaTileEntity); } - public static class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler { + public class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler, INotifiableHandler { private static final FluidTankInfo NULL = new FluidTankInfo(null, 0); @@ -200,7 +194,7 @@ public DualEntry(DualHandler delegate, int itemIndex, int fluidIndex) { this.fluidIndex = fluidIndex; this.props = this.fluidIndex == -1 ? new IFluidTankProperties[0] : - this.delegate.getTankAt(this.fluidIndex).getTankProperties(); + getTank().getTankProperties(); } public DualHandler getDelegate() { @@ -210,25 +204,25 @@ public DualHandler getDelegate() { @Override public FluidStack getFluid() { if (fluidIndex == -1) return null; - return this.delegate.getTankAt(this.fluidIndex).getFluid(); + return getTank().getFluid(); } @Override public int getFluidAmount() { if (fluidIndex == -1) return 0; - return this.delegate.getTankAt(this.fluidIndex).getFluidAmount(); + return getTank().getFluidAmount(); } @Override public int getCapacity() { if (fluidIndex == -1) return 0; - return this.delegate.getTankAt(this.fluidIndex).getCapacity(); + return getTank().getCapacity(); } @Override public FluidTankInfo getInfo() { if (fluidIndex == -1) return NULL; - return this.delegate.getTankAt(this.fluidIndex).getInfo(); + return getTank().getInfo(); } @Override @@ -239,19 +233,29 @@ public IFluidTankProperties[] getTankProperties() { @Override public int fill(FluidStack resource, boolean doFill) { if (fluidIndex == -1) return 0; - return this.delegate.getTankAt(this.fluidIndex).fill(resource, doFill); + int filled = getTank().fill(resource, doFill); + if (doFill && filled > 0) onContentsChanged(); + return filled; } @Override public FluidStack drain(FluidStack resource, boolean doDrain) { if (fluidIndex == -1) return null; - return this.delegate.getTankAt(this.fluidIndex).drain(resource, doDrain); + var drained = getTank().drain(resource, doDrain); + if (doDrain && drained != null) onContentsChanged(); + return drained; } @Override public FluidStack drain(int maxDrain, boolean doDrain) { if (fluidIndex == -1) return null; - return this.delegate.getTankAt(this.fluidIndex).drain(maxDrain, doDrain); + var drained = getTank().drain(maxDrain, doDrain); + if (doDrain && drained != null) onContentsChanged(); + return drained; + } + + private MultiFluidTankEntry getTank() { + return this.delegate.getTankAt(this.fluidIndex); } @Override @@ -288,5 +292,15 @@ public void setStackInSlot(int slot, ItemStack stack) { if (itemIndex == -1) return; this.delegate.setStackInSlot(this.itemIndex, stack); } + + @Override + public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { + DualHandler.this.addNotifiableMetaTileEntity(metaTileEntity); + } + + @Override + public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { + DualHandler.this.removeNotifiableMetaTileEntity(metaTileEntity); + } } } From 5c28ce5294e891f13bfe112d4442b8221412b17a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 17:23:17 -0700 Subject: [PATCH 071/112] make entry static again --- .../java/gregtech/api/capability/DualHandler.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 0699a51ebb7..25e70f8d5c5 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -179,7 +179,7 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.notifiableEntities.remove(metaTileEntity); } - public class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler, INotifiableHandler { + public static class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler, INotifiableHandler { private static final FluidTankInfo NULL = new FluidTankInfo(null, 0); @@ -234,7 +234,8 @@ public IFluidTankProperties[] getTankProperties() { public int fill(FluidStack resource, boolean doFill) { if (fluidIndex == -1) return 0; int filled = getTank().fill(resource, doFill); - if (doFill && filled > 0) onContentsChanged(); + if (doFill && filled > 0) + delegate.onContentsChanged(); return filled; } @@ -242,7 +243,8 @@ public int fill(FluidStack resource, boolean doFill) { public FluidStack drain(FluidStack resource, boolean doDrain) { if (fluidIndex == -1) return null; var drained = getTank().drain(resource, doDrain); - if (doDrain && drained != null) onContentsChanged(); + if (doDrain && drained != null) + delegate.onContentsChanged(); return drained; } @@ -250,7 +252,8 @@ public FluidStack drain(FluidStack resource, boolean doDrain) { public FluidStack drain(int maxDrain, boolean doDrain) { if (fluidIndex == -1) return null; var drained = getTank().drain(maxDrain, doDrain); - if (doDrain && drained != null) onContentsChanged(); + if (doDrain && drained != null) + delegate.onContentsChanged(); return drained; } @@ -295,12 +298,12 @@ public void setStackInSlot(int slot, ItemStack stack) { @Override public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { - DualHandler.this.addNotifiableMetaTileEntity(metaTileEntity); + this.delegate.addNotifiableMetaTileEntity(metaTileEntity); } @Override public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { - DualHandler.this.removeNotifiableMetaTileEntity(metaTileEntity); + this.delegate.removeNotifiableMetaTileEntity(metaTileEntity); } } } From 4ed45b9749d53731857190e250c625b2ecd711e9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 00:04:36 -0700 Subject: [PATCH 072/112] add back simple checking of extra fluids from items only when distinct is enabled --- .../capability/impl/MultiblockRecipeLogic.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 728ed138cc9..f812dbcc020 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -17,6 +17,7 @@ import gregtech.common.ConfigHolder; import net.minecraft.util.Tuple; +import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; @@ -253,24 +254,26 @@ public void invalidateInputs() { } protected boolean checkPreviousRecipeDistinct(IItemHandlerModifiable previousBus) { - return previousRecipe != null && previousRecipe.matches(false, previousBus, getInputTank()); + return previousRecipe != null && previousRecipe.matches(false, previousBus, checkExtraFluids(previousBus)); } protected boolean prepareRecipeDistinct(Recipe recipe) { recipe = Recipe.trimRecipeOutputs(recipe, getRecipeMap(), metaTileEntity.getItemOutputLimit(), metaTileEntity.getFluidOutputLimit()); + var extraFluids = checkExtraFluids(currentDistinctInputBus); + recipe = findParallelRecipe( recipe, currentDistinctInputBus, - getInputTank(), + extraFluids, getOutputInventory(), getOutputTank(), getMaxParallelVoltage(), getParallelLimit()); if (recipe != null) { - recipe = setupAndConsumeRecipeInputs(recipe, currentDistinctInputBus); + recipe = setupAndConsumeRecipeInputs(recipe, currentDistinctInputBus, extraFluids); if (recipe != null) { setupRecipe(recipe); return true; @@ -280,6 +283,14 @@ protected boolean prepareRecipeDistinct(Recipe recipe) { return false; } + protected IMultipleTankHandler checkExtraFluids(IItemHandler items) { + List tanks = new ArrayList<>(getInputTank().getFluidTanks()); + if (items instanceof IMultipleTankHandler multipleTankHandler) { + tanks.addAll(multipleTankHandler.getFluidTanks()); + } + return new FluidTankList(getInputTank().allowSameFluidFill(), tanks); + } + @Override protected void modifyOverclockPre(@NotNull OCParams ocParams, @NotNull RecipePropertyStorage storage) { super.modifyOverclockPre(ocParams, storage); From 2d44b0dbe5e1557e5000f21a4a711c5bc824b4c3 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 00:44:32 -0700 Subject: [PATCH 073/112] fix dual handler a bit missed spot for checking fluids in mrl --- .../gregtech/api/capability/DualHandler.java | 19 +++++++++++-------- .../impl/MultiblockRecipeLogic.java | 3 +-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 25e70f8d5c5..10cc7dd80f3 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -160,17 +160,20 @@ public List unwrap() { return this.unwrapped; } - public void onContentsChanged() { + public void onContentsChanged(Object handler) { for (MetaTileEntity metaTileEntity : notifiableEntities) { - if (metaTileEntity != null && metaTileEntity.isValid()) { - addToNotifiedList(metaTileEntity, this, isExport); - } + addToNotifiedList(metaTileEntity, handler, isExport); } } + public void onContentsChanged() { + onContentsChanged(this); + } + @Override public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { - if (metaTileEntity == null) return; + if (metaTileEntity == null || this.notifiableEntities.contains(metaTileEntity)) + return; this.notifiableEntities.add(metaTileEntity); } @@ -235,7 +238,7 @@ public int fill(FluidStack resource, boolean doFill) { if (fluidIndex == -1) return 0; int filled = getTank().fill(resource, doFill); if (doFill && filled > 0) - delegate.onContentsChanged(); + delegate.onContentsChanged(this); return filled; } @@ -244,7 +247,7 @@ public FluidStack drain(FluidStack resource, boolean doDrain) { if (fluidIndex == -1) return null; var drained = getTank().drain(resource, doDrain); if (doDrain && drained != null) - delegate.onContentsChanged(); + delegate.onContentsChanged(this); return drained; } @@ -253,7 +256,7 @@ public FluidStack drain(int maxDrain, boolean doDrain) { if (fluidIndex == -1) return null; var drained = getTank().drain(maxDrain, doDrain); if (doDrain && drained != null) - delegate.onContentsChanged(); + delegate.onContentsChanged(this); return drained; } diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index f812dbcc020..d8f6ca9c165 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -201,7 +201,6 @@ protected void trySearchNewRecipeDistinct() { long maxVoltage = getMaxVoltage(); Recipe currentRecipe; List importInventory = getInputBuses(); - IMultipleTankHandler importFluids = getInputTank(); // Our caching implementation // This guarantees that if we get a recipe cache hit, our efficiency is no different from other machines @@ -224,7 +223,7 @@ protected void trySearchNewRecipeDistinct() { continue; } // Look for a new recipe after a cache miss - currentRecipe = findRecipe(maxVoltage, bus, importFluids); + currentRecipe = findRecipe(maxVoltage, bus, checkExtraFluids(bus)); // Cache the current recipe, if one is found if (currentRecipe != null && checkRecipe(currentRecipe)) { this.previousRecipe = currentRecipe; From 65e761406db1089aac6b69448d2c21bc3d0ef3d9 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 18:16:34 -0700 Subject: [PATCH 074/112] improve add method --- .../metatileentity/multiblock/AbilityInstances.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 1eaba5cb0f0..a0a39fefb80 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -1,10 +1,13 @@ package gregtech.api.metatileentity.multiblock; +import gregtech.api.util.GTLog; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.AbstractList; import java.util.ArrayList; +import java.util.Collection; import java.util.List; public class AbilityInstances extends AbstractList { @@ -53,8 +56,14 @@ public boolean isKey(MultiblockAbility key) { @Override public boolean add(Object o) { - if (!key.checkType(o)) return false; - return instances.add(o); + if (o instanceof Collectioncollection) { + GTLog.logger.warn(new IllegalArgumentException( + "Passed in a collection of elements to \"add()\"! Please use \"addAll()\" instead.")); + return addAll(collection); + } + int s = size(); + add(s, o); + return s != size(); } @Override From c8eeb0b742c781ed2a53c8033e82876daf3d3308 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 18:19:56 -0700 Subject: [PATCH 075/112] update to `getAbilities()` --- .../impl/DistillationTowerLogicHandler.java | 2 +- .../multiblock/MultiblockControllerBase.java | 16 +++++++++++----- .../metatileentities/MetaTileEntities.java | 3 ++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java index 0f5ad3e1bc6..e4dff86749b 100644 --- a/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java +++ b/src/main/java/gregtech/api/capability/impl/DistillationTowerLogicHandler.java @@ -76,7 +76,7 @@ public void determineOrderedFluidOutputs() { // noinspection SimplifyStreamApiCallChains List fluidExportParts = tower.getMultiblockParts().stream() .filter(iMultiblockPart -> iMultiblockPart instanceof IMultiblockAbilityPartabilityPart && - abilityPart.getAbility() == MultiblockAbility.EXPORT_FLUIDS && + abilityPart.getAbilities().contains(MultiblockAbility.EXPORT_FLUIDS) && abilityPart instanceof MetaTileEntityMultiblockPart) .map(iMultiblockPart -> (MetaTileEntityMultiblockPart) iMultiblockPart) .collect(Collectors.toList()); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index 593c55db8da..494ab651b54 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -231,11 +231,17 @@ private static Supplier getCandidates(IBlockState... allowedStates) } public static TraceabilityPredicate abilities(MultiblockAbility... allowedAbilities) { - return tilePredicate((state, tile) -> tile instanceof IMultiblockAbilityPart && - ArrayUtils.contains(allowedAbilities, ((IMultiblockAbilityPart) tile).getAbility()), - getCandidates(Arrays.stream(allowedAbilities) - .flatMap(ability -> MultiblockAbility.REGISTRY.get(ability).stream()) - .toArray(MetaTileEntity[]::new))); + return tilePredicate((state, tile) -> { + if (tile instanceof IMultiblockAbilityPartabilityPart) { + for (var ability : abilityPart.getAbilities()) { + if (ArrayUtils.contains(allowedAbilities, ability)) + return true; + } + } + return false; + }, getCandidates(Arrays.stream(allowedAbilities) + .flatMap(ability -> MultiblockAbility.REGISTRY.get(ability).stream()) + .toArray(MetaTileEntity[]::new))); } public static TraceabilityPredicate states(IBlockState... allowedStates) { diff --git a/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java b/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java index 1e13f91f1fe..9bfa01652e6 100644 --- a/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java +++ b/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java @@ -1304,7 +1304,8 @@ public static void registerMetaTileEntities( */ public static @NotNull T registerMetaTileEntity(int id, @NotNull T mte) { if (mte instanceof IMultiblockAbilityPartabilityPart) { - MultiblockAbility.registerMultiblockAbility(abilityPart.getAbility(), mte); + for (var ability : abilityPart.getAbilities()) + MultiblockAbility.registerMultiblockAbility(ability, mte); } if (Mods.JustEnoughItems.isModLoaded() && mte instanceof MultiblockControllerBase controller && From d7f83e19e120def9f5cbeba990885f7cc8b60a16 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 18:24:29 -0700 Subject: [PATCH 076/112] fix warning --- .../api/metatileentity/multiblock/AbilityInstances.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index a0a39fefb80..54739680ab6 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -57,8 +57,8 @@ public boolean isKey(MultiblockAbility key) { @Override public boolean add(Object o) { if (o instanceof Collectioncollection) { - GTLog.logger.warn(new IllegalArgumentException( - "Passed in a collection of elements to \"add()\"! Please use \"addAll()\" instead.")); + GTLog.logger.warn("Passed in a collection of elements to \"add()\"! Please use \"addAll()\" instead.", + new IllegalArgumentException()); return addAll(collection); } int s = size(); From ed378deeeb83b3f39084a218b6d7fadeb09f0e43 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:10:29 -0700 Subject: [PATCH 077/112] check object type and collect if iterable remove warn --- .../multiblock/AbilityInstances.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 54739680ab6..a0c32632926 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -1,13 +1,10 @@ package gregtech.api.metatileentity.multiblock; -import gregtech.api.util.GTLog; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.AbstractList; import java.util.ArrayList; -import java.util.Collection; import java.util.List; public class AbilityInstances extends AbstractList { @@ -20,8 +17,13 @@ public boolean isKey(MultiblockAbility key) { } @Override - public boolean add(Object o) { - return false; + public void add(int index, Object element) { + // do nothing + } + + @Override + public Object set(int index, Object element) { + return null; } @Override @@ -29,6 +31,7 @@ public Object get(int index) { return null; } }; + private final MultiblockAbility key; private final List instances = new ArrayList<>(); @@ -54,14 +57,21 @@ public boolean isKey(MultiblockAbility key) { return (List) this; } + /** + * @param o element to try and add to this list of instances + * @return + */ @Override public boolean add(Object o) { - if (o instanceof Collectioncollection) { - GTLog.logger.warn("Passed in a collection of elements to \"add()\"! Please use \"addAll()\" instead.", - new IllegalArgumentException()); - return addAll(collection); - } int s = size(); + // if what's added isn't what the key expects, + // and it's an iterable, try to add all of its elements instead + if (!this.key.checkType(o) && o instanceof Iterableiterable) { + for (var e : iterable) + add(size(), e); + return s != size(); + } + // otherwise add as normal add(s, o); return s != size(); } From b8755af168ae149140c2b5dc9154995cabf7b04c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:18:42 -0700 Subject: [PATCH 078/112] unneeded javadoc --- .../api/metatileentity/multiblock/AbilityInstances.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index a0c32632926..3173a23091f 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -57,10 +57,6 @@ public boolean isKey(MultiblockAbility key) { return (List) this; } - /** - * @param o element to try and add to this list of instances - * @return - */ @Override public boolean add(Object o) { int s = size(); From 19fe8778dd2f251d61006015c4e700852ce29f9d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:31:00 -0700 Subject: [PATCH 079/112] throw exception on adding or setting invalid element --- .../metatileentity/multiblock/AbilityInstances.java | 10 +++++++--- .../metatileentity/multiblock/MultiblockAbility.java | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 3173a23091f..b3944be6463 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -74,13 +74,17 @@ public boolean add(Object o) { @Override public void add(int index, Object element) { - if (key.checkType(element)) - instances.add(index, element); + if (!key.checkType(element)) + throw new IllegalArgumentException( + String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), this.key.getType())); + instances.add(index, element); } @Override public Object set(int index, Object element) { - if (!key.checkType(element)) return null; + if (!key.checkType(element)) + throw new IllegalArgumentException( + String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), this.key.getType())); return instances.set(index, element); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index 745991654a5..1a9eac30790 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -124,6 +124,10 @@ public boolean checkType(Object o) { return clazz.isAssignableFrom(o.getClass()); } + public String getType() { + return this.clazz.toString(); + } + public @Nullable T checkAndCast(Object o) { if (checkType(o)) return clazz.cast(o); From af173ab2b3cde0982e89311c48ee618ee9d9e176 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:40:21 -0700 Subject: [PATCH 080/112] better javadocs --- .../multiblock/AbilityInstances.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index b3944be6463..876aa359a39 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -7,6 +7,13 @@ import java.util.ArrayList; import java.util.List; +/** + * Stores a list of {@link MultiblockAbility} instances. + *
+ *
+ * Make sure to use {@link AbilityInstances#isKey(MultiblockAbility)} to check what kind of + * instances to add to this list. + */ public class AbilityInstances extends AbstractList { public static final AbilityInstances EMPTY = new AbilityInstances(null) { @@ -57,6 +64,14 @@ public boolean isKey(MultiblockAbility key) { return (List) this; } + /** + * Adds an instance of a MultiblockAbility to this list. If the object + * passed in is a list of instances that match the key, they will all be added. + * if the object is not what the key expects, an exception will be thrown. + * + * @param o element whose class matches the type from the key + * @return true if the list was modified + */ @Override public boolean add(Object o) { int s = size(); @@ -76,15 +91,24 @@ public boolean add(Object o) { public void add(int index, Object element) { if (!key.checkType(element)) throw new IllegalArgumentException( - String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), this.key.getType())); + String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), + this.key.getType())); instances.add(index, element); } + /** + * Replaces the element at the index. Will throw and exception if the element is not what the key expects. + * + * @param index index of the element to replace + * @param element element to be stored at the specified position + * @return the element previously stored at the index + */ @Override public Object set(int index, Object element) { if (!key.checkType(element)) throw new IllegalArgumentException( - String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), this.key.getType())); + String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), + this.key.getType())); return instances.set(index, element); } From 73b61c53b7f63045f2b718136d8bac08d1d82386 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:01:56 -0700 Subject: [PATCH 081/112] remove unnecessary override some javadocs --- .../multiblock/IMultiblockAbilityPart.java | 11 +++++++++++ .../multiblockpart/MetaTileEntityFluidHatch.java | 5 ----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index 8b501b6f634..8a9b23dbbe7 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -8,10 +8,21 @@ public interface IMultiblockAbilityPart extends IMultiblockPart { + /** + * Returns only one ability for this multiblock part. + * If you need more than one, override {@link #getAbilities()} instead. + * + * @return The MultiblockAbility this part has + */ default @Nullable MultiblockAbility getAbility() { return null; } + /** + * Returns a list of abilities that this multiblock part may have. + * + * @return a list of MultiblockAbilities + */ default @NotNull List> getAbilities() { return getAbility() == null ? Collections.emptyList() : Collections.singletonList(getAbility()); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index fdd6221c5ab..0b62ac8c6d6 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -248,11 +248,6 @@ protected IItemHandlerModifiable createExportItemHandler() { return new GTItemStackHandler(this, 1); } - @Override - public MultiblockAbility getAbility() { - return isExportHatch ? MultiblockAbility.EXPORT_FLUIDS : MultiblockAbility.IMPORT_FLUIDS; - } - @Override public @NotNull List> getAbilities() { return isExportHatch ? From d8b1b1694be3bc8b8d2e3b9668b69f6e52c58395 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 15 Aug 2024 22:08:43 -0700 Subject: [PATCH 082/112] always assume a size of one --- .../java/gregtech/api/capability/INotifiableHandler.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/capability/INotifiableHandler.java b/src/main/java/gregtech/api/capability/INotifiableHandler.java index c9362912594..9a8c915e9eb 100644 --- a/src/main/java/gregtech/api/capability/INotifiableHandler.java +++ b/src/main/java/gregtech/api/capability/INotifiableHandler.java @@ -2,7 +2,6 @@ import gregtech.api.metatileentity.MetaTileEntity; -import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandler; /** @@ -35,12 +34,10 @@ default void addToNotifiedList(MetaTileEntity metaTileEntity, T handler, boo void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity); default int size() { - if (this instanceof IFluidTank) - return 1; - else if (this instanceof IItemHandler handler) + if (this instanceof IItemHandler handler) return handler.getSlots(); else if (this instanceof IMultipleTankHandler tankHandler) return tankHandler.getTanks(); - return 0; + return 1; } } From 774ea042fe5cb73b97c956c9e1572406029e0b6a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 15 Aug 2024 22:17:06 -0700 Subject: [PATCH 083/112] fix potential npe with EMPTY --- .../metatileentity/multiblock/AbilityInstances.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 876aa359a39..8330410e13d 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -23,6 +23,11 @@ public boolean isKey(MultiblockAbility key) { return false; } + @Override + protected boolean canAdd(Object o) { + return false; + } + @Override public void add(int index, Object element) { // do nothing @@ -77,7 +82,7 @@ public boolean add(Object o) { int s = size(); // if what's added isn't what the key expects, // and it's an iterable, try to add all of its elements instead - if (!this.key.checkType(o) && o instanceof Iterableiterable) { + if (!canAdd(o) && o instanceof Iterableiterable) { for (var e : iterable) add(size(), e); return s != size(); @@ -87,6 +92,10 @@ public boolean add(Object o) { return s != size(); } + protected boolean canAdd(Object o) { + return this.key.checkType(o); + } + @Override public void add(int index, Object element) { if (!key.checkType(element)) From ad93eea967427bff116dda1c0bb192e0f7460f26 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Thu, 15 Aug 2024 23:29:03 -0700 Subject: [PATCH 084/112] always check for extra fluids, but only for multis --- .../impl/MultiblockRecipeLogic.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index d8f6ca9c165..11491b59cde 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -240,6 +240,12 @@ protected void trySearchNewRecipeDistinct() { } } + @Override + protected @Nullable Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, + IMultipleTankHandler fluidInputs) { + return super.findRecipe(maxVoltage, inputs, checkExtraFluids(inputs)); + } + @Override public void invalidateInputs() { MultiblockWithDisplayBase controller = (MultiblockWithDisplayBase) metaTileEntity; @@ -284,9 +290,20 @@ protected boolean prepareRecipeDistinct(Recipe recipe) { protected IMultipleTankHandler checkExtraFluids(IItemHandler items) { List tanks = new ArrayList<>(getInputTank().getFluidTanks()); - if (items instanceof IMultipleTankHandler multipleTankHandler) { + if (items instanceof ItemHandlerList list) { + for (var handler : list.getBackingHandlers()) { + if (handler instanceof IFluidTank tank) { + tanks.add(tank); + } else if (handler instanceof IMultipleTankHandler multipleTankHandler) { + tanks.addAll(multipleTankHandler.getFluidTanks()); + } + } + } else if (items instanceof IFluidTank tank) { + tanks.add(tank); + } else if (items instanceof IMultipleTankHandler multipleTankHandler) { tanks.addAll(multipleTankHandler.getFluidTanks()); } + return new FluidTankList(getInputTank().allowSameFluidFill(), tanks); } From 394d02cbe83b1bf8efbcc0465dbfbc3b2ec79782 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 16 Aug 2024 00:51:42 -0700 Subject: [PATCH 085/112] do not allow duplicate instances --- .../api/metatileentity/multiblock/AbilityInstances.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 8330410e13d..56f2333ecd7 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -102,7 +102,8 @@ public void add(int index, Object element) { throw new IllegalArgumentException( String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), this.key.getType())); - instances.add(index, element); + if (!instances.contains(element)) + instances.add(index, element); } /** @@ -118,6 +119,9 @@ public Object set(int index, Object element) { throw new IllegalArgumentException( String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), this.key.getType())); + if (instances.contains(element)) + return null; + return instances.set(index, element); } From f2454c2cae5d0676c4faea71c4ba52577619ea53 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 16 Aug 2024 00:52:16 -0700 Subject: [PATCH 086/112] check fluids in controller init instead of recipe logic --- .../impl/MultiblockRecipeLogic.java | 35 +++---------------- .../RecipeMapMultiblockController.java | 20 ++++++++--- 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 11491b59cde..f3a9d6aada0 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -223,7 +223,7 @@ protected void trySearchNewRecipeDistinct() { continue; } // Look for a new recipe after a cache miss - currentRecipe = findRecipe(maxVoltage, bus, checkExtraFluids(bus)); + currentRecipe = findRecipe(maxVoltage, bus, getInputTank()); // Cache the current recipe, if one is found if (currentRecipe != null && checkRecipe(currentRecipe)) { this.previousRecipe = currentRecipe; @@ -240,12 +240,6 @@ protected void trySearchNewRecipeDistinct() { } } - @Override - protected @Nullable Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, - IMultipleTankHandler fluidInputs) { - return super.findRecipe(maxVoltage, inputs, checkExtraFluids(inputs)); - } - @Override public void invalidateInputs() { MultiblockWithDisplayBase controller = (MultiblockWithDisplayBase) metaTileEntity; @@ -259,26 +253,24 @@ public void invalidateInputs() { } protected boolean checkPreviousRecipeDistinct(IItemHandlerModifiable previousBus) { - return previousRecipe != null && previousRecipe.matches(false, previousBus, checkExtraFluids(previousBus)); + return previousRecipe != null && previousRecipe.matches(false, previousBus, getInputTank()); } protected boolean prepareRecipeDistinct(Recipe recipe) { recipe = Recipe.trimRecipeOutputs(recipe, getRecipeMap(), metaTileEntity.getItemOutputLimit(), metaTileEntity.getFluidOutputLimit()); - var extraFluids = checkExtraFluids(currentDistinctInputBus); - recipe = findParallelRecipe( recipe, currentDistinctInputBus, - extraFluids, + getInputTank(), getOutputInventory(), getOutputTank(), getMaxParallelVoltage(), getParallelLimit()); if (recipe != null) { - recipe = setupAndConsumeRecipeInputs(recipe, currentDistinctInputBus, extraFluids); + recipe = setupAndConsumeRecipeInputs(recipe, currentDistinctInputBus, getInputTank()); if (recipe != null) { setupRecipe(recipe); return true; @@ -288,25 +280,6 @@ protected boolean prepareRecipeDistinct(Recipe recipe) { return false; } - protected IMultipleTankHandler checkExtraFluids(IItemHandler items) { - List tanks = new ArrayList<>(getInputTank().getFluidTanks()); - if (items instanceof ItemHandlerList list) { - for (var handler : list.getBackingHandlers()) { - if (handler instanceof IFluidTank tank) { - tanks.add(tank); - } else if (handler instanceof IMultipleTankHandler multipleTankHandler) { - tanks.addAll(multipleTankHandler.getFluidTanks()); - } - } - } else if (items instanceof IFluidTank tank) { - tanks.add(tank); - } else if (items instanceof IMultipleTankHandler multipleTankHandler) { - tanks.addAll(multipleTankHandler.getFluidTanks()); - } - - return new FluidTankList(getInputTank().allowSameFluidFill(), tanks); - } - @Override protected void modifyOverclockPre(@NotNull OCParams ocParams, @NotNull RecipePropertyStorage storage) { super.modifyOverclockPre(ocParams, storage); diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 8676bea0200..c4b3ba5cc96 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -26,6 +26,7 @@ import net.minecraft.util.text.Style; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandlerModifiable; import codechicken.lib.render.CCRenderState; @@ -120,11 +121,9 @@ public boolean isActive() { protected void initializeAbilities() { this.inputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.IMPORT_ITEMS)); - this.inputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), - getAbilities(MultiblockAbility.IMPORT_FLUIDS)); + this.inputFluidInventory = createFluidList(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_FLUIDS); this.outputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.EXPORT_ITEMS)); - this.outputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), - getAbilities(MultiblockAbility.EXPORT_FLUIDS)); + this.outputFluidInventory = createFluidList(MultiblockAbility.EXPORT_ITEMS, MultiblockAbility.EXPORT_FLUIDS); List inputEnergy = new ArrayList<>(getAbilities(MultiblockAbility.INPUT_ENERGY)); inputEnergy.addAll(getAbilities(MultiblockAbility.SUBSTATION_INPUT_ENERGY)); @@ -140,6 +139,19 @@ private void resetTileAbilities() { this.energyContainer = new EnergyContainerList(Lists.newArrayList()); } + protected IMultipleTankHandler createFluidList(MultiblockAbility items, MultiblockAbility fluids) { + List tanks = getAbilitiesModifiable(fluids); + for (var handler : getAbilities(items)) { + if (handler instanceof IFluidTank tank) { + tanks.add(tank); + } else if (handler instanceof IMultipleTankHandler multipleTankHandler) { + tanks.addAll(multipleTankHandler.getFluidTanks()); + } + } + + return new FluidTankList(allowSameFluidFillForOutputs(), tanks); + } + protected boolean allowSameFluidFillForOutputs() { return true; } From 4d4b5ab80bb7a23979645ae027dbf62838ad20fa Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 16 Aug 2024 01:52:54 -0700 Subject: [PATCH 087/112] fix fluid voiding? spotless --- .../gregtech/api/capability/impl/MultiblockRecipeLogic.java | 1 - .../multiblock/RecipeMapMultiblockController.java | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index f3a9d6aada0..ea78dc36f91 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -17,7 +17,6 @@ import gregtech.common.ConfigHolder; import net.minecraft.util.Tuple; -import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index c4b3ba5cc96..a33d17266a6 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -139,8 +139,9 @@ private void resetTileAbilities() { this.energyContainer = new EnergyContainerList(Lists.newArrayList()); } - protected IMultipleTankHandler createFluidList(MultiblockAbility items, MultiblockAbility fluids) { - List tanks = getAbilitiesModifiable(fluids); + protected IMultipleTankHandler createFluidList(MultiblockAbility items, + MultiblockAbility fluids) { + List tanks = new ArrayList<>(getAbilities(fluids)); for (var handler : getAbilities(items)) { if (handler instanceof IFluidTank tank) { tanks.add(tank); From 6aef6f185537bbfb86c4a787dba3501963499083 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 16 Aug 2024 14:13:17 -0700 Subject: [PATCH 088/112] fix tank list creation --- .../multiblock/RecipeMapMultiblockController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index a33d17266a6..21aaf1ad934 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -141,7 +141,8 @@ private void resetTileAbilities() { protected IMultipleTankHandler createFluidList(MultiblockAbility items, MultiblockAbility fluids) { - List tanks = new ArrayList<>(getAbilities(fluids)); + var tanks = new AbilityInstances(fluids); + tanks.addAll(getAbilities(fluids)); for (var handler : getAbilities(items)) { if (handler instanceof IFluidTank tank) { tanks.add(tank); @@ -150,7 +151,7 @@ protected IMultipleTankHandler createFluidList(MultiblockAbility Date: Sat, 17 Aug 2024 13:29:10 -0700 Subject: [PATCH 089/112] casually rework IMultipleTankHandler to use an extendable interface instead of sealed class casually rework DualEntry to not be an item handler --- .../gregtech/api/capability/DualHandler.java | 117 +++--------- .../api/capability/IMultipleTankHandler.java | 167 ++++-------------- .../api/capability/impl/FluidTankList.java | 148 ++++++++++++++-- .../java/gregtech/api/util/GTUtility.java | 2 +- .../api/util/OverlayedFluidHandler.java | 5 +- ...etaTileEntityMultiblockNotifiablePart.java | 2 +- .../capability/impl/FluidTankListTest.java | 3 +- 7 files changed, 200 insertions(+), 244 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 10cc7dd80f3..ceab3674089 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -6,9 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandlerModifiable; @@ -29,7 +27,7 @@ public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler @NotNull IMultipleTankHandler fluidDelegate; - private final List unwrapped; + private final List unwrapped; List notifiableEntities = new ArrayList<>(); private final boolean isExport; @@ -40,15 +38,10 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, this.itemDelegate = itemDelegate; this.fluidDelegate = fluidDelegate; this.isExport = isExport; - int items = itemDelegate.getSlots(); - int fluids = fluidDelegate.getTanks(); - int max = Math.max(items, fluids); - - List list = new ArrayList<>(max); - for (int i = 0; i < max; i++) { - list.add(new DualEntry(this, - i < items ? i : -1, - i < fluids ? i : -1)); + + List list = new ArrayList<>(); + for (var tank : this.fluidDelegate) { + list.add(new DualEntry(this, tank)); } this.unwrapped = list; } @@ -137,8 +130,8 @@ public FluidStack drain(int maxDrain, boolean doDrain) { } @Override - public @NotNull List getFluidTanks() { - return this.fluidDelegate.getFluidTanks(); + public @NotNull List getFluidTanks() { + return this.unwrapped; } @Override @@ -147,8 +140,8 @@ public int getTanks() { } @Override - public @NotNull MultiFluidTankEntry getTankAt(int index) { - return this.fluidDelegate.getTankAt(index); + public @NotNull ITankEntry getTankAt(int index) { + return this.unwrapped.get(index); } @Override @@ -156,10 +149,6 @@ public boolean allowSameFluidFill() { return this.fluidDelegate.allowSameFluidFill(); } - public List unwrap() { - return this.unwrapped; - } - public void onContentsChanged(Object handler) { for (MetaTileEntity metaTileEntity : notifiableEntities) { addToNotifiedList(metaTileEntity, handler, isExport); @@ -182,60 +171,35 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.notifiableEntities.remove(metaTileEntity); } - public static class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler, INotifiableHandler { - - private static final FluidTankInfo NULL = new FluidTankInfo(null, 0); + public static class DualEntry implements ITankEntry, INotifiableHandler { private final DualHandler delegate; - private final int itemIndex; - private final int fluidIndex; - private final IFluidTankProperties[] props; - - public DualEntry(DualHandler delegate, int itemIndex, int fluidIndex) { - this.delegate = delegate; - this.itemIndex = itemIndex; - this.fluidIndex = fluidIndex; - this.props = this.fluidIndex == -1 ? - new IFluidTankProperties[0] : - getTank().getTankProperties(); - } - public DualHandler getDelegate() { - return this.delegate; - } - - @Override - public FluidStack getFluid() { - if (fluidIndex == -1) return null; - return getTank().getFluid(); - } + @NotNull + private final ITankEntry tank; - @Override - public int getFluidAmount() { - if (fluidIndex == -1) return 0; - return getTank().getFluidAmount(); + public DualEntry(DualHandler delegate, ITankEntry tank) { + this.delegate = delegate; + this.tank = tank; } @Override - public int getCapacity() { - if (fluidIndex == -1) return 0; - return getTank().getCapacity(); + public @NotNull IMultipleTankHandler getParent() { + return this.delegate; } @Override - public FluidTankInfo getInfo() { - if (fluidIndex == -1) return NULL; - return getTank().getInfo(); + public @NotNull IFluidTank getDelegate() { + return this.tank; } @Override public IFluidTankProperties[] getTankProperties() { - return this.props; + return this.getTank().getTankProperties(); } @Override public int fill(FluidStack resource, boolean doFill) { - if (fluidIndex == -1) return 0; int filled = getTank().fill(resource, doFill); if (doFill && filled > 0) delegate.onContentsChanged(this); @@ -244,7 +208,6 @@ public int fill(FluidStack resource, boolean doFill) { @Override public FluidStack drain(FluidStack resource, boolean doDrain) { - if (fluidIndex == -1) return null; var drained = getTank().drain(resource, doDrain); if (doDrain && drained != null) delegate.onContentsChanged(this); @@ -253,50 +216,14 @@ public FluidStack drain(FluidStack resource, boolean doDrain) { @Override public FluidStack drain(int maxDrain, boolean doDrain) { - if (fluidIndex == -1) return null; var drained = getTank().drain(maxDrain, doDrain); if (doDrain && drained != null) delegate.onContentsChanged(this); return drained; } - private MultiFluidTankEntry getTank() { - return this.delegate.getTankAt(this.fluidIndex); - } - - @Override - public int getSlots() { - return itemIndex == -1 ? 0 : 1; - } - - @Override - public ItemStack getStackInSlot(int slot) { - if (itemIndex == -1) return ItemStack.EMPTY; - return this.delegate.getStackInSlot(this.itemIndex); - } - - @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - if (itemIndex == -1) return stack; - return this.delegate.insertItem(this.itemIndex, stack, simulate); - } - - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (itemIndex == -1) return ItemStack.EMPTY; - return this.delegate.extractItem(this.itemIndex, amount, simulate); - } - - @Override - public int getSlotLimit(int slot) { - if (itemIndex == -1) return 0; - return this.delegate.getSlotLimit(this.itemIndex); - } - - @Override - public void setStackInSlot(int slot, ItemStack stack) { - if (itemIndex == -1) return; - this.delegate.setStackInSlot(this.itemIndex, stack); + private @NotNull ITankEntry getTank() { + return this.tank; } @Override diff --git a/src/main/java/gregtech/api/capability/IMultipleTankHandler.java b/src/main/java/gregtech/api/capability/IMultipleTankHandler.java index b9e89c71d30..4a36b4dcafe 100644 --- a/src/main/java/gregtech/api/capability/IMultipleTankHandler.java +++ b/src/main/java/gregtech/api/capability/IMultipleTankHandler.java @@ -1,5 +1,6 @@ package gregtech.api.capability; +import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; @@ -7,7 +8,6 @@ import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidTankProperties; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -22,12 +22,12 @@ * * @see gregtech.api.capability.impl.FluidTankList FluidTankList */ -public interface IMultipleTankHandler extends IFluidHandler, Iterable { +public interface IMultipleTankHandler extends IFluidHandler, Iterable { /** * Comparator for entries that can be used in insertion logic */ - Comparator ENTRY_COMPARATOR = (o1, o2) -> { + Comparator ENTRY_COMPARATOR = (o1, o2) -> { // #1: non-empty tank first boolean empty1 = o1.getFluidAmount() <= 0; boolean empty2 = o2.getFluidAmount() <= 0; @@ -46,7 +46,7 @@ public interface IMultipleTankHandler extends IFluidHandler, Iterable getFluidTanks(); + List getFluidTanks(); /** * @return Number of tanks in this tank handler @@ -54,7 +54,7 @@ public interface IMultipleTankHandler extends IFluidHandler, Iterable fluidTanks = getFluidTanks(); + List fluidTanks = getFluidTanks(); for (int i = 0; i < fluidTanks.size(); i++) { FluidStack tankStack = fluidTanks.get(i).getFluid(); if (fluidStack == tankStack || tankStack != null && tankStack.isFluidEqual(fluidStack)) { @@ -81,7 +81,7 @@ default int getIndexOfFluid(@Nullable FluidStack fluidStack) { } @Override - default Iterator iterator() { + default Iterator iterator() { return getFluidTanks().iterator(); } @@ -89,160 +89,65 @@ default Iterator iterator() { * Entry of multi fluid tanks. Retains reference to original {@link IMultipleTankHandler} for accessing * information such as {@link IMultipleTankHandler#allowSameFluidFill()}. */ - final class MultiFluidTankEntry implements IFluidTank, IFluidHandler, IFilteredFluidContainer { - - private final IMultipleTankHandler tank; - private final IFluidTank delegate; - - public MultiFluidTankEntry(@NotNull IMultipleTankHandler tank, @NotNull IFluidTank delegate) { - this.tank = tank; - this.delegate = delegate; - } + interface ITankEntry extends IFluidTank, IFluidHandler, IFilteredFluidContainer, INBTSerializable { @NotNull - public IMultipleTankHandler getTank() { - return tank; - } + IMultipleTankHandler getParent(); @NotNull - public IFluidTank getDelegate() { - return delegate; - } + IFluidTank getDelegate(); - public boolean allowSameFluidFill() { - return tank.allowSameFluidFill(); + default boolean allowSameFluidFill() { + return getParent().allowSameFluidFill(); } - @Nullable - @Override - public IFilter getFilter() { - return this.delegate instanceof IFilteredFluidContainer filtered ? filtered.getFilter() : null; + default IFilter getFilter() { + return getDelegate() instanceof IFilteredFluidContainer filtered ? filtered.getFilter() : null; } - @NotNull - public IFluidTankProperties[] getTankProperties() { - return delegate instanceof IFluidHandler fluidHandler ? - fluidHandler.getTankProperties() : - new IFluidTankProperties[] { new FallbackTankProperty() }; - } - - public NBTTagCompound trySerialize() { - if (delegate instanceof FluidTank fluidTank) { + @Override + default NBTTagCompound serializeNBT() { + if (getDelegate() instanceof FluidTank fluidTank) { return fluidTank.writeToNBT(new NBTTagCompound()); - } else if (delegate instanceof INBTSerializable serializable) { - try { - return (NBTTagCompound) serializable.serializeNBT(); - } catch (ClassCastException ignored) {} + } else if (getDelegate() instanceof INBTSerializableserializable) { + if (serializable.serializeNBT() instanceof NBTTagCompound compound) { + return compound; + } } return new NBTTagCompound(); } - @SuppressWarnings({ "unchecked" }) - public void tryDeserialize(NBTTagCompound tag) { - if (delegate instanceof FluidTank fluidTank) { - fluidTank.readFromNBT(tag); - } else if (delegate instanceof INBTSerializable serializable) { + @Override + @SuppressWarnings("unchecked") + default void deserializeNBT(NBTTagCompound nbt) { + if (getDelegate() instanceof FluidTank fluidTank) { + fluidTank.readFromNBT(nbt); + } else if (getDelegate() instanceof INBTSerializableserializable) { try { - serializable.deserializeNBT(tag); + ((INBTSerializable) serializable).deserializeNBT(nbt); } catch (ClassCastException ignored) {} } } @Nullable @Override - public FluidStack getFluid() { - return delegate.getFluid(); - } - - @Override - public int getFluidAmount() { - return delegate.getFluidAmount(); - } - - @Override - public int getCapacity() { - return delegate.getCapacity(); - } - - @Override - public FluidTankInfo getInfo() { - return delegate.getInfo(); - } - - @Override - public int fill(FluidStack resource, boolean doFill) { - return delegate.fill(resource, doFill); - } - - @Nullable - @Override - public FluidStack drain(FluidStack resource, boolean doDrain) { - if (resource == null || resource.amount <= 0) { - return null; - } - if (delegate instanceof IFluidHandler fluidHandler) { - return fluidHandler.drain(resource, doDrain); - } - // just imitate the logic - FluidStack fluid = delegate.getFluid(); - return fluid != null && fluid.isFluidEqual(resource) ? drain(resource.amount, doDrain) : null; - } - - @Nullable - @Override - public FluidStack drain(int maxDrain, boolean doDrain) { - return delegate.drain(maxDrain, doDrain); + default FluidStack getFluid() { + return getDelegate().getFluid(); } @Override - public int hashCode() { - return delegate.hashCode(); + default int getFluidAmount() { + return getDelegate().getFluidAmount(); } @Override - @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") - public boolean equals(Object obj) { - return this == obj || delegate.equals(obj); + default int getCapacity() { + return getDelegate().getCapacity(); } @Override - public String toString() { - return delegate.toString(); - } - - private final class FallbackTankProperty implements IFluidTankProperties { - - @Nullable - @Override - public FluidStack getContents() { - return delegate.getFluid(); - } - - @Override - public int getCapacity() { - return delegate.getCapacity(); - } - - @Override - public boolean canFill() { - return true; - } - - @Override - public boolean canDrain() { - return true; - } - - @Override - public boolean canFillFluidType(FluidStack fluidStack) { - IFilter filter = getFilter(); - return filter == null || filter.test(fluidStack); - } - - @Override - public boolean canDrainFluidType(FluidStack fluidStack) { - return true; - } + default FluidTankInfo getInfo() { + return getDelegate().getInfo(); } } } diff --git a/src/main/java/gregtech/api/capability/impl/FluidTankList.java b/src/main/java/gregtech/api/capability/impl/FluidTankList.java index 29594258fb4..0ac625f934c 100644 --- a/src/main/java/gregtech/api/capability/impl/FluidTankList.java +++ b/src/main/java/gregtech/api/capability/impl/FluidTankList.java @@ -1,5 +1,7 @@ package gregtech.api.capability.impl; +import gregtech.api.capability.IFilter; +import gregtech.api.capability.IFilteredFluidContainer; import gregtech.api.capability.IMultipleTankHandler; import net.minecraft.nbt.NBTTagCompound; @@ -8,6 +10,7 @@ import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import org.jetbrains.annotations.NotNull; @@ -20,7 +23,7 @@ public class FluidTankList implements IMultipleTankHandler, INBTSerializable { - private final MultiFluidTankEntry[] fluidTanks; + private final ITankEntry[] fluidTanks; private final boolean allowSameFluidFill; public FluidTankList(boolean allowSameFluidFill, IFluidTank... fluidTanks) { @@ -39,9 +42,9 @@ public FluidTankList(boolean allowSameFluidFill, @NotNull List list = new ArrayList<>(parent.getFluidTanks()); + ArrayList list = new ArrayList<>(parent.getFluidTanks()); for (IFluidTank tank : additionalTanks) list.add(wrapIntoEntry(tank)); - this.fluidTanks = list.toArray(new MultiFluidTankEntry[0]); + this.fluidTanks = list.toArray(new ITankEntry[0]); this.allowSameFluidFill = allowSameFluidFill; } @@ -51,7 +54,7 @@ private MultiFluidTankEntry wrapIntoEntry(IFluidTank tank) { @NotNull @Override - public List getFluidTanks() { + public List getFluidTanks() { return Collections.unmodifiableList(Arrays.asList(fluidTanks)); } @@ -62,7 +65,7 @@ public int getTanks() { @NotNull @Override - public MultiFluidTankEntry getTankAt(int index) { + public ITankEntry getTankAt(int index) { return fluidTanks[index]; } @@ -70,7 +73,7 @@ public MultiFluidTankEntry getTankAt(int index) { @Override public IFluidTankProperties[] getTankProperties() { ArrayList propertiesList = new ArrayList<>(); - for (MultiFluidTankEntry fluidTank : fluidTanks) { + for (ITankEntry fluidTank : fluidTanks) { Collections.addAll(propertiesList, fluidTank.getTankProperties()); } return propertiesList.toArray(new IFluidTankProperties[0]); @@ -91,11 +94,11 @@ public int fill(FluidStack resource, boolean doFill) { // flag value indicating whether the fluid was stored in 'distinct' slot at least once boolean distinctSlotVisited = false; - MultiFluidTankEntry[] fluidTanks = this.fluidTanks.clone(); + ITankEntry[] fluidTanks = this.fluidTanks.clone(); Arrays.sort(fluidTanks, IMultipleTankHandler.ENTRY_COMPARATOR); // search for tanks with same fluid type first - for (MultiFluidTankEntry tank : fluidTanks) { + for (ITankEntry tank : fluidTanks) { // if the fluid to insert matches the tank, insert the fluid if (resource.isFluidEqual(tank.getFluid())) { int inserted = tank.fill(resource, doFill); @@ -118,7 +121,7 @@ public int fill(FluidStack resource, boolean doFill) { } } // if we still have fluid to insert, loop through empty tanks until we find one that can accept the fluid - for (MultiFluidTankEntry tank : fluidTanks) { + for (ITankEntry tank : fluidTanks) { // if the tank uses distinct fluid fill (allowSameFluidFill disabled) and another distinct tank had // received the fluid, skip this tank boolean usesDistinctFluidFill = tank.allowSameFluidFill(); @@ -207,7 +210,7 @@ public NBTTagCompound serializeNBT() { NBTTagCompound fluidInventory = new NBTTagCompound(); NBTTagList tanks = new NBTTagList(); for (int i = 0; i < this.getTanks(); i++) { - tanks.appendTag(this.fluidTanks[i].trySerialize()); + tanks.appendTag(this.fluidTanks[i].serializeNBT()); } fluidInventory.setTag("Tanks", tanks); return fluidInventory; @@ -217,7 +220,7 @@ public NBTTagCompound serializeNBT() { public void deserializeNBT(NBTTagCompound nbt) { NBTTagList tanks = nbt.getTagList("Tanks", Constants.NBT.TAG_COMPOUND); for (int i = 0; i < Math.min(fluidTanks.length, tanks.tagCount()); i++) { - this.fluidTanks[i].tryDeserialize(tanks.getCompoundTagAt(i)); + this.fluidTanks[i].deserializeNBT(tanks.getCompoundTagAt(i)); } } @@ -243,4 +246,127 @@ public String toString(boolean lineBreak) { if (lineBreak) stb.append('\n'); return stb.append(']').toString(); } + + /** + * Entry of multi fluid tanks. Retains reference to original {@link IMultipleTankHandler} for accessing + * information such as {@link IMultipleTankHandler#allowSameFluidFill()}. + */ + private static final class MultiFluidTankEntry implements ITankEntry { + + private final IMultipleTankHandler tank; + private final IFluidTank delegate; + private final IFluidTankProperties[] fallback; + + public MultiFluidTankEntry(@NotNull IMultipleTankHandler tank, @NotNull IFluidTank delegate) { + this.tank = tank; + this.delegate = delegate; + this.fallback = new IFluidTankProperties[] { + new FallbackTankProperty() + }; + } + + @NotNull + @Override + public IMultipleTankHandler getParent() { + return tank; + } + + @NotNull + @Override + public IFluidTank getDelegate() { + return delegate; + } + + public boolean allowSameFluidFill() { + return tank.allowSameFluidFill(); + } + + @Nullable + @Override + public IFilter getFilter() { + return this.delegate instanceof IFilteredFluidContainer filtered ? filtered.getFilter() : null; + } + + @NotNull + public IFluidTankProperties[] getTankProperties() { + return delegate instanceof IFluidHandler fluidHandler ? + fluidHandler.getTankProperties() : fallback; + } + + @Override + public int fill(FluidStack resource, boolean doFill) { + return delegate.fill(resource, doFill); + } + + @Nullable + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) { + if (resource == null || resource.amount <= 0) { + return null; + } + if (delegate instanceof IFluidHandler fluidHandler) { + return fluidHandler.drain(resource, doDrain); + } + // just imitate the logic + FluidStack fluid = delegate.getFluid(); + return fluid != null && fluid.isFluidEqual(resource) ? drain(resource.amount, doDrain) : null; + } + + @Nullable + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + return delegate.drain(maxDrain, doDrain); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") + public boolean equals(Object obj) { + return this == obj || delegate.equals(obj); + } + + @Override + public String toString() { + return delegate.toString(); + } + + private final class FallbackTankProperty implements IFluidTankProperties { + + @Nullable + @Override + public FluidStack getContents() { + return delegate.getFluid(); + } + + @Override + public int getCapacity() { + return delegate.getCapacity(); + } + + @Override + public boolean canFill() { + return true; + } + + @Override + public boolean canDrain() { + return true; + } + + @Override + public boolean canFillFluidType(FluidStack fluidStack) { + IFilter filter = getFilter(); + return filter == null || filter.test(fluidStack); + } + + @Override + public boolean canDrainFluidType(FluidStack fluidStack) { + return true; + } + } + } } diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index 90554f6d12b..e746448bb97 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -433,7 +433,7 @@ public int size() { * modifications in list will reflect on fluid handler and wise-versa */ public static List fluidHandlerToList(IMultipleTankHandler fluidInputs) { - List backedList = fluidInputs.getFluidTanks(); + List backedList = fluidInputs.getFluidTanks(); return new AbstractList() { @Override diff --git a/src/main/java/gregtech/api/util/OverlayedFluidHandler.java b/src/main/java/gregtech/api/util/OverlayedFluidHandler.java index ece86333d65..d2d0dafb239 100644 --- a/src/main/java/gregtech/api/util/OverlayedFluidHandler.java +++ b/src/main/java/gregtech/api/util/OverlayedFluidHandler.java @@ -1,7 +1,6 @@ package gregtech.api.util; import gregtech.api.capability.IMultipleTankHandler; -import gregtech.api.capability.IMultipleTankHandler.MultiFluidTankEntry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidTankProperties; @@ -22,9 +21,9 @@ public class OverlayedFluidHandler { public OverlayedFluidHandler(@NotNull IMultipleTankHandler tank) { this.overlayedTanks = new ArrayList<>(); - MultiFluidTankEntry[] entries = tank.getFluidTanks().toArray(new MultiFluidTankEntry[0]); + var entries = tank.getFluidTanks().toArray(new IMultipleTankHandler.ITankEntry[0]); Arrays.sort(entries, IMultipleTankHandler.ENTRY_COMPARATOR); - for (MultiFluidTankEntry fluidTank : entries) { + for (var fluidTank : entries) { for (IFluidTankProperties property : fluidTank.getTankProperties()) { this.overlayedTanks.add(new OverlayedTank(property, fluidTank.allowSameFluidFill())); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java index 148f40613f0..7efd88c5471 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiblockNotifiablePart.java @@ -61,7 +61,7 @@ private List getPartHandlers() { FluidTankList fluidTankList = getFluidHandlers(); if (fluidTankList != null) { for (IFluidTank fluidTank : fluidTankList) { - if (fluidTank instanceof IMultipleTankHandler.MultiFluidTankEntry entry) { + if (fluidTank instanceof IMultipleTankHandler.ITankEntry entry) { fluidTank = entry.getDelegate(); } if (fluidTank instanceof INotifiableHandler) { diff --git a/src/test/java/gregtech/api/capability/impl/FluidTankListTest.java b/src/test/java/gregtech/api/capability/impl/FluidTankListTest.java index a734933b9fe..c6a04043724 100644 --- a/src/test/java/gregtech/api/capability/impl/FluidTankListTest.java +++ b/src/test/java/gregtech/api/capability/impl/FluidTankListTest.java @@ -1,7 +1,6 @@ package gregtech.api.capability.impl; import gregtech.Bootstrap; -import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.unification.material.Materials; import gregtech.api.util.OverlayedFluidHandler; @@ -409,7 +408,7 @@ FluidHandlerTester expectContents(@NotNull FluidStack... optionalFluidStacks) { "expected: " + this.tank.getTanks() + ", provided: " + optionalFluidStacks.length); } for (int i = 0; i < optionalFluidStacks.length; i++) { - IMultipleTankHandler.MultiFluidTankEntry tank = this.tank.getTankAt(i); + var tank = this.tank.getTankAt(i); if (!eq(tank.getFluid(), optionalFluidStacks[i])) { throw new AssertionError("Contents of the tank don't match expected state.\n" + "Expected: [\n " + Arrays.stream(optionalFluidStacks) From b669d562969342954040a8a742e96991988afcfc Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 17 Aug 2024 16:02:00 -0700 Subject: [PATCH 090/112] add overloaded method fix distinct fluids --- .../impl/MultiblockRecipeLogic.java | 25 ++++++++++++++++--- .../RecipeMapMultiblockController.java | 23 ++++++++++------- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index ea78dc36f91..ba6cae067e0 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -1,6 +1,7 @@ package gregtech.api.capability.impl; import gregtech.api.GTValues; +import gregtech.api.capability.DualHandler; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.IMultiblockController; import gregtech.api.capability.IMultipleRecipeMaps; @@ -99,6 +100,21 @@ protected IMultipleTankHandler getInputTank() { return controller.getInputFluidInventory(); } + /** + * Overload of {@link #getInputTank()} to gather extra fluid tanks + * that could exist in a distinct item handler (such as a {@link DualHandler}) + * + * @param items Handler to gather fluid tanks from + * @return a new FluidTankList with extra fluid tanks on top of the existing fluid tanks + */ + protected IMultipleTankHandler getInputTank(IItemHandler items) { + var tanks = new ArrayList<>(getInputTank().getFluidTanks()); + if (items instanceof IMultipleTankHandler tankHandler) { + tanks.addAll(tankHandler.getFluidTanks()); + } + return new FluidTankList(getInputTank().allowSameFluidFill(), tanks); + } + @Override protected IMultipleTankHandler getOutputTank() { RecipeMapMultiblockController controller = (RecipeMapMultiblockController) metaTileEntity; @@ -222,7 +238,7 @@ protected void trySearchNewRecipeDistinct() { continue; } // Look for a new recipe after a cache miss - currentRecipe = findRecipe(maxVoltage, bus, getInputTank()); + currentRecipe = findRecipe(maxVoltage, bus, getInputTank(bus)); // Cache the current recipe, if one is found if (currentRecipe != null && checkRecipe(currentRecipe)) { this.previousRecipe = currentRecipe; @@ -252,7 +268,7 @@ public void invalidateInputs() { } protected boolean checkPreviousRecipeDistinct(IItemHandlerModifiable previousBus) { - return previousRecipe != null && previousRecipe.matches(false, previousBus, getInputTank()); + return previousRecipe != null && previousRecipe.matches(false, previousBus, getInputTank(previousBus)); } protected boolean prepareRecipeDistinct(Recipe recipe) { @@ -262,14 +278,15 @@ protected boolean prepareRecipeDistinct(Recipe recipe) { recipe = findParallelRecipe( recipe, currentDistinctInputBus, - getInputTank(), + getInputTank(currentDistinctInputBus), getOutputInventory(), getOutputTank(), getMaxParallelVoltage(), getParallelLimit()); if (recipe != null) { - recipe = setupAndConsumeRecipeInputs(recipe, currentDistinctInputBus, getInputTank()); + recipe = setupAndConsumeRecipeInputs(recipe, currentDistinctInputBus, + getInputTank(currentDistinctInputBus)); if (recipe != null) { setupRecipe(recipe); return true; diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 21aaf1ad934..05662a1ec20 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -48,6 +48,7 @@ public abstract class RecipeMapMultiblockController extends MultiblockWithDispla protected IItemHandlerModifiable outputInventory; protected IMultipleTankHandler inputFluidInventory; protected IMultipleTankHandler outputFluidInventory; + protected IMultipleTankHandler extendedFluidInputs; protected IEnergyContainer energyContainer; private boolean isDistinct = false; @@ -75,7 +76,10 @@ public IItemHandlerModifiable getOutputInventory() { } public IMultipleTankHandler getInputFluidInventory() { - return inputFluidInventory; + // if distinct, return the normal input fluid inventory, + // as recipe logic handles gathering extra fluids + // if not distinct, return all the fluids instead + return isDistinct() ? inputFluidInventory : extendedFluidInputs; } public IMultipleTankHandler getOutputFluidInventory() { @@ -121,9 +125,12 @@ public boolean isActive() { protected void initializeAbilities() { this.inputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.IMPORT_ITEMS)); - this.inputFluidInventory = createFluidList(MultiblockAbility.IMPORT_ITEMS, MultiblockAbility.IMPORT_FLUIDS); + this.inputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), + getAbilities(MultiblockAbility.IMPORT_FLUIDS)); + this.extendedFluidInputs = extendedImportFluidList(this.inputFluidInventory); this.outputInventory = new ItemHandlerList(getAbilities(MultiblockAbility.EXPORT_ITEMS)); - this.outputFluidInventory = createFluidList(MultiblockAbility.EXPORT_ITEMS, MultiblockAbility.EXPORT_FLUIDS); + this.outputFluidInventory = new FluidTankList(allowSameFluidFillForOutputs(), + getAbilities(MultiblockAbility.EXPORT_FLUIDS)); List inputEnergy = new ArrayList<>(getAbilities(MultiblockAbility.INPUT_ENERGY)); inputEnergy.addAll(getAbilities(MultiblockAbility.SUBSTATION_INPUT_ENERGY)); @@ -139,11 +146,9 @@ private void resetTileAbilities() { this.energyContainer = new EnergyContainerList(Lists.newArrayList()); } - protected IMultipleTankHandler createFluidList(MultiblockAbility items, - MultiblockAbility fluids) { - var tanks = new AbilityInstances(fluids); - tanks.addAll(getAbilities(fluids)); - for (var handler : getAbilities(items)) { + protected IMultipleTankHandler extendedImportFluidList(IMultipleTankHandler fluids) { + List tanks = new ArrayList<>(fluids.getFluidTanks()); + for (var handler : getAbilities(MultiblockAbility.IMPORT_ITEMS)) { if (handler instanceof IFluidTank tank) { tanks.add(tank); } else if (handler instanceof IMultipleTankHandler multipleTankHandler) { @@ -151,7 +156,7 @@ protected IMultipleTankHandler createFluidList(MultiblockAbility Date: Sat, 17 Aug 2024 16:53:26 -0700 Subject: [PATCH 091/112] remove unnecessary overrides --- .../gregtech/api/capability/impl/FluidTankList.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/FluidTankList.java b/src/main/java/gregtech/api/capability/impl/FluidTankList.java index 0ac625f934c..2895b0c0cee 100644 --- a/src/main/java/gregtech/api/capability/impl/FluidTankList.java +++ b/src/main/java/gregtech/api/capability/impl/FluidTankList.java @@ -1,7 +1,6 @@ package gregtech.api.capability.impl; import gregtech.api.capability.IFilter; -import gregtech.api.capability.IFilteredFluidContainer; import gregtech.api.capability.IMultipleTankHandler; import net.minecraft.nbt.NBTTagCompound; @@ -277,16 +276,6 @@ public IFluidTank getDelegate() { return delegate; } - public boolean allowSameFluidFill() { - return tank.allowSameFluidFill(); - } - - @Nullable - @Override - public IFilter getFilter() { - return this.delegate instanceof IFilteredFluidContainer filtered ? filtered.getFilter() : null; - } - @NotNull public IFluidTankProperties[] getTankProperties() { return delegate instanceof IFluidHandler fluidHandler ? From 84b4350f72d33ab5a64fe6770fafca6621fbb56c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:19:56 -0700 Subject: [PATCH 092/112] spotless --- src/main/java/gregtech/api/util/GTUtility.java | 1 - .../multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index e746448bb97..42da3a04836 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -64,7 +64,6 @@ import java.util.AbstractList; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Map.Entry; diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java index 7f0bf1830ee..c70e83674cd 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/hpca/MetaTileEntityHPCAComponent.java @@ -5,7 +5,6 @@ import gregtech.api.capability.IHPCAComponentHatch; import gregtech.api.capability.IHPCAComputationProvider; import gregtech.api.capability.IHPCACoolantProvider; -import gregtech.api.gui.ModularUI; import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; From 91d627d3617cff5a3b6e0dd6bb284847df8da522 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:29:01 -0700 Subject: [PATCH 093/112] add javadoc spotless --- .../metatileentity/multiblock/IMultiblockAbilityPart.java | 7 +++++++ .../multi/multiblockpart/MetaTileEntityEnergyHatch.java | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index 8a9b23dbbe7..dcc6e9b501e 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -27,5 +27,12 @@ public interface IMultiblockAbilityPart extends IMultiblockPart { return getAbility() == null ? Collections.emptyList() : Collections.singletonList(getAbility()); } + /** + * Register abilities to the multiblock here + *
+ * Check {@link AbilityInstances#isKey(MultiblockAbility)} if you return a list of abilities + * + * @param abilityInstances list to register abilities to + */ void registerAbilities(@NotNull AbilityInstances abilityInstances); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java index deb3dd38bf8..489afffac1f 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityEnergyHatch.java @@ -35,7 +35,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.lang.ref.WeakReference; import java.util.List; From 45592b1a3a477239fcd1bdd9f84c2dbc4ca5c33a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:31:01 -0700 Subject: [PATCH 094/112] improve javadoc slightly --- .../api/metatileentity/multiblock/IMultiblockAbilityPart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index dcc6e9b501e..dcaeb179d22 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -30,7 +30,7 @@ public interface IMultiblockAbilityPart extends IMultiblockPart { /** * Register abilities to the multiblock here *
- * Check {@link AbilityInstances#isKey(MultiblockAbility)} if you return a list of abilities + * Check {@link AbilityInstances#isKey(MultiblockAbility) AbiliteInstances.isKey()} if you override {@link IMultiblockAbilityPart#getAbilities()} * * @param abilityInstances list to register abilities to */ From e20b0e68054e603607a8888785e4041c0bbde441 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 31 Dec 2024 17:08:28 -0700 Subject: [PATCH 095/112] improve javadoc slightly clarify existing check at set use simple name instead of class string --- .../multiblock/AbilityInstances.java | 15 ++++++++++++--- .../multiblock/IMultiblockAbilityPart.java | 3 ++- .../multiblock/MultiblockAbility.java | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 56f2333ecd7..5f69ac57bde 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -1,5 +1,7 @@ package gregtech.api.metatileentity.multiblock; +import gregtech.api.util.GTLog; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -100,7 +102,8 @@ protected boolean canAdd(Object o) { public void add(int index, Object element) { if (!key.checkType(element)) throw new IllegalArgumentException( - String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), + String.format("element \"%s\" does not extend/implement \"%s\"", + element.getClass().getSimpleName(), this.key.getType())); if (!instances.contains(element)) instances.add(index, element); @@ -117,10 +120,16 @@ public void add(int index, Object element) { public Object set(int index, Object element) { if (!key.checkType(element)) throw new IllegalArgumentException( - String.format("element's class \"%s\" is not of type \"%s\"", element.getClass(), + String.format("element \"%s\" does not extend/implement \"%s\"", + element.getClass().getSimpleName(), this.key.getType())); - if (instances.contains(element)) + + int existing = instances.indexOf(element); + if (existing != -1) { + GTLog.logger.warn("attempted to set \"{}\" at index {} when we already have it at {}", + element.getClass().getSimpleName(), index, existing); return null; + } return instances.set(index, element); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java index dcaeb179d22..d66334adf4c 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockAbilityPart.java @@ -30,7 +30,8 @@ public interface IMultiblockAbilityPart extends IMultiblockPart { /** * Register abilities to the multiblock here *
- * Check {@link AbilityInstances#isKey(MultiblockAbility) AbiliteInstances.isKey()} if you override {@link IMultiblockAbilityPart#getAbilities()} + * Check {@link AbilityInstances#isKey(MultiblockAbility) AbiliteInstances.isKey()} if you override + * {@link IMultiblockAbilityPart#getAbilities()} * * @param abilityInstances list to register abilities to */ diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index 1a9eac30790..8ce0e0d7273 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -125,7 +125,7 @@ public boolean checkType(Object o) { } public String getType() { - return this.clazz.toString(); + return this.clazz.getSimpleName(); } public @Nullable T checkAndCast(Object o) { From 4ba053640fb1409eef2f9cc169ff541a1538af86 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 31 Dec 2024 17:13:00 -0700 Subject: [PATCH 096/112] d --- .../api/metatileentity/multiblock/AbilityInstances.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index 5f69ac57bde..d9c2517bb3c 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -110,7 +110,7 @@ public void add(int index, Object element) { } /** - * Replaces the element at the index. Will throw and exception if the element is not what the key expects. + * Replaces the element at the index. Will throw an exception if the element is not what the key expects. * * @param index index of the element to replace * @param element element to be stored at the specified position From 10300daf826c3cf943b9aec3e2ef9ed7869d1b9d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:30:37 -0700 Subject: [PATCH 097/112] fix rebase --- .../MetaTileEntityFluidHatch.java | 24 +++++-------------- .../MetaTileEntityMultiFluidHatch.java | 1 - 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index 0b62ac8c6d6..fd5de222273 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -19,6 +19,7 @@ import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; +import gregtech.api.mui.widget.GhostCircuitSlotWidget; import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer; import gregtech.common.metatileentities.MetaTileEntities; @@ -293,27 +294,10 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .childIf(isExportHatch, new ToggleButton() .pos(7, 63) .overlay(GTGuiTextures.BUTTON_LOCK) - // todo doing things this way causes flickering if it fails - // due to sync value cache .value(new BooleanSyncValue(this::isLocked, b -> fluidSyncHandler.lockFluid(b, false))) .addTooltip(true, IKey.lang("gregtech.gui.fluid_lock.tooltip.enabled")) .addTooltip(false, IKey.lang("gregtech.gui.fluid_lock.tooltip.disabled"))) -// if (this.circuitInventory != null) { -// SlotWidget circuitSlot = new GhostCircuitSlotWidget(circuitInventory, 0, 124, 62) -// .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.INT_CIRCUIT_OVERLAY); -// builder.widget(circuitSlot.setConsumer(slotWidget -> { -// String configString; -// if (circuitInventory == null || -// circuitInventory.getCircuitValue() == GhostCircuitItemStackHandler.NO_CONFIG) { -// configString = new TextComponentTranslation("gregtech.gui.configurator_slot.no_value") -// .getFormattedText(); -// } else { -// configString = String.valueOf(circuitInventory.getCircuitValue()); -// } -// -// slotWidget.setTooltipText("gregtech.gui.configurator_slot.tooltip", configString); -// })); -// } + // import specific .childIf(!isExportHatch, GTGuiTextures.TANK_ICON.asWidget() .pos(91, 36) @@ -323,6 +307,10 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .background(GTGuiTextures.SLOT, GTGuiTextures.OUT_SLOT_OVERLAY) .slot(new ModularSlot(exportItems, 0) .accessibility(false, true))) + .childIf(!isExportHatch, new GhostCircuitSlotWidget() + .slot(circuitInventory, 0) + .background(GTGuiTextures.SLOT, GTGuiTextures.INT_CIRCUIT_OVERLAY) + .pos(124, 62)) // common ui .child(new RichTextWidget() diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java index 14aa25114cb..2501b75a8db 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMultiFluidHatch.java @@ -41,7 +41,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.ArrayList; import java.util.List; From 626139a91dca27efac5a98e026914d9886e401da Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 13 Jan 2025 20:08:06 -0700 Subject: [PATCH 098/112] use reference equals instead --- .../api/metatileentity/multiblock/MultiblockAbility.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index 8ce0e0d7273..f515806e997 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -114,12 +114,6 @@ public String toString() { return name; } - @Override - public boolean equals(Object obj) { - return obj instanceof MultiblockAbilityother && - this.name.equals(other.name); - } - public boolean checkType(Object o) { return clazz.isAssignableFrom(o.getClass()); } From 0f1d88967d311c6c0c515716afd642f77b6f34bb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:32:54 -0700 Subject: [PATCH 099/112] move circuit inventory to `initializeInventory()` initial sync circuit value --- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index fd5de222273..e9a9e52a188 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -85,6 +85,11 @@ public MetaTileEntityFluidHatch(ResourceLocation metaTileEntityId, int tier, boo this.fluidTank = new HatchFluidTank(getInventorySize(), this, isExportHatch); initializeInventory(); // the fact that this has to be called three times is so dumb this.workingEnabled = true; + } + + @Override + protected void initializeInventory() { + super.initializeInventory(); if (this.hasGhostCircuitInventory()) { this.circuitInventory = new GhostCircuitItemStackHandler(this); this.circuitInventory.addNotifiableMetaTileEntity(this); @@ -190,6 +195,8 @@ public void writeInitialSyncData(PacketBuffer buf) { buf.writeBoolean(workingEnabled); if (isExportHatch) { buf.writeBoolean(locked); + } else { + buf.writeVarInt(this.circuitInventory.getCircuitValue()); } } @@ -199,6 +206,8 @@ public void receiveInitialSyncData(PacketBuffer buf) { this.workingEnabled = buf.readBoolean(); if (isExportHatch) { this.locked = buf.readBoolean(); + } else { + this.circuitInventory.setCircuitValue(buf.readVarInt()); } } From 63188bcb4443db6702b141606e8420b0d053911f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:34:01 -0700 Subject: [PATCH 100/112] switch variable names to match MultiFluidTankEntry --- .../gregtech/api/capability/DualHandler.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index ceab3674089..78c0e46ebc3 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -21,6 +21,7 @@ public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler .compareItem(true) .compareDamage(true) .compareTag(true) + .compareCount(true) .build(); @NotNull IItemHandlerModifiable itemDelegate; @@ -173,24 +174,25 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { public static class DualEntry implements ITankEntry, INotifiableHandler { - private final DualHandler delegate; + @NotNull + private final DualHandler tank; @NotNull - private final ITankEntry tank; + private final ITankEntry delegate; - public DualEntry(DualHandler delegate, ITankEntry tank) { + public DualEntry(@NotNull DualHandler tank, @NotNull ITankEntry delegate) { this.delegate = delegate; this.tank = tank; } @Override public @NotNull IMultipleTankHandler getParent() { - return this.delegate; + return this.tank; } @Override public @NotNull IFluidTank getDelegate() { - return this.tank; + return this.delegate; } @Override @@ -202,7 +204,7 @@ public IFluidTankProperties[] getTankProperties() { public int fill(FluidStack resource, boolean doFill) { int filled = getTank().fill(resource, doFill); if (doFill && filled > 0) - delegate.onContentsChanged(this); + tank.onContentsChanged(this); return filled; } @@ -210,7 +212,7 @@ public int fill(FluidStack resource, boolean doFill) { public FluidStack drain(FluidStack resource, boolean doDrain) { var drained = getTank().drain(resource, doDrain); if (doDrain && drained != null) - delegate.onContentsChanged(this); + tank.onContentsChanged(this); return drained; } @@ -218,22 +220,23 @@ public FluidStack drain(FluidStack resource, boolean doDrain) { public FluidStack drain(int maxDrain, boolean doDrain) { var drained = getTank().drain(maxDrain, doDrain); if (doDrain && drained != null) - delegate.onContentsChanged(this); + tank.onContentsChanged(this); return drained; } + // this method might be redundant private @NotNull ITankEntry getTank() { - return this.tank; + return this.delegate; } @Override public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { - this.delegate.addNotifiableMetaTileEntity(metaTileEntity); + this.tank.addNotifiableMetaTileEntity(metaTileEntity); } @Override public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { - this.delegate.removeNotifiableMetaTileEntity(metaTileEntity); + this.tank.removeNotifiableMetaTileEntity(metaTileEntity); } } } From 7b3485287430f23c2eff728d460e5844e48352dd Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Tue, 21 Jan 2025 14:11:37 -0700 Subject: [PATCH 101/112] use better method --- .../multi/multiblockpart/MetaTileEntityFluidHatch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java index e9a9e52a188..85519ccfda7 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java @@ -207,7 +207,7 @@ public void receiveInitialSyncData(PacketBuffer buf) { if (isExportHatch) { this.locked = buf.readBoolean(); } else { - this.circuitInventory.setCircuitValue(buf.readVarInt()); + setGhostCircuitConfig(buf.readVarInt()); } } From 4e8bc4d6140670df8d34f0ed3cc2f2b205b83bbb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:11:41 -0700 Subject: [PATCH 102/112] add circuit slot to reservoir hatch --- .../MetaTileEntityReservoirHatch.java | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index 42ec8a56862..fa045b5ae8a 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -1,8 +1,10 @@ package gregtech.common.metatileentities.multi.multiblockpart; import gregtech.api.GTValues; +import gregtech.api.capability.IGhostSlotConfigurable; import gregtech.api.capability.impl.FilteredItemHandler; import gregtech.api.capability.impl.FluidTankList; +import gregtech.api.capability.impl.GhostCircuitItemStackHandler; import gregtech.api.capability.impl.NotifiableFluidTank; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; @@ -47,17 +49,24 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; import java.util.List; public class MetaTileEntityReservoirHatch extends MetaTileEntityMultiblockNotifiablePart - implements IMultiblockAbilityPart { + implements IMultiblockAbilityPart, + IGhostSlotConfigurable { private static final int FLUID_AMOUNT = 2_000_000_000; private final InfiniteWaterTank fluidTank; + private GhostCircuitItemStackHandler circuitInventory; public MetaTileEntityReservoirHatch(ResourceLocation metaTileEntityId) { super(metaTileEntityId, GTValues.EV, false); this.fluidTank = new InfiniteWaterTank(getInventorySize(), this); + if (this.hasGhostCircuitInventory()) { + this.circuitInventory = new GhostCircuitItemStackHandler(this); + this.circuitInventory.addNotifiableMetaTileEntity(this); + } initializeInventory(); } @@ -115,13 +124,17 @@ protected IItemHandlerModifiable createExportItemHandler() { } @Override - public MultiblockAbility getAbility() { - return MultiblockAbility.IMPORT_FLUIDS; + public @NotNull List> getAbilities() { + return Arrays.asList(MultiblockAbility.IMPORT_FLUIDS, MultiblockAbility.IMPORT_ITEMS); } @Override public void registerAbilities(@NotNull AbilityInstances abilityInstances) { - abilityInstances.add(fluidTank); + if (abilityInstances.isKey(MultiblockAbility.IMPORT_FLUIDS)) + abilityInstances.add(fluidTank); + else if (abilityInstances.isKey(MultiblockAbility.IMPORT_ITEMS)) { + abilityInstances.add(circuitInventory); + } } @Override @@ -189,6 +202,22 @@ public void addToolUsages(ItemStack stack, @Nullable World world, List t super.addToolUsages(stack, world, tooltip, advanced); } + @Override + public boolean hasGhostCircuitInventory() { + return true; + } + + @Override + public void setGhostCircuitConfig(int config) { + if (this.circuitInventory.getCircuitValue() == config) { + return; + } + this.circuitInventory.setCircuitValue(config); + if (!getWorld().isRemote) { + markDirty(); + } + } + private static class InfiniteWaterTank extends NotifiableFluidTank { public InfiniteWaterTank(int capacity, MetaTileEntity entityToNotify) { From 38a789cbb2b226a0b943fe96a21fcbea92641a60 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:58:19 -0700 Subject: [PATCH 103/112] fix rebase + spotless --- .../multi/multiblockpart/MetaTileEntityMufflerHatch.java | 1 - .../MetaTileEntityPassthroughHatchFluid.java | 1 - .../multiblockpart/MetaTileEntityPassthroughHatchItem.java | 1 - .../multi/multiblockpart/MetaTileEntityReservoirHatch.java | 7 ++++++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java index ba68304173f..c8fea455e34 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityMufflerHatch.java @@ -38,7 +38,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class MetaTileEntityMufflerHatch extends MetaTileEntityMultiblockPart implements diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java index b521d59aa31..14c86351976 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchFluid.java @@ -46,7 +46,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class MetaTileEntityPassthroughHatchFluid extends MetaTileEntityMultiblockPart implements IPassthroughHatch, diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java index eff69d051a8..a5be8680efa 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityPassthroughHatchItem.java @@ -47,7 +47,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class MetaTileEntityPassthroughHatchItem extends MetaTileEntityMultiblockPart implements IPassthroughHatch, diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index fa045b5ae8a..50672f8777a 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -14,6 +14,7 @@ import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.mui.sync.GTFluidSyncHandler; +import gregtech.api.mui.widget.GhostCircuitSlotWidget; import gregtech.client.renderer.texture.Textures; import gregtech.common.mui.widget.GTFluidSlot; @@ -186,7 +187,11 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) .slotGroup("item_inv") .accessibility(false, true)) .background(GTGuiTextures.SLOT, GTGuiTextures.OUT_SLOT_OVERLAY) - .pos(90, 53)); + .pos(90, 53)) + .child(new GhostCircuitSlotWidget() + .slot(circuitInventory, 0) + .background(GTGuiTextures.SLOT, GTGuiTextures.INT_CIRCUIT_OVERLAY) + .pos(124, 62)); } @Override From 37a0dcc21a1c3ae60726741184f28f87a29a137a Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 16 Feb 2025 13:41:42 -0700 Subject: [PATCH 104/112] remove name registry remove unused methods simplify AbilityInstances a bit remove exception throwing remove getAbilitiesModifiable() --- .../multiblock/AbilityInstances.java | 46 +++++-------------- .../multiblock/MultiblockAbility.java | 19 ++++---- .../multiblock/MultiblockControllerBase.java | 6 +-- 3 files changed, 20 insertions(+), 51 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index d9c2517bb3c..b832724fd8b 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -2,11 +2,11 @@ import gregtech.api.util.GTLog; +import it.unimi.dsi.fastutil.objects.AbstractObjectList; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.util.AbstractList; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -16,7 +16,7 @@ * Make sure to use {@link AbilityInstances#isKey(MultiblockAbility)} to check what kind of * instances to add to this list. */ -public class AbilityInstances extends AbstractList { +public class AbilityInstances extends AbstractObjectList { public static final AbilityInstances EMPTY = new AbilityInstances(null) { @@ -31,18 +31,8 @@ protected boolean canAdd(Object o) { } @Override - public void add(int index, Object element) { - // do nothing - } - - @Override - public Object set(int index, Object element) { - return null; - } - - @Override - public Object get(int index) { - return null; + public @NotNull List cast() { + return Collections.emptyList(); } }; @@ -62,13 +52,8 @@ public boolean isKey(MultiblockAbility key) { return this.key.equals(key); } - public @Nullable R getAndCast(int index, MultiblockAbility key) { - return key.checkAndCast(get(index)); - } - - @SuppressWarnings("unchecked") public @NotNull List cast() { - return (List) this; + return this.key.castList(this); } /** @@ -87,10 +72,10 @@ public boolean add(Object o) { if (!canAdd(o) && o instanceof Iterableiterable) { for (var e : iterable) add(size(), e); - return s != size(); + } else { + // otherwise add as normal + add(s, o); } - // otherwise add as normal - add(s, o); return s != size(); } @@ -100,12 +85,7 @@ protected boolean canAdd(Object o) { @Override public void add(int index, Object element) { - if (!key.checkType(element)) - throw new IllegalArgumentException( - String.format("element \"%s\" does not extend/implement \"%s\"", - element.getClass().getSimpleName(), - this.key.getType())); - if (!instances.contains(element)) + if (canAdd(element) && !instances.contains(element)) instances.add(index, element); } @@ -118,11 +98,7 @@ public void add(int index, Object element) { */ @Override public Object set(int index, Object element) { - if (!key.checkType(element)) - throw new IllegalArgumentException( - String.format("element \"%s\" does not extend/implement \"%s\"", - element.getClass().getSimpleName(), - this.key.getType())); + if (!canAdd(element)) return null; int existing = instances.indexOf(element); if (existing != -1) { diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index f515806e997..acf01857545 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -8,17 +8,13 @@ import net.minecraftforge.items.IItemHandlerModifiable; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; -@SuppressWarnings("InstantiationOfUtilityClass") public class MultiblockAbility { - public static final Map> NAME_REGISTRY = new HashMap<>(); public static final Map, List> REGISTRY = new Object2ObjectOpenHashMap<>(); public static final MultiblockAbility EXPORT_ITEMS = ability( @@ -106,7 +102,6 @@ public static MultiblockAbility ability(String name, Class clazz) { public MultiblockAbility(String name, Class clazz) { this.name = name.toLowerCase(); this.clazz = clazz; - NAME_REGISTRY.put(this.name, this); } @Override @@ -118,13 +113,15 @@ public boolean checkType(Object o) { return clazz.isAssignableFrom(o.getClass()); } - public String getType() { - return this.clazz.getSimpleName(); + @SuppressWarnings("unchecked") + public List castList(AbilityInstances instances) { + if (instances.isKey(this)) { + return (List) instances; + } + return null; } - public @Nullable T checkAndCast(Object o) { - if (checkType(o)) - return clazz.cast(o); - else return null; + public String getType() { + return this.clazz.getSimpleName(); } } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index 494ab651b54..b01cb5f36ba 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -410,11 +410,7 @@ public void onRemoval() { } public List getAbilities(MultiblockAbility ability) { - return Collections.unmodifiableList(getAbilitiesModifiable(ability)); - } - - public List getAbilitiesModifiable(MultiblockAbility ability) { - return multiblockAbilities.getOrDefault(ability, AbilityInstances.EMPTY).cast(); + return Collections.unmodifiableList(multiblockAbilities.getOrDefault(ability, AbilityInstances.EMPTY).cast()); } public List getMultiblockParts() { From b5b3485da0bfe3585e95cb0d6831b250a1a43156 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 16 Feb 2025 13:53:01 -0700 Subject: [PATCH 105/112] reset extended fluid inputs --- .../metatileentity/multiblock/RecipeMapMultiblockController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 05662a1ec20..8d1e3147a2a 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -141,6 +141,7 @@ protected void initializeAbilities() { private void resetTileAbilities() { this.inputInventory = new GTItemStackHandler(this, 0); this.inputFluidInventory = new FluidTankList(true); + this.extendedFluidInputs = new FluidTankList(true); this.outputInventory = new GTItemStackHandler(this, 0); this.outputFluidInventory = new FluidTankList(true); this.energyContainer = new EnergyContainerList(Lists.newArrayList()); From d5c355602492233858533d8f441b0199ad46d14d Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 16 Feb 2025 14:02:48 -0700 Subject: [PATCH 106/112] add comment add contains check --- .../multiblock/RecipeMapMultiblockController.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java index 8d1e3147a2a..02ba5655857 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/RecipeMapMultiblockController.java @@ -149,11 +149,16 @@ private void resetTileAbilities() { protected IMultipleTankHandler extendedImportFluidList(IMultipleTankHandler fluids) { List tanks = new ArrayList<>(fluids.getFluidTanks()); + // iterate import items to look for and tanks that we might have missed + // honestly this might not be worth checking because + // it might already be handled in ARL/MRL for (var handler : getAbilities(MultiblockAbility.IMPORT_ITEMS)) { if (handler instanceof IFluidTank tank) { - tanks.add(tank); + if (!tanks.contains(tank)) tanks.add(tank); } else if (handler instanceof IMultipleTankHandler multipleTankHandler) { - tanks.addAll(multipleTankHandler.getFluidTanks()); + for (var tank : multipleTankHandler.getFluidTanks()) { + if (!tanks.contains(tank)) tanks.add(tank); + } } } From 44b6745bec44ff9d46b7fe77644aa88e24510c3c Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sat, 22 Feb 2025 14:26:46 -0700 Subject: [PATCH 107/112] use dual handler in qstorage controller rename delegate methods add annotations add javadoc remove unused method --- .../gregtech/api/capability/DualHandler.java | 67 ++++++++++--------- .../gregtech/api/capability/IDualHandler.java | 7 +- .../multiblock/MultiblockAbility.java | 4 -- .../multiblock/MultiblockControllerBase.java | 5 ++ .../items/behaviors/TricorderBehavior.java | 4 +- ...etaTileEntityQuantumStorageController.java | 55 +++++++-------- 6 files changed, 73 insertions(+), 69 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 78c0e46ebc3..1c23f685841 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -8,6 +8,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.fluids.capability.IFluidTankProperties; +import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.NotNull; @@ -15,18 +16,15 @@ import java.util.ArrayList; import java.util.List; -public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler, INotifiableHandler { +public class DualHandler implements IDualHandler, INotifiableHandler { - private static final ItemStackHashStrategy strategy = ItemStackHashStrategy.builder() - .compareItem(true) - .compareDamage(true) - .compareTag(true) - .compareCount(true) - .build(); @NotNull - IItemHandlerModifiable itemDelegate; + private static final ItemStackHashStrategy strategy = ItemStackHashStrategy.comparingAll(); + + @NotNull + protected IItemHandlerModifiable itemDelegate; @NotNull - IMultipleTankHandler fluidDelegate; + protected IMultipleTankHandler fluidDelegate; private final List unwrapped; @@ -53,14 +51,6 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, this(itemDelegate, new FluidTankList(false, fluidTank), isExport); } - public IItemHandlerModifiable getItemDelegate() { - return this.itemDelegate; - } - - public IMultipleTankHandler getFluidDelegate() { - return this.fluidDelegate; - } - public boolean isExport() { return this.isExport; } @@ -71,12 +61,12 @@ public int getSlots() { } @Override - public ItemStack getStackInSlot(int slot) { + public @NotNull ItemStack getStackInSlot(int slot) { return itemDelegate.getStackInSlot(slot); } @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + public @NotNull ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) { var remainder = itemDelegate.insertItem(slot, stack, simulate); if (!simulate && !strategy.equals(remainder, stack)) onContentsChanged(); @@ -84,7 +74,7 @@ public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { } @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { + public @NotNull ItemStack extractItem(int slot, int amount, boolean simulate) { var extracted = itemDelegate.extractItem(slot, amount, simulate); if (!simulate && !extracted.isEmpty()) onContentsChanged(); @@ -97,7 +87,7 @@ public int getSlotLimit(int slot) { } @Override - public void setStackInSlot(int slot, ItemStack stack) { + public void setStackInSlot(int slot, @NotNull ItemStack stack) { var oldStack = itemDelegate.getStackInSlot(slot); itemDelegate.setStackInSlot(slot, stack); if (!strategy.equals(oldStack, stack)) @@ -172,6 +162,26 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.notifiableEntities.remove(metaTileEntity); } + @Override + public boolean hasFluidTanks() { + return getTanks() > 0; + } + + @Override + public boolean hasItemHandlers() { + return getSlots() > 0; + } + + @Override + public IMultipleTankHandler getDelegateTank() { + return this.fluidDelegate; + } + + @Override + public IItemHandler getDelegatItemHandler() { + return this.itemDelegate; + } + public static class DualEntry implements ITankEntry, INotifiableHandler { @NotNull @@ -191,18 +201,18 @@ public DualEntry(@NotNull DualHandler tank, @NotNull ITankEntry delegate) { } @Override - public @NotNull IFluidTank getDelegate() { + public @NotNull ITankEntry getDelegate() { return this.delegate; } @Override public IFluidTankProperties[] getTankProperties() { - return this.getTank().getTankProperties(); + return this.getDelegate().getTankProperties(); } @Override public int fill(FluidStack resource, boolean doFill) { - int filled = getTank().fill(resource, doFill); + int filled = getDelegate().fill(resource, doFill); if (doFill && filled > 0) tank.onContentsChanged(this); return filled; @@ -210,7 +220,7 @@ public int fill(FluidStack resource, boolean doFill) { @Override public FluidStack drain(FluidStack resource, boolean doDrain) { - var drained = getTank().drain(resource, doDrain); + var drained = getDelegate().drain(resource, doDrain); if (doDrain && drained != null) tank.onContentsChanged(this); return drained; @@ -218,17 +228,12 @@ public FluidStack drain(FluidStack resource, boolean doDrain) { @Override public FluidStack drain(int maxDrain, boolean doDrain) { - var drained = getTank().drain(maxDrain, doDrain); + var drained = getDelegate().drain(maxDrain, doDrain); if (doDrain && drained != null) tank.onContentsChanged(this); return drained; } - // this method might be redundant - private @NotNull ITankEntry getTank() { - return this.delegate; - } - @Override public void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.tank.addNotifiableMetaTileEntity(metaTileEntity); diff --git a/src/main/java/gregtech/api/capability/IDualHandler.java b/src/main/java/gregtech/api/capability/IDualHandler.java index 595efc6a9f2..8b2075a9718 100644 --- a/src/main/java/gregtech/api/capability/IDualHandler.java +++ b/src/main/java/gregtech/api/capability/IDualHandler.java @@ -1,14 +1,15 @@ package gregtech.api.capability; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; -public interface IDualHandler { +public interface IDualHandler extends IItemHandlerModifiable, IMultipleTankHandler { boolean hasFluidTanks(); boolean hasItemHandlers(); - IMultipleTankHandler getFluidTanks(); + IMultipleTankHandler getDelegateTank(); - IItemHandler getItemHandlers(); + IItemHandler getDelegatItemHandler(); } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index acf01857545..f058b53fed4 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -120,8 +120,4 @@ public List castList(AbilityInstances instances) { } return null; } - - public String getType() { - return this.clazz.getSimpleName(); - } } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java index b01cb5f36ba..49b277a4ff2 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java @@ -386,6 +386,11 @@ public void checkStructurePattern() { } } + /** + * Checks if a multiblock ability at a given block pos should be added to the ability instances + * + * @return true if the ability should be added to this multiblocks ability instances + */ protected boolean checkAbilityPart(MultiblockAbility ability, BlockPos pos) { return true; } diff --git a/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java b/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java index 1045603125a..96ae5330aab 100644 --- a/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java +++ b/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java @@ -296,9 +296,9 @@ else if (metaTileEntity instanceof IDataInfoProvider) GTValues.VNF[tier])); var handler = quantumController.getHandler(); list.add(new TextComponentTranslation("behavior.tricorder.quantum_controller.connected_items", - TextFormatting.RED.toString() + handler.getItemHandlers().getSlots())); + TextFormatting.RED.toString() + handler.getDelegatItemHandler().getSlots())); list.add(new TextComponentTranslation("behavior.tricorder.quantum_controller.connected_fluids", - TextFormatting.RED.toString() + handler.getFluidTanks().getTanks())); + TextFormatting.RED.toString() + handler.getDelegateTank().getTanks())); } else if (metaTileEntity instanceof IQuantumStoragestorage) { var qcontrollor = storage.getQuantumController(); if (qcontrollor != null) { diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java index 4bc6473d713..49eb46d499b 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java @@ -1,9 +1,11 @@ package gregtech.common.metatileentities.storage; import gregtech.api.GTValues; +import gregtech.api.capability.DualHandler; import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.IDualHandler; import gregtech.api.capability.IEnergyContainer; +import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.IQuantumController; import gregtech.api.capability.IQuantumStorage; import gregtech.api.capability.impl.EnergyContainerList; @@ -33,6 +35,8 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemStackHandler; import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.ColourMultiplier; @@ -331,7 +335,7 @@ public void rebuildNetwork() { } storage.setDisconnected(); } - handler.rebuildCache(); + handler.markDirty(); onHandlerUpdate(); calculateEnergyUsage(); markDirty(); @@ -440,9 +444,9 @@ public void readFromNBT(NBTTagCompound data) { public T getCapability(@NotNull Capability capability, EnumFacing side) { if (isPowered()) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && handler.hasItemHandlers()) { - return (T) handler.getItemHandlers(); + return (T) handler.getDelegatItemHandler(); } else if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY && handler.hasFluidTanks()) { - return (T) handler.getFluidTanks(); + return (T) handler.getDelegateTank(); } } @@ -461,17 +465,19 @@ public IDualHandler getHandler() { } // todo use DualHandler instead once the multis ability pr is merged - private class QuantumControllerHandler implements IDualHandler { + private class QuantumControllerHandler extends DualHandler { - // IFluidHandler saved values - private FluidTankList fluidTanks; + private static final IItemHandlerModifiable EMPTY_ITEM = new ItemStackHandler(0); + private static final IMultipleTankHandler EMPTY_TANK = new FluidTankList(false); + private boolean dirty = true; - // IItemHandler saved values - private ItemHandlerList itemHandlers; + public QuantumControllerHandler() { + super(EMPTY_ITEM, EMPTY_TANK, true); + } private void invalidate() { - fluidTanks = new FluidTankList(false); - itemHandlers = new ItemHandlerList(Collections.emptyList()); + fluidDelegate = EMPTY_TANK; + itemDelegate = EMPTY_ITEM; } private void rebuildCache() { @@ -487,34 +493,25 @@ private void rebuildCache() { } // todo allow this "allowSameFluidFill" to be configured in this controller? - this.fluidTanks = new FluidTankList(false, fluidTankList); - this.itemHandlers = new ItemHandlerList(itemHandlerList); + this.fluidDelegate = new FluidTankList(false, fluidTankList); + this.itemDelegate = new ItemHandlerList(itemHandlerList); + this.dirty = false; } - @Override - public boolean hasFluidTanks() { - return getFluidTanks().getTanks() > 0; + public void markDirty() { + this.dirty = true; } @Override public boolean hasItemHandlers() { - return !getItemHandlers().getBackingHandlers().isEmpty(); + if (dirty) rebuildCache(); + return super.hasItemHandlers(); } @Override - public FluidTankList getFluidTanks() { - if (fluidTanks == null) { - rebuildCache(); - } - return fluidTanks; - } - - @Override - public ItemHandlerList getItemHandlers() { - if (itemHandlers == null) { - rebuildCache(); - } - return itemHandlers; + public boolean hasFluidTanks() { + if (dirty) rebuildCache(); + return super.hasFluidTanks(); } } } From 7c92696869053c534750d2b218f2dac18cb1da9f Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 23 Feb 2025 09:53:55 -0700 Subject: [PATCH 108/112] remove todo --- .../storage/MetaTileEntityQuantumStorageController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java index 49eb46d499b..3097b31bc37 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java @@ -464,7 +464,6 @@ public IDualHandler getHandler() { return this.handler; } - // todo use DualHandler instead once the multis ability pr is merged private class QuantumControllerHandler extends DualHandler { private static final IItemHandlerModifiable EMPTY_ITEM = new ItemStackHandler(0); From c59751b8a4c21f6098873fd4cf874df7e47f9121 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 23 Feb 2025 15:22:15 -0700 Subject: [PATCH 109/112] check if already wrapped --- src/main/java/gregtech/api/capability/DualHandler.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 1c23f685841..49ba84bd8c2 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -39,8 +39,8 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, this.isExport = isExport; List list = new ArrayList<>(); - for (var tank : this.fluidDelegate) { - list.add(new DualEntry(this, tank)); + for (ITankEntry tank : this.fluidDelegate) { + list.add(wrap(tank)); } this.unwrapped = list; } @@ -51,6 +51,10 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate, this(itemDelegate, new FluidTankList(false, fluidTank), isExport); } + private DualEntry wrap(ITankEntry entry) { + return entry instanceof DualEntry ? (DualEntry) entry : new DualEntry(this, entry); + } + public boolean isExport() { return this.isExport; } From 82c849fc9fde09aad516acf31a15f6f4aa244aa2 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 26 Feb 2025 19:31:00 -0700 Subject: [PATCH 110/112] replace IDualHandler with DualHandler --- .../gregtech/api/capability/DualHandler.java | 23 ++++--------------- .../gregtech/api/capability/IDualHandler.java | 15 ------------ .../api/capability/IQuantumController.java | 2 +- .../items/behaviors/TricorderBehavior.java | 4 ++-- .../MetaTileEntityQuantumExtender.java | 6 ++--- .../storage/MetaTileEntityQuantumProxy.java | 6 ++--- ...etaTileEntityQuantumStorageController.java | 13 ++++------- 7 files changed, 19 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/gregtech/api/capability/IDualHandler.java diff --git a/src/main/java/gregtech/api/capability/DualHandler.java b/src/main/java/gregtech/api/capability/DualHandler.java index 49ba84bd8c2..015017c769e 100644 --- a/src/main/java/gregtech/api/capability/DualHandler.java +++ b/src/main/java/gregtech/api/capability/DualHandler.java @@ -8,7 +8,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.fluids.capability.IFluidTankProperties; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.NotNull; @@ -16,7 +15,7 @@ import java.util.ArrayList; import java.util.List; -public class DualHandler implements IDualHandler, INotifiableHandler { +public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler, INotifiableHandler { @NotNull private static final ItemStackHashStrategy strategy = ItemStackHashStrategy.comparingAll(); @@ -166,24 +165,12 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) { this.notifiableEntities.remove(metaTileEntity); } - @Override - public boolean hasFluidTanks() { - return getTanks() > 0; - } - - @Override - public boolean hasItemHandlers() { - return getSlots() > 0; + public @NotNull IItemHandlerModifiable getItemDelegate() { + return itemDelegate; } - @Override - public IMultipleTankHandler getDelegateTank() { - return this.fluidDelegate; - } - - @Override - public IItemHandler getDelegatItemHandler() { - return this.itemDelegate; + public @NotNull IMultipleTankHandler getFluidDelegate() { + return fluidDelegate; } public static class DualEntry implements ITankEntry, INotifiableHandler { diff --git a/src/main/java/gregtech/api/capability/IDualHandler.java b/src/main/java/gregtech/api/capability/IDualHandler.java deleted file mode 100644 index 8b2075a9718..00000000000 --- a/src/main/java/gregtech/api/capability/IDualHandler.java +++ /dev/null @@ -1,15 +0,0 @@ -package gregtech.api.capability; - -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.IItemHandlerModifiable; - -public interface IDualHandler extends IItemHandlerModifiable, IMultipleTankHandler { - - boolean hasFluidTanks(); - - boolean hasItemHandlers(); - - IMultipleTankHandler getDelegateTank(); - - IItemHandler getDelegatItemHandler(); -} diff --git a/src/main/java/gregtech/api/capability/IQuantumController.java b/src/main/java/gregtech/api/capability/IQuantumController.java index e4ebc31ba22..45acca307c9 100644 --- a/src/main/java/gregtech/api/capability/IQuantumController.java +++ b/src/main/java/gregtech/api/capability/IQuantumController.java @@ -20,7 +20,7 @@ public interface IQuantumController extends ICapabilityProvider { BlockPos getPos(); - IDualHandler getHandler(); + DualHandler getHandler(); boolean isPowered(); diff --git a/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java b/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java index 96ae5330aab..0f8abef5cbe 100644 --- a/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java +++ b/src/main/java/gregtech/common/items/behaviors/TricorderBehavior.java @@ -296,9 +296,9 @@ else if (metaTileEntity instanceof IDataInfoProvider) GTValues.VNF[tier])); var handler = quantumController.getHandler(); list.add(new TextComponentTranslation("behavior.tricorder.quantum_controller.connected_items", - TextFormatting.RED.toString() + handler.getDelegatItemHandler().getSlots())); + TextFormatting.RED.toString() + handler.getItemDelegate().getSlots())); list.add(new TextComponentTranslation("behavior.tricorder.quantum_controller.connected_fluids", - TextFormatting.RED.toString() + handler.getDelegateTank().getTanks())); + TextFormatting.RED.toString() + handler.getFluidDelegate().getTanks())); } else if (metaTileEntity instanceof IQuantumStoragestorage) { var qcontrollor = storage.getQuantumController(); if (qcontrollor != null) { diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumExtender.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumExtender.java index cc37c7385ca..8e06b8d6f38 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumExtender.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumExtender.java @@ -1,7 +1,7 @@ package gregtech.common.metatileentities.storage; +import gregtech.api.capability.DualHandler; import gregtech.api.capability.GregtechDataCodes; -import gregtech.api.capability.IDualHandler; import gregtech.api.gui.ModularUI; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; @@ -21,7 +21,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; -public class MetaTileEntityQuantumExtender extends MetaTileEntityQuantumStorage { +public class MetaTileEntityQuantumExtender extends MetaTileEntityQuantumStorage { public MetaTileEntityQuantumExtender(ResourceLocation metaTileEntityId) { super(metaTileEntityId); @@ -69,7 +69,7 @@ public Type getType() { } @Override - public IDualHandler getTypeValue() { + public DualHandler getTypeValue() { return null; } diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumProxy.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumProxy.java index 42deb4d91aa..a3ca7fa92d5 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumProxy.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumProxy.java @@ -1,6 +1,6 @@ package gregtech.common.metatileentities.storage; -import gregtech.api.capability.IDualHandler; +import gregtech.api.capability.DualHandler; import gregtech.api.capability.IQuantumController; import gregtech.api.gui.ModularUI; import gregtech.api.metatileentity.MetaTileEntity; @@ -24,7 +24,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.Nullable; -public class MetaTileEntityQuantumProxy extends MetaTileEntityQuantumStorage { +public class MetaTileEntityQuantumProxy extends MetaTileEntityQuantumStorage { public MetaTileEntityQuantumProxy(ResourceLocation metaTileEntityId) { super(metaTileEntityId); @@ -89,7 +89,7 @@ public Type getType() { } @Override - public IDualHandler getTypeValue() { + public DualHandler getTypeValue() { var controller = getPoweredController(); if (controller == null) return null; return controller.getHandler(); diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java index 3097b31bc37..978fb816c46 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityQuantumStorageController.java @@ -3,7 +3,6 @@ import gregtech.api.GTValues; import gregtech.api.capability.DualHandler; import gregtech.api.capability.GregtechDataCodes; -import gregtech.api.capability.IDualHandler; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.IQuantumController; @@ -444,9 +443,9 @@ public void readFromNBT(NBTTagCompound data) { public T getCapability(@NotNull Capability capability, EnumFacing side) { if (isPowered()) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && handler.hasItemHandlers()) { - return (T) handler.getDelegatItemHandler(); + return (T) handler.getItemDelegate(); } else if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY && handler.hasFluidTanks()) { - return (T) handler.getDelegateTank(); + return (T) handler.getFluidDelegate(); } } @@ -460,7 +459,7 @@ public void addInformation(ItemStack stack, @Nullable World world, @NotNull List } @Override - public IDualHandler getHandler() { + public DualHandler getHandler() { return this.handler; } @@ -501,16 +500,14 @@ public void markDirty() { this.dirty = true; } - @Override public boolean hasItemHandlers() { if (dirty) rebuildCache(); - return super.hasItemHandlers(); + return getSlots() > 0; } - @Override public boolean hasFluidTanks() { if (dirty) rebuildCache(); - return super.hasFluidTanks(); + return getTanks() > 0; } } } From 707a57e3173acca9f5126cae579a7f5c88ac882b Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Wed, 26 Feb 2025 20:45:03 -0700 Subject: [PATCH 111/112] add various overrides to fix circuit in reservoir hatch --- .../MetaTileEntityReservoirHatch.java | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java index 50672f8777a..83488327c26 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityReservoirHatch.java @@ -11,6 +11,7 @@ import gregtech.api.metatileentity.multiblock.AbilityInstances; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; +import gregtech.api.metatileentity.multiblock.MultiblockControllerBase; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.mui.sync.GTFluidSyncHandler; @@ -21,6 +22,7 @@ import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -64,10 +66,6 @@ public class MetaTileEntityReservoirHatch extends MetaTileEntityMultiblockNotifi public MetaTileEntityReservoirHatch(ResourceLocation metaTileEntityId) { super(metaTileEntityId, GTValues.EV, false); this.fluidTank = new InfiniteWaterTank(getInventorySize(), this); - if (this.hasGhostCircuitInventory()) { - this.circuitInventory = new GhostCircuitItemStackHandler(this); - this.circuitInventory.addNotifiableMetaTileEntity(this); - } initializeInventory(); } @@ -76,6 +74,13 @@ public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) { return new MetaTileEntityReservoirHatch(metaTileEntityId); } + @Override + protected void initializeInventory() { + super.initializeInventory(); + this.circuitInventory = new GhostCircuitItemStackHandler(this); + this.circuitInventory.addNotifiableMetaTileEntity(this); + } + @Override public void update() { super.update(); @@ -223,6 +228,42 @@ public void setGhostCircuitConfig(int config) { } } + @Override + public NBTTagCompound writeToNBT(NBTTagCompound data) { + this.circuitInventory.write(data); + return super.writeToNBT(data); + } + + @Override + public void readFromNBT(NBTTagCompound data) { + this.circuitInventory.read(data); + super.readFromNBT(data); + } + + @Override + public void writeInitialSyncData(PacketBuffer buf) { + super.writeInitialSyncData(buf); + buf.writeVarInt(this.circuitInventory.getCircuitValue()); + } + + @Override + public void receiveInitialSyncData(PacketBuffer buf) { + super.receiveInitialSyncData(buf); + setGhostCircuitConfig(buf.readVarInt()); + } + + @Override + public void addToMultiBlock(MultiblockControllerBase controllerBase) { + super.addToMultiBlock(controllerBase); + this.circuitInventory.addNotifiableMetaTileEntity(controllerBase); + } + + @Override + public void removeFromMultiBlock(MultiblockControllerBase controllerBase) { + super.removeFromMultiBlock(controllerBase); + this.circuitInventory.removeNotifiableMetaTileEntity(controllerBase); + } + private static class InfiniteWaterTank extends NotifiableFluidTank { public InfiniteWaterTank(int capacity, MetaTileEntity entityToNotify) { From 83a4325f7258b52301b4c45f438782dce7f620b1 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Mon, 3 Mar 2025 22:56:39 -0700 Subject: [PATCH 112/112] make cast list not null add toString to instances --- .../api/metatileentity/multiblock/AbilityInstances.java | 5 +++++ .../api/metatileentity/multiblock/MultiblockAbility.java | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java index b832724fd8b..deea075bebf 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/AbilityInstances.java @@ -119,4 +119,9 @@ public Object remove(int index) { public int size() { return instances.size(); } + + @Override + public String toString() { + return String.format("key{%s, %s}", this.key, super.toString()); + } } diff --git a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java index f058b53fed4..340a9bf9e14 100644 --- a/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java +++ b/src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java @@ -8,6 +8,7 @@ import net.minecraftforge.items.IItemHandlerModifiable; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -114,10 +115,11 @@ public boolean checkType(Object o) { } @SuppressWarnings("unchecked") - public List castList(AbilityInstances instances) { + public @NotNull List castList(AbilityInstances instances) { if (instances.isKey(this)) { return (List) instances; } - return null; + throw new IllegalArgumentException("Cannot cast instances of " + instances + " because they are not of " + + this.clazz.getSimpleName() + "!"); } }