Applied-Energistics-2-tiler.../client/me/ItemRepo.java
AlgorithmX2 929efa5597 Added 4 View Cell Slots.
Multiple View Cells now sum together to allow more customization.
View Cells are now protected by Build Security.
Meteorite Compass now renders correctly in other peoples hands.
2014-03-04 21:12:23 -06:00

244 lines
6.1 KiB
Java

package appeng.client.me;
import java.util.ArrayList;
import java.util.Collections;
import java.util.regex.Pattern;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import appeng.api.AEApi;
import appeng.api.config.FuzzyMode;
import appeng.api.config.Settings;
import appeng.api.config.SortOrder;
import appeng.api.config.Upgrades;
import appeng.api.config.YesNo;
import appeng.api.implementations.items.IUpgradeModule;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.client.gui.widgets.IScrollSource;
import appeng.client.gui.widgets.ISortSource;
import appeng.core.AEConfig;
import appeng.items.storage.ItemViewCell;
import appeng.util.ItemSorters;
import appeng.util.Platform;
import appeng.util.item.AEItemStack;
import appeng.util.prioitylist.FuzzyPriorityList;
import appeng.util.prioitylist.IPartitionList;
import appeng.util.prioitylist.MergedPriorityList;
import appeng.util.prioitylist.PrecisePriorityList;
public class ItemRepo
{
final private IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
final private ArrayList<IAEItemStack> view = new ArrayList<IAEItemStack>();
final private ArrayList<ItemStack> dsp = new ArrayList<ItemStack>();
final private IScrollSource src;
final private ISortSource sortSrc;
public int rowSize = 9;
public String searchString = "";
public ItemRepo(IScrollSource src, ISortSource sortSrc) {
this.src = src;
this.sortSrc = sortSrc;
}
public IAEItemStack getRefrenceItem(int idx)
{
idx += src.getCurrentScroll() * rowSize;
if ( idx >= view.size() )
return null;
return view.get( idx );
}
public ItemStack getItem(int idx)
{
idx += src.getCurrentScroll() * rowSize;
if ( idx >= dsp.size() )
return null;
return dsp.get( idx );
}
void setSearch(String search)
{
searchString = search == null ? "" : search;
}
public void postUpdate(IAEItemStack is)
{
IAEItemStack st = list.findPrecise( is );
if ( st != null )
{
st.reset();
st.add( is );
}
else
list.add( is );
}
IPartitionList<IAEItemStack> myPartitionList;
public void setViewCell(ItemStack[] list)
{
myPartitionList = null;
MergedPriorityList<IAEItemStack> myMergedList = new MergedPriorityList<IAEItemStack>();
for (ItemStack currentViewCell : list)
{
if ( currentViewCell == null )
continue;
if ( (currentViewCell.getItem() instanceof ItemViewCell) )
{
boolean hasInverter = false;
boolean hasFuzzy = false;
IItemList<IAEItemStack> priorityList = AEApi.instance().storage().createItemList();
ItemViewCell vc = (ItemViewCell) currentViewCell.getItem();
IInventory upgrades = vc.getUpgradesInventory( currentViewCell );
IInventory config = vc.getConfigInventory( currentViewCell );
FuzzyMode fzMode = vc.getFuzzyMode( currentViewCell );
hasInverter = false;
hasFuzzy = false;
for (int x = 0; x < upgrades.getSizeInventory(); x++)
{
ItemStack is = upgrades.getStackInSlot( x );
if ( is != null && is.getItem() instanceof IUpgradeModule )
{
Upgrades u = ((IUpgradeModule) is.getItem()).getType( is );
if ( u != null )
{
switch (u)
{
case FUZZY:
hasFuzzy = true;
break;
case INVERTER:
hasInverter = true;
break;
default:
}
}
}
}
for (int x = 0; x < config.getSizeInventory(); x++)
{
ItemStack is = config.getStackInSlot( x );
if ( is != null )
priorityList.add( AEItemStack.create( is ) );
}
if ( !priorityList.isEmpty() )
{
if ( hasFuzzy )
myMergedList.addNewList( new FuzzyPriorityList<IAEItemStack>( priorityList, fzMode ), !hasInverter );
else
myMergedList.addNewList( new PrecisePriorityList<IAEItemStack>( priorityList ), !hasInverter );
myPartitionList = myMergedList;
}
}
}
updateView();
}
public void updateView()
{
view.clear();
dsp.clear();
view.ensureCapacity( list.size() );
dsp.ensureCapacity( list.size() );
boolean terminalSearchToolTips = AEConfig.instance.settings.getSetting( Settings.SEARCH_TOOLTIPS ) != YesNo.NO;
// boolean terminalSearchMods = Configuration.instance.settings.getSetting( Settings.SEARCH_MODS ) != YesNo.NO;
Pattern m = null;
try
{
m = Pattern.compile( searchString.toLowerCase(), Pattern.CASE_INSENSITIVE );
}
catch (Throwable _)
{
try
{
m = Pattern.compile( Pattern.quote( searchString.toLowerCase() ), Pattern.CASE_INSENSITIVE );
}
catch (Throwable __)
{
return;
}
}
boolean notDone = false;
for (IAEItemStack is : list)
{
if ( myPartitionList != null )
{
if ( !myPartitionList.isListed( is ) )
continue;
}
String dspName = Platform.getItemDisplayName( is );
notDone = true;
if ( m.matcher( dspName ).find() )
{
view.add( is );
notDone = false;
}
if ( terminalSearchToolTips && notDone )
{
for (Object lp : Platform.getTooltip( is ))
if ( lp instanceof String && m.matcher( (String) lp ).find() )
{
view.add( is );
notDone = false;
break;
}
}
/*
* if ( terminalSearchMods && notDone ) { if ( m.matcher( Platform.getMod( is.getItemStack() ) ).find() ) {
* view.add( is ); notDone = false; } }
*/
}
Enum SortBy = sortSrc.getSortBy();
Enum SortDir = sortSrc.getSortDir();
ItemSorters.Direction = (appeng.api.config.SortDir) SortDir;
ItemSorters.init();
if ( SortBy == SortOrder.AMOUNT )
Collections.sort( view, ItemSorters.ConfigBased_SortBySize );
else if ( SortBy == SortOrder.INVTWEAKS )
Collections.sort( view, ItemSorters.ConfigBased_SortByInvTweaks );
else
Collections.sort( view, ItemSorters.ConfigBased_SortByName );
for (IAEItemStack is : view)
dsp.add( is.getItemStack() );
}
public int size()
{
return view.size();
}
public void clear()
{
list.resetStatus();
}
}