Search in sources :

Example 1 with SoulSkill

use of net.silentchaos512.gems.lib.soul.SoulSkill in project SilentGems by SilentChaos512.

the class GuideBookGems method initChapters.

@SuppressWarnings("unused")
@Override
public void initChapters() {
    RecipeMaker rec = SilentGems.registry.recipes;
    // @formatter:off
    // Getting Started
    // Introduction
    new GuideChapter(this, "introduction", entryGettingStarted, new ItemStack(ModItems.gem, 1, SilentGems.random.nextInt(32)), 1000, new PageTextOnly(this, 1), new PageTextOnly(this, 2), new PageTextOnly(this, 3)).setSpecial();
    // Progression
    ItemStack flintPickaxe = ModItems.pickaxe.constructTool(false, new ItemStack(Items.FLINT));
    ToolHelper.setOriginalOwner(flintPickaxe, TOOL_OWNER_NAME);
    ItemStack flintPickaxeBroken = StackHelper.safeCopy(flintPickaxe);
    flintPickaxeBroken.setItemDamage(ToolHelper.getMaxDamage(flintPickaxeBroken));
    ItemStack ironTipUpgrade = new ItemStack(ModItems.tipUpgrade);
    ItemStack flintPickaxeIronTips = ModItems.tipUpgrade.applyToTool(flintPickaxe, ironTipUpgrade);
    ItemStack gravel = new ItemStack(Blocks.GRAVEL);
    ItemStack gemPickaxe = ModItems.pickaxe.constructTool(new ItemStack(Items.STICK), EnumGem.RUBY.getItem(), EnumGem.SAPPHIRE.getItem(), EnumGem.RUBY.getItem());
    ToolHelper.setOriginalOwner(gemPickaxe, TOOL_OWNER_NAME);
    ItemStack diamondTipUpgrade = new ItemStack(ModItems.tipUpgrade, 1, 2);
    ItemStack gemPickaxeDiamondTips = ModItems.tipUpgrade.applyToTool(gemPickaxe, diamondTipUpgrade);
    ItemStack katana = ModItems.katana.constructTool(true, EnumGem.LEPIDOLITE.getItemSuper(), EnumGem.OPAL.getItemSuper(), EnumGem.BLACK_DIAMOND.getItemSuper());
    ToolHelper.setOriginalOwner(katana, TOOL_OWNER_NAME);
    new GuideChapter(this, "progression", entryGettingStarted, flintPickaxeIronTips, 100, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapeless(new ItemStack(Items.FLINT), gravel, gravel)), new PageCrafting(this, 3, rec.makeShapedOre(flintPickaxe, "fff", " s ", " s ", 'f', Items.FLINT, 's', "stickWood")), new PageTextOnly(this, 4), new PageCrafting(this, 5, rec.makeShapeless(flintPickaxe, flintPickaxeBroken, Items.FLINT, Items.FLINT)), new PageTextOnly(this, 6), new PageCrafting(this, 7, rec.makeShapelessOre(flintPickaxeIronTips, flintPickaxe, ironTipUpgrade)), new PageCrafting(this, 8, rec.makeShapedOre(gemPickaxe, "rsr", " t ", " t ", 'r', EnumGem.RUBY.getItem(), 's', EnumGem.SAPPHIRE.getItem(), 't', "stickWood")), new PageTextOnly(this, 9), new PageCrafting(this, 10, rec.makeShapeless(gemPickaxeDiamondTips, gemPickaxe, diamondTipUpgrade)), new PageTextOnly(this, 11), new PageCrafting(this, 12, rec.makeShapedOre(katana, "lo", "d ", "r ", 'l', EnumGem.LEPIDOLITE.getItemSuper(), 'o', EnumGem.OPAL.getItemSuper(), 'd', EnumGem.BLACK_DIAMOND.getItemSuper(), 'r', ModItems.craftingMaterial.toolRodGold)), new PageTextOnly(this, 13)).setImportant();
    // Tools, Armor, and Parts
    // Parts
    // List<IGuidePage> pagesParts = Lists.newArrayList();
    // pagesParts.add(new PageTextOnly(this, 1));
    // for (ToolPart part : ToolPartRegistry.getMains()) {
    // pagesParts.add(new PageToolPart(this, 0, part));
    // }
    // new GuideChapter(this, "toolParts", entryTools, EnumGem.getRandom().getItem(), 100,
    // pagesParts.toArray(new IGuidePage[pagesParts.size()]));
    // Axes
    ItemStack toolsEntryRod = SilentGems.random.nextFloat() < 0.67f ? ModItems.craftingMaterial.toolRodGold : ModItems.craftingMaterial.toolRodSilver;
    ItemStack chAxeGem = EnumGem.getRandom().getItemSuper();
    ItemStack chAxe = makeTool(ModItems.axe, toolsEntryRod, chAxeGem, 3);
    new GuideChapter(this, "axe", entryTools, chAxe, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chAxe, "gg", "gr", " r", 'g', chAxeGem, 'r', toolsEntryRod)).setNoText());
    // Bows
    ItemStack chBowGem = EnumGem.getRandom().getItemSuper();
    ItemStack chBow = makeTool(ModItems.bow, toolsEntryRod, chBowGem, 3);
    new GuideChapter(this, "bow", entryTools, chBow, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chBow, "rgs", "g s", "rgs", 'g', chBowGem, 'r', toolsEntryRod, 's', ModItems.craftingMaterial.gildedString)));
    // Daggers
    ItemStack chDaggerGem = EnumGem.getRandom().getItemSuper();
    ItemStack chDagger = makeTool(ModItems.dagger, toolsEntryRod, chDaggerGem, 1);
    new GuideChapter(this, "dagger", entryTools, chDagger, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chDagger, "g", "r", "f", 'g', chDaggerGem, 'r', toolsEntryRod, 'f', "ingotGold")));
    // Hoes
    ItemStack chHoeGem = EnumGem.getRandom().getItemSuper();
    ItemStack chHoe = makeTool(ModItems.hoe, toolsEntryRod, chHoeGem, 2);
    new GuideChapter(this, "hoe", entryTools, chHoe, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chHoe, "gg", " r", " r", 'g', chHoeGem, 'r', toolsEntryRod)).setNoText());
    // Katana
    ItemStack chKatanaGem = EnumGem.getRandom().getItemSuper();
    ItemStack chKatana = makeTool(ModItems.katana, toolsEntryRod, chKatanaGem, 3);
    new GuideChapter(this, "katana", entryTools, chKatana, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chKatana, "gg", "g ", "r ", 'g', chKatanaGem, 'r', toolsEntryRod)).setNoText());
    // Machetes
    ItemStack chMacheteGem = EnumGem.getRandom().getItemSuper();
    ItemStack chMachete = makeTool(ModItems.machete, toolsEntryRod, chMacheteGem, 3);
    new GuideChapter(this, "machete", entryTools, chMachete, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chMachete, " gg", " g ", "r  ", 'g', chMacheteGem, 'r', toolsEntryRod)).setNoText(), new PageTextOnly(this, 3), new PageTextOnly(this, 4));
    // Paxels
    ItemStack chPaxelGem = EnumGem.getRandom().getItemSuper();
    ItemStack chPaxel = makeTool(ModItems.paxel, toolsEntryRod, chPaxelGem, 6);
    new GuideChapter(this, "paxel", entryTools, chPaxel, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chPaxel, "ggg", "grg", "gr ", 'g', chPaxelGem, 'r', toolsEntryRod)).setNoText());
    // Pickaxes
    ItemStack chPickaxeGem = EnumGem.getRandom().getItemSuper();
    ItemStack chPickaxe = makeTool(ModItems.pickaxe, toolsEntryRod, chPickaxeGem, 3);
    new GuideChapter(this, "pickaxe", entryTools, chPickaxe, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chPickaxe, "ggg", " r ", " r ", 'g', chPickaxeGem, 'r', toolsEntryRod)).setNoText());
    // Scepters
    ItemStack chScepterGem = EnumGem.getRandom().getItemSuper();
    ItemStack chScepter = makeTool(ModItems.scepter, toolsEntryRod, chScepterGem, 5);
    new GuideChapter(this, "scepter", entryTools, chScepter, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chScepter, " g ", "grg", "grg", 'g', chScepterGem, 'r', toolsEntryRod)).setNoText(), new PageTextOnly(this, 3));
    ItemStack chShieldGem = EnumGem.getRandom().getItemSuper();
    ItemStack chShield = makeTool(ModItems.shield, toolsEntryRod, chShieldGem, 3);
    new GuideChapter(this, "shield", entryTools, chShield, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chShield, "gwg", "wrw", " g ", 'g', chShieldGem, 'r', toolsEntryRod, 'w', "plankWood")).setNoText());
    // Shovels
    ItemStack chShovelGem = EnumGem.getRandom().getItemSuper();
    ItemStack chShovel = makeTool(ModItems.shovel, toolsEntryRod, chShovelGem, 1);
    new GuideChapter(this, "shovel", entryTools, chShovel, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chShovel, "g", "r", "r", 'g', chShovelGem, 'r', toolsEntryRod)).setNoText());
    // Sickles
    ItemStack chSickleGem = EnumGem.getRandom().getItemSuper();
    ItemStack chSickle = makeTool(ModItems.sickle, toolsEntryRod, chSickleGem, 3);
    new GuideChapter(this, "sickle", entryTools, chSickle, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chSickle, " g", "gg", "r ", 'g', chSickleGem, 'r', toolsEntryRod)).setNoText());
    // Swords
    ItemStack chSwordGem = EnumGem.getRandom().getItemSuper();
    ItemStack chSword = makeTool(ModItems.sword, toolsEntryRod, chSwordGem, 2);
    new GuideChapter(this, "sword", entryTools, chSword, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chSword, "g", "g", "r", 'g', chSwordGem, 'r', toolsEntryRod)).setNoText());
    // Tomahawks
    ItemStack chTomahawkGem = EnumGem.getRandom().getItemSuper();
    ItemStack chTomahawk = makeTool(ModItems.tomahawk, toolsEntryRod, chTomahawkGem, 4);
    new GuideChapter(this, "tomahawk", entryTools, chTomahawk, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapedOre(chTomahawk, "ggg", "gr ", " r ", 'g', chTomahawkGem, 'r', toolsEntryRod)).setNoText());
    // Armor
    ItemStack chHelmetGem = EnumGem.getRandom().getItemSuper();
    ItemStack chHelmet = ModItems.gemHelmet.constructArmor(EnumMaterialTier.SUPER, chHelmetGem);
    ItemStack chHelmetFrame = ModItems.armorFrame.getFrameForArmorPiece(ModItems.gemHelmet, EnumMaterialTier.SUPER);
    ArmorHelper.setOriginalOwner(chHelmet, TOOL_OWNER_NAME);
    new GuideChapter(this, "armor", entryTools, chHelmet, -10, new PageTextOnly(this, 1), new PageCrafting(this, 2, ModItems.craftingMaterial.recipeLatticeMundane).setNoText(), new PageCrafting(this, 3, ModItems.craftingMaterial.recipeLatticeRegular).setNoText(), new PageCrafting(this, 4, ModItems.craftingMaterial.recipeLatticeSuper).setNoText(), new PageCrafting(this, 5, rec.makeShaped(chHelmetFrame, "lll", "l l", 'l', ModItems.craftingMaterial.armorLatticeSuper)), new PageCrafting(this, 6, rec.makeShapedOre(chHelmet, " g ", "gfg", " g ", 'g', chHelmetGem, 'f', chHelmetFrame)));
    // Blocks
    // Ores
    new GuideChapter(this, "ores", entryBlocks, new ItemStack(ModBlocks.gemOre, 1, SilentGems.random.nextInt(16)), 10, new PageTextOnly(this, 1), new PageOreSpawn(this, 2, GemsConfig.WORLD_GEN_GEMS), new PageOreSpawn(this, 3, GemsConfig.WORLD_GEN_GEMS_DARK), new PageOreSpawn(this, 4, GemsConfig.WORLD_GEN_CHAOS), new PageFurnace(this, 5, ModItems.craftingMaterial.chaosEssence), new PageOreSpawn(this, 6, GemsConfig.WORLD_GEN_ENDER), new PageFurnace(this, 7, ModItems.craftingMaterial.enderEssence)).setImportant();
    // Chaos Altar
    new GuideChapter(this, "chaosAltar", entryBlocks, new ItemStack(ModBlocks.chaosAltar), new PageCrafting(this, 1, ModBlocks.chaosAltar.recipe), new PageTextOnly(this, 2), new PageTextOnly(this, 3), new PageTextOnly(this, 4));
    // Chaos Flower Pot
    new GuideChapter(this, "chaosFlowerPot", entryBlocks, new ItemStack(ModBlocks.chaosFlowerPot), new PageCrafting(this, 1, ModBlocks.chaosFlowerPot.recipe), new PageTextOnly(this, 2));
    // Chaos Node
    new GuideChapter(this, "chaosNode", entryBlocks, new ItemStack(ModBlocks.chaosNode), new PagePicture(this, 1, new ResourceLocation(SilentGems.MODID, "textures/guide/chaosnode.png"), 125), new PageTextOnly(this, 2));
    // Chaos Pylons
    new GuideChapter(this, "chaosPylon", entryBlocks, new ItemStack(ModBlocks.chaosPylon), new PageTextOnly(this, 1), new PageTextOnly(this, 2));
    // Fluffy Blocks
    new GuideChapter(this, "fluffyBlocks", entryBlocks, new ItemStack(ModBlocks.fluffyBlock), new PageCrafting(this, 1, rec.makeShaped(new ItemStack(ModBlocks.fluffyBlock), "ff", "ff", 'f', ModItems.craftingMaterial.fluffyFabric)), new PageTextOnly(this, 2));
    // Glow Rose
    new GuideChapter(this, "glowRose", entryBlocks, new ItemStack(ModBlocks.glowRose), new PageTextOnly(this, 1));
    // Material Grader
    new GuideChapter(this, "materialGrader", entryBlocks, new ItemStack(ModBlocks.materialGrader), new PageTextOnly(this, 1));
    // Decorative Gem Blocks
    new GuideChapter(this, "gemDecoBlocks", entryBlocks, new ItemStack(ModBlocks.gemBrickCoated, 1, SilentGems.random.nextInt(16)), -10, new PageTextOnly(this, 1));
    // Items
    // Crafting Materials
    List<IGuidePage> pages = Lists.newArrayList();
    pages.add(new PageTextOnly(this, 1));
    for (String str : ItemCrafting.SORTED_NAMES) {
        ItemStack stack = ModItems.craftingMaterial.getStack(str);
        IRecipe recipe = ModItems.craftingMaterial.guideRecipeMap.get(stack.getItemDamage());
        if (stack.isItemEqual(ModItems.craftingMaterial.chaosEssence) || stack.isItemEqual(ModItems.craftingMaterial.enderEssence) || stack.isItemEqual(ModItems.craftingMaterial.chaosIron))
            pages.add(new PageFurnace(this, 100 + stack.getItemDamage(), stack));
        else if (recipe != null)
            pages.add(new PageCrafting(this, 100 + stack.getItemDamage(), recipe));
        else
            pages.add(new PageTextOnly(this, 100 + stack.getItemDamage()));
    }
    new GuideChapter(this, "craftingMaterial", entryItems, ModItems.craftingMaterial.chaosEssence, pages.toArray(new IGuidePage[pages.size()]));
    // Chaos Gems
    ItemStack chChaosGem = new ItemStack(ModItems.chaosGem, 1, EnumGem.getRandom().ordinal());
    ModItems.chaosGem.receiveCharge(chChaosGem, ModItems.chaosGem.getMaxCharge(chChaosGem), false);
    ItemStack chChaosGemWithBuffs = StackHelper.safeCopy(chChaosGem);
    ItemStack chChaosGemRuneStrength = new ItemStack(ModItems.chaosRune);
    ModItems.chaosRune.setBuff(chChaosGemRuneStrength, ChaosBuff.STRENGTH);
    ItemStack chChaosGemRuneResistance = new ItemStack(ModItems.chaosRune);
    ModItems.chaosRune.setBuff(chChaosGemRuneResistance, ChaosBuff.RESISTANCE);
    ModItems.chaosGem.addBuff(chChaosGemWithBuffs, ChaosBuff.STRENGTH);
    ModItems.chaosGem.addBuff(chChaosGemWithBuffs, ChaosBuff.STRENGTH);
    ModItems.chaosGem.addBuff(chChaosGemWithBuffs, ChaosBuff.RESISTANCE);
    ModItems.chaosGem.addBuff(chChaosGemWithBuffs, ChaosBuff.RESISTANCE);
    new GuideChapter(this, "chaosGem", entryItems, chChaosGem, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapeless(chChaosGemWithBuffs, chChaosGem, chChaosGemRuneStrength, chChaosGemRuneStrength, chChaosGemRuneResistance, chChaosGemRuneResistance)), new PageTextOnly(this, 3));
    // Chaos Orbs
    ItemStack chChaosOrb = new ItemStack(ModItems.chaosOrb, 1, ItemChaosOrb.Type.SUPREME.ordinal());
    ModItems.chaosOrb.receiveCharge(chChaosOrb, ModItems.chaosOrb.getMaxCharge(chChaosOrb), false);
    new GuideChapter(this, "chaosOrb", entryItems, chChaosOrb, new PageTextOnly(this, 1), new PageTextOnly(this, 2));
    // Drawing Compass
    ItemStack chDrawingCompass = new ItemStack(ModItems.drawingCompass);
    new GuideChapter(this, "drawingCompass", entryItems, chDrawingCompass, new PageTextOnly(this, 1), new PageTextOnly(this, 2));
    // Enchantment Tokens
    ItemStack chEnchantmentToken = new ItemStack(ModItems.enchantmentToken, 1, ItemEnchantmentToken.BLANK_META);
    ItemStack tokenSharpness = ModItems.enchantmentToken.constructToken(Enchantments.SHARPNESS);
    ItemStack chEnchantmentTokenPickaxe = ToolRandomizer.INSTANCE.randomize(new ItemStack(ModItems.pickaxe), 0.75f);
    ItemStack chEnchantmentTokenPickaxeEnchanted = StackHelper.safeCopy(chEnchantmentTokenPickaxe);
    ItemStack tokenUnbreaking = ModItems.enchantmentToken.constructToken(Enchantments.UNBREAKING);
    ItemStack tokenFortune = ModItems.enchantmentToken.constructToken(Enchantments.FORTUNE);
    for (int i = 0; i < 3; ++i) {
        ModItems.enchantmentToken.applyTokenToTool(tokenFortune, chEnchantmentTokenPickaxeEnchanted);
        ModItems.enchantmentToken.applyTokenToTool(tokenUnbreaking, chEnchantmentTokenPickaxeEnchanted);
    }
    new GuideChapter(this, "enchantmentToken", entryItems, chEnchantmentToken, new PageTextOnly(this, 1), new PageTextOnly(this, 2), new PageCrafting(this, 3, rec.makeShapedOre(new ItemStack(ModItems.enchantmentToken, 12, ItemEnchantmentToken.BLANK_META), "ggg", "lcl", "ggg", 'g', "ingotGold", 'l', "gemLapis", 'c', "gemChaos")), new PageCrafting(this, 4, rec.makeShapedOre(tokenSharpness, "r r", "fbf", "fff", 'r', "gemRuby", 'f', Items.FLINT, 'b', chEnchantmentToken)), new PageTextOnly(this, 5), new PageCrafting(this, 6, rec.makeShapeless(chEnchantmentTokenPickaxeEnchanted, chEnchantmentTokenPickaxe, tokenUnbreaking, tokenUnbreaking, tokenUnbreaking, tokenFortune, tokenFortune, tokenFortune)));
    // Fluffy Puffs
    new GuideChapter(this, "fluffyPuff", entryItems, new ItemStack(ModItems.fluffyPuff), new PageTextOnly(this, 1));
    // Gems
    EnumGem chGem = EnumGem.getRandom();
    ItemStack craftedShards = StackHelper.setCount(StackHelper.safeCopy(chGem.getShard()), 9);
    new GuideChapter(this, "gem", entryItems, chGem.getItem(), new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapelessOre(craftedShards, chGem.getItem())), new PageCrafting(this, 3, rec.makeShapedOre(chGem.getItemSuper(), "cgc", "cdc", "cgc", 'c', ModItems.craftingMaterial.chaosEssence, 'g', chGem.getItem(), 'd', "dustGlowstone")));
    // Holding Gem
    ItemStack chHoldingGem = ModItems.holdingGem.construct(EnumGem.getRandom());
    ItemStack chHoldingGemIcon = StackHelper.safeCopy(chHoldingGem);
    chHoldingGemIcon.setItemDamage(0);
    ItemStack chHoldingGemSet = StackHelper.safeCopy(chHoldingGem);
    ModItems.holdingGem.setBlockPlaced(chHoldingGemSet, Blocks.COBBLESTONE.getDefaultState());
    chHoldingGemSet.setItemDamage(chHoldingGemSet.getMaxDamage() - 1);
    new GuideChapter(this, "holdingGem", entryItems, chHoldingGemIcon, new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShapeless(chHoldingGemSet, chHoldingGem, new ItemStack(Blocks.COBBLESTONE))), new PageTextOnly(this, 3));
    // Tip upgrades
    ItemStack chTipUpgrade = new ItemStack(ModItems.tipUpgrade, 1, 2);
    pages = Lists.newArrayList();
    pages.add(new PageTextOnly(this, 1));
    pages.add(new PageTextOnly(this, 2));
    pages.add(new PageCrafting(this, 3, rec.makeShapelessOre(ModItems.craftingMaterial.upgradeBase, Items.FLINT, Items.FLINT, "stickWood", "plankWood")));
    for (IRecipe recipe : ItemTipUpgrade.RECIPES) {
        pages.add(new PageCrafting(this, 0, recipe).setNoText());
    }
    new GuideChapter(this, "tipUpgrade", entryItems, chTipUpgrade, pages.toArray(new IGuidePage[pages.size()]));
    // Torch Bandolier
    ItemStack chTorchBandolier = new ItemStack(ModItems.torchBandolier);
    new GuideChapter(this, "torchBandolier", entryItems, chTorchBandolier, new PageTextOnly(this, 1), new PageTextOnly(this, 2));
    /**
     *****************
     * Souls and Skills
     ******************
     */
    // Important Notice
    new GuideChapter(this, "soulsImportant", entrySouls, new ItemStack(Items.DIAMOND), new PageTextOnly(this, 1)).setImportant();
    // Tool Souls
    new GuideChapter(this, "toolSoul", entrySouls, new ItemStack(ModItems.toolSoul), new PageTextOnly(this, 1), new PageCrafting(this, 2, rec.makeShaped(new ItemStack(ModItems.toolSoul), " s ", "sds", " s ", 's', ModItems.soulGem, 'd', ModItems.craftingMaterial.soulShell)));
    // Soul Skills (includes a page for each skill!)
    pages = new ArrayList<>();
    pages.add(new PageTextOnly(this, 1));
    pages.add(new PageTextOnly(this, 2));
    for (SoulSkill skill : SoulSkill.getSkillList()) {
        pages.add(new PageSoulSkill(this, skill));
    }
    new GuideChapter(this, "soulSkills", entrySouls, new ItemStack(ModItems.skillOrb), pages.toArray(new IGuidePage[pages.size()]));
    // Enchantments
    // Gravity
    new GuideChapter(this, "enchantmentGravity", entryEnchantments, ModItems.enchantmentToken.constructToken(ModEnchantments.gravity), new PageTextOnly(this, 1));
    // Ice Aspect
    new GuideChapter(this, "enchantmentIceAspect", entryEnchantments, ModItems.enchantmentToken.constructToken(ModEnchantments.iceAspect), new PageTextOnly(this, 1));
    // Life Steal
    new GuideChapter(this, "enchantmentLifeSteal", entryEnchantments, ModItems.enchantmentToken.constructToken(ModEnchantments.lifeSteal), new PageTextOnly(this, 1), new PageTextOnly(this, 2));
    // Lightning Aspect
    new GuideChapter(this, "enchantmentLightningAspect", entryEnchantments, ModItems.enchantmentToken.constructToken(ModEnchantments.lightningAspect), new PageTextOnly(this, 1));
    // Magic Damage (Concentration)
    new GuideChapter(this, "enchantmentMagicDamage", entryEnchantments, ModItems.enchantmentToken.constructToken(ModEnchantments.magicDamage), new PageTextOnly(this, 1));
    if (entryDebug != null) {
        // Tool test
        new GuideChapter(this, "toolTest", entryDebug, ModItems.craftingMaterial.ironPotato, new PageDebugTool(this, 1), new PageDebugTool(this, 2));
    }
