From 320bdfd234b6918de353c46c81da4befe0001199 Mon Sep 17 00:00:00 2001 From: Jeremy Diamond Date: Tue, 25 Feb 2014 01:53:38 -0800 Subject: [PATCH] Bloody Scrivener's Tools --- assets/forbidden/textures/items/bloodwell.png | Bin 0 -> 319 bytes src/com/spiteful/forbidden/Compat.java | 17 ++- src/com/spiteful/forbidden/Config.java | 29 +++-- .../forbidden/items/ForbiddenItems.java | 7 ++ .../forbidden/items/ItemBloodwell.java | 117 ++++++++++++++++++ 5 files changed, 153 insertions(+), 17 deletions(-) create mode 100644 assets/forbidden/textures/items/bloodwell.png create mode 100644 src/com/spiteful/forbidden/items/ItemBloodwell.java diff --git a/assets/forbidden/textures/items/bloodwell.png b/assets/forbidden/textures/items/bloodwell.png new file mode 100644 index 0000000000000000000000000000000000000000..7996bbb6cb9bd3517143985aa93c9fdd042cc625 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}T7XZ8E0C6FV31*8@Nlq@0!pb% z0M+sG^2Wx-?%TIdSlU>XfkB^vA%=lrBLhPn1A~&1u$ftyFOb2-Wh%>C%D~`mZ@!9w zfm=w;oPl8i14E9zb%Tmzx~mfpk2DXDxS77@=FOY!Uws1F!oXM(~p#q2ZK3s zZoi0mvsR3)mQmO$=bY+;gBlXu$Cn(el9393aWIE}F)Me59ouU**G-4lB>|np;OXk; Jvd$@?2>=wgWGDat literal 0 HcmV?d00001 diff --git a/src/com/spiteful/forbidden/Compat.java b/src/com/spiteful/forbidden/Compat.java index 265e976..2be91f9 100644 --- a/src/com/spiteful/forbidden/Compat.java +++ b/src/com/spiteful/forbidden/Compat.java @@ -150,10 +150,10 @@ public class Compat { try { InfusionRecipe soul_recipe = ThaumcraftApi.addInfusionCraftingRecipe("ROD_soul", new ItemStack(ForbiddenItems.wandCore, 1, 2), 5, (new AspectList()).add(Aspect.ELDRITCH, 32).add(Aspect.MAGIC, 12).add(Aspect.SOUL, 16), new ItemStack(PlayerBeacons.defiledSoulPylonBlock), new ItemStack[]{ItemApi.getItem("itemResource", 14), new ItemStack(PlayerBeacons.defiledSoulConductorBlock), new ItemStack(PlayerBeacons.defiledSoulConductorBlock), new ItemStack(PlayerBeacons.defiledSoulConductorBlock), new ItemStack(PlayerBeacons.defiledSoulConductorBlock), new ItemStack(Item.eyeOfEnder), new ItemStack(Item.eyeOfEnder)}); - (new DarkResearchItem("ROD_soul", "FORBIDDEN", (new AspectList()).add(Aspect.ELDRITCH, 2).add(Aspect.SOUL, 1).add(Aspect.TOOL, 1), -3, -3, 5, new ItemStack(ForbiddenItems.wandCore, 1, 2))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.ROD_soul.1"), new ResearchPage(soul_recipe)}).setParents(new String[]{"ROD_silverwood", "PB_CRYSTAL"}).setConcealed().registerResearchItem(); + (new DarkResearchItem("ROD_soul", "FORBIDDEN", "[PB]", (new AspectList()).add(Aspect.ELDRITCH, 4).add(Aspect.SOUL, 3).add(Aspect.TOOL, 2), -3, -3, 5, new ItemStack(ForbiddenItems.wandCore, 1, 2))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.ROD_soul.1"), new ResearchPage(soul_recipe)}).setParents(new String[]{"ROD_silverwood", "PB_CRYSTAL"}).setConcealed().registerResearchItem(); IArcaneRecipe soul_cap = ThaumcraftApi.addArcaneCraftingRecipe("CAP_soul", new ItemStack(ForbiddenItems.wandCap, 1, 2), (new AspectList()).add(Aspect.ENTROPY, 20).add(Aspect.FIRE, 5).add(Aspect.WATER, 5).add(Aspect.AIR, 5).add(Aspect.EARTH, 5), new Object[]{"NXN", "N N", Character.valueOf('N'), Item.enderPearl, Character.valueOf('X'), PlayerBeacons.crystalItem}); - (new DarkResearchItem("CAP_soul", "FORBIDDEN", (new AspectList()).add(Aspect.ELDRITCH, 1).add(Aspect.MAGIC, 1).add(Aspect.ENTROPY, 2), -3, -5, 3, new ItemStack(ForbiddenItems.wandCap, 1, 2))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.CAP_soul.1"), new ResearchPage(soul_cap)}).setParents(new String[]{"ROD_soul"}).setConcealed().registerResearchItem(); + (new DarkResearchItem("CAP_soul", "FORBIDDEN", "[PB]", (new AspectList()).add(Aspect.ELDRITCH, 3).add(Aspect.MAGIC, 2).add(Aspect.ENTROPY, 4), -3, -5, 3, new ItemStack(ForbiddenItems.wandCap, 1, 2))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.CAP_soul.1"), new ResearchPage(soul_cap)}).setParents(new String[]{"ROD_soul"}).setSecondary().setConcealed().registerResearchItem(); } catch(LinkageError e) @@ -185,12 +185,17 @@ public class Compat { Item incendium = (Item)(bloodItems.getField("incendium").get(null)); Item sanctus = (Item)(bloodItems.getField("sanctus").get(null)); Item tennebrae = (Item)(bloodItems.getField("tennebrae").get(null)); + Item bloodBucket = (Item)(bloodItems.getField("bucketLife").get(null)); + Item crapOrb = (Item)(bloodItems.getField("weakBloodOrb").get(null)); InfusionRecipe blood_recipe = ThaumcraftApi.addInfusionCraftingRecipe("ROD_blood", new ItemStack(ForbiddenItems.wandCore, 1, 3), 2, (new AspectList()).add(Aspect.LIFE, 32).add(Aspect.MAGIC, 12).add(Aspect.WATER, 16), new ItemStack(masterOrb), new ItemStack[]{new ItemStack(magicales), new ItemStack(imbuedSlate), new ItemStack(imbuedSlate), new ItemStack(tennebrae), new ItemStack(sanctus), new ItemStack(aquasalus), new ItemStack(incendium), new ItemStack(terrae), new ItemStack(aether)}); - (new DarkResearchItem("ROD_blood", "FORBIDDEN", (new AspectList()).add(Aspect.LIFE, 2).add(Aspect.WATER, 1).add(Aspect.WEAPON, 1), -5, -3, 4, new ItemStack(ForbiddenItems.wandCore, 1, 3))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.ROD_blood.1"), new ResearchPage(blood_recipe)}).setParents(new String[]{"ROD_silverwood"}).setConcealed().registerResearchItem(); + (new DarkResearchItem("ROD_blood", "FORBIDDEN", "[BM]", (new AspectList()).add(Aspect.LIFE, 5).add(Aspect.WATER, 4).add(Aspect.WEAPON, 3), -5, -3, 4, new ItemStack(ForbiddenItems.wandCore, 1, 3))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.ROD_blood.1"), new ResearchPage(blood_recipe)}).setParents(new String[]{"ROD_silverwood"}).setConcealed().registerResearchItem(); InfusionRecipe alchemical_recipe = ThaumcraftApi.addInfusionCraftingRecipe("CAP_alchemical", new ItemStack(ForbiddenItems.wandCap, 1, 0), 3, (new AspectList()).add(Aspect.LIFE, 12).add(Aspect.WATER, 6), ItemApi.getItem("itemWandCap", 1), new ItemStack[]{new ItemStack(magicales), new ItemStack(magicales), new ItemStack(magicales)}); - (new DarkResearchItem("CAP_alchemical", "FORBIDDEN", (new AspectList()).add(Aspect.METAL, 1).add(Aspect.LIFE, 2).add(Aspect.TOOL, 1).add(Aspect.WATER, 1), -5, -5, 5, new ItemStack(ForbiddenItems.wandCap, 1, 0))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.CAP_alchemical.1"), new ResearchPage(alchemical_recipe)}).setParents(new String[]{"ROD_blood"}).setConcealed().registerResearchItem(); + (new DarkResearchItem("CAP_alchemical", "FORBIDDEN", "[BM]", (new AspectList()).add(Aspect.LIFE, 4).add(Aspect.TOOL, 1).add(Aspect.WATER, 3), -5, -5, 5, new ItemStack(ForbiddenItems.wandCap, 1, 0))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.CAP_alchemical.1"), new ResearchPage(alchemical_recipe)}).setParents(new String[]{"ROD_blood"}).setSecondary().setConcealed().registerResearchItem(); + + IArcaneRecipe bloodwell_recipe = ThaumcraftApi.addShapelessArcaneCraftingRecipe("BLOODWELL", new ItemStack(ForbiddenItems.bloodwell, 1, 0), (new AspectList()).add(Aspect.WATER, 10).add(Aspect.EARTH, 10), new Object[]{new ItemStack(Item.feather, 1, 0), new ItemStack(bloodBucket, 1, 0), new ItemStack(Item.glassBottle, 1, 0), new ItemStack(crapOrb, 1, 0)}); + (new DarkResearchItem("BLOODWELL", "FORBIDDEN", "[BM]", (new AspectList()).add(Aspect.LIFE, 5).add(Aspect.MIND, 4).add(Aspect.SENSES, 3), -10, 4, 3, new ItemStack(ForbiddenItems.bloodwell, 1, 0))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.BLOODWELL.1"), new ResearchPage(bloodwell_recipe)}).setParents(new String[]{"RESEARCH"}).setAspectTriggers(new Aspect[]{Aspect.LIFE}).setConcealed().registerResearchItem(); } catch(Exception e) @@ -212,10 +217,10 @@ public class Compat { Block witchwood = (Block)(amBlocks.getField("witchwoodLog").get(null)); InfusionRecipe witchwood_recipe = ThaumcraftApi.addInfusionCraftingRecipe("ROD_witchwood", new ItemStack(ForbiddenItems.wandCore, 1, 4), 5, (new AspectList()).add(Aspect.MAGIC, 16).add(Aspect.EARTH, 9).add(Aspect.WATER, 9).add(Aspect.FIRE, 9).add(Aspect.AIR, 9), new ItemStack(witchwood), new ItemStack[]{new ItemStack(amOre.itemID, 1, 3), new ItemStack(essence.itemID, 1, 1), new ItemStack(essence.itemID, 1, 2), new ItemStack(essence.itemID, 1, 3), new ItemStack(essence.itemID, 1, 4), new ItemStack(rune.itemID, 1, 7), new ItemStack(rune.itemID, 1, 8), new ItemStack(amOre.itemID, 1, 2)}); - (new DarkResearchItem("ROD_witchwood", "FORBIDDEN", (new AspectList()).add(Aspect.MAGIC, 2).add(Aspect.TREE, 1).add(Aspect.TOOL, 1), -4, -3, 4, new ItemStack(ForbiddenItems.wandCore, 1, 4))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.ROD_witchwood.1"), new ResearchPage(witchwood_recipe)}).setParents(new String[]{"ROD_silverwood"}).setConcealed().registerResearchItem(); + (new DarkResearchItem("ROD_witchwood", "FORBIDDEN", "[AM2]", (new AspectList()).add(Aspect.MAGIC, 4).add(Aspect.TREE, 5).add(Aspect.MIND, 2), -4, -3, 4, new ItemStack(ForbiddenItems.wandCore, 1, 4))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.ROD_witchwood.1"), new ResearchPage(witchwood_recipe)}).setParents(new String[]{"ROD_silverwood"}).setConcealed().registerResearchItem(); InfusionRecipe vinteum_recipe = ThaumcraftApi.addInfusionCraftingRecipe("CAP_vinteum", new ItemStack(ForbiddenItems.wandCap, 1, 1), 5, (new AspectList()).add(Aspect.ENERGY, 12).add(Aspect.MAGIC, 6), ItemApi.getItem("itemWandCap", 6), new ItemStack[]{new ItemStack(amOre.itemID, 1, 0), new ItemStack(amOre.itemID, 1, 0), new ItemStack(amOre.itemID, 1, 0)}); - (new DarkResearchItem("CAP_vinteum", "FORBIDDEN", (new AspectList()).add(Aspect.METAL, 1).add(Aspect.MAGIC, 2).add(Aspect.TOOL, 1).add(Aspect.ENERGY, 1), -4, -5, 5, new ItemStack(ForbiddenItems.wandCap, 1, 1))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.CAP_vinteum.1"), new ResearchPage(vinteum_recipe)}).setParents(new String[]{"ROD_witchwood"}).setConcealed().registerResearchItem(); + (new DarkResearchItem("CAP_vinteum", "FORBIDDEN", "[AM2]", (new AspectList()).add(Aspect.MAGIC, 4).add(Aspect.TOOL, 1).add(Aspect.ENERGY, 2), -4, -5, 5, new ItemStack(ForbiddenItems.wandCap, 1, 1))).setPages(new ResearchPage[]{new ResearchPage("forbidden.research_page.CAP_vinteum.1"), new ResearchPage(vinteum_recipe)}).setParents(new String[]{"ROD_witchwood"}).setSecondary().setConcealed().registerResearchItem(); } catch(Exception e) { diff --git a/src/com/spiteful/forbidden/Config.java b/src/com/spiteful/forbidden/Config.java index 8d03233..780c405 100644 --- a/src/com/spiteful/forbidden/Config.java +++ b/src/com/spiteful/forbidden/Config.java @@ -41,6 +41,7 @@ public class Config public static int morphAxeID; public static int wandCapID; public static int gluttonyShardID; + public static int bloodwellID; public static int arcaneCakeBlockID; public static int blackFlowerBlockID; @@ -68,6 +69,7 @@ public class Config public static boolean spork = false; public static boolean greedyEnch = true; public static boolean emeraldTrans = true; + public static boolean wrathCrazy = false; public static int wrathCost = 5; public static int wrathEff = 4; @@ -97,6 +99,7 @@ public class Config morphAxeID = conf.getItem("Chameleon Axe", idCount++).getInt(); wandCapID = conf.getItem("Wand Caps", idCount++).getInt(); gluttonyShardID = conf.getItem("Gluttony Shard", idCount++).getInt(); + bloodwellID = conf.getItem("Bloody Scrivener's Tools", idCount++).getInt(); int blockCount = 3000; arcaneCakeBlockID = conf.getBlock("Thaumic Cake", blockCount++).getInt(); @@ -140,6 +143,10 @@ public class Config wrathEff = we.getInt(4); if(wrathEff < 0) wrathEff = 4; + Property cw = conf.get("general", "Wrath Cage Cries Havoc", wrathCrazy); + cw.comment = "Enable to let the Wrath Cage imprint on ANY non-boss mob. May break your game or make your game Awesome."; + wrathCrazy = cw.getBoolean(false); + Property sd = conf.get("general", "Spork of Doom", spork); sd.comment = "What is this? I don't even..."; spork = sd.getBoolean(false); @@ -201,17 +208,17 @@ public class Config spawnerMobs.put("Blaze", Aspect.FIRE); spawnerMobs.put("LavaSlime", Aspect.FIRE); spawnerMobs.put("Witch", Aspect.MAGIC); - spawnerMobs.put("Firebat", Aspect.FIRE); - spawnerMobs.put("Wisp", Aspect.AURA); - spawnerMobs.put("ThaumSlime", Aspect.TAINT); - spawnerMobs.put("BrainyZombie", Aspect.MIND); - spawnerMobs.put("TaintSpider", Aspect.TAINT); - spawnerMobs.put("TaintSwarm", Aspect.TAINT); - spawnerMobs.put("TaintedPig", Aspect.TAINT); - //spawnerMobs.put("TaintedSheep", Aspect.TAINT); - spawnerMobs.put("TaintedCow", Aspect.TAINT); - spawnerMobs.put("TaintedChicken", Aspect.TAINT); - spawnerMobs.put("TaintedVillager", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.Firebat", Aspect.FIRE); + spawnerMobs.put("Thaumcraft.Wisp", Aspect.AURA); + spawnerMobs.put("Thaumcraft.ThaumSlime", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.BrainyZombie", Aspect.MIND); + spawnerMobs.put("Thaumcraft.TaintSpider", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.TaintSwarm", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.TaintedPig", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.TaintedSheep", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.TaintedCow", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.TaintedChicken", Aspect.TAINT); + spawnerMobs.put("Thaumcraft.TaintedVillager", Aspect.TAINT); //spawnerMobs.put("Taintacle", DarkAspects.LUST); } diff --git a/src/com/spiteful/forbidden/items/ForbiddenItems.java b/src/com/spiteful/forbidden/items/ForbiddenItems.java index 0d5c7b8..d5f3b20 100644 --- a/src/com/spiteful/forbidden/items/ForbiddenItems.java +++ b/src/com/spiteful/forbidden/items/ForbiddenItems.java @@ -32,6 +32,7 @@ public class ForbiddenItems public static Item morphSword; public static Item morphShovel; public static Item morphAxe; + public static Item bloodwell; public static WandRod WAND_ROD_TAINTED; public static WandRod WAND_ROD_INFERNAL; @@ -124,5 +125,11 @@ public class ForbiddenItems OreDictionary.registerOre("nuggetEmerald", new ItemStack(resource, 1, 0)); OreDictionary.registerOre("dyeBlack", new ItemStack(resource, 1, 1)); + if(Compat.bm) + { + bloodwell = new ItemBloodwell(Config.bloodwellID).setUnlocalizedName("Bloodwell"); + GameRegistry.registerItem(bloodwell, "Bloodwell"); + } + } } \ No newline at end of file diff --git a/src/com/spiteful/forbidden/items/ItemBloodwell.java b/src/com/spiteful/forbidden/items/ItemBloodwell.java new file mode 100644 index 0000000..e366230 --- /dev/null +++ b/src/com/spiteful/forbidden/items/ItemBloodwell.java @@ -0,0 +1,117 @@ +package com.spiteful.forbidden.items; + +import com.spiteful.forbidden.*; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.List; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.entity.Entity; +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.Icon; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeDirection; +import thaumcraft.api.IScribeTools; + +public class ItemBloodwell extends Item implements IScribeTools { + + @SideOnly(Side.CLIENT) + public Icon icon; + + Method checkOwner; + Method syphon; + + public ItemBloodwell(int id) { + super(id); + maxStackSize = 1; + canRepair = false; + setMaxDamage(100); + setCreativeTab(Forbidden.tab); + setHasSubtypes(false); + + try + { + Class energyItems; + try + { + energyItems = Class.forName("WayofTime.alchemicalWizardry.EnergyItems"); + } + catch(Exception e) + { + energyItems = Class.forName("WayofTime.alchemicalWizardry.common.itemsEnergyItems"); + } + if(energyItems == null) + return; + checkOwner = energyItems.getDeclaredMethod("checkAndSetItemOwner", new Class[] {ItemStack.class, EntityPlayer.class}); + syphon = energyItems.getDeclaredMethod("syphonWhileInContainer", new Class[] {ItemStack.class, Integer.TYPE}); + } + catch(Exception e){} + } + + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister ir) { + this.icon = ir.registerIcon("forbidden:bloodwell"); + } + + @SideOnly(Side.CLIENT) + public Icon getIconFromDamage(int par1) { + return this.icon; + } + + /** + * Called each tick as long the item is on a player inventory. Uses by maps to check if is on a player hand and + * update it's contents. + */ + public void onUpdate(ItemStack stack, World world, Entity fauxplayer, int par4, boolean par5) + { + if(stack.getItemDamage() > 0 && stack.hasTagCompound()) + { + EntityPlayer player = null; + if(fauxplayer instanceof EntityPlayer) + player = (EntityPlayer)fauxplayer; + else + return; + + try + { + if(player instanceof EntityPlayer && ((EntityPlayer)player).capabilities.isCreativeMode) + stack.setItemDamage(0); + else if(((Boolean)(syphon.invoke(null, stack, 25))).booleanValue()) + stack.setItemDamage(stack.getItemDamage() - 1); + else if(player.getHealth() > 6) + { + player.setHealth(player.getHealth() - 2); + stack.setItemDamage(stack.getItemDamage() - 1); + } + } + catch(Exception e){} + } + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) + { + try + { + checkOwner.invoke(null, par1ItemStack, par3EntityPlayer); + } + catch (Exception e){} + return par1ItemStack; + } + + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + if (par1ItemStack.hasTagCompound()) + { + par3List.add(""); + par3List.add("Current owner: " + par1ItemStack.stackTagCompound.getString("ownerName")); + } + } + +} \ No newline at end of file