use of pneumaticCraft.common.progwidgets.ProgWidgetInventoryExport in project PneumaticCraft by MineMaarten.
the class ProgrammedDroneUtils method deliverItemsAmazonStyle.
public static EntityCreature deliverItemsAmazonStyle(World world, int x, int y, int z, ItemStack... deliveredStacks) {
if (world.isRemote)
return null;
if (deliveredStacks.length == 0)
throw new IllegalArgumentException("You need to deliver at least 1 stack!");
if (deliveredStacks.length > 65)
throw new IllegalArgumentException("You can only deliver up to 65 stacks at once!");
for (ItemStack stack : deliveredStacks) {
if (stack == null)
throw new IllegalArgumentException("You can't supply a null stack to be delivered!");
if (stack.getItem() == null)
throw new IllegalArgumentException("You can't supply a stack with a null item to be delivered!");
}
EntityDrone drone = getChargedDispenserUpgradeDrone(world);
//Program the drone
int startY = world.getHeightValue(x + 30, z) + 30;
drone.setPosition(x + 30, startY, z);
List<IProgWidget> widgets = drone.progWidgets;
ProgWidgetStart start = new ProgWidgetStart();
start.setX(92);
start.setY(41);
widgets.add(start);
ProgWidgetInventoryExport export = new ProgWidgetInventoryExport();
export.setX(92);
export.setY(52);
widgets.add(export);
ProgWidgetDropItem drop = new ProgWidgetDropItem();
drop.setX(92);
drop.setY(74);
widgets.add(drop);
ProgWidgetGoToLocation gotoPiece = new ProgWidgetGoToLocation();
gotoPiece.setX(92);
gotoPiece.setY(96);
widgets.add(gotoPiece);
ProgWidgetSuicide suicide = new ProgWidgetSuicide();
suicide.setX(92);
suicide.setY(107);
widgets.add(suicide);
ProgWidgetArea area = new ProgWidgetArea();
area.setX(107);
area.setY(52);
area.x1 = x;
area.y1 = y;
area.z1 = z;
widgets.add(area);
area = new ProgWidgetArea();
area.setX(107);
area.setY(74);
area.x1 = x;
area.z1 = z;
if (drone.isBlockValidPathfindBlock(x, y, z)) {
for (int i = 0; i < 5 && drone.isBlockValidPathfindBlock(area.x1, i + y + 1, area.z1); i++) {
area.y1 = y + i;
}
} else {
area.y1 = world.getHeightValue(x, z) + 10;
//Worst case scenario, there are definately no blocks here.
if (!drone.isBlockValidPathfindBlock(area.x1, area.y1, area.z1))
area.y1 = 260;
}
widgets.add(area);
area = new ProgWidgetArea();
area.setX(107);
area.setY(96);
area.x1 = x + 30;
area.y1 = startY;
area.z1 = z;
widgets.add(area);
TileEntityProgrammer.updatePuzzleConnections(widgets);
for (int i = 0; i < deliveredStacks.length; i++) {
drone.getInventory().setInventorySlotContents(i, deliveredStacks[i].copy());
}
world.spawnEntityInWorld(drone);
return drone;
}
Aggregations