// @formatter:on
}
Also used : SoulSkill(net.silentchaos512.gems.lib.soul.SoulSkill) PageSoulSkill(net.silentchaos512.gems.guide.page.PageSoulSkill) IRecipe(net.minecraft.item.crafting.IRecipe) EnumGem(net.silentchaos512.gems.lib.EnumGem) PageFurnace(net.silentchaos512.lib.guidebook.page.PageFurnace) GuideChapter(net.silentchaos512.lib.guidebook.chapter.GuideChapter) PageOreSpawn(net.silentchaos512.gems.guide.page.PageOreSpawn) PageTextOnly(net.silentchaos512.lib.guidebook.page.PageTextOnly) PageSoulSkill(net.silentchaos512.gems.guide.page.PageSoulSkill) PageCrafting(net.silentchaos512.lib.guidebook.page.PageCrafting) ResourceLocation(net.minecraft.util.ResourceLocation) PagePicture(net.silentchaos512.lib.guidebook.page.PagePicture) ItemStack(net.minecraft.item.ItemStack) PageDebugTool(net.silentchaos512.gems.guide.page.PageDebugTool) RecipeMaker(net.silentchaos512.lib.registry.RecipeMaker) IGuidePage(net.silentchaos512.lib.guidebook.IGuidePage)

