From 3b590fab6c2f2c81096cecc96ec5cff4741af0ed Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 31 Jan 2015 11:46:49 -0500 Subject: [PATCH] Almost finished Ritual for item routing --- .../AlchemicalWizardry.java | 3 +- .../api/RoutingFocusLogic.java | 7 +- .../api/RoutingFocusLogicIgnMeta.java | 4 +- .../api/RoutingFocusLogicMatchNBT.java | 8 +- .../api/RoutingFocusLogicModItems.java | 6 +- .../api/RoutingFocusParadigm.java | 8 +- .../items/routing/OutputRoutingFocus.java | 21 +++++ .../common/items/routing/RoutingFocus.java | 34 ++++++- .../rituals/RitualEffectItemRouting.java | 87 +++++++----------- .../spell/complex/effect/SpellHelper.java | 2 +- .../assets/alchemicalwizardry/lang/en_US.lang | 5 + ...tem.png => OutputRoutingFocusModItems.png} | Bin 12 files changed, 120 insertions(+), 65 deletions(-) rename src/main/resources/assets/alchemicalwizardry/textures/items/{OutputRoutingFocusModItem.png => OutputRoutingFocusModItems.png} (100%) diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index fc816938..e4710d71 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -287,7 +287,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.3.0b", guiFactory = "WayofTime.alchemicalWizardry.client.gui.ConfigGuiFactory") +@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.3.1", guiFactory = "WayofTime.alchemicalWizardry.client.gui.ConfigGuiFactory") public class AlchemicalWizardry { @@ -712,6 +712,7 @@ public class AlchemicalWizardry GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemBloodLightSigil), "btb", "sss", "bob", 'o', magicianBloodOrbStack, 'b', glowstoneBlockStack, 't', new ItemStack(Blocks.torch), 's', imbuedSlateStack)); GameRegistry.addRecipe(new ItemStack(ModItems.itemKeyOfDiablo), " gw", "gdg", "wg ", 'w', weakBloodShardStack, 'g', goldIngotStack, 'd', diamondStack); GameRegistry.addRecipe(new ItemStack(ModItems.itemBloodPack), "gbg","flf","gsg",'s', blankSlateStack,'g', glassStack,'f',new ItemStack(Items.flint,1,craftingConstant),'b', emptyBucketStack, 'l', new ItemStack(Items.leather_chestplate)); + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.itemMailCatalogue), new ItemStack(Items.book), new ItemStack(Items.dye, 1, 0), new ItemStack(Items.feather), glassStack, glassStack); customPotionDrowning = (new PotionDrowning(customPotionDrowningID, true, 0)).setIconIndex(0, 0).setPotionName("Drowning"); customPotionBoost = (new PotionBoost(customPotionBoostID, false, 0)).setIconIndex(0, 0).setPotionName("Boost"); customPotionProjProt = (new PotionProjectileProtect(customPotionProjProtID, false, 0)).setIconIndex(0, 0).setPotionName("Whirlwind"); diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java index d98d70da..a3f0a3e1 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java @@ -4,8 +4,13 @@ import net.minecraft.item.ItemStack; public class RoutingFocusLogic { + public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) + { + return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() : true) : false); + } + public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) { - return previous || (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() : true) : false); + return previous || this.getDefaultMatch(keyStack, checkedStack); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicIgnMeta.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicIgnMeta.java index 69b11006..5a2c5dd3 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicIgnMeta.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicIgnMeta.java @@ -5,8 +5,8 @@ import net.minecraft.item.ItemStack; public class RoutingFocusLogicIgnMeta extends RoutingFocusLogic { @Override - public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) + public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) { - return previous || (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() : false); + return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() : false); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicMatchNBT.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicMatchNBT.java index 64db64ab..73b81b04 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicMatchNBT.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicMatchNBT.java @@ -4,8 +4,14 @@ import net.minecraft.item.ItemStack; public class RoutingFocusLogicMatchNBT extends RoutingFocusLogic { + public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) + { + return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() : true) && keyStack.areItemStackTagsEqual(keyStack, checkedStack) : false); + } + + @Override public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) { - return previous && (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() : true) && keyStack.areItemStackTagsEqual(keyStack, checkedStack) : false); + return previous && this.getDefaultMatch(keyStack, checkedStack); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicModItems.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicModItems.java index 9f7f1518..25bd70b5 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicModItems.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicModItems.java @@ -7,15 +7,15 @@ import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; public class RoutingFocusLogicModItems extends RoutingFocusLogic { @Override - public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) + public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) { if(keyStack != null && checkedStack != null) { UniqueIdentifier keyId = GameRegistry.findUniqueIdentifierFor(keyStack.getItem()); UniqueIdentifier checkedId = GameRegistry.findUniqueIdentifierFor(checkedStack.getItem()); - return previous && keyId.modId.equals(checkedId.modId); + return keyId.modId.equals(checkedId.modId); } - return previous; + return false; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java index dc648f36..1f013dd4 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java @@ -26,10 +26,16 @@ public class RoutingFocusParadigm public boolean doesItemMatch(ItemStack keyStack, ItemStack checkedStack) { boolean isGood = false; + boolean isFirst = true; for(RoutingFocusLogic logic : logicList) { + if(isFirst) + { + isGood = logic.getDefaultMatch(keyStack, checkedStack); + isFirst = false; + continue; + } isGood = logic.doesItemMatch(isGood, keyStack, checkedStack); - if(isGood){return true;} } return isGood; diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java index fae7980a..17f6737d 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java @@ -1,6 +1,10 @@ package WayofTime.alchemicalWizardry.common.items.routing; +import java.util.List; + import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; @@ -52,11 +56,28 @@ public class OutputRoutingFocus extends RoutingFocus case 1: addedString = "modItem"; break; + case 2: + addedString = "ignMeta"; + break; + case 3: + addedString = "matchNBT"; + break; } return super.getUnlocalizedName() + "." + addedString; } + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item id, CreativeTabs creativeTab, List list) + { + for (int meta = 0; meta < 4; ++meta) + { + list.add(new ItemStack(id, 1, meta)); + } + } + + @Override public RoutingFocusLogic getLogic(int damage) { switch(damage) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java index 56818440..9e8004e8 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java @@ -6,13 +6,14 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.api.Int3; +import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; import WayofTime.alchemicalWizardry.api.RoutingFocusPosAndFacing; public class RoutingFocus extends Item @@ -152,4 +153,35 @@ public class RoutingFocus extends Item return 0; } } + + public RoutingFocusLogic getLogic(int damage) + { + return new RoutingFocusLogic(); + } + + public int getDefaultStackLimit(int damage) + { + return 0; + } + + public int getStackLimitAmount(ItemStack itemStack) + { + if (!(itemStack.getTagCompound() == null)) + { + return itemStack.getTagCompound().getInteger("stackLimit"); + } else + { + return getDefaultStackLimit(itemStack.getItemDamage()); + } + } + + public void setStackLimitAmount(ItemStack itemStack, int amt) + { + if ((itemStack.getTagCompound() == null)) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + itemStack.getTagCompound().setInteger("stackLimit", amt); + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java index 582efe26..8ee86c53 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java @@ -47,16 +47,16 @@ public class RitualEffectItemRouting extends RitualEffect int yBufOffset = 1; int zBufOffset = 0; - TileEntity bufferTile = world.getTileEntity(x + xBufOffset, y + yBufOffset, z + zBufOffset); - - if(!(bufferTile instanceof IInventory)) - { - return; - } +// TileEntity bufferTile = world.getTileEntity(x + xBufOffset, y + yBufOffset, z + zBufOffset); +// +// if(!(bufferTile instanceof IInventory)) +// { +// return; +// } Map tileMap = new HashMap(); - IInventory bufferInventory = (IInventory)bufferTile; +// IInventory bufferInventory = (IInventory)bufferTile; List outputList = new ArrayList(); for(int i=0; i<4; i++) //Check output foci chests, return if none available @@ -112,7 +112,7 @@ public class RitualEffectItemRouting extends RitualEffect if(canSyphonList[ni]) { ItemStack syphonedStack = inputChestInventory.getStackInSlot(ni); //Has a syphoned item linked, next need to find a destination - if(syphonedStack == null) + if(syphonedStack == null || (inputChestInventory instanceof ISidedInventory && !((ISidedInventory)inputChestInventory).canExtractItem(ni, syphonedStack, syphonDirection.ordinal()))) { continue; } @@ -121,39 +121,27 @@ public class RitualEffectItemRouting extends RitualEffect for(IInventory outputFocusInventory : outputList) { - ItemStack stack = outputFocusInventory.getStackInSlot(0); - if(stack != null && stack.getItem() instanceof OutputRoutingFocus) //TODO change to output routing focus + //ItemStack stack = outputFocusInventory.getStackInSlot(0); + //if(stack != null && stack.getItem() instanceof OutputRoutingFocus) //TODO change to output routing focus { - boolean transferEverything = true; - for(int j=1; j