From 495a7f754fbabb41473ad590edcbf55952798431 Mon Sep 17 00:00:00 2001 From: Jeremy Diamond Date: Sat, 14 Nov 2015 00:52:57 -0800 Subject: [PATCH] Chakras! Fixes #85 Fixes #73 --- .../java/fox/spiteful/forbidden/Config.java | 12 +++++++++-- .../spiteful/forbidden/FMEventHandler.java | 16 +++++++++++++-- .../spiteful/forbidden/ForbiddenRecipes.java | 9 ++++++++- .../spiteful/forbidden/ForbiddenResearch.java | 6 +++++- .../items/scribes/ItemCrystalwell.java | 19 ++++++++++++++++++ .../assets/forbidden/lang/en_US.lang | 1 + .../forbidden/textures/misc/forbidden.png | Bin 897 -> 4492 bytes 7 files changed, 57 insertions(+), 6 deletions(-) diff --git a/src/main/java/fox/spiteful/forbidden/Config.java b/src/main/java/fox/spiteful/forbidden/Config.java index 5c59177..d6dd49b 100644 --- a/src/main/java/fox/spiteful/forbidden/Config.java +++ b/src/main/java/fox/spiteful/forbidden/Config.java @@ -1,6 +1,7 @@ package fox.spiteful.forbidden; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import net.minecraft.block.Block; @@ -15,6 +16,7 @@ import thaumcraft.api.aspects.Aspect; public class Config { public static HashMap spawnerMobs = new HashMap(); + public static ArrayList trash = new ArrayList(); public static int clusterEnchID; public static int wrathEnchID; @@ -105,6 +107,12 @@ public class Config { gluttony = 0; hereticID = conf.get("general", "Heretic Villager ID", hereticID).getInt(hereticID); + String trashlist = conf.get("general", "Garbage Blocks", "dirt;sand;gravel;cobblestone;netherrack", "List of OreDict names for garbage blocks, separated by semicolons, for the Consuming enchant to eat").getString(); + String[] trashpile = trashlist.split(";"); + for(String garbage : trashpile){ + trash.add(garbage); + } + bloodSealPotionID = conf.get("potions", "Blood Seal", bloodSealPotionID).getInt(bloodSealPotionID); crossMod = conf.get("compatibility", "Cross-Mod Interaction", crossMod, "Disable to keep mods segregated.").getBoolean(true); @@ -119,8 +127,8 @@ public class Config { emc = conf.get("compatibility", "Equivalent Exchange 3 EMC", emc, "Disable if you don't want Forbidden Magic to add EMC values to items.").getBoolean(true); //eewand = conf.get("compatibility", "Equivalent Exchange 3 Wand", eewand, "Disable to specifically disable the EMC to Vis wand.").getBoolean(true); - bloodvis = conf.get("power converters", "LP to Vis", bloodvis).getInt(bloodvis); - manavis = conf.get("power converters", "Mana to Vis", manavis).getInt(manavis); + bloodvis = conf.get("power converters", "LP to Vis", bloodvis, "How much LP 0.01 Vis is worth").getInt(bloodvis); + manavis = conf.get("power converters", "Mana to Vis", manavis, "How much Mana 0.01 Vis is worth").getInt(manavis); } catch (Exception e) { LogHandler.log(Level.ERROR, e, "Had a problem loading its configuration."); } finally { diff --git a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java index b8c5d20..f52056d 100644 --- a/src/main/java/fox/spiteful/forbidden/FMEventHandler.java +++ b/src/main/java/fox/spiteful/forbidden/FMEventHandler.java @@ -48,6 +48,7 @@ import net.minecraftforge.event.entity.player.PlayerEvent.BreakSpeed; import net.minecraftforge.event.entity.player.PlayerUseItemEvent; import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent; +import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.Level; import thaumcraft.api.aspects.Aspect; @@ -67,6 +68,7 @@ public class FMEventHandler { final Aspect[] primals = { Aspect.ENTROPY, Aspect.ORDER, Aspect.FIRE, Aspect.WATER, Aspect.EARTH, Aspect.AIR }; HashMap lastLP = new HashMap(); + @SubscribeEvent public void onPlayerBreaking(BreakSpeed event) { if (event.entityPlayer.getCurrentEquippedItem() != null) { @@ -153,7 +155,7 @@ public class FMEventHandler { ItemStack head = new ItemStack(Items.skull, 1, 3); NBTTagCompound nametag = new NBTTagCompound(); nametag.setString("SkullOwner", ((EntityPlayer) event.entityLiving).getCommandSenderName()); - head.setTagInfo("SkullOwner", nametag); + head.setTagCompound(nametag); addDrop(event, head); } } @@ -319,7 +321,7 @@ public class FMEventHandler { if (EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.consuming.effectId, equip) > 0) { for (int x = 0; x < event.drops.size(); x++) { ItemStack drop = (ItemStack) event.drops.get(x); - if (drop != null && (drop.getItem() == Item.getItemFromBlock(Blocks.cobblestone) || drop.getItem() == Item.getItemFromBlock(Blocks.dirt) || drop.getItem() == Item.getItemFromBlock(Blocks.netherrack) || drop.getItem() == Item.getItemFromBlock(Blocks.gravel))) + if (drop != null && isGarbage(drop)) event.drops.remove(x); } } @@ -355,6 +357,16 @@ public class FMEventHandler { } } + private boolean isGarbage(ItemStack drop) { + for(int id : OreDictionary.getOreIDs(drop)) { + for(String ore : Config.trash) { + if(OreDictionary.getOreName(id).equals(ore)) + return true; + } + } + return false; + } + @SubscribeEvent public void onEat(PlayerUseItemEvent.Finish event){ if(event.entityPlayer.worldObj.isRemote) diff --git a/src/main/java/fox/spiteful/forbidden/ForbiddenRecipes.java b/src/main/java/fox/spiteful/forbidden/ForbiddenRecipes.java index 143b21d..2a27f18 100644 --- a/src/main/java/fox/spiteful/forbidden/ForbiddenRecipes.java +++ b/src/main/java/fox/spiteful/forbidden/ForbiddenRecipes.java @@ -21,6 +21,7 @@ import thaumcraft.api.wands.WandCap; import fox.spiteful.forbidden.blocks.ForbiddenBlocks; import fox.spiteful.forbidden.enchantments.DarkEnchantments; import fox.spiteful.forbidden.items.ForbiddenItems; +import thaumcraft.common.config.ConfigBlocks; import thaumcraft.common.config.ConfigItems; public class ForbiddenRecipes { @@ -65,7 +66,11 @@ public class ForbiddenRecipes { ForbiddenResearch.recipes.put("BlackFlower", ThaumcraftApi.addCrucibleRecipe("BLACKFLOWER", new ItemStack(ForbiddenBlocks.roseBush, 1, 0), new ItemStack(Blocks.double_plant, 1, 4), (new AspectList()).merge(Aspect.DARKNESS, 8).merge(Aspect.LIFE, 5))); ForbiddenResearch.recipes.put("BlackInk", CraftingManager.getInstance().addRecipe(new ItemStack(ForbiddenItems.resource, 2, 1), new Object[]{"#", Character.valueOf('#'), new ItemStack(ForbiddenBlocks.blackFlower, 1, 0)})); - ForbiddenResearch.recipes.put("Crystalwell", ThaumcraftApi.addShapelessArcaneCraftingRecipe("CRYSTALWELL", new ItemStack(ForbiddenItems.crystalwell, 1, 0), (new AspectList()).add(Aspect.WATER, 1).add(Aspect.ORDER, 1), new Object[] { new ItemStack(ConfigItems.itemInkwell, 1, 32767), "dyeBlack", new ItemStack(ConfigItems.itemShard, 1, 32767), new ItemStack(ConfigItems.itemShard, 1, 32767) })); + if(thaumcraft.common.config.Config.researchDifficulty != -1) + ForbiddenResearch.recipes.put("Crystalwell", ThaumcraftApi.addShapelessArcaneCraftingRecipe("CRYSTALWELL", new ItemStack(ForbiddenItems.crystalwell, 1, 0), (new AspectList()).add(Aspect.WATER, 1).add(Aspect.ORDER, 1), new Object[] { new ItemStack(ConfigItems.itemInkwell, 1, 32767), "dyeBlack", new ItemStack(ConfigItems.itemShard, 1, 32767), new ItemStack(ConfigItems.itemShard, 1, 32767) })); + else + ForbiddenResearch.recipes.put("Crystalwell", ThaumcraftApi.addShapelessArcaneCraftingRecipe("CRYSTALWELL", new ItemStack(ForbiddenItems.crystalwell, 1, 0), (new AspectList()).add(Aspect.WATER, 1).add(Aspect.ORDER, 1), new Object[] { new ItemStack(ConfigItems.itemInkwell, 1, 32767), "dyeBlack", new ItemStack(ConfigBlocks.blockCrystal, 1, 6), new ItemStack(ConfigItems.itemShard, 1, 6), new ItemStack(ConfigItems.itemShard, 1, 6), new ItemStack(ConfigItems.itemShard, 1, 6) })); + ForbiddenResearch.recipes.put("Primewell", ThaumcraftApi.addShapelessArcaneCraftingRecipe("PRIMEWELL", new ItemStack(ForbiddenItems.primewell, 1, 0), (new AspectList()).add(Aspect.WATER, 50).add(Aspect.EARTH, 50).add(Aspect.FIRE, 50).add(Aspect.AIR, 50).add(Aspect.ORDER, 50).add(Aspect.ENTROPY, 50), new Object[] { new ItemStack(Items.feather, 1, 0), new ItemStack(ConfigItems.itemEldritchObject, 1, 3), new ItemStack(Items.glass_bottle, 1, 0) })); if(Config.enchanting) { @@ -100,5 +105,7 @@ public class ForbiddenRecipes { } }); + OreDictionary.registerOre("logWood", new ItemStack(ConfigBlocks.blockMagicalLog, 1, OreDictionary.WILDCARD_VALUE)); + } } \ No newline at end of file diff --git a/src/main/java/fox/spiteful/forbidden/ForbiddenResearch.java b/src/main/java/fox/spiteful/forbidden/ForbiddenResearch.java index b49deca..1563753 100644 --- a/src/main/java/fox/spiteful/forbidden/ForbiddenResearch.java +++ b/src/main/java/fox/spiteful/forbidden/ForbiddenResearch.java @@ -29,7 +29,11 @@ public class ForbiddenResearch { addInfernalism(); addTaint(); - (new DarkResearchItem("CRYSTALWELL", "FORBIDDEN", (new AspectList()).add(Aspect.MIND, 3).add(Aspect.CRYSTAL, 2).add(Aspect.MAGIC, 1), -2, -8, 1, new ItemStack(ForbiddenItems.crystalwell, 1, 0))).setPages(new ResearchPage[] { new ResearchPage("forbidden.research_page.CRYSTALWELL.1"), new ResearchPage((IArcaneRecipe) recipes.get("Crystalwell")) }).setParents(new String[] { "RESEARCH" }).registerResearchItem(); + if(thaumcraft.common.config.Config.researchDifficulty != -1) + (new DarkResearchItem("CRYSTALWELL", "FORBIDDEN", (new AspectList()).add(Aspect.MIND, 3).add(Aspect.CRYSTAL, 2).add(Aspect.MAGIC, 1), -2, -8, 1, new ItemStack(ForbiddenItems.crystalwell, 1, 0))).setPages(new ResearchPage[] { new ResearchPage("forbidden.research_page.CRYSTALWELL.1"), new ResearchPage((IArcaneRecipe) recipes.get("Crystalwell")) }).setParents(new String[] { "RESEARCH" }).registerResearchItem(); + else + (new DarkResearchItem("CRYSTALWELL", "FORBIDDEN", (new AspectList()).add(Aspect.MIND, 3).add(Aspect.CRYSTAL, 2).add(Aspect.MAGIC, 1), -2, -8, 1, new ItemStack(ForbiddenItems.crystalwell, 1, 0))).setPages(new ResearchPage[] { new ResearchPage("forbidden.research_page.CRYSTALWELL.1b"), new ResearchPage((IArcaneRecipe) recipes.get("Crystalwell")) }).setParents(new String[] { "RESEARCH" }).registerResearchItem(); + (new DarkResearchItem("PRIMEWELL", "FORBIDDEN", (new AspectList()).add(Aspect.MIND, 3).add(Aspect.ELDRITCH, 6).add(Aspect.CRAFT, 1), 2, -8, 1, new ItemStack(ForbiddenItems.primewell, 1, 0))).setPages(new ResearchPage[] { new ResearchPage("forbidden.research_page.PRIMEWELL.1"), new ResearchPage((IArcaneRecipe) recipes.get("Primewell")) }).setParents(new String[] { "PRIMPEARL" }).setConcealed().registerResearchItem(); if (Config.emeraldTrans) (new DarkResearchItem("TRANSEMERALD", "FORBIDDEN", (new AspectList()).add(Aspect.CRYSTAL, 2).add(Aspect.EXCHANGE, 5).add(Aspect.GREED, 4), 0, -6, 3, new ItemStack(ForbiddenItems.resource, 1, 0))).setPages(new ResearchPage[] { new ResearchPage("forbidden.research_page.TRANSEMERALD.1"), new ResearchPage((CrucibleRecipe) recipes.get("TransEmerald")) }).setSecondary().setConcealed().setParents(new String[] { "TRANSGOLD" }).registerResearchItem(); diff --git a/src/main/java/fox/spiteful/forbidden/items/scribes/ItemCrystalwell.java b/src/main/java/fox/spiteful/forbidden/items/scribes/ItemCrystalwell.java index e5d93e9..0bac68d 100644 --- a/src/main/java/fox/spiteful/forbidden/items/scribes/ItemCrystalwell.java +++ b/src/main/java/fox/spiteful/forbidden/items/scribes/ItemCrystalwell.java @@ -3,16 +3,20 @@ package fox.spiteful.forbidden.items.scribes; import java.util.Iterator; import fox.spiteful.forbidden.Forbidden; +import fox.spiteful.forbidden.LogHandler; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; +import org.apache.logging.log4j.Level; import thaumcraft.api.IScribeTools; import thaumcraft.api.aspects.Aspect; import thaumcraft.common.Thaumcraft; +import thaumcraft.common.config.Config; import thaumcraft.common.config.ConfigItems; import thaumcraft.common.lib.network.PacketHandler; import thaumcraft.common.lib.network.playerdata.PacketAspectPool; @@ -67,6 +71,21 @@ public class ItemCrystalwell extends Item implements IScribeTools { return stack; } + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int wat, boolean isSelected) { + + if(world.isRemote) + return; + if(Config.researchDifficulty == -1 && entity.ticksExisted % 200 == 0 && (entity instanceof EntityPlayer)){ + EntityPlayer player = (EntityPlayer)entity; + Aspect aspect = (Aspect)Aspect.getPrimalAspects().get(world.rand.nextInt(6)); + short amount = (short)(world.rand.nextInt(4) + 1); + Thaumcraft.proxy.playerKnowledge.addAspectPool(player.getCommandSenderName(), aspect, amount); + PacketHandler.INSTANCE.sendTo(new PacketAspectPool(aspect.getTag(), amount, Short.valueOf(Thaumcraft.proxy.playerKnowledge.getAspectPoolFor(player.getCommandSenderName(), aspect))), (EntityPlayerMP) player); + ResearchManager.scheduleSave(player); + } + } + /** * Render Pass sensitive version of hasEffect() */ diff --git a/src/main/resources/assets/forbidden/lang/en_US.lang b/src/main/resources/assets/forbidden/lang/en_US.lang index 0d173e9..768e80c 100644 --- a/src/main/resources/assets/forbidden/lang/en_US.lang +++ b/src/main/resources/assets/forbidden/lang/en_US.lang @@ -331,6 +331,7 @@ forbidden.research_page.BLOODRAPIER.1=There's nothing more dangerous than a Bloo forbidden.research_name.CRYSTALWELL=Crystal Scribing Tools forbidden.research_text.CRYSTALWELL=Arcane Research Grant forbidden.research_page.CRYSTALWELL.1=Combining elemental shards with your inkwell results in some interesting effects. The Crystal Scribing Tools seem to absorb knowledge as you use them to write. Once the well is empty of ink, you can absorb this knowledge for a small burst of research points by holding the tools in your hand and right clicking. Unfortunately, this burns the tool out and turns it back into a mundane Scribing Tool again. +forbidden.research_page.CRYSTALWELL.1b=Research can get boring and tedious sometimes. There's only so many hours you can spend taking apart bits of cobblestone in the sad hope of finding esoteric insights before you start considering a change in careers.