Example 2 with SoulSkill

use of net.silentchaos512.gems.lib.soul.SoulSkill in project SilentGems by SilentChaos512.

the class SoulSkill method selectSkillToLearn.

public static SoulSkill selectSkillToLearn(ToolSoul soul, ItemStack tool) {
    // if (soul.getLevel() == 5) {
    // return SUPER_SKILL;
    // }
    Map<SoulSkill, Double> candidates = new LinkedHashMap<>();
    // Create list of candidates
    for (SoulSkill skill : SKILL_LIST.values()) {
        if (skill.canLearn(soul, tool)) {
            boolean favorsElement = false;
            // Select a weight based on favored elements.
            double weight = skill.favoredElements.length < 1 ? 20 : 7;
            for (EnumSoulElement elem : skill.favoredElements) {
                if (elem == soul.getPrimaryElement()) {
                    weight = 20;
                    favorsElement = true;
                    break;
                } else if (elem == soul.getSecondaryElement()) {
                    weight = 15;
                    favorsElement = true;
                    break;
                }
            }
            // Favors certain tool types?
            if (skill.favoredType != EnumToolType.NONE) {
                EnumToolType toolType = tool.getItem() instanceof ITool ? ((ITool) tool.getItem()).getToolType() : tool.getItem() instanceof IArmor ? ((IArmor) tool.getItem()).getToolType() : EnumToolType.NONE;
                if (toolType == skill.favoredType) {
                    weight += 5;
                }
            }
            // If skill has a median level, apply that to the weight.
            if (skill.medianXpLevel > 0) {
                int diff = Math.abs(soul.level - skill.medianXpLevel);
                if (diff > 6) {
                    diff = 6;
                }
                weight -= 0.75 * diff;
            }
            // If a lower level of the skill is already known, reduce the weight.
            if (soul.skills.containsKey(skill)) {
                weight -= 2.5 * soul.skills.get(skill);
            }
            // Base weight diff, favors multiplier
            weight += skill.weightDiff;
            if (favorsElement) {
                weight *= skill.favorWeightMulti;
            }
            // Make sure weight is at least 1.
            if (weight < 1) {
                weight = 1;
            }
            candidates.put(skill, weight);
        }
    }
    // Seed based on soul elements, level, and tool UUID.
    Random rand = new Random(soul.getPrimaryElement().ordinal() + (soul.getSecondaryElement().ordinal() << 4) + (soul.getLevel() << 8) + (ToolHelper.getUUID(tool).getLeastSignificantBits() << 16));
    // Weighted random selection.
    SoulSkill selected = null;
    double bestValue = Double.MIN_VALUE;
    for (SoulSkill skill : candidates.keySet()) {
        double value = -Math.log(rand.nextFloat() / candidates.get(skill));
        SilentGems.logHelper.debug(skill.id, candidates.get(skill), value, bestValue);
        if (value > bestValue) {
            bestValue = value;
            selected = skill;
        }
    }
    return selected;
}
Also used : Random(java.util.Random) EnumToolType(net.silentchaos512.gems.lib.EnumToolType) EnumSoulElement(net.silentchaos512.gems.lib.soul.EnumSoulElement) ITool(net.silentchaos512.gems.api.ITool) IArmor(net.silentchaos512.gems.api.IArmor) LinkedHashMap(java.util.LinkedHashMap)

