Work on The Alchemist book

This commit is contained in:
WayofTime 2016-07-20 21:08:53 -04:00
parent a037d71337
commit 4e7702290e
5 changed files with 156 additions and 79 deletions

View file

@ -0,0 +1,65 @@
package WayofTime.bloodmagic.compat.guideapi;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyCircleRenderer;
import WayofTime.bloodmagic.api.recipe.ShapedBloodOrbRecipe;
import WayofTime.bloodmagic.api.recipe.ShapelessBloodOrbRecipe;
import WayofTime.bloodmagic.api.registry.AlchemyArrayRecipeRegistry;
import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray;
import WayofTime.bloodmagic.compat.guideapi.page.recipeRenderer.ShapedBloodOrbRecipeRenderer;
import WayofTime.bloodmagic.compat.guideapi.page.recipeRenderer.ShapelessBloodOrbRecipeRenderer;
import amerifrance.guideapi.page.PageIRecipe;
public class BookUtils
{
public static PageAlchemyArray getAlchemyPage(String key)
{
ItemStack[] recipe = AlchemyArrayRecipeRegistry.getRecipeForArrayEffect(key);
if (recipe[0] != null)
{
ItemStack inputStack = recipe[0];
ItemStack catalystStack = recipe[1];
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack);
if (renderer != null)
{
return new PageAlchemyArray(renderer.arrayResource, inputStack, catalystStack);
}
}
return null;
}
public static PageAlchemyArray getAlchemyPage(ItemStack outputStack)
{
ItemStack[] recipe = AlchemyArrayRecipeRegistry.getRecipeForOutputStack(outputStack);
if (recipe[0] != null)
{
ItemStack inputStack = recipe[0];
ItemStack catalystStack = recipe[1];
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack);
if (renderer != null)
{
return new PageAlchemyArray(renderer.arrayResource, inputStack, catalystStack, outputStack);
}
}
return null;
}
public static PageIRecipe getPageForRecipe(IRecipe recipe)
{
if (recipe instanceof ShapedBloodOrbRecipe)
{
return new PageIRecipe(recipe, new ShapedBloodOrbRecipeRenderer((ShapedBloodOrbRecipe) recipe));
} else if (recipe instanceof ShapelessBloodOrbRecipe)
{
return new PageIRecipe(recipe, new ShapelessBloodOrbRecipeRenderer((ShapelessBloodOrbRecipe) recipe));
}
return new PageIRecipe(recipe);
}
}

View file

@ -35,7 +35,7 @@ public class GuideBloodMagic
public static void initCategories()
{
// guideBook.addCategory(new CategoryItemStack(CategoryAlchemy.buildCategory(), "guide.BloodMagic.category.alchemy", new ItemStack(ModItems.arcaneAshes)));
guideBook.addCategory(new CategoryItemStack(CategoryAlchemy.buildCategory(), "guide.BloodMagic.category.alchemy", new ItemStack(ModItems.arcaneAshes)));
guideBook.addCategory(new CategoryItemStack(CategoryArchitect.buildCategory(), "guide.BloodMagic.category.architect", new ItemStack(ModItems.sigilDivination)));
guideBook.addCategory(new CategoryItemStack(CategoryDemon.buildCategory(), "guide.BloodMagic.category.demon", new ItemStack(ModItems.bloodShard)));
guideBook.addCategory(new CategoryItemStack(CategoryRitual.buildCategory(), "guide.BloodMagic.category.ritual", new ItemStack(ModBlocks.ritualController)));

View file

@ -1,18 +1,68 @@
package WayofTime.bloodmagic.compat.guideapi.book;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe;
import WayofTime.bloodmagic.compat.guideapi.BookUtils;
import WayofTime.bloodmagic.compat.guideapi.entry.EntryText;
import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray;
import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe;
import WayofTime.bloodmagic.registry.ModItems;
import WayofTime.bloodmagic.util.helper.RecipeHelper;
import WayofTime.bloodmagic.util.helper.TextHelper;
import amerifrance.guideapi.api.IPage;
import amerifrance.guideapi.api.impl.abstraction.EntryAbstract;
import amerifrance.guideapi.api.util.PageHelper;
import amerifrance.guideapi.page.PageText;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class CategoryAlchemy
{
public static Map<ResourceLocation, EntryAbstract> buildCategory()
{
Map<ResourceLocation, EntryAbstract> entries = new LinkedHashMap<ResourceLocation, EntryAbstract>();
String keyBase = Constants.Mod.DOMAIN + "alchemy_";
String keyBase = "guide." + Constants.Mod.MODID + ".entry.alchemy.";
List<IPage> introPages = new ArrayList<IPage>();
introPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "intro" + ".info"), 370));
entries.put(new ResourceLocation(keyBase + "intro"), new EntryText(introPages, TextHelper.localize(keyBase + "intro"), true));
List<IPage> ashPages = new ArrayList<IPage>();
TartaricForgeRecipe ashRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(ModItems.arcaneAshes));
if (ashRecipe != null)
{
ashPages.add(new PageTartaricForgeRecipe(ashRecipe));
}
ashPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ash" + ".info"), 370));
entries.put(new ResourceLocation(keyBase + "ash"), new EntryText(ashPages, TextHelper.localize(keyBase + "ash"), true));
List<IPage> speedPages = new ArrayList<IPage>();
PageAlchemyArray speedRecipePage = BookUtils.getAlchemyPage("movement");
if (speedRecipePage != null)
{
speedPages.add(speedRecipePage);
}
ashPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "speed" + ".info"), 370));
entries.put(new ResourceLocation(keyBase + "speed"), new EntryText(speedPages, TextHelper.localize(keyBase + "speed"), true));
for (Entry<ResourceLocation, EntryAbstract> entry : entries.entrySet())
{
for (IPage page : entry.getValue().pageList)
{
if (page instanceof PageText)
{
((PageText) page).setUnicodeFlag(true);
}
}
}
return entries;
}

