@Override public int getBlockCount(EntityPlayer player, ItemStack requestor, ItemStack stack, Block block, int meta) { if(requestor != null && requestor.getItem() == this) return 0; return ItemExchangeRod.getInventoryItemCount(player, new InvWrapper(player.getInventoryEnderChest()), stack, block, meta); }
@Nonnull @Override public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { if(!canInsert) { return stack; } return super.insertItem(slot, stack, simulate); }
@Nonnull @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { if(!canExtract) { return ItemStack.EMPTY; } return super.extractItem(slot, amount, simulate); } }
private void setBlockFromInventory(@NotNull final BlockPos location, final Block block, final IBlockState metadata) { final int slot; if (block instanceof BlockLadder) { slot = worker.getCitizenInventoryHandler().findFirstSlotInInventoryWith(block, -1); } else { slot = worker.getCitizenInventoryHandler().findFirstSlotInInventoryWith(block, block.getMetaFromState(metadata)); } if (slot != -1) { new InvWrapper(getInventory()).extractItem(slot, 1, false); //Flag 1+2 is needed for updates world.setBlockState(location, metadata, 0x03); } }
private int findSaplingSlot() { for (int slot = 0; slot < new InvWrapper(getInventory()).getSlots(); slot++) { final ItemStack stack = getInventory().getStackInSlot(slot); if (isCorrectSapling(stack)) { return slot; } } return -1; }
if (InventoryUtils.getItemCountInItemHandler(new InvWrapper(worker.getInventoryCitizen()), EntityAIWorkSmelter::isSmeltableToolOrWeapon) <= 0) getOwnBuilding(), InventoryUtils.findFirstSlotInProviderNotEmptyWith(getOwnBuilding(), EntityAIWorkSmelter::isSmeltableToolOrWeapon), new InvWrapper(worker.getInventoryCitizen())); final int slot = InventoryUtils.findFirstSlotInItemHandlerWith(new InvWrapper(worker.getInventoryCitizen()), EntityAIWorkSmelter::isSmeltableToolOrWeapon); final int slot = InventoryUtils.findFirstSlotInItemHandlerWith(new InvWrapper(worker.getInventoryCitizen()), EntityAIWorkSmelter::isSmeltableToolOrWeapon); final ItemStack stack = new InvWrapper(worker.getInventoryCitizen()).extractItem(slot, 1, false); final Tuple<ItemStack, Integer> materialTuple = getMaterialAndAmount(stack); final ItemStack material = materialTuple.getFirst(); new InvWrapper(worker.getInventoryCitizen()).setStackInSlot(slot, material); if (getOwnBuilding().getBuildingLevel() > 0 && stack.isItemEnchanted() && ENCHANTED_BOOK_CHANCE[getOwnBuilding().getBuildingLevel() - 1] < new Random().nextInt(MAX_ENCHANTED_BOOK_CHANCE)) new InvWrapper(worker.getInventoryCitizen()).insertItem(InventoryUtils.findFirstSlotInItemHandlerWith( new InvWrapper(worker.getInventoryCitizen()), ItemStack::isEmpty), book, false); new InvWrapper(worker.getInventoryCitizen()).setStackInSlot(slot, stack);
new InvWrapper(getInventory()).extractItem(slot, 1, false); if (!ItemStackUtils.isEmpty(container)) new InvWrapper(getInventory()).insertItem(slot, container, false);
final ItemStack ingots = new InvWrapper(furnace).extractItem(RESULT_SLOT, STACKSIZE, false); final int multiplier = ((BuildingSmeltery) getOwnBuilding()).ingotMultiplier(worker.getCitizenData().getLevel(), worker.getRandom()); int amount = ingots.getCount() * multiplier; final ItemStack resultStack = InventoryUtils.addItemStackToItemHandlerWithResult(new InvWrapper(worker.getInventoryCitizen()), copyStack); if (!ItemStackUtils.isEmpty(resultStack)) new InvWrapper(furnace).setStackInSlot(RESULT_SLOT, resultStack); return;
@Override public int getSlots() { return super.getSlots() - 5; }
@SuppressWarnings("deprecation") private void placeSaplings(final int saplingSlot, @NotNull final ItemStack stack, @NotNull final Block block) { while (!job.tree.getStumpLocations().isEmpty()) { final BlockPos pos = job.tree.getStumpLocations().get(0); if ((BlockPosUtil.setBlock(world, pos, block.getStateFromMeta(stack.getMetadata()), 0x02) && getInventory().getStackInSlot(saplingSlot) != null) || Objects.equals(world.getBlockState(pos), block.getStateFromMeta(stack.getMetadata()))) { new InvWrapper(getInventory()).extractItem(saplingSlot, 1, false); job.tree.removeStump(pos); } else { return; } } }
/** * Dump the inventory of a citizen into the warehouse. * Go through all items and search the right chest to dump it in. * * @param inventoryCitizen the inventory of the citizen */ public void dumpInventoryIntoWareHouse(@NotNull final InventoryCitizen inventoryCitizen) { for (int i = 0; i < new InvWrapper(inventoryCitizen).getSlots(); i++) { final ItemStack stack = inventoryCitizen.getStackInSlot(i); if (ItemStackUtils.isEmpty(stack)) { continue; } @Nullable final TileEntity chest = searchRightChestForStack(stack); if (chest == null) { LanguageHandler.sendPlayersMessage(getColony().getMessageEntityPlayers(), COM_MINECOLONIES_COREMOD_WAREHOUSE_FULL); return; } InventoryUtils.transferItemStackIntoNextBestSlotInItemHandler(new InvWrapper(inventoryCitizen), i, chest.getCapability(ITEM_HANDLER_CAPABILITY, null)); } }
@Override public boolean provideBlock(EntityPlayer player, ItemStack requestor, ItemStack stack, Block block, int meta, boolean doit) { if(requestor != null && requestor.getItem() == this) return false; ItemStack istack = ItemExchangeRod.removeFromInventory(player, new InvWrapper(player.getInventoryEnderChest()), stack, block, meta, false); if(!istack.isEmpty()) { boolean mana = ManaItemHandler.requestManaExact(stack, player, COST_PROVIDE, false); if(mana) { if(doit) { ManaItemHandler.requestManaExact(stack, player, COST_PROVIDE, true); ItemExchangeRod.removeFromInventory(player, new InvWrapper(player.getInventoryEnderChest()), stack, block, meta, true); } return true; } } return false; }
/** * Plants the crop at a given location. * * @param item the crop. * @param position the location. * @return true if succesful. */ private boolean plantCrop(final ItemStack item, @NotNull final BlockPos position) { final int slot = worker.getCitizenInventoryHandler().findFirstSlotInInventoryWith(item.getItem(), item.getItemDamage()); if (slot == -1) { return false; } @NotNull final IPlantable seed = (IPlantable) item.getItem(); if ((seed == Items.MELON_SEEDS || seed == Items.PUMPKIN_SEEDS) && prevPos != null && !world.isAirBlock(prevPos.up())) { return true; } world.setBlockState(position.up(), seed.getPlant(world, position)); worker.decreaseSaturationForContinuousAction(); new InvWrapper(getInventory()).extractItem(slot, 1, false); return true; }
/** * Drop the equipment for this entity. */ @Override protected void dropEquipment(final boolean par1, final int par2) { //Drop actual inventory for (int i = 0; i < new InvWrapper(getInventoryCitizen()).getSlots(); i++) { final ItemStack itemstack = getCitizenData().getInventory().getStackInSlot(i); if (ItemStackUtils.getSize(itemstack) > 0) { citizenItemHandler.entityDropItem(itemstack); } } }
@Override @Nonnull public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { if (canInsert(slot) == false) { return stack; } return super.insertItem(slot, stack, simulate); }
@Override @Nonnull public ItemStack extractItem(int slot, int amount, boolean simulate) { if (canExtract(slot) == false) { return ItemStack.EMPTY; } return super.extractItem(slot, amount, simulate); } }
@Nonnull @Override public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float xs, float ys, float zs) { TileEntity tile = world.getTileEntity(pos); if(tile != null) { if(!world.isRemote) { IItemHandler tileInv = null; if(tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side)) tileInv = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side); else if(tile instanceof IInventory) tileInv = new InvWrapper((IInventory) tile); if(tileInv == null) return EnumActionResult.FAIL; IItemHandlerModifiable bagInv = (IItemHandlerModifiable) player.getHeldItem(hand).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); for(int i = 0; i < bagInv.getSlots(); i++) { ItemStack flower = bagInv.getStackInSlot(i); bagInv.setStackInSlot(i, ItemHandlerHelper.insertItemStacked(tileInv, flower, false)); } } return EnumActionResult.SUCCESS; } return EnumActionResult.PASS; }
if (slotAt + MIN_OPEN_SLOTS * 2 >= totalSize) final long openSlots = InventoryUtils.openSlotCount(new InvWrapper(worker.getInventoryCitizen())); if (openSlots < MIN_OPEN_SLOTS * 2) if (amount > 0) final ItemStack activeStack = new InvWrapper(getInventory()).extractItem(slotAt, amount, false); InventoryUtils.transferItemStackIntoNextBestSlotInItemHandler(activeStack, buildingWorker.getCapability(ITEM_HANDLER_CAPABILITY, null));
/** * Calculates the most efficient tool to use * on that block. * * @param target the Block type to mine * @return the slot with the best tool */ protected int getMostEfficientTool(@NotNull final Block target) { final IToolType toolType = WorkerUtil.getBestToolForBlock(target); final int required = WorkerUtil.getCorrectHavestLevelForBlock(target); int bestSlot = -1; int bestLevel = Integer.MAX_VALUE; @NotNull final InventoryCitizen inventory = worker.getInventoryCitizen(); final int maxToolLevel = worker.getCitizenColonyHandler().getWorkBuilding().getMaxToolLevel(); for (int i = 0; i < new InvWrapper(worker.getInventoryCitizen()).getSlots(); i++) { final ItemStack item = inventory.getStackInSlot(i); final int level = ItemStackUtils.getMiningLevel(item, toolType); if (level >= required && level < bestLevel && (toolType == ToolType.NONE || ItemStackUtils.verifyToolLevel(item, level, required, maxToolLevel))) { bestSlot = i; bestLevel = level; } } return bestSlot; }
@Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { Slot containerSlot = getSlot(slot); if(containerSlot == null || !containerSlot.isItemValid(stack)) return stack; return super.insertItem(slot, stack, simulate); }