Example 3 with SoulSkill

use of net.silentchaos512.gems.lib.soul.SoulSkill in project SilentGems by SilentChaos512.

the class ToolSoul method readFromNBT.

public static ToolSoul readFromNBT(NBTTagCompound tags) {
    ToolSoul soul = new ToolSoul();
    soul.name = tags.getString("name");
    String e1 = tags.getString("element1");
    String e2 = tags.getString("element2");
    for (EnumSoulElement element : EnumSoulElement.values()) {
        if (element.name().equalsIgnoreCase(e1)) {
            soul.element1 = element;
        } else if (element.name().equalsIgnoreCase(e2)) {
            soul.element2 = element;
        }
    }
    soul.xp = tags.getInteger("xp");
    soul.level = tags.getInteger("level");
    soul.actionPoints = tags.getInteger("ap");
    // Load skills
    soul.skills.clear();
    NBTTagList tagList = tags.getTagList("skills", 10);
    for (int i = 0; i < tagList.tagCount(); ++i) {
        NBTTagCompound tagCompound = tagList.getCompoundTagAt(i);
        SoulSkill skill = SoulSkill.getById(tagCompound.getString("id"));
        if (skill != null) {
            int level = tagCompound.getShort("level");
            soul.skills.put(skill, level);
        }
    // Skills with unknown IDs are ignored!
    }
    return soul;
}
Also used : NBTTagList(net.minecraft.nbt.NBTTagList) ItemToolSoul(net.silentchaos512.gems.item.ItemToolSoul) NBTTagCompound(net.minecraft.nbt.NBTTagCompound)

