Untitled diff

Created Diff never expires
5 removals
220 lines
5 additions
220 lines
package buildcraft.krapht.pipes;
package buildcraft.krapht.pipes;
import aan;
import aan;
import buildcraft.api.EntityPassiveItem;
import buildcraft.api.EntityPassiveItem;
import buildcraft.api.Orientations;
import buildcraft.api.Orientations;
import buildcraft.api.Position;
import buildcraft.api.Position;
import buildcraft.core.Utils;
import buildcraft.core.Utils;
import buildcraft.factory.TileAutoWorkbench;
import buildcraft.api.ISpecialInventory;
import buildcraft.krapht.CraftingTemplate;
import buildcraft.krapht.CraftingTemplate;
import buildcraft.krapht.IBuildCraftProxy;
import buildcraft.krapht.IBuildCraftProxy;
import buildcraft.krapht.ICraftItems;
import buildcraft.krapht.ICraftItems;
import buildcraft.krapht.IRequestItems;
import buildcraft.krapht.IRequestItems;
import buildcraft.krapht.LogisticsOrderManager;
import buildcraft.krapht.LogisticsOrderManager;
import buildcraft.krapht.LogisticsPromise;
import buildcraft.krapht.LogisticsPromise;
import buildcraft.krapht.LogisticsRequest;
import buildcraft.krapht.LogisticsRequest;
import buildcraft.krapht.LogisticsTransaction;
import buildcraft.krapht.LogisticsTransaction;
import buildcraft.krapht.RoutedPipe;
import buildcraft.krapht.RoutedPipe;
import buildcraft.krapht.SimpleServiceLocator;
import buildcraft.krapht.SimpleServiceLocator;
import buildcraft.krapht.logic.LogicCrafting;
import buildcraft.krapht.logic.LogicCrafting;
import buildcraft.krapht.routing.IRouter;
import buildcraft.krapht.routing.IRouter;
import buildcraft.logisticspipes.IRoutedItem;
import buildcraft.logisticspipes.IRoutedItem;
import buildcraft.logisticspipes.IRoutedItem.TransportMode;
import buildcraft.logisticspipes.IRoutedItem.TransportMode;
import buildcraft.logisticspipes.modules.ILogisticsModule;
import buildcraft.logisticspipes.modules.ILogisticsModule;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TileGenericPipe;
import buildcraft.transport.TileGenericPipe;
import core_LogisticsPipes;
import core_LogisticsPipes;
import io;
import io;
import java.io.PrintStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.LinkedList;
import krapht.AdjacentTile;
import krapht.AdjacentTile;
import krapht.InventoryUtil;
import krapht.InventoryUtil;
import krapht.ItemIdentifier;
import krapht.ItemIdentifier;
import krapht.ItemIdentifierStack;
import krapht.ItemIdentifierStack;
import krapht.WorldUtil;
import krapht.WorldUtil;
import kw;
import kw;
import xd;
import xd;
public class PipeItemsCraftingLogistics extends RoutedPipe
public class PipeItemsCraftingLogistics extends RoutedPipe
implements ICraftItems
implements ICraftItems
{
{
private LogisticsOrderManager _orderManager = new LogisticsOrderManager();
private LogisticsOrderManager _orderManager = new LogisticsOrderManager();
private int _extras;
private int _extras;
public PipeItemsCraftingLogistics(int itemID)
public PipeItemsCraftingLogistics(int itemID)
{
{
super(new LogicCrafting(), itemID);
super(new LogicCrafting(), itemID);
}
}
private LinkedList locateCrafters() {
private LinkedList locateCrafters() {
WorldUtil worldUtil = new WorldUtil(this.worldObj, this.xCoord, this.yCoord, this.zCoord);
WorldUtil worldUtil = new WorldUtil(this.worldObj, this.xCoord, this.yCoord, this.zCoord);
LinkedList crafters = new LinkedList();
LinkedList crafters = new LinkedList();
for (AdjacentTile tile : worldUtil.getAdjacentTileEntities()) {
for (AdjacentTile tile : worldUtil.getAdjacentTileEntities()) {
if (((tile.tile instanceof TileGenericPipe)) ||
if (((tile.tile instanceof TileGenericPipe)) ||
(!(tile.tile instanceof io))) continue;
(!(tile.tile instanceof io))) continue;
crafters.add(tile);
crafters.add(tile);
}
}
return crafters;
return crafters;
}
}
private aan extractFromAutoWorkbench(TileAutoWorkbench workbench) {
private aan extractFromISpecialInventory(ISpecialInventory inv) {
return workbench.extractItem(true, Orientations.Unknown);
return inv.extractItem(true, Orientations.Unknown);
}
}
private aan extractFromIInventory(io inv)
private aan extractFromIInventory(io inv)
{
{
InventoryUtil invUtil = new InventoryUtil(inv, false);
InventoryUtil invUtil = new InventoryUtil(inv, false);
LogicCrafting craftingLogic = (LogicCrafting)this.logic;
LogicCrafting craftingLogic = (LogicCrafting)this.logic;
aan itemstack = craftingLogic.getCraftedItem();
aan itemstack = craftingLogic.getCraftedItem();
if (itemstack == null) return null;
if (itemstack == null) return null;
ItemIdentifierStack targetItemStack = ItemIdentifierStack.GetFromStack(itemstack);
ItemIdentifierStack targetItemStack = ItemIdentifierStack.GetFromStack(itemstack);
return invUtil.getSingleItem(targetItemStack.getItem());
return invUtil.getSingleItem(targetItemStack.getItem());
}
}
public void updateEntity()
public void updateEntity()
{
{
super.updateEntity();
super.updateEntity();
if (((!this._orderManager.hasOrders()) && (this._extras < 1)) || (this.worldObj.w() % 6L != 0L)) return;
if (((!this._orderManager.hasOrders()) && (this._extras < 1)) || (this.worldObj.w() % 6L != 0L)) return;
LinkedList crafters = locateCrafters();
LinkedList crafters = locateCrafters();
if (crafters.size() < 1) {
if (crafters.size() < 1) {
this._orderManager.sendFailed();
this._orderManager.sendFailed();
return;
return;
}
}
for (AdjacentTile tile : locateCrafters()) {
for (AdjacentTile tile : locateCrafters()) {
aan extracted = null;
aan extracted = null;
if ((tile.tile instanceof TileAutoWorkbench))
if ((tile.tile instanceof ISpecialInventory))
extracted = extractFromAutoWorkbench((TileAutoWorkbench)tile.tile);
extracted = extractFromISpecialInventory((ISpecialInventory)tile.tile);
else if ((tile.tile instanceof io)) {
else if ((tile.tile instanceof io)) {
extracted = extractFromIInventory((io)tile.tile);
extracted = extractFromIInventory((io)tile.tile);
}
}
if (extracted != null)
if (extracted != null)
while (extracted.a > 0) {
while (extracted.a > 0) {
aan stackToSend = extracted.a(1);
aan stackToSend = extracted.a(1);
Position p = new Position(tile.tile.j, tile.tile.k, tile.tile.l, tile.orientation);
Position p = new Position(tile.tile.j, tile.tile.k, tile.tile.l, tile.orientation);
if (this._orderManager.hasOrders()) {
if (this._orderManager.hasOrders()) {
LogisticsRequest order = this._orderManager.getNextRequest();
LogisticsRequest order = this._orderManager.getNextRequest();
IRoutedItem item = SimpleServiceLocator.buildCraftProxy.CreateRoutedItem(stackToSend, this.worldObj);
IRoutedItem item = SimpleServiceLocator.buildCraftProxy.CreateRoutedItem(stackToSend, this.worldObj);
item.setSource(getRouter().getId());
item.setSource(getRouter().getId());
item.setDestination(order.getDestination().getRouter().getId());
item.setDestination(order.getDestination().getRouter().getId());
item.setTransportMode(IRoutedItem.TransportMode.Active);
item.setTransportMode(IRoutedItem.TransportMode.Active);
super.queueRoutedItem(item, tile.orientation);
super.queueRoutedItem(item, tile.orientation);
this._orderManager.sendSuccessfull(1);
this._orderManager.sendSuccessfull(1);
} else {
} else {
this._extras -= 1;
this._extras -= 1;
System.out.println("Extra dropped, " + this._extras + " remaining");
System.out.println("Extra dropped, " + this._extras + " remaining");
Position entityPos = new Position(p.x + 0.5D, p.y + Utils.getPipeFloorOf(stackToSend), p.z + 0.5D, p.orientation.reverse());
Position entityPos = new Position(p.x + 0.5D, p.y + Utils.getPipeFloorOf(stackToSend), p.z + 0.5D, p.orientation.reverse());
entityPos.moveForwards(0.5D);
entityPos.moveForwards(0.5D);
EntityPassiveItem entityItem = new EntityPassiveItem(this.worldObj, entityPos.x, entityPos.y, entityPos.z, stackToSend);
EntityPassiveItem entityItem = new EntityPassiveItem(this.worldObj, entityPos.x, entityPos.y, entityPos.z, stackToSend);
entityItem.speed = (Utils.pipeNormalSpeed * 10.0F);
entityItem.speed = (Utils.pipeNormalSpeed * 10.0F);
((PipeTransportItems)this.transport).entityEntering(entityItem, entityPos.orientation);
((PipeTransportItems)this.transport).entityEntering(entityItem, entityPos.orientation);
}
}
}
}
}
}
}
}
private ItemIdentifier providedItem() {
private ItemIdentifier providedItem() {
LogicCrafting craftingLogic = (LogicCrafting)this.logic;
LogicCrafting craftingLogic = (LogicCrafting)this.logic;
aan stack = craftingLogic.getCraftedItem();
aan stack = craftingLogic.getCraftedItem();
if (stack == null) return null;
if (stack == null) return null;
return ItemIdentifier.get(stack);
return ItemIdentifier.get(stack);
}
}
public int getCenterTexture()
public int getCenterTexture()
{
{
return core_LogisticsPipes.LOGISTICSPIPE_CRAFTER_TEXTURE;
return core_LogisticsPipes.LOGISTICSPIPE_CRAFTER_TEXTURE;
}
}
public void canProvide(LogisticsTransaction transaction)
public void canProvide(LogisticsTransaction transaction)
{
{
if (!isEnabled()) {
if (!isEnabled()) {
return;
return;
}
}
if (this._extras < 1) return;
if (this._extras < 1) return;
for (LogisticsRequest request : transaction.getRemainingRequests()) {
for (LogisticsRequest request : transaction.getRemainingRequests()) {
ItemIdentifier providedItem = providedItem();
ItemIdentifier providedItem = providedItem();
if (request.getItem() == providedItem) {
if (request.getItem() == providedItem) {
HashMap promised = transaction.getTotalPromised(this);
HashMap promised = transaction.getTotalPromised(this);
int alreadyPromised = promised.containsKey(providedItem) ? ((Integer)promised.get(providedItem)).intValue() : 0;
int alreadyPromised = promised.containsKey(providedItem) ? ((Integer)promised.get(providedItem)).intValue() : 0;
if (alreadyPromised < this._extras) {
if (alreadyPromised < this._extras) {
int remaining = this._extras - alreadyPromised;
int remaining = this._extras - alreadyPromised;
LogisticsPromise promise = new LogisticsPromise();
LogisticsPromise promise = new LogisticsPromise();
promise.item = providedItem;
promise.item = providedItem;
promise.numberOfItems = Math.min(remaining, request.notYetAllocated());
promise.numberOfItems = Math.min(remaining, request.notYetAllocated());
promise.sender = this;
promise.sender = this;
promise.extra = true;
promise.extra = true;
request.addPromise(promise);
request.addPromise(promise);
}
}
}
}
}
}
}
}
public void canCraft(LogisticsTransaction transaction) {
public void canCraft(LogisticsTransaction transaction) {
if (!isEnabled()) {
if (!isEnabled()) {
return;
return;
}
}
LogicCrafting craftingLogic = (LogicCrafting)this.logic;
LogicCrafting craftingLogic = (LogicCrafting)this.logic;
aan stack = craftingLogic.getCraftedItem();
aan stack = craftingLogic.getCraftedItem();
if (stack == null) return;
if (stack == null) return;
CraftingTemplate template = new CraftingTemplate(ItemIdentifierStack.GetFromStack(stack), this);
CraftingTemplate template = new CraftingTemplate(ItemIdentifierStack.GetFromStack(stack), this);
boolean hasSatellite = craftingLogic.isSatelliteConnected();
boolean hasSatellite = craftingLogic.isSatelliteConnected();
for (int i = 0; i < 9; i++) {
for (int i = 0; i < 9; i++) {
aan resourceStack = craftingLogic.getMaterials(i);
aan resourceStack = craftingLogic.getMaterials(i);
if ((resourceStack != null) && (resourceStack.a != 0)) {
if ((resourceStack != null) && (resourceStack.a != 0)) {
if ((i < 6) || (!hasSatellite)) {
if ((i < 6) || (!hasSatellite)) {
template.addRequirement(ItemIdentifierStack.GetFromStack(resourceStack), this);
template.addRequirement(ItemIdentifierStack.GetFromStack(resourceStack), this);
}
}
else {
else {
template.addRequirement(ItemIdentifierStack.GetFromStack(resourceStack), craftingLogic.getSatelliteRouter().getPipe());
template.addRequirement(ItemIdentifierStack.GetFromStack(resourceStack), craftingLogic.getSatelliteRouter().getPipe());
}
}
}
}
}
}
transaction.addCraftingTemplate(template);
transaction.addCraftingTemplate(template);
}
}
public void fullFill(LogisticsPromise promise, IRequestItems destination)
public void fullFill(LogisticsPromise promise, IRequestItems destination)
{
{
if (promise.extra) {
if (promise.extra) {
this._extras -= promise.numberOfItems;
this._extras -= promise.numberOfItems;
}
}
this._orderManager.addOrder(new LogisticsRequest(promise.item, promise.numberOfItems, destination));
this._orderManager.addOrder(new LogisticsRequest(promise.item, promise.numberOfItems, destination));
}
}
public int getAvailableItemCount(ItemIdentifier item)
public int getAvailableItemCount(ItemIdentifier item)
{
{
return 0;
return 0;
}
}
public void registerExtras(int count)
public void registerExtras(int count)
{
{
this._extras += count;
this._extras += count;
System.out.println(count + " extras registered");
System.out.println(count + " extras registered");
}
}
public HashMap getAllItems()
public HashMap getAllItems()
{
{
return new HashMap();
return new HashMap();
}
}
public ItemIdentifier getCraftedItem()
public ItemIdentifier getCraftedItem()
{
{
if (!isEnabled()) {
if (!isEnabled()) {
return null;
return null;
}
}
return providedItem();
return providedItem();
}
}
public ILogisticsModule getLogisticsModule()
public ILogisticsModule getLogisticsModule()
{
{
return null;
return null;
}
}
}
}