Almost finished Ritual for item routing

This commit is contained in:
WayofTime 2015-01-31 11:46:49 -05:00
parent 539bb564fa
commit 3b590fab6c
12 changed files with 120 additions and 65 deletions

View file

@ -287,7 +287,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; 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 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 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.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.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"); customPotionDrowning = (new PotionDrowning(customPotionDrowningID, true, 0)).setIconIndex(0, 0).setPotionName("Drowning");
customPotionBoost = (new PotionBoost(customPotionBoostID, false, 0)).setIconIndex(0, 0).setPotionName("Boost"); customPotionBoost = (new PotionBoost(customPotionBoostID, false, 0)).setIconIndex(0, 0).setPotionName("Boost");
customPotionProjProt = (new PotionProjectileProtect(customPotionProjProtID, false, 0)).setIconIndex(0, 0).setPotionName("Whirlwind"); customPotionProjProt = (new PotionProjectileProtect(customPotionProjProtID, false, 0)).setIconIndex(0, 0).setPotionName("Whirlwind");

View file

@ -4,8 +4,13 @@ import net.minecraft.item.ItemStack;
public class RoutingFocusLogic 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) 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);
} }
} }

View file

@ -5,8 +5,8 @@ import net.minecraft.item.ItemStack;
public class RoutingFocusLogicIgnMeta extends RoutingFocusLogic public class RoutingFocusLogicIgnMeta extends RoutingFocusLogic
{ {
@Override @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);
} }
} }

View file

@ -4,8 +4,14 @@ import net.minecraft.item.ItemStack;
public class RoutingFocusLogicMatchNBT extends RoutingFocusLogic 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) 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);
} }
} }

View file

@ -7,15 +7,15 @@ import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
public class RoutingFocusLogicModItems extends RoutingFocusLogic public class RoutingFocusLogicModItems extends RoutingFocusLogic
{ {
@Override @Override
public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack)
{ {
if(keyStack != null && checkedStack != null) if(keyStack != null && checkedStack != null)
{ {
UniqueIdentifier keyId = GameRegistry.findUniqueIdentifierFor(keyStack.getItem()); UniqueIdentifier keyId = GameRegistry.findUniqueIdentifierFor(keyStack.getItem());
UniqueIdentifier checkedId = GameRegistry.findUniqueIdentifierFor(checkedStack.getItem()); UniqueIdentifier checkedId = GameRegistry.findUniqueIdentifierFor(checkedStack.getItem());
return previous && keyId.modId.equals(checkedId.modId); return keyId.modId.equals(checkedId.modId);
} }
return previous; return false;
} }
} }

View file

@ -26,10 +26,16 @@ public class RoutingFocusParadigm
public boolean doesItemMatch(ItemStack keyStack, ItemStack checkedStack) public boolean doesItemMatch(ItemStack keyStack, ItemStack checkedStack)
{ {
boolean isGood = false; boolean isGood = false;
boolean isFirst = true;
for(RoutingFocusLogic logic : logicList) for(RoutingFocusLogic logic : logicList)
{ {
if(isFirst)
{
isGood = logic.getDefaultMatch(keyStack, checkedStack);
isFirst = false;
continue;
}
isGood = logic.doesItemMatch(isGood, keyStack, checkedStack); isGood = logic.doesItemMatch(isGood, keyStack, checkedStack);
if(isGood){return true;}
} }
return isGood; return isGood;

View file

@ -1,6 +1,10 @@
package WayofTime.alchemicalWizardry.common.items.routing; package WayofTime.alchemicalWizardry.common.items.routing;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister; 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.item.ItemStack;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
@ -52,11 +56,28 @@ public class OutputRoutingFocus extends RoutingFocus
case 1: case 1:
addedString = "modItem"; addedString = "modItem";
break; break;
case 2:
addedString = "ignMeta";
break;
case 3:
addedString = "matchNBT";
break;
} }
return super.getUnlocalizedName() + "." + addedString; 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) public RoutingFocusLogic getLogic(int damage)
{ {
switch(damage) switch(damage)

View file

@ -6,13 +6,14 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.StatCollector;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.AlchemicalWizardry;
import WayofTime.alchemicalWizardry.api.Int3; import WayofTime.alchemicalWizardry.api.Int3;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
import WayofTime.alchemicalWizardry.api.RoutingFocusPosAndFacing; import WayofTime.alchemicalWizardry.api.RoutingFocusPosAndFacing;
public class RoutingFocus extends Item public class RoutingFocus extends Item
@ -152,4 +153,35 @@ public class RoutingFocus extends Item
return 0; 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);
}
} }

