use of me.desht.pneumaticcraft.common.progwidgets.ICountWidget in project pnc-repressurized by TeamPneumatic.
the class DroneEntityAIInventoryExport method export.
private boolean export(BlockPos pos, boolean simulate) {
TileEntity te = drone.world().getTileEntity(pos);
if (te != null) {
for (int i = 0; i < drone.getInv().getSlots(); i++) {
ItemStack droneStack = drone.getInv().getStackInSlot(i);
if (!droneStack.isEmpty()) {
if (widget.isItemValidForFilters(droneStack)) {
for (int side = 0; side < 6; side++) {
if (((ISidedWidget) widget).getSides()[side]) {
droneStack = droneStack.copy();
int oldCount = droneStack.getCount();
if (((ICountWidget) widget).useCount()) {
droneStack.setCount(Math.min(droneStack.getCount(), getRemainingCount()));
}
ItemStack remainder = IOHelper.insert(te, droneStack.copy(), EnumFacing.getFront(side), simulate);
int stackSize = drone.getInv().getStackInSlot(i).getCount() - (remainder.isEmpty() ? droneStack.getCount() : droneStack.getCount() - remainder.getCount());
droneStack.setCount(stackSize);
int exportedItems = oldCount - stackSize;
if (!simulate) {
drone.getInv().setStackInSlot(i, stackSize > 0 ? droneStack : ItemStack.EMPTY);
decreaseCount(exportedItems);
}
if (simulate && exportedItems > 0)
return true;
// if (!(inv instanceof ISidedInventory))
// break; //doing it for every side for no side sensitive inventories would be a waste.
}
}
if (droneStack.isEmpty() && !simulate)
drone.addAir(null, -PneumaticValues.DRONE_USAGE_INV);
else
drone.addDebugEntry("gui.progWidget.inventoryExport.debug.filledToMax", pos);
} else {
drone.addDebugEntry("gui.progWidget.inventoryExport.debug.stackdoesntPassFilter", pos);
}
}
}
} else {
drone.addDebugEntry("gui.progWidget.inventory.debug.noInventory", pos);
}
return false;
}
use of me.desht.pneumaticcraft.common.progwidgets.ICountWidget in project pnc-repressurized by TeamPneumatic.
the class DroneEntityAIInventoryImport method importItems.
private boolean importItems(BlockPos pos, boolean simulate) {
TileEntity te = drone.world().getTileEntity(pos);
boolean[] sides = ((ISidedWidget) widget).getSides();
for (int d = 0; d < sides.length; d++) {
if (!sides[d]) {
continue;
}
IItemHandler inv = IOHelper.getInventoryForTE(te, EnumFacing.getFront(d));
if (inv == null) {
continue;
}
for (int i = 0; i < inv.getSlots(); i++) {
ItemStack stack = inv.getStackInSlot(i);
if (!stack.isEmpty()) {
if (widget.isItemValidForFilters(stack)) {
ItemStack importedStack = IOHelper.extract(inv, i, true);
if (importedStack.isEmpty()) {
continue;
}
if (((ICountWidget) widget).useCount())
importedStack.setCount(Math.min(importedStack.getCount(), getRemainingCount()));
ItemStack remainder = IOHelper.insert(drone, importedStack.copy(), EnumFacing.UP, simulate);
int removedItems = importedStack.getCount() - remainder.getCount();
if (!simulate) {
inv.extractItem(i, removedItems, false);
decreaseCount(removedItems);
drone.addAir(null, -PneumaticValues.DRONE_USAGE_INV);
if (((ICountWidget) widget).useCount() && getRemainingCount() <= 0) {
return false;
}
} else if (removedItems > 0) {
return true;
} else {
drone.addDebugEntry("gui.progWidget.inventoryImport.debug.filledToMax", pos);
}
} else {
drone.addDebugEntry("gui.progWidget.inventoryImport.debug.stackdoesntPassFilter", pos);
}
}
}
}
return false;
}
use of me.desht.pneumaticcraft.common.progwidgets.ICountWidget in project pnc-repressurized by TeamPneumatic.
the class DroneAILiquidImport method emptyTank.
private boolean emptyTank(BlockPos pos, boolean simulate) {
if (drone.getTank().getFluidAmount() == drone.getTank().getCapacity()) {
drone.addDebugEntry("gui.progWidget.liquidImport.debug.fullDroneTank");
abort();
return false;
} else {
TileEntity te = drone.world().getTileEntity(pos);
if (te != null) {
for (int i = 0; i < 6; i++) {
if (((ISidedWidget) widget).getSides()[i] && te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.getFront(i))) {
IFluidHandler handler = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.getFront(i));
FluidStack importedFluid = handler.drain(Integer.MAX_VALUE, false);
if (importedFluid != null && ((ILiquidFiltered) widget).isFluidValid(importedFluid.getFluid())) {
int filledAmount = drone.getTank().fill(importedFluid, false);
if (filledAmount > 0) {
if (((ICountWidget) widget).useCount())
filledAmount = Math.min(filledAmount, getRemainingCount());
if (!simulate) {
decreaseCount(drone.getTank().fill(handler.drain(filledAmount, true), true));
}
return true;
}
}
}
}
drone.addDebugEntry("gui.progWidget.liquidImport.debug.emptiedToMax", pos);
} else if (!((ICountWidget) widget).useCount() || getRemainingCount() >= 1000) {
Fluid fluid = FluidRegistry.lookupFluidForBlock(drone.world().getBlockState(pos).getBlock());
if (fluid != null && ((ILiquidFiltered) widget).isFluidValid(fluid) && drone.getTank().fill(new FluidStack(fluid, 1000), false) == 1000 && FluidUtils.isSourceBlock(drone.world(), pos)) {
if (!simulate) {
decreaseCount(1000);
drone.getTank().fill(new FluidStack(fluid, 1000), true);
drone.world().setBlockToAir(pos);
}
return true;
}
}
return false;
}
}
Aggregations