blob: d1ee9f4c9737659704954bb73fe8d24324008f42 [file] [log] [blame] [raw]
package mekanism.common.content.transporter;
import java.util.List;
import mekanism.api.util.StackUtils;
import mekanism.common.util.ItemRegistryUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
public abstract class Finder
{
public abstract boolean modifies(ItemStack stack);
public static class FirstFinder extends Finder
{
@Override
public boolean modifies(ItemStack stack)
{
return true;
}
}
public static class OreDictFinder extends Finder
{
public String oreDictName;
public OreDictFinder(String name)
{
oreDictName = name;
}
@Override
public boolean modifies(ItemStack stack)
{
List<String> oreKeys = MekanismUtils.getOreDictName(stack);
if(oreKeys.isEmpty())
{
return false;
}
for(String oreKey : oreKeys)
{
if(oreDictName.equals(oreKey) || oreDictName.equals("*"))
{
return true;
}
else if(oreDictName.endsWith("*") && !oreDictName.startsWith("*"))
{
if(oreKey.startsWith(oreDictName.substring(0, oreDictName.length()-1)))
{
return true;
}
}
else if(oreDictName.startsWith("*") && !oreDictName.endsWith("*"))
{
if(oreKey.endsWith(oreDictName.substring(1)))
{
return true;
}
}
else if(oreDictName.startsWith("*") && oreDictName.endsWith("*"))
{
if(oreKey.contains(oreDictName.substring(1, oreDictName.length()-1)))
{
return true;
}
}
}
return false;
}
}
public static class ItemStackFinder extends Finder
{
public ItemStack itemType;
public ItemStackFinder(ItemStack type)
{
itemType = type;
}
@Override
public boolean modifies(ItemStack stack)
{
return StackUtils.equalsWildcard(itemType, stack);
}
}
public static class MaterialFinder extends Finder
{
public Material materialType;
public MaterialFinder(Material type)
{
materialType = type;
}
@Override
public boolean modifies(ItemStack stack)
{
if(stack == null || !(stack.getItem() instanceof ItemBlock))
{
return false;
}
return Block.getBlockFromItem(stack.getItem()).getStateFromMeta(stack.getItemDamage()).getMaterial() == materialType;
}
}
public static class ModIDFinder extends Finder
{
public String modID;
public ModIDFinder(String mod)
{
modID = mod;
}
@Override
public boolean modifies(ItemStack stack)
{
if(stack == null || !(stack.getItem() instanceof ItemBlock))
{
return false;
}
String id = ItemRegistryUtils.getMod(stack);
if(modID.equals(id) || modID.equals("*"))
{
return true;
}
else if(modID.endsWith("*") && !modID.startsWith("*"))
{
if(id.startsWith(modID.substring(0, modID.length()-1)))
{
return true;
}
}
else if(modID.startsWith("*") && !modID.endsWith("*"))
{
if(id.endsWith(modID.substring(1)))
{
return true;
}
}
else if(modID.startsWith("*") && modID.endsWith("*"))
{
if(id.contains(modID.substring(1, modID.length()-1)))
{
return true;
}
}
return false;
}
}
}