View file

@ -47,16 +47,16 @@ public class RitualEffectItemRouting extends RitualEffect
int yBufOffset = 1; int yBufOffset = 1;
int zBufOffset = 0; int zBufOffset = 0;
TileEntity bufferTile = world.getTileEntity(x + xBufOffset, y + yBufOffset, z + zBufOffset); // TileEntity bufferTile = world.getTileEntity(x + xBufOffset, y + yBufOffset, z + zBufOffset);
//
if(!(bufferTile instanceof IInventory)) // if(!(bufferTile instanceof IInventory))
{ // {
return; // return;
} // }
Map<Int3, IInventory> tileMap = new HashMap(); Map<Int3, IInventory> tileMap = new HashMap();
IInventory bufferInventory = (IInventory)bufferTile; // IInventory bufferInventory = (IInventory)bufferTile;
List<IInventory> outputList = new ArrayList(); List<IInventory> outputList = new ArrayList();
for(int i=0; i<4; i++) //Check output foci chests, return if none available 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]) if(canSyphonList[ni])
{ {
ItemStack syphonedStack = inputChestInventory.getStackInSlot(ni); //Has a syphoned item linked, next need to find a destination 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; continue;
} }
@ -121,39 +121,27 @@ public class RitualEffectItemRouting extends RitualEffect
for(IInventory outputFocusInventory : outputList) for(IInventory outputFocusInventory : outputList)
{ {
ItemStack stack = outputFocusInventory.getStackInSlot(0); //ItemStack stack = outputFocusInventory.getStackInSlot(0);
if(stack != null && stack.getItem() instanceof OutputRoutingFocus) //TODO change to output routing focus //if(stack != null && stack.getItem() instanceof OutputRoutingFocus) //TODO change to output routing focus
{ {
boolean transferEverything = true; // boolean transferEverything = true;
for(int j=1; j<outputFocusInventory.getSizeInventory(); j++) // for(int j=1; j<outputFocusInventory.getSizeInventory(); j++)
{ // {
if(outputFocusInventory.getStackInSlot(j) != null) // if(outputFocusInventory.getStackInSlot(j) != null)
{ // {
transferEverything = false; // transferEverything = false;
break; // break;
} // }
} // }
OutputRoutingFocus outputFocus = (OutputRoutingFocus)stack.getItem(); OutputRoutingFocus outputFocus;;
RoutingFocusParadigm parad = new RoutingFocusParadigm(); RoutingFocusParadigm parad = new RoutingFocusParadigm();
parad.addRoutingFocusPosAndFacing(outputFocus.getPosAndFacing(stack)); // parad.addRoutingFocusPosAndFacing(outputFocus.getPosAndFacing(stack));
parad.addLogic(outputFocus.getLogic(stack.getItemDamage())); // parad.addLogic(outputFocus.getLogic(stack.getItemDamage()));
Int3 outputChestPos = new Int3(outputFocus.xCoord(stack), outputFocus.yCoord(stack), outputFocus.zCoord(stack)); TileEntity outputChest = null; //Destination
TileEntity outputChest; //Destination ForgeDirection inputDirection;;
if(tileMap.containsKey(outputChestPos))
{
outputChest = (TileEntity) tileMap.get(outputChestPos);
}else
{
outputChest = world.getTileEntity(outputFocus.xCoord(stack), outputFocus.yCoord(stack), outputFocus.zCoord(stack));
if(outputChest instanceof IInventory)
{
tileMap.put(outputChestPos, (IInventory)outputChest);
}
}
ForgeDirection inputDirection = outputFocus.getSetDirection(stack);
// if(transferEverything) // if(transferEverything)
// { // {
@ -184,16 +172,16 @@ public class RitualEffectItemRouting extends RitualEffect
// } // }
// }else // }else
{ {
if(!(outputChest instanceof IInventory)) // if(!(outputChest instanceof IInventory))
{ // {
continue; // continue;
} // }
IInventory outputChestInventory = (IInventory)outputChest; IInventory outputChestInventory = null;
boolean lastItemWasFocus = true; boolean lastItemWasFocus = true;
for(int j=1; j<outputFocusInventory.getSizeInventory(); j++) for(int j=0; j<outputFocusInventory.getSizeInventory(); j++)
{ {
ItemStack keyStack = outputFocusInventory.getStackInSlot(j); ItemStack keyStack = outputFocusInventory.getStackInSlot(j);
if(keyStack == null) if(keyStack == null)
@ -228,18 +216,7 @@ public class RitualEffectItemRouting extends RitualEffect
inputDirection = posAndFacing.facing; inputDirection = posAndFacing.facing;
if(outputChest == null || !posAndFacing.location.equals(new Int3(outputChest.xCoord, outputChest.yCoord, outputChest.zCoord))) if(outputChest == null || !posAndFacing.location.equals(new Int3(outputChest.xCoord, outputChest.yCoord, outputChest.zCoord)))
{ {
outputChestPos = new Int3(outputChest.xCoord, outputChest.yCoord, outputChest.zCoord); outputChest = world.getTileEntity(posAndFacing.location.xCoord, posAndFacing.location.yCoord, posAndFacing.location.zCoord);
if(tileMap.containsKey(outputChestPos))
{
outputChest = (TileEntity) tileMap.get(outputChestPos);
}else
{
outputChest = world.getTileEntity(posAndFacing.location.xCoord, posAndFacing.location.yCoord, posAndFacing.location.zCoord);
if(outputChest instanceof IInventory)
{
tileMap.put(outputChestPos, (IInventory)outputChest);
}
}
if(outputChest instanceof IInventory) if(outputChest instanceof IInventory)
{ {
outputChestInventory = (IInventory)outputChest; outputChestInventory = (IInventory)outputChest;
@ -486,4 +463,6 @@ public class RitualEffectItemRouting extends RitualEffect
return omegaRitual; return omegaRitual;
} }
} }

View file

@ -519,7 +519,7 @@ public class SpellHelper
int[] array = ((ISidedInventory)inventory).getAccessibleSlotsFromSide(dir.ordinal()); int[] array = ((ISidedInventory)inventory).getAccessibleSlotsFromSide(dir.ordinal());
for(int in : array) for(int in : array)
{ {
canBeInserted[in] = true; canBeInserted[in] = ((ISidedInventory)inventory).canInsertItem(in, stack, dir.ordinal());
} }
}else }else
{ {

View file

@ -202,6 +202,11 @@ item.itemCompressionSigil.name=Sigil of Compression
item.itemAssassinSigil.name=Sigil of the Assassin item.itemAssassinSigil.name=Sigil of the Assassin
item.transcendentBloodOrb.name=Transcendent Blood Orb item.transcendentBloodOrb.name=Transcendent Blood Orb
item.itemMailCatalogue.name=Mail Order Catalogue item.itemMailCatalogue.name=Mail Order Catalogue
item.inputRoutingFocus.name=Input Routing Focus
item.outputRoutingFocus.default.name=Default Output Routing Focus
item.outputRoutingFocus.modItem.name=Output Routing Focus (ModItem)
item.outputRoutingFocus.ignMeta.name=Output Routing Focus (Ignore Meta)
item.outputRoutingFocus.matchNBT.name=Output Routing Focus (MatchNBT)
#Creative Tab #Creative Tab
itemGroup.tabBloodMagic=Blood Magic itemGroup.tabBloodMagic=Blood Magic