diff --git a/client/gui/implementations/GuiStorageBus.java b/client/gui/implementations/GuiStorageBus.java index 894e3b366..096f9f733 100644 --- a/client/gui/implementations/GuiStorageBus.java +++ b/client/gui/implementations/GuiStorageBus.java @@ -8,6 +8,7 @@ import net.minecraft.entity.player.InventoryPlayer; import org.lwjgl.input.Mouse; import appeng.api.config.AccessRestriction; +import appeng.api.config.ActionItems; import appeng.api.config.FuzzyMode; import appeng.api.config.Settings; import appeng.client.gui.widgets.GuiImgButton; @@ -19,6 +20,7 @@ import appeng.core.sync.GuiBridge; import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.PacketConfigButton; import appeng.core.sync.packets.PacketSwitchGuis; +import appeng.core.sync.packets.PacketValueConfig; import appeng.parts.misc.PartStorageBus; public class GuiStorageBus extends GuiUpgradeable @@ -26,6 +28,8 @@ public class GuiStorageBus extends GuiUpgradeable GuiImgButton rwMode; GuiTabButton priority; + GuiImgButton partition; + GuiImgButton clear; public GuiStorageBus(InventoryPlayer inventoryPlayer, PartStorageBus te) { super( new ContainerStorageBus( inventoryPlayer, te ) ); @@ -54,13 +58,17 @@ public class GuiStorageBus extends GuiUpgradeable @Override protected void addButtons() { - fuzzyMode = new GuiImgButton( this.guiLeft - 18, guiTop + 28, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); - rwMode = new GuiImgButton( this.guiLeft - 18, guiTop + 8, Settings.ACCESS, AccessRestriction.READ_WRITE ); + clear = new GuiImgButton( this.guiLeft - 18, guiTop + 8, Settings.ACTIONS, ActionItems.CLOSE ); + partition = new GuiImgButton( this.guiLeft - 18, guiTop + 28, Settings.ACTIONS, ActionItems.WRENCH ); + rwMode = new GuiImgButton( this.guiLeft - 18, guiTop + 48, Settings.ACCESS, AccessRestriction.READ_WRITE ); + fuzzyMode = new GuiImgButton( this.guiLeft - 18, guiTop + 68, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); buttonList.add( priority = new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), itemRender ) ); buttonList.add( fuzzyMode ); buttonList.add( rwMode ); + buttonList.add( partition ); + buttonList.add( clear ); } @Override @@ -70,23 +78,21 @@ public class GuiStorageBus extends GuiUpgradeable boolean backwards = Mouse.isButtonDown( 1 ); - if ( btn == priority ) - { - try - { - NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) ); - } - catch (IOException e) - { - AELog.error( e ); - } - } try { - if ( btn == fuzzyMode ) + if ( btn == partition ) + NetworkHandler.instance.sendToServer( new PacketValueConfig( "StorageBus.Action", "Partition" ) ); + + else if ( btn == clear ) + NetworkHandler.instance.sendToServer( new PacketValueConfig( "StorageBus.Action", "Clear" ) ); + + else if ( btn == priority ) + NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) ); + + else if ( btn == fuzzyMode ) NetworkHandler.instance.sendToServer( new PacketConfigButton( fuzzyMode.getSetting(), backwards ) ); - if ( btn == rwMode ) + else if ( btn == rwMode ) NetworkHandler.instance.sendToServer( new PacketConfigButton( rwMode.getSetting(), backwards ) ); } catch (IOException e) diff --git a/container/implementations/ContainerStorageBus.java b/container/implementations/ContainerStorageBus.java index 9e1b18d09..65fc75c28 100644 --- a/container/implementations/ContainerStorageBus.java +++ b/container/implementations/ContainerStorageBus.java @@ -1,19 +1,27 @@ package appeng.container.implementations; +import java.util.Iterator; + import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import appeng.api.AEApi; import appeng.api.config.AccessRestriction; import appeng.api.config.FuzzyMode; import appeng.api.config.SecurityPermissions; import appeng.api.config.Settings; import appeng.api.config.Upgrades; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; import appeng.container.slot.OptionalSlotFakeTypeOnly; import appeng.container.slot.SlotFakeTypeOnly; import appeng.container.slot.SlotRestrictedInput; import appeng.container.slot.SlotRestrictedInput.PlaceableItemType; import appeng.parts.misc.PartStorageBus; import appeng.util.Platform; +import appeng.util.iterators.NullIterator; public class ContainerStorageBus extends ContainerUpgradeable { @@ -120,4 +128,40 @@ public class ContainerStorageBus extends ContainerUpgradeable } + public void clear() + { + IInventory inv = myte.getInventoryByName( "config" ); + for (int x = 0; x < inv.getSizeInventory(); x++) + inv.setInventorySlotContents( x, null ); + detectAndSendChanges(); + } + + public void partition() + { + IInventory inv = myte.getInventoryByName( "config" ); + + IMEInventory cellInv = storageBus.getInternalHandler(); + + Iterator i = new NullIterator(); + if ( cellInv != null ) + { + IItemList list = cellInv.getAvailableItems( AEApi.instance().storage().createItemList() ); + i = list.iterator(); + } + + for (int x = 0; x < inv.getSizeInventory(); x++) + { + if ( i.hasNext() && isSlotEnabled( (x / 9) - 2 ) ) + { + ItemStack g = i.next().getItemStack(); + g.stackSize = 1; + inv.setInventorySlotContents( x, g ); + } + else + inv.setInventorySlotContents( x, null ); + } + + detectAndSendChanges(); + } + } diff --git a/core/sync/packets/PacketValueConfig.java b/core/sync/packets/PacketValueConfig.java index bebf8d1c9..4b189aebb 100644 --- a/core/sync/packets/PacketValueConfig.java +++ b/core/sync/packets/PacketValueConfig.java @@ -20,6 +20,7 @@ import appeng.container.implementations.ContainerLevelEmitter; import appeng.container.implementations.ContainerPriority; import appeng.container.implementations.ContainerQuartzKnife; import appeng.container.implementations.ContainerSecurity; +import appeng.container.implementations.ContainerStorageBus; import appeng.core.sync.AppEngPacket; import appeng.core.sync.network.INetworkInfo; @@ -66,6 +67,21 @@ public class PacketValueConfig extends AppEngPacket lvc.setLevel( Long.parseLong( Value ), player ); return; } + else if ( Name.startsWith( "StorageBus." ) && c instanceof ContainerStorageBus ) + { + ContainerStorageBus ccw = (ContainerStorageBus) c; + if ( Name.equals( "StorageBus.Action" ) ) + { + if ( Value.equals( "Partition" ) ) + { + ccw.partition(); + } + else if ( Value.equals( "Clear" ) ) + { + ccw.clear(); + } + } + } else if ( Name.startsWith( "CellWorkbench." ) && c instanceof ContainerCellWorkbench ) { ContainerCellWorkbench ccw = (ContainerCellWorkbench) c;