Example 4 with SoulSkill

use of net.silentchaos512.gems.lib.soul.SoulSkill in project SilentGems by SilentChaos512.

the class ToolSoul method addInformation.

public void addInformation(ItemStack stack, World world, List<String> list, boolean advanced) {
    LocalizationHelper loc = SilentGems.localizationHelper;
    String color;
    // Level, XP, AP
    color = "" + TextFormatting.GREEN;
    list.add(color + loc.getMiscText("ToolSoul.level", level, xp, getXpToNextLevel()));
    list.add(color + loc.getMiscText("ToolSoul.actionPoints", actionPoints, getMaxActionPoints()));
    boolean skillsKeyDown = Keyboard.isKeyDown(Keyboard.KEY_S);
    if (skillsKeyDown || stack.getItem() instanceof ItemToolSoul) {
        // Display elements.
        String e1 = element1 == null ? "None" : element1.getDisplayName();
        String e2 = element2 == null ? "None" : element2.getDisplayName();
        String elements = e1 + (e2.equalsIgnoreCase("none") ? "" : ", " + e2);
        list.add(loc.getMiscText("ToolSoul.elements", elements));
    }
    if (skillsKeyDown) {
        // Display stat modifiers.
        color = "  " + TextFormatting.YELLOW;
        float durability = getDurabilityModifierForDisplay(this);
        float harvestSpeed = getHarvestSpeedModifierForDisplay(this);
        float meleeDamage = getMeleeDamageModifierForDisplay(this);
        float magicDamage = getMagicDamageModifierForDisplay(this);
        float protection = getProtectionModifierForDisplay(this);
        if (durability != 0f)
            list.add(color + TooltipHelper.getAsColoredPercentage("Durability", durability, 0, true));
        if (harvestSpeed != 0f)
            list.add(color + TooltipHelper.getAsColoredPercentage("HarvestSpeed", harvestSpeed, 0, true));
        if (meleeDamage != 0f)
            list.add(color + TooltipHelper.getAsColoredPercentage("MeleeDamage", meleeDamage, 0, true));
        if (magicDamage != 0f)
            list.add(color + TooltipHelper.getAsColoredPercentage("MagicDamage", magicDamage, 0, true));
        if (protection != 0f)
            list.add(color + TooltipHelper.getAsColoredPercentage("Protection", protection, 0, true));
        // Display skills.
        for (Entry<SoulSkill, Integer> entry : skills.entrySet()) {
            SoulSkill skill = entry.getKey();
            int level = entry.getValue();
            list.add("  " + skill.getLocalizedName(stack, level));
        }
    } else {
        list.add(TextFormatting.GOLD + loc.getMiscText("Tooltip.keyForSkills"));
    }
}
Also used : ItemToolSoul(net.silentchaos512.gems.item.ItemToolSoul) LocalizationHelper(net.silentchaos512.lib.util.LocalizationHelper)

