summaryrefslogtreecommitdiff
path: root/src/api/java/thaumcraft
diff options
context:
space:
mode:
authorLance5057 <Lance5057@gmail.com>2017-04-29 22:20:58 -0500
committerLance5057 <Lance5057@gmail.com>2017-04-29 22:20:58 -0500
commitb4b05403fda50307e2b35de91296ab9bb53c2baa (patch)
treeb69a17f58673e8d4ac5d9da6503608649da4cc28 /src/api/java/thaumcraft
parentf692d8983ee8787843d874ae1aa329c1439e3223 (diff)
Updated to TiCo 2.6.3
Added Zweihander Partially added Sheathe Partially added Crest Mount Partially added materials
Diffstat (limited to 'src/api/java/thaumcraft')
-rw-r--r--src/api/java/thaumcraft/api/BlockCoordinates.java115
-rw-r--r--src/api/java/thaumcraft/api/IArchitect.java28
-rw-r--r--src/api/java/thaumcraft/api/IGoggles.java23
-rw-r--r--src/api/java/thaumcraft/api/IRepairable.java11
-rw-r--r--src/api/java/thaumcraft/api/IRepairableExtended.java16
-rw-r--r--src/api/java/thaumcraft/api/IRunicArmor.java22
-rw-r--r--src/api/java/thaumcraft/api/IScribeTools.java14
-rw-r--r--src/api/java/thaumcraft/api/IVisDiscountGear.java18
-rw-r--r--src/api/java/thaumcraft/api/IWarpingGear.java22
-rw-r--r--src/api/java/thaumcraft/api/ItemApi.java85
-rw-r--r--src/api/java/thaumcraft/api/ItemRunic.java23
-rw-r--r--src/api/java/thaumcraft/api/ThaumcraftApi.java716
-rw-r--r--src/api/java/thaumcraft/api/ThaumcraftApiHelper.java523
-rw-r--r--src/api/java/thaumcraft/api/TileThaumcraft.java64
-rw-r--r--src/api/java/thaumcraft/api/WorldCoordinates.java123
-rw-r--r--src/api/java/thaumcraft/api/aspects/Aspect.java377
-rw-r--r--src/api/java/thaumcraft/api/aspects/AspectList.java358
-rw-r--r--src/api/java/thaumcraft/api/aspects/AspectSourceHelper.java70
-rw-r--r--src/api/java/thaumcraft/api/aspects/IAspectContainer.java75
-rw-r--r--src/api/java/thaumcraft/api/aspects/IAspectSource.java13
-rw-r--r--src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java38
-rw-r--r--src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java95
-rw-r--r--src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java116
-rw-r--r--src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java36
-rw-r--r--src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java20
-rw-r--r--src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java188
-rw-r--r--src/api/java/thaumcraft/api/crafting/InfusionRecipe.java174
-rw-r--r--src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java281
-rw-r--r--src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java179
-rw-r--r--src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java26
-rw-r--r--src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java34
-rw-r--r--src/api/java/thaumcraft/api/entities/IEldritchMob.java6
-rw-r--r--src/api/java/thaumcraft/api/entities/ITaintedMob.java6
-rw-r--r--src/api/java/thaumcraft/api/internal/DummyInternalMethodHandler.java88
-rw-r--r--src/api/java/thaumcraft/api/internal/IInternalMethodHandler.java38
-rw-r--r--src/api/java/thaumcraft/api/internal/WeightedRandomLoot.java24
-rw-r--r--src/api/java/thaumcraft/api/nodes/INode.java54
-rw-r--r--src/api/java/thaumcraft/api/nodes/IRevealer.java22
-rw-r--r--src/api/java/thaumcraft/api/nodes/NodeModifier.java6
-rw-r--r--src/api/java/thaumcraft/api/nodes/NodeType.java6
-rw-r--r--src/api/java/thaumcraft/api/package-info.java5
-rw-r--r--src/api/java/thaumcraft/api/potions/PotionFluxTaint.java70
-rw-r--r--src/api/java/thaumcraft/api/potions/PotionVisExhaust.java49
-rw-r--r--src/api/java/thaumcraft/api/research/IScanEventHandler.java10
-rw-r--r--src/api/java/thaumcraft/api/research/ResearchCategories.java116
-rw-r--r--src/api/java/thaumcraft/api/research/ResearchCategoryList.java36
-rw-r--r--src/api/java/thaumcraft/api/research/ResearchItem.java394
-rw-r--r--src/api/java/thaumcraft/api/research/ResearchPage.java206
-rw-r--r--src/api/java/thaumcraft/api/research/ScanResult.java49
-rw-r--r--src/api/java/thaumcraft/api/visnet/TileVisNode.java217
-rw-r--r--src/api/java/thaumcraft/api/visnet/VisNetHandler.java317
-rw-r--r--src/api/java/thaumcraft/api/wands/FocusUpgradeType.java159
-rw-r--r--src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java17
-rw-r--r--src/api/java/thaumcraft/api/wands/IWandTriggerManager.java15
-rw-r--r--src/api/java/thaumcraft/api/wands/IWandable.java26
-rw-r--r--src/api/java/thaumcraft/api/wands/ItemFocusBasic.java314
-rw-r--r--src/api/java/thaumcraft/api/wands/StaffRod.java53
-rw-r--r--src/api/java/thaumcraft/api/wands/WandCap.java145
-rw-r--r--src/api/java/thaumcraft/api/wands/WandRod.java179
-rw-r--r--src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java158
60 files changed, 0 insertions, 6668 deletions
diff --git a/src/api/java/thaumcraft/api/BlockCoordinates.java b/src/api/java/thaumcraft/api/BlockCoordinates.java
deleted file mode 100644
index 9fb5dd8..0000000
--- a/src/api/java/thaumcraft/api/BlockCoordinates.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.tileentity.TileEntity;
-
-public class BlockCoordinates implements Comparable
-{
- public int x;
-
- /** the y coordinate */
- public int y;
-
- /** the z coordinate */
- public int z;
-
- public BlockCoordinates()
- {
- }
-
- public BlockCoordinates(int par1, int par2, int par3)
- {
- x = par1;
- y = par2;
- z = par3;
- }
-
- public BlockCoordinates(TileEntity tile)
- {
- x = tile.xCoord;
- y = tile.yCoord;
- z = tile.zCoord;
- }
-
- public BlockCoordinates(BlockCoordinates par1ChunkCoordinates)
- {
- x = par1ChunkCoordinates.x;
- y = par1ChunkCoordinates.y;
- z = par1ChunkCoordinates.z;
- }
-
- @Override
- public boolean equals(Object par1Obj)
- {
- if(!(par1Obj instanceof BlockCoordinates))
- {
- return false;
- }
- else
- {
- final BlockCoordinates coordinates = (BlockCoordinates) par1Obj;
- return x == coordinates.x && y == coordinates.y && z == coordinates.z;
- }
- }
-
- @Override
- public int hashCode()
- {
- return x + y << 8 + z << 16;
- }
-
- /**
- * Compare the coordinate with another coordinate
- */
- public int compareWorldCoordinate(BlockCoordinates par1)
- {
- return y == par1.y ? (z == par1.z ? x - par1.x : z - par1.z) : y - par1.y;
- }
-
- public void set(int par1, int par2, int par3, int d)
- {
- x = par1;
- y = par2;
- z = par3;
- }
-
- /**
- * Returns the squared distance between this coordinates and the coordinates given as argument.
- */
- public float getDistanceSquared(int par1, int par2, int par3)
- {
- final float f = x - par1;
- final float f1 = y - par2;
- final float f2 = z - par3;
- return f * f + f1 * f1 + f2 * f2;
- }
-
- /**
- * Return the squared distance between this coordinates and the ChunkCoordinates given as argument.
- */
- public float getDistanceSquaredToWorldCoordinates(BlockCoordinates par1ChunkCoordinates)
- {
- return getDistanceSquared(par1ChunkCoordinates.x, par1ChunkCoordinates.y, par1ChunkCoordinates.z);
- }
-
- @Override
- public int compareTo(Object par1Obj)
- {
- return compareWorldCoordinate((BlockCoordinates) par1Obj);
- }
-
- public void readNBT(NBTTagCompound nbt)
- {
- x = nbt.getInteger("b_x");
- y = nbt.getInteger("b_y");
- z = nbt.getInteger("b_z");
- }
-
- public void writeNBT(NBTTagCompound nbt)
- {
- nbt.setInteger("b_x", x);
- nbt.setInteger("b_y", y);
- nbt.setInteger("b_z", z);
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/IArchitect.java b/src/api/java/thaumcraft/api/IArchitect.java
deleted file mode 100644
index ba25d98..0000000
--- a/src/api/java/thaumcraft/api/IArchitect.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package thaumcraft.api;
-
-import java.util.ArrayList;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-
-public interface IArchitect
-{
-
- /**
- * Returns a list of blocks that should be highlighted in world.
- */
- public ArrayList<BlockCoordinates> getArchitectBlocks(ItemStack stack, World world, int x, int y, int z, int side, EntityPlayer player);
-
- /**
- * which axis should be displayed.
- */
- public boolean showAxis(ItemStack stack, World world, EntityPlayer player, int side, EnumAxis axis);
-
- public enum EnumAxis
- {
- X, // east / west
- Y, // up / down
- Z; // north / south
- }
-}
diff --git a/src/api/java/thaumcraft/api/IGoggles.java b/src/api/java/thaumcraft/api/IGoggles.java
deleted file mode 100644
index 743e0e9..0000000
--- a/src/api/java/thaumcraft/api/IGoggles.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.item.ItemStack;
-
-/**
- *
- * @author Azanor
- *
- * Equipped head slot items that extend this class will be able to perform most functions that
- * goggles of revealing can apart from view nodes which is handled by IRevealer.
- *
- */
-
-public interface IGoggles
-{
-
- /*
- * If this method returns true things like block essentia contents will be shown.
- */
- public boolean showIngamePopups(ItemStack itemstack, EntityLivingBase player);
-
-}
diff --git a/src/api/java/thaumcraft/api/IRepairable.java b/src/api/java/thaumcraft/api/IRepairable.java
deleted file mode 100644
index a742f2b..0000000
--- a/src/api/java/thaumcraft/api/IRepairable.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package thaumcraft.api;
-
-/**
- * @author Azanor
- * Items, armor and tools with this interface can receive the Repair enchantment.
- * Repairs 1 point of durability every 10 seconds (2 for repair II)
- */
-public interface IRepairable
-{
-
-}
diff --git a/src/api/java/thaumcraft/api/IRepairableExtended.java b/src/api/java/thaumcraft/api/IRepairableExtended.java
deleted file mode 100644
index 87e4479..0000000
--- a/src/api/java/thaumcraft/api/IRepairableExtended.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-
-/**
- * @author Azanor
- * Items, armor and tools with this interface can receive the Repair enchantment.
- * Repairs 1 point of durability every 10 seconds (2 for repair II)
- */
-public interface IRepairableExtended extends IRepairable
-{
-
- public boolean doRepair(ItemStack stack, EntityPlayer player, int enchantlevel);
-
-}
diff --git a/src/api/java/thaumcraft/api/IRunicArmor.java b/src/api/java/thaumcraft/api/IRunicArmor.java
deleted file mode 100644
index d9ed818..0000000
--- a/src/api/java/thaumcraft/api/IRunicArmor.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.item.ItemStack;
-
-/**
- *
- * @author Azanor
- *
- * Armor or bauble slot items that implement this interface can provide runic shielding.
- * Recharging, hardening, etc. is handled internally by thaumcraft.
- *
- */
-
-public interface IRunicArmor
-{
-
- /**
- * returns how much charge this item can provide. This is the base shielding value - any hardening is stored and calculated internally.
- */
- public int getRunicCharge(ItemStack itemstack);
-
-}
diff --git a/src/api/java/thaumcraft/api/IScribeTools.java b/src/api/java/thaumcraft/api/IScribeTools.java
deleted file mode 100644
index d6dbb8d..0000000
--- a/src/api/java/thaumcraft/api/IScribeTools.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package thaumcraft.api;
-
-/**
- *
- * @author Azanor
- *
- * Interface used to identify scribing tool items used in research table
- *
- */
-
-public interface IScribeTools
-{
-
-}
diff --git a/src/api/java/thaumcraft/api/IVisDiscountGear.java b/src/api/java/thaumcraft/api/IVisDiscountGear.java
deleted file mode 100644
index 6032b07..0000000
--- a/src/api/java/thaumcraft/api/IVisDiscountGear.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import thaumcraft.api.aspects.Aspect;
-
-/**
- * @author Azanor
- * ItemArmor with this interface will grant a discount to the vis cost of actions the wearer performs with casting wands.
- * The amount returned is the percentage by which the cost is discounted. There is a built-int max discount of 50%, but
- * individual items really shouldn't have a discount more than 5%
- */
-public interface IVisDiscountGear
-{
-
- int getVisDiscount(ItemStack stack, EntityPlayer player, Aspect aspect);
-
-}
diff --git a/src/api/java/thaumcraft/api/IWarpingGear.java b/src/api/java/thaumcraft/api/IWarpingGear.java
deleted file mode 100644
index 674054f..0000000
--- a/src/api/java/thaumcraft/api/IWarpingGear.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-
-/**
- *
- * @author Azanor
- *
- * Armor, held items or bauble slot items that implement this interface add warp when equipped or held.
- *
- */
-
-public interface IWarpingGear
-{
-
- /**
- * returns how much warp this item adds while worn or held.
- */
- public int getWarp(ItemStack itemstack, EntityPlayer player);
-
-}
diff --git a/src/api/java/thaumcraft/api/ItemApi.java b/src/api/java/thaumcraft/api/ItemApi.java
deleted file mode 100644
index 3aea4f1..0000000
--- a/src/api/java/thaumcraft/api/ItemApi.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.block.Block;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import cpw.mods.fml.common.FMLLog;
-
-/**
- * @author Azanor
- *
- * This is used to gain access to the items in my mod.
- * I only give some examples and it will probably still
- * require a bit of work for you to get hold of everything you need.
- *
- */
-public class ItemApi
-{
-
- public static ItemStack getItem(String itemString, int meta)
- {
- ItemStack item = null;
-
- try
- {
- final String itemClass = "thaumcraft.common.config.ConfigItems";
- final Object obj = Class.forName(itemClass).getField(itemString).get(null);
- if(obj instanceof Item)
- {
- item = new ItemStack((Item) obj, 1, meta);
- }
- else if(obj instanceof ItemStack)
- {
- item = (ItemStack) obj;
- }
- }
- catch(final Exception ex)
- {
- FMLLog.warning("[Thaumcraft] Could not retrieve item identified by: " + itemString);
- }
-
- return item;
- }
-
- public static ItemStack getBlock(String itemString, int meta)
- {
- ItemStack item = null;
-
- try
- {
- final String itemClass = "thaumcraft.common.config.ConfigBlocks";
- final Object obj = Class.forName(itemClass).getField(itemString).get(null);
- if(obj instanceof Block)
- {
- item = new ItemStack((Block) obj, 1, meta);
- }
- else if(obj instanceof ItemStack)
- {
- item = (ItemStack) obj;
- }
- }
- catch(final Exception ex)
- {
- FMLLog.warning("[Thaumcraft] Could not retrieve block identified by: " + itemString);
- }
-
- return item;
- }
-
- /**
- *
- * Some examples
- *
- * Casting Wands:
- * itemWandCasting
- *
- * Resources:
- * itemEssence, itemWispEssence, itemResource, itemShard, itemNugget,
- * itemNuggetChicken, itemNuggetBeef, itemNuggetPork, itemTripleMeatTreat
- *
- * Research:
- * itemResearchNotes, itemInkwell, itemThaumonomicon
- *
- */
-
-}
diff --git a/src/api/java/thaumcraft/api/ItemRunic.java b/src/api/java/thaumcraft/api/ItemRunic.java
deleted file mode 100644
index 3517558..0000000
--- a/src/api/java/thaumcraft/api/ItemRunic.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-
-public class ItemRunic extends Item implements IRunicArmor
-{
-
- int charge;
-
- public ItemRunic(int charge)
- {
- super();
- this.charge = charge;
- }
-
- @Override
- public int getRunicCharge(ItemStack itemstack)
- {
- return charge;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/ThaumcraftApi.java b/src/api/java/thaumcraft/api/ThaumcraftApi.java
deleted file mode 100644
index c01d521..0000000
--- a/src/api/java/thaumcraft/api/ThaumcraftApi.java
+++ /dev/null
@@ -1,716 +0,0 @@
-package thaumcraft.api;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-import net.minecraft.block.Block;
-import net.minecraft.enchantment.Enchantment;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.Item.ToolMaterial;
-import net.minecraft.item.ItemArmor.ArmorMaterial;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.common.util.EnumHelper;
-import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-import thaumcraft.api.crafting.CrucibleRecipe;
-import thaumcraft.api.crafting.InfusionEnchantmentRecipe;
-import thaumcraft.api.crafting.InfusionRecipe;
-import thaumcraft.api.crafting.ShapedArcaneRecipe;
-import thaumcraft.api.crafting.ShapelessArcaneRecipe;
-import thaumcraft.api.internal.DummyInternalMethodHandler;
-import thaumcraft.api.internal.IInternalMethodHandler;
-import thaumcraft.api.internal.WeightedRandomLoot;
-import thaumcraft.api.research.IScanEventHandler;
-import thaumcraft.api.research.ResearchCategories;
-import thaumcraft.api.research.ResearchCategoryList;
-import thaumcraft.api.research.ResearchItem;
-import thaumcraft.api.research.ResearchPage;
-
-/**
- * @author Azanor
- *
- *
- * IMPORTANT: If you are adding your own aspects to items it is a good idea to do it AFTER Thaumcraft adds its aspects, otherwise odd things may happen.
- *
- */
-public class ThaumcraftApi
-{
-
- //Materials
- public static ToolMaterial toolMatThaumium = EnumHelper.addToolMaterial("THAUMIUM", 3, 400, 7F, 2, 22);
- public static ToolMaterial toolMatVoid = EnumHelper.addToolMaterial("VOID", 4, 150, 8F, 3, 10);
- public static ToolMaterial toolMatElemental = EnumHelper.addToolMaterial("THAUMIUM_ELEMENTAL", 3, 1500, 10F, 3, 18);
- public static ArmorMaterial armorMatThaumium = EnumHelper.addArmorMaterial("THAUMIUM", 25, new int[] {2, 6, 5, 2}, 25);
- public static ArmorMaterial armorMatSpecial = EnumHelper.addArmorMaterial("SPECIAL", 25, new int[] {1, 3, 2, 1}, 25);
- public static ArmorMaterial armorMatThaumiumFortress = EnumHelper.addArmorMaterial("FORTRESS", 40, new int[] {3, 7, 6, 3}, 25);
- public static ArmorMaterial armorMatVoid = EnumHelper.addArmorMaterial("VOID", 10, new int[] {3, 7, 6, 3}, 10);
- public static ArmorMaterial armorMatVoidFortress = EnumHelper.addArmorMaterial("VOIDFORTRESS", 18, new int[] {4, 8, 7, 4}, 10);
-
- //Enchantment references
- public static int enchantFrugal;
- public static int enchantPotency;
- public static int enchantWandFortune;
- public static int enchantHaste;
- public static int enchantRepair;
-
- //Miscellaneous
- /**
- * Portable Hole Block-id Blacklist.
- * Simply add the block-id's of blocks you don't want the portable hole to go through.
- */
- public static ArrayList<Block> portableHoleBlackList = new ArrayList<Block>();
-
- //Internal (Do not alter this unless you like pretty explosions)
- //Calling methods from this will only work properly once Thaumcraft is past the FMLPreInitializationEvent phase.
- public static IInternalMethodHandler internalMethods = new DummyInternalMethodHandler();
-
- //RESEARCH/////////////////////////////////////////
- public static ArrayList<IScanEventHandler> scanEventhandlers = new ArrayList<IScanEventHandler>();
- public static ArrayList<EntityTags> scanEntities = new ArrayList<EntityTags>();
-
- public static class EntityTagsNBT
- {
- public EntityTagsNBT(String name, Object value)
- {
- this.name = name;
- this.value = value;
- }
-
- public String name;
- public Object value;
- }
-
- public static class EntityTags
- {
- public EntityTags(String entityName, AspectList aspects, EntityTagsNBT... nbts)
- {
- this.entityName = entityName;
- this.nbts = nbts;
- this.aspects = aspects;
- }
-
- public String entityName;
- public EntityTagsNBT[] nbts;
- public AspectList aspects;
- }
-
- /**
- * not really working atm, so ignore it for now
- * @param scanEventHandler
- */
- public static void registerScanEventhandler(IScanEventHandler scanEventHandler)
- {
- scanEventhandlers.add(scanEventHandler);
- }
-
- /**
- * This is used to add aspects to entities which you can then scan using a thaumometer.
- * Also used to calculate vis drops from mobs.
- * @param entityName
- * @param aspects
- * @param nbt you can specify certain nbt keys and their values
- * to differentiate between mobs. <br>For example the normal and wither skeleton:
- * <br>ThaumcraftApi.registerEntityTag("Skeleton", (new AspectList()).add(Aspect.DEATH, 5));
- * <br>ThaumcraftApi.registerEntityTag("Skeleton", (new AspectList()).add(Aspect.DEATH, 8), new NBTTagByte("SkeletonType",(byte) 1));
- */
- public static void registerEntityTag(String entityName, AspectList aspects, EntityTagsNBT... nbt)
- {
- scanEntities.add(new EntityTags(entityName, aspects, nbt));
- }
-
- //RECIPES/////////////////////////////////////////
- private static ArrayList craftingRecipes = new ArrayList();
- private static HashMap<Object, ItemStack> smeltingBonus = new HashMap<Object, ItemStack>();
-
- /**
- * This method is used to determine what bonus items are generated when the infernal furnace smelts items
- * @param in The input of the smelting operation. e.g. new ItemStack(Block.oreGold)
- * @param out The bonus item that can be produced from the smelting operation e.g. new ItemStack(nuggetGold,0,0).
- * Stacksize should be 0 unless you want to guarantee that at least 1 item is always produced.
- */
- public static void addSmeltingBonus(ItemStack in, ItemStack out)
- {
- smeltingBonus.put(Arrays.asList(in.getItem(), in.getItemDamage()), new ItemStack(
- out.getItem(), 0, out.getItemDamage()));
- }
-
- /**
- * This method is used to determine what bonus items are generated when the infernal furnace smelts items
- * @param in The ore dictionary input of the smelting operation. e.g. "oreGold"
- * @param out The bonus item that can be produced from the smelting operation e.g. new ItemStack(nuggetGold,0,0).
- * Stacksize should be 0 unless you want to guarantee that at least 1 item is always produced.
- */
- public static void addSmeltingBonus(String in, ItemStack out)
- {
- smeltingBonus.put(in, new ItemStack(out.getItem(), 0,
- out.getItemDamage()));
- }
-
- /**
- * Returns the bonus item produced from a smelting operation in the infernal furnace
- * @param in The input of the smelting operation. e.g. new ItemStack(oreGold)
- * @return the The bonus item that can be produced
- */
- public static ItemStack getSmeltingBonus(ItemStack in)
- {
- ItemStack out = smeltingBonus.get(Arrays.asList(in.getItem(), in.getItemDamage()));
- if(out == null)
- {
- out = smeltingBonus.get(Arrays.asList(in.getItem(), OreDictionary.WILDCARD_VALUE));
- }
- if(out == null)
- {
- final String od = OreDictionary.getOreName(OreDictionary.getOreID(in));
- out = smeltingBonus.get(od);
- }
- return out;
- }
-
- public static List getCraftingRecipes()
- {
- return craftingRecipes;
- }
-
- /**
- * @param research the research key required for this recipe to work. Leave blank if it will work without research
- * @param result the recipe output
- * @param aspects the vis cost per aspect.
- * @param recipe The recipe. Format is exactly the same as vanilla recipes. Input itemstacks are NBT sensitive.
- */
- public static ShapedArcaneRecipe addArcaneCraftingRecipe(String research, ItemStack result, AspectList aspects, Object... recipe)
- {
- final ShapedArcaneRecipe r = new ShapedArcaneRecipe(research, result,
- aspects, recipe);
- craftingRecipes.add(r);
- return r;
- }
-
- /**
- * @param research the research key required for this recipe to work. Leave blank if it will work without research
- * @param result the recipe output
- * @param aspects the vis cost per aspect
- * @param recipe The recipe. Format is exactly the same as vanilla shapeless recipes. Input itemstacks are NBT sensitive.
- */
- public static ShapelessArcaneRecipe addShapelessArcaneCraftingRecipe(String research, ItemStack result, AspectList aspects, Object... recipe)
- {
- final ShapelessArcaneRecipe r = new ShapelessArcaneRecipe(research, result,
- aspects, recipe);
- craftingRecipes.add(r);
- return r;
- }
-
- /**
- * @param research the research key required for this recipe to work. Leave blank if it will work without research
- * @param result the recipe output. It can either be an itemstack or an nbt compound tag that will be added to the central item
- * @param instability a number that represents the N in 1000 chance for the infusion altar to spawn an
- * instability effect each second while the crafting is in progress
- * @param aspects the essentia cost per aspect.
- * @param aspects input the central item to be infused
- * @param recipe An array of items required to craft this. Input itemstacks are NBT sensitive.
- * Infusion crafting components are automatically "fuzzy" and the oredict will be checked for possible matches.
- *
- */
- public static InfusionRecipe addInfusionCraftingRecipe(String research, Object result, int instability, AspectList aspects, ItemStack input, ItemStack[] recipe)
- {
- if(!(result instanceof ItemStack || result instanceof Object[]))
- {
- return null;
- }
- final InfusionRecipe r = new InfusionRecipe(research, result, instability,
- aspects, input, recipe);
- craftingRecipes.add(r);
- return r;
- }
-
- /**
- * @param research the research key required for this recipe to work. Leave blank if it will work without research
- * @param enchantment the enchantment that will be applied to the item
- * @param instability a number that represents the N in 1000 chance for the infusion altar to spawn an
- * instability effect each second while the crafting is in progress
- * @param aspects the essentia cost per aspect.
- * @param recipe An array of items required to craft this. Input itemstacks are NBT sensitive.
- * Infusion crafting components are automatically "fuzzy" and the oredict will be checked for possible matches.
- *
- */
- public static InfusionEnchantmentRecipe addInfusionEnchantmentRecipe(String research, Enchantment enchantment, int instability, AspectList aspects, ItemStack[] recipe)
- {
- final InfusionEnchantmentRecipe r = new InfusionEnchantmentRecipe(research,
- enchantment, instability, aspects, recipe);
- craftingRecipes.add(r);
- return r;
- }
-
- /**
- * @param stack the recipe result
- * @return the recipe
- */
- public static InfusionRecipe getInfusionRecipe(ItemStack res)
- {
- for(final Object r : getCraftingRecipes())
- {
- if(r instanceof InfusionRecipe)
- {
- if(((InfusionRecipe) r).getRecipeOutput() instanceof ItemStack)
- {
- if(((ItemStack) ((InfusionRecipe) r).getRecipeOutput()).isItemEqual(res))
- {
- return (InfusionRecipe) r;
- }
- }
- }
- }
- return null;
- }
-
- /**
- * @param key the research key required for this recipe to work.
- * @param result the output result
- * @param catalyst an itemstack of the catalyst or a string if it is an ore dictionary item
- * @param cost the vis cost
- * @param tags the aspects required to craft this
- */
- public static CrucibleRecipe addCrucibleRecipe(String key, ItemStack result, Object catalyst, AspectList tags)
- {
- final CrucibleRecipe rc = new CrucibleRecipe(key, result, catalyst, tags);
- getCraftingRecipes().add(rc);
- return rc;
- }
-
- /**
- * @param stack the recipe result
- * @return the recipe
- */
- public static CrucibleRecipe getCrucibleRecipe(ItemStack stack)
- {
- for(final Object r : getCraftingRecipes())
- {
- if(r instanceof CrucibleRecipe)
- {
- if(((CrucibleRecipe) r).getRecipeOutput().isItemEqual(stack))
- {
- return (CrucibleRecipe) r;
- }
- }
- }
- return null;
- }
-
- /**
- * @param hash the unique recipe code
- * @return the recipe
- */
- public static CrucibleRecipe getCrucibleRecipeFromHash(int hash)
- {
- for(final Object r : getCraftingRecipes())
- {
- if(r instanceof CrucibleRecipe)
- {
- if(((CrucibleRecipe) r).hash == hash)
- {
- return (CrucibleRecipe) r;
- }
- }
- }
- return null;
- }
-
- /**
- * Used by the thaumonomicon drilldown feature.
- * @param stack the item
- * @return the thaumcraft recipe key that produces that item.
- */
- private static HashMap<int[], Object[]> keyCache = new HashMap<int[], Object[]>();
-
- public static Object[] getCraftingRecipeKey(EntityPlayer player, ItemStack stack)
- {
- final int[] key = new int[] {Item.getIdFromItem(stack.getItem()), stack.getItemDamage()};
- if(keyCache.containsKey(key))
- {
- if(keyCache.get(key) == null)
- {
- return null;
- }
- if(ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), (String) (keyCache.get(key))[0]))
- {
- return keyCache.get(key);
- }
- else
- {
- return null;
- }
- }
- for(final ResearchCategoryList rcl : ResearchCategories.researchCategories.values())
- {
- for(final ResearchItem ri : rcl.research.values())
- {
- if(ri.getPages() == null)
- {
- continue;
- }
- for(int a = 0; a < ri.getPages().length; a++)
- {
- final ResearchPage page = ri.getPages()[a];
- if(page.recipe != null && page.recipe instanceof CrucibleRecipe[])
- {
- final CrucibleRecipe[] crs = (CrucibleRecipe[]) page.recipe;
- for(final CrucibleRecipe cr : crs)
- {
- if(cr.getRecipeOutput().isItemEqual(stack))
- {
- keyCache.put(key, new Object[] {ri.key, a});
- if(ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), ri.key))
- {
- return new Object[] {ri.key, a};
- }
- }
- }
- }
- else if(page.recipeOutput != null && stack != null && page.recipeOutput.isItemEqual(stack))
- {
- keyCache.put(key, new Object[] {ri.key, a});
- if(ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), ri.key))
- {
- return new Object[] {ri.key, a};
- }
- else
- {
- return null;
- }
- }
- }
- }
- }
- keyCache.put(key, null);
- return null;
- }
-
- //ASPECTS////////////////////////////////////////
-
- public static ConcurrentHashMap<List, AspectList> objectTags = new ConcurrentHashMap<List, AspectList>();
- public static ConcurrentHashMap<List, int[]> groupedObjectTags = new ConcurrentHashMap<List, int[]>();
-
- /**
- * Checks to see if the passed item/block already has aspects associated with it.
- * @param id
- * @param meta
- * @return
- */
- public static boolean exists(Item item, int meta)
- {
- AspectList tmp = ThaumcraftApi.objectTags.get(Arrays.asList(item, meta));
- if(tmp == null)
- {
- tmp = ThaumcraftApi.objectTags.get(Arrays.asList(item, OreDictionary.WILDCARD_VALUE));
- if(meta == OreDictionary.WILDCARD_VALUE && tmp == null)
- {
- int index = 0;
- do
- {
- tmp = ThaumcraftApi.objectTags.get(Arrays.asList(item, index));
- index++;
- }
- while(index < 16 && tmp == null);
- }
- if(tmp == null)
- {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Used to assign apsects to the given item/block. Here is an example of the declaration for cobblestone:<p>
- * <i>ThaumcraftApi.registerObjectTag(new ItemStack(Blocks.cobblestone), (new AspectList()).add(Aspect.ENTROPY, 1).add(Aspect.EARTH, 1));</i>
- * @param item the item passed. Pass OreDictionary.WILDCARD_VALUE if all damage values of this item/block should have the same aspects
- * @param aspects A ObjectTags object of the associated aspects
- */
- public static void registerObjectTag(ItemStack item, AspectList aspects)
- {
- if(aspects == null)
- {
- aspects = new AspectList();
- }
- try
- {
- objectTags.put(Arrays.asList(item.getItem(), item.getItemDamage()), aspects);
- }
- catch(final Exception e)
- {
- }
- }
-
- /**
- * Used to assign apsects to the given item/block. Here is an example of the declaration for cobblestone:<p>
- * <i>ThaumcraftApi.registerObjectTag(new ItemStack(Blocks.cobblestone), new int[]{0,1}, (new AspectList()).add(Aspect.ENTROPY, 1).add(Aspect.EARTH, 1));</i>
- * @param item
- * @param meta A range of meta values if you wish to lump several item meta's together as being the "same" item (i.e. stair orientations)
- * @param aspects A ObjectTags object of the associated aspects
- */
- public static void registerObjectTag(ItemStack item, int[] meta, AspectList aspects)
- {
- if(aspects == null)
- {
- aspects = new AspectList();
- }
- try
- {
- objectTags.put(Arrays.asList(item.getItem(), meta[0]), aspects);
- for(final int m : meta)
- {
- groupedObjectTags.put(Arrays.asList(item.getItem(), m), meta);
- }
-
- }
- catch(final Exception e)
- {
- }
- }
-
- /**
- * Used to assign apsects to the given ore dictionary item.
- * @param oreDict the ore dictionary name
- * @param aspects A ObjectTags object of the associated aspects
- */
- public static void registerObjectTag(String oreDict, AspectList aspects)
- {
- if(aspects == null)
- {
- aspects = new AspectList();
- }
- final ArrayList<ItemStack> ores = OreDictionary.getOres(oreDict);
- if(ores != null && ores.size() > 0)
- {
- for(final ItemStack ore : ores)
- {
- try
- {
- objectTags.put(Arrays.asList(ore.getItem(), ore.getItemDamage()), aspects);
- }
- catch(final Exception e)
- {
- }
- }
- }
- }
-
- /**
- * Used to assign aspects to the given item/block.
- * Attempts to automatically generate aspect tags by checking registered recipes.
- * Here is an example of the declaration for pistons:<p>
- * <i>ThaumcraftApi.registerComplexObjectTag(new ItemStack(Blocks.cobblestone), (new AspectList()).add(Aspect.MECHANISM, 2).add(Aspect.MOTION, 4));</i>
- * IMPORTANT - this should only be used if you are not happy with the default aspects the object would be assigned.
- * @param item, pass OreDictionary.WILDCARD_VALUE to meta if all damage values of this item/block should have the same aspects
- * @param aspects A ObjectTags object of the associated aspects
- */
- public static void registerComplexObjectTag(ItemStack item, AspectList aspects)
- {
- if(!exists(item.getItem(), item.getItemDamage()))
- {
- final AspectList tmp = ThaumcraftApiHelper.generateTags(item.getItem(), item.getItemDamage());
- if(tmp != null && tmp.size() > 0)
- {
- for(final Aspect tag : tmp.getAspects())
- {
- aspects.add(tag, tmp.getAmount(tag));
- }
- }
- registerObjectTag(item, aspects);
- }
- else
- {
- final AspectList tmp = ThaumcraftApiHelper.getObjectAspects(item);
- for(final Aspect tag : aspects.getAspects())
- {
- tmp.merge(tag, tmp.getAmount(tag));
- }
- registerObjectTag(item, tmp);
- }
- }
-
- //WARP ///////////////////////////////////////////////////////////////////////////////////////
- private static HashMap<Object, Integer> warpMap = new HashMap<Object, Integer>();
-
- /**
- * This method is used to determine how much warp is gained if the item is crafted. The warp
- * added is "sticky" warp
- * @param craftresult The item crafted
- * @param amount how much warp is gained
- */
- public static void addWarpToItem(ItemStack craftresult, int amount)
- {
- warpMap.put(Arrays.asList(craftresult.getItem(), craftresult.getItemDamage()), amount);
- }
-
- /**
- * This method is used to determine how much permanent warp is gained if the research is completed
- * @param in The item crafted
- * @param amount how much warp is gained
- */
- public static void addWarpToResearch(String research, int amount)
- {
- warpMap.put(research, amount);
- }
-
- /**
- * Returns how much warp is gained from the item or research passed in
- * @param in itemstack or string
- * @return how much warp it will give
- */
- public static int getWarp(Object in)
- {
- if(in == null)
- {
- return 0;
- }
- if(in instanceof ItemStack && warpMap.containsKey(Arrays.asList(((ItemStack) in).getItem(), ((ItemStack) in).getItemDamage())))
- {
- return warpMap.get(Arrays.asList(((ItemStack) in).getItem(), ((ItemStack) in).getItemDamage()));
- }
- else if(in instanceof String && warpMap.containsKey(in))
- {
- return warpMap.get(in);
- }
- return 0;
- }
-
- //LOOT BAGS //////////////////////////////////////////////////////////////////////////////////////////
-
- /**
- * Used to add possible loot to treasure bags. As a reference, the weight of gold coins are 2000
- * and a diamond is 50.
- * The weights are the same for all loot bag types - the only difference is how many items the bag
- * contains.
- * @param item
- * @param weight
- * @param bagTypes array of which type of bag to add this loot to. Multiple types can be specified
- * 0 = common, 1 = uncommon, 2 = rare
- */
- public static void addLootBagItem(ItemStack item, int weight, int... bagTypes)
- {
- if(bagTypes == null || bagTypes.length == 0)
- {
- WeightedRandomLoot.lootBagCommon.add(new WeightedRandomLoot(item,
- weight));
- }
- else
- {
- for(final int rarity : bagTypes)
- {
- switch(rarity)
- {
- case 0:
- WeightedRandomLoot.lootBagCommon.add(new WeightedRandomLoot(
- item, weight));
- break;
- case 1:
- WeightedRandomLoot.lootBagUncommon.add(new WeightedRandomLoot(
- item, weight));
- break;
- case 2:
- WeightedRandomLoot.lootBagRare.add(new WeightedRandomLoot(
- item, weight));
- break;
- }
- }
- }
- }
-
- //CROPS //////////////////////////////////////////////////////////////////////////////////////////
-
- /**
- * To define mod crops you need to use FMLInterModComms in your @Mod.Init method.
- * There are two 'types' of crops you can add. Standard crops and clickable crops.
- *
- * Standard crops work like normal vanilla crops - they grow until a certain metadata
- * value is reached and you harvest them by destroying the block and collecting the blocks.
- * You need to create and ItemStack that tells the golem what block id and metadata represents
- * the crop when fully grown. Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the metadata won't get
- * checked.
- * Example for vanilla wheat:
- * FMLInterModComms.sendMessage("Thaumcraft", "harvestStandardCrop", new ItemStack(Block.crops,1,7));
- *
- * Clickable crops are crops that you right click to gather their bounty instead of destroying them.
- * As for standard crops, you need to create and ItemStack that tells the golem what block id
- * and metadata represents the crop when fully grown. The golem will trigger the blocks onBlockActivated method.
- * Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the metadata won't get checked.
- * Example (this will technically do nothing since clicking wheat does nothing, but you get the idea):
- * FMLInterModComms.sendMessage("Thaumcraft", "harvestClickableCrop", new ItemStack(Block.crops,1,7));
- *
- * Stacked crops (like reeds) are crops that you wish the bottom block should remain after harvesting.
- * As for standard crops, you need to create and ItemStack that tells the golem what block id
- * and metadata represents the crop when fully grown. Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the actualy md won't get
- * checked. If it has the order upgrade it will only harvest if the crop is more than one block high.
- * Example:
- * FMLInterModComms.sendMessage("Thaumcraft", "harvestStackedCrop", new ItemStack(Block.reed,1,7));
- */
-
- //NATIVE CLUSTERS //////////////////////////////////////////////////////////////////////////////////
-
- /**
- * You can define certain ores that will have a chance to produce native clusters via FMLInterModComms
- * in your @Mod.Init method using the "nativeCluster" string message.
- * The format should be:
- * "[ore item/block id],[ore item/block metadata],[cluster item/block id],[cluster item/block metadata],[chance modifier float]"
- *
- * NOTE: The chance modifier is a multiplier applied to the default chance for that cluster to be produced (default 27.5% for a pickaxe of the core)
- *
- * Example for vanilla iron ore to produce one of my own native iron clusters (assuming default id's) at double the default chance:
- * FMLInterModComms.sendMessage("Thaumcraft", "nativeCluster","15,0,25016,16,2.0");
- */
-
- //LAMP OF GROWTH BLACKLIST ///////////////////////////////////////////////////////////////////////////
- /**
- * You can blacklist crops that should not be effected by the Lamp of Growth via FMLInterModComms
- * in your @Mod.Init method using the "lampBlacklist" itemstack message.
- * Sending a metadata of [OreDictionary.WILDCARD_VALUE] will mean the metadata won't get checked.
- * Example for vanilla wheat:
- * FMLInterModComms.sendMessage("Thaumcraft", "lampBlacklist", new ItemStack(Block.crops,1,OreDictionary.WILDCARD_VALUE));
- */
-
- //DIMENSION BLACKLIST ///////////////////////////////////////////////////////////////////////////
- /**
- * You can blacklist a dimension to not spawn certain thaumcraft features
- * in your @Mod.Init method using the "dimensionBlacklist" string message in the format "[dimension]:[level]"
- * The level values are as follows:
- * [0] stop all tc spawning and generation
- * [1] allow ore and node generation (and node special features)
- * [2] allow mob spawning
- * [3] allow ore and node gen + mob spawning (and node special features)
- * Example:
- * FMLInterModComms.sendMessage("Thaumcraft", "dimensionBlacklist", "15:1");
- */
-
- //BIOME BLACKLIST ///////////////////////////////////////////////////////////////////////////
- /**
- * You can blacklist a biome to not spawn certain thaumcraft features
- * in your @Mod.Init method using the "biomeBlacklist" string message in the format "[biome id]:[level]"
- * The level values are as follows:
- * [0] stop all tc spawning and generation
- * [1] allow ore and node generation (and node special features)
- * [2] allow mob spawning
- * [3] allow ore and node gen + mob spawning (and node special features)
- * Example:
- * FMLInterModComms.sendMessage("Thaumcraft", "biomeBlacklist", "180:2");
- */
-
- //CHAMPION MOB WHITELIST ///////////////////////////////////////////////////////////////////////////
- /**
- * You can whitelist an entity class so it can rarely spawn champion versions in your @Mod.Init method using
- * the "championWhiteList" string message in the format "[Entity]:[level]"
- * The entity must extend EntityMob.
- * [Entity] is in a similar format to what is used for mob spawners and such (see EntityList.class for vanilla examples).
- * The [level] value indicate how rare the champion version will be - the higher the number the more common.
- * The number roughly equals the [n] in 100 chance of a mob being a champion version.
- * You can give 0 or negative numbers to allow champions to spawn with a very low chance only in particularly dangerous places.
- * However anything less than about -2 will probably result in no spawns at all.
- * Example:
- * FMLInterModComms.sendMessage("Thaumcraft", "championWhiteList", "Thaumcraft.Wisp:1");
- */
-}
diff --git a/src/api/java/thaumcraft/api/ThaumcraftApiHelper.java b/src/api/java/thaumcraft/api/ThaumcraftApiHelper.java
deleted file mode 100644
index 83ac4d2..0000000
--- a/src/api/java/thaumcraft/api/ThaumcraftApiHelper.java
+++ /dev/null
@@ -1,523 +0,0 @@
-package thaumcraft.api;
-
-import java.util.HashMap;
-import java.util.Iterator;
-
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.tileentity.TileEntity;
-import net.minecraft.util.MathHelper;
-import net.minecraft.util.MovingObjectPosition;
-import net.minecraft.util.Vec3;
-import net.minecraft.world.IBlockAccess;
-import net.minecraft.world.World;
-import net.minecraftforge.common.util.ForgeDirection;
-import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-import thaumcraft.api.aspects.IEssentiaTransport;
-
-public class ThaumcraftApiHelper
-{
-
- public static AspectList cullTags(AspectList temp)
- {
- final AspectList temp2 = new AspectList();
- for(final Aspect tag : temp.getAspects())
- {
- if(tag != null)
- {
- temp2.add(tag, temp.getAmount(tag));
- }
- }
- while(temp2 != null && temp2.size() > 6)
- {
- Aspect lowest = null;
- float low = Short.MAX_VALUE;
- for(final Aspect tag : temp2.getAspects())
- {
- if(tag == null)
- {
- continue;
- }
- float ta = temp2.getAmount(tag);
- if(tag.isPrimal())
- {
- ta *= .9f;
- }
- else
- {
- if(!tag.getComponents()[0].isPrimal())
- {
- ta *= 1.1f;
- if(!tag.getComponents()[0].getComponents()[0].isPrimal())
- {
- ta *= 1.05f;
- }
- if(!tag.getComponents()[0].getComponents()[1].isPrimal())
- {
- ta *= 1.05f;
- }
- }
- if(!tag.getComponents()[1].isPrimal())
- {
- ta *= 1.1f;
- if(!tag.getComponents()[1].getComponents()[0].isPrimal())
- {
- ta *= 1.05f;
- }
- if(!tag.getComponents()[1].getComponents()[1].isPrimal())
- {
- ta *= 1.05f;
- }
- }
- }
-
- if(ta < low)
- {
- low = ta;
- lowest = tag;
- }
- }
- temp2.aspects.remove(lowest);
- }
- return temp2;
- }
-
- public static boolean areItemsEqual(ItemStack s1, ItemStack s2)
- {
- if(s1.isItemStackDamageable() && s2.isItemStackDamageable())
- {
- return s1.getItem() == s2.getItem();
- }
- else
- {
- return s1.getItem() == s2.getItem() && s1.getItemDamage() == s2.getItemDamage();
- }
- }
-
- public static boolean isResearchComplete(String username, String researchkey)
- {
- return ThaumcraftApi.internalMethods.isResearchComplete(username, researchkey);
- }
-
- public static boolean hasDiscoveredAspect(String username, Aspect aspect)
- {
- return ThaumcraftApi.internalMethods.hasDiscoveredAspect(username, aspect);
- }
-
- public static AspectList getDiscoveredAspects(String username)
- {
- return ThaumcraftApi.internalMethods.getDiscoveredAspects(username);
- }
-
- public static ItemStack getStackInRowAndColumn(Object instance, int row, int column)
- {
- return ThaumcraftApi.internalMethods.getStackInRowAndColumn(instance, row, column);
- }
-
- public static AspectList getObjectAspects(ItemStack is)
- {
- return ThaumcraftApi.internalMethods.getObjectAspects(is);
- }
-
- public static AspectList getBonusObjectTags(ItemStack is, AspectList ot)
- {
- return ThaumcraftApi.internalMethods.getBonusObjectTags(is, ot);
- }
-
- public static AspectList generateTags(Item item, int meta)
- {
- return ThaumcraftApi.internalMethods.generateTags(item, meta);
- }
-
- public static boolean containsMatch(boolean strict, ItemStack[] inputs, ItemStack... targets)
- {
- for(final ItemStack input : inputs)
- {
- for(final ItemStack target : targets)
- {
- if(itemMatches(target, input, strict))
- {
- return true;
- }
- }
- }
- return false;
- }
-
- public static boolean areItemStackTagsEqualForCrafting(ItemStack slotItem, ItemStack recipeItem)
- {
- if(recipeItem == null || slotItem == null)
- {
- return false;
- }
- if(recipeItem.stackTagCompound != null && slotItem.stackTagCompound == null)
- {
- return false;
- }
- if(recipeItem.stackTagCompound == null)
- {
- return true;
- }
-
- final Iterator iterator = recipeItem.stackTagCompound.func_150296_c().iterator();
- while(iterator.hasNext())
- {
- final String s = (String) iterator.next();
- if(slotItem.stackTagCompound.hasKey(s))
- {
- if(!slotItem.stackTagCompound.getTag(s).toString().equals(recipeItem.stackTagCompound.getTag(s).toString()))
- {
- return false;
- }
- }
- else
- {
- return false;
- }
-
- }
- return true;
- }
-
- public static boolean itemMatches(ItemStack target, ItemStack input, boolean strict)
- {
- if(input == null && target != null || input != null && target == null)
- {
- return false;
- }
- return(target.getItem() == input.getItem() && ((target.getItemDamage() == OreDictionary.WILDCARD_VALUE && !strict) || target.getItemDamage() == input.getItemDamage()));
- }
-
- public static TileEntity getConnectableTile(World world, int x, int y, int z, ForgeDirection face)
- {
- final TileEntity te = world.getTileEntity(x + face.offsetX, y + face.offsetY, z + face.offsetZ);
- if(te instanceof IEssentiaTransport && ((IEssentiaTransport) te).isConnectable(face.getOpposite()))
- {
- return te;
- }
- else
- {
- return null;
- }
- }
-
- public static TileEntity getConnectableTile(IBlockAccess world, int x, int y, int z, ForgeDirection face)
- {
- final TileEntity te = world.getTileEntity(x + face.offsetX, y + face.offsetY, z + face.offsetZ);
- if(te instanceof IEssentiaTransport && ((IEssentiaTransport) te).isConnectable(face.getOpposite()))
- {
- return te;
- }
- else
- {
- return null;
- }
- }
-
- private static HashMap<Integer, AspectList> allAspects = new HashMap<Integer, AspectList>();
- private static HashMap<Integer, AspectList> allCompoundAspects = new HashMap<Integer, AspectList>();
-
- public static AspectList getAllAspects(int amount)
- {
- if(allAspects.get(amount) == null)
- {
- final AspectList al = new AspectList();
- for(final Aspect aspect : Aspect.aspects.values())
- {
- al.add(aspect, amount);
- }
- allAspects.put(amount, al);
- }
- return allAspects.get(amount);
- }
-
- public static AspectList getAllCompoundAspects(int amount)
- {
- if(allCompoundAspects.get(amount) == null)
- {
- final AspectList al = new AspectList();
- for(final Aspect aspect : Aspect.getCompoundAspects())
- {
- al.add(aspect, amount);
- }
- allCompoundAspects.put(amount, al);
- }
- return allCompoundAspects.get(amount);
- }
-
- /**
- * Use to subtract vis from a wand for most operations
- * Wands store vis differently so "real" vis costs need to be multiplied by 100 before calling this method
- * @param wand the wand itemstack
- * @param player the player using the wand
- * @param cost the cost of the operation.
- * @param doit actually subtract the vis from the wand if true - if false just simulate the result
- * @param crafting is this a crafting operation or not - if
- * false then things like frugal and potency will apply to the costs
- * @return was the vis successfully subtracted
- */
- public static boolean consumeVisFromWand(ItemStack wand, EntityPlayer player, AspectList cost, boolean doit, boolean crafting)
- {
- return ThaumcraftApi.internalMethods.consumeVisFromWand(wand, player, cost, doit, crafting);
- }
-
- /**
- * Subtract vis for use by a crafting mechanic. Costs are calculated slightly
- * differently and things like the frugal enchant is ignored
- * Must NOT be multiplied by 100 - send the actual vis cost
- * @param wand the wand itemstack
- * @param player the player using the wand
- * @param cost the cost of the operation.
- * @param doit actually subtract the vis from the wand if true - if false just simulate the result
- * @return was the vis successfully subtracted
- */
- public static boolean consumeVisFromWandCrafting(ItemStack wand, EntityPlayer player, AspectList cost, boolean doit)
- {
- return ThaumcraftApi.internalMethods.consumeVisFromWandCrafting(wand, player, cost, doit);
- }
-
- /**
- * Subtract vis from a wand the player is carrying. Works like consumeVisFromWand in that actual vis
- * costs should be multiplied by 100. The costs are handled like crafting however and things like
- * frugal don't effect them
- * @param player the player using the wand
- * @param cost the cost of the operation.
- * @return was the vis successfully subtracted
- */
- public static boolean consumeVisFromInventory(EntityPlayer player, AspectList cost)
- {
- return ThaumcraftApi.internalMethods.consumeVisFromInventory(player, cost);
- }
-
- /**
- * This adds permanents or temporary warp to a player. It will automatically be synced clientside
- * @param player the player using the wand
- * @param amount how much warp to add. Negative amounts are only valid for temporary warp
- * @param temporary add temporary warp instead of permanent
- */
- public static void addWarpToPlayer(EntityPlayer player, int amount, boolean temporary)
- {
- ThaumcraftApi.internalMethods.addWarpToPlayer(player, amount, temporary);
- }
-
- /**
- * This "sticky" warp to a player. Sticky warp is permanent warp that can be removed.
- * It will automatically be synced clientside
- * @param player the player using the wand
- * @param amount how much warp to add. Can have negative amounts.
- */
- public static void addStickyWarpToPlayer(EntityPlayer player, int amount)
- {
- ThaumcraftApi.internalMethods.addStickyWarpToPlayer(player, amount);
- }
-
- public static MovingObjectPosition rayTraceIgnoringSource(World world, Vec3 v1, Vec3 v2, boolean bool1, boolean bool2, boolean bool3)
- {
- if(!Double.isNaN(v1.xCoord) && !Double.isNaN(v1.yCoord) && !Double.isNaN(v1.zCoord))
- {
- if(!Double.isNaN(v2.xCoord) && !Double.isNaN(v2.yCoord) && !Double.isNaN(v2.zCoord))
- {
- final int i = MathHelper.floor_double(v2.xCoord);
- final int j = MathHelper.floor_double(v2.yCoord);
- final int k = MathHelper.floor_double(v2.zCoord);
- int l = MathHelper.floor_double(v1.xCoord);
- int i1 = MathHelper.floor_double(v1.yCoord);
- int j1 = MathHelper.floor_double(v1.zCoord);
- world.getBlock(l, i1, j1);
- int k1 = world.getBlockMetadata(l, i1, j1);
-
- MovingObjectPosition movingobjectposition2 = null;
- k1 = 200;
-
- while(k1-- >= 0)
- {
- if(Double.isNaN(v1.xCoord) || Double.isNaN(v1.yCoord) || Double.isNaN(v1.zCoord))
- {
- return null;
- }
-
- if(l == i && i1 == j && j1 == k)
- {
- continue;
- }
-
- boolean flag6 = true;
- boolean flag3 = true;
- boolean flag4 = true;
- double d0 = 999.0D;
- double d1 = 999.0D;
- double d2 = 999.0D;
-
- if(i > l)
- {
- d0 = l + 1.0D;
- }
- else if(i < l)
- {
- d0 = l + 0.0D;
- }
- else
- {
- flag6 = false;
- }
-
- if(j > i1)
- {
- d1 = i1 + 1.0D;
- }
- else if(j < i1)
- {
- d1 = i1 + 0.0D;
- }
- else
- {
- flag3 = false;
- }
-
- if(k > j1)
- {
- d2 = j1 + 1.0D;
- }
- else if(k < j1)
- {
- d2 = j1 + 0.0D;
- }
- else
- {
- flag4 = false;
- }
-
- double d3 = 999.0D;
- double d4 = 999.0D;
- double d5 = 999.0D;
- final double d6 = v2.xCoord - v1.xCoord;
- final double d7 = v2.yCoord - v1.yCoord;
- final double d8 = v2.zCoord - v1.zCoord;
-
- if(flag6)
- {
- d3 = (d0 - v1.xCoord) / d6;
- }
-
- if(flag3)
- {
- d4 = (d1 - v1.yCoord) / d7;
- }
-
- if(flag4)
- {
- d5 = (d2 - v1.zCoord) / d8;
- }
-
- byte b0;
-
- if(d3 < d4 && d3 < d5)
- {
- if(i > l)
- {
- b0 = 4;
- }
- else
- {
- b0 = 5;
- }
-
- v1.xCoord = d0;
- v1.yCoord += d7 * d3;
- v1.zCoord += d8 * d3;
- }
- else if(d4 < d5)
- {
- if(j > i1)
- {
- b0 = 0;
- }
- else
- {
- b0 = 1;
- }
-
- v1.xCoord += d6 * d4;
- v1.yCoord = d1;
- v1.zCoord += d8 * d4;
- }
- else
- {
- if(k > j1)
- {
- b0 = 2;
- }
- else
- {
- b0 = 3;
- }
-
- v1.xCoord += d6 * d5;
- v1.yCoord += d7 * d5;
- v1.zCoord = d2;
- }
-
- final Vec3 vec32 = Vec3.createVectorHelper(v1.xCoord, v1.yCoord, v1.zCoord);
- l = (int) (vec32.xCoord = MathHelper.floor_double(v1.xCoord));
-
- if(b0 == 5)
- {
- --l;
- ++vec32.xCoord;
- }
-
- i1 = (int) (vec32.yCoord = MathHelper.floor_double(v1.yCoord));
-
- if(b0 == 1)
- {
- --i1;
- ++vec32.yCoord;
- }
-
- j1 = (int) (vec32.zCoord = MathHelper.floor_double(v1.zCoord));
-
- if(b0 == 3)
- {
- --j1;
- ++vec32.zCoord;
- }
-
- final Block block1 = world.getBlock(l, i1, j1);
- final int l1 = world.getBlockMetadata(l, i1, j1);
-
- if(!bool2 || block1.getCollisionBoundingBoxFromPool(world, l, i1, j1) != null)
- {
- if(block1.canCollideCheck(l1, bool1))
- {
- final MovingObjectPosition movingobjectposition1 = block1.collisionRayTrace(world, l, i1, j1, v1, v2);
-
- if(movingobjectposition1 != null)
- {
- return movingobjectposition1;
- }
- }
- else
- {
- movingobjectposition2 = new MovingObjectPosition(l,
- i1, j1, b0, v1, false);
- }
- }
- }
-
- return bool3 ? movingobjectposition2 : null;
- }
- else
- {
- return null;
- }
- }
- else
- {
- return null;
- }
- }
-}
diff --git a/src/api/java/thaumcraft/api/TileThaumcraft.java b/src/api/java/thaumcraft/api/TileThaumcraft.java
deleted file mode 100644
index 8bcb4c7..0000000
--- a/src/api/java/thaumcraft/api/TileThaumcraft.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.network.NetworkManager;
-import net.minecraft.network.Packet;
-import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
-import net.minecraft.tileentity.TileEntity;
-
-/**
- *
- * @author azanor
- *
- * Custom tile entity class I use for most of my tile entities. Setup in such a way that only
- * the nbt data within readCustomNBT / writeCustomNBT will be sent to the client when the tile
- * updates. Apart from all the normal TE data that gets sent that is.
- *
- */
-public class TileThaumcraft extends TileEntity
-{
-
- //NBT stuff
-
- @Override
- public void readFromNBT(NBTTagCompound nbttagcompound)
- {
- super.readFromNBT(nbttagcompound);
- readCustomNBT(nbttagcompound);
- }
-
- public void readCustomNBT(NBTTagCompound nbttagcompound)
- {
- //TODO
- }
-
- @Override
- public void writeToNBT(NBTTagCompound nbttagcompound)
- {
- super.writeToNBT(nbttagcompound);
- writeCustomNBT(nbttagcompound);
- }
-
- public void writeCustomNBT(NBTTagCompound nbttagcompound)
- {
- //TODO
- }
-
- //Client Packet stuff
- @Override
- public Packet getDescriptionPacket()
- {
- final NBTTagCompound nbttagcompound = new NBTTagCompound();
- writeCustomNBT(nbttagcompound);
- return new S35PacketUpdateTileEntity(xCoord, yCoord,
- zCoord, -999, nbttagcompound);
- }
-
- @Override
- public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
- {
- super.onDataPacket(net, pkt);
- readCustomNBT(pkt.func_148857_g());
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/WorldCoordinates.java b/src/api/java/thaumcraft/api/WorldCoordinates.java
deleted file mode 100644
index cab4082..0000000
--- a/src/api/java/thaumcraft/api/WorldCoordinates.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package thaumcraft.api;
-
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.tileentity.TileEntity;
-
-public class WorldCoordinates implements Comparable
-{
- public int x;
-
- /** the y coordinate */
- public int y;
-
- /** the z coordinate */
- public int z;
-
- public int dim;
-
- public WorldCoordinates()
- {
- }
-
- public WorldCoordinates(int par1, int par2, int par3, int d)
- {
- x = par1;
- y = par2;
- z = par3;
- dim = d;
- }
-
- public WorldCoordinates(TileEntity tile)
- {
- x = tile.xCoord;
- y = tile.yCoord;
- z = tile.zCoord;
- dim = tile.getWorldObj().provider.dimensionId;
- }
-
- public WorldCoordinates(WorldCoordinates par1ChunkCoordinates)
- {
- x = par1ChunkCoordinates.x;
- y = par1ChunkCoordinates.y;
- z = par1ChunkCoordinates.z;
- dim = par1ChunkCoordinates.dim;
- }
-
- @Override
- public boolean equals(Object par1Obj)
- {
- if(!(par1Obj instanceof WorldCoordinates))
- {
- return false;
- }
- else
- {
- final WorldCoordinates coordinates = (WorldCoordinates) par1Obj;
- return x == coordinates.x && y == coordinates.y && z == coordinates.z && dim == coordinates.dim;
- }
- }
-
- @Override
- public int hashCode()
- {
- return x + y << 8 + z << 16 + dim << 24;
- }
-
- /**
- * Compare the coordinate with another coordinate
- */
- public int compareWorldCoordinate(WorldCoordinates par1)
- {
- return dim == par1.dim ? (y == par1.y ? (z == par1.z ? x - par1.x : z - par1.z) : y - par1.y) : -1;
- }
-
- public void set(int par1, int par2, int par3, int d)
- {
- x = par1;
- y = par2;
- z = par3;
- dim = d;
- }
-
- /**
- * Returns the squared distance between this coordinates and the coordinates given as argument.
- */
- public float getDistanceSquared(int par1, int par2, int par3)
- {
- final float f = x - par1;
- final float f1 = y - par2;
- final float f2 = z - par3;
- return f * f + f1 * f1 + f2 * f2;
- }
-
- /**
- * Return the squared distance between this coordinates and the ChunkCoordinates given as argument.
- */
- public float getDistanceSquaredToWorldCoordinates(WorldCoordinates par1ChunkCoordinates)
- {
- return getDistanceSquared(par1ChunkCoordinates.x, par1ChunkCoordinates.y, par1ChunkCoordinates.z);
- }
-
- @Override
- public int compareTo(Object par1Obj)
- {
- return compareWorldCoordinate((WorldCoordinates) par1Obj);
- }
-
- public void readNBT(NBTTagCompound nbt)
- {
- x = nbt.getInteger("w_x");
- y = nbt.getInteger("w_y");
- z = nbt.getInteger("w_z");
- dim = nbt.getInteger("w_d");
- }
-
- public void writeNBT(NBTTagCompound nbt)
- {
- nbt.setInteger("w_x", x);
- nbt.setInteger("w_y", y);
- nbt.setInteger("w_z", z);
- nbt.setInteger("w_d", dim);
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/aspects/Aspect.java b/src/api/java/thaumcraft/api/aspects/Aspect.java
deleted file mode 100644
index c6c548e..0000000
--- a/src/api/java/thaumcraft/api/aspects/Aspect.java
+++ /dev/null
@@ -1,377 +0,0 @@
-package thaumcraft.api.aspects;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.StatCollector;
-
-import org.apache.commons.lang3.text.WordUtils;
-
-public class Aspect
-{
-
- String tag;
- Aspect[] components;
- int color;
- private String chatcolor;
- ResourceLocation image;
- int blend;
-
- /**
- * Use this constructor to register your own aspects.
- * @param tag the key that will be used to reference this aspect, as well as its latin display name
- * @param color color to display the tag in
- * @param components the aspects this one is formed from
- * @param image ResourceLocation pointing to a 32x32 icon of the aspect
- * @param blend GL11 blendmode (1 or 771). Used for rendering nodes. Default is 1
- */
- public Aspect(String tag, int color, Aspect[] components, ResourceLocation image, int blend)
- {
- if(aspects.containsKey(tag))
- {
- throw new IllegalArgumentException(tag + " already registered!");
- }
- this.tag = tag;
- this.components = components;
- this.color = color;
- this.image = image;
- this.blend = blend;
- aspects.put(tag, this);
- }
-
- /**
- * Shortcut constructor I use for the default aspects - you shouldn't be using this.
- */
- public Aspect(String tag, int color, Aspect[] components)
- {
- this(tag, color, components, new ResourceLocation("thaumcraft",
- "textures/aspects/" + tag.toLowerCase() + ".png"), 1);
- }
-
- /**
- * Shortcut constructor I use for the default aspects - you shouldn't be using this.
- */
- public Aspect(String tag, int color, Aspect[] components, int blend)
- {
- this(tag, color, components, new ResourceLocation("thaumcraft",
- "textures/aspects/" + tag.toLowerCase() + ".png"), blend);
- }
-
- /**
- * Shortcut constructor I use for the primal aspects -
- * you shouldn't use this as making your own primal aspects will break all the things.
- */
- public Aspect(String tag, int color, String chatcolor, int blend)
- {
- this(tag, color, (Aspect[]) null, blend);
- setChatcolor(chatcolor);
- }
-
- public int getColor()
- {
- return color;
- }
-
- public String getName()
- {
- return WordUtils.capitalizeFully(tag);
- }
-
- public String getLocalizedDescription()
- {
- return StatCollector.translateToLocal("tc.aspect." + tag);
- }
-
- public String getTag()
- {
- return tag;
- }
-
- public void setTag(String tag)
- {
- this.tag = tag;
- }
-
- public Aspect[] getComponents()
- {
- return components;
- }
-
- public void setComponents(Aspect[] components)
- {
- this.components = components;
- }
-
- public ResourceLocation getImage()
- {
- return image;
- }
-
- public static Aspect getAspect(String tag)
- {
- return aspects.get(tag);
- }
-
- public int getBlend()
- {
- return blend;
- }
-
- public void setBlend(int blend)
- {
- this.blend = blend;
- }
-
- public boolean isPrimal()
- {
- return getComponents() == null || getComponents().length != 2;
- }
-
- ///////////////////////////////
- public static ArrayList<Aspect> getPrimalAspects()
- {
- final ArrayList<Aspect> primals = new ArrayList<Aspect>();
- final Collection<Aspect> pa = aspects.values();
- for(final Aspect aspect : pa)
- {
- if(aspect.isPrimal())
- {
- primals.add(aspect);
- }
- }
- return primals;
- }
-
- public static ArrayList<Aspect> getCompoundAspects()
- {
- final ArrayList<Aspect> compounds = new ArrayList<Aspect>();
- final Collection<Aspect> pa = aspects.values();
- for(final Aspect aspect : pa)
- {
- if(!aspect.isPrimal())
- {
- compounds.add(aspect);
- }
- }
- return compounds;
- }
-
- public String getChatcolor()
- {
- return chatcolor;
- }
-
- public void setChatcolor(String chatcolor)
- {
- this.chatcolor = chatcolor;
- }
-
- ///////////////////////////////
- public static LinkedHashMap<String, Aspect> aspects = new LinkedHashMap<String, Aspect>();
-
- //PRIMAL
- public static final Aspect AIR = new Aspect("aer",
- 0xffff7e,
- "e", 1);
- public static final Aspect EARTH = new Aspect(
- "terra",
- 0x56c000,
- "2", 1);
- public static final Aspect FIRE = new Aspect(
- "ignis",
- 0xff5a01,
- "c", 1);
- public static final Aspect WATER = new Aspect(
- "aqua",
- 0x3cd4fc,
- "3", 1);
- public static final Aspect ORDER = new Aspect(
- "ordo",
- 0xd5d4ec,
- "7", 1);
- public static final Aspect ENTROPY = new Aspect(
- "perditio",
- 0x404040,
- "8", 771);
-
- //SECONDARY
- public static final Aspect VOID = new Aspect(
- "vacuos",
- 0x888888,
- new Aspect[] {AIR, ENTROPY},
- 771);
- public static final Aspect LIGHT = new Aspect(
- "lux",
- 0xfff663,
- new Aspect[] {AIR, FIRE});
- public static final Aspect WEATHER = new Aspect(
- "tempestas",
- 0xFFFFFF,
- new Aspect[] {AIR, WATER});
- public static final Aspect MOTION = new Aspect(
- "motus",
- 0xcdccf4,
- new Aspect[] {AIR, ORDER});
- public static final Aspect COLD = new Aspect(
- "gelum",
- 0xe1ffff,
- new Aspect[] {FIRE, ENTROPY});
- public static final Aspect CRYSTAL = new Aspect(
- "vitreus",
- 0x80ffff,
- new Aspect[] {EARTH, ORDER});
- public static final Aspect LIFE = new Aspect(
- "victus",
- 0xde0005,
- new Aspect[] {WATER, EARTH});
- public static final Aspect POISON = new Aspect(
- "venenum",
- 0x89f000,
- new Aspect[] {WATER, ENTROPY});
- public static final Aspect ENERGY = new Aspect(
- "potentia",
- 0xc0ffff,
- new Aspect[] {ORDER, FIRE});
- public static final Aspect EXCHANGE = new Aspect(
- "permutatio",
- 0x578357,
- new Aspect[] {ENTROPY, ORDER});
- // public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {AIR, EARTH});
- // public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {FIRE, EARTH});
- // public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {FIRE, WATER});
- // public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {ORDER, WATER});
- // public static final Aspect ?? = new Aspect("??",0xcdccf4, new Aspect[] {EARTH, ENTROPY});
-
- //TERTIARY
- public static final Aspect METAL = new Aspect(
- "metallum",
- 0xb5b5cd,
- new Aspect[] {EARTH, CRYSTAL});
- public static final Aspect DEATH = new Aspect(
- "mortuus",
- 0x887788,
- new Aspect[] {LIFE, ENTROPY});
- public static final Aspect FLIGHT = new Aspect(
- "volatus",
- 0xe7e7d7,
- new Aspect[] {AIR, MOTION});
- public static final Aspect DARKNESS = new Aspect(
- "tenebrae",
- 0x222222,
- new Aspect[] {VOID, LIGHT});
- public static final Aspect SOUL = new Aspect(
- "spiritus",
- 0xebebfb,
- new Aspect[] {LIFE, DEATH});
- public static final Aspect HEAL = new Aspect(
- "sano",
- 0xff2f34,
- new Aspect[] {LIFE, ORDER});
- public static final Aspect TRAVEL = new Aspect(
- "iter",
- 0xe0585b,
- new Aspect[] {MOTION, EARTH});
- public static final Aspect ELDRITCH = new Aspect(
- "alienis",
- 0x805080,
- new Aspect[] {VOID, DARKNESS});
- public static final Aspect MAGIC = new Aspect(
- "praecantatio",
- 0x9700c0,
- new Aspect[] {VOID, ENERGY});
- public static final Aspect AURA = new Aspect(
- "auram",
- 0xffc0ff,
- new Aspect[] {MAGIC, AIR});
- public static final Aspect TAINT = new Aspect(
- "vitium",
- 0x800080,
- new Aspect[] {MAGIC, ENTROPY});
- public static final Aspect SLIME = new Aspect(
- "limus",
- 0x01f800,
- new Aspect[] {LIFE, WATER});
- public static final Aspect PLANT = new Aspect(
- "herba",
- 0x01ac00,
- new Aspect[] {LIFE, EARTH});
- public static final Aspect TREE = new Aspect(
- "arbor",
- 0x876531,
- new Aspect[] {AIR, PLANT});
- public static final Aspect BEAST = new Aspect(
- "bestia",
- 0x9f6409,
- new Aspect[] {MOTION, LIFE});
- public static final Aspect FLESH = new Aspect(
- "corpus",
- 0xee478d,
- new Aspect[] {DEATH, BEAST});
- public static final Aspect UNDEAD = new Aspect(
- "exanimis",
- 0x3a4000,
- new Aspect[] {MOTION, DEATH});
- public static final Aspect MIND = new Aspect(
- "cognitio",
- 0xffc2b3,
- new Aspect[] {FIRE, SOUL});
- public static final Aspect SENSES = new Aspect(
- "sensus",
- 0x0fd9ff,
- new Aspect[] {AIR, SOUL});
- public static final Aspect MAN = new Aspect(
- "humanus",
- 0xffd7c0,
- new Aspect[] {BEAST, MIND});
- public static final Aspect CROP = new Aspect(
- "messis",
- 0xe1b371,
- new Aspect[] {PLANT, MAN});
- public static final Aspect MINE = new Aspect(
- "perfodio",
- 0xdcd2d8,
- new Aspect[] {MAN, EARTH});
- public static final Aspect TOOL = new Aspect(
- "instrumentum",
- 0x4040ee,
- new Aspect[] {MAN, ORDER});
- public static final Aspect HARVEST = new Aspect(
- "meto",
- 0xeead82,
- new Aspect[] {CROP, TOOL});
- public static final Aspect WEAPON = new Aspect(
- "telum",
- 0xc05050,
- new Aspect[] {TOOL, FIRE});
- public static final Aspect ARMOR = new Aspect(
- "tutamen",
- 0x00c0c0,
- new Aspect[] {TOOL, EARTH});
- public static final Aspect HUNGER = new Aspect(
- "fames",
- 0x9a0305,
- new Aspect[] {LIFE, VOID});
- public static final Aspect GREED = new Aspect(
- "lucrum",
- 0xe6be44,
- new Aspect[] {MAN, HUNGER});
- public static final Aspect CRAFT = new Aspect(
- "fabrico",
- 0x809d80,
- new Aspect[] {MAN, TOOL});
- public static final Aspect CLOTH = new Aspect(
- "pannus",
- 0xeaeac2,
- new Aspect[] {TOOL, BEAST});
- public static final Aspect MECHANISM = new Aspect(
- "machina",
- 0x8080a0,
- new Aspect[] {MOTION, TOOL});
- public static final Aspect TRAP = new Aspect(
- "vinculum",
- 0x9a8080,
- new Aspect[] {MOTION, ENTROPY});
-
-}
diff --git a/src/api/java/thaumcraft/api/aspects/AspectList.java b/src/api/java/thaumcraft/api/aspects/AspectList.java
deleted file mode 100644
index fb80b48..0000000
--- a/src/api/java/thaumcraft/api/aspects/AspectList.java
+++ /dev/null
@@ -1,358 +0,0 @@
-package thaumcraft.api.aspects;
-
-import java.io.Serializable;
-import java.util.LinkedHashMap;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.nbt.NBTTagList;
-import thaumcraft.api.ThaumcraftApiHelper;
-
-public class AspectList implements Serializable
-{
-
- public LinkedHashMap<Aspect, Integer> aspects = new LinkedHashMap<Aspect, Integer>(); //aspects associated with this object
-
- /**
- * this creates a new aspect list with preloaded values based off the aspects of the given item.
- * @param the itemstack of the given item
- */
- public AspectList(ItemStack stack)
- {
- try
- {
- final AspectList temp = ThaumcraftApiHelper.getObjectAspects(stack);
- if(temp != null)
- {
- for(final Aspect tag : temp.getAspects())
- {
- add(tag, temp.getAmount(tag));
- }
- }
- }
- catch(final Exception e)
- {
- }
- }
-
- public AspectList()
- {
- }
-
- public AspectList copy()
- {
- final AspectList out = new AspectList();
- for(final Aspect a : getAspects())
- {
- out.add(a, getAmount(a));
- }
- return out;
- }
-
- /**
- * @return the amount of different aspects in this collection
- */
- public int size()
- {
- return aspects.size();
- }
-
- /**
- * @return the amount of total vis in this collection
- */
- public int visSize()
- {
- int q = 0;
-
- for(final Aspect as : aspects.keySet())
- {
- q += getAmount(as);
- }
-
- return q;
- }
-
- /**
- * @return an array of all the aspects in this collection
- */
- public Aspect[] getAspects()
- {
- final Aspect[] q = new Aspect[1];
- return aspects.keySet().toArray(q);
- }
-
- /**
- * @return an array of all the aspects in this collection
- */
- public Aspect[] getPrimalAspects()
- {
- final AspectList t = new AspectList();
- for(final Aspect as : aspects.keySet())
- {
- if(as.isPrimal())
- {
- t.add(as, 1);
- }
- }
- final Aspect[] q = new Aspect[1];
- return t.aspects.keySet().toArray(q);
- }
-
- /**
- * @return an array of all the aspects in this collection sorted by name
- */
- public Aspect[] getAspectsSorted()
- {
- try
- {
- final Aspect[] out = aspects.keySet().toArray(new Aspect[] {});
- boolean change = false;
- do
- {
- change = false;
- for(int a = 0; a < out.length - 1; a++)
- {
- final Aspect e1 = out[a];
- final Aspect e2 = out[a + 1];
- if(e1 != null && e2 != null && e1.getTag().compareTo(e2.getTag()) > 0)
- {
- out[a] = e2;
- out[a + 1] = e1;
- change = true;
- break;
- }
- }
- }
- while(change == true);
- return out;
- }
- catch(final Exception e)
- {
- return getAspects();
- }
- }
-
- /**
- * @return an array of all the aspects in this collection sorted by amount
- */
- public Aspect[] getAspectsSortedAmount()
- {
- try
- {
- final Aspect[] out = aspects.keySet().toArray(new Aspect[1]);
- boolean change = false;
- do
- {
- change = false;
- for(int a = 0; a < out.length - 1; a++)
- {
- final int e1 = getAmount(out[a]);
- final int e2 = getAmount(out[a + 1]);
- if(e1 > 0 && e2 > 0 && e2 > e1)
- {
- final Aspect ea = out[a];
- final Aspect eb = out[a + 1];
- out[a] = eb;
- out[a + 1] = ea;
- change = true;
- break;
- }
- }
- }
- while(change == true);
- return out;
- }
- catch(final Exception e)
- {
- return getAspects();
- }
- }
-
- /**
- * @param key
- * @return the amount associated with the given aspect in this collection
- */
- public int getAmount(Aspect key)
- {
- return aspects.get(key) == null ? 0 : aspects.get(key);
- }
-
- /**
- * Reduces the amount of an aspect in this collection by the given amount.
- * @param key
- * @param amount
- * @return
- */
- public boolean reduce(Aspect key, int amount)
- {
- if(getAmount(key) >= amount)
- {
- final int am = getAmount(key) - amount;
- aspects.put(key, am);
- return true;
- }
- return false;
- }
-
- /**
- * Reduces the amount of an aspect in this collection by the given amount.
- * If reduced to 0 or less the aspect will be removed completely.
- * @param key
- * @param amount
- * @return
- */
- public AspectList remove(Aspect key, int amount)
- {
- final int am = getAmount(key) - amount;
- if(am <= 0)
- {
- aspects.remove(key);
- }
- else
- {
- aspects.put(key, am);
- }
- return this;
- }
-
- /**
- * Simply removes the aspect from the list
- * @param key
- * @param amount
- * @return
- */
- public AspectList remove(Aspect key)
- {
- aspects.remove(key);
- return this;
- }
-
- /**
- * Adds this aspect and amount to the collection.
- * If the aspect exists then its value will be increased by the given amount.
- * @param aspect
- * @param amount
- * @return
- */
- public AspectList add(Aspect aspect, int amount)
- {
- if(aspects.containsKey(aspect))
- {
- final int oldamount = aspects.get(aspect);
- amount += oldamount;
- }
- aspects.put(aspect, amount);
- return this;
- }
-
- /**
- * Adds this aspect and amount to the collection.
- * If the aspect exists then only the highest of the old or new amount will be used.
- * @param aspect
- * @param amount
- * @return
- */
- public AspectList merge(Aspect aspect, int amount)
- {
- if(aspects.containsKey(aspect))
- {
- final int oldamount = aspects.get(aspect);
- if(amount < oldamount)
- {
- amount = oldamount;
- }
-
- }
- aspects.put(aspect, amount);
- return this;
- }
-
- public AspectList add(AspectList in)
- {
- for(final Aspect a : in.getAspects())
- {
- this.add(a, in.getAmount(a));
- }
- return this;
- }
-
- public AspectList merge(AspectList in)
- {
- for(final Aspect a : in.getAspects())
- {
- this.merge(a, in.getAmount(a));
- }
- return this;
- }
-
- /**
- * Reads the list of aspects from nbt
- * @param nbttagcompound
- * @return
- */
- public void readFromNBT(NBTTagCompound nbttagcompound)
- {
- aspects.clear();
- final NBTTagList tlist = nbttagcompound.getTagList("Aspects", (byte) 10);
- for(int j = 0; j < tlist.tagCount(); j++)
- {
- final NBTTagCompound rs = tlist.getCompoundTagAt(j);
- if(rs.hasKey("key"))
- {
- add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount"));
- }
- }
- }
-
- public void readFromNBT(NBTTagCompound nbttagcompound, String label)
- {
- aspects.clear();
- final NBTTagList tlist = nbttagcompound.getTagList(label, (byte) 10);
- for(int j = 0; j < tlist.tagCount(); j++)
- {
- final NBTTagCompound rs = tlist.getCompoundTagAt(j);
- if(rs.hasKey("key"))
- {
- add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount"));
- }
- }
- }
-
- /**
- * Writes the list of aspects to nbt
- * @param nbttagcompound
- * @return
- */
- public void writeToNBT(NBTTagCompound nbttagcompound)
- {
- final NBTTagList tlist = new NBTTagList();
- nbttagcompound.setTag("Aspects", tlist);
- for(final Aspect aspect : getAspects())
- {
- if(aspect != null)
- {
- final NBTTagCompound f = new NBTTagCompound();
- f.setString("key", aspect.getTag());
- f.setInteger("amount", getAmount(aspect));
- tlist.appendTag(f);
- }
- }
- }
-
- public void writeToNBT(NBTTagCompound nbttagcompound, String label)
- {
- final NBTTagList tlist = new NBTTagList();
- nbttagcompound.setTag(label, tlist);
- for(final Aspect aspect : getAspects())
- {
- if(aspect != null)
- {
- final NBTTagCompound f = new NBTTagCompound();
- f.setString("key", aspect.getTag());
- f.setInteger("amount", getAmount(aspect));
- tlist.appendTag(f);
- }
- }
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/aspects/AspectSourceHelper.java b/src/api/java/thaumcraft/api/aspects/AspectSourceHelper.java
deleted file mode 100644
index 03abe6c..0000000
--- a/src/api/java/thaumcraft/api/aspects/AspectSourceHelper.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package thaumcraft.api.aspects;
-
-import java.lang.reflect.Method;
-
-import net.minecraft.tileentity.TileEntity;
-import net.minecraftforge.common.util.ForgeDirection;
-import cpw.mods.fml.common.FMLLog;
-
-public class AspectSourceHelper
-{
-
- static Method drainEssentia;
- static Method findEssentia;
-
- /**
- * This method is what is used to drain essentia from jars and other sources for things like
- * infusion crafting or powering the arcane furnace. A record of possible sources are kept track of
- * and refreshed as needed around the calling tile entity. This also renders the essentia trail particles.
- * Only 1 essentia is drained at a time
- * @param tile the tile entity that is draining the essentia
- * @param aspect the aspect that you are looking for
- * @param direction the direction from which you wish to drain. Forgedirection.Unknown simply seeks in all directions.
- * @param range how many blocks you wish to search for essentia sources.
- * @return boolean returns true if essentia was found and removed from a source.
- */
- public static boolean drainEssentia(TileEntity tile, Aspect aspect, ForgeDirection direction, int range)
- {
- try
- {
- if(drainEssentia == null)
- {
- final Class fake = Class.forName("thaumcraft.common.lib.events.EssentiaHandler");
- drainEssentia = fake.getMethod("drainEssentia", TileEntity.class, Aspect.class, ForgeDirection.class, int.class);
- }
- return (Boolean) drainEssentia.invoke(null, tile, aspect, direction, range);
- }
- catch(final Exception ex)
- {
- FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.lib.events.EssentiaHandler method drainEssentia");
- }
- return false;
- }
-
- /**
- * This method returns if there is any essentia of the passed type that can be drained. It in no way checks how
- * much there is, only if an essentia container nearby contains at least 1 point worth.
- * @param tile the tile entity that is checking the essentia
- * @param aspect the aspect that you are looking for
- * @param direction the direction from which you wish to drain. Forgedirection.Unknown simply seeks in all directions.
- * @param range how many blocks you wish to search for essentia sources.
- * @return boolean returns true if essentia was found and removed from a source.
- */
- public static boolean findEssentia(TileEntity tile, Aspect aspect, ForgeDirection direction, int range)
- {
- try
- {
- if(findEssentia == null)
- {
- final Class fake = Class.forName("thaumcraft.common.lib.events.EssentiaHandler");
- findEssentia = fake.getMethod("findEssentia", TileEntity.class, Aspect.class, ForgeDirection.class, int.class);
- }
- return (Boolean) findEssentia.invoke(null, tile, aspect, direction, range);
- }
- catch(final Exception ex)
- {
- FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.lib.events.EssentiaHandler method findEssentia");
- }
- return false;
- }
-}
diff --git a/src/api/java/thaumcraft/api/aspects/IAspectContainer.java b/src/api/java/thaumcraft/api/aspects/IAspectContainer.java
deleted file mode 100644
index 6b34db3..0000000
--- a/src/api/java/thaumcraft/api/aspects/IAspectContainer.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package thaumcraft.api.aspects;
-
-/**
- *
- * @author azanor
- *
- * Used by blocks like the crucible and alembic to hold their aspects.
- * Tiles extending this interface will have their aspects show up when viewed by goggles of revealing
- *
- */
-public interface IAspectContainer
-{
- public AspectList getAspects();
-
- public void setAspects(AspectList aspects);
-
- /**
- * This method is used to determine of a specific aspect can be added to this container.
- * @param tag
- * @return true or false
- */
- public boolean doesContainerAccept(Aspect tag);
-
- /**
- * This method is used to add a certain amount of an aspect to the tile entity.
- * @param tag
- * @param amount
- * @return the amount of aspect left over that could not be added.
- */
- public int addToContainer(Aspect tag, int amount);
-
- /**
- * Removes a certain amount of a specific aspect from the tile entity
- * @param tag
- * @param amount
- * @return true if that amount of aspect was available and was removed
- */
- public boolean takeFromContainer(Aspect tag, int amount);
-
- /**
- * removes a bunch of different aspects and amounts from the tile entity.
- * @param ot the ObjectTags object that contains the aspects and their amounts.
- * @return true if all the aspects and their amounts were available and successfully removed
- *
- * Going away in the next major patch
- */
- @Deprecated
- public boolean takeFromContainer(AspectList ot);
-
- /**
- * Checks if the tile entity contains the listed amount (or more) of the aspect
- * @param tag
- * @param amount
- * @return
- */
- public boolean doesContainerContainAmount(Aspect tag, int amount);
-
- /**
- * Checks if the tile entity contains all the listed aspects and their amounts
- * @param ot the ObjectTags object that contains the aspects and their amounts.
- * @return
- *
- * Going away in the next major patch
- */
- @Deprecated
- public boolean doesContainerContain(AspectList ot);
-
- /**
- * Returns how much of the aspect this tile entity contains
- * @param tag
- * @return the amount of that aspect found
- */
- public int containerContains(Aspect tag);
-
-}
diff --git a/src/api/java/thaumcraft/api/aspects/IAspectSource.java b/src/api/java/thaumcraft/api/aspects/IAspectSource.java
deleted file mode 100644
index a24ffdd..0000000
--- a/src/api/java/thaumcraft/api/aspects/IAspectSource.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package thaumcraft.api.aspects;
-
-/**
- * @author Azanor
- *
- * This interface is implemented by tile entites (or possibly anything else) like jars
- * so that they can act as an essentia source for blocks like the infusion altar.
- *
- */
-public interface IAspectSource extends IAspectContainer
-{
-
-}
diff --git a/src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java b/src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java
deleted file mode 100644
index fba289a..0000000
--- a/src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package thaumcraft.api.aspects;
-
-import net.minecraft.item.ItemStack;
-
-/**
- *
- * @author azanor
- *
- * Used by wispy essences and essentia phials to hold their aspects.
- * Useful for similar item containers that store their aspect information in nbt form so TC
- * automatically picks up the aspects they contain
- *
- */
-public interface IEssentiaContainerItem
-{
- public AspectList getAspects(ItemStack itemstack);
-
- public void setAspects(ItemStack itemstack, AspectList aspects);
-}
-
-//Example implementation
-/*
- @Override
- public AspectList getAspects(ItemStack itemstack) {
- if (itemstack.hasTagCompound()) {
- AspectList aspects = new AspectList();
- aspects.readFromNBT(itemstack.getTagCompound());
- return aspects.size()>0?aspects:null;
- }
- return null;
- }
-
- @Override
- public void setAspects(ItemStack itemstack, AspectList aspects) {
- if (!itemstack.hasTagCompound()) itemstack.setTagCompound(new NBTTagCompound());
- aspects.writeToNBT(itemstack.getTagCompound());
- }
- */
diff --git a/src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java b/src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java
deleted file mode 100644
index 5e69de5..0000000
--- a/src/api/java/thaumcraft/api/aspects/IEssentiaTransport.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package thaumcraft.api.aspects;
-
-import net.minecraftforge.common.util.ForgeDirection;
-
-/**
- * @author Azanor
- * This interface is used by tiles that use or transport vis.
- * Only tiles that implement this interface will be able to connect to vis conduits or other thaumic devices
- */
-public interface IEssentiaTransport
-{
- /**
- * Is this tile able to connect to other vis users/sources on the specified side?
- * @param face
- * @return
- */
- public boolean isConnectable(ForgeDirection face);
-
- /**
- * Is this side used to input essentia?
- * @param face
- * @return
- */
- boolean canInputFrom(ForgeDirection face);
-
- /**
- * Is this side used to output essentia?
- * @param face
- * @return
- */
- boolean canOutputTo(ForgeDirection face);
-
- /**
- * Sets the amount of suction this block will apply
- * @param suction
- */
- public void setSuction(Aspect aspect, int amount);
-
- /**
- * Returns the type of suction this block is applying.
- * @param loc
- * the location from where the suction is being checked
- * @return
- * a return type of null indicates the suction is untyped and the first thing available will be drawn
- */
- public Aspect getSuctionType(ForgeDirection face);
-
- /**
- * Returns the strength of suction this block is applying.
- * @param loc
- * the location from where the suction is being checked
- * @return
- */
- public int getSuctionAmount(ForgeDirection face);
-
- /**
- * remove the specified amount of essentia from this transport tile
- * @return how much was actually taken
- */
- public int takeEssentia(Aspect aspect, int amount, ForgeDirection face);
-
- /**
- * add the specified amount of essentia to this transport tile
- * @return how much was actually added
- */
- public int addEssentia(Aspect aspect, int amount, ForgeDirection face);
-
- /**
- * What type of essentia this contains
- * @param face
- * @return
- */
- public Aspect getEssentiaType(ForgeDirection face);
-
- /**
- * How much essentia this block contains
- * @param face
- * @return
- */
- public int getEssentiaAmount(ForgeDirection face);
-
- /**
- * Essentia will not be drawn from this container unless the suction exceeds this amount.
- * @return the amount
- */
- public int getMinimumSuction();
-
- /**
- * Return true if you want the conduit to extend a little further into the block.
- * Used by jars and alembics that have smaller than normal hitboxes
- * @return
- */
- boolean renderExtendedTube();
-
-}
diff --git a/src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java b/src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java
deleted file mode 100644
index 725e21a..0000000
--- a/src/api/java/thaumcraft/api/crafting/CrucibleRecipe.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package thaumcraft.api.crafting;
-
-import java.util.ArrayList;
-
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.api.ThaumcraftApiHelper;
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-
-public class CrucibleRecipe
-{
-
- private final ItemStack recipeOutput;
-
- public Object catalyst;
- public AspectList aspects;
- public String key;
-
- public int hash;
-
- public CrucibleRecipe(String researchKey, ItemStack result, Object cat, AspectList tags)
- {
- recipeOutput = result;
- aspects = tags;
- key = researchKey;
- catalyst = cat;
- if(cat instanceof String)
- {
- catalyst = OreDictionary.getOres((String) cat);
- }
- String hc = researchKey + result.toString();
- for(final Aspect tag : tags.getAspects())
- {
- hc += tag.getTag() + tags.getAmount(tag);
- }
- if(cat instanceof ItemStack)
- {
- hc += ((ItemStack) cat).toString();
- }
- else if(cat instanceof ArrayList && ((ArrayList<ItemStack>) catalyst).size() > 0)
- {
- for(final ItemStack is : (ArrayList<ItemStack>) catalyst)
- {
- hc += is.toString();
- }
- }
-
- hash = hc.hashCode();
- }
-
- public boolean matches(AspectList itags, ItemStack cat)
- {
- if(catalyst instanceof ItemStack && !ThaumcraftApiHelper.itemMatches((ItemStack) catalyst, cat, false))
- {
- return false;
- }
- else if(catalyst instanceof ArrayList && ((ArrayList<ItemStack>) catalyst).size() > 0)
- {
- final ItemStack[] ores = ((ArrayList<ItemStack>) catalyst).toArray(new ItemStack[] {});
- if(!ThaumcraftApiHelper.containsMatch(false, new ItemStack[] {cat}, ores))
- {
- return false;
- }
- }
- if(itags == null)
- {
- return false;
- }
- for(final Aspect tag : aspects.getAspects())
- {
- if(itags.getAmount(tag) < aspects.getAmount(tag))
- {
- return false;
- }
- }
- return true;
- }
-
- public boolean catalystMatches(ItemStack cat)
- {
- if(catalyst instanceof ItemStack && ThaumcraftApiHelper.itemMatches((ItemStack) catalyst, cat, false))
- {
- return true;
- }
- else if(catalyst instanceof ArrayList && ((ArrayList<ItemStack>) catalyst).size() > 0)
- {
- final ItemStack[] ores = ((ArrayList<ItemStack>) catalyst).toArray(new ItemStack[] {});
- if(ThaumcraftApiHelper.containsMatch(false, new ItemStack[] {cat}, ores))
- {
- return true;
- }
- }
- return false;
- }
-
- public AspectList removeMatching(AspectList itags)
- {
- final AspectList temptags = new AspectList();
- temptags.aspects.putAll(itags.aspects);
-
- for(final Aspect tag : aspects.getAspects())
- {
- temptags.remove(tag, aspects.getAmount(tag));
- }
-
- itags = temptags;
- return itags;
- }
-
- public ItemStack getRecipeOutput()
- {
- return recipeOutput;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java b/src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java
deleted file mode 100644
index 1b0a933..0000000
--- a/src/api/java/thaumcraft/api/crafting/IArcaneRecipe.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package thaumcraft.api.crafting;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.inventory.IInventory;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-import thaumcraft.api.aspects.AspectList;
-
-public interface IArcaneRecipe
-{
-
- /**
- * Used to check if a recipe matches current crafting inventory
- * @param player
- */
- boolean matches(IInventory var1, World world, EntityPlayer player);
-
- /**
- * Returns an Item that is the result of this recipe
- */
- ItemStack getCraftingResult(IInventory var1);
-
- /**
- * Returns the size of the recipe area
- */
- int getRecipeSize();
-
- ItemStack getRecipeOutput();
-
- AspectList getAspects();
-
- AspectList getAspects(IInventory var1);
-
- String getResearch();
-
-}
diff --git a/src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java b/src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java
deleted file mode 100644
index f0a1226..0000000
--- a/src/api/java/thaumcraft/api/crafting/IInfusionStabiliser.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package thaumcraft.api.crafting;
-
-import net.minecraft.world.World;
-
-/**
- *
- * @author Azanor
- *
- * Blocks that implement this interface act as infusion crafting stabilisers like candles and skulls
- *
- */
-public interface IInfusionStabiliser
-{
-
- /**
- * returns true if the block can stabilise things
- */
- public boolean canStabaliseInfusion(World world, int x, int y, int z);
-
-}
diff --git a/src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java b/src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java
deleted file mode 100644
index 60ed52e..0000000
--- a/src/api/java/thaumcraft/api/crafting/InfusionEnchantmentRecipe.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package thaumcraft.api.crafting;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-
-import net.minecraft.enchantment.Enchantment;
-import net.minecraft.enchantment.EnchantmentHelper;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.api.ThaumcraftApiHelper;
-import thaumcraft.api.aspects.AspectList;
-
-public class InfusionEnchantmentRecipe
-{
-
- public AspectList aspects;
- public String research;
- public ItemStack[] components;
- public Enchantment enchantment;
- public int recipeXP;
- public int instability;
-
- public InfusionEnchantmentRecipe(String research, Enchantment input, int inst, AspectList aspects2, ItemStack[] recipe)
- {
- this.research = research;
- enchantment = input;
- aspects = aspects2;
- components = recipe;
- instability = inst;
- recipeXP = Math.max(1, input.getMinEnchantability(1) / 3);
- }
-
- /**
- * Used to check if a recipe matches current crafting inventory
- * @param player
- */
- public boolean matches(ArrayList<ItemStack> input, ItemStack central, World world, EntityPlayer player)
- {
- if(research.length() > 0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research))
- {
- return false;
- }
-
- if(!enchantment.canApply(central) || !central.getItem().isItemTool(central))
- {
- return false;
- }
-
- final Map map1 = EnchantmentHelper.getEnchantments(central);
- final Iterator iterator = map1.keySet().iterator();
- while(iterator.hasNext())
- {
- final int j1 = ((Integer) iterator.next()).intValue();
- final Enchantment ench = Enchantment.enchantmentsList[j1];
- if(j1 == enchantment.effectId && EnchantmentHelper.getEnchantmentLevel(j1, central) >= ench.getMaxLevel())
- {
- return false;
- }
- if(enchantment.effectId != ench.effectId && (!enchantment.canApplyTogether(ench) || !ench.canApplyTogether(enchantment)))
- {
- return false;
- }
- }
-
- ItemStack i2 = null;
-
- final ArrayList<ItemStack> ii = new ArrayList<ItemStack>();
- for(final ItemStack is : input)
- {
- ii.add(is.copy());
- }
-
- for(final ItemStack comp : components)
- {
- boolean b = false;
- for(int a = 0; a < ii.size(); a++)
- {
- i2 = ii.get(a).copy();
- if(comp.getItemDamage() == OreDictionary.WILDCARD_VALUE)
- {
- i2.setItemDamage(OreDictionary.WILDCARD_VALUE);
- }
- if(areItemStacksEqual(i2, comp, true))
- {
- ii.remove(a);
- b = true;
- break;
- }
- }
- if(!b)
- {
- return false;
- }
- }
- // System.out.println(ii.size());
- return ii.size() == 0 ? true : false;
- }
-
- protected boolean areItemStacksEqual(ItemStack stack0, ItemStack stack1, boolean fuzzy)
- {
- if(stack0 == null && stack1 != null)
- {
- return false;
- }
- if(stack0 != null && stack1 == null)
- {
- return false;
- }
- if(stack0 == null && stack1 == null)
- {
- return true;
- }
- final boolean t1 = ThaumcraftApiHelper.areItemStackTagsEqualForCrafting(stack0, stack1);
- if(!t1)
- {
- return false;
- }
- if(fuzzy)
- {
- final Integer od = OreDictionary.getOreID(stack0);
- if(od != -1)
- {
- final ItemStack[] ores = OreDictionary.getOres(od).toArray(new ItemStack[] {});
- if(ThaumcraftApiHelper.containsMatch(false, new ItemStack[] {stack1}, ores))
- {
- return true;
- }
- }
- }
- return stack0.getItem() != stack1.getItem() ? false : (stack0.getItemDamage() != stack1.getItemDamage() ? false : stack0.stackSize <= stack0.getMaxStackSize());
- }
-
- public Enchantment getEnchantment()
- {
- return enchantment;
-
- }
-
- public AspectList getAspects()
- {
- return aspects;
-
- }
-
- public String getResearch()
- {
- return research;
-
- }
-
- public int calcInstability(ItemStack recipeInput)
- {
- int i = 0;
- final Map map1 = EnchantmentHelper.getEnchantments(recipeInput);
- final Iterator iterator = map1.keySet().iterator();
- while(iterator.hasNext())
- {
- final int j1 = ((Integer) iterator.next()).intValue();
- i += EnchantmentHelper.getEnchantmentLevel(j1, recipeInput);
- }
- return (i / 2) + instability;
- }
-
- public int calcXP(ItemStack recipeInput)
- {
- return recipeXP * (1 + EnchantmentHelper.getEnchantmentLevel(enchantment.effectId, recipeInput));
- }
-
- public float getEssentiaMod(ItemStack recipeInput)
- {
- float mod = EnchantmentHelper.getEnchantmentLevel(enchantment.effectId, recipeInput);
- final Map map1 = EnchantmentHelper.getEnchantments(recipeInput);
- final Iterator iterator = map1.keySet().iterator();
- while(iterator.hasNext())
- {
- final int j1 = ((Integer) iterator.next()).intValue();
- if(j1 != enchantment.effectId)
- {
- mod += EnchantmentHelper.getEnchantmentLevel(j1, recipeInput) * .1f;
- }
- }
- return mod;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/crafting/InfusionRecipe.java b/src/api/java/thaumcraft/api/crafting/InfusionRecipe.java
deleted file mode 100644
index 93d1121..0000000
--- a/src/api/java/thaumcraft/api/crafting/InfusionRecipe.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package thaumcraft.api.crafting;
-
-import java.util.ArrayList;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.api.ThaumcraftApiHelper;
-import thaumcraft.api.aspects.AspectList;
-
-public class InfusionRecipe
-{
- protected AspectList aspects;
- protected String research;
- private final ItemStack[] components;
- private final ItemStack recipeInput;
- protected Object recipeOutput;
- protected int instability;
-
- public InfusionRecipe(String research, Object output, int inst, AspectList aspects2, ItemStack input, ItemStack[] recipe)
- {
- this.research = research;
- recipeOutput = output;
- recipeInput = input;
- aspects = aspects2;
- components = recipe;
- instability = inst;
- }
-
- /**
- * Used to check if a recipe matches current crafting inventory
- * @param player
- */
- public boolean matches(ArrayList<ItemStack> input, ItemStack central, World world, EntityPlayer player)
- {
- if(getRecipeInput() == null)
- {
- return false;
- }
-
- if(research.length() > 0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research))
- {
- return false;
- }
-
- ItemStack i2 = central.copy();
- if(getRecipeInput().getItemDamage() == OreDictionary.WILDCARD_VALUE)
- {
- i2.setItemDamage(OreDictionary.WILDCARD_VALUE);
- }
-
- if(!areItemStacksEqual(i2, getRecipeInput(), true))
- {
- return false;
- }
-
- final ArrayList<ItemStack> ii = new ArrayList<ItemStack>();
- for(final ItemStack is : input)
- {
- ii.add(is.copy());
- }
-
- for(final ItemStack comp : getComponents())
- {
- boolean b = false;
- for(int a = 0; a < ii.size(); a++)
- {
- i2 = ii.get(a).copy();
- if(comp.getItemDamage() == OreDictionary.WILDCARD_VALUE)
- {
- i2.setItemDamage(OreDictionary.WILDCARD_VALUE);
- }
- if(areItemStacksEqual(i2, comp, true))
- {
- ii.remove(a);
- b = true;
- break;
- }
- }
- if(!b)
- {
- return false;
- }
- }
- return ii.size() == 0 ? true : false;
- }
-
- public static boolean areItemStacksEqual(ItemStack stack0, ItemStack stack1, boolean fuzzy)
- {
- if(stack0 == null && stack1 != null)
- {
- return false;
- }
- if(stack0 != null && stack1 == null)
- {
- return false;
- }
- if(stack0 == null && stack1 == null)
- {
- return true;
- }
-
- //nbt
- final boolean t1 = ThaumcraftApiHelper.areItemStackTagsEqualForCrafting(stack0, stack1);
- if(!t1)
- {
- return false;
- }
-
- if(fuzzy)
- {
- final Integer od = OreDictionary.getOreID(stack0);
- if(od != -1)
- {
- final ItemStack[] ores = OreDictionary.getOres(od).toArray(new ItemStack[] {});
- if(ThaumcraftApiHelper.containsMatch(false, new ItemStack[] {stack1}, ores))
- {
- return true;
- }
- }
- }
-
- //damage
- final boolean damage = stack0.getItemDamage() == stack1.getItemDamage() || stack1.getItemDamage() == OreDictionary.WILDCARD_VALUE;
-
- return stack0.getItem() != stack1.getItem() ? false : (!damage ? false : stack0.stackSize <= stack0.getMaxStackSize());
- }
-
- public Object getRecipeOutput()
- {
- return getRecipeOutput(getRecipeInput());
- }
-
- public AspectList getAspects()
- {
- return getAspects(getRecipeInput());
- }
-
- public int getInstability()
- {
- return getInstability(getRecipeInput());
- }
-
- public String getResearch()
- {
- return research;
- }
-
- public ItemStack getRecipeInput()
- {
- return recipeInput;
- }
-
- public ItemStack[] getComponents()
- {
- return components;
- }
-
- public Object getRecipeOutput(ItemStack input)
- {
- return recipeOutput;
- }
-
- public AspectList getAspects(ItemStack input)
- {
- return aspects;
- }
-
- public int getInstability(ItemStack input)
- {
- return instability;
- }
-}
diff --git a/src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java b/src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java
deleted file mode 100644
index a76eed0..0000000
--- a/src/api/java/thaumcraft/api/crafting/ShapedArcaneRecipe.java
+++ /dev/null
@@ -1,281 +0,0 @@
-package thaumcraft.api.crafting;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.inventory.IInventory;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.api.ThaumcraftApiHelper;
-import thaumcraft.api.aspects.AspectList;
-
-public class ShapedArcaneRecipe implements IArcaneRecipe
-{
- //Added in for future ease of change, but hard coded for now.
- private static final int MAX_CRAFT_GRID_WIDTH = 3;
- private static final int MAX_CRAFT_GRID_HEIGHT = 3;
-
- public ItemStack output = null;
- public Object[] input = null;
- public AspectList aspects = null;
- public String research;
- public int width = 0;
- public int height = 0;
- private boolean mirrored = true;
-
- public ShapedArcaneRecipe(String research, Block result, AspectList aspects, Object... recipe)
- {
- this(research, new ItemStack(result), aspects, recipe);
- }
-
- public ShapedArcaneRecipe(String research, Item result, AspectList aspects, Object... recipe)
- {
- this(research, new ItemStack(result), aspects, recipe);
- }
-
- public ShapedArcaneRecipe(String research, ItemStack result, AspectList aspects, Object... recipe)
- {
- output = result.copy();
- this.research = research;
- this.aspects = aspects;
- String shape = "";
-
- int idx = 0;
-
- if(recipe[idx] instanceof Boolean)
- {
- mirrored = (Boolean) recipe[idx];
- if(recipe[idx + 1] instanceof Object[])
- {
- recipe = (Object[]) recipe[idx + 1];
- }
- else
- {
- idx = 1;
- }
- }
-
- if(recipe[idx] instanceof String[])
- {
- final String[] parts = ((String[]) recipe[idx++]);
-
- for(final String s : parts)
- {
- width = s.length();
- shape += s;
- }
-
- height = parts.length;
- }
- else
- {
- while(recipe[idx] instanceof String)
- {
- final String s = (String) recipe[idx++];
- shape += s;
- width = s.length();
- height++;
- }
- }
-
- if(width * height != shape.length())
- {
- String ret = "Invalid shaped ore recipe: ";
- for(final Object tmp : recipe)
- {
- ret += tmp + ", ";
- }
- ret += output;
- throw new RuntimeException(ret);
- }
-
- final HashMap<Character, Object> itemMap = new HashMap<Character, Object>();
-
- for(; idx < recipe.length; idx += 2)
- {
- final Character chr = (Character) recipe[idx];
- final Object in = recipe[idx + 1];
-
- if(in instanceof ItemStack)
- {
- itemMap.put(chr, ((ItemStack) in).copy());
- }
- else if(in instanceof Item)
- {
- itemMap.put(chr, new ItemStack((Item) in));
- }
- else if(in instanceof Block)
- {
- itemMap.put(chr, new ItemStack((Block) in, 1,
- OreDictionary.WILDCARD_VALUE));
- }
- else if(in instanceof String)
- {
- itemMap.put(chr, OreDictionary.getOres((String) in));
- }
- else
- {
- String ret = "Invalid shaped ore recipe: ";
- for(final Object tmp : recipe)
- {
- ret += tmp + ", ";
- }
- ret += output;
- throw new RuntimeException(ret);
- }
- }
-
- input = new Object[width * height];
- int x = 0;
- for(final char chr : shape.toCharArray())
- {
- input[x++] = itemMap.get(chr);
- }
- }
-
- @Override
- public ItemStack getCraftingResult(IInventory var1)
- {
- return output.copy();
- }
-
- @Override
- public int getRecipeSize()
- {
- return input.length;
- }
-
- @Override
- public ItemStack getRecipeOutput()
- {
- return output;
- }
-
- @Override
- public boolean matches(IInventory inv, World world, EntityPlayer player)
- {
- if(research.length() > 0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research))
- {
- return false;
- }
- for(int x = 0; x <= MAX_CRAFT_GRID_WIDTH - width; x++)
- {
- for(int y = 0; y <= MAX_CRAFT_GRID_HEIGHT - height; ++y)
- {
- if(checkMatch(inv, x, y, false))
- {
- return true;
- }
-
- if(mirrored && checkMatch(inv, x, y, true))
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
- private boolean checkMatch(IInventory inv, int startX, int startY, boolean mirror)
- {
- for(int x = 0; x < MAX_CRAFT_GRID_WIDTH; x++)
- {
- for(int y = 0; y < MAX_CRAFT_GRID_HEIGHT; y++)
- {
- final int subX = x - startX;
- final int subY = y - startY;
- Object target = null;
-
- if(subX >= 0 && subY >= 0 && subX < width && subY < height)
- {
- if(mirror)
- {
- target = input[width - subX - 1 + subY * width];
- }
- else
- {
- target = input[subX + subY * width];
- }
- }
-
- final ItemStack slot = ThaumcraftApiHelper.getStackInRowAndColumn(inv, x, y);
-
- if(target instanceof ItemStack)
- {
- if(!checkItemEquals((ItemStack) target, slot))
- {
- return false;
- }
- }
- else if(target instanceof ArrayList)
- {
- boolean matched = false;
-
- for(final ItemStack item : (ArrayList<ItemStack>) target)
- {
- matched = matched || checkItemEquals(item, slot);
- }
-
- if(!matched)
- {
- return false;
- }
- }
- else if(target == null && slot != null)
- {
- return false;
- }
- }
- }
-
- return true;
- }
-
- private boolean checkItemEquals(ItemStack target, ItemStack input)
- {
- if(input == null && target != null || input != null && target == null)
- {
- return false;
- }
- return(target.getItem() == input.getItem() && (!target.hasTagCompound() || ThaumcraftApiHelper.areItemStackTagsEqualForCrafting(input, target)) && (target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage()));
- }
-
- public ShapedArcaneRecipe setMirrored(boolean mirror)
- {
- mirrored = mirror;
- return this;
- }
-
- /**
- * Returns the input for this recipe, any mod accessing this value should never
- * manipulate the values in this array as it will effect the recipe itself.
- * @return The recipes input vales.
- */
- public Object[] getInput()
- {
- return input;
- }
-
- @Override
- public AspectList getAspects()
- {
- return aspects;
- }
-
- @Override
- public AspectList getAspects(IInventory inv)
- {
- return aspects;
- }
-
- @Override
- public String getResearch()
- {
- return research;
- }
-}
diff --git a/src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java b/src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java
deleted file mode 100644
index d6890c1..0000000
--- a/src/api/java/thaumcraft/api/crafting/ShapelessArcaneRecipe.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package thaumcraft.api.crafting;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.inventory.IInventory;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-import net.minecraftforge.oredict.OreDictionary;
-import thaumcraft.api.ThaumcraftApiHelper;
-import thaumcraft.api.aspects.AspectList;
-
-public class ShapelessArcaneRecipe implements IArcaneRecipe
-{
- private ItemStack output = null;
- private final ArrayList input = new ArrayList();
-
- public AspectList aspects = null;
- public String research;
-
- public ShapelessArcaneRecipe(String research, Block result, AspectList aspects, Object... recipe)
- {
- this(research, new ItemStack(result), aspects, recipe);
- }
-
- public ShapelessArcaneRecipe(String research, Item result, AspectList aspects, Object... recipe)
- {
- this(research, new ItemStack(result), aspects, recipe);
- }
-
- public ShapelessArcaneRecipe(String research, ItemStack result, AspectList aspects, Object... recipe)
- {
- output = result.copy();
- this.research = research;
- this.aspects = aspects;
- for(final Object in : recipe)
- {
- if(in instanceof ItemStack)
- {
- input.add(((ItemStack) in).copy());
- }
- else if(in instanceof Item)
- {
- input.add(new ItemStack((Item) in));
- }
- else if(in instanceof Block)
- {
- input.add(new ItemStack((Block) in));
- }
- else if(in instanceof String)
- {
- input.add(OreDictionary.getOres((String) in));
- }
- else
- {
- String ret = "Invalid shapeless ore recipe: ";
- for(final Object tmp : recipe)
- {
- ret += tmp + ", ";
- }
- ret += output;
- throw new RuntimeException(ret);
- }
- }
- }
-
- @Override
- public int getRecipeSize()
- {
- return input.size();
- }
-
- @Override
- public ItemStack getRecipeOutput()
- {
- return output;
- }
-
- @Override
- public ItemStack getCraftingResult(IInventory var1)
- {
- return output.copy();
- }
-
- @Override
- public boolean matches(IInventory var1, World world, EntityPlayer player)
- {
- if(research.length() > 0 && !ThaumcraftApiHelper.isResearchComplete(player.getCommandSenderName(), research))
- {
- return false;
- }
-
- final ArrayList required = new ArrayList(input);
-
- for(int x = 0; x < 9; x++)
- {
- final ItemStack slot = var1.getStackInSlot(x);
-
- if(slot != null)
- {
- boolean inRecipe = false;
- final Iterator req = required.iterator();
-
- while(req.hasNext())
- {
- boolean match = false;
-
- final Object next = req.next();
-
- if(next instanceof ItemStack)
- {
- match = checkItemEquals((ItemStack) next, slot);
- }
- else if(next instanceof ArrayList)
- {
- for(final ItemStack item : (ArrayList<ItemStack>) next)
- {
- match = match || checkItemEquals(item, slot);
- }
- }
-
- if(match)
- {
- inRecipe = true;
- required.remove(next);
- break;
- }
- }
-
- if(!inRecipe)
- {
- return false;
- }
- }
- }
-
- return required.isEmpty();
- }
-
- private boolean checkItemEquals(ItemStack target, ItemStack input)
- {
- if(input == null && target != null || input != null && target == null)
- {
- return false;
- }
- return(target.getItem() == input.getItem() && (!target.hasTagCompound() || ThaumcraftApiHelper.areItemStackTagsEqualForCrafting(input, target)) && (target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage()));
- }
-
- /**
- * Returns the input for this recipe, any mod accessing this value should never
- * manipulate the values in this array as it will effect the recipe itself.
- * @return The recipes input vales.
- */
- public ArrayList getInput()
- {
- return input;
- }
-
- @Override
- public AspectList getAspects()
- {
- return aspects;
- }
-
- @Override
- public AspectList getAspects(IInventory inv)
- {
- return aspects;
- }
-
- @Override
- public String getResearch()
- {
- return research;
- }
-}
diff --git a/src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java b/src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java
deleted file mode 100644
index 52fc3c3..0000000
--- a/src/api/java/thaumcraft/api/damagesource/DamageSourceIndirectThaumcraftEntity.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package thaumcraft.api.damagesource;
-
-import net.minecraft.entity.Entity;
-import net.minecraft.util.DamageSource;
-import net.minecraft.util.EntityDamageSourceIndirect;
-
-public class DamageSourceIndirectThaumcraftEntity extends EntityDamageSourceIndirect
-{
-
- public DamageSourceIndirectThaumcraftEntity(String par1Str, Entity par2Entity, Entity par3Entity)
- {
- super(par1Str, par2Entity, par3Entity);
- }
-
- @Override
- public DamageSource setFireDamage()
- {
- return this;
- }
-
- @Override
- public DamageSource setDamageBypassesArmor()
- {
- return this;
- }
-}
diff --git a/src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java b/src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java
deleted file mode 100644
index a05f5c5..0000000
--- a/src/api/java/thaumcraft/api/damagesource/DamageSourceThaumcraft.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package thaumcraft.api.damagesource;
-
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.util.DamageSource;
-import net.minecraft.util.EntityDamageSource;
-
-public class DamageSourceThaumcraft extends DamageSource
-{
-
- public static DamageSource taint = new DamageSourceThaumcraft(
- "taint").setDamageBypassesArmor().setMagicDamage();
- public static DamageSource tentacle = new DamageSourceThaumcraft(
- "tentacle");
- public static DamageSource swarm = new DamageSourceThaumcraft(
- "swarm");
- public static DamageSource dissolve = new DamageSourceThaumcraft(
- "dissolve").setDamageBypassesArmor();
-
- protected DamageSourceThaumcraft(String par1Str)
- {
- super(par1Str);
- }
-
- public static DamageSource causeSwarmDamage(EntityLivingBase par0EntityLiving)
- {
- return new EntityDamageSource("swarm", par0EntityLiving);
- }
-
- public static DamageSource causeTentacleDamage(EntityLivingBase par0EntityLiving)
- {
- return new EntityDamageSource("tentacle", par0EntityLiving);
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/entities/IEldritchMob.java b/src/api/java/thaumcraft/api/entities/IEldritchMob.java
deleted file mode 100644
index a23d228..0000000
--- a/src/api/java/thaumcraft/api/entities/IEldritchMob.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package thaumcraft.api.entities;
-
-public interface IEldritchMob
-{
-
-}
diff --git a/src/api/java/thaumcraft/api/entities/ITaintedMob.java b/src/api/java/thaumcraft/api/entities/ITaintedMob.java
deleted file mode 100644
index 1b1b793..0000000
--- a/src/api/java/thaumcraft/api/entities/ITaintedMob.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package thaumcraft.api.entities;
-
-public interface ITaintedMob
-{
-
-}
diff --git a/src/api/java/thaumcraft/api/internal/DummyInternalMethodHandler.java b/src/api/java/thaumcraft/api/internal/DummyInternalMethodHandler.java
deleted file mode 100644
index fcf31de..0000000
--- a/src/api/java/thaumcraft/api/internal/DummyInternalMethodHandler.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package thaumcraft.api.internal;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-
-public class DummyInternalMethodHandler implements IInternalMethodHandler
-{
-
- @Override
- public void generateVisEffect(int dim, int x, int y, int z, int x2, int y2, int z2, int color)
- {
-
- }
-
- @Override
- public boolean isResearchComplete(String username, String researchkey)
- {
- return false;
- }
-
- @Override
- public boolean hasDiscoveredAspect(String username, Aspect aspect)
- {
- return false;
- }
-
- @Override
- public AspectList getDiscoveredAspects(String username)
- {
- return null;
- }
-
- @Override
- public ItemStack getStackInRowAndColumn(Object instance, int row, int column)
- {
- return null;
- }
-
- @Override
- public AspectList getObjectAspects(ItemStack is)
- {
- return null;
- }
-
- @Override
- public AspectList getBonusObjectTags(ItemStack is, AspectList ot)
- {
- return null;
- }
-
- @Override
- public AspectList generateTags(Item item, int meta)
- {
- return null;
- }
-
- @Override
- public boolean consumeVisFromWand(ItemStack wand, EntityPlayer player, AspectList cost, boolean doit, boolean crafting)
- {
- return false;
- }
-
- @Override
- public boolean consumeVisFromWandCrafting(ItemStack wand, EntityPlayer player, AspectList cost, boolean doit)
- {
- return false;
- }
-
- @Override
- public boolean consumeVisFromInventory(EntityPlayer player, AspectList cost)
- {
- return false;
- }
-
- @Override
- public void addWarpToPlayer(EntityPlayer player, int amount, boolean temporary)
- {
- }
-
- @Override
- public void addStickyWarpToPlayer(EntityPlayer player, int amount)
- {
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/internal/IInternalMethodHandler.java b/src/api/java/thaumcraft/api/internal/IInternalMethodHandler.java
deleted file mode 100644
index 749c954..0000000
--- a/src/api/java/thaumcraft/api/internal/IInternalMethodHandler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package thaumcraft.api.internal;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-
-public interface IInternalMethodHandler
-{
-
- public void generateVisEffect(int dim, int x, int y, int z, int x2, int y2, int z2, int color);
-
- public boolean isResearchComplete(String username, String researchkey);
-
- public ItemStack getStackInRowAndColumn(Object instance, int row, int column);
-
- public AspectList getObjectAspects(ItemStack is);
-
- public AspectList getBonusObjectTags(ItemStack is, AspectList ot);
-
- public AspectList generateTags(Item item, int meta);
-
- public boolean consumeVisFromWand(ItemStack wand, EntityPlayer player, AspectList cost, boolean doit, boolean crafting);
-
- public boolean consumeVisFromWandCrafting(ItemStack wand, EntityPlayer player, AspectList cost, boolean doit);
-
- public boolean consumeVisFromInventory(EntityPlayer player, AspectList cost);
-
- public void addWarpToPlayer(EntityPlayer player, int amount, boolean temporary);
-
- public void addStickyWarpToPlayer(EntityPlayer player, int amount);
-
- public boolean hasDiscoveredAspect(String username, Aspect aspect);
-
- public AspectList getDiscoveredAspects(String username);
-
-}
diff --git a/src/api/java/thaumcraft/api/internal/WeightedRandomLoot.java b/src/api/java/thaumcraft/api/internal/WeightedRandomLoot.java
deleted file mode 100644
index 9ea95dd..0000000
--- a/src/api/java/thaumcraft/api/internal/WeightedRandomLoot.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package thaumcraft.api.internal;
-
-import java.util.ArrayList;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.WeightedRandom;
-
-public class WeightedRandomLoot extends WeightedRandom.Item
-{
-
- /** The Item/Block ID to generate in the bag. */
- public ItemStack item;
-
- public WeightedRandomLoot(ItemStack stack, int weight)
- {
- super(weight);
- item = stack;
- }
-
- public static ArrayList<WeightedRandomLoot> lootBagCommon = new ArrayList<WeightedRandomLoot>();
- public static ArrayList<WeightedRandomLoot> lootBagUncommon = new ArrayList<WeightedRandomLoot>();
- public static ArrayList<WeightedRandomLoot> lootBagRare = new ArrayList<WeightedRandomLoot>();
-
-}
diff --git a/src/api/java/thaumcraft/api/nodes/INode.java b/src/api/java/thaumcraft/api/nodes/INode.java
deleted file mode 100644
index 4ef8fee..0000000
--- a/src/api/java/thaumcraft/api/nodes/INode.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package thaumcraft.api.nodes;
-
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-import thaumcraft.api.aspects.IAspectContainer;
-
-public interface INode extends IAspectContainer
-{
-
- /**
- * Unique identifier to distinguish nodes. Normal node id's are based on world id and coordinates
- * @return
- */
- public String getId();
-
- public AspectList getAspectsBase();
-
- /**
- * Return the type of node
- * @return
- */
- public NodeType getNodeType();
-
- /**
- * Set the type of node
- * @return
- */
- public void setNodeType(NodeType nodeType);
-
- /**
- * Set the node modifier
- * @return
- */
- public void setNodeModifier(NodeModifier nodeModifier);
-
- /**
- * Return the node modifier
- * @return
- */
- public NodeModifier getNodeModifier();
-
- /**
- * Return the maximum capacity of each aspect the node can hold
- * @return
- */
- public int getNodeVisBase(Aspect aspect);
-
- /**
- * Set the maximum capacity of each aspect the node can hold
- * @return
- */
- public void setNodeVisBase(Aspect aspect, short nodeVisBase);
-
-}
diff --git a/src/api/java/thaumcraft/api/nodes/IRevealer.java b/src/api/java/thaumcraft/api/nodes/IRevealer.java
deleted file mode 100644
index 0f241e1..0000000
--- a/src/api/java/thaumcraft/api/nodes/IRevealer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package thaumcraft.api.nodes;
-
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.item.ItemStack;
-
-/**
- *
- * @author Azanor
- *
- * Equipped head slot items that extend this class will make nodes visible in world.
- *
- */
-
-public interface IRevealer
-{
-
- /*
- * If this method returns true the nodes will be visible.
- */
- public boolean showNodes(ItemStack itemstack, EntityLivingBase player);
-
-}
diff --git a/src/api/java/thaumcraft/api/nodes/NodeModifier.java b/src/api/java/thaumcraft/api/nodes/NodeModifier.java
deleted file mode 100644
index 2e0e95e..0000000
--- a/src/api/java/thaumcraft/api/nodes/NodeModifier.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package thaumcraft.api.nodes;
-
-public enum NodeModifier
-{
- BRIGHT, PALE, FADING
-}
diff --git a/src/api/java/thaumcraft/api/nodes/NodeType.java b/src/api/java/thaumcraft/api/nodes/NodeType.java
deleted file mode 100644
index 4fc26c3..0000000
--- a/src/api/java/thaumcraft/api/nodes/NodeType.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package thaumcraft.api.nodes;
-
-public enum NodeType
-{
- NORMAL, UNSTABLE, DARK, TAINTED, HUNGRY, PURE
-}
diff --git a/src/api/java/thaumcraft/api/package-info.java b/src/api/java/thaumcraft/api/package-info.java
deleted file mode 100644
index 4de2404..0000000
--- a/src/api/java/thaumcraft/api/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-@API(owner = "Thaumcraft", apiVersion = "4.2.2.0", provides = "Thaumcraft|API")
-package thaumcraft.api;
-
-import cpw.mods.fml.common.API;
-
diff --git a/src/api/java/thaumcraft/api/potions/PotionFluxTaint.java b/src/api/java/thaumcraft/api/potions/PotionFluxTaint.java
deleted file mode 100644
index facc2cc..0000000
--- a/src/api/java/thaumcraft/api/potions/PotionFluxTaint.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package thaumcraft.api.potions;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.potion.Potion;
-import net.minecraft.util.ResourceLocation;
-import thaumcraft.api.damagesource.DamageSourceThaumcraft;
-import thaumcraft.api.entities.ITaintedMob;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-
-public class PotionFluxTaint extends Potion
-{
- public static PotionFluxTaint instance = null; // will be instantiated at runtime
- public PotionFluxTaint(int par1, boolean par2, int par3)
- {
- super(par1, par2, par3);
- setIconIndex(0, 0);
- }
-
- public static void init()
- {
- instance.setPotionName("potion.fluxtaint");
- instance.setIconIndex(3, 1);
- instance.setEffectiveness(0.25D);
- }
-
- @Override
- public boolean isBadEffect()
- {
- return true;
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public int getStatusIconIndex()
- {
- Minecraft.getMinecraft().renderEngine.bindTexture(rl);
- return super.getStatusIconIndex();
- }
-
- static final ResourceLocation rl = new ResourceLocation("thaumcraft",
- "textures/misc/potions.png");
-
- @Override
- public void performEffect(EntityLivingBase target, int par2)
- {
- if(target instanceof ITaintedMob)
- {
- target.heal(1);
- }
- else if(!target.isEntityUndead() && !(target instanceof EntityPlayer))
- {
- target.attackEntityFrom(DamageSourceThaumcraft.taint, 1);
- }
- else if(!target.isEntityUndead() && (target.getMaxHealth() > 1 || (target instanceof EntityPlayer)))
- {
- target.attackEntityFrom(DamageSourceThaumcraft.taint, 1);
- }
- }
-
- @Override
- public boolean isReady(int par1, int par2)
- {
- final int k = 40 >> par2;
- return k > 0 ? par1 % k == 0 : true;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/potions/PotionVisExhaust.java b/src/api/java/thaumcraft/api/potions/PotionVisExhaust.java
deleted file mode 100644
index baa0f9c..0000000
--- a/src/api/java/thaumcraft/api/potions/PotionVisExhaust.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package thaumcraft.api.potions;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.potion.Potion;
-import net.minecraft.util.ResourceLocation;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-
-public class PotionVisExhaust extends Potion
-{
- public static PotionVisExhaust instance = null; // will be instantiated at runtime
- public PotionVisExhaust(int par1, boolean par2, int par3)
- {
- super(par1, par2, par3);
- setIconIndex(0, 0);
- }
-
- public static void init()
- {
- instance.setPotionName("potion.visexhaust");
- instance.setIconIndex(5, 1);
- instance.setEffectiveness(0.25D);
- }
-
- @Override
- public boolean isBadEffect()
- {
- return true;
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public int getStatusIconIndex()
- {
- Minecraft.getMinecraft().renderEngine.bindTexture(rl);
- return super.getStatusIconIndex();
- }
-
- static final ResourceLocation rl = new ResourceLocation("thaumcraft",
- "textures/misc/potions.png");
-
- @Override
- public void performEffect(EntityLivingBase target, int par2)
- {
-
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/research/IScanEventHandler.java b/src/api/java/thaumcraft/api/research/IScanEventHandler.java
deleted file mode 100644
index 219cb5d..0000000
--- a/src/api/java/thaumcraft/api/research/IScanEventHandler.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package thaumcraft.api.research;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-
-public interface IScanEventHandler
-{
- ScanResult scanPhenomena(ItemStack stack, World world, EntityPlayer player);
-}
diff --git a/src/api/java/thaumcraft/api/research/ResearchCategories.java b/src/api/java/thaumcraft/api/research/ResearchCategories.java
deleted file mode 100644
index 01c648b..0000000
--- a/src/api/java/thaumcraft/api/research/ResearchCategories.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package thaumcraft.api.research;
-
-import java.util.Collection;
-import java.util.LinkedHashMap;
-
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.StatCollector;
-
-import org.apache.logging.log4j.Level;
-
-import cpw.mods.fml.common.FMLLog;
-
-public class ResearchCategories
-{
-
- //Research
- public static LinkedHashMap<String, ResearchCategoryList> researchCategories = new LinkedHashMap<String, ResearchCategoryList>();
-
- /**
- * @param key
- * @return the research item linked to this key
- */
- public static ResearchCategoryList getResearchList(String key)
- {
- return researchCategories.get(key);
- }
-
- /**
- * @param key
- * @return the name of the research category linked to this key.
- * Must be stored as localization information in the LanguageRegistry.
- */
- public static String getCategoryName(String key)
- {
- return StatCollector.translateToLocal("tc.research_category." + key);
- }
-
- /**
- * @param key the research key
- * @return the ResearchItem object.
- */
- public static ResearchItem getResearch(String key)
- {
- final Collection rc = researchCategories.values();
- for(final Object cat : rc)
- {
- final Collection rl = ((ResearchCategoryList) cat).research.values();
- for(final Object ri : rl)
- {
- if((((ResearchItem) ri).key).equals(key))
- {
- return (ResearchItem) ri;
- }
- }
- }
- return null;
- }
-
- /**
- * This should only be done at the PostInit stage
- * @param key the key used for this category
- * @param icon the icon to be used for the research category tab
- * @param background the resource location of the background image to use for this category
- * @return the name of the research linked to this key
- */
- public static void registerCategory(String key, ResourceLocation icon, ResourceLocation background)
- {
- if(getResearchList(key) == null)
- {
- final ResearchCategoryList rl = new ResearchCategoryList(icon, background);
- researchCategories.put(key, rl);
- }
- }
-
- public static void addResearch(ResearchItem ri)
- {
- final ResearchCategoryList rl = getResearchList(ri.category);
- if(rl != null && !rl.research.containsKey(ri.key))
- {
-
- if(!ri.isVirtual())
- {
- for(final ResearchItem rr : rl.research.values())
- {
- if(rr.displayColumn == ri.displayColumn && rr.displayRow == ri.displayRow)
- {
- FMLLog.log(Level.FATAL, "[Thaumcraft] Research [" + ri.getName() + "] not added as it overlaps with existing research [" + rr.getName() + "]");
- return;
- }
- }
- }
-
- rl.research.put(ri.key, ri);
-
- if(ri.displayColumn < rl.minDisplayColumn)
- {
- rl.minDisplayColumn = ri.displayColumn;
- }
-
- if(ri.displayRow < rl.minDisplayRow)
- {
- rl.minDisplayRow = ri.displayRow;
- }
-
- if(ri.displayColumn > rl.maxDisplayColumn)
- {
- rl.maxDisplayColumn = ri.displayColumn;
- }
-
- if(ri.displayRow > rl.maxDisplayRow)
- {
- rl.maxDisplayRow = ri.displayRow;
- }
- }
- }
-}
diff --git a/src/api/java/thaumcraft/api/research/ResearchCategoryList.java b/src/api/java/thaumcraft/api/research/ResearchCategoryList.java
deleted file mode 100644
index 289604d..0000000
--- a/src/api/java/thaumcraft/api/research/ResearchCategoryList.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package thaumcraft.api.research;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import net.minecraft.util.ResourceLocation;
-
-public class ResearchCategoryList
-{
-
- /** Is the smallest column used on the GUI. */
- public int minDisplayColumn;
-
- /** Is the smallest row used on the GUI. */
- public int minDisplayRow;
-
- /** Is the biggest column used on the GUI. */
- public int maxDisplayColumn;
-
- /** Is the biggest row used on the GUI. */
- public int maxDisplayRow;
-
- /** display variables **/
- public ResourceLocation icon;
- public ResourceLocation background;
-
- public ResearchCategoryList(ResourceLocation icon, ResourceLocation background)
- {
- this.icon = icon;
- this.background = background;
- }
-
- //Research
- public Map<String, ResearchItem> research = new HashMap<String, ResearchItem>();
-
-}
diff --git a/src/api/java/thaumcraft/api/research/ResearchItem.java b/src/api/java/thaumcraft/api/research/ResearchItem.java
deleted file mode 100644
index b8b9e88..0000000
--- a/src/api/java/thaumcraft/api/research/ResearchItem.java
+++ /dev/null
@@ -1,394 +0,0 @@
-package thaumcraft.api.research;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.StatCollector;
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-
-public class ResearchItem
-{
- /**
- * A short string used as a key for this research. Must be unique
- */
- public final String key;
-
- /**
- * A short string used as a reference to the research category to which this must be added.
- */
- public final String category;
-
- /**
- * The aspect tags and their values required to complete this research
- */
- public final AspectList tags;
-
- /**
- * This links to any research that needs to be completed before this research can be discovered or learnt.
- */
- public String[] parents = null;
-
- /**
- * Like parent above, but a line will not be displayed in the thaumonomicon linking them. Just used to prevent clutter.
- */
- public String[] parentsHidden = null;
- /**
- * any research linked to this that will be unlocked automatically when this research is complete
- */
- public String[] siblings = null;
-
- /**
- * the horizontal position of the research icon
- */
- public final int displayColumn;
-
- /**
- * the vertical position of the research icon
- */
- public final int displayRow;
-
- /**
- * the icon to be used for this research
- */
- public final ItemStack icon_item;
-
- /**
- * the icon to be used for this research
- */
- public final ResourceLocation icon_resource;
-
- /**
- * How large the research grid is. Valid values are 1 to 3.
- */
- private int complexity;
-
- /**
- * Special research has a spiky border. Used for important research milestones.
- */
- private boolean isSpecial;
-
- /**
- * Research that can be directly purchased with RP in normal research difficulty.
- */
- private boolean isSecondary;
-
- /**
- * This indicates if the research should use a circular icon border. Usually used for "passive" research
- * that doesn't have recipes and grants passive effects, or that unlock automatically.
- */
- private boolean isRound;
-
- /**
- * Stub research cannot be discovered by normal means, but can be unlocked via the sibling system.
- */
- private boolean isStub;
-
- /**
- * This indicated that the research is completely hidden and cannot be discovered by any
- * player-controlled means. The recipes will never show up in the thaumonomicon.
- * Usually used to unlock "hidden" recipes via sibling unlocking, like
- * the various cap and rod combos for wands.
- */
- private boolean isVirtual;
-
- /**
- * Concealed research does not display in the thaumonomicon until parent researches are discovered.
- */
- private boolean isConcealed;
-
- /**
- * Hidden research can only be discovered via scanning or knowledge fragments
- */
- private boolean isHidden;
-
- /**
- * This is the same as isHidden, except it cannot be discovered with knowledge fragments, only scanning.
- */
- private boolean isLost;
-
- /**
- * These research items will automatically unlock for all players on game start
- */
- private boolean isAutoUnlock;
-
- /**
- * Scanning these items will have a chance of revealing hidden knowledge in the thaumonomicon
- */
- private ItemStack[] itemTriggers;
-
- /**
- * Scanning these entities will have a chance of revealing hidden knowledge in the thaumonomicon
- */
- private String[] entityTriggers;
-
- /**
- * Scanning things with these aspects will have a chance of revealing hidden knowledge in the thaumonomicon
- */
- private Aspect[] aspectTriggers;
-
- private ResearchPage[] pages = null;
-
- public ResearchItem(String key, String category)
- {
- this.key = key;
- this.category = category;
- tags = new AspectList();
- icon_resource = null;
- icon_item = null;
- displayColumn = 0;
- displayRow = 0;
- setVirtual();
-
- }
-
- public ResearchItem(String key, String category, AspectList tags, int col, int row, int complex, ResourceLocation icon)
- {
- this.key = key;
- this.category = category;
- this.tags = tags;
- icon_resource = icon;
- icon_item = null;
- displayColumn = col;
- displayRow = row;
- complexity = complex;
- if(complexity < 1)
- {
- complexity = 1;
- }
- if(complexity > 3)
- {
- complexity = 3;
- }
- }
-
- public ResearchItem(String key, String category, AspectList tags, int col, int row, int complex, ItemStack icon)
- {
- this.key = key;
- this.category = category;
- this.tags = tags;
- icon_item = icon;
- icon_resource = null;
- displayColumn = col;
- displayRow = row;
- complexity = complex;
- if(complexity < 1)
- {
- complexity = 1;
- }
- if(complexity > 3)
- {
- complexity = 3;
- }
- }
-
- public ResearchItem setSpecial()
- {
- isSpecial = true;
- return this;
- }
-
- public ResearchItem setStub()
- {
- isStub = true;
- return this;
- }
-
- public ResearchItem setLost()
- {
- isLost = true;
- return this;
- }
-
- public ResearchItem setConcealed()
- {
- isConcealed = true;
- return this;
- }
-
- public ResearchItem setHidden()
- {
- isHidden = true;
- return this;
- }
-
- public ResearchItem setVirtual()
- {
- isVirtual = true;
- return this;
- }
-
- public ResearchItem setParents(String... par)
- {
- parents = par;
- return this;
- }
-
- public ResearchItem setParentsHidden(String... par)
- {
- parentsHidden = par;
- return this;
- }
-
- public ResearchItem setSiblings(String... sib)
- {
- siblings = sib;
- return this;
- }
-
- public ResearchItem setPages(ResearchPage... par)
- {
- pages = par;
- return this;
- }
-
- public ResearchPage[] getPages()
- {
- return pages;
- }
-
- public ResearchItem setItemTriggers(ItemStack... par)
- {
- itemTriggers = par;
- return this;
- }
-
- public ResearchItem setEntityTriggers(String... par)
- {
- entityTriggers = par;
- return this;
- }
-
- public ResearchItem setAspectTriggers(Aspect... par)
- {
- aspectTriggers = par;
- return this;
- }
-
- public ItemStack[] getItemTriggers()
- {
- return itemTriggers;
- }
-
- public String[] getEntityTriggers()
- {
- return entityTriggers;
- }
-
- public Aspect[] getAspectTriggers()
- {
- return aspectTriggers;
- }
-
- public ResearchItem registerResearchItem()
- {
- ResearchCategories.addResearch(this);
- return this;
- }
-
- public String getName()
- {
- return StatCollector.translateToLocal("tc.research_name." + key);
- }
-
- public String getText()
- {
- return StatCollector.translateToLocal("tc.research_text." + key);
- }
-
- public boolean isSpecial()
- {
- return isSpecial;
- }
-
- public boolean isStub()
- {
- return isStub;
- }
-
- public boolean isLost()
- {
- return isLost;
- }
-
- public boolean isConcealed()
- {
- return isConcealed;
- }
-
- public boolean isHidden()
- {
- return isHidden;
- }
-
- public boolean isVirtual()
- {
- return isVirtual;
- }
-
- public boolean isAutoUnlock()
- {
- return isAutoUnlock;
- }
-
- public ResearchItem setAutoUnlock()
- {
- isAutoUnlock = true;
- return this;
- }
-
- public boolean isRound()
- {
- return isRound;
- }
-
- public ResearchItem setRound()
- {
- isRound = true;
- return this;
- }
-
- public boolean isSecondary()
- {
- return isSecondary;
- }
-
- public ResearchItem setSecondary()
- {
- isSecondary = true;
- return this;
- }
-
- public int getComplexity()
- {
- return complexity;
- }
-
- public ResearchItem setComplexity(int complexity)
- {
- this.complexity = complexity;
- return this;
- }
-
- /**
- * @return the aspect aspects ordinal with the highest value. Used to determine scroll color and similar things
- */
- public Aspect getResearchPrimaryTag()
- {
- Aspect aspect = null;
- int highest = 0;
- if(tags != null)
- {
- for(final Aspect tag : tags.getAspects())
- {
- if(tags.getAmount(tag) > highest)
- {
- aspect = tag;
- highest = tags.getAmount(tag);
- }
- ;
- }
- }
- return aspect;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/research/ResearchPage.java b/src/api/java/thaumcraft/api/research/ResearchPage.java
deleted file mode 100644
index 415350a..0000000
--- a/src/api/java/thaumcraft/api/research/ResearchPage.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package thaumcraft.api.research;
-
-import java.util.List;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.crafting.FurnaceRecipes;
-import net.minecraft.item.crafting.IRecipe;
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.StatCollector;
-import thaumcraft.api.aspects.AspectList;
-import thaumcraft.api.crafting.CrucibleRecipe;
-import thaumcraft.api.crafting.IArcaneRecipe;
-import thaumcraft.api.crafting.InfusionEnchantmentRecipe;
-import thaumcraft.api.crafting.InfusionRecipe;
-
-public class ResearchPage
-{
- public static enum PageType
- {
- TEXT, TEXT_CONCEALED, IMAGE, CRUCIBLE_CRAFTING, ARCANE_CRAFTING, ASPECTS, NORMAL_CRAFTING, INFUSION_CRAFTING, COMPOUND_CRAFTING, INFUSION_ENCHANTMENT, SMELTING
- }
-
- public PageType type = PageType.TEXT;
-
- public String text = null;
- public String research = null;
- public ResourceLocation image = null;
- public AspectList aspects = null;
- public Object recipe = null;
- public ItemStack recipeOutput = null;
-
- /**
- * @param text this can (but does not have to) be a reference to a localization variable, not the actual text.
- */
- public ResearchPage(String text)
- {
- type = PageType.TEXT;
- this.text = text;
- }
-
- /**
- * @param research this page will only be displayed if the player has discovered this research
- * @param text this can (but does not have to) be a reference to a localization variable, not the actual text.
- */
- public ResearchPage(String research, String text)
- {
- type = PageType.TEXT_CONCEALED;
- this.research = research;
- this.text = text;
- }
-
- /**
- * @param recipe a vanilla crafting recipe.
- */
- public ResearchPage(IRecipe recipe)
- {
- type = PageType.NORMAL_CRAFTING;
- this.recipe = recipe;
- recipeOutput = recipe.getRecipeOutput();
- }
-
- /**
- * @param recipe a collection of vanilla crafting recipes.
- */
- public ResearchPage(IRecipe[] recipe)
- {
- type = PageType.NORMAL_CRAFTING;
- this.recipe = recipe;
- }
-
- /**
- * @param recipe a collection of arcane crafting recipes.
- */
- public ResearchPage(IArcaneRecipe[] recipe)
- {
- type = PageType.ARCANE_CRAFTING;
- this.recipe = recipe;
- }
-
- /**
- * @param recipe a collection of arcane crafting recipes.
- */
- public ResearchPage(CrucibleRecipe[] recipe)
- {
- type = PageType.CRUCIBLE_CRAFTING;
- this.recipe = recipe;
- }
-
- /**
- * @param recipe a collection of infusion crafting recipes.
- */
- public ResearchPage(InfusionRecipe[] recipe)
- {
- type = PageType.INFUSION_CRAFTING;
- this.recipe = recipe;
- }
-
- /**
- * @param recipe a compound crafting recipe.
- */
- public ResearchPage(List recipe)
- {
- type = PageType.COMPOUND_CRAFTING;
- this.recipe = recipe;
- }
-
- /**
- * @param recipe an arcane worktable crafting recipe.
- */
- public ResearchPage(IArcaneRecipe recipe)
- {
- type = PageType.ARCANE_CRAFTING;
- this.recipe = recipe;
- recipeOutput = recipe.getRecipeOutput();
- }
-
- /**
- * @param recipe an alchemy crafting recipe.
- */
- public ResearchPage(CrucibleRecipe recipe)
- {
- type = PageType.CRUCIBLE_CRAFTING;
- this.recipe = recipe;
- recipeOutput = recipe.getRecipeOutput();
- }
-
- /**
- * @param recipe a furnace smelting crafting recipe.
- */
- public ResearchPage(ItemStack input)
- {
- type = PageType.SMELTING;
- recipe = input;
- recipeOutput = FurnaceRecipes.smelting().getSmeltingResult(input);
- }
-
- /**
- * @param recipe an infusion crafting recipe.
- */
- public ResearchPage(InfusionRecipe recipe)
- {
- type = PageType.INFUSION_CRAFTING;
- this.recipe = recipe;
- if(recipe.getRecipeOutput() instanceof ItemStack)
- {
- recipeOutput = (ItemStack) recipe.getRecipeOutput();
- }
- else
- {
- recipeOutput = recipe.getRecipeInput();
- }
- }
-
- /**
- * @param recipe an infusion crafting recipe.
- */
- public ResearchPage(InfusionEnchantmentRecipe recipe)
- {
- type = PageType.INFUSION_ENCHANTMENT;
- this.recipe = recipe;
- // if (recipe.recipeOutput instanceof ItemStack) {
- // this.recipeOutput = (ItemStack) recipe.recipeOutput;
- // } else {
- // this.recipeOutput = recipe.recipeInput;
- // }
- }
-
- /**
- * @param image
- * @param caption this can (but does not have to) be a reference to a localization variable, not the actual text.
- */
- public ResearchPage(ResourceLocation image, String caption)
- {
- type = PageType.IMAGE;
- this.image = image;
- text = caption;
- }
-
- /**
- * This function should really not be called directly - used internally
- */
- public ResearchPage(AspectList as)
- {
- type = PageType.ASPECTS;
- aspects = as;
- }
-
- /**
- * returns a localized text of the text field (if one exists). Returns the text field itself otherwise.
- * @return
- */
- public String getTranslatedText()
- {
- String ret = "";
- if(text != null)
- {
- ret = StatCollector.translateToLocal(text);
- if(ret.isEmpty())
- {
- ret = text;
- }
- }
- return ret;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/research/ScanResult.java b/src/api/java/thaumcraft/api/research/ScanResult.java
deleted file mode 100644
index 8c04c69..0000000
--- a/src/api/java/thaumcraft/api/research/ScanResult.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package thaumcraft.api.research;
-
-import net.minecraft.entity.Entity;
-
-public class ScanResult
-{
- public byte type = 0; //1=blocks,2=entities,3=phenomena
- public int id;
- public int meta;
- public Entity entity;
- public String phenomena;
-
- public ScanResult(byte type, int blockId, int blockMeta, Entity entity, String phenomena)
- {
- super();
- this.type = type;
- id = blockId;
- meta = blockMeta;
- this.entity = entity;
- this.phenomena = phenomena;
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if(obj instanceof ScanResult)
- {
- final ScanResult sr = (ScanResult) obj;
- if(type != sr.type)
- {
- return false;
- }
- if(type == 1 && (id != sr.id || meta != sr.meta))
- {
- return false;
- }
- if(type == 2 && entity.getEntityId() != sr.entity.getEntityId())
- {
- return false;
- }
- if(type == 3 && !phenomena.equals(sr.phenomena))
- {
- return false;
- }
- }
- return true;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/visnet/TileVisNode.java b/src/api/java/thaumcraft/api/visnet/TileVisNode.java
deleted file mode 100644
index 56dbafe..0000000
--- a/src/api/java/thaumcraft/api/visnet/TileVisNode.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package thaumcraft.api.visnet;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import thaumcraft.api.TileThaumcraft;
-import thaumcraft.api.WorldCoordinates;
-import thaumcraft.api.aspects.Aspect;
-
-/**
- * @author Azanor
- *
- * The tile entity used by nodes in the vis energy network. A node is either a source (like an aura node),
- * a transport relay or vis receiver (like the infernal furnace).
- *
- */
-public abstract class TileVisNode extends TileThaumcraft
-{
-
- WeakReference<TileVisNode> parent = null;
- ArrayList<WeakReference<TileVisNode>> children = new ArrayList<WeakReference<TileVisNode>>();
-
- /**
- * @return the WorldCoordinates location of where this node is located
- */
- public WorldCoordinates getLocation()
- {
- return new WorldCoordinates(this);
- }
-
- /**
- * @return the number of blocks away this node will check for parent nodes to connect to.
- */
- public abstract int getRange();
-
- /**
- * @return true if this is the source or root node of the vis network.
- */
- public abstract boolean isSource();
-
- /**
- * This method should never be called directly. Use VisNetHandler.drainVis() instead
- * @param aspect what aspect to drain
- * @param vis how much to drain
- * @return how much was actually drained
- */
- public int consumeVis(Aspect aspect, int vis)
- {
- if(VisNetHandler.isNodeValid(getParent()))
- {
- final int out = getParent().get().consumeVis(aspect, vis);
- if(out > 0)
- {
- triggerConsumeEffect(aspect);
- }
- return out;
- }
- return 0;
- }
-
- public void removeThisNode()
- {
- for(final WeakReference<TileVisNode> n : getChildren())
- {
- if(n != null && n.get() != null)
- {
- n.get().removeThisNode();
- }
- }
-
- children = new ArrayList<WeakReference<TileVisNode>>();
- if(VisNetHandler.isNodeValid(getParent()))
- {
- getParent().get().nodeRefresh = true;
- }
- setParent(null);
- parentChanged();
-
- if(isSource())
- {
- HashMap<WorldCoordinates, WeakReference<TileVisNode>> sourcelist = VisNetHandler.sources.get(worldObj.provider.dimensionId);
- if(sourcelist == null)
- {
- sourcelist = new HashMap<WorldCoordinates, WeakReference<TileVisNode>>();
- }
- sourcelist.remove(getLocation());
- VisNetHandler.sources.put(worldObj.provider.dimensionId, sourcelist);
- }
-
- worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
- }
-
- @Override
- public void invalidate()
- {
- removeThisNode();
- super.invalidate();
- }
-
- public void triggerConsumeEffect(Aspect aspect)
- {
- }
-
- /**
- * @return
- */
- public WeakReference<TileVisNode> getParent()
- {
- return parent;
- }
-
- /**
- * @return
- */
- public WeakReference<TileVisNode> getRootSource()
- {
- return VisNetHandler.isNodeValid(getParent()) ? getParent().get().getRootSource() : isSource() ? new WeakReference(
- this) : null;
- }
-
- /**
- * @param parent
- */
- public void setParent(WeakReference<TileVisNode> parent)
- {
- this.parent = parent;
- }
-
- /**
- * @return
- */
- public ArrayList<WeakReference<TileVisNode>> getChildren()
- {
- return children;
- }
-
- @Override
- public boolean canUpdate()
- {
- return true;
- }
-
- protected int nodeCounter = 0;
- private boolean nodeRegged = false;
- public boolean nodeRefresh = false;
-
- @Override
- public void updateEntity()
- {
-
- if(!worldObj.isRemote && ((nodeCounter++) % 40 == 0 || nodeRefresh))
- {
- //check for changes
- if(!nodeRefresh && children.size() > 0)
- {
- for(final WeakReference<TileVisNode> n : children)
- {
- if(n == null || n.get() == null || !VisNetHandler.canNodeBeSeen(this, n.get()))
- {
- nodeRefresh = true;
- break;
- }
- }
- }
-
- //refresh linked nodes
- if(nodeRefresh)
- {
- for(final WeakReference<TileVisNode> n : children)
- {
- if(n.get() != null)
- {
- n.get().nodeRefresh = true;
- }
- }
- children.clear();
- parent = null;
- }
-
- //redo stuff
- if(isSource() && !nodeRegged)
- {
- VisNetHandler.addSource(getWorldObj(), this);
- nodeRegged = true;
- }
- else if(!isSource() && !VisNetHandler.isNodeValid(getParent()))
- {
- setParent(VisNetHandler.addNode(getWorldObj(), this));
- nodeRefresh = true;
- }
-
- if(nodeRefresh)
- {
- worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
- parentChanged();
- }
- nodeRefresh = false;
- }
-
- }
-
- public void parentChanged()
- {
- }
-
- /**
- * @return the type of shard this is attuned to:
- * none -1, air 0, fire 1, water 2, earth 3, order 4, entropy 5
- * Should return -1 for most implementations
- */
- public byte getAttunement()
- {
- return -1;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/visnet/VisNetHandler.java b/src/api/java/thaumcraft/api/visnet/VisNetHandler.java
deleted file mode 100644
index c8a4826..0000000
--- a/src/api/java/thaumcraft/api/visnet/VisNetHandler.java
+++ /dev/null
@@ -1,317 +0,0 @@
-package thaumcraft.api.visnet;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import net.minecraft.util.MovingObjectPosition;
-import net.minecraft.util.MovingObjectPosition.MovingObjectType;
-import net.minecraft.util.Vec3;
-import net.minecraft.world.World;
-import thaumcraft.api.ThaumcraftApi;
-import thaumcraft.api.ThaumcraftApiHelper;
-import thaumcraft.api.WorldCoordinates;
-import thaumcraft.api.aspects.Aspect;
-
-public class VisNetHandler
-{
-
- // NODE DRAINING
- /**
- * This method drains vis from a relay or source near the passed in
- * location. The amount received can be less than the amount requested so
- * take that into account.
- *
- * @param world
- * @param x the x position of the draining block or entity
- * @param y the y position of the draining block or entity
- * @param z the z position of the draining block or entity
- * @param aspect what aspect to drain
- * @param amount how much to drain
- * @return how much was actually drained
- */
- public static int drainVis(World world, int x, int y, int z, Aspect aspect, int amount)
- {
-
- int drainedAmount = 0;
-
- final WorldCoordinates drainer = new WorldCoordinates(x, y, z,
- world.provider.dimensionId);
- if(!nearbyNodes.containsKey(drainer))
- {
- calculateNearbyNodes(world, x, y, z);
- }
-
- final ArrayList<WeakReference<TileVisNode>> nodes = nearbyNodes.get(drainer);
- if(nodes != null && nodes.size() > 0)
- {
- for(final WeakReference<TileVisNode> noderef : nodes)
- {
-
- final TileVisNode node = noderef.get();
-
- if(node == null)
- {
- continue;
- }
-
- final int a = node.consumeVis(aspect, amount);
- drainedAmount += a;
- amount -= a;
- if(a > 0)
- {
- final int color = Aspect.getPrimalAspects().indexOf(aspect);
- generateVisEffect(world.provider.dimensionId, x, y, z, node.xCoord, node.yCoord, node.zCoord, color);
- }
- if(amount <= 0)
- {
- break;
- }
- }
- }
-
- return drainedAmount;
- }
-
- public static void generateVisEffect(int dim, int x, int y, int z, int x2, int y2, int z2, int color)
- {
- ThaumcraftApi.internalMethods.generateVisEffect(dim, x, y, z, x2, y2, z2, color);
- }
-
- public static HashMap<Integer, HashMap<WorldCoordinates, WeakReference<TileVisNode>>> sources = new HashMap<Integer, HashMap<WorldCoordinates, WeakReference<TileVisNode>>>();
-
- public static void addSource(World world, TileVisNode vs)
- {
- HashMap<WorldCoordinates, WeakReference<TileVisNode>> sourcelist = sources.get(world.provider.dimensionId);
- if(sourcelist == null)
- {
- sourcelist = new HashMap<WorldCoordinates, WeakReference<TileVisNode>>();
- }
- sourcelist.put(vs.getLocation(), new WeakReference(vs));
- sources.put(world.provider.dimensionId, sourcelist);
- nearbyNodes.clear();
- }
-
- public static boolean isNodeValid(WeakReference<TileVisNode> node)
- {
- if(node == null || node.get() == null || node.get().isInvalid())
- {
- return false;
- }
- return true;
- }
-
- public static WeakReference<TileVisNode> addNode(World world, TileVisNode vn)
- {
- final WeakReference ref = new WeakReference(vn);
-
- HashMap<WorldCoordinates, WeakReference<TileVisNode>> sourcelist = sources.get(world.provider.dimensionId);
- if(sourcelist == null)
- {
- sourcelist = new HashMap<WorldCoordinates, WeakReference<TileVisNode>>();
- return null;
- }
-
- ArrayList<Object[]> nearby = new ArrayList<Object[]>();
-
- for(final WeakReference<TileVisNode> root : sourcelist.values())
- {
- if(!isNodeValid(root))
- {
- continue;
- }
-
- final TileVisNode source = root.get();
-
- final float r = inRange(world, vn.getLocation(), source.getLocation(), vn.getRange());
- if(r > 0)
- {
- nearby.add(new Object[] {source, r - vn.getRange() * 2});
- }
-
- nearby = findClosestNodes(vn, source, nearby);
- cache.clear();
- }
-
- float dist = Float.MAX_VALUE;
- TileVisNode closest = null;
- if(nearby.size() > 0)
- {
- for(final Object[] o : nearby)
- {
- if((Float) o[1] < dist && (vn.getAttunement() == -1 || ((TileVisNode) o[0]).getAttunement() == -1 || vn.getAttunement() == ((TileVisNode) o[0]).getAttunement())//) {
- && canNodeBeSeen(vn, (TileVisNode) o[0]))
- {
- dist = (Float) o[1];
- closest = (TileVisNode) o[0];
- }
- }
- }
- if(closest != null)
- {
- closest.getChildren().add(ref);
- nearbyNodes.clear();
- return new WeakReference(closest);
- }
-
- return null;
- }
-
- static ArrayList<WorldCoordinates> cache = new ArrayList<WorldCoordinates>();
-
- public static ArrayList<Object[]> findClosestNodes(TileVisNode target, TileVisNode parent, ArrayList<Object[]> in)
- {
-
- if(cache.size() > 512 || cache.contains(new WorldCoordinates(parent)))
- {
- return in;
- }
- cache.add(new WorldCoordinates(parent));
-
- for(final WeakReference<TileVisNode> childWR : parent.getChildren())
- {
- final TileVisNode child = childWR.get();
-
- if(child != null && !child.equals(target) && !child.equals(parent))
- {
- final float r2 = inRange(child.getWorldObj(), child.getLocation(), target.getLocation(), target.getRange());
- if(r2 > 0)
- {
- in.add(new Object[] {child, r2});
- }
-
- in = findClosestNodes(target, child, in);
- }
- }
- return in;
- }
-
- private static float inRange(World world, WorldCoordinates cc1, WorldCoordinates cc2, int range)
- {
- final float distance = cc1.getDistanceSquaredToWorldCoordinates(cc2);
- return distance > range * range ? -1 : distance;
- }
-
- private static HashMap<WorldCoordinates, ArrayList<WeakReference<TileVisNode>>> nearbyNodes = new HashMap<WorldCoordinates, ArrayList<WeakReference<TileVisNode>>>();
-
- private static void calculateNearbyNodes(World world, int x, int y, int z)
- {
-
- HashMap<WorldCoordinates, WeakReference<TileVisNode>> sourcelist = sources.get(world.provider.dimensionId);
- if(sourcelist == null)
- {
- sourcelist = new HashMap<WorldCoordinates, WeakReference<TileVisNode>>();
- return;
- }
-
- final ArrayList<WeakReference<TileVisNode>> cn = new ArrayList<WeakReference<TileVisNode>>();
- final WorldCoordinates drainer = new WorldCoordinates(x, y, z,
- world.provider.dimensionId);
-
- new ArrayList<Object[]>();
-
- for(final WeakReference<TileVisNode> root : sourcelist.values())
- {
-
- if(!isNodeValid(root))
- {
- continue;
- }
-
- final TileVisNode source = root.get();
-
- TileVisNode closest = null;
- float range = Float.MAX_VALUE;
-
- final float r = inRange(world, drainer, source.getLocation(), source.getRange());
- if(r > 0)
- {
- range = r;
- closest = source;
- }
-
- ArrayList<WeakReference<TileVisNode>> children = new ArrayList<WeakReference<TileVisNode>>();
- children = getAllChildren(source, children);
-
- for(final WeakReference<TileVisNode> child : children)
- {
- final TileVisNode n = child.get();
- if(n != null && !n.equals(root))
- {
-
- final float r2 = inRange(n.getWorldObj(), n.getLocation(), drainer, n.getRange());
- if(r2 > 0 && r2 < range)
- {
- range = r2;
- closest = n;
- }
- }
- }
-
- if(closest != null)
- {
-
- cn.add(new WeakReference(closest));
- }
- }
-
- nearbyNodes.put(drainer, cn);
- }
-
- private static ArrayList<WeakReference<TileVisNode>> getAllChildren(TileVisNode source, ArrayList<WeakReference<TileVisNode>> list)
- {
- for(final WeakReference<TileVisNode> child : source.getChildren())
- {
- final TileVisNode n = child.get();
-
- if(n != null && n.getWorldObj() != null && isChunkLoaded(n.getWorldObj(), n.xCoord, n.zCoord))
- {
- list.add(child);
- list = getAllChildren(n, list);
- }
- }
- return list;
- }
-
- public static boolean isChunkLoaded(World world, int x, int z)
- {
- final int xx = x >> 4;
- final int zz = z >> 4;
- return world.getChunkProvider().chunkExists(xx, zz);
- }
-
- public static boolean canNodeBeSeen(TileVisNode source, TileVisNode target)
- {
- final MovingObjectPosition mop = ThaumcraftApiHelper.rayTraceIgnoringSource(source.getWorldObj(), Vec3.createVectorHelper(source.xCoord + .5, source.yCoord + .5, source.zCoord + .5), Vec3.createVectorHelper(target.xCoord + .5, target.yCoord + .5, target.zCoord + .5), false, true, false);
- return mop == null || (mop.typeOfHit == MovingObjectType.BLOCK && mop.blockX == target.xCoord && mop.blockY == target.yCoord && mop.blockZ == target.zCoord);
- }
-
- // public static HashMap<WorldCoordinates,WeakReference<TileVisNode>>
- // noderef = new HashMap<WorldCoordinates,WeakReference<TileVisNode>>();
- //
- // public static TileVisNode getClosestNodeWithinRadius(World world, int x,
- // int y, int z, int radius) {
- // TileVisNode out = null;
- // WorldCoordinates wc = null;
- // float cd = Float.MAX_VALUE;
- // for (int sx = x - radius; sx <= x + radius; sx++) {
- // for (int sy = y - radius; sy <= y + radius; sy++) {
- // for (int sz = z - radius; sz <= z + radius; sz++) {
- // wc = new WorldCoordinates(sx,sy,sz,world.provider.dimensionId);
- // if (noderef.containsKey(wc)) {
- // float d = wc.getDistanceSquared(x, y, z);
- // if (d<radius*radius && noderef.get(wc).get()!=null &&
- // !noderef.get(wc).get().isReceiver() &&
- // isNodeValid(noderef.get(wc).get().getParent())
- // ) {
- // out = noderef.get(wc).get();
- // cd = d;
- // }
- // }
- // }
- // }
- // }
- // return out;
- // }
-
-}
diff --git a/src/api/java/thaumcraft/api/wands/FocusUpgradeType.java b/src/api/java/thaumcraft/api/wands/FocusUpgradeType.java
deleted file mode 100644
index 32ee1ef..0000000
--- a/src/api/java/thaumcraft/api/wands/FocusUpgradeType.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package thaumcraft.api.wands;
-
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.StatCollector;
-
-import org.apache.logging.log4j.LogManager;
-
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-
-public class FocusUpgradeType
-{
-
- public static FocusUpgradeType[] types = new FocusUpgradeType[20];
-
- public short id;
-
- public ResourceLocation icon;
-
- public String name;
-
- public String text;
-
- /**
- * What aspects are used to calculate the cost of this upgrade. The amounts given is ignored, just the type is used for the calculation.
- */
- public AspectList aspects;
-
- public FocusUpgradeType(int id, ResourceLocation icon, String name, String text, AspectList aspects)
- {
- this.id = (short) id;
- this.icon = icon;
- this.name = name;
- this.text = text;
- this.aspects = aspects;
-
- if(id < types.length && types[id] != null)
- {
- LogManager.getLogger("THAUMCRAFT").fatal("Focus Upgrade id " + id + " already occupied. Ignoring.");
- return;
- }
-
- // allocate space
- if(id >= types.length)
- {
- final FocusUpgradeType[] temp = new FocusUpgradeType[id + 1];
- System.arraycopy(types, 0, temp, 0, types.length);
- types = temp;
- }
-
- types[id] = this;
- }
-
- public String getLocalizedName()
- {
- return StatCollector.translateToLocal(name);
- }
-
- public String getLocalizedText()
- {
- return StatCollector.translateToLocal(text);
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if(obj instanceof FocusUpgradeType)
- {
- return id == ((FocusUpgradeType) obj).id;
- }
- else
- {
- return false;
- }
- }
-
- // basic upgrade types
- public static FocusUpgradeType potency = new FocusUpgradeType(
- 0,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/potency.png"),
- "focus.upgrade.potency.name",
- "focus.upgrade.potency.text",
- new AspectList().add(Aspect.WEAPON, 1));
-
- public static FocusUpgradeType frugal = new FocusUpgradeType(
- 1,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/frugal.png"),
- "focus.upgrade.frugal.name",
- "focus.upgrade.frugal.text",
- new AspectList().add(Aspect.HUNGER, 1));
-
- public static FocusUpgradeType treasure = new FocusUpgradeType(
- 2,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/treasure.png"),
- "focus.upgrade.treasure.name",
- "focus.upgrade.treasure.text",
- new AspectList().add(Aspect.GREED, 1));
-
- public static FocusUpgradeType enlarge = new FocusUpgradeType(
- 3,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/enlarge.png"),
- "focus.upgrade.enlarge.name",
- "focus.upgrade.enlarge.text",
- new AspectList().add(Aspect.TRAVEL, 1));
-
- public static FocusUpgradeType alchemistsfire = new FocusUpgradeType(
- 4,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/alchemistsfire.png"),
- "focus.upgrade.alchemistsfire.name",
- "focus.upgrade.alchemistsfire.text",
- new AspectList().add(Aspect.ENERGY, 1).add(Aspect.SLIME, 1));
-
- public static FocusUpgradeType alchemistsfrost = new FocusUpgradeType(
- 5,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/alchemistsfrost.png"),
- "focus.upgrade.alchemistsfrost.name",
- "focus.upgrade.alchemistsfrost.text",
- new AspectList().add(Aspect.COLD, 1).add(Aspect.TRAP, 1));
-
- public static FocusUpgradeType architect = new FocusUpgradeType(
- 6,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/architect.png"),
- "focus.upgrade.architect.name",
- "focus.upgrade.architect.text",
- new AspectList().add(Aspect.CRAFT, 1));
-
- public static FocusUpgradeType extend = new FocusUpgradeType(
- 7,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/extend.png"),
- "focus.upgrade.extend.name",
- "focus.upgrade.extend.text",
- new AspectList().add(Aspect.EXCHANGE, 1));
-
- public static FocusUpgradeType silktouch = new FocusUpgradeType(
- 8,
- new ResourceLocation(
- "thaumcraft",
- "textures/foci/silktouch.png"),
- "focus.upgrade.silktouch.name",
- "focus.upgrade.silktouch.text",
- new AspectList().add(Aspect.GREED, 1));
-
-}
diff --git a/src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java b/src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java
deleted file mode 100644
index dbceaa5..0000000
--- a/src/api/java/thaumcraft/api/wands/IWandRodOnUpdate.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package thaumcraft.api.wands;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-
-/**
- *
- * @author azanor
- *
- * Implemented by a class that you wish to be called whenever a wand with this rod performs its
- * update tick.
- *
- */
-public interface IWandRodOnUpdate
-{
- void onUpdate(ItemStack itemstack, EntityPlayer player);
-}
diff --git a/src/api/java/thaumcraft/api/wands/IWandTriggerManager.java b/src/api/java/thaumcraft/api/wands/IWandTriggerManager.java
deleted file mode 100644
index ae47992..0000000
--- a/src/api/java/thaumcraft/api/wands/IWandTriggerManager.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package thaumcraft.api.wands;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-
-public interface IWandTriggerManager
-{
-
- /**
- * This class will be called by wands with the proper parameters. It is up to you to decide what to do with them.
- */
- public boolean performTrigger(World world, ItemStack wand, EntityPlayer player, int x, int y, int z, int side, int event);
-
-}
diff --git a/src/api/java/thaumcraft/api/wands/IWandable.java b/src/api/java/thaumcraft/api/wands/IWandable.java
deleted file mode 100644
index 7cc0362..0000000
--- a/src/api/java/thaumcraft/api/wands/IWandable.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package thaumcraft.api.wands;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-
-/**
- *
- * @author azanor
- *
- * Add this to a tile entity that you wish wands to interact with in some way.
- *
- */
-
-public interface IWandable
-{
-
- public int onWandRightClick(World world, ItemStack wandstack, EntityPlayer player, int x, int y, int z, int side, int md);
-
- public ItemStack onWandRightClick(World world, ItemStack wandstack, EntityPlayer player);
-
- public void onUsingWandTick(ItemStack wandstack, EntityPlayer player, int count);
-
- public void onWandStoppedUsing(ItemStack wandstack, World world, EntityPlayer player, int count);
-
-}
diff --git a/src/api/java/thaumcraft/api/wands/ItemFocusBasic.java b/src/api/java/thaumcraft/api/wands/ItemFocusBasic.java
deleted file mode 100644
index 70d0dba..0000000
--- a/src/api/java/thaumcraft/api/wands/ItemFocusBasic.java
+++ /dev/null
@@ -1,314 +0,0 @@
-package thaumcraft.api.wands;
-
-import java.text.DecimalFormat;
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import net.minecraft.entity.Entity;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.EnumRarity;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.nbt.NBTTagList;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraft.util.IIcon;
-import net.minecraft.util.MovingObjectPosition;
-import net.minecraft.util.StatCollector;
-import net.minecraft.world.World;
-import thaumcraft.api.aspects.Aspect;
-import thaumcraft.api.aspects.AspectList;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-
-public class ItemFocusBasic extends Item
-{
-
- public ItemFocusBasic()
- {
- super();
- maxStackSize = 1;
- canRepair = false;
- setMaxDamage(0);
- }
-
- public IIcon icon;
-
- @SideOnly(Side.CLIENT)
- @Override
- public IIcon getIconFromDamage(int par1)
- {
- return icon;
- }
-
- @Override
- public boolean isDamageable()
- {
- return false;
- }
-
- @Override
- public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4)
- {
- final AspectList al = getVisCost(stack);
- if(al != null && al.size() > 0)
- {
- list.add(StatCollector.translateToLocal(isVisCostPerTick(stack) ? "item.Focus.cost2" : "item.Focus.cost1"));
- for(final Aspect aspect : al.getAspectsSorted())
- {
- final DecimalFormat myFormatter = new DecimalFormat("#####.##");
- final String amount = myFormatter.format(al.getAmount(aspect) / 100f);
- list.add(" \u00A7" + aspect.getChatcolor() + aspect.getName() + "\u00A7r x " + amount);
- }
- }
- addFocusInformation(stack, player, list, par4);
- }
-
- public void addFocusInformation(ItemStack focusstack, EntityPlayer player, List list, boolean par4)
- {
- final LinkedHashMap<Short, Integer> map = new LinkedHashMap<Short, Integer>();
- for(final short id : getAppliedUpgrades(focusstack))
- {
- if(id >= 0)
- {
- int amt = 1;
- if(map.containsKey(id))
- {
- amt = map.get(id) + 1;
- }
- map.put(id, amt);
- }
- }
- for(final Short id : map.keySet())
- {
- list.add(EnumChatFormatting.DARK_PURPLE + FocusUpgradeType.types[id].getLocalizedName() + (map.get(id) > 1 ? " " + StatCollector.translateToLocal("enchantment.level." + map.get(id)) : ""));
- }
- }
-
- /**
- * Purely for display on the focus tooltip (see addInformation method above)
- */
- public boolean isVisCostPerTick(ItemStack focusstack)
- {
- return false;
- }
-
- @Override
- public EnumRarity getRarity(ItemStack focusstack)
- {
- return EnumRarity.rare;
- }
-
- /**
- * What color will the focus orb be rendered on the held wand
- */
- public int getFocusColor(ItemStack focusstack)
- {
- return 0;
- }
-
- /**
- * Does the focus have ornamentation like the focus of the nine hells. Ornamentation is a standard icon rendered in a cross around the focus
- */
- public IIcon getOrnament(ItemStack focusstack)
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- /**
- * An icon to be rendered inside the focus itself
- */
- public IIcon getFocusDepthLayerIcon(ItemStack focusstack)
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- public enum WandFocusAnimation
- {
- WAVE, CHARGE;
- }
-
- public WandFocusAnimation getAnimation(ItemStack focusstack)
- {
- return WandFocusAnimation.WAVE;
- }
-
- /**
- * Just insert two alphanumeric characters before this string in your focus item class
- */
- public String getSortingHelper(ItemStack focusstack)
- {
- String out = "";
- for(final short id : getAppliedUpgrades(focusstack))
- {
- out = out + id;
- }
- return out;
- }
-
- /**
- * How much vis does this focus consume per activation.
- */
- public AspectList getVisCost(ItemStack focusstack)
- {
- return null;
- }
-
- /**
- * This returns how many milliseconds must pass before the focus can be activated again.
- */
- public int getActivationCooldown(ItemStack focusstack)
- {
- return 0;
- }
-
- /**
- * Used by foci like equal trade to determine their area in artchitect mode
- */
- public int getMaxAreaSize(ItemStack focusstack)
- {
- return 1;
- }
-
- /**
- * What upgrades can be applied to this focus for ranks 1 to 5
- */
- public FocusUpgradeType[] getPossibleUpgradesByRank(ItemStack focusstack, int rank)
- {
- return null;
- }
-
- /**
- * What upgrades does the focus currently have
- */
- public short[] getAppliedUpgrades(ItemStack focusstack)
- {
- final short[] l = new short[] {-1, -1, -1, -1, -1};
- final NBTTagList nbttaglist = getFocusUpgradeTagList(focusstack);
- if(nbttaglist == null)
- {
- return l;
- }
- else
- {
- for(int j = 0; j < nbttaglist.tagCount(); ++j)
- {
- if(j >= 5)
- {
- break;
- }
- l[j] = nbttaglist.getCompoundTagAt(j).getShort("id");
- }
-
- return l;
- }
- }
-
- public boolean applyUpgrade(ItemStack focusstack, FocusUpgradeType type, int rank)
- {
- final short[] upgrades = getAppliedUpgrades(focusstack);
- if(upgrades[rank - 1] != -1 || rank < 1 || rank > 5)
- {
- return false;
- }
- upgrades[rank - 1] = type.id;
- setFocusUpgradeTagList(focusstack, upgrades);
- return true;
- }
-
- /**
- * Use this method to define custom logic about which upgrades can be applied. This can be used to set up upgrade "trees"
- * that make certain upgrades available only when others are unlocked first, when certain research is completed, or similar logic.
- *
- */
- public boolean canApplyUpgrade(ItemStack focusstack, EntityPlayer player, FocusUpgradeType type, int rank)
- {
- return true;
- }
-
- /**
- * Does this focus have the passed upgrade type
- */
- public boolean isUpgradedWith(ItemStack focusstack, FocusUpgradeType focusUpgradetype)
- {
- return getUpgradeLevel(focusstack, focusUpgradetype) > 0;
- }
-
- /**
- * What level is the passed upgrade type on the focus. If it is not present it returns 0
- */
- public int getUpgradeLevel(ItemStack focusstack, FocusUpgradeType focusUpgradetype)
- {
- final short[] list = getAppliedUpgrades(focusstack);
- int level = 0;
- for(final short id : list)
- {
- if(id == focusUpgradetype.id)
- {
- level++;
- }
- }
- return level;
- }
-
- public ItemStack onFocusRightClick(ItemStack wandstack, World world, EntityPlayer player, MovingObjectPosition movingobjectposition)
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- public void onUsingFocusTick(ItemStack wandstack, EntityPlayer player, int count)
- {
- // TODO Auto-generated method stub
- }
-
- public void onPlayerStoppedUsingFocus(ItemStack wandstack, World world, EntityPlayer player, int count)
- {
- // TODO Auto-generated method stub
-
- }
-
- public boolean onFocusBlockStartBreak(ItemStack wandstack, int x, int y, int z, EntityPlayer player)
- {
- // TODO Auto-generated method stub
- return false;
- }
-
- /**
- * Internal helper methods
- */
- private NBTTagList getFocusUpgradeTagList(ItemStack focusstack)
- {
- return focusstack.stackTagCompound == null ? null : focusstack.stackTagCompound.getTagList("upgrade", 10);
- }
-
- private void setFocusUpgradeTagList(ItemStack focusstack, short[] upgrades)
- {
- if(!focusstack.hasTagCompound())
- {
- focusstack.setTagCompound(new NBTTagCompound());
- }
- final NBTTagCompound nbttagcompound = focusstack.getTagCompound();
- final NBTTagList tlist = new NBTTagList();
- nbttagcompound.setTag("upgrade", tlist);
- for(final short id : upgrades)
- {
- final NBTTagCompound f = new NBTTagCompound();
- f.setShort("id", id);
- tlist.appendTag(f);
- }
- }
-
- @Override
- public void onUpdate(ItemStack stack, World world, Entity entity, int p_77663_4_, boolean p_77663_5_)
- {
- if(stack.stackTagCompound != null && stack.stackTagCompound.hasKey("ench"))
- {
- stack.stackTagCompound.removeTag("ench");
- }
- super.onUpdate(stack, world, entity, p_77663_4_, p_77663_5_);
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/wands/StaffRod.java b/src/api/java/thaumcraft/api/wands/StaffRod.java
deleted file mode 100644
index 1dc474c..0000000
--- a/src/api/java/thaumcraft/api/wands/StaffRod.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package thaumcraft.api.wands;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.ResourceLocation;
-
-/**
- *
- * @author Azanor
- *
- * This class is used to keep the material information for the various rods.
- * It is also used to generate the wand recipes ingame.
- *
- */
-public class StaffRod extends WandRod
-{
-
- boolean runes = false;
-
- public StaffRod(String tag, int capacity, ItemStack item, int craftCost)
- {
- super(tag + "_staff", capacity, item, craftCost);
- texture = new ResourceLocation("thaumcraft",
- "textures/models/wand_rod_" + tag + ".png");
- }
-
- public StaffRod(String tag, int capacity, ItemStack item, int craftCost, IWandRodOnUpdate onUpdate, ResourceLocation texture)
- {
- super(tag + "_staff", capacity, item, craftCost, onUpdate, texture);
- }
-
- public StaffRod(String tag, int capacity, ItemStack item, int craftCost, IWandRodOnUpdate onUpdate)
- {
- super(tag + "_staff", capacity, item, craftCost, onUpdate);
- texture = new ResourceLocation("thaumcraft",
- "textures/models/wand_rod_" + tag + ".png");
- }
-
- public StaffRod(String tag, int capacity, ItemStack item, int craftCost, ResourceLocation texture)
- {
- super(tag + "_staff", capacity, item, craftCost, texture);
- }
-
- public boolean hasRunes()
- {
- return runes;
- }
-
- public void setRunes(boolean hasRunes)
- {
- runes = hasRunes;
- }
-
-}
diff --git a/src/api/java/thaumcraft/api/wands/WandCap.java b/src/api/java/thaumcraft/api/wands/WandCap.java
deleted file mode 100644
index e5726ef..0000000
--- a/src/api/java/thaumcraft/api/wands/WandCap.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package thaumcraft.api.wands;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.ResourceLocation;
-import thaumcraft.api.aspects.Aspect;
-
-/**
- * This class is used to keep the material information for the various caps.
- * It is also used to generate the wand recipes ingame.
- * @author Azanor
- *
- */
-public class WandCap
-{
-
- private String tag;
-
- /**
- * Cost to craft this wand. Combined with the rod cost.
- */
- private int craftCost;
-
- /**
- * the amount by which all aspect costs are multiplied
- */
- float baseCostModifier;
-
- /**
- * specifies a list of primal aspects that use the special discount figure instead of the normal discount.
- */
- List<Aspect> specialCostModifierAspects;
-
- /**
- * the amount by which the specified aspect costs are multiplied
- */
- float specialCostModifier;
-
- /**
- * The texture that will be used for the ingame wand cap
- */
- ResourceLocation texture;
-
- /**
- * the actual item that makes up this cap and will be used to generate the wand recipes
- */
- ItemStack item;
-
- public static LinkedHashMap<String, WandCap> caps = new LinkedHashMap<String, WandCap>();
-
- public WandCap(String tag, float discount, ItemStack item, int craftCost)
- {
- setTag(tag);
- baseCostModifier = discount;
- specialCostModifierAspects = null;
- texture = new ResourceLocation("thaumcraft",
- "textures/models/wand_cap_" + getTag() + ".png");
- this.item = item;
- setCraftCost(craftCost);
- caps.put(tag, this);
- }
-
- public WandCap(String tag, float discount, List<Aspect> specialAspects, float discountSpecial, ItemStack item, int craftCost)
- {
- setTag(tag);
- baseCostModifier = discount;
- specialCostModifierAspects = specialAspects;
- specialCostModifier = discountSpecial;
- texture = new ResourceLocation("thaumcraft",
- "textures/models/wand_cap_" + getTag() + ".png");
- this.item = item;
- setCraftCost(craftCost);
- caps.put(tag, this);
- }
-
- public float getBaseCostModifier()
- {
- return baseCostModifier;
- }
-
- public List<Aspect> getSpecialCostModifierAspects()
- {
- return specialCostModifierAspects;
- }
-
- public float getSpecialCostModifier()
- {
- return specialCostModifier;
- }
-
- public ResourceLocation getTexture()
- {
- return texture;
- }
-
- public void setTexture(ResourceLocation texture)
- {
- this.texture = texture;
- }
-
- public String getTag()
- {
- return tag;
- }
-
- public void setTag(String tag)
- {
- this.tag = tag;
- }
-
- public ItemStack getItem()
- {
- return item;
- }
-
- public void setItem(ItemStack item)
- {
- this.item = item;
- }
-
- public int getCraftCost()
- {
- return craftCost;
- }
-
- public void setCraftCost(int craftCost)
- {
- this.craftCost = craftCost;
- }
-
- /**
- * The research a player needs to have finished to be able to craft a wand with this cap.
- */
- public String getResearch()
- {
- return "CAP_" + getTag();
- }
-
- // Some examples:
- // WandCap WAND_CAP_IRON = new WandCap("iron", 1.1f, Arrays.asList(Aspect.ORDER),1, new ItemStack(ConfigItems.itemWandCap,1,0),1);
- // WandCap WAND_CAP_GOLD = new WandCap("gold", 1f, new ItemStack(ConfigItems.itemWandCap,1,1),3);
-
-}
diff --git a/src/api/java/thaumcraft/api/wands/WandRod.java b/src/api/java/thaumcraft/api/wands/WandRod.java
deleted file mode 100644
index 9b6907d..0000000
--- a/src/api/java/thaumcraft/api/wands/WandRod.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package thaumcraft.api.wands;
-
-import java.util.LinkedHashMap;
-
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.ResourceLocation;
-
-/**
- *
- * @author Azanor
- *
- * This class is used to keep the material information for the various rods.
- * It is also used to generate the wand recipes ingame.
- *
- */
-public class WandRod
-{
-
- private String tag;
-
- /**
- * Cost to craft this wand. Combined with the rod cost.
- */
- private int craftCost;
-
- /**
- * The amount of vis that can be stored - this number is actually multiplied
- * by 100 for use by the wands internals
- */
- int capacity;
-
- /**
- * The texture that will be used for the ingame wand rod
- */
- protected ResourceLocation texture;
-
- /**
- * the actual item that makes up this rod and will be used to generate the wand recipes
- */
- ItemStack item;
-
- /**
- * A class that will be called whenever the wand onUpdate tick is run
- */
- IWandRodOnUpdate onUpdate;
-
- /**
- * Does the rod glow in the dark?
- */
- boolean glow;
-
- public static LinkedHashMap<String, WandRod> rods = new LinkedHashMap<String, WandRod>();
-
- public WandRod(String tag, int capacity, ItemStack item, int craftCost, ResourceLocation texture)
- {
- setTag(tag);
- this.capacity = capacity;
- this.texture = texture;
- this.item = item;
- setCraftCost(craftCost);
- rods.put(tag, this);
- }
-
- public WandRod(String tag, int capacity, ItemStack item, int craftCost, IWandRodOnUpdate onUpdate, ResourceLocation texture)
- {
- setTag(tag);
- this.capacity = capacity;
- this.texture = texture;
- this.item = item;
- setCraftCost(craftCost);
- rods.put(tag, this);
- this.onUpdate = onUpdate;
- }
-
- public WandRod(String tag, int capacity, ItemStack item, int craftCost)
- {
- setTag(tag);
- this.capacity = capacity;
- texture = new ResourceLocation("thaumcraft",
- "textures/models/wand_rod_" + getTag() + ".png");
- this.item = item;
- setCraftCost(craftCost);
- rods.put(tag, this);
- }
-
- public WandRod(String tag, int capacity, ItemStack item, int craftCost, IWandRodOnUpdate onUpdate)
- {
- setTag(tag);
- this.capacity = capacity;
- texture = new ResourceLocation("thaumcraft",
- "textures/models/wand_rod_" + getTag() + ".png");
- this.item = item;
- setCraftCost(craftCost);
- rods.put(tag, this);
- this.onUpdate = onUpdate;
- }
-
- public String getTag()
- {
- return tag;
- }
-
- public void setTag(String tag)
- {
- this.tag = tag;
- }
-
- public int getCapacity()
- {
- return capacity;
- }
-
- public void setCapacity(int capacity)
- {
- this.capacity = capacity;
- }
-
- public ResourceLocation getTexture()
- {
- return texture;
- }
-
- public void setTexture(ResourceLocation texture)
- {
- this.texture = texture;
- }
-
- public ItemStack getItem()
- {
- return item;
- }
-
- public void setItem(ItemStack item)
- {
- this.item = item;
- }
-
- public int getCraftCost()
- {
- return craftCost;
- }
-
- public void setCraftCost(int craftCost)
- {
- this.craftCost = craftCost;
- }
-
- public IWandRodOnUpdate getOnUpdate()
- {
- return onUpdate;
- }
-
- public void setOnUpdate(IWandRodOnUpdate onUpdate)
- {
- this.onUpdate = onUpdate;
- }
-
- public boolean isGlowing()
- {
- return glow;
- }
-
- public void setGlowing(boolean hasGlow)
- {
- glow = hasGlow;
- }
-
- /**
- * The research a player needs to have finished to be able to craft a wand with this rod.
- */
- public String getResearch()
- {
- return "ROD_" + getTag();
- }
-
- // Some examples:
- // WandRod WAND_ROD_WOOD = new WandRod("wood",25,new ItemStack(Item.stick),1);
- // WandRod WAND_ROD_BLAZE = new WandRod("blaze",100,new ItemStack(Item.blazeRod),7,new WandRodBlazeOnUpdate());
-}
diff --git a/src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java b/src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java
deleted file mode 100644
index c9c24f2..0000000
--- a/src/api/java/thaumcraft/api/wands/WandTriggerRegistry.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package thaumcraft.api.wands;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-
-/**
- * This class serves a similar function to IWandable in that it allows wands to interact
- * with object in the world. In this case it is most useful for adding interaction with non-mod
- * blocks where you can't control what happens in their code.
- * Example where it is used is in crafting the thaumonomicon from a bookshelf and the
- * crucible from a cauldron
- *
- * @author azanor
- *
- */
-public class WandTriggerRegistry
-{
-
- private static HashMap<String, HashMap<List, List>> triggers = new HashMap<String, HashMap<List, List>>();
- private static final String DEFAULT = "default";
-
- /**
- * Registers an action to perform when a casting wand right clicks on a specific block.
- * A manager class needs to be created that implements IWandTriggerManager.
- * @param manager
- * @param event a logical number that you can use to differentiate different events or actions
- * @param block
- * @param meta send -1 as a wildcard value for all possible meta values
- * @param modid a unique identifier. It is best to register your own triggers using your mod id to avoid conflicts with mods that register triggers for the same block
- */
- public static void registerWandBlockTrigger(IWandTriggerManager manager, int event, Block block, int meta, String modid)
- {
- if(!triggers.containsKey(modid))
- {
- triggers.put(modid, new HashMap<List, List>());
- }
- final HashMap<List, List> temp = triggers.get(modid);
- temp.put(Arrays.asList(block, meta), Arrays.asList(manager, event));
- triggers.put(modid, temp);
- }
-
- /**
- * for legacy support
- */
- public static void registerWandBlockTrigger(IWandTriggerManager manager, int event, Block block, int meta)
- {
- registerWandBlockTrigger(manager, event, block, meta, DEFAULT);
- }
-
- /**
- * Checks all trigger registries if one exists for the given block and meta
- * @param block
- * @param meta
- * @return
- */
- public static boolean hasTrigger(Block block, int meta)
- {
- for(final String modid : triggers.keySet())
- {
- final HashMap<List, List> temp = triggers.get(modid);
- if(temp.containsKey(Arrays.asList(block, meta)) || temp.containsKey(Arrays.asList(block, -1)))
- {
- return true;
- }
- }
- return false;
- }
-
- /**
- * modid sensitive version
- */
- public static boolean hasTrigger(Block block, int meta, String modid)
- {
- if(!triggers.containsKey(modid))
- {
- return false;
- }
- final HashMap<List, List> temp = triggers.get(modid);
- if(temp.containsKey(Arrays.asList(block, meta)) || temp.containsKey(Arrays.asList(block, -1)))
- {
- return true;
- }
- return false;
- }
-
- /**
- * This is called by the onItemUseFirst function in wands.
- * Parameters and return value functions like you would expect for that function.
- * @param world
- * @param wand
- * @param player
- * @param x
- * @param y
- * @param z
- * @param side
- * @param block
- * @param meta
- * @return
- */
- public static boolean performTrigger(World world, ItemStack wand, EntityPlayer player, int x, int y, int z, int side, Block block, int meta)
- {
-
- for(final String modid : triggers.keySet())
- {
- final HashMap<List, List> temp = triggers.get(modid);
- List l = temp.get(Arrays.asList(block, meta));
- if(l == null)
- {
- l = temp.get(Arrays.asList(block, -1));
- }
- if(l == null)
- {
- continue;
- }
-
- final IWandTriggerManager manager = (IWandTriggerManager) l.get(0);
- final int event = (Integer) l.get(1);
- final boolean result = manager.performTrigger(world, wand, player, x, y, z, side, event);
- if(result)
- {
- return true;
- }
- }
- return false;
- }
-
- /**
- * modid sensitive version
- */
- public static boolean performTrigger(World world, ItemStack wand, EntityPlayer player, int x, int y, int z, int side, Block block, int meta, String modid)
- {
- if(!triggers.containsKey(modid))
- {
- return false;
- }
- final HashMap<List, List> temp = triggers.get(modid);
- List l = temp.get(Arrays.asList(block, meta));
- if(l == null)
- {
- l = temp.get(Arrays.asList(block, -1));
- }
- if(l == null)
- {
- return false;
- }
-
- final IWandTriggerManager manager = (IWandTriggerManager) l.get(0);
- final int event = (Integer) l.get(1);
- return manager.performTrigger(world, wand, player, x, y, z, side, event);
- }
-
-}