From 6a26bec4e14af1ad77c799c26cb9312a970db7b6 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 5 Feb 2013 01:16:01 -0800 Subject: [PATCH] Fucktons of refactoring. *Moving ItemManager & BlockManager functionality into Config object. *New CraftingManager to hold all the crafting stuff *Shuffling some classes around in packages and whatnot. *Switching to use the ItemInterface provided by Thaumcraft's API rather than reading configs. *New texture stuff for a magic apiary. --- .../gfx/thaumicbees/items/items.png | Bin 8050 -> 60455 bytes .../bees/{genetics => }/BeeGenomeManager.java | 5 +- .../thaumicbees/bees/TBBeeManager.java | 71 ++-- .../bees/genetics/BeeMutation.java | 2 +- .../thaumicbees/bees/genetics/BeeSpecies.java | 4 +- .../FlowerProviderAuraNode.java | 6 +- .../FlowerProviderAuraNodeFlux.java | 2 +- .../FlowerProviderAuraNodePurify.java | 7 +- .../FlowerProviderBookshelf.java | 2 +- .../FlowerProviderThaumcraftFlower.java | 10 +- .../thaumicbees/block/BlockMagicApiary.java | 33 ++ .../thaumicbees/block/BlockManager.java | 24 -- .../thaumicbees/item/ItemManager.java | 377 ----------------- thaumicbees_src/thaumicbees/main/Config.java | 189 +++++++++ .../thaumicbees/main/ThaumicBees.java | 79 ++-- .../main/ThaumicBeesConfiguration.java | 35 -- thaumicbees_src/thaumicbees/main/Vector3.java | 14 - .../main/utils/CraftingManager.java | 382 ++++++++++++++++++ .../{bees => main/utils}/MoonPhase.java | 4 +- .../main/{ => utils}/VersionInfo.java | 2 +- .../thaumcraft/ThaumcraftCompat.java | 256 +++--------- 21 files changed, 754 insertions(+), 750 deletions(-) rename thaumicbees_src/thaumicbees/bees/{genetics => }/BeeGenomeManager.java (99%) rename thaumicbees_src/thaumicbees/bees/{ => genetics}/FlowerProviderAuraNode.java (94%) rename thaumicbees_src/thaumicbees/bees/{ => genetics}/FlowerProviderAuraNodeFlux.java (96%) rename thaumicbees_src/thaumicbees/bees/{ => genetics}/FlowerProviderAuraNodePurify.java (85%) rename thaumicbees_src/thaumicbees/bees/{ => genetics}/FlowerProviderBookshelf.java (97%) rename thaumicbees_src/thaumicbees/bees/{ => genetics}/FlowerProviderThaumcraftFlower.java (80%) create mode 100644 thaumicbees_src/thaumicbees/block/BlockMagicApiary.java delete mode 100644 thaumicbees_src/thaumicbees/block/BlockManager.java delete mode 100644 thaumicbees_src/thaumicbees/item/ItemManager.java create mode 100644 thaumicbees_src/thaumicbees/main/Config.java delete mode 100644 thaumicbees_src/thaumicbees/main/ThaumicBeesConfiguration.java delete mode 100644 thaumicbees_src/thaumicbees/main/Vector3.java create mode 100644 thaumicbees_src/thaumicbees/main/utils/CraftingManager.java rename thaumicbees_src/thaumicbees/{bees => main/utils}/MoonPhase.java (88%) rename thaumicbees_src/thaumicbees/main/{ => utils}/VersionInfo.java (92%) diff --git a/thaumicbees_res/gfx/thaumicbees/items/items.png b/thaumicbees_res/gfx/thaumicbees/items/items.png index 9d08f669df246e2ee8271e483e29c249fca72cd0..538a993c2a2be47d6f8013d3fc98ef3a1154a08d 100644 GIT binary patch literal 60455 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 5) ? 2 : 3); + world.setBlockAndMetadataWithNotify(x, y, z, Config.tcPlant.blockID, (rand >= 5) ? 2 : 3); System.out.println(x + ", " + y + ", " + ", " + z + " set to flower."); flag = true; } diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderAuraNodeFlux.java similarity index 96% rename from thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java rename to thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderAuraNodeFlux.java index cc4c106..9a3fe7f 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java +++ b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderAuraNodeFlux.java @@ -1,4 +1,4 @@ -package thaumicbees.bees; +package thaumicbees.bees.genetics; import thaumcraft.api.EnumTag; import thaumcraft.api.ObjectTags; diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderAuraNodePurify.java similarity index 85% rename from thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java rename to thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderAuraNodePurify.java index 8977971..ccbe115 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java +++ b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderAuraNodePurify.java @@ -1,4 +1,4 @@ -package thaumicbees.bees; +package thaumicbees.bees.genetics; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; @@ -7,8 +7,7 @@ import thaumcraft.api.AuraNode; import thaumcraft.api.EnumTag; import thaumcraft.api.ObjectTags; import thaumcraft.api.ThaumcraftApi; -import thaumicbees.block.BlockManager; -import thaumicbees.item.ItemManager; +import thaumicbees.main.Config; import forestry.api.apiculture.IBeeGenome; public class FlowerProviderAuraNodePurify extends FlowerProviderAuraNode @@ -41,7 +40,7 @@ public class FlowerProviderAuraNodePurify extends FlowerProviderAuraNode { node.flux.remove(selectedTag, 1); ThaumcraftApi.queueNodeChanges(node.key, 0, 0, false, new ObjectTags().add(selectedTag, -1), 0, 0, 0); - products = addItemToProducts(products, new ItemStack(ItemManager.solidFlux, 1, selectedTag.id)); + products = addItemToProducts(products, new ItemStack(Config.solidFlux, 1, selectedTag.id)); } } } diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderBookshelf.java similarity index 97% rename from thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java rename to thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderBookshelf.java index 3734104..e5875a6 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java +++ b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderBookshelf.java @@ -1,4 +1,4 @@ -package thaumicbees.bees; +package thaumicbees.bees.genetics; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderThaumcraftFlower.java similarity index 80% rename from thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java rename to thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderThaumcraftFlower.java index 54204ef..b42e885 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java +++ b/thaumicbees_src/thaumicbees/bees/genetics/FlowerProviderThaumcraftFlower.java @@ -1,6 +1,6 @@ -package thaumicbees.bees; +package thaumicbees.bees.genetics; -import thaumicbees.block.BlockManager; +import thaumicbees.main.Config; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -10,13 +10,13 @@ import forestry.api.genetics.IPollinatable; public class FlowerProviderThaumcraftFlower implements IFlowerProvider { - private ItemStack[] flowers = {new ItemStack(BlockManager.tcPlant, 1, 2), new ItemStack(BlockManager.tcPlant, 1, 3) }; + private ItemStack[] flowers = {new ItemStack(Config.tcPlant, 1, 2), new ItemStack(Config.tcPlant, 1, 3) }; @Override public boolean isAcceptedFlower(World world, IBeeGenome genome, int x, int y, int z) { boolean flag = false; - if (world.getBlockId(x, y, z) == BlockManager.tcPlant.blockID) + if (world.getBlockId(x, y, z) == Config.tcPlant.blockID) { int meta = world.getBlockMetadata(x, y, z); if (meta == 2 || meta == 3) @@ -35,7 +35,7 @@ public class FlowerProviderThaumcraftFlower implements IFlowerProvider if (world.isAirBlock(x, y, z) && (blockDown == Block.dirt.blockID || blockDown == Block.grass.blockID)) { int rand = world.rand.nextInt(10); - world.setBlockAndMetadataWithNotify(x, y, z, BlockManager.tcPlant.blockID, (rand >= 5) ? 2 : 3); + world.setBlockAndMetadataWithNotify(x, y, z, Config.tcPlant.blockID, (rand >= 5) ? 2 : 3); System.out.println(x + ", " + y + ", " + ", " + z + " set to flower."); flag = true; } diff --git a/thaumicbees_src/thaumicbees/block/BlockMagicApiary.java b/thaumicbees_src/thaumicbees/block/BlockMagicApiary.java new file mode 100644 index 0000000..c9bc239 --- /dev/null +++ b/thaumicbees_src/thaumicbees/block/BlockMagicApiary.java @@ -0,0 +1,33 @@ +package thaumicbees.block; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import thaumicbees.main.CommonProxy; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; + +public class BlockMagicApiary extends Block +{ + public BlockMagicApiary(int par1) + { + super(par1, Material.wood); + this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + this.setBlockName("Magic Apiary"); + this.blockIndexInTexture = 48; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBlockTexture(IBlockAccess par1iBlockAccess, int par2, int par3, int par4, int par5) + { + return super.getBlockTexture(par1iBlockAccess, par2, par3, par4, par5); + } +} diff --git a/thaumicbees_src/thaumicbees/block/BlockManager.java b/thaumicbees_src/thaumicbees/block/BlockManager.java deleted file mode 100644 index 476e846..0000000 --- a/thaumicbees_src/thaumicbees/block/BlockManager.java +++ /dev/null @@ -1,24 +0,0 @@ -package thaumicbees.block; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraftforge.common.Configuration; - -public class BlockManager -{ - public static Block tcPlant; - public static Block tcCandle; - public static Block tcCrystal; - public static Block tcMarker; - public static Block tcJar; - public static Block tcLog; - public static Block tcLeaf; - public static Block tcWarded; - - public BlockManager() { } - - public static void setupBlocks(Configuration config) - { - - } -} diff --git a/thaumicbees_src/thaumicbees/item/ItemManager.java b/thaumicbees_src/thaumicbees/item/ItemManager.java deleted file mode 100644 index f5dac79..0000000 --- a/thaumicbees_src/thaumicbees/item/ItemManager.java +++ /dev/null @@ -1,377 +0,0 @@ -package thaumicbees.item; - -import cpw.mods.fml.common.FMLLog; -import cpw.mods.fml.common.event.FMLInterModComms; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; -import thaumcraft.api.EnumTag; -import thaumicbees.item.types.CapsuleType; -import thaumicbees.item.types.CombType; -import thaumicbees.item.types.DropType; -import thaumicbees.item.types.HiveFrameType; -import thaumicbees.item.types.LiquidType; -import thaumicbees.item.types.PropolisType; -import thaumicbees.item.types.ResourceType; -import thaumicbees.item.types.WaxType; -import thaumicbees.main.ThaumicBees; -import thaumicbees.storage.BackpackDefinition; -import thaumicbees.thaumcraft.TCMiscResource; -import thaumicbees.thaumcraft.TCShardType; -import thaumicbees.thaumcraft.ThaumcraftCompat; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.Configuration; -import net.minecraftforge.common.Property; -import net.minecraftforge.liquids.LiquidContainerData; -import net.minecraftforge.liquids.LiquidContainerRegistry; -import net.minecraftforge.liquids.LiquidDictionary; -import net.minecraftforge.liquids.LiquidStack; -import forestry.api.apiculture.BeeManager; -import forestry.api.core.BlockInterface; -import forestry.api.core.ItemInterface; -import forestry.api.recipes.*; -import forestry.api.storage.BackpackManager; -import forestry.api.storage.EnumBackpackType; - -public class ItemManager -{ - public static ItemComb combs; - public static ItemWax wax; - public static ItemPropolis propolis; - public static ItemDrop drops; - public static ItemPollen pollen; - public static ItemSolidFlux solidFlux; - public static ItemMiscResources miscResources; - - //----- Liquid Capsules -------------------- - public static ItemCapsule magicCapsule; - - //----- Apiary Frames ---------------------- - public static ItemMagicHiveFrame hiveFrameMagic; - public static ItemMagicHiveFrame hiveFrameResilient; - public static ItemMagicHiveFrame hiveFrameGentle; - public static ItemMagicHiveFrame hiveFrameMetabolic; - public static ItemMagicHiveFrame hiveFrameNecrotic; - - //----- Thaumcraft Items ------------------- - public static Item tcFilledJar; - public static Item tcMiscResource; - public static Item tcEssentiaBottle; - public static Item tcShard; - public static Item tcGolem; - public static Item tcWispEssence; - - //----- Backpacks -------------------------- - public static Item thaumaturgeBackpackT1; - public static Item thaumaturgeBackpackT2; - - public static BackpackDefinition thaumaturgeBackpackDef; - - public ItemManager() { } - - public static void setupItems(Configuration configFile) - { - int itemIDBase = 26090; - - Property p = configFile.getItem("combs", itemIDBase++); - ItemManager.combs= new ItemComb(p.getInt()); - ItemManager.wax = new ItemWax(configFile.getItem("wax", itemIDBase++).getInt()); - ItemManager.propolis = new ItemPropolis(configFile.getItem("propolis", itemIDBase++).getInt()); - ItemManager.drops = new ItemDrop(configFile.getItem("drop", itemIDBase++).getInt()); - ItemManager.miscResources = new ItemMiscResources(configFile.getItem("miscResources", itemIDBase++).getInt()); - - try - { - // 0x8700C6 = purpleish. - BackpackDefinition def = new BackpackDefinition("thaumaturge", "Thaumaturge's Backpack", 0x8700C6); - ItemManager.thaumaturgeBackpackT1 = - BackpackManager.backpackInterface.addBackpack(configFile.getItem("thaumaturgePack1", itemIDBase++).getInt(), - def, EnumBackpackType.T1); - ItemManager.thaumaturgeBackpackT2 = - BackpackManager.backpackInterface.addBackpack(configFile.getItem("thaumaturgePack2", itemIDBase++).getInt(), - def, EnumBackpackType.T2); - // Add additional items from configs to backpack. - if (ThaumicBees.getInstanceConfig().ThaumaturgeExtraItems.length() > 0) - { - FMLLog.info("Attempting to add extra items to Thaumaturge's backpack! If you get an error, check your ThaumicBees.conf."); - FMLInterModComms.sendMessage("Forestry", "add-backpack-items", "thaumaturge@" + ThaumicBees.getInstanceConfig().ThaumaturgeExtraItems); - } - } - catch (Exception e) - { - FMLLog.severe("ThaumicBees encountered a problem during loading!"); - throw new RuntimeException("Could not register backpacks via Forestry. Check your FML Client log and see if Forestry crashed silently.", e); - } - - - ItemManager.magicCapsule = new ItemCapsule(CapsuleType.MAGIC, configFile.getItem("magicCapsule", itemIDBase++).getInt()); - - ItemManager.pollen = new ItemPollen(configFile.getItem("pollen", itemIDBase++).getInt()); - ItemManager.solidFlux = new ItemSolidFlux(configFile.getItem("fluxCrystal", itemIDBase++).getInt()); - - ItemManager.hiveFrameMagic = new ItemMagicHiveFrame(configFile.getItem("frameMagic", itemIDBase++).getInt(), HiveFrameType.MAGIC); - ItemManager.hiveFrameResilient = new ItemMagicHiveFrame(configFile.getItem("frameResilient", itemIDBase++).getInt(), HiveFrameType.RESILIENT); - ItemManager.hiveFrameGentle = new ItemMagicHiveFrame(configFile.getItem("frameGentle", itemIDBase++).getInt(), HiveFrameType.GENTLE); - ItemManager.hiveFrameMetabolic = new ItemMagicHiveFrame(configFile.getItem("frameMetabolic", itemIDBase++).getInt(), HiveFrameType.METABOLIC); - ItemManager.hiveFrameNecrotic = new ItemMagicHiveFrame(configFile.getItem("frameNecrotic", itemIDBase++).getInt(), HiveFrameType.NECROTIC); - // Future frames, so they all are clumped together. - itemIDBase++; - itemIDBase++; - itemIDBase++; - itemIDBase++; - itemIDBase++; - itemIDBase++; - itemIDBase++; - itemIDBase++; - itemIDBase++; - - // New items here. - - } - - public static void setupCrafting() - { - ItemStack inputStack; // Variable to hold forestry items - - // Essentia bottles - ItemStack output = new ItemStack(tcEssentiaBottle); - output.stackSize = 8; - GameRegistry.addRecipe(output, new Object[] - { - " C ", "GPG", "PGP", - 'G', ItemManager.wax, - 'C', Item.clay, - 'P', Block.thinGlass - }); - - output = new ItemStack(tcEssentiaBottle); - output.stackSize = 4; - GameRegistry.addRecipe(output, new Object[] { - " W ", "W W", " W ", - 'W', ItemManager.wax - }); - - // Magic capsules - output = new ItemStack(magicCapsule); output.stackSize = 4; - GameRegistry.addRecipe(output, new Object[] { - "WWW", - 'W', ItemManager.wax.getStackForType(WaxType.MAGIC) - }); - - output = new ItemStack(tcMiscResource, 1, TCMiscResource.KNOWLEDGE_FRAGMENT.ordinal()); - GameRegistry.addRecipe(output, new Object[] { - "FF", "FF", - 'F', ItemManager.miscResources.getStackForType(ResourceType.LORE_FRAGMENT) - }); - - // T1 Thaumaturge's backpack - GameRegistry.addRecipe(new ItemStack(ItemManager.thaumaturgeBackpackT1), new Object[] { - "SWS", "NCN", "SWS", - 'S', Item.silk, - 'W', Block.cloth, - 'N', Item.goldNugget, - 'C', Block.chest - }); - - // Concentrated Fertilizer -> Forestry fertilizer - inputStack = ItemManager.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); - output = ItemInterface.getItem("fertilizerCompound"); - output.stackSize = 6; - GameRegistry.addRecipe(output, new Object[] { - " S ", " F ", " S ", - 'F', inputStack, - 'S', Block.sand - }); - GameRegistry.addRecipe(output, new Object[] { - " ", "SFS", " ", - 'F', inputStack, - 'S', Block.sand - }); - - output = output.copy(); - output.stackSize = 12; - GameRegistry.addRecipe(output, new Object[] { - "aaa", "aFa", "aaa", - 'F', inputStack, - 'a', ItemInterface.getItem("ash") - }); - - // "bottling" Intellect drops - GameRegistry.addRecipe(new ItemStack(Item.expBottle), new Object[] { - "DDD", "DBD", "DDD", - 'D', ItemManager.drops.getStackForType(DropType.INTELLECT), - 'B', Item.glassBottle - }); - - // "bottling" Crystal aspects. - for (EnumTag tag : EnumTag.values()) - { - if (tag != EnumTag.UNKNOWN) - { - output = new ItemStack(ItemManager.tcEssentiaBottle, 1, tag.id + 1); - GameRegistry.addRecipe(output, new Object[] { - "ccc", "cxc", "ccc", - 'c', new ItemStack(ItemManager.solidFlux, 1, tag.id), - 'x', ItemManager.tcEssentiaBottle - }); - } - } - - // 20 is the 'average' time to centrifuge a comb. - RecipeManagers.centrifugeManager.addRecipe(20, ItemManager.combs.getStackForType(CombType.OCCULT), - new ItemStack[] {ItemManager.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeyDrop") }, - new int[] { 100, 60 }); - RecipeManagers.centrifugeManager.addRecipe(20, ItemManager.combs.getStackForType(CombType.OTHERWORLDLY), - new ItemStack[] {ItemInterface.getItem("beeswax"), ItemManager.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeyDrop") }, - new int[] { 50, 20, 100 }); - RecipeManagers.centrifugeManager.addRecipe(20, ItemManager.combs.getStackForType(CombType.PAPERY), - new ItemStack[] {ItemInterface.getItem("beeswax"), ItemManager.wax.getStackForType(WaxType.MAGIC), new ItemStack(Item.paper) }, - new int[] { 80, 20, 5 }); - RecipeManagers.centrifugeManager.addRecipe(25, ItemManager.combs.getStackForType(CombType.STARK), - new ItemStack[] {ItemInterface.getItem("beeswax"), ItemManager.wax.getStackForType(WaxType.MAGIC), ItemManager.propolis.getStackForType(PropolisType.STARK) }, - new int[] { 10, 95, 15 }); - RecipeManagers.centrifugeManager.addRecipe(25, ItemManager.combs.getStackForType(CombType.AIRY), - new ItemStack[] {ItemManager.wax.getStackForType(WaxType.MAGIC), ItemManager.propolis.getStackForType(PropolisType.AIR) }, - new int[] { 100, 65 }); - RecipeManagers.centrifugeManager.addRecipe(25, ItemManager.combs.getStackForType(CombType.FIREY), - new ItemStack[] {ItemManager.wax.getStackForType(WaxType.MAGIC), ItemManager.propolis.getStackForType(PropolisType.FIRE) }, - new int[] { 100, 65 }); - RecipeManagers.centrifugeManager.addRecipe(25, ItemManager.combs.getStackForType(CombType.WATERY), - new ItemStack[] {ItemManager.wax.getStackForType(WaxType.MAGIC), ItemManager.propolis.getStackForType(PropolisType.WATER)}, - new int[] { 100, 65 }); - RecipeManagers.centrifugeManager.addRecipe(25, ItemManager.combs.getStackForType(CombType.EARTHY), - new ItemStack[] {ItemManager.wax.getStackForType(WaxType.MAGIC), ItemManager.propolis.getStackForType(PropolisType.EARTH) }, - new int[] { 100, 65 }); - RecipeManagers.centrifugeManager.addRecipe(25, ItemManager.combs.getStackForType(CombType.INFUSED), - new ItemStack[] {ItemManager.wax.getStackForType(WaxType.MAGIC), ItemManager.wax.getStackForType(WaxType.MAGIC), ItemManager.propolis.getStackForType(PropolisType.INFUSED) }, - new int[] { 100, 50, 65 }); - RecipeManagers.centrifugeManager.addRecipe(20, ItemManager.combs.getStackForType(CombType.INTELLECT), - new ItemStack[] { ItemManager.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeydew"), ItemManager.drops.getStackForType(DropType.INTELLECT) }, - new int[] { 90, 40, 2 }); - RecipeManagers.centrifugeManager.addRecipe(20, ItemManager.combs.getStackForType(CombType.SKULKING), - new ItemStack[] {ItemInterface.getItem("beeswax"), ItemInterface.getItem("propolis"), ItemInterface.getItem("honeydew") }, - new int[] { 90, 20, 35 }); - - RecipeManagers.centrifugeManager.addRecipe(8, ItemManager.propolis.getStackForType(PropolisType.STARK), - new ItemStack[] {new ItemStack(tcShard, 1, TCShardType.DULL.ordinal())}, - new int[] { 13 }); - RecipeManagers.centrifugeManager.addRecipe(8, ItemManager.propolis.getStackForType(PropolisType.AIR), - new ItemStack[] {new ItemStack(tcShard, 1, TCShardType.AIR.ordinal())}, - new int[] { 10 }); - RecipeManagers.centrifugeManager.addRecipe(8, ItemManager.propolis.getStackForType(PropolisType.FIRE), - new ItemStack[] {new ItemStack(tcShard, 1, TCShardType.FIRE.ordinal())}, - new int[] { 10 }); - RecipeManagers.centrifugeManager.addRecipe(8, ItemManager.propolis.getStackForType(PropolisType.WATER), - new ItemStack[] {new ItemStack(tcShard, 1, TCShardType.WATER.ordinal())}, - new int[] { 10 }); - RecipeManagers.centrifugeManager.addRecipe(8, ItemManager.propolis.getStackForType(PropolisType.EARTH), - new ItemStack[] {new ItemStack(tcShard, 1, TCShardType.EARTH.ordinal())}, - new int[] { 10 }); - RecipeManagers.centrifugeManager.addRecipe(8, ItemManager.propolis.getStackForType(PropolisType.INFUSED), - new ItemStack[] {new ItemStack(tcShard, 1, TCShardType.MAGIC.ordinal())}, - new int[] { 10 }); - - // Squeezer recipes - RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] {ItemManager.propolis.getStackForType(PropolisType.FIRE) }, - new LiquidStack(Block.lavaStill, 250), - new ItemStack(tcShard, 1, TCShardType.FIRE.ordinal()), 18); - RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] {ItemManager.propolis.getStackForType(PropolisType.WATER) }, - new LiquidStack(Block.waterStill, 500), - new ItemStack(tcShard, 1, TCShardType.WATER.ordinal()), 18); - - // Carpenter recipes - inputStack = ItemInterface.getItem("craftingMaterial"); - inputStack.setItemDamage(3); // Set to Silk Mesh - output = new ItemStack(thaumaturgeBackpackT2); - RecipeManagers.carpenterManager.addRecipe(200, new LiquidStack(Block.waterStill.blockID, 1000), null, output, new Object[] { - "WXW", "WTW", "WWW", - 'X', Item.diamond, - 'W', inputStack, - 'T', new ItemStack(ItemManager.thaumaturgeBackpackT1) - }); - - output = BlockInterface.getBlock("candle"); - output.stackSize = 24; - RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(Block.waterStill, 600), null, output, new Object[] { - " S ", "WWW", "WWW", - 'W', ItemManager.wax, - 'S', Item.silk - }); - - output = BlockInterface.getBlock("candle"); - output.stackSize = 6; - inputStack = ItemInterface.getItem("craftingMaterial"); - inputStack.setItemDamage(2); // Set to Silk Wisp - RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(Block.waterStill, 600), null, output, new Object[] { - "WSW", - 'W', ItemManager.wax, - 'S', inputStack - }); - - output = ItemManager.miscResources.getStackForType(ResourceType.AROMATIC_LUMP, 2); - RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(ItemInterface.getItem("liquidHoney").itemID, 1000), null, output, new Object[] { - " P ", "JDJ", " P ", - 'P', ItemInterface.getItem("pollen"), - 'J', ItemInterface.getItem("royalJelly"), - 'D', ItemManager.drops.getStackForType(DropType.ENCHANTED) - }); - - RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(ItemInterface.getItem("liquidHoney").itemID, 1000), null, output, new Object[] { - " J ", "PDP", " J ", - 'P', ItemInterface.getItem("pollen"), - 'J', ItemInterface.getItem("royalJelly"), - 'D', ItemManager.drops.getStackForType(DropType.ENCHANTED) - }); - // Make Aromatic Lumps a swarmer inducer. Chance is /1000. - BeeManager.inducers.put(output, 80); - - } - - public static void postInit() - { - registerLiquidContainer(ItemManager.magicCapsule); - } - - private static void registerLiquidContainer(ItemCapsule baseCapsule) - { - // Forestry liquids aren't registered until PostInit, that's why we wait until now to register them. - ItemStack empty = new ItemStack(baseCapsule, 1, 0); - ItemStack filled; - LiquidStack liquid = null; - - for (LiquidType l : LiquidType.values()) - { - switch (l) - { - case EMPTY: - liquid = null; - break; - case WATER: - liquid = new LiquidStack(Block.waterStill, baseCapsule.getType().capacity); - break; - case LAVA: - liquid = new LiquidStack(Block.lavaStill, baseCapsule.getType().capacity); - break; - default: - liquid = LiquidDictionary.getLiquid(l.liquidID, baseCapsule.getType().capacity); - break; - } - - if (liquid != null) - { - filled = new ItemStack(baseCapsule, 1, l.ordinal()); - LiquidContainerRegistry.registerLiquid(new LiquidContainerData(liquid, filled, empty)); - - // Register with Squeezer/Bottler - RecipeManagers.bottlerManager.addRecipe(5, liquid, empty, filled); - RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[] {filled} , liquid, - ItemManager.wax.getStackForType(WaxType.MAGIC), 20); - l.available = true; - } - } - // Empty will be set to unavailable. Obviously, it always is. - LiquidType.EMPTY.available = true; - } - -} diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java new file mode 100644 index 0000000..c1157dc --- /dev/null +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -0,0 +1,189 @@ +package thaumicbees.main; + +import java.io.File; + +import thaumicbees.block.BlockMagicApiary; +import thaumicbees.item.ItemCapsule; +import thaumicbees.item.ItemComb; +import thaumicbees.item.ItemDrop; +import thaumicbees.item.ItemMagicHiveFrame; +import thaumicbees.item.ItemMiscResources; +import thaumicbees.item.ItemPollen; +import thaumicbees.item.ItemPropolis; +import thaumicbees.item.ItemSolidFlux; +import thaumicbees.item.ItemWax; +import thaumicbees.item.types.CapsuleType; +import thaumicbees.item.types.HiveFrameType; +import thaumicbees.storage.BackpackDefinition; +import thaumicbees.thaumcraft.ThaumcraftCompat; +import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.common.event.FMLInterModComms; +import cpw.mods.fml.common.registry.GameRegistry; +import forestry.api.storage.BackpackManager; +import forestry.api.storage.EnumBackpackType; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraftforge.common.Configuration; +import net.minecraftforge.common.Property; + +/** + * A class to hold some data related to mod state & functions. + * @author MysteriousAges + * + */ +public class Config +{ + public boolean DrawParticleEffects; + public boolean BeeInfusionsAdded; + public boolean ExtraBeesInstalled; + public boolean AddThaumcraftItemsToBackpacks; + public String ThaumaturgeExtraItems; + + + public static BlockMagicApiary magicApiary; + + public static ItemComb combs; + public static ItemWax wax; + public static ItemPropolis propolis; + public static ItemDrop drops; + public static ItemPollen pollen; + public static ItemSolidFlux solidFlux; + public static ItemMiscResources miscResources; + + //----- Liquid Capsules -------------------- + public static ItemCapsule magicCapsule; + + //----- Apiary Frames ---------------------- + public static ItemMagicHiveFrame hiveFrameMagic; + public static ItemMagicHiveFrame hiveFrameResilient; + public static ItemMagicHiveFrame hiveFrameGentle; + public static ItemMagicHiveFrame hiveFrameMetabolic; + public static ItemMagicHiveFrame hiveFrameNecrotic; + + //----- Backpacks ------------------------------------------ + public static Item thaumaturgeBackpackT1; + public static Item thaumaturgeBackpackT2; + public static BackpackDefinition thaumaturgeBackpackDef; + + //----- Thaumcraft Blocks ---------------------------------- + public static Block tcPlant; + public static Block tcCandle; + public static Block tcCrystal; + public static Block tcMarker; + public static Block tcJar; + public static Block tcLog; + public static Block tcLeaf; + public static Block tcWarded; + //----- Thaumcraft Items ----------------------------------- + public static Item tcFilledJar; + public static Item tcMiscResource; + public static Item tcEssentiaBottle; + public static Item tcShard; + public static Item tcGolem; + public static Item tcWispEssence; + + + //----- Config State info ---------------------------------- + private Configuration tbConfig; + + public Config(File configFile) + { + this.tbConfig = new Configuration(configFile); + + this.tbConfig.load(); + this.doMiscConfig(); + } + + public void saveConfigs() + { + this.tbConfig.save(); + } + + public void setupBlocks() + { + ThaumcraftCompat.getThaumcraftBlocks(); + + int blockIdBase = 1750; + + magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase).getInt()); + GameRegistry.registerBlock(magicApiary, "Magic Apiary"); + } + + public void setupItems() + { + ThaumcraftCompat.getThaumcraftItems(); + + int itemIDBase = 26090; + + Property p = tbConfig.getItem("combs", itemIDBase++); + combs= new ItemComb(p.getInt()); + wax = new ItemWax(tbConfig.getItem("wax", itemIDBase++).getInt()); + propolis = new ItemPropolis(tbConfig.getItem("propolis", itemIDBase++).getInt()); + drops = new ItemDrop(tbConfig.getItem("drop", itemIDBase++).getInt()); + miscResources = new ItemMiscResources(tbConfig.getItem("miscResources", itemIDBase++).getInt()); + + try + { + // 0x8700C6 = purpleish. + BackpackDefinition def = new BackpackDefinition("thaumaturge", "Thaumaturge's Backpack", 0x8700C6); + thaumaturgeBackpackT1 = + BackpackManager.backpackInterface.addBackpack(tbConfig.getItem("thaumaturgePack1", itemIDBase++).getInt(), + def, EnumBackpackType.T1); + thaumaturgeBackpackT2 = + BackpackManager.backpackInterface.addBackpack(tbConfig.getItem("thaumaturgePack2", itemIDBase++).getInt(), + def, EnumBackpackType.T2); + // Add additional items from configs to backpack. + if (ThaumicBees.getInstanceConfig().ThaumaturgeExtraItems.length() > 0) + { + FMLLog.info("Attempting to add extra items to Thaumaturge's backpack! If you get an error, check your ThaumicBees.conf."); + FMLInterModComms.sendMessage("Forestry", "add-backpack-items", "thaumaturge@" + ThaumicBees.getInstanceConfig().ThaumaturgeExtraItems); + } + } + catch (Exception e) + { + FMLLog.severe("ThaumicBees encountered a problem during loading!"); + throw new RuntimeException("Could not register backpacks via Forestry. Check your FML Client log and see if Forestry crashed silently.", e); + } + + + magicCapsule = new ItemCapsule(CapsuleType.MAGIC, tbConfig.getItem("magicCapsule", itemIDBase++).getInt()); + + pollen = new ItemPollen(tbConfig.getItem("pollen", itemIDBase++).getInt()); + solidFlux = new ItemSolidFlux(tbConfig.getItem("fluxCrystal", itemIDBase++).getInt()); + + hiveFrameMagic = new ItemMagicHiveFrame(tbConfig.getItem("frameMagic", itemIDBase++).getInt(), HiveFrameType.MAGIC); + hiveFrameResilient = new ItemMagicHiveFrame(tbConfig.getItem("frameResilient", itemIDBase++).getInt(), HiveFrameType.RESILIENT); + hiveFrameGentle = new ItemMagicHiveFrame(tbConfig.getItem("frameGentle", itemIDBase++).getInt(), HiveFrameType.GENTLE); + hiveFrameMetabolic = new ItemMagicHiveFrame(tbConfig.getItem("frameMetabolic", itemIDBase++).getInt(), HiveFrameType.METABOLIC); + hiveFrameNecrotic = new ItemMagicHiveFrame(tbConfig.getItem("frameNecrotic", itemIDBase++).getInt(), HiveFrameType.NECROTIC); + // Future frames, so they all are clumped together. + itemIDBase++; + itemIDBase++; + itemIDBase++; + itemIDBase++; + itemIDBase++; + itemIDBase++; + itemIDBase++; + itemIDBase++; + itemIDBase++; + + // New items here. + + } + + private void doMiscConfig() + { + Property p; + + p = tbConfig.get("general", "backpack.thaumaturge.additionalItems", ""); + p.comment = "Add additional items to the Thaumaturge's Backpack." + + "\n Format is the same as Forestry's: id:meta;id;id:meta (etc)"; + this.ThaumaturgeExtraItems = p.value; + + p = tbConfig.get("general", "backpack.forestry.addThaumcraftItems", true); + p.comment = "Set to true if you want ThaumicBees to add several Thaumcraft blocks & items to Forestry backpacks." + + "\n Set to false to disable."; + this.AddThaumcraftItemsToBackpacks = p.getBoolean(true); + } + +} diff --git a/thaumicbees_src/thaumicbees/main/ThaumicBees.java b/thaumicbees_src/thaumicbees/main/ThaumicBees.java index 9610fbe..e13eba1 100644 --- a/thaumicbees_src/thaumicbees/main/ThaumicBees.java +++ b/thaumicbees_src/thaumicbees/main/ThaumicBees.java @@ -1,34 +1,20 @@ package thaumicbees.main; +import net.minecraftforge.common.Configuration; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.ForgeSubscribe; +import thaumicbees.bees.TBBeeManager; +import thaumicbees.main.utils.CraftingManager; +import thaumicbees.main.utils.VersionInfo; +import thaumicbees.thaumcraft.ThaumcraftCompat; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; -import cpw.mods.fml.common.event.*; -import cpw.mods.fml.common.registry.LanguageRegistry; -import forestry.api.apiculture.EnumBeeType; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; import forestry.api.core.ItemInterface; -import java.io.InputStream; -import java.io.PrintStream; -import java.lang.reflect.Field; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.Configuration; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.Property; -import net.minecraftforge.event.EventBus; -import net.minecraftforge.event.ForgeSubscribe; -import net.minecraftforge.event.world.WorldEvent; -import thaumcraft.api.*; -import thaumicbees.bees.TBBeeManager; -import thaumicbees.bees.genetics.BeeSpecies; -import thaumicbees.block.BlockManager; -import thaumicbees.item.ItemComb; -import thaumicbees.item.ItemWax; -import thaumicbees.item.ItemManager; -import thaumicbees.thaumcraft.ThaumcraftCompat; - @Mod( modid="ThaumicBees", useMetadata=true, @@ -46,15 +32,11 @@ public class ThaumicBees public static CommonProxy proxy; private String configsPath; - private Configuration config; - private ThaumicBeesConfiguration modConfig; + private Config modConfig; private TBBeeManager plugin; public ThaumicBees() { - this.modConfig = new ThaumicBeesConfiguration(); - - this.modConfig.ThaumcraftRecipesAdded = false; this.plugin = new TBBeeManager(); } @@ -62,11 +44,7 @@ public class ThaumicBees public void preInit(FMLPreInitializationEvent event) { this.configsPath = event.getModConfigurationDirectory().getAbsolutePath(); - this.config = new Configuration(event.getSuggestedConfigurationFile()); - - this.config.load(); - // Allow us to set up some extra stuff. - this.modConfig.doMiscConfig(this.config); + this.modConfig = new Config(event.getSuggestedConfigurationFile()); ThaumcraftCompat.registerResearch(); } @@ -77,8 +55,6 @@ public class ThaumicBees // Check on ExtraBees & enable content. =D this.modConfig.ExtraBeesInstalled = cpw.mods.fml.common.Loader.isModLoaded("ExtraBees"); - // Give ThaumcraftCompat a chance to set itself up. - ThaumcraftCompat.parseThaumcraftConfig(configsPath); this.proxy.preloadTextures(); try { @@ -92,17 +68,10 @@ public class ThaumicBees throw new RuntimeException("Could not get the Forestry item texture file! Did Forestry load correctly?", e); } - BlockManager.setupBlocks(this.config); - ItemManager.setupItems(this.config); - this.config.save(); + this.modConfig.setupBlocks(); + this.modConfig.setupItems(); - - // Vanilla & Forestry mechanics setup - ItemManager.setupCrafting(); - // Thaumcraft-specific crafting (Infusions, & Vis-needing) - ThaumcraftCompat.setupCrafting(); - ThaumcraftCompat.setupBackpacks(); ThaumcraftCompat.setupItemAspects(); @@ -112,28 +81,30 @@ public class ThaumicBees @Mod.PostInit public void postInit(FMLPostInitializationEvent event) { - // Item Manager has a couple tasks left to it at this point... - ItemManager.postInit(); + plugin.postInit(); + this.modConfig.saveConfigs(); + + // Vanilla, Forestry & Thaumcraft crafting setup + CraftingManager.setupCrafting(); // Forestry has init'd by this point. MinecraftForge.EVENT_BUS.register(this); - plugin.postInit(); ThaumcraftCompat.setupResearch(); } - @ForgeSubscribe + /*@ForgeSubscribe public void worldLoad(net.minecraftforge.event.world.WorldEvent.Load event) { - if (!this.modConfig.ThaumcraftRecipesAdded) + if (!this.modConfig.BeeInfusionsAdded) { - ThaumcraftCompat.setupBeeInfusions(event.world); - this.modConfig.ThaumcraftRecipesAdded = true; + CraftingManager.setupBeeInfusions(event.world); + this.modConfig.BeeInfusionsAdded = true; } - } + }*/ - public static ThaumicBeesConfiguration getInstanceConfig() + public static Config getInstanceConfig() { return object.modConfig; } diff --git a/thaumicbees_src/thaumicbees/main/ThaumicBeesConfiguration.java b/thaumicbees_src/thaumicbees/main/ThaumicBeesConfiguration.java deleted file mode 100644 index 0ac20fa..0000000 --- a/thaumicbees_src/thaumicbees/main/ThaumicBeesConfiguration.java +++ /dev/null @@ -1,35 +0,0 @@ -package thaumicbees.main; - -import net.minecraftforge.common.Configuration; -import net.minecraftforge.common.Property; - -/** - * A class to hold some data related to mod state & functions. - * @author MysteriousAges - * - */ -public class ThaumicBeesConfiguration -{ - public boolean DrawParticleEffects; - public boolean ThaumcraftRecipesAdded; - public boolean ExtraBeesInstalled; - public boolean AddThaumcraftItemsToBackpacks; - - public String ThaumaturgeExtraItems; - - public void doMiscConfig(Configuration cfg) - { - Property p; - - p = cfg.get("general", "backpack.thaumaturge.additionalItems", ""); - p.comment = "Add additional items to the Thaumaturge's Backpack." + - "\n Format is the same as Forestry's: id:meta;id;id:meta (etc)"; - this.ThaumaturgeExtraItems = p.value; - - p = cfg.get("general", "backpack.forestry.addThaumcraftItems", true); - p.comment = "Set to true if you want ThaumicBees to add several Thaumcraft blocks & items to Forestry backpacks." + - "\n Set to false to disable."; - this.AddThaumcraftItemsToBackpacks = p.getBoolean(true); - } - -} diff --git a/thaumicbees_src/thaumicbees/main/Vector3.java b/thaumicbees_src/thaumicbees/main/Vector3.java deleted file mode 100644 index 1a35ca1..0000000 --- a/thaumicbees_src/thaumicbees/main/Vector3.java +++ /dev/null @@ -1,14 +0,0 @@ -package thaumicbees.main; - -public class Vector3 -{ - public int x; - public int y; - public int z; - - public Vector3() - { - x = y = z = 0; - } - -} diff --git a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java new file mode 100644 index 0000000..d9b2b26 --- /dev/null +++ b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java @@ -0,0 +1,382 @@ +package thaumicbees.main.utils; + +import thaumcraft.api.EnumTag; +import thaumcraft.api.ObjectTags; +import thaumcraft.api.ThaumcraftApi; +import thaumicbees.bees.BeeGenomeManager; +import thaumicbees.bees.genetics.Allele; +import thaumicbees.item.ItemCapsule; +import thaumicbees.item.types.CombType; +import thaumicbees.item.types.DropType; +import thaumicbees.item.types.LiquidType; +import thaumicbees.item.types.PropolisType; +import thaumicbees.item.types.ResourceType; +import thaumicbees.item.types.WaxType; +import thaumicbees.main.Config; +import thaumicbees.thaumcraft.ShapelessBeeInfusionCraftingRecipe; +import thaumicbees.thaumcraft.TCMiscResource; +import thaumicbees.thaumcraft.TCShardType; +import cpw.mods.fml.common.registry.GameRegistry; +import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.apiculture.EnumBeeType; +import forestry.api.core.BlockInterface; +import forestry.api.core.ItemInterface; +import forestry.api.recipes.RecipeManagers; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.liquids.LiquidContainerData; +import net.minecraftforge.liquids.LiquidContainerRegistry; +import net.minecraftforge.liquids.LiquidDictionary; +import net.minecraftforge.liquids.LiquidStack; + +public class CraftingManager +{ + public static void setupCrafting() + { + ItemStack inputStack; // Variable to hold forestry items + + // Essentia bottles + ItemStack output = new ItemStack(Config.tcEssentiaBottle); + output.stackSize = 8; + GameRegistry.addRecipe(output, new Object[] + { + " C ", "GPG", "PGP", + 'G', Config.wax, + 'C', Item.clay, + 'P', Block.thinGlass + }); + + output = new ItemStack(Config.tcEssentiaBottle); + output.stackSize = 4; + GameRegistry.addRecipe(output, new Object[] { + " W ", "W W", " W ", + 'W', Config.wax + }); + + // Magic capsules + output = new ItemStack(Config.magicCapsule); output.stackSize = 4; + GameRegistry.addRecipe(output, new Object[] { + "WWW", + 'W', Config.wax.getStackForType(WaxType.MAGIC) + }); + + output = new ItemStack(Config.tcMiscResource, 1, TCMiscResource.KNOWLEDGE_FRAGMENT.ordinal()); + GameRegistry.addRecipe(output, new Object[] { + "FF", "FF", + 'F', Config.miscResources.getStackForType(ResourceType.LORE_FRAGMENT) + }); + + // T1 Thaumaturge's backpack + GameRegistry.addRecipe(new ItemStack(Config.thaumaturgeBackpackT1), new Object[] { + "SWS", "NCN", "SWS", + 'S', Item.silk, + 'W', Block.cloth, + 'N', Item.goldNugget, + 'C', Block.chest + }); + + // Concentrated Fertilizer -> Forestry fertilizer + inputStack = Config.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); + output = ItemInterface.getItem("fertilizerCompound"); + output.stackSize = 6; + GameRegistry.addRecipe(output, new Object[] { + " S ", " F ", " S ", + 'F', inputStack, + 'S', Block.sand + }); + GameRegistry.addRecipe(output, new Object[] { + " ", "SFS", " ", + 'F', inputStack, + 'S', Block.sand + }); + + output = output.copy(); + output.stackSize = 12; + GameRegistry.addRecipe(output, new Object[] { + "aaa", "aFa", "aaa", + 'F', inputStack, + 'a', ItemInterface.getItem("ash") + }); + + // "bottling" Intellect drops + GameRegistry.addRecipe(new ItemStack(Item.expBottle), new Object[] { + "DDD", "DBD", "DDD", + 'D', Config.drops.getStackForType(DropType.INTELLECT), + 'B', Item.glassBottle + }); + + // "bottling" Crystal aspects. + for (EnumTag tag : EnumTag.values()) + { + if (tag != EnumTag.UNKNOWN) + { + output = new ItemStack(Config.tcEssentiaBottle, 1, tag.id + 1); + GameRegistry.addRecipe(output, new Object[] { + "ccc", "cxc", "ccc", + 'c', new ItemStack(Config.solidFlux, 1, tag.id), + 'x', Config.tcEssentiaBottle + }); + } + } + + // 20 is the 'average' time to centrifuge a comb. + RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.OCCULT), + new ItemStack[] {Config.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeyDrop") }, + new int[] { 100, 60 }); + RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.OTHERWORLDLY), + new ItemStack[] {ItemInterface.getItem("beeswax"), Config.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeyDrop") }, + new int[] { 50, 20, 100 }); + RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.PAPERY), + new ItemStack[] {ItemInterface.getItem("beeswax"), Config.wax.getStackForType(WaxType.MAGIC), new ItemStack(Item.paper) }, + new int[] { 80, 20, 5 }); + RecipeManagers.centrifugeManager.addRecipe(25, Config.combs.getStackForType(CombType.STARK), + new ItemStack[] {ItemInterface.getItem("beeswax"), Config.wax.getStackForType(WaxType.MAGIC), Config.propolis.getStackForType(PropolisType.STARK) }, + new int[] { 10, 95, 15 }); + RecipeManagers.centrifugeManager.addRecipe(25, Config.combs.getStackForType(CombType.AIRY), + new ItemStack[] {Config.wax.getStackForType(WaxType.MAGIC), Config.propolis.getStackForType(PropolisType.AIR) }, + new int[] { 100, 65 }); + RecipeManagers.centrifugeManager.addRecipe(25, Config.combs.getStackForType(CombType.FIREY), + new ItemStack[] {Config.wax.getStackForType(WaxType.MAGIC), Config.propolis.getStackForType(PropolisType.FIRE) }, + new int[] { 100, 65 }); + RecipeManagers.centrifugeManager.addRecipe(25, Config.combs.getStackForType(CombType.WATERY), + new ItemStack[] {Config.wax.getStackForType(WaxType.MAGIC), Config.propolis.getStackForType(PropolisType.WATER)}, + new int[] { 100, 65 }); + RecipeManagers.centrifugeManager.addRecipe(25, Config.combs.getStackForType(CombType.EARTHY), + new ItemStack[] {Config.wax.getStackForType(WaxType.MAGIC), Config.propolis.getStackForType(PropolisType.EARTH) }, + new int[] { 100, 65 }); + RecipeManagers.centrifugeManager.addRecipe(25, Config.combs.getStackForType(CombType.INFUSED), + new ItemStack[] {Config.wax.getStackForType(WaxType.MAGIC), Config.wax.getStackForType(WaxType.MAGIC), Config.propolis.getStackForType(PropolisType.INFUSED) }, + new int[] { 100, 50, 65 }); + RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.INTELLECT), + new ItemStack[] { Config.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeydew"), Config.drops.getStackForType(DropType.INTELLECT) }, + new int[] { 90, 40, 2 }); + RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.SKULKING), + new ItemStack[] {ItemInterface.getItem("beeswax"), ItemInterface.getItem("propolis"), ItemInterface.getItem("honeydew") }, + new int[] { 90, 20, 35 }); + + RecipeManagers.centrifugeManager.addRecipe(8, Config.propolis.getStackForType(PropolisType.STARK), + new ItemStack[] {new ItemStack(Config.tcShard, 1, TCShardType.DULL.ordinal())}, + new int[] { 13 }); + RecipeManagers.centrifugeManager.addRecipe(8, Config.propolis.getStackForType(PropolisType.AIR), + new ItemStack[] {new ItemStack(Config.tcShard, 1, TCShardType.AIR.ordinal())}, + new int[] { 10 }); + RecipeManagers.centrifugeManager.addRecipe(8, Config.propolis.getStackForType(PropolisType.FIRE), + new ItemStack[] {new ItemStack(Config.tcShard, 1, TCShardType.FIRE.ordinal())}, + new int[] { 10 }); + RecipeManagers.centrifugeManager.addRecipe(8, Config.propolis.getStackForType(PropolisType.WATER), + new ItemStack[] {new ItemStack(Config.tcShard, 1, TCShardType.WATER.ordinal())}, + new int[] { 10 }); + RecipeManagers.centrifugeManager.addRecipe(8, Config.propolis.getStackForType(PropolisType.EARTH), + new ItemStack[] {new ItemStack(Config.tcShard, 1, TCShardType.EARTH.ordinal())}, + new int[] { 10 }); + RecipeManagers.centrifugeManager.addRecipe(8, Config.propolis.getStackForType(PropolisType.INFUSED), + new ItemStack[] {new ItemStack(Config.tcShard, 1, TCShardType.MAGIC.ordinal())}, + new int[] { 10 }); + + // Squeezer recipes + RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] {Config.propolis.getStackForType(PropolisType.FIRE) }, + new LiquidStack(Block.lavaStill, 250), + new ItemStack(Config.tcShard, 1, TCShardType.FIRE.ordinal()), 18); + RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] {Config.propolis.getStackForType(PropolisType.WATER) }, + new LiquidStack(Block.waterStill, 500), + new ItemStack(Config.tcShard, 1, TCShardType.WATER.ordinal()), 18); + + // Carpenter recipes + inputStack = ItemInterface.getItem("craftingMaterial"); + inputStack.setItemDamage(3); // Set to Silk Mesh + output = new ItemStack(Config.thaumaturgeBackpackT2); + RecipeManagers.carpenterManager.addRecipe(200, new LiquidStack(Block.waterStill.blockID, 1000), null, output, new Object[] { + "WXW", "WTW", "WWW", + 'X', Item.diamond, + 'W', inputStack, + 'T', new ItemStack(Config.thaumaturgeBackpackT1) + }); + + output = BlockInterface.getBlock("candle"); + output.stackSize = 24; + RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(Block.waterStill, 600), null, output, new Object[] { + " S ", "WWW", "WWW", + 'W', Config.wax, + 'S', Item.silk + }); + + output = BlockInterface.getBlock("candle"); + output.stackSize = 6; + inputStack = ItemInterface.getItem("craftingMaterial"); + inputStack.setItemDamage(2); // Set to Silk Wisp + RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(Block.waterStill, 600), null, output, new Object[] { + "WSW", + 'W', Config.wax, + 'S', inputStack + }); + + output = Config.miscResources.getStackForType(ResourceType.AROMATIC_LUMP, 2); + RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(ItemInterface.getItem("liquidHoney").itemID, 1000), null, output, new Object[] { + " P ", "JDJ", " P ", + 'P', ItemInterface.getItem("pollen"), + 'J', ItemInterface.getItem("royalJelly"), + 'D', Config.drops.getStackForType(DropType.ENCHANTED) + }); + + RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(ItemInterface.getItem("liquidHoney").itemID, 1000), null, output, new Object[] { + " J ", "PDP", " J ", + 'P', ItemInterface.getItem("pollen"), + 'J', ItemInterface.getItem("royalJelly"), + 'D', Config.drops.getStackForType(DropType.ENCHANTED) + }); + // Make Aromatic Lumps a swarmer inducer. Chance is /1000. + BeeManager.inducers.put(output, 80); + + + output = Config.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); + ItemStack inputA = ItemInterface.getItem("apatite"); + ObjectTags tags = (new ObjectTags()).add(EnumTag.CROP, 12); + output.stackSize = 2; + ThaumcraftApi.addShapelessInfusionCraftingRecipe("FERTILIZER", "FERTILIZER", 5, tags, output, new Object[] { + inputA + }); + + output = new ItemStack(Config.hiveFrameMagic); + inputA = ItemInterface.getItem("frameUntreated"); + tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8); + ThaumcraftApi.addShapelessInfusionCraftingRecipe("HIVEFRAME", "FRAMEMAGIC", 50, tags, output, new Object[] { + inputA + }); + + output = new ItemStack(Config.hiveFrameResilient); + tags = new ObjectTags().add(EnumTag.WOOD, 12).add(EnumTag.INSECT, 8).add(EnumTag.EXCHANGE, 12); + ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAME2", "FRAMERESILIENT", 50, tags, output, new Object[] { + " i ", "ifi", " i ", + 'f', Config.hiveFrameMagic, + 'i', Item.ingotIron + }); + + output = new ItemStack(Config.hiveFrameGentle); + tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.HEAL, 12); + ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAMEGENTLE", "FRAMEGENTLE", 50, tags, output, new Object[] { + "www", "wFw", "www", + 'F', inputA, + 'w', ItemInterface.getItem("beeswax") + + }); + + output = new ItemStack(Config.hiveFrameMetabolic); + tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.LIFE, 8).add(EnumTag.MOTION, 8) + .add(EnumTag.EXCHANGE, 8); + ThaumcraftApi.addShapelessInfusionCraftingRecipe("HIVEFRAMEMETA", "FRAMEMETABOLIC", 50, tags, output, new Object[] { + Item.magmaCream, + inputA + }); + + output = new ItemStack(Config.hiveFrameNecrotic); + tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.EXCHANGE, 12).add(EnumTag.DEATH, 16) + .add(EnumTag.POISON, 4); + ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAMENECRO", "FRAMENECROTIC", 50, tags, output, new Object[] { + " S ", "SxS", " S ", + 'S', Item.rottenFlesh, + 'x', inputA + }); + + ItemStack drone = BeeGenomeManager.getBeeNBTForSpecies(Allele.Stark, EnumBeeType.DRONE); + ItemStack princess = BeeGenomeManager.getBeeNBTForSpecies(Allele.Stark, EnumBeeType.PRINCESS); + ItemStack airDrone = Allele.Air.getBeeItem(EnumBeeType.DRONE); + ItemStack airPrincess = Allele.Air.getBeeItem(EnumBeeType.PRINCESS); + ItemStack waterDrone = Allele.Water.getBeeItem(EnumBeeType.DRONE); + ItemStack waterPrincess = Allele.Water.getBeeItem(EnumBeeType.PRINCESS); + ItemStack earthDrone = Allele.Earth.getBeeItem(EnumBeeType.DRONE); + ItemStack earthPrincess = Allele.Earth.getBeeItem(EnumBeeType.PRINCESS); + ItemStack fireDrone = Allele.Fire.getBeeItem(EnumBeeType.DRONE); + ItemStack firePrincess = Allele.Fire.getBeeItem(EnumBeeType.PRINCESS); + ItemStack magicDrone = Allele.Infused.getBeeItem(EnumBeeType.DRONE); + ItemStack magicPrincess = Allele.Infused.getBeeItem(EnumBeeType.PRINCESS); + + String researchKey = "BEEINFUSION"; + + tags = (new ObjectTags()).add(EnumTag.WIND, 40).add(EnumTag.MOTION, 24); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION1", airDrone, + new ItemStack[] { drone, new ItemStack(Config.tcShard, 1, TCShardType.AIR.ordinal())}, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION2", airPrincess, + new ItemStack[] { princess , new ItemStack(Config.tcShard, 1, TCShardType.AIR.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + + tags = (new ObjectTags()).add(EnumTag.FIRE, 40).add( EnumTag.POWER, 24); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION3", fireDrone, new Object[] + { drone, new ItemStack(Config.tcShard, 1, TCShardType.FIRE.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION4", firePrincess, new Object[] + { princess, new ItemStack(Config.tcShard, 1, TCShardType.FIRE.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + + tags = (new ObjectTags()).add(EnumTag.WATER, 40).add( EnumTag.COLD, 24); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION5", waterDrone, new Object[] + { drone, new ItemStack(Config.tcShard, 1, TCShardType.WATER.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION6", waterPrincess, new Object[] + { princess, new ItemStack(Config.tcShard, 1, TCShardType.WATER.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + + tags = (new ObjectTags()).add(EnumTag.EARTH, 40).add( EnumTag.ROCK, 24); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION7", earthDrone, new Object[] + { drone, new ItemStack(Config.tcShard, 1, TCShardType.EARTH.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION8", earthPrincess, new Object[] + { princess, new ItemStack(Config.tcShard, 1, TCShardType.EARTH.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + + tags = new ObjectTags().add(EnumTag.MAGIC, 40).add(EnumTag.FLUX, 24); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION9", magicDrone, new Object[] + { drone, new ItemStack(Config.tcShard, 1, TCShardType.MAGIC.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION0", magicPrincess, new Object[] + { princess, new ItemStack(Config.tcShard, 1, TCShardType.MAGIC.ordinal()) }, + 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); + + + + registerLiquidContainer(Config.magicCapsule); + } + + private static void registerLiquidContainer(ItemCapsule baseCapsule) + { + ItemStack empty = new ItemStack(baseCapsule, 1, 0); + ItemStack filled; + LiquidStack liquid = null; + + for (LiquidType l : LiquidType.values()) + { + switch (l) + { + case EMPTY: + liquid = null; + break; + case WATER: + liquid = new LiquidStack(Block.waterStill, baseCapsule.getType().capacity); + break; + case LAVA: + liquid = new LiquidStack(Block.lavaStill, baseCapsule.getType().capacity); + break; + default: + liquid = LiquidDictionary.getLiquid(l.liquidID, baseCapsule.getType().capacity); + break; + } + + if (liquid != null) + { + filled = new ItemStack(baseCapsule, 1, l.ordinal()); + LiquidContainerRegistry.registerLiquid(new LiquidContainerData(liquid, filled, empty)); + + // Register with Squeezer/Bottler + RecipeManagers.bottlerManager.addRecipe(5, liquid, empty, filled); + RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[] {filled} , liquid, + Config.wax.getStackForType(WaxType.MAGIC), 20); + l.available = true; + } + } + // Empty will be set to unavailable. Obviously, it always is. + LiquidType.EMPTY.available = true; + } +} diff --git a/thaumicbees_src/thaumicbees/bees/MoonPhase.java b/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java similarity index 88% rename from thaumicbees_src/thaumicbees/bees/MoonPhase.java rename to thaumicbees_src/thaumicbees/main/utils/MoonPhase.java index 2df6fb8..7d71cee 100644 --- a/thaumicbees_src/thaumicbees/bees/MoonPhase.java +++ b/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java @@ -1,4 +1,4 @@ -package thaumicbees.bees; +package thaumicbees.main.utils; import net.minecraft.world.World; @@ -37,6 +37,6 @@ public enum MoonPhase public static MoonPhase getMoonPhase(World w) { - return MoonPhase.values()[(int)(w.getWorldTime() / 24000L) % 8]; + return MoonPhase.values()[(int)((w.getWorldTime() + 6000) / 24000L) % 8]; } } diff --git a/thaumicbees_src/thaumicbees/main/VersionInfo.java b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java similarity index 92% rename from thaumicbees_src/thaumicbees/main/VersionInfo.java rename to thaumicbees_src/thaumicbees/main/utils/VersionInfo.java index 51a6c8b..d8ee5eb 100644 --- a/thaumicbees_src/thaumicbees/main/VersionInfo.java +++ b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java @@ -1,4 +1,4 @@ -package thaumicbees.main; +package thaumicbees.main.utils; public class VersionInfo { diff --git a/thaumicbees_src/thaumicbees/thaumcraft/ThaumcraftCompat.java b/thaumicbees_src/thaumicbees/thaumcraft/ThaumcraftCompat.java index 445d99e..9a3d3f7 100644 --- a/thaumicbees_src/thaumicbees/thaumcraft/ThaumcraftCompat.java +++ b/thaumicbees_src/thaumicbees/thaumcraft/ThaumcraftCompat.java @@ -4,15 +4,14 @@ import java.io.File; import java.util.ArrayList; import thaumcraft.api.EnumTag; +import thaumcraft.api.ItemApi; import thaumcraft.api.ObjectTags; import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.research.ResearchItem; import thaumcraft.api.research.ResearchList; +import thaumicbees.bees.BeeGenomeManager; import thaumicbees.bees.genetics.Allele; -import thaumicbees.bees.genetics.BeeGenomeManager; -import thaumicbees.block.BlockManager; import thaumicbees.item.ItemComb; -import thaumicbees.item.ItemManager; import thaumicbees.item.ItemMiscResources; import thaumicbees.item.types.CombType; import thaumicbees.item.types.DropType; @@ -20,6 +19,7 @@ import thaumicbees.item.types.LiquidType; import thaumicbees.item.types.ResourceType; import thaumicbees.item.types.WaxType; import thaumicbees.main.CommonProxy; +import thaumicbees.main.Config; import thaumicbees.main.ThaumicBees; import thaumicbees.storage.BackpackDefinition; @@ -41,45 +41,26 @@ import net.minecraftforge.common.Configuration; public class ThaumcraftCompat { - - public static void parseThaumcraftConfig(String configPath) + public static void getThaumcraftBlocks() { - Configuration tcConfig = new Configuration(new File(configPath + "/Thaumcraft.cfg")); - Property p; - - tcConfig.load(); - - // Load blocks out of the Thaumcraft config to get their IDs; - p = tcConfig.getBlock("BlockCustomPlant", 0); - BlockManager.tcPlant = Block.blocksList[p.getInt()]; - p = tcConfig.getBlock("BlockCandle", 0); - BlockManager.tcCandle = Block.blocksList[ p.getInt()]; - p = tcConfig.getBlock("BlockCrystal", 0); - BlockManager.tcCrystal = Block.blocksList[p.getInt()]; - p = tcConfig.getBlock("BlockMarker", 0); - BlockManager.tcMarker = Block.blocksList[p.getInt()]; - p = tcConfig.getBlock("BlockJar", 0); - BlockManager.tcJar = Block.blocksList[p.getInt()]; - p = tcConfig.getBlock("BlockMagicalLeaves", 0); - BlockManager.tcLeaf = Block.blocksList[p.getInt()]; - p = tcConfig.getBlock("BlockMagicalLog", 0); - BlockManager.tcLog = Block.blocksList[p.getInt()]; - p = tcConfig.getBlock("BlockSecure", 0); - BlockManager.tcWarded = Block.blocksList[p.getInt()]; - - // Load items out of the Thaumcraft config to get their IDs. - p = tcConfig.getItem("ItemEssence", 0); - ItemManager.tcEssentiaBottle = Item.itemsList[p.getInt() + 256]; - p = tcConfig.getItem("ItemResource", 0); - ItemManager.tcMiscResource = Item.itemsList[p.getInt() + 256]; - p = tcConfig.getItem("ItemShard", 0); - ItemManager.tcShard = Item.itemsList[p.getInt() + 256]; - p = tcConfig.getItem("BlockJarFilledItem", 0); - ItemManager.tcFilledJar = Item.itemsList[p.getInt() + 256]; - p = tcConfig.getItem("ItemGolemPlacer", 0); - ItemManager.tcGolem = Item.itemsList[p.getInt() + 256]; - p = tcConfig.getItem("ItemEssence", 0); - ItemManager.tcWispEssence = Item.itemsList[p.getInt() + 256]; + Config.tcPlant = Block.blocksList[ItemApi.getItem("blockCustomPlant", 0).itemID]; + Config.tcCandle = Block.blocksList[ItemApi.getItem("blockCandle", 0).itemID]; + Config.tcCrystal = Block.blocksList[ItemApi.getItem("blockCrystal", 0).itemID]; + Config.tcMarker = Block.blocksList[ItemApi.getItem("blockMarker", 0).itemID]; + Config.tcJar = Block.blocksList[ItemApi.getItem("blockJar", 0).itemID]; + Config.tcLog = Block.blocksList[ItemApi.getItem("blockMagicalLog", 0).itemID]; + Config.tcLeaf = Block.blocksList[ItemApi.getItem("blockMagicalLeaves", 0).itemID]; + Config.tcWarded = Block.blocksList[ItemApi.getItem("blockWarded", 0).itemID]; + } + + public static void getThaumcraftItems() + { + Config.tcFilledJar = Item.itemsList[ItemApi.getItem("itemJarFilled", 0).itemID]; + Config.tcMiscResource = Item.itemsList[ItemApi.getItem("itemResource", 0).itemID]; + Config.tcEssentiaBottle = Item.itemsList[ItemApi.getItem("itemEssence", 0).itemID]; + Config.tcShard = Item.itemsList[ItemApi.getItem("itemShard", 0).itemID]; + Config.tcGolem = Item.itemsList[ItemApi.getItem("itemGolemPlacer", 0).itemID]; + Config.tcWispEssence = Item.itemsList[ItemApi.getItem("itemWispEssence", 0).itemID]; } public static void setupBackpacks() @@ -87,34 +68,35 @@ public class ThaumcraftCompat if (ThaumicBees.getInstanceConfig().AddThaumcraftItemsToBackpacks) { // Add all shards and Thaumium to miner's backpack - String ids = ItemManager.tcShard.itemID + ":" + -1 + ";" - + ItemManager.tcMiscResource.itemID + ":" + TCMiscResource.THAUMIUM.ordinal(); + String ids = Config.tcShard.itemID + ":" + -1 + ";" + + Config.tcMiscResource.itemID + ":" + TCMiscResource.THAUMIUM.ordinal(); FMLInterModComms.sendMessage("Forestry", "add-backpack-items", "miner@" + ids); // All resources go into Thaumaturge's backpack - ids = ItemManager.tcMiscResource.itemID + ":" + -1 + ";" - + ItemManager.tcShard.itemID + ":" + -1 + ";" - + ItemManager.tcFilledJar.itemID + ":" + -1 + ";" - + BlockManager.tcCrystal.blockID + ":" + -1 + ";" - + BlockManager.tcJar.blockID + ":" + -1 + ";" - + ItemManager.tcGolem.itemID + ":" + -1; + ids = Config.tcMiscResource.itemID + ":" + -1 + ";" + + Config.tcShard.itemID + ":" + -1 + ";" + + Config.tcFilledJar.itemID + ":" + -1 + ";" + + Config.tcCrystal.blockID + ":" + -1 + ";" + + Config.tcJar.blockID + ":" + -1 + ";" + + Config.tcGolem.itemID + ":" + -1 + ";" + + Config.solidFlux.itemID + ":" + -1; FMLInterModComms.sendMessage("Forestry", "add-backpack-items", "thaumaturge@" + ids); // Add some plants & saplings to Forester's - ids = BlockManager.tcPlant.blockID + ":" + "-1" + ";" - + BlockManager.tcLeaf.blockID + ":" + -1 + ";" - + BlockManager.tcLog.blockID + ":" + "-1"; + ids = Config.tcPlant.blockID + ":" + "-1" + ";" + + Config.tcLeaf.blockID + ":" + -1 + ";" + + Config.tcLog.blockID + ":" + "-1"; FMLInterModComms.sendMessage("Forestry", "add-backpack-items", "forester@" + ids); // Add Wisp & brains to Hunter's - ids = ItemManager.tcWispEssence.itemID + ":" + -1 + ";" - + ItemManager.tcMiscResource.itemID + ":" + TCMiscResource.ZOMBIE_BRAIN.ordinal(); + ids = Config.tcWispEssence.itemID + ":" + -1 + ";" + + Config.tcMiscResource.itemID + ":" + TCMiscResource.ZOMBIE_BRAIN.ordinal(); FMLInterModComms.sendMessage("Forestry", "add-backpack-items", "hunter@" + ids); // Add Marker, warded stone, candle to builder - ids = BlockManager.tcCandle.blockID + ":" + -1 + ";" - + BlockManager.tcMarker.blockID + ":" + -1 + ";" - + BlockManager.tcWarded.blockID + ":" + -1; + ids = Config.tcCandle.blockID + ":" + -1 + ";" + + Config.tcMarker.blockID + ":" + -1 + ";" + + Config.tcWarded.blockID + ":" + -1; FMLInterModComms.sendMessage("Forestry", "add-backpack-items", "builder@" + ids); } } @@ -125,34 +107,34 @@ public class ThaumcraftCompat ItemStack itemStack; tags = new ObjectTags().add(EnumTag.MAGIC, 2); - ThaumcraftApi.registerObjectTag(ItemManager.wax.itemID, WaxType.MAGIC.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.wax.itemID, WaxType.MAGIC.ordinal(), tags); tags = new ObjectTags().add(EnumTag.MAGIC, 1); - ThaumcraftApi.registerObjectTag(ItemManager.drops.itemID, DropType.ENCHANTED.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.drops.itemID, DropType.ENCHANTED.ordinal(), tags); tags = new ObjectTags().add(EnumTag.KNOWLEDGE, 1); - ThaumcraftApi.registerObjectTag(ItemManager.drops.itemID, DropType.INTELLECT.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.drops.itemID, DropType.INTELLECT.ordinal(), tags); tags = new ObjectTags().add(EnumTag.KNOWLEDGE, 3); - ThaumcraftApi.registerObjectTag(ItemManager.miscResources.itemID, ResourceType.LORE_FRAGMENT.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.miscResources.itemID, ResourceType.LORE_FRAGMENT.ordinal(), tags); tags = new ObjectTags().add(EnumTag.MAGIC, 1).add(EnumTag.INSECT, 2).add(EnumTag.CONTROL, 1); - ThaumcraftApi.registerObjectTag(ItemManager.combs.itemID, CombType.STARK.ordinal(), tags); - ThaumcraftApi.registerObjectTag(ItemManager.combs.itemID, CombType.AIRY.ordinal(), tags); - ThaumcraftApi.registerObjectTag(ItemManager.combs.itemID, CombType.FIREY.ordinal(), tags); - ThaumcraftApi.registerObjectTag(ItemManager.combs.itemID, CombType.WATERY.ordinal(), tags); - ThaumcraftApi.registerObjectTag(ItemManager.combs.itemID, CombType.EARTHY.ordinal(), tags); - ThaumcraftApi.registerObjectTag(ItemManager.combs.itemID, CombType.INFUSED.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.STARK.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.AIRY.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.FIREY.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.WATERY.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.EARTHY.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.INFUSED.ordinal(), tags); // Tagging capsules. tags = new ObjectTags().add(EnumTag.MAGIC, 2); - ThaumcraftApi.registerObjectTag(ItemManager.magicCapsule.itemID, -1, tags); + ThaumcraftApi.registerObjectTag(Config.magicCapsule.itemID, -1, tags); tags = new ObjectTags().add(EnumTag.MAGIC, 2).add(EnumTag.VOID, 2); - ThaumcraftApi.registerObjectTag(ItemManager.magicCapsule.itemID, 0, tags); + ThaumcraftApi.registerObjectTag(Config.magicCapsule.itemID, 0, tags); tags = new ObjectTags().add(EnumTag.MAGIC, 2).add(EnumTag.WATER, 2); - ThaumcraftApi.registerObjectTag(ItemManager.magicCapsule.itemID, LiquidType.WATER.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.magicCapsule.itemID, LiquidType.WATER.ordinal(), tags); tags = new ObjectTags().add(EnumTag.MAGIC, 2).add(EnumTag.FIRE, 2); - ThaumcraftApi.registerObjectTag(ItemManager.magicCapsule.itemID, LiquidType.LAVA.ordinal(), tags); + ThaumcraftApi.registerObjectTag(Config.magicCapsule.itemID, LiquidType.LAVA.ordinal(), tags); for (EnumTag tag : EnumTag.values()) { @@ -161,7 +143,7 @@ public class ThaumcraftCompat continue; } tags = new ObjectTags().add(tag, 1); - ThaumcraftApi.registerObjectTag(ItemManager.solidFlux.itemID, tag.id, tags); + ThaumcraftApi.registerObjectTag(Config.solidFlux.itemID, tag.id, tags); } // Tag some Forestry stuff. @@ -245,12 +227,12 @@ public class ThaumcraftCompat itemStack = ItemInterface.getItem("beeComb"); tags = new ObjectTags().add(EnumTag.INSECT, 2).add(EnumTag.TRAP, 2); ThaumcraftApi.registerObjectTag(itemStack.itemID, -1, tags); // ALL combs plox. - ThaumcraftApi.registerObjectTag(ItemManager.combs.itemID, -1, tags); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, -1, tags); - itemStack = ItemManager.combs.getStackForType(CombType.OCCULT); + itemStack = Config.combs.getStackForType(CombType.OCCULT); tags = new ObjectTags().add(EnumTag.INSECT, 2).add(EnumTag.TRAP, 2).add(EnumTag.MAGIC, 2); ThaumcraftApi.registerObjectTag(itemStack.itemID, itemStack.getItemDamage(), tags); - itemStack = ItemManager.combs.getStackForType(CombType.STARK); + itemStack = Config.combs.getStackForType(CombType.STARK); ThaumcraftApi.registerObjectTag(itemStack.itemID, itemStack.getItemDamage(), tags); itemStack = ItemInterface.getItem("ambrosia"); @@ -289,7 +271,7 @@ public class ThaumcraftCompat { ObjectTags tags; - ResearchItem startNode = new ResearchItem("TBSTARTNODE", null, 10, 0, ItemManager.miscResources.getStackForType(ResourceType.RESEARCH_StartNode)) + ResearchItem startNode = new ResearchItem("TBSTARTNODE", null, 10, 0, Config.miscResources.getStackForType(ResourceType.RESEARCH_StartNode)) .setAutoUnlock() .registerResearchItem(); @@ -300,7 +282,7 @@ public class ThaumcraftCompat tags = new ObjectTags().add(EnumTag.INSECT, 15).add(EnumTag.MAGIC, 5).add(EnumTag.WATER, 5).add(EnumTag.EARTH, 5) .add(EnumTag.WIND, 5).add(EnumTag.FIRE, 5); - ResearchItem beeInfusion = new ResearchItem("BEEINFUSION", tags, 5, 3, ItemManager.miscResources.getStackForType(ResourceType.RESEARCH_BeeInfusion)) + ResearchItem beeInfusion = new ResearchItem("BEEINFUSION", tags, 5, 3, Config.miscResources.getStackForType(ResourceType.RESEARCH_BeeInfusion)) .setParents(starkHint, ResearchList.getResearch("UTFT")).setHidden() .registerResearchItem(); @@ -311,31 +293,31 @@ public class ThaumcraftCompat tags = new ObjectTags().add(EnumTag.WOOD, 10).add(EnumTag.TOOL, 6).add(EnumTag.INSECT, 15).add(EnumTag.BEAST, 2) .add(EnumTag.MAGIC, 5); - ResearchItem magicFrame = new ResearchItem("HIVEFRAME", tags, 10, -2, ItemManager.hiveFrameMagic) + ResearchItem magicFrame = new ResearchItem("HIVEFRAME", tags, 10, -2, Config.hiveFrameMagic) .setParents(startNode) .registerResearchItem(); tags = new ObjectTags().add(EnumTag.TOOL, 5).add(EnumTag.INSECT, 10).add(EnumTag.ARMOR, 5).add(EnumTag.EXCHANGE, 6) .add(EnumTag.MAGIC, 8); - ResearchItem magicFrame2 = new ResearchItem("HIVEFRAME2", tags, 8, -2, ItemManager.hiveFrameResilient) + ResearchItem magicFrame2 = new ResearchItem("HIVEFRAME2", tags, 8, -2, Config.hiveFrameResilient) .setParents(magicFrame).setHidden() .registerResearchItem(); tags = new ObjectTags().add(EnumTag.TOOL, 4).add(EnumTag.INSECT, 10).add(EnumTag.LIFE, 5).add(EnumTag.EXCHANGE, 6) .add(EnumTag.HEAL, 2).add(EnumTag.FLOWER, 6); - ResearchItem gentleFrame = new ResearchItem("HIVEFRAMEGENTLE", tags, 12, -2, ItemManager.hiveFrameGentle) + ResearchItem gentleFrame = new ResearchItem("HIVEFRAMEGENTLE", tags, 12, -2, Config.hiveFrameGentle) .setParents(magicFrame).setHidden() .registerResearchItem(); tags = new ObjectTags().add(EnumTag.TOOL, 4).add(EnumTag.INSECT, 10).add(EnumTag.LIFE, 6).add(EnumTag.EXCHANGE, 8) .add(EnumTag.MAGIC, 8).add(EnumTag.MOTION, 4).add(EnumTag.FLESH, 4); - ResearchItem metabolicFrame = new ResearchItem("HIVEFRAMEMETA", tags, 9, -3, ItemManager.hiveFrameMetabolic) + ResearchItem metabolicFrame = new ResearchItem("HIVEFRAMEMETA", tags, 9, -3, Config.hiveFrameMetabolic) .setParents(magicFrame).setHidden() .registerResearchItem(); tags = new ObjectTags().add(EnumTag.TOOL, 5).add(EnumTag.INSECT, 10).add(EnumTag.DEATH, 15).add(EnumTag.EXCHANGE, 6) .add(EnumTag.MAGIC, 8).add(EnumTag.POISON, 6); - ResearchItem necroticFrame = new ResearchItem("HIVEFRAMENECRO", tags, 11, -3, ItemManager.hiveFrameNecrotic) + ResearchItem necroticFrame = new ResearchItem("HIVEFRAMENECRO", tags, 11, -3, Config.hiveFrameNecrotic) .setParents(magicFrame).setHidden() .registerResearchItem(); @@ -352,116 +334,6 @@ public class ThaumcraftCompat .setParents(startNode) .registerResearchItem();*/ } - - public static void setupCrafting() - { - ItemStack output = ItemManager.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); - ItemStack inputA = ItemInterface.getItem("apatite"); - ObjectTags tags = (new ObjectTags()).add(EnumTag.CROP, 12); - output.stackSize = 2; - ThaumcraftApi.addShapelessInfusionCraftingRecipe("FERTILIZER", "FERTILIZER", 5, tags, output, new Object[] { - inputA - }); - - output = new ItemStack(ItemManager.hiveFrameMagic); - inputA = ItemInterface.getItem("frameUntreated"); - tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8); - ThaumcraftApi.addShapelessInfusionCraftingRecipe("HIVEFRAME", "FRAMEMAGIC", 50, tags, output, new Object[] { - inputA - }); - - output = new ItemStack(ItemManager.hiveFrameResilient); - tags = new ObjectTags().add(EnumTag.WOOD, 12).add(EnumTag.INSECT, 8).add(EnumTag.EXCHANGE, 12); - ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAME2", "FRAMERESILIENT", 50, tags, output, new Object[] { - " i ", "ifi", " i ", - 'f', ItemManager.hiveFrameMagic, - 'i', Item.ingotIron - }); - - output = new ItemStack(ItemManager.hiveFrameGentle); - tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.HEAL, 12); - ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAMEGENTLE", "FRAMEGENTLE", 50, tags, output, new Object[] { - "www", "wFw", "www", - 'F', inputA, - 'w', ItemInterface.getItem("beeswax") - - }); - - output = new ItemStack(ItemManager.hiveFrameMetabolic); - tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.LIFE, 8).add(EnumTag.MOTION, 8) - .add(EnumTag.EXCHANGE, 8); - ThaumcraftApi.addShapelessInfusionCraftingRecipe("HIVEFRAMEMETA", "FRAMEMETABOLIC", 50, tags, output, new Object[] { - Item.magmaCream, - inputA - }); - - output = new ItemStack(ItemManager.hiveFrameNecrotic); - tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.EXCHANGE, 12).add(EnumTag.DEATH, 10) - .add(EnumTag.POISON, 5); - ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAMENECRO", "FRAMENECROTIC", 50, tags, output, new Object[] { - " S ", "SxS", " S ", - 'S', Item.rottenFlesh, - 'x', inputA - }); - } - - public static void setupBeeInfusions(World world) - { - ItemStack drone = BeeGenomeManager.getBeeNBTForSpecies(Allele.Stark, EnumBeeType.DRONE); - ItemStack princess = BeeGenomeManager.getBeeNBTForSpecies(Allele.Stark, EnumBeeType.PRINCESS); - ItemStack airDrone = Allele.Air.getBeeItem(world, EnumBeeType.DRONE); - ItemStack airPrincess = Allele.Air.getBeeItem(world, EnumBeeType.PRINCESS); - ItemStack waterDrone = Allele.Water.getBeeItem(world, EnumBeeType.DRONE); - ItemStack waterPrincess = Allele.Water.getBeeItem(world, EnumBeeType.PRINCESS); - ItemStack earthDrone = Allele.Earth.getBeeItem(world, EnumBeeType.DRONE); - ItemStack earthPrincess = Allele.Earth.getBeeItem(world, EnumBeeType.PRINCESS); - ItemStack fireDrone = Allele.Fire.getBeeItem(world, EnumBeeType.DRONE); - ItemStack firePrincess = Allele.Fire.getBeeItem(world, EnumBeeType.PRINCESS); - ItemStack magicDrone = Allele.Infused.getBeeItem(world, EnumBeeType.DRONE); - ItemStack magicPrincess = Allele.Infused.getBeeItem(world, EnumBeeType.PRINCESS); - - String researchKey = "BEEINFUSION"; - - ObjectTags tags = (new ObjectTags()).add(EnumTag.WIND, 40).add(EnumTag.MOTION, 20); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION1", airDrone, - new ItemStack[] { drone, new ItemStack(ItemManager.tcShard, 1, TCShardType.AIR.ordinal())}, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION2", airPrincess, - new ItemStack[] { princess , new ItemStack(ItemManager.tcShard, 1, TCShardType.AIR.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - - tags = (new ObjectTags()).add(EnumTag.FIRE, 40).add( EnumTag.POWER, 20); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION3", fireDrone, new Object[] - { drone, new ItemStack(ItemManager.tcShard, 1, TCShardType.FIRE.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION4", firePrincess, new Object[] - { princess, new ItemStack(ItemManager.tcShard, 1, TCShardType.FIRE.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - - tags = (new ObjectTags()).add(EnumTag.WATER, 40).add( EnumTag.COLD, 20); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION5", waterDrone, new Object[] - { drone, new ItemStack(ItemManager.tcShard, 1, TCShardType.WATER.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION6", waterPrincess, new Object[] - { princess, new ItemStack(ItemManager.tcShard, 1, TCShardType.WATER.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - - tags = (new ObjectTags()).add(EnumTag.EARTH, 40).add( EnumTag.ROCK, 20); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION7", earthDrone, new Object[] - { drone, new ItemStack(ItemManager.tcShard, 1, TCShardType.EARTH.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION8", earthPrincess, new Object[] - { princess, new ItemStack(ItemManager.tcShard, 1, TCShardType.EARTH.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - - tags = new ObjectTags().add(EnumTag.MAGIC, 40).add(EnumTag.FLUX, 20); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION9", magicDrone, new Object[] - { drone, new ItemStack(ItemManager.tcShard, 1, TCShardType.MAGIC.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION0", magicPrincess, new Object[] - { princess, new ItemStack(ItemManager.tcShard, 1, TCShardType.MAGIC.ordinal()) }, - 100, tags, Allele.Stark, EnumBeeChromosome.SPECIES); - } public static void registerResearch() {