View file

@ -10,19 +10,14 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.ResourceLocation;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyCircleRenderer;
import WayofTime.bloodmagic.api.recipe.ShapedBloodOrbRecipe;
import WayofTime.bloodmagic.api.recipe.ShapelessBloodOrbRecipe;
import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe;
import WayofTime.bloodmagic.api.registry.AlchemyArrayRecipeRegistry;
import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry.AltarRecipe;
import WayofTime.bloodmagic.api.registry.OrbRegistry;
import WayofTime.bloodmagic.compat.guideapi.BookUtils;
import WayofTime.bloodmagic.compat.guideapi.entry.EntryText;
import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray;
import WayofTime.bloodmagic.compat.guideapi.page.PageAltarRecipe;
import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe;
import WayofTime.bloodmagic.compat.guideapi.page.recipeRenderer.ShapedBloodOrbRecipeRenderer;
import WayofTime.bloodmagic.compat.guideapi.page.recipeRenderer.ShapelessBloodOrbRecipeRenderer;
import WayofTime.bloodmagic.item.ItemComponent;
import WayofTime.bloodmagic.registry.ModBlocks;
import WayofTime.bloodmagic.registry.ModItems;
@ -77,7 +72,7 @@ public class CategoryArchitect
List<IPage> divinationPages = new ArrayList<IPage>();
PageAlchemyArray divinationRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilDivination));
PageAlchemyArray divinationRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilDivination));
if (divinationRecipePage != null)
{
divinationPages.add(divinationRecipePage);
@ -108,7 +103,7 @@ public class CategoryArchitect
IRecipe incenseRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.incenseAltar));
if (incenseRecipe != null)
{
incensePages.add(getPageForRecipe(incenseRecipe));
incensePages.add(BookUtils.getPageForRecipe(incenseRecipe));
}
incensePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "incense" + ".info.1"), 370));
@ -116,7 +111,7 @@ public class CategoryArchitect
IRecipe woodPathRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.pathBlock, 1, 0));
if (woodPathRecipe != null)
{
incensePages.add(getPageForRecipe(woodPathRecipe));
incensePages.add(BookUtils.getPageForRecipe(woodPathRecipe));
}
incensePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "incense" + ".info.2"), 370));
@ -127,7 +122,7 @@ public class CategoryArchitect
IRecipe runeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.bloodRune, 1, 0));
if (runeRecipe != null)
{
runePages.add(getPageForRecipe(runeRecipe));
runePages.add(BookUtils.getPageForRecipe(runeRecipe));
}
runePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bloodrune" + ".info.1"), 370));
@ -149,7 +144,7 @@ public class CategoryArchitect
IRecipe speedRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.bloodRune, 1, 1));
if (speedRecipe != null)
{
speedRunePages.add(getPageForRecipe(speedRecipe));
speedRunePages.add(BookUtils.getPageForRecipe(speedRecipe));
}
speedRunePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSpeed" + ".info.1"), 370));
@ -163,7 +158,7 @@ public class CategoryArchitect
waterPages.add(new PageTartaricForgeRecipe(waterRecipe));
}
PageAlchemyArray waterRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilWater));
PageAlchemyArray waterRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilWater));
if (waterRecipePage != null)
{
waterPages.add(waterRecipePage);
@ -180,7 +175,7 @@ public class CategoryArchitect
lavaPages.add(new PageTartaricForgeRecipe(lavaRecipe));
}
PageAlchemyArray lavaRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilLava));
PageAlchemyArray lavaRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilLava));
if (lavaRecipePage != null)
{
lavaPages.add(lavaRecipePage);
@ -194,7 +189,7 @@ public class CategoryArchitect
IRecipe lavaCrystalRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModItems.lavaCrystal));
if (lavaCrystalRecipe != null)
{
lavaCrystalPages.add(getPageForRecipe(lavaCrystalRecipe));
lavaCrystalPages.add(BookUtils.getPageForRecipe(lavaCrystalRecipe));
}
lavaCrystalPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lavaCrystal" + ".info.1"), 370));
@ -227,7 +222,7 @@ public class CategoryArchitect
IRecipe runeSacrificeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.bloodRune, 1, 3));
if (runeSacrificeRecipe != null)
{
runeSacrificePages.add(getPageForRecipe(runeSacrificeRecipe));
runeSacrificePages.add(BookUtils.getPageForRecipe(runeSacrificeRecipe));
}
runeSacrificePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSacrifice" + ".info.1"), 370));
@ -238,7 +233,7 @@ public class CategoryArchitect
IRecipe runeSelfSacrificeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.bloodRune, 1, 4));
if (runeSelfSacrificeRecipe != null)
{
runeSelfSacrificePages.add(getPageForRecipe(runeSelfSacrificeRecipe));
runeSelfSacrificePages.add(BookUtils.getPageForRecipe(runeSelfSacrificeRecipe));
}
runeSelfSacrificePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSelfSacrifice" + ".info.1"), 370));
@ -252,7 +247,7 @@ public class CategoryArchitect
holdingPages.add(new PageTartaricForgeRecipe(holdingRecipe));
}
PageAlchemyArray holdingRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilHolding));
PageAlchemyArray holdingRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilHolding));
if (holdingRecipePage != null)
{
holdingPages.add(holdingRecipePage);
@ -269,7 +264,7 @@ public class CategoryArchitect
airPages.add(new PageTartaricForgeRecipe(airRecipe));
}
PageAlchemyArray airRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilAir));
PageAlchemyArray airRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilAir));
if (airRecipePage != null)
{
airPages.add(airRecipePage);
@ -286,7 +281,7 @@ public class CategoryArchitect
voidPages.add(new PageTartaricForgeRecipe(voidRecipe));
}
PageAlchemyArray voidRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilVoid));
PageAlchemyArray voidRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilVoid));
if (voidRecipePage != null)
{
voidPages.add(voidRecipePage);
@ -303,7 +298,7 @@ public class CategoryArchitect
greenGrovePages.add(new PageTartaricForgeRecipe(greenGroveRecipe));
}
PageAlchemyArray greenGroveRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilGreenGrove));
PageAlchemyArray greenGroveRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilGreenGrove));
if (greenGroveRecipePage != null)
{
greenGrovePages.add(greenGroveRecipePage);
@ -320,7 +315,7 @@ public class CategoryArchitect
fastMinerPages.add(new PageTartaricForgeRecipe(fastMinerRecipe));
}
PageAlchemyArray fastMinerRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilFastMiner));
PageAlchemyArray fastMinerRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilFastMiner));
if (fastMinerRecipePage != null)
{
fastMinerPages.add(fastMinerRecipePage);
@ -337,7 +332,7 @@ public class CategoryArchitect
seerPages.add(new PageTartaricForgeRecipe(seerRecipe));
}
PageAlchemyArray seerRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilSeer));
PageAlchemyArray seerRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilSeer));
if (seerRecipePage != null)
{
seerPages.add(seerRecipePage);
@ -362,7 +357,7 @@ public class CategoryArchitect
IRecipe capacityRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.bloodRune, 1, 4));
if (capacityRecipe != null)
{
capacityPages.add(getPageForRecipe(capacityRecipe));
capacityPages.add(BookUtils.getPageForRecipe(capacityRecipe));
}
capacityPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "capacity" + ".info.1"), 370));
@ -373,7 +368,7 @@ public class CategoryArchitect
IRecipe displacementRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(ModBlocks.bloodRune, 1, 4));
if (displacementRecipe != null)
{
displacementPages.add(getPageForRecipe(displacementRecipe));
displacementPages.add(BookUtils.getPageForRecipe(displacementRecipe));
}
displacementPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "displacement" + ".info.1"), 370));
@ -387,7 +382,7 @@ public class CategoryArchitect
affinityPages.add(new PageTartaricForgeRecipe(affinityRecipe));
}
PageAlchemyArray affinityRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilElementalAffinity));
PageAlchemyArray affinityRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilElementalAffinity));
if (affinityRecipePage != null)
{
affinityPages.add(affinityRecipePage);
@ -404,7 +399,7 @@ public class CategoryArchitect
lampPages.add(new PageTartaricForgeRecipe(lampRecipe));
}
PageAlchemyArray lampRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilBloodLight));
PageAlchemyArray lampRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilBloodLight));
if (lampRecipePage != null)
{
lampPages.add(lampRecipePage);
@ -421,7 +416,7 @@ public class CategoryArchitect
magnetismPages.add(new PageTartaricForgeRecipe(magnetismRecipe));
}
PageAlchemyArray magnetismRecipePage = getAlchemyPage(new ItemStack(ModItems.sigilMagnetism));
PageAlchemyArray magnetismRecipePage = BookUtils.getAlchemyPage(new ItemStack(ModItems.sigilMagnetism));
if (magnetismRecipePage != null)
{
magnetismPages.add(magnetismRecipePage);
@ -443,53 +438,4 @@ public class CategoryArchitect
return entries;
}
public static PageAlchemyArray getAlchemyPage(String key)
{
ItemStack[] recipe = AlchemyArrayRecipeRegistry.getRecipeForArrayEffect(key);
if (recipe[0] != null)
{
ItemStack inputStack = recipe[0];
ItemStack catalystStack = recipe[1];
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack);
if (renderer != null)
{
return new PageAlchemyArray(renderer.arrayResource, inputStack, catalystStack);
}
}
return null;
}
public static PageAlchemyArray getAlchemyPage(ItemStack outputStack)
{
ItemStack[] recipe = AlchemyArrayRecipeRegistry.getRecipeForOutputStack(outputStack);
if (recipe[0] != null)
{
ItemStack inputStack = recipe[0];
ItemStack catalystStack = recipe[1];
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack);
if (renderer != null)
{
return new PageAlchemyArray(renderer.arrayResource, inputStack, catalystStack, outputStack);
}
}
return null;
}
public static PageIRecipe getPageForRecipe(IRecipe recipe)
{
if (recipe instanceof ShapedBloodOrbRecipe)
{
return new PageIRecipe(recipe, new ShapedBloodOrbRecipeRenderer((ShapedBloodOrbRecipe) recipe));
} else if (recipe instanceof ShapelessBloodOrbRecipe)
{
return new PageIRecipe(recipe, new ShapelessBloodOrbRecipeRenderer((ShapelessBloodOrbRecipe) recipe));
}
return new PageIRecipe(recipe);
}
}

