From b8079bb5095fd54b2ec1e4345165aaa887a0af85 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Thu, 21 Jan 2016 15:53:37 -0500 Subject: [PATCH] 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. --- .../bloodmagic/item/ItemComponent.java | 2 + .../item/routing/ItemRouterFilter.java | 46 +++++++++++++++++- .../bloodmagic/registry/ModRecipes.java | 8 ++- .../bloodmagic/routing/DefaultItemFilter.java | 3 ++ .../routing/IgnoreNBTItemFilter.java | 26 ++++++++++ .../bloodmagic/routing/ModIdItemFilter.java | 28 +++++++++++ .../bloodmagic/routing/OreDictItemFilter.java | 46 ++++++++++++++++++ .../bloodmagic/routing/TestItemFilter.java | 11 +++-- .../tile/routing/TileMasterRoutingNode.java | 2 +- .../assets/bloodmagic/lang/en_US.lang | 9 +++- .../models/item/ItemComponent10.json | 7 +++ .../models/item/ItemRouterFilter1.json | 7 +++ .../models/item/ItemRouterFilter2.json | 7 +++ .../models/item/ItemRouterFilter3.json | 7 +++ .../textures/items/ComponentFrameParts.png | Bin 0 -> 441 bytes .../textures/items/ItemRouterFilterExact.png | Bin 336 -> 698 bytes .../items/ItemRouterFilterIgnoreNBT.png | Bin 0 -> 692 bytes .../items/ItemRouterFilterModItems.png | Bin 0 -> 693 bytes .../items/ItemRouterFilterOreDict.png | Bin 0 -> 697 bytes 19 files changed, 202 insertions(+), 7 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemComponent10.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter1.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter2.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter3.json create mode 100644 src/main/resources/assets/bloodmagic/textures/items/ComponentFrameParts.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/ItemRouterFilterIgnoreNBT.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/ItemRouterFilterModItems.png create mode 100644 src/main/resources/assets/bloodmagic/textures/items/ItemRouterFilterOreDict.png diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java b/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java index b8fc8ea8..aa8461eb 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java @@ -28,6 +28,7 @@ public class ItemComponent extends Item public static final String REAGENT_SIGHT = "reagentSight"; public static final String REAGENT_BINDING = "reagentBinding"; public static final String REAGENT_SUPPRESSION = "reagentSuppression"; + public static final String COMPONENT_FRAME_PART = "frameParts"; public ItemComponent() { @@ -53,6 +54,7 @@ public class ItemComponent extends Item names.add(7, REAGENT_SIGHT); names.add(8, REAGENT_BINDING); names.add(9, REAGENT_SUPPRESSION); + names.add(10, COMPONENT_FRAME_PART); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java index eae4ea70..e3a5135b 100644 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java +++ b/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java @@ -14,14 +14,18 @@ import net.minecraftforge.fml.relauncher.SideOnly; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.item.inventory.ItemInventory; +import WayofTime.bloodmagic.routing.DefaultItemFilter; import WayofTime.bloodmagic.routing.IItemFilter; +import WayofTime.bloodmagic.routing.IgnoreNBTItemFilter; +import WayofTime.bloodmagic.routing.ModIdItemFilter; +import WayofTime.bloodmagic.routing.OreDictItemFilter; import WayofTime.bloodmagic.routing.TestItemFilter; import WayofTime.bloodmagic.util.GhostItemHelper; import WayofTime.bloodmagic.util.helper.TextHelper; public class ItemRouterFilter extends Item implements IItemFilterProvider { - public static String[] names = { "exact" }; + public static String[] names = { "exact", "ignoreNBT", "modItems", "oreDict" }; public ItemRouterFilter() { @@ -60,6 +64,26 @@ public class ItemRouterFilter extends Item implements IItemFilterProvider public IItemFilter getInputItemFilter(ItemStack filterStack, IInventory inventory, EnumFacing syphonDirection) { IItemFilter testFilter = new TestItemFilter(); + + switch (filterStack.getMetadata()) + { + case 0: + testFilter = new TestItemFilter(); + break; + case 1: + testFilter = new IgnoreNBTItemFilter(); + break; + case 2: + testFilter = new ModIdItemFilter(); + break; + case 3: + testFilter = new OreDictItemFilter(); + break; + + default: + testFilter = new DefaultItemFilter(); + } + List filteredList = new ArrayList(); ItemInventory inv = new ItemInventory(filterStack, 9, ""); for (int i = 0; i < inv.getSizeInventory(); i++) @@ -83,6 +107,26 @@ public class ItemRouterFilter extends Item implements IItemFilterProvider public IItemFilter getOutputItemFilter(ItemStack filterStack, IInventory inventory, EnumFacing syphonDirection) { IItemFilter testFilter = new TestItemFilter(); + + switch (filterStack.getMetadata()) + { + case 0: + testFilter = new TestItemFilter(); + break; + case 1: + testFilter = new IgnoreNBTItemFilter(); + break; + case 2: + testFilter = new ModIdItemFilter(); + break; + case 3: + testFilter = new OreDictItemFilter(); + break; + + default: + testFilter = new DefaultItemFilter(); + } + List filteredList = new ArrayList(); ItemInventory inv = new ItemInventory(filterStack, 9, ""); //TODO: Change to grab the filter from the Item later. for (int i = 0; i < inv.getSizeInventory(); i++) diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index 10f779d5..15da0339 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -70,6 +70,12 @@ public class ModRecipes GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.ritualStone), "aba", "bcb", "aba", 'a', Blocks.obsidian, 'b', new ItemStack(ModItems.slate, 1, 1), 'c', OrbRegistry.getOrbStack(ModItems.orbApprentice))); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.ritualController), "aba", "bcb", "aba", 'a', Blocks.obsidian, 'b', ModBlocks.ritualStone, 'c', OrbRegistry.getOrbStack(ModItems.orbMagician))); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.ritualController, 1, 1), "aba", "bcb", "aba", 'a', Blocks.obsidian, 'b', "stone", 'c', OrbRegistry.getOrbStack(ModItems.orbWeak))); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.baseItemFilter, 1, 0), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', new ItemStack(Blocks.glass), 's', Items.stick)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.baseItemFilter, 1, 1), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', "dyeYellow", 's', Items.stick)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.baseItemFilter, 1, 2), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', "dyeGreen", 's', Items.stick)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.baseItemFilter, 1, 3), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', "dyePurple", 's', Items.stick)); + } public static void addAltarRecipes() @@ -168,7 +174,7 @@ public class ModRecipes TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SUPPRESSION), 500, 50, ModBlocks.teleposer, Items.water_bucket, Items.lava_bucket, Items.blaze_rod); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), 400, 10, "dustGlowstone", "dustRedstone", "nuggetGold", Items.gunpowder); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.baseItemFilter), 400, 10, new ItemStack(Blocks.glass), new ItemStack(Blocks.cobblestone), new ItemStack(ModItems.slate), Items.stick); + TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 400, 10, "blockGlass", "stone", new ItemStack(ModItems.slate)); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.nodeRouter), 400, 5, Items.stick, new ItemStack(ModItems.slate, 1, 1), "gemLapis", "gemLapis"); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.itemRoutingNode), 400, 5, "dustGlowstone", "dustRedstone", "blockGlass", "stone"); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModBlocks.outputRoutingNode), 400, 25, "dustGlowstone", "dustRedstone", "ingotIron", new ItemStack(ModBlocks.itemRoutingNode)); diff --git a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java index 29e79007..f98e8375 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java @@ -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 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()]; diff --git a/src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java new file mode 100644 index 00000000..cc0a9288 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java @@ -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(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java new file mode 100644 index 00000000..56727e54 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java @@ -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(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java new file mode 100644 index 00000000..2cde4909 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java @@ -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; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java index d48b340d..b92769dd 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java @@ -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 requestList; - private IInventory accessedInventory; - private EnumFacing accessedSide; + protected List 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 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); diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java index e6bb21f2..6babed5e 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java @@ -124,7 +124,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti List inputList = inputEntry.getValue(); for (IItemFilter inputFilter : inputList) { - inputFilter.transferThroughInputFilter(outputFilter, 1); + inputFilter.transferThroughInputFilter(outputFilter, 8); } } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index d1318f62..96779a40 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -76,6 +76,7 @@ item.BloodMagic.baseComponent.reagentAffinity.name=Elemental Affinity Reagent item.BloodMagic.baseComponent.reagentSight.name=Sight Reagent item.BloodMagic.baseComponent.reagentBinding.name=Binding Reagent item.BloodMagic.baseComponent.reagentSuppression.name=Suppression Reagent +item.BloodMagic.baseComponent.frameParts.name=Frame Parts item.BloodMagic.monsterSoul.base.name=Demonic Will @@ -122,6 +123,9 @@ item.BloodMagic.sentientBow.name=Sentient Bow item.BloodMagic.nodeRouter.name=Node Router item.BloodMagic.itemFilter.exact.name=Precise Item Filter +item.BloodMagic.itemFilter.ignoreNBT.name=NBT Item Filter +item.BloodMagic.itemFilter.modItems.name=Mod Item Filter +item.BloodMagic.itemFilter.oreDict.name=Ore Dictionary Item Filter # Blocks tile.BloodMagic.fluid.lifeEssence.name=Life Essence @@ -262,7 +266,10 @@ tooltip.BloodMagic.soulGem.greater=A gem used to contain a greater amount of wil tooltip.BloodMagic.soulGem.grand=A gem used to contain a large amount of will tooltip.BloodMagic.soulSnare.desc=Throw at a monster and then kill them to obtain their demonic will -tooltip.BloodMagic.itemFilter.exact=Will make sure the items match precisely. +tooltip.BloodMagic.itemFilter.exact=Will make sure the items match precisely +tooltip.BloodMagic.itemFilter.ignoreNBT=Ignores the NBT of the filter +tooltip.BloodMagic.itemFilter.modItems=Matches all items from the same mod +tooltip.BloodMagic.itemFilter.oreDict=Used to filter through the Ore Dictionary # Ritual ritual.BloodMagic.testRitual=Test Ritual diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemComponent10.json b/src/main/resources/assets/bloodmagic/models/item/ItemComponent10.json new file mode 100644 index 00000000..eb5d894c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemComponent10.json @@ -0,0 +1,7 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/ComponentFrameParts" + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter1.json b/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter1.json new file mode 100644 index 00000000..7656627c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter1.json @@ -0,0 +1,7 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/ItemRouterFilterIgnoreNBT" + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter2.json b/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter2.json new file mode 100644 index 00000000..5968005c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter2.json @@ -0,0 +1,7 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/ItemRouterFilterModItems" + } +} + diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter3.json b/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter3.json new file mode 100644 index 00000000..2fa5bd37 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/ItemRouterFilter3.json @@ -0,0 +1,7 @@ +{ + "parent":"bloodmagic:item/ItemModelBase", + "textures": { + "layer0":"bloodmagic:items/ItemRouterFilterOreDict" + } +} + diff --git a/src/main/resources/assets/bloodmagic/textures/items/ComponentFrameParts.png b/src/main/resources/assets/bloodmagic/textures/items/ComponentFrameParts.png new file mode 100644 index 0000000000000000000000000000000000000000..45d285f93443ba8c570e1c2fe65e8c06964e7686 GIT binary patch literal 441 zcmV;q0Y?6bP)Ndmw{)Z?T0bP4Tto8DQMukRnaC&#F) z0AP`(00?6YgCrsDM*yg-a4n_RH)58(^D=*Pv3sQiz*QWxNK<4}Tb3-jyEV4h#u`UB z>U7-8i{+BMESZi+UgE>!6L}aiiDR=KK{x_adpR#l@*r@tTI69!9t6bw$otm3>yFBb-J58Ojn+b7L_M};hrLF7O!i0sE{8*^szOMK j6oN`?^g7==rbF-x7)PdkUJosA00000NkvXXu0mjfElsbu literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/items/ItemRouterFilterExact.png b/src/main/resources/assets/bloodmagic/textures/items/ItemRouterFilterExact.png index 90a36900a8101c014315b16361bd929c87e43897..1c7115f0e6658106b925c03d12afbd6882f4efc0 100644 GIT binary patch delta 628 zcmV-)0*n370=fl|DlyssxByyu^~=Qo000SaNLh0L01FcU01FcV0GgZ_00007bV*G` z2j2=069*sRMvAtPTPuG89!W$&R5;6}lTS#KaTv!x&%4ccO>#5w;7COyLy&|h%pi6M zv!HALpynkasGx%p9V9v=T>=kUfww8qt>{$Pr9%uODoQdvOw)Qn)NQtRy1m~VTN#~W5q%(Q8*9WQc znq)WgcspPtn~X1bvu|O(g9+;V5MyZU9w9 zL>RulPxJXr;wyjiydE85VAe0TWifa_wZ$`s*JW_&SgVGg$BH(JmxnhG>YmE5><8mvuWs!OJ zmc-O2(vAbb{6Z3+#~|m(?^6&FhAww#aDOLD(=pao)0}@BpApM(7(d>uwSj6Dz9*^i z8jQSHEb`oCA&yMR?Y@Gx9}Qv7OfeX0P%(tM8k5y{3Ofg5uNGx1L{%;CAkqyVf^FK? z>SykojcEw#axwQcL4)7Nv}JS3V@WvrEBLa1psIwU;IHyfh;1X4D3D0y$Yk zCPr)5Gi>p6aSX9Iy?1gV*C7L**8N=pAH=MW-B?&9wtmCmie6r}-3|YwPJDL19cU`c zchrfa_N4b@wZch1p2_H3uw3qM(6IRFjqQQ$Epr=tJd6BUJXbTkik`ByBPeNNP=QX- zzIGMWZ&EF@7OLg*U*(w;aQ)>ilUtu6nOj2gPaJdE*X-@~KJ}MJnKWbG=QEiSGxns% zP5Y&gv(&t5y?2i6|Nlo~bN`%Fh;%%~lcj2vExmT8`FDml4AtkDl^@lzeUE1c`HI2Q L)z4*}Q$iB}jM8dI diff --git a/src/main/resources/assets/bloodmagic/textures/items/ItemRouterFilterIgnoreNBT.png b/src/main/resources/assets/bloodmagic/textures/items/ItemRouterFilterIgnoreNBT.png new file mode 100644 index 0000000000000000000000000000000000000000..89a77b1fa8903dad1a2d0cc73b8733694ff8eacf GIT binary patch literal 692 zcmV;l0!#ggP)C2O_yH#-{)P03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00J0EL_t(I%cYY~NRx3G z$3M@z&AlpZ8cb`JIV~%chEWWI@DO5`u2F~9B`lE0Ls0}G6h)^HNiDqDrDMmWf-W(r zs7T2m@NW&JxxKP2r+fA35UjnjL(~Jm%a`Bx%k%y4`-!UZKVy^?VWEpFB)-j6B(HQ(puTx#KkIu`zycm7Vo2Sp& z9<0C{sK?6KL}NHY+yJVIi16UrVYTf|l8ISfj}FjxeNyJ)!lQ==G~}7VbQxSa*{IQH z(}fxZ1|v5jy1%Onx9R8Q;2>A8e2^cNx71z#nerV^Wa4d3LyZ9vOBOw+LJEi@AY-kQ zODAxzCULoyxwv4|y(5*JU@-wMV0PZ3!efwM|HGiLiij}K)2hKEVV0(*Sy|4qS@}s8 z6M)sA)m4?uf4A_N21DZu1)l?A@6e=7y?Re=I805Qk8fWZbR!wkDxb-6GEF8AL*oll z4AHT{SUY?SHfwW>pP8>2yoR7I7c+AycGgxfHJ#zKCoa+0Z}5(HpsGY;;P-i`-D{K1 zZIDXm$>nU+W6;)V;w=}7%>`re0q8$}Pyx=J*rR7Vb}PV{j$K;nzLffnBEnX^l;&XY auk#BG{{0-rT&*Mk0000C1`p-xtCIi#03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00J3FL_t(I%cYZFNRwd{ z#((GA=Eg)@)}jU?Y82u!2*V^|fs|f#8FbO=B1#IO8w16pf}|V63yVM~SRjEHMOXd3 zEGwjvqF9pu7cJfPnL5|DJYA{#WEW8fUU+#p&%=41^S+|0{7)JAKoR*XEU$owaQ#w) ziU?h&YV_J^zlsPQ&3iSUhWs(j6*HwdDeHAHxHgt z;&bEKybW_9OK=d2h#f#x5fOS@_h>e|Oni2n7kxc+-tHHM!?bmEYPn+!m(8HLsX~K~ zMptdDUT(GR)18ft*j*cV9qOm`<{h~*6Vp%W8SV`XNz3yAEwAu08#S3rX6Su5DwYrz z%rvR_S?o)3Y<7j=FheD2J|w0gW&$uiY2tPmWYTLHtc@Z<&pE&PYIhU;Jjz^bkq&>8 z5HmUZ_K9xv6fzkxDRvp$csymbkQ?IV6IEJuIDi@c$k3~4#1J-loW#u}(VxG$|1u&g zy{c-RAXE?UeLJ+Y+ROKmI8H-Qn~kxF1fH!P#=pin>i8xrWXn5HRf2=yD0cJCUCED> zjl_J0R4Pldz{N!6E|%R+a>=X2+yijoWQ_tGZz$7afl>uH5~$F8{gUrDiU{lRe3)em b|5|?lOWqAIC2PG#;Qv?7203B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00JFJL_t(I%cYY|NYil` z$3M@1n_Ck%UovXFh>MKC5;H0zP>9qZucHpGOGF?=fxTQJDvC}ak`9sx^b&RHSX74& zF$fQVqGX`vDiz&JZ06kC(;-~@$DpVOp39f#`{nt5f4@gmmH#QD7$_otg%uSL5dv4* zR7ALQdXL^cQ?DYzZT~?nCSv`aJkZms>*ksmxR})Kt&OCUtK3tUI%9{p)g>w-QfS*K zBo8%%wKPY=`FfUDuW$kGgN2Yb2p=z+`=rq6d-Yi-jwECy#g zyy|~GmA8@4AaM17?rd+z>TvVAuaBNUzbxL|tl9BOY94pW=<%mo>#b&KAx3v+tpZ{a zNW@Yk<4agqB3P`-JYmu!Zla?RCM5*G%xny&%^;onl|goE z4?AR1LL`p`wW7R~*)K6%4uk#|A+v>ii2Y-7<5X66wY6aXFvdvR6BR?KaybY`;v~{A z{3ax8A*!l*gP~@4@2S%|??$FSFJdJe73LR5B?0^^bb@Oe-PZZ zGO{0=h(}9^#?vH|88ll;`O0DJI4LCOiG>Yt-Pfo9T}Nv4WXo0sII(|+7Mqu1*SO~I fPnhWy{lqxQ&00000NkvXXu0mjfRjDek literal 0 HcmV?d00001