use of com.minecolonies.api.tileentities.TileEntityRack in project minecolonies by Minecolonies.
the class InventoryUtils method hasBuildingEnoughElseCount.
/**
* Check if a building has more than a count in stack. Return the count it has if it has less.
*
* @param provider building to check in.
* @param stack the stack to check.
* @return Amount of occurrences of stacks that match the given predicate.
*/
public static int hasBuildingEnoughElseCount(@NotNull final IBuilding provider, @NotNull final ItemStorage stack, final int count) {
int totalCount = 0;
final World world = provider.getColony().getWorld();
for (final BlockPos pos : provider.getContainers()) {
if (WorldUtil.isBlockLoaded(world, pos)) {
final TileEntity entity = world.getBlockEntity(pos);
if (entity instanceof TileEntityRack) {
totalCount += ((TileEntityRack) entity).getCount(stack);
} else if (entity instanceof ChestTileEntity) {
totalCount += getItemCountInProvider(entity, itemStack -> ItemStackUtils.compareItemStacksIgnoreStackSize(itemStack, stack.getItemStack(), !stack.ignoreDamageValue(), !stack.ignoreNBT()));
}
if (totalCount > count) {
return Integer.MAX_VALUE;
}
}
}
return totalCount;
}
use of com.minecolonies.api.tileentities.TileEntityRack in project minecolonies by Minecolonies.
the class BlockMinecoloniesRack method onRemove.
@Override
public void onRemove(BlockState state, @NotNull World worldIn, @NotNull BlockPos pos, BlockState newState, boolean isMoving) {
if (state.getBlock() != newState.getBlock()) {
TileEntity tileEntity = worldIn.getBlockEntity(pos);
if (tileEntity instanceof TileEntityRack) {
TileEntityRack tileEntityRack = (TileEntityRack) tileEntity;
InventoryUtils.dropItemHandler(tileEntityRack.getInventory(), worldIn, tileEntityRack.getBlockPos().getX(), tileEntityRack.getBlockPos().getY(), tileEntityRack.getBlockPos().getZ());
worldIn.updateNeighbourForOutputSignal(pos, this);
}
super.onRemove(state, worldIn, pos, newState, isMoving);
}
}
use of com.minecolonies.api.tileentities.TileEntityRack in project minecolonies by Minecolonies.
the class BlockMinecoloniesRack method spawnAfterBreak.
@Override
public void spawnAfterBreak(final BlockState state, final ServerWorld worldIn, final BlockPos pos, final ItemStack stack) {
final TileEntity tileentity = worldIn.getBlockEntity(pos);
if (tileentity instanceof TileEntityRack) {
final IItemHandler handler = ((AbstractTileEntityRack) tileentity).getInventory();
InventoryUtils.dropItemHandler(handler, worldIn, pos.getX(), pos.getY(), pos.getZ());
}
super.spawnAfterBreak(state, worldIn, pos, stack);
}
use of com.minecolonies.api.tileentities.TileEntityRack in project minecolonies by ldtteam.
the class WindowHutAllInventory method locate.
private void locate(final Button button) {
final int row = stackList.getListElementIndexByPane(button);
final ItemStorage storage = allItems.get(row);
final Set<BlockPos> containerList = new HashSet<>(building.getContainerList());
containerList.add(building.getID());
HighlightManager.clearCategory("inventoryHighlight");
Minecraft.getInstance().player.sendMessage(new TranslationTextComponent("com.minecolonies.coremod.locating"), Minecraft.getInstance().player.getUUID());
close();
for (BlockPos blockPos : containerList) {
final TileEntity rack = Minecraft.getInstance().level.getBlockEntity(blockPos);
if (rack instanceof TileEntityRack) {
int count = ((TileEntityRack) rack).getCount(storage.getItemStack(), storage.ignoreDamageValue(), false);
if (count > 0) {
// Varies the color between yellow(low count) to green(64+)
final int color = 0x00FF00 + 0xFF0000 * Math.max(0, 1 - count / 64);
HighlightManager.addRenderBox("inventoryHighlight", new HighlightManager.TimedBoxRenderData().setPos(blockPos).setRemovalTimePoint(Minecraft.getInstance().level.getGameTime() + 60 * 20).addText("" + count).setColor(color));
}
}
}
}
use of com.minecolonies.api.tileentities.TileEntityRack in project minecolonies by ldtteam.
the class TileEntityWareHouse method searchMostEmptyRack.
/**
* Search for the chest with the least items in it.
*
* @return the tileEntity of this chest.
*/
@Nullable
private TileEntity searchMostEmptyRack() {
int freeSlots = 0;
TileEntity emptiestChest = null;
for (@NotNull final BlockPos pos : getBuilding().getContainers()) {
final TileEntity entity = getLevel().getBlockEntity(pos);
if (entity instanceof TileEntityRack) {
if (((AbstractTileEntityRack) entity).isEmpty()) {
return entity;
}
final int tempFreeSlots = ((AbstractTileEntityRack) entity).getFreeSlots();
if (tempFreeSlots > freeSlots) {
freeSlots = tempFreeSlots;
emptiestChest = entity;
}
}
}
return emptiestChest;
}
Aggregations