Added multiple router filters and made sure that they are able to work properly. Textures and localization completed. Added a recipe for a consumable "frame" - more of these gating materials to be added.

This commit is contained in:
WayofTime 2016-01-21 15:53:37 -05:00
parent 6c91865c5e
commit b8079bb509
19 changed files with 202 additions and 7 deletions

View file

@ -37,6 +37,7 @@ public class DefaultItemFilter implements IItemFilter
* initialized as an output filter. If false, it should be
* initialized as an input filter.
*/
@Override
public void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput)
{
accessedInventory = inventory;
@ -53,6 +54,7 @@ public class DefaultItemFilter implements IItemFilter
* @return - The remainder of the stack after it has been absorbed into the
* inventory.
*/
@Override
public ItemStack transferStackThroughOutputFilter(ItemStack inputStack)
{
int allowedAmount = inputStack.stackSize; //This is done to make the migration to a maximum amount transfered a lot easier
@ -77,6 +79,7 @@ public class DefaultItemFilter implements IItemFilter
* This method is only called on an input filter to transfer ItemStacks from
* the input inventory to the output inventory.
*/
@Override
public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer)
{
boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()];

View file

@ -0,0 +1,26 @@
package WayofTime.bloodmagic.routing;
import net.minecraft.item.ItemStack;
public class IgnoreNBTItemFilter extends TestItemFilter
{
@Override
public boolean doesStackMatchFilter(ItemStack testStack)
{
for (ItemStack filterStack : requestList)
{
if (doStacksMatch(filterStack, testStack))
{
return true;
}
}
return false;
}
@Override
public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack)
{
return filterStack != null && testStack != null && filterStack.getItem() == testStack.getItem() && filterStack.getMetadata() == testStack.getMetadata();
}
}

View file

@ -0,0 +1,28 @@
package WayofTime.bloodmagic.routing;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.GameData;
public class ModIdItemFilter extends TestItemFilter
{
@Override
public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack)
{
if (filterStack != null && testStack != null && filterStack.getItem() != null && testStack.getItem() != null)
{
String keyId = getModID(filterStack.getItem());
String checkedId = getModID(testStack.getItem());
return keyId.equals(checkedId);
}
return false;
}
public String getModID(Item itm)
{
ResourceLocation resource = GameData.getItemRegistry().getNameForObject(itm);
return resource.getResourceDomain();
}
}

View file

@ -0,0 +1,46 @@
package WayofTime.bloodmagic.routing;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
public class OreDictItemFilter extends TestItemFilter
{
@Override
public boolean doesStackMatchFilter(ItemStack testStack)
{
for (ItemStack filterStack : requestList)
{
if (doStacksMatch(filterStack, testStack))
{
return true;
}
}
return false;
}
@Override
public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack)
{
int[] filterIds = OreDictionary.getOreIDs(filterStack);
int[] testIds = OreDictionary.getOreIDs(testStack);
if (filterIds.length <= 0 || testIds.length <= 0)
{
return false;
}
for (int filterId : filterIds)
{
for (int testId : testIds)
{
if (filterId == testId)
{
return true;
}
}
}
return false;
}
}

View file

@ -25,9 +25,9 @@ public class TestItemFilter implements IItemFilter
* inserted in the inventory to finish its request. For the case of an input
* filter, it keeps track of how many can be removed.
*/
private List<ItemStack> requestList;
private IInventory accessedInventory;
private EnumFacing accessedSide;
protected List<ItemStack> requestList;
protected IInventory accessedInventory;
protected EnumFacing accessedSide;
/**
* Initializes the filter so that it knows what it wants to fulfill.
@ -45,6 +45,7 @@ public class TestItemFilter implements IItemFilter
* initialized as an output filter. If false, it should be
* initialized as an input filter.
*/
@Override
public void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput)
{
this.accessedInventory = inventory;
@ -166,6 +167,7 @@ public class TestItemFilter implements IItemFilter
* @return - The remainder of the stack after it has been absorbed into the
* inventory.
*/
@Override
public ItemStack transferStackThroughOutputFilter(ItemStack inputStack)
{
int allowedAmount = 0;
@ -212,6 +214,7 @@ public class TestItemFilter implements IItemFilter
* This method is only called on an input filter to transfer ItemStacks from
* the input inventory to the output inventory.
*/
@Override
public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer)
{
boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()];
@ -290,6 +293,7 @@ public class TestItemFilter implements IItemFilter
}
}
@Override
public boolean doesStackMatchFilter(ItemStack testStack)
{
for (ItemStack filterStack : requestList)
@ -303,6 +307,7 @@ public class TestItemFilter implements IItemFilter
return false;
}
@Override
public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack)
{
return Utils.canCombine(filterStack, testStack);