diff --git a/parts/automation/PartExportBus.java b/parts/automation/PartExportBus.java index 3b709938..a9f3d057 100644 --- a/parts/automation/PartExportBus.java +++ b/parts/automation/PartExportBus.java @@ -4,16 +4,22 @@ import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.Vec3; +import appeng.api.config.Actionable; import appeng.api.config.FuzzyMode; import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; import appeng.api.networking.IGridNode; +import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.ticking.IGridTickable; import appeng.api.networking.ticking.TickRateModulation; import appeng.api.parts.IPartCollsionHelper; import appeng.api.parts.IPartRenderHelper; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.data.IAEItemStack; import appeng.client.texture.CableBusTextures; import appeng.core.sync.GuiBridge; +import appeng.me.GridAccessException; +import appeng.util.InventoryAdaptor; import appeng.util.Platform; public class PartExportBus extends PartSharedItemBus implements IGridTickable @@ -60,6 +66,7 @@ public class PartExportBus extends PartSharedItemBus implements IGridTickable @Override public void renderStatic(int x, int y, int z, IPartRenderHelper rh, RenderBlocks renderer) { + rh.useSimpliedRendering( x, y, z, this ); rh.setTexture( CableBusTextures.PartMonitorSides.getIcon(), CableBusTextures.PartMonitorSides.getIcon(), CableBusTextures.PartMonitorBack.getIcon(), is.getIconIndex(), CableBusTextures.PartMonitorSides.getIcon(), CableBusTextures.PartMonitorSides.getIcon() ); @@ -107,8 +114,60 @@ public class PartExportBus extends PartSharedItemBus implements IGridTickable @Override public TickRateModulation tickingRequest(IGridNode node, int TicksSinceLastCall) { - // TODO Auto-generated method stub - return TickRateModulation.SLOWER; + int itemToSend = 1; + boolean didSomething = false; + + try + { + InventoryAdaptor d = getHandler(); + IMEInventory inv = proxy.getStorage().getItemInventory(); + IEnergyGrid energy = proxy.getEnergy(); + + if ( d != null ) + { + for (int x = 0; x < availableSlots(); x++) + { + IAEItemStack ais = config.getAEStackInSlot( x ); + if ( ais != null && itemToSend > 0 ) + { + ItemStack is = ais.getItemStack(); + is.stackSize = itemToSend; + + ItemStack o = d.simulateAdd( ais.getItemStack() ); + int canFit = o == null ? itemToSend : itemToSend - o.stackSize; + + if ( canFit > 0 ) + { + ais = ais.copy(); + ais.setStackSize( canFit ); + IAEItemStack itemsToAdd = Platform.poweredExtraction( energy, inv, ais ); + + if ( itemsToAdd != null ) + { + itemToSend -= itemsToAdd.getStackSize(); + + ItemStack failed = d.addItems( itemsToAdd.getItemStack() ); + if ( failed != null ) + { + ais.setStackSize( failed.stackSize ); + inv.injectItems( ais, Actionable.MODULATE ); + } + else + didSomething = true; + } + + } + } + } + } + + } + catch (GridAccessException e) + { + // :P + } + + return didSomething ? TickRateModulation.FASTER : TickRateModulation.SLOWER; } }