use of com.bluepowermod.tile.IFuzzyRetrieving in project BluePower by Qmunity.
the class TubeLogic method retrieveStack.
public boolean retrieveStack(TileEntity target, ForgeDirection dirToRetrieveInto, ItemStack filter, TubeColor color) {
if (tube.getWorld() == null)
return false;
TubeStack stack = new TubeStack(filter, null, color);
stack.setTarget(target, dirToRetrieveInto);
Pair<ForgeDirection, TileEntity> result = getHeadingForItem(stack, false);
if (result == null)
return false;
int fuzzySetting = 0;
if (target instanceof IFuzzyRetrieving) {
fuzzySetting = ((IFuzzyRetrieving) target).getFuzzySetting();
}
ItemStack extractedItem = null;
if (result.getValue() instanceof TileManager) {
// Exception for managers, the result can only end up as a manager if the pulling inventory was
// a manager.
TileEntity managedInventory = ((TileManager) result.getValue()).getTileCache(((TileManager) result.getValue()).getFacingDirection());
extractedItem = IOHelper.extract(managedInventory, result.getKey().getOpposite(), filter, false, false, fuzzySetting);
} else if (filter != null) {
extractedItem = IOHelper.extract(result.getValue(), result.getKey().getOpposite(), filter, !(target instanceof TileManager), false, fuzzySetting);
} else {
extractedItem = IOHelper.extract(result.getValue(), result.getKey().getOpposite(), false);
}
if (extractedItem == null)
throw new IllegalArgumentException("This isn't possible!");
stack = new TubeStack(extractedItem, result.getKey().getOpposite(), color);
stack.setTarget(target, dirToRetrieveInto);
PneumaticTube tube = MultipartCompatibility.getPart(this.tube.getWorld(), result.getValue().xCoord - result.getKey().offsetX, result.getValue().yCoord - result.getKey().offsetY, result.getValue().zCoord - result.getKey().offsetZ, PneumaticTube.class);
if (tube == null)
throw new IllegalArgumentException("wieeeeerd!");
return tube.getLogic().injectStack(stack, result.getKey().getOpposite(), false);
}
Aggregations