Thankfully, you've devised a way to expedite the process. The Crystal Scribing Tools will slowly transmit knowledge into your mind while carried around.

It's amazing what you can do with crystals! # forbidden.research_name.PRIMEWELL=Primal Scribing Tools forbidden.research_text.PRIMEWELL=Bragging Rights diff --git a/src/main/resources/assets/forbidden/textures/misc/forbidden.png b/src/main/resources/assets/forbidden/textures/misc/forbidden.png index 1ae535d733c04af40abe8e32ae47615aa10c487d..bdec250209af16952a0229bcd439cb174e18327a 100644 GIT binary patch literal 4492 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 e^z!rn*8UCZx*JYPn8sxQ0000N2bPDNB8 zb~7$DE-^7j^FlWO00R9swGbfwl z%!%`y-rZ+&Fkv-unYJRHKEBT0cAr7r=fd6&j*~@*)c+y6ZLoJ{lhy79)tZlGSd?^= zvZb-?+4PnRWQ-J@xJs`*!ZI@wqAwsh-(osV7}hF`24#Xmk!O5`c3Q(W14{WOz62$) zhnIFaIhjgGT0;IkwyQH9H|bTfQht%Z%kt54g4<^`Zp@ddMOnsvlWsMZ^)NYg>;(O0 zYXQ(RCcR;owp22z+Z1${yZeIQ-zmahm$?6SA{Cf4qavx4#&mT|6om^w%GOz38?lyD zs09XD&7tF_`0=_5U*-7z;|6}wBx#iJ42_+Bk7}v304TaftDUgcT4JzLBw1QwSWfZB zYl6Su65PM4QL@YQ>LH#~usa;kC>0lgtn|FSHYN!&w3l2;Zk=2E7C&DT{Q0ur-E)G( z(q&RvTF{wpO{hfv0+4oew$_KT*LBw0A%no9Xe*pu5&UvhuoVile1>X1Le&hmHg+T+ zUH}SNot=$7aag5OEzt2S@~WVm7JPV7S6R{45`(ZnP1$c z*Uukqqd7Ay8!unsg-e(D=F3lc^w~WgKYX8Gzqre958va_gM0k+`3HRa^#gwR?h_84 z?H{#pIMZ@DREmW%H?GXNJ-@)4FP`Vl{3-6dbedb24|rpKz|HGdxcU0?TzmE0;WGUL XjetN5mb#>}00000NkvXXu0mjfyVsw<