diff --git a/gradle.properties b/gradle.properties index ee6d5780e..6d90dbdeb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ aebuild=7 aegroup=appeng aebasename=appliedenergistics2 trousers=trousers_edition -trousersversion=v49o +trousersversion=v49p ######################################################### # Versions # ######################################################### diff --git a/src/main/java/appeng/client/gui/implementations/GuiPartOreDictStorageBus.java b/src/main/java/appeng/client/gui/implementations/GuiPartOreDictStorageBus.java index f544ff305..298b77cf9 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiPartOreDictStorageBus.java +++ b/src/main/java/appeng/client/gui/implementations/GuiPartOreDictStorageBus.java @@ -1,6 +1,9 @@ package appeng.client.gui.implementations; +import appeng.api.config.ActionItems; +import appeng.api.config.Settings; import appeng.client.gui.AEBaseGui; +import appeng.client.gui.widgets.GuiImgButton; import appeng.client.gui.widgets.GuiTabButton; import appeng.client.gui.widgets.MEGuiTextField; import appeng.container.implementations.ContainerPartOreDictStorageBus; @@ -21,6 +24,7 @@ public class GuiPartOreDictStorageBus extends AEBaseGui { PartOreDicStorageBus part; private GuiTabButton priority; + private GuiImgButton partition; private static final Pattern ORE_DICTIONARY_FILTER = Pattern.compile( "\\*?[a-zA-Z0-9_|\\\\+(){,}?!=\\-\\[:\\]&^$]*\\*?" ); private MEGuiTextField searchFieldInputs; @@ -46,6 +50,7 @@ public class GuiPartOreDictStorageBus extends AEBaseGui this.searchFieldInputs.setValidator( str -> ORE_DICTIONARY_FILTER.matcher( str ).matches() ); this.buttonList.add( this.priority = new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRender ) ); + this.buttonList.add( this.partition = new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.ACTIONS, ActionItems.WRENCH ) ); try { @@ -71,6 +76,18 @@ public class GuiPartOreDictStorageBus extends AEBaseGui { NetworkHandler.instance().sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) ); } + if( btn == this.partition ) + { + NetworkHandler.instance().sendToServer( new PacketValueConfig( "StorageBus.Action", "Partition" ) ); + try + { + NetworkHandler.instance().sendToServer( new PacketValueConfig( "OreDictStorageBus.getRegex", "1" ) ); + } + catch( IOException e ) + { + e.printStackTrace(); + } + } } @Override diff --git a/src/main/java/appeng/container/implementations/ContainerPartOreDictStorageBus.java b/src/main/java/appeng/container/implementations/ContainerPartOreDictStorageBus.java index 9d688d8e0..edba3f14d 100644 --- a/src/main/java/appeng/container/implementations/ContainerPartOreDictStorageBus.java +++ b/src/main/java/appeng/container/implementations/ContainerPartOreDictStorageBus.java @@ -1,14 +1,33 @@ package appeng.container.implementations; +import appeng.api.AEApi; +import appeng.api.config.AccessRestriction; +import appeng.api.config.FuzzyMode; +import appeng.api.config.Settings; +import appeng.api.config.StorageFilter; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.channels.IItemStorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; import appeng.container.AEBaseContainer; import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.PacketValueConfig; import appeng.parts.misc.PartOreDicStorageBus; import appeng.util.Platform; +import appeng.util.helpers.ItemHandlerUtil; +import appeng.util.item.AEItemStack; +import appeng.util.item.OreReference; +import appeng.util.iterators.NullIterator; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.oredict.OreDictionary; import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; public class ContainerPartOreDictStorageBus extends AEBaseContainer @@ -32,7 +51,47 @@ public class ContainerPartOreDictStorageBus extends AEBaseContainer } super.detectAndSendChanges(); + } + public void partition() + { + final IMEInventory cellInv = this.part.getInternalHandler(); + + Set oreIDs = new HashSet<>(); + + for( IAEItemStack itemStack : cellInv.getAvailableItems( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList() ) ) + { + OreReference ref = ( (AEItemStack) itemStack ).getOre().orElse( null ); + if( ref != null ) + { + oreIDs.addAll( ref.getOres() ); + } + } + + String oreMatch = "("; + String append = ""; + + for( Iterator it = oreIDs.iterator(); it.hasNext(); ) + { + int oreID = it.next(); + if( it.hasNext() ) + { + append = ")|("; + } + else + { + append = ")"; + } + oreMatch = oreMatch.concat( OreDictionary.getOreName( oreID ) + append ); + } + + if( oreMatch.equals( "(" ) ) + { + oreMatch = ""; + } + part.saveOreMatch( oreMatch ); + + this.detectAndSendChanges(); } public void saveOreMatch( String value ) diff --git a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java index d37a78bfa..e4873253f 100644 --- a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java +++ b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java @@ -276,6 +276,10 @@ public class PacketValueConfig extends AppEngPacket { ( (ContainerFluidStorageBus) c ).partition(); } + else if( c instanceof ContainerPartOreDictStorageBus ) + { + ( (ContainerPartOreDictStorageBus) c ).partition(); + } } else if( this.Value.equals( "Clear" ) ) { diff --git a/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java b/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java index a528eedd3..f38d1f209 100644 --- a/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java @@ -61,7 +61,7 @@ public class PartOreDicStorageBus extends PartStorageBus public void writeToNBT( NBTTagCompound data ) { super.writeToNBT( data ); - data.setString( "oreMatch", oreMatch ); + data.setString( "oreMatch", getOreMatch() ); } @Override