use of com.minecolonies.api.inventory.InventoryCitizen in project minecolonies by Minecolonies.
the class BuildingResourcesModule method updateAvailableResources.
/**
* Update the available resources.
* <p>
* which are needed for the build and in the structureBuilder's chest or inventory
*/
private void updateAvailableResources() {
final Set<ICitizenData> set = building.getAllAssignedCitizen();
final ICitizenData data = set.isEmpty() ? null : set.iterator().next();
if (data == null) {
return;
}
data.getEntity().ifPresent(structureBuilder -> {
final InventoryCitizen structureBuilderInventory = data.getInventory();
if (structureBuilderInventory == null) {
return;
}
for (@NotNull final Map.Entry<String, BuildingBuilderResource> entry : neededResources.entrySet()) {
final BuildingBuilderResource resource = entry.getValue();
resource.setAvailable(0);
if (structureBuilderInventory != null) {
resource.addAvailable(InventoryUtils.getItemCountInItemHandler(structureBuilderInventory, stack -> ItemStackUtils.compareItemStacksIgnoreStackSize(stack, resource.getItemStack(), true, true)));
}
if (building.getTileEntity() != null) {
resource.addAvailable(InventoryUtils.getItemCountInItemHandler(building.getCapability(ITEM_HANDLER_CAPABILITY, null).orElseGet(null), stack -> ItemStackUtils.compareItemStacksIgnoreStackSize(stack, resource.getItemStack(), true, true)));
}
if (data.getJob() instanceof IJobWithExternalWorkStations) {
for (final IBuilding station : ((IJobWithExternalWorkStations) data.getJob()).getWorkStations()) {
resource.addAvailable(InventoryUtils.getItemCountInItemHandler(station.getCapability(ITEM_HANDLER_CAPABILITY, null).orElseGet(null), stack -> ItemStackUtils.compareItemStacksIgnoreStackSize(stack, resource.getItemStack(), true, true)));
}
}
}
});
}
use of com.minecolonies.api.inventory.InventoryCitizen in project minecolonies by Minecolonies.
the class AbstractEntityAIBasic method checkForNeededTool.
/**
* Check if we need a tool.
* <p>
* Do not use it to find a pickaxe as it need a minimum level.
*
* @param toolType tool required for block.
* @param minimalLevel the minimal level.
* @return true if we need a tool.
*/
private boolean checkForNeededTool(@NotNull final IToolType toolType, final int minimalLevel) {
final int maxToolLevel = worker.getCitizenColonyHandler().getWorkBuilding().getMaxToolLevel();
final InventoryCitizen inventory = worker.getInventoryCitizen();
if (InventoryUtils.isToolInItemHandler(inventory, toolType, minimalLevel, maxToolLevel)) {
return false;
}
delay += DELAY_RECHECK;
return walkToBuilding() || !retrieveToolInHut(toolType, minimalLevel);
}
use of com.minecolonies.api.inventory.InventoryCitizen in project minecolonies by Minecolonies.
the class AbstractEntityAIBasic method getMostEfficientTool.
/**
* Calculates the most efficient tool to use on that block.
*
* @param target the BlockState to mine
* @param pos the pos it is at.
* @return the slot with the best tool
*/
protected int getMostEfficientTool(@NotNull final BlockState target, final BlockPos pos) {
final IToolType toolType = WorkerUtil.getBestToolForBlock(target, target.getDestroySpeed(world, pos));
final int required = WorkerUtil.getCorrectHarvestLevelForBlock(target);
if (toolType == ToolType.NONE) {
final int heldSlot = worker.getInventoryCitizen().getHeldItemSlot(Hand.MAIN_HAND);
return heldSlot >= 0 ? heldSlot : 0;
}
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 < worker.getInventoryCitizen().getSlots(); i++) {
final ItemStack item = inventory.getStackInSlot(i);
final int level = ItemStackUtils.getMiningLevel(item, toolType);
if (level > -1 && level >= required && level < bestLevel && ItemStackUtils.verifyToolLevel(item, level, required, maxToolLevel)) {
bestSlot = i;
bestLevel = level;
}
}
return bestSlot;
}
use of com.minecolonies.api.inventory.InventoryCitizen in project minecolonies by ldtteam.
the class BuildingResourcesModule method updateAvailableResources.
/**
* Update the available resources.
* <p>
* which are needed for the build and in the structureBuilder's chest or inventory
*/
private void updateAvailableResources() {
final Set<ICitizenData> set = building.getAllAssignedCitizen();
final ICitizenData data = set.isEmpty() ? null : set.iterator().next();
if (data == null) {
return;
}
data.getEntity().ifPresent(structureBuilder -> {
final InventoryCitizen structureBuilderInventory = data.getInventory();
if (structureBuilderInventory == null) {
return;
}
for (@NotNull final Map.Entry<String, BuildingBuilderResource> entry : neededResources.entrySet()) {
final BuildingBuilderResource resource = entry.getValue();
resource.setAvailable(0);
if (structureBuilderInventory != null) {
resource.addAvailable(InventoryUtils.getItemCountInItemHandler(structureBuilderInventory, stack -> ItemStackUtils.compareItemStacksIgnoreStackSize(stack, resource.getItemStack(), true, true)));
}
if (building.getTileEntity() != null) {
resource.addAvailable(InventoryUtils.getItemCountInItemHandler(building.getCapability(ITEM_HANDLER_CAPABILITY, null).orElseGet(null), stack -> ItemStackUtils.compareItemStacksIgnoreStackSize(stack, resource.getItemStack(), true, true)));
}
if (data.getJob() instanceof IJobWithExternalWorkStations) {
for (final IBuilding station : ((IJobWithExternalWorkStations) data.getJob()).getWorkStations()) {
resource.addAvailable(InventoryUtils.getItemCountInItemHandler(station.getCapability(ITEM_HANDLER_CAPABILITY, null).orElseGet(null), stack -> ItemStackUtils.compareItemStacksIgnoreStackSize(stack, resource.getItemStack(), true, true)));
}
}
}
});
}
use of com.minecolonies.api.inventory.InventoryCitizen in project minecolonies by ldtteam.
the class CitizenDataView method deserialize.
@Override
public void deserialize(@NotNull final PacketBuffer buf) {
name = buf.readUtf(32767);
female = buf.readBoolean();
entityId = buf.readInt();
paused = buf.readBoolean();
isChild = buf.readBoolean();
homeBuilding = buf.readBoolean() ? buf.readBlockPos() : null;
workBuilding = buf.readBoolean() ? buf.readBlockPos() : null;
// Attributes
health = buf.readFloat();
maxHealth = buf.readFloat();
saturation = buf.readDouble();
happiness = buf.readDouble();
citizenSkillHandler.read(buf.readNbt());
job = buf.readUtf(32767);
colonyId = buf.readInt();
final CompoundNBT compound = buf.readNbt();
inventory = new InventoryCitizen(this.name, true);
final ListNBT ListNBT = compound.getList("inventory", 10);
this.inventory.read(ListNBT);
this.inventory.setHeldItem(Hand.MAIN_HAND, compound.getInt(TAG_HELD_ITEM_SLOT));
this.inventory.setHeldItem(Hand.OFF_HAND, compound.getInt(TAG_OFFHAND_HELD_ITEM_SLOT));
position = buf.readBlockPos();
citizenChatOptions.clear();
final int size = buf.readInt();
for (int i = 0; i < size; i++) {
final CompoundNBT compoundNBT = buf.readNbt();
final ServerCitizenInteraction handler = (ServerCitizenInteraction) MinecoloniesAPIProxy.getInstance().getInteractionResponseHandlerDataManager().createFrom(this, compoundNBT);
citizenChatOptions.put(handler.getInquiry(), handler);
}
sortedInteractions = citizenChatOptions.values().stream().sorted(Comparator.comparingInt(e -> e.getPriority().getPriority())).collect(Collectors.toList());
citizenHappinessHandler.read(buf.readNbt());
int statusindex = buf.readInt();
statusIcon = statusindex >= 0 ? VisibleCitizenStatus.getForId(statusindex) : null;
if (buf.readBoolean()) {
final IColonyView colonyView = IColonyManager.getInstance().getColonyView(colonyId, Minecraft.getInstance().level.dimension());
jobView = IJobDataManager.getInstance().createViewFrom(colonyView, this, buf);
} else {
jobView = null;
}
children.clear();
siblings.clear();
partner = buf.readInt();
final int siblingsSize = buf.readInt();
for (int i = 0; i < siblingsSize; i++) {
siblings.add(buf.readInt());
}
final int childrenSize = buf.readInt();
for (int i = 0; i < childrenSize; i++) {
children.add(buf.readInt());
}
final String parentA = buf.readUtf();
final String parentB = buf.readUtf();
parents = new Tuple<>(parentA, parentB);
}
Aggregations