Skip to content

Commit 0616ad6

Browse files
authored
Merge pull request #46 from repo-alt/feature/OreFilterForCells
Ore dictionary filter support for cells
2 parents 4e9520f + 5a7bcbf commit 0616ad6

File tree

18 files changed

+205
-69
lines changed

18 files changed

+205
-69
lines changed

src/api/java/appeng/api/storage/ICellInventory.java

+2
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,6 @@ public interface ICellInventory extends IMEInventory<IAEItemStack>
117117
* @return the status number for this drive.
118118
*/
119119
int getStatusForCell();
120+
121+
String getOreFilter();
120122
}

src/api/java/appeng/api/storage/ICellWorkbenchItem.java

+12
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,16 @@ public interface ICellWorkbenchItem
6666
* sets the setting on the cell.
6767
*/
6868
void setFuzzyMode( ItemStack is, FuzzyMode fzMode );
69+
70+
/**
71+
* @param is cell item
72+
* @return current ore dictionary filter
73+
*/
74+
String getOreFilter(ItemStack is);
75+
76+
/**
77+
* @param is cell item
78+
* @param filter new ore dictionary filter
79+
*/
80+
void setOreFilter(ItemStack is, String filter);
6981
}

src/main/java/appeng/client/gui/implementations/GuiCellWorkbench.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,13 @@ protected void addButtons()
6161
this.partition = new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.ACTIONS, ActionItems.WRENCH );
6262
this.copyMode = new GuiToggleButton( this.guiLeft - 18, this.guiTop + 48, 11 * 16 + 5, 12 * 16 + 5, GuiText.CopyMode.getLocal(), GuiText.CopyModeDesc.getLocal() );
6363
this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 68, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL );
64+
this.oreFilter = new GuiImgButton( this.guiLeft - 18, this.guiTop + 68, Settings.ACTIONS, ActionItems.ORE_FILTER );
6465

6566
this.buttonList.add( this.fuzzyMode );
6667
this.buttonList.add( this.partition );
6768
this.buttonList.add( this.clear );
6869
this.buttonList.add( this.copyMode );
70+
this.buttonList.add( this.oreFilter );
6971
}
7072

7173
@Override
@@ -130,6 +132,7 @@ protected void handleButtonVisibility()
130132
this.copyMode.setState( this.workbench.getCopyMode() == CopyMode.CLEAR_ON_REMOVE );
131133

132134
boolean hasFuzzy = false;
135+
boolean hasOreFilter = false;
133136
final IInventory inv = this.workbench.getCellUpgradeInventory();
134137
for( int x = 0; x < inv.getSizeInventory(); x++ )
135138
{
@@ -140,9 +143,14 @@ protected void handleButtonVisibility()
140143
{
141144
hasFuzzy = true;
142145
}
146+
if( ( (IUpgradeModule) is.getItem() ).getType( is ) == Upgrades.ORE_FILTER )
147+
{
148+
hasOreFilter = true;
149+
}
143150
}
144151
}
145-
this.fuzzyMode.setVisibility( hasFuzzy );
152+
this.fuzzyMode.setVisibility( !hasOreFilter && hasFuzzy );
153+
this.oreFilter.setVisibility( hasOreFilter );
146154
}
147155

148156
@Override

src/main/java/appeng/client/gui/implementations/GuiOreFilter.java

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import appeng.helpers.IOreFilterable;
1313
import appeng.parts.automation.PartSharedItemBus;
1414
import appeng.parts.misc.PartStorageBus;
15+
import appeng.tile.misc.TileCellWorkbench;
1516
import net.minecraft.client.gui.GuiTextField;
1617
import net.minecraft.entity.player.InventoryPlayer;
1718

@@ -65,6 +66,8 @@ protected void keyTyped(final char character, final int key) {
6566
OriginalGui = GuiBridge.GUI_STORAGEBUS;
6667
else if (target instanceof PartSharedItemBus)
6768
OriginalGui = GuiBridge.GUI_BUS;
69+
else if (target instanceof TileCellWorkbench)
70+
OriginalGui = GuiBridge.GUI_CELL_WORKBENCH;
6871

6972
if (OriginalGui != null)
7073
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( OriginalGui ) );