Example 5 with SoulSkill

use of net.silentchaos512.gems.lib.soul.SoulSkill in project SilentGems by SilentChaos512.

the class ItemSkillOrb method getItemStackDisplayName.

@Override
public String getItemStackDisplayName(ItemStack stack) {
    LocalizationHelper loc = SilentGems.localizationHelper;
    SoulSkill skill = getSkill(stack);
    if (skill == null) {
        return getUnlocalizedName(stack);
    }
    return loc.getItemSubText(Names.SKILL_ORB, "name_proper", skill.getLocalizedName(StackHelper.empty(), 0));
}
Also used : SoulSkill(net.silentchaos512.gems.lib.soul.SoulSkill) LocalizationHelper(net.silentchaos512.lib.util.LocalizationHelper)

Aggregations

SoulSkill (net.silentchaos512.gems.lib.soul.SoulSkill)4 LocalizationHelper (net.silentchaos512.lib.util.LocalizationHelper)3 UUID (java.util.UUID)2 ItemStack (net.minecraft.item.ItemStack)2 IArmor (net.silentchaos512.gems.api.IArmor)2 ITool (net.silentchaos512.gems.api.ITool)2 ItemToolSoul (net.silentchaos512.gems.item.ItemToolSoul)2 ToolSoul (net.silentchaos512.gems.lib.soul.ToolSoul)2 LinkedHashMap (java.util.LinkedHashMap)1 Random (java.util.Random)1 IRecipe (net.minecraft.item.crafting.IRecipe)1 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)1 NBTTagList (net.minecraft.nbt.NBTTagList)1 ActionResult (net.minecraft.util.ActionResult)1 EnumActionResult (net.minecraft.util.EnumActionResult)1 ResourceLocation (net.minecraft.util.ResourceLocation)1 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)1 PageDebugTool (net.silentchaos512.gems.guide.page.PageDebugTool)1 PageOreSpawn (net.silentchaos512.gems.guide.page.PageOreSpawn)1 PageSoulSkill (net.silentchaos512.gems.guide.page.PageSoulSkill)1