116 lines
2.7 KiB
Java
116 lines
2.7 KiB
Java
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());
|
|
}
|
|
}
|