src/main/java/appeng/container/implementations/ContainerOreFilter.java

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public void setFilter( final String newValue)
4343
@Override
4444
public void detectAndSendChanges()
4545
{
46-
this.verifyPermissions( SecurityPermissions.BUILD, false );
4746
if (Platform.isServer())
4847
this.filter = this.filterHost.getFilter();
4948
super.detectAndSendChanges();

src/main/java/appeng/core/Registration.java

+6
Original file line numberDiff line numberDiff line change
@@ -603,21 +603,27 @@ void postInit( final FMLPostInitializationEvent event )
603603
// Storage Cells
604604
Upgrades.FUZZY.registerItem( items.cell1k(), 1 );
605605
Upgrades.INVERTER.registerItem( items.cell1k(), 1 );
606+
Upgrades.ORE_FILTER.registerItem( items.cell1k(), 1 );
606607

607608
Upgrades.FUZZY.registerItem( items.cell4k(), 1 );
608609
Upgrades.INVERTER.registerItem( items.cell4k(), 1 );
610+
Upgrades.ORE_FILTER.registerItem( items.cell4k(), 1 );
609611

610612
Upgrades.FUZZY.registerItem( items.cell16k(), 1 );
611613
Upgrades.INVERTER.registerItem( items.cell16k(), 1 );
614+
Upgrades.ORE_FILTER.registerItem( items.cell16k(), 1 );
612615

613616
Upgrades.FUZZY.registerItem( items.cell64k(), 1 );
614617
Upgrades.INVERTER.registerItem( items.cell64k(), 1 );
618+
Upgrades.ORE_FILTER.registerItem( items.cell64k(), 1 );
615619

616620
Upgrades.FUZZY.registerItem( items.portableCell(), 1 );
617621
Upgrades.INVERTER.registerItem( items.portableCell(), 1 );
622+
Upgrades.ORE_FILTER.registerItem( items.portableCell(), 1 );
618623

619624
Upgrades.FUZZY.registerItem( items.viewCell(), 1 );
620625
Upgrades.INVERTER.registerItem( items.viewCell(), 1 );
626+
Upgrades.ORE_FILTER.registerItem( items.viewCell(), 1 );
621627

622628
// Storage Bus
623629
Upgrades.FUZZY.registerItem( parts.storageBus(), 1 );

src/main/java/appeng/core/localization/GuiText.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public enum GuiText
8686

8787
NoCraftingJobs, CPUs, FacadeCrafting, inWorldCraftingPresses, ChargedQuartzFind,
8888

89-
Included, Excluded, Partitioned, Precise, Fuzzy,
89+
Included, Excluded, Partitioned, PartitionedOre, Precise, Fuzzy,
9090

9191
// Used in a terminal to indicate that an item is craftable
9292
SmallFontCraft, LargeFontCraft,

src/main/java/appeng/core/sync/GuiBridge.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public enum GuiBridge implements IGuiHandler
155155

156156
GUI_RENAMER( ContainerRenamer.class, ICustomNameObject.class, GuiHostType.WORLD, SecurityPermissions.BUILD ),
157157

158-
GUI_ORE_FILTER( ContainerOreFilter.class, IOreFilterable.class, GuiHostType.WORLD, SecurityPermissions.BUILD );
158+
GUI_ORE_FILTER( ContainerOreFilter.class, IOreFilterable.class, GuiHostType.ITEM_OR_WORLD, null );
159159

160160
private final Class tileClass;
161161
private final Class containerClass;

src/main/java/appeng/items/storage/ItemBasicStorageCell.java

+21-9
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,18 @@ public void addCheckedInformation( final ItemStack stack, final EntityPlayer pla
113113

114114
if( handler.isPreformatted() )
115115
{
116-
final String list = ( handler.getIncludeExcludeMode() == IncludeExclude.WHITELIST ? GuiText.Included : GuiText.Excluded ).getLocal();
117-
118-
if( handler.isFuzzy() )
119-
{
120-
lines.add( GuiText.Partitioned.getLocal() + " - " + list + ' ' + GuiText.Fuzzy.getLocal() );
116+
String filter = cellInventory.getOreFilter();
117+
if (filter.isEmpty()) {
118+
final String list = (handler.getIncludeExcludeMode() == IncludeExclude.WHITELIST ? GuiText.Included : GuiText.Excluded).getLocal();
119+
120+
if (handler.isFuzzy()) {
121+
lines.add(GuiText.Partitioned.getLocal() + " - " + list + ' ' + GuiText.Fuzzy.getLocal());
122+
} else {
123+
lines.add(GuiText.Partitioned.getLocal() + " - " + list + ' ' + GuiText.Precise.getLocal());
124+
}
121125
}
122-
else
123-
{
124-
lines.add( GuiText.Partitioned.getLocal() + " - " + list + ' ' + GuiText.Precise.getLocal() );
126+
else {
127+
lines.add(GuiText.PartitionedOre.getLocal() + " : " + filter);
125128
}
126129
}
127130
}
@@ -220,6 +223,16 @@ public void setFuzzyMode( final ItemStack is, final FuzzyMode fzMode )
220223
Platform.openNbtData( is ).setString( "FuzzyMode", fzMode.name() );
221224
}
222225

226+
@Override
227+
public String getOreFilter(ItemStack is) {
228+
return Platform.openNbtData( is ).getString( "OreFilter" );
229+
}
230+
231+
@Override
232+
public void setOreFilter(ItemStack is, String filter) {
233+
Platform.openNbtData( is ).setString("OreFilter", filter);
234+
}
235+
223236
@Override
224237
public ItemStack onItemRightClick( final ItemStack stack, final World world, final EntityPlayer player )
225238
{
@@ -235,7 +248,6 @@ private boolean disassembleDrive( final ItemStack stack, final World world, fina
235248
{
236249
return false;
237250
}
238-
239251
final InventoryPlayer playerInventory = player.inventory;
240252
final IMEInventoryHandler inv = AEApi.instance().registries().cell().getCellInventory( stack, null, StorageChannel.ITEMS );
241253
if( inv != null && playerInventory.getCurrentItem() == stack )

src/main/java/appeng/items/storage/ItemCreativeStorageCell.java

+9
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,13 @@ public void setFuzzyMode( final ItemStack is, final FuzzyMode fzMode )
6868
{
6969

7070
}
71+
72+
@Override
73+
public String getOreFilter(ItemStack is) {
74+
return "";
75+
}
76+
77+
@Override
78+
public void setOreFilter(ItemStack is, String filter) {
79+
}
7180
}

src/main/java/appeng/items/storage/ItemViewCell.java

+49-34
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,19 @@
2727
import appeng.api.storage.data.IAEItemStack;
2828
import appeng.api.storage.data.IItemList;
2929
import appeng.core.features.AEFeature;
30+
import appeng.core.localization.GuiText;
3031
import appeng.items.AEBaseItem;
3132
import appeng.items.contents.CellConfig;
3233
import appeng.items.contents.CellUpgrades;
3334
import appeng.util.Platform;
3435
import appeng.util.item.AEItemStack;
35-
import appeng.util.prioitylist.FuzzyPriorityList;
36-
import appeng.util.prioitylist.IPartitionList;
37-
import appeng.util.prioitylist.MergedPriorityList;
38-
import appeng.util.prioitylist.PrecisePriorityList;
36+
import appeng.util.prioitylist.*;
37+
import net.minecraft.entity.player.EntityPlayer;
3938
import net.minecraft.inventory.IInventory;
4039
import net.minecraft.item.ItemStack;
4140

4241
import java.util.EnumSet;
42+
import java.util.List;
4343

4444

4545
public class ItemViewCell extends AEBaseItem implements ICellWorkbenchItem
@@ -65,60 +65,58 @@ public static IPartitionList<IAEItemStack> createFilter( final ItemStack[] list
6565

6666
if( ( currentViewCell.getItem() instanceof ItemViewCell ) )
6767
{
68-
final IItemList<IAEItemStack> priorityList = AEApi.instance().storage().createItemList();
69-
7068
final ICellWorkbenchItem vc = (ICellWorkbenchItem) currentViewCell.getItem();
7169
final IInventory upgrades = vc.getUpgradesInventory( currentViewCell );
7270
final IInventory config = vc.getConfigInventory( currentViewCell );
7371
final FuzzyMode fzMode = vc.getFuzzyMode( currentViewCell );
72+
final String filter = vc.getOreFilter(currentViewCell);
7473

7574
boolean hasInverter = false;
7675
boolean hasFuzzy = false;
77-
78-
for( int x = 0; x < upgrades.getSizeInventory(); x++ )
79-
{
80-
final ItemStack is = upgrades.getStackInSlot( x );
81-
if( is != null && is.getItem() instanceof IUpgradeModule )
82-
{
83-
final Upgrades u = ( (IUpgradeModule) is.getItem() ).getType( is );
84-
if( u != null )
85-
{
86-
switch( u )
87-
{
76+
boolean hasOreFilter = false;
77+
for (int x = 0; x < upgrades.getSizeInventory(); x++) {
78+
final ItemStack is = upgrades.getStackInSlot(x);
79+
if (is != null && is.getItem() instanceof IUpgradeModule) {
80+
final Upgrades u = ((IUpgradeModule) is.getItem()).getType(is);
81+
if (u != null) {
82+
switch (u) {
8883
case FUZZY:
8984
hasFuzzy = true;
9085
break;
9186
case INVERTER:
9287
hasInverter = true;
9388
break;
89+
case ORE_FILTER:
90+
hasOreFilter = true;
91+
break;
9492
default:
9593
}
9694
}
9795
}
9896
}
9997

100-
for( int x = 0; x < config.getSizeInventory(); x++ )
101-
{
102-
final ItemStack is = config.getStackInSlot( x );
103-
if( is != null )
104-
{
105-
priorityList.add( AEItemStack.create( is ) );
106-
}
98+
if (hasOreFilter && !filter.isEmpty()) {
99+
myMergedList.addNewList(new OreFilteredList(filter), !hasInverter);
107100
}
101+
else {
102+
final IItemList<IAEItemStack> priorityList = AEApi.instance().storage().createItemList();
108103

109-
if( !priorityList.isEmpty() )
110-
{
111-
if( hasFuzzy )
112-
{
113-
myMergedList.addNewList( new FuzzyPriorityList<IAEItemStack>( priorityList, fzMode ), !hasInverter );
114-
}
115-
else
116-
{
117-
myMergedList.addNewList( new PrecisePriorityList<IAEItemStack>( priorityList ), !hasInverter );
104+
for (int x = 0; x < config.getSizeInventory(); x++) {
105+
final ItemStack is = config.getStackInSlot(x);
106+
if (is != null) {
107+
priorityList.add(AEItemStack.create(is));
108+
}
118109
}
119110

120-
myPartitionList = myMergedList;
111+
if (!priorityList.isEmpty()) {
112+
if (hasFuzzy) {
113+
myMergedList.addNewList(new FuzzyPriorityList<IAEItemStack>(priorityList, fzMode), !hasInverter);
114+
} else {
115+
myMergedList.addNewList(new PrecisePriorityList<IAEItemStack>(priorityList), !hasInverter);
116+
}
117+
}
121118
}
119+
myPartitionList = myMergedList;
122120
}
123121
}
124122

@@ -162,4 +160,21 @@ public void setFuzzyMode( final ItemStack is, final FuzzyMode fzMode )
162160
{
163161
Platform.openNbtData( is ).setString( "FuzzyMode", fzMode.name() );
164162
}
163+
164+
@Override
165+
public String getOreFilter(ItemStack is) {
166+
return Platform.openNbtData( is ).getString( "OreFilter" );
167+
}
168+
169+
@Override
170+
public void setOreFilter(ItemStack is, String filter) {
171+
Platform.openNbtData( is ).setString("OreFilter", filter);
172+
}
173+
@Override
174+
public void addCheckedInformation(final ItemStack stack, final EntityPlayer player, final List<String> lines, final boolean displayMoreInfo )
175+
{
176+
String filter = getOreFilter(stack);
177+
if (!filter.isEmpty())
178+
lines.add(GuiText.PartitionedOre.getLocal() + " : " + filter);
179+
}
165180
}

src/main/java/appeng/items/tools/powered/ToolColorApplicator.java

+10
Original file line numberDiff line numberDiff line change
@@ -554,4 +554,14 @@ public void onWheel( final ItemStack is, final boolean up )
554554
{
555555
this.cycleColors( is, this.getColor( is ), up ? 1 : -1 );
556556
}
557+
558+
@Override
559+
public String getOreFilter(ItemStack is) {
560+
return Platform.openNbtData( is ).getString( "OreFilter" );
561+
}
562+
563+
@Override
564+
public void setOreFilter(ItemStack is, String filter) {
565+
Platform.openNbtData( is ).setString("OreFilter", filter);
566+
}
557567
}

src/main/java/appeng/items/tools/powered/ToolMassCannon.java

+10
Original file line numberDiff line numberDiff line change
@@ -534,4 +534,14 @@ public double getIdleDrain()
534534
{
535535
return 0.5;
536536
}
537+
538+
@Override
539+
public String getOreFilter(ItemStack is) {
540+
return Platform.openNbtData( is ).getString( "OreFilter" );
541+
}
542+
543+
@Override
544+
public void setOreFilter(ItemStack is, String filter) {
545+
Platform.openNbtData( is ).setString("OreFilter", filter);
546+
}
537547
}

src/main/java/appeng/items/tools/powered/ToolPortableCell.java

+10
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,14 @@ public IGuiItemObject getGuiObject( final ItemStack is, final World w, final int
191191
{
192192
return new PortableCellViewer( is, x );
193193
}
194+
195+
@Override
196+
public String getOreFilter(ItemStack is) {
197+
return Platform.openNbtData( is ).getString( "OreFilter" );
198+
}
199+
200+
@Override
201+
public void setOreFilter(ItemStack is, String filter) {
202+
Platform.openNbtData( is ).setString("OreFilter", filter);
203+
}
194204
}

src/main/java/appeng/me/storage/CellInventory.java

+5
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,11 @@ public FuzzyMode getFuzzyMode()
500500
{
501501
return this.cellType.getFuzzyMode( this.cellItem );
502502
}
503+
@Override
504+
public String getOreFilter()
505+
{
506+
return this.cellType.getOreFilter( this.cellItem );
507+
}
503508

504509
@Override
505510
public IInventory getConfigInventory()

0 commit comments

Comments
 (0)