View file

@ -117,4 +117,20 @@ guide.BloodMagic.entry.demon.lesser.info.2=I took a block of lapis, block of red
guide.BloodMagic.entry.demon.reactions.info=I woke up in a hospital bed today, aching something fierce. I opened my eyes and saw the dull magenta that made up the ceiling of the "Intense Curse" wing of the hospital in Veteres, which is the closest major city to our village. I wasn't exactly worried by this information: it more so puzzled me that I somehow ended up here while seemingly only covered in scrapes and bruises, plus a simple cast on my left leg. Someone must have cast an "Ossa Fracta" curse on me or something, since all it could be was a simple broken bone! \n\tWhen Magus came in with one of the nurses with a solemn face, I knew it was something more drastic. Apparently, one of my experiments with the new Lesser Tartaric gem rebounded and created a small but forceful explosion. That much I could understand easily enough, but that wasn't it: the mixture of obsidian, iron and diamond that I used coated my lower left leg, forming into a rigid shell that couldn't be removed. The cast that I had on my leg wasn't actually a cast, but some form of runic matrix covering the light-blue shell. \n\tCalmly, I asked what Magus thought, even though I was pretty sure what had occurred. "I think," he said, giving a side-long glance towards the nurse that was listening intently before looking back at me, "that it is simply some sort of residue that is diamond-based, which is the main reason we can't remove it. It is also laced with a bit of... otherworldly energy, which is the main reason that you are here instead of a bed at the local clinic - the Conglomerate is rather stringent about unknown energy directly contacting people, ever since the Eldritch Incident, so we had to make sure that there wasn't any issues."\n\t"I see..." Normally Magus doesn't bother much with formalities such as making sure that the Conglomerate is informed about unknown energies - I've been experimenting with Demon Will for quite a while, and it isn't like the Conglomerate came knocking on our door to have this magic registered. I won't go into much detail here, since I am not well versed in politics, but I know that Magus partakes in it only sparingly. This meant that the power from this Will concerned Magus a lot, perhaps through some of his past dealings...?\n\t"Ah well, enough about that for now," Magus said, rolling up the sleeves of his robes. "I tried to break the shell when I first saw it, obviously after checking what it was. It didn't have an effect last time, but now..."\n\tThere was a searing heat on my left leg, accompanied by a blinding red light as Magus cupped his hands on top of the blue shell. After what felt like an eternity, but what must have been only a couple of seconds, the shell started to crack and fracture, falling apart. Honestly, it was kind of anticlimactic. \n\tI tried to get up, but Magus pushed me back into the bed with a small shove. "Bella, you need to stay and rest. You can work with your research on the gems later." I was initially annoyed, but that soon passed as I had a lot of time to think. The only reason that Magus wasn't able to do the exact same thing earlier was probably because I still had my Tartaric gem on my person after the explosion. So whatever happened to my leg had to be directly tied to the demon Will, and as soon as my gem was taken the shell was able to be removed. It got me thinking...
guide.BloodMagic.entry.demon.sentientGem.info.1=After a few days of some "well needed bed rest," prescribed and enforced by Magus, I decided to do a bit of research primarily on the sentient equipment that I have made so far. There is just so much that I do not know about the sentient sword as well as Demon Will in general. Sure, we know some of the theory, but considering that Magus and I were the ones that developed the theory in the first place it is hard to tell how accurate it is.\n\tFor this, I needed to get creative. Magus told me that whenever he takes an apprentice, he insists that they must learn another form of magic alongside the research that he is doing. Tiberius offered for me to learn Botany, but I scoffed at the idea - a bunch of flowers weren't going to help me much when fighting demons!
guide.BloodMagic.entry.demon.sentientGem.info.2=The Sentient Armour Gem is a toggleable item that is used to equip and unequip your Sentient Armour. When you right-click with the gem while you have a minimum of 16 Demon Will in your inventory, your armour will be replaced with a set of Sentient Armour that copies all of the enchants from the armour that you replaced - when you activate the gem again, your original armour is returned to you. This also works when you have no armour on at all to begin with.\n\tThe Sentient Armour initially acts as a simple set of iron armour, yielding no additional abilities besides protection. Similarly to other sentient tools, however, the armour provides more protection when you have more Demon Will in your possession. This makes the protection provided really powerful when you have a large quantity of Demon Will accumulated. The downside to this is that every hit you take will syphon a small bit of Demon Will from your Tartaric gems, and if you get too low your armour will revert back to its original form. Could be bad!
guide.BloodMagic.entry.demon.routing.info=Item transport in Blood Magic comes from linking strands of Demonic Will between routing nodes, which act as conduits in order to transfer items from one inventory to another. To start off with, let us explain how each individual item works.\n\tEvery single routing system needs a Master Routing node, which acts as the brains of the system. An Input Routing node inputs items into your system, and an Output Routing node outputs items from your system, and a regular routing node doesn't have any special function.\n\tTo form a network, you need to shift-click a node with your Node Router and then shift click another node that you want to connect. This links the two nodes together. As long as a node can trace some form of route to another node (and if it is connected to a Master Routing node) they can "talk" to each other.\n\tAs a rule of thumb, items are pulled from an inventory next to an input node and are pushed into an inventory next to an output node. In order to set what goes where, a filter should be used. By clicking on one of the buttons in the node's interface you can select what goes into the inventory in the given direction (N indicates North, etc). If you place an Item Filter into the right-most slot of the node you can specify the quantities and types of items that the node may interact with based on the filter. If you set a filter on an input filter, you can only pull those types of items from the inventory (keeping at least the given amount if you specify a quantity). If you set a filter on an output filter, you can only push those types of items into the inventory, up to a max of the quantity specified.\n\tThere are four types of filters: \n\tPrecise - The item needs to be matched exactly, including NBT and metadata\n\tMod Item - The item matches if it is from one of the filered mods.\n\tIgnore NBT - The item filter does not take into account any NBT\n\tOre Dictionary - Any item that matches one of the ore dictionary references of the filters are allowed.\n\tIf you decrease the filter's amount to 0, you can set so that the filter allows "Everything," as in any amount, for that particular filter.
guide.BloodMagic.entry.demon.routing.info=Item transport in Blood Magic comes from linking strands of Demonic Will between routing nodes, which act as conduits in order to transfer items from one inventory to another. To start off with, let us explain how each individual item works.\n\tEvery single routing system needs a Master Routing node, which acts as the brains of the system. An Input Routing node inputs items into your system, and an Output Routing node outputs items from your system, and a regular routing node doesn't have any special function.\n\tTo form a network, you need to shift-click a node with your Node Router and then shift click another node that you want to connect. This links the two nodes together. As long as a node can trace some form of route to another node (and if it is connected to a Master Routing node) they can "talk" to each other.\n\tAs a rule of thumb, items are pulled from an inventory next to an input node and are pushed into an inventory next to an output node. In order to set what goes where, a filter should be used. By clicking on one of the buttons in the node's interface you can select what goes into the inventory in the given direction (N indicates North, etc). If you place an Item Filter into the right-most slot of the node you can specify the quantities and types of items that the node may interact with based on the filter. If you set a filter on an input filter, you can only pull those types of items from the inventory (keeping at least the given amount if you specify a quantity). If you set a filter on an output filter, you can only push those types of items into the inventory, up to a max of the quantity specified.\n\tThere are four types of filters: \n\tPrecise - The item needs to be matched exactly, including NBT and metadata\n\tMod Item - The item matches if it is from one of the filered mods.\n\tIgnore NBT - The item filter does not take into account any NBT\n\tOre Dictionary - Any item that matches one of the ore dictionary references of the filters are allowed.\n\tIf you decrease the filter's amount to 0, you can set so that the filter allows "Everything," as in any amount, for that particular filter.
# Alchemy Entries
guide.BloodMagic.entry.alchemy.intro=Introduction
guide.BloodMagic.entry.alchemy.ash=Arcane Ash
guide.BloodMagic.entry.alchemy.speed=Movement Array
# Alchemy Entry Texts
guide.BloodMagic.entry.alchemy.intro.info=My name is Vlad Highborn, and I am a Blood Mage. I have studied the intricate workings of alchemy and the process of "Equivalent Exchange," which governs all aspects of magic. Basically, you cannot create something from nothing, although many have tried when searching for a particular stone. That obviously didn't end well, because people are clamoring for a fake variant even today. Of course simply saying that I am an alchemist isn't enough, because one of the main things I do is study Blood Magic with The Ritual Master and The Architect, both of whom have achieved those titles by their own merits. Magus and Tiberius have been busy recording their own works over the years, although I don't think Magus has everything written down in a book I have yet to find any actual proof.\n\tMy book deals with all things alchemical in Blood Magic. From the uses of Arcane Ash to the intricate workings of the Alchemy Table, you will find everything you need to know about some of the more complex elements in the world. Not everything you need to know is in this book for a full understanding about Blood Magic, you will need to read the other entries in this entire tome.\n\tBut for now, I hope you enjoy my research notes. You shant find any lies between these covers.
guide.BloodMagic.entry.alchemy.ash.info=Arcane Ash is necessary in order to create alchemy arrays, powerful circles that are able to provide various effects. This ash is crafted using the Hellfire Forge and Demon Will, so if you are new to this concept please consult the “Demon Kin.” \n\tThe ash has a total of twenty uses before you need to craft another. When you right click on the ground (or a wall, though it will only render one direction), you will inscribe a simple circle out of ash. If you click on the ash again with an item, it will be “placed inside of the ash” assuming that this item is valid, the circle will change shape to represent that it is ready for the next item. If it doesnt change shape, then you did something wrong.\n\tOnce it has changed shape, you can then place in the secondary item. If this item matches with the first item, the circle will start rotating and performing different actions depending on the recipe it is working on. \n\tEvery non-crafting effect that can be performed using these arrays can be found in this book, and even if the recipe changes through 3rd party means it will show updated here. The items shown are the order they need to be placed in.
guide.BloodMagic.entry.alchemy.speed.info=
guide.BloodMagic.entry.alchemy..info=