private void handleTileReached(TravelingItem item, TileEntity tile) { if (passToNextPipe(item, tile)) { // NOOP } else if (tile instanceof IInventory) { if (CoreProxy.proxy.isSimulating(container.worldObj)) { if (item.getInsertionHandler().canInsertItem(item, (IInventory) tile)) { ItemStack added = Transactor.getTransactorFor(tile) .add(item.getItemStack(), item.output.getOpposite(), true); item.getItemStack().stackSize -= added.stackSize; } if (item.getItemStack().stackSize > 0) { reverseItem(item); } } } else { if (travelHook != null) { travelHook.drop(this, item); } EntityItem dropped = item.toEntityItem(item.output); if (dropped != null) { // On SMP, the client side doesn't actually drops // items onDropped(dropped); } } }
private void moveSolids() { items.performLoad(); items.performRemoval(); for (TravelingItem item : items) { if (item.isCorrupted()) { items.scheduleRemoval(item); continue; } if (item.getContainer() != this.container) { items.scheduleRemoval(item); continue; } Position motion = new Position(0, 0, 0, item.toCenter ? item.input : item.output); motion.moveForwards(item.getSpeed()); item.movePosition(motion.x, motion.y, motion.z); if ((item.toCenter && middleReached(item)) || outOfBounds(item)) { item.toCenter = false; // Reajusting to the middle item.setPosition( container.xCoord + 0.5, container.yCoord + TransportUtils.getPipeFloorOf(item.getItemStack()), container.zCoord + 0.5); if (item.output == ForgeDirection.UNKNOWN) { if (travelHook != null) { travelHook.drop(this, item); } EntityItem dropped = null; if (items.scheduleRemoval(item)) { dropped = item.toEntityItem(item.input); } if (dropped != null) { onDropped(dropped); } } else { if (travelHook != null) { travelHook.centerReached(this, item); } } } else if (!item.toCenter && endReached(item)) { TileEntity tile = container.getTile(item.output); boolean handleItem = true; if (travelHook != null) { handleItem = !travelHook.endReached(this, item, tile); } // If the item has not been scheduled to removal by the hook if (handleItem && items.scheduleRemoval(item)) { handleTileReached(item, tile); } } } items.performRemoval(); }