diff options
Diffstat (limited to 'src/main/java/gregtech')
-rw-r--r-- | src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java index 645654c609..e13ad191eb 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java @@ -12,7 +12,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -33,6 +35,7 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; @@ -90,6 +93,7 @@ import gregtech.client.GT_SoundLoop; import gregtech.common.GT_Pollution; import gregtech.common.gui.modularui.widget.CheckRecipeResultSyncer; import gregtech.common.items.GT_MetaGenerated_Tool_01; +import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; @@ -1315,31 +1319,32 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity } ArrayList<FluidStack> rList = new ArrayList<>(); + Map<Fluid, FluidStack> inputsFromME = new HashMap<>(); for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { setHatchRecipeMap(tHatch); - if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - for (FluidStack tFluid : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { + if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput multiInputHatch) { + for (FluidStack tFluid : multiInputHatch.getStoredFluid()) { if (tFluid != null) { - // GT_Log.out.print("mf: " + tFluid + "\n"); rList.add(tFluid); } } - } else if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME) { - if (isValidMetaTileEntity(tHatch)) { - for (FluidStack fluidStack : ((GT_MetaTileEntity_Hatch_Input_ME) tHatch).getStoredFluids()) { - if (fluidStack == null) continue; - - rList.add(fluidStack); + } else if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { + for (FluidStack fluidStack : meHatch.getStoredFluids()) { + if (fluidStack != null) { + // Prevent the same fluid from different ME hatches from being recognized + inputsFromME.put(fluidStack.getFluid(), fluidStack); } } } else { if (tHatch.getFillableStack() != null) { - // GT_Log.out.print("sf: " + tHatch.getFillableStack() + "\n"); rList.add(tHatch.getFillableStack()); } } } + if (!inputsFromME.isEmpty()) { + rList.addAll(inputsFromME.values()); + } return rList; } @@ -1356,19 +1361,29 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity } ArrayList<ItemStack> rList = new ArrayList<>(); + Map<GT_Utility.ItemId, ItemStack> inputsFromME = new HashMap<>(); for (GT_MetaTileEntity_Hatch_InputBus tHatch : filterValidMTEs(mInputBusses)) { tHatch.mRecipeMap = getRecipeMap(); IGregTechTileEntity tileEntity = tHatch.getBaseMetaTileEntity(); + boolean isMEBus = tHatch instanceof GT_MetaTileEntity_Hatch_InputBus_ME; for (int i = tileEntity.getSizeInventory() - 1; i >= 0; i--) { ItemStack itemStack = tileEntity.getStackInSlot(i); if (itemStack != null) { - rList.add(itemStack); + if (isMEBus) { + // Prevent the same item from different ME buses from being recognized + inputsFromME.put(GT_Utility.ItemId.createNoCopy(itemStack), itemStack); + } else { + rList.add(itemStack); + } } } } if (getStackInSlot(1) != null && getStackInSlot(1).getUnlocalizedName() .startsWith("gt.integrated_circuit")) rList.add(getStackInSlot(1)); + if (!inputsFromME.isEmpty()) { + rList.addAll(inputsFromME.values()); + } return rList; } |