| package mekanism.api; |
| |
| import mekanism.api.gas.GasStack; |
| import mekanism.api.gas.GasTank; |
| |
| /** |
| * An input of gasses for recipe use. |
| * @author aidancbrady |
| * |
| */ |
| public class ChemicalPair |
| { |
| /** The left gas of this chemical input */ |
| public GasStack leftGas; |
| |
| /** The right gas of this chemical input */ |
| public GasStack rightGas; |
| |
| /** |
| * Creates a chemical input with two defined gasses. |
| * @param left - left gas |
| * @param right - right gas |
| */ |
| public ChemicalPair(GasStack left, GasStack right) |
| { |
| leftGas = left; |
| rightGas = right; |
| } |
| |
| /** |
| * If this is a valid |
| * @return |
| */ |
| public boolean isValid() |
| { |
| return leftGas != null && rightGas != null; |
| } |
| |
| /** |
| * Whether or not the defined input contains the same gasses and at least the required amount of the defined gasses as this input. |
| * @param input - input to check |
| * @return if the input meets this input's requirements |
| */ |
| public boolean meetsInput(ChemicalPair input) |
| { |
| return meets(input) || meets(input.swap()); |
| } |
| |
| /** |
| * Swaps the right gas and left gas of this input. |
| * @return a swapped ChemicalInput |
| */ |
| public ChemicalPair swap() |
| { |
| return new ChemicalPair(rightGas, leftGas); |
| } |
| |
| /** |
| * Draws the needed amount of gas from each tank. |
| * @param leftTank - left tank to draw from |
| * @param rightTank - right tank to draw from |
| */ |
| public void draw(GasTank leftTank, GasTank rightTank) |
| { |
| if(meets(new ChemicalPair(leftTank.getGas(), rightTank.getGas()))) |
| { |
| leftTank.draw(leftGas.amount, true); |
| rightTank.draw(rightGas.amount, true); |
| } |
| else if(meets(new ChemicalPair(rightTank.getGas(), leftTank.getGas()))) |
| { |
| leftTank.draw(rightGas.amount, true); |
| rightTank.draw(leftGas.amount, true); |
| } |
| } |
| |
| /** |
| * Whether or not one of this ChemicalInput's GasStack entry's gas type is equal to the gas type of the given gas. |
| * @param stack - stack to check |
| * @return if the stack's gas type is contained in this ChemicalInput |
| */ |
| public boolean containsType(GasStack stack) |
| { |
| if(stack == null || stack.amount == 0) |
| { |
| return false; |
| } |
| |
| return stack.isGasEqual(leftGas) || stack.isGasEqual(rightGas); |
| } |
| |
| /** |
| * Actual implementation of meetsInput(), performs the checks. |
| * @param input - input to check |
| * @return if the input meets this input's requirements |
| */ |
| private boolean meets(ChemicalPair input) |
| { |
| if(input == null || !input.isValid()) |
| { |
| return false; |
| } |
| |
| if(input.leftGas.getGas() != leftGas.getGas() || input.rightGas.getGas() != rightGas.getGas()) |
| { |
| return false; |
| } |
| |
| return input.leftGas.amount >= leftGas.amount && input.rightGas.amount >= rightGas.amount; |
| } |
| |
| public ChemicalPair copy() |
| { |
| return new ChemicalPair(leftGas.copy(), rightGas.copy()); |
| } |
| } |