package crazypants.enderio.machine.painter; import java.util.List; import java.util.Map; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import crazypants.enderio.ModObject; import crazypants.enderio.machine.AbstractPoweredTaskEntity; import crazypants.enderio.machine.IMachineRecipe; import crazypants.enderio.machine.MachineRecipeInput; import crazypants.enderio.machine.MachineRecipeRegistry; import crazypants.enderio.machine.SlotDefinition; public class TileEntityPainter extends AbstractPoweredTaskEntity implements ISidedInventory { // private static final short MAX_POWER_USE_PER_TICK = 6; public TileEntityPainter() { // 0 = input slot, 1 = paint source, 2 = output slot super(new SlotDefinition(2, 1)); } @Override public boolean canExtractItem(int i, ItemStack itemstack, int j) { return super.canExtractItem(i, itemstack, j) && PainterUtil.isMetadataEquivelent(itemstack, inventory[2]); } @Override public String getInventoryName() { return "Auto Painter"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public boolean isMachineItemValidForSlot(int i, ItemStack itemStack) { if(i > 1) { return false; } if(i == 0) { List<IMachineRecipe> recipes = MachineRecipeRegistry.instance.getRecipesForInput(getMachineName(), MachineRecipeInput.create(i, itemStack)); if(inventory[1] == null) { return !recipes.isEmpty(); } else { for(IMachineRecipe rec : recipes) { if(rec instanceof BasicPainterTemplate) { BasicPainterTemplate temp = (BasicPainterTemplate)rec; if(temp.isValidPaintSource(inventory[1])) { return true; } } } } return false; } if(inventory[0] == null) { Map<String, IMachineRecipe> recipes = MachineRecipeRegistry.instance.getRecipesForMachine(getMachineName()); for(IMachineRecipe rec : recipes.values()) { if(rec instanceof BasicPainterTemplate) { BasicPainterTemplate temp = (BasicPainterTemplate)rec; if(temp.isValidPaintSource(itemStack)) { return true; } } } return PaintSourceValidator.instance.isValidSourceDefault(itemStack); } return MachineRecipeRegistry.instance.getRecipeForInputs(getMachineName(), i == 0 ? MachineRecipeInput.create(0, itemStack) : targetInput(), i == 1 ? MachineRecipeInput.create(1, itemStack) : paintSource()) != null; } @Override public String getMachineName() { return ModObject.blockPainter.unlocalisedName; } private MachineRecipeInput targetInput() { return MachineRecipeInput.create(0, inventory[0]); } private MachineRecipeInput paintSource() { return MachineRecipeInput.create(1, inventory[1]); } @Override protected int getNumCanMerge(ItemStack itemStack, ItemStack result) { if (result == null || !result.isItemEqual(inventory[2])) { // next result is a different item type return 0; } else if (result.hasTagCompound() && inventory[2].hasTagCompound()) { int cookedId = result.getTagCompound().getInteger(BlockPainter.KEY_SOURCE_BLOCK_ID); int invId = inventory[2].getTagCompound().getInteger(BlockPainter.KEY_SOURCE_BLOCK_ID); if (cookedId != invId) { // next result has a different source item than the current one return 0; } } return Math.min(itemStack.getMaxStackSize() - itemStack.stackSize, result.stackSize); } }