/** * Called to check if the machine can process a certain item. * * @return If the item can be processed. */ private boolean canProcess() { // Check if the item stack in input is null. If yes, it cannot be processed. if (this.machineItemStacks[0] == null) return false; // Otherwise... else { // Save the result of processing to ItemStack. ItemStack itemStack = HexProcessingCrystalSeparator.processing().getProcessingResult(machineItemStacks[0]); // If the result is null, it cannot be processed. if (itemStack == null) return false; // If there are no items in output slot, it can be processed. if (machineItemStacks[1] == null) return true; // If there are items in output slot, but are not same as result, it cannot be processed. if (!machineItemStacks[1].isItemEqual(itemStack)) return false; // Check if more items can fit in the output. If yes, it can be processed. int result = machineItemStacks[1].stackSize + itemStack.stackSize; return result <= getInventoryStackLimit() && result <= machineItemStacks[1].getMaxStackSize(); } }
/** Called to execute the item processing. */ public void processItem() { // If the item can be processed... if (canProcess()) { // Prepare a new ItemStack that is the result of processing. ItemStack itemStack = HexProcessingCrystalSeparator.processing().getProcessingResult(machineItemStacks[0]); // If there are no items in the output, put the result in. if (machineItemStacks[1] == null) machineItemStacks[1] = itemStack.copy(); // If there are items, but are of same type, increment the stack. else if (machineItemStacks[1].getItem() == itemStack.getItem()) machineItemStacks[1].stackSize += itemStack.stackSize; // Reduce the number of items in the input. machineItemStacks[0].stackSize--; // If the amount of items in input is 0, remove the items. if (machineItemStacks[0].stackSize == 0) machineItemStacks[0] = null; } }