Fruitful work on .txt document parser

This commit is contained in:
WayofTime 2015-02-14 21:37:47 -05:00
parent 815dc167dd
commit 1c806c4328
13 changed files with 557 additions and 17 deletions

View file

@ -9,14 +9,14 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import WayofTime.alchemicalWizardry.common.rituals.*;
import cpw.mods.fml.common.*;
import cpw.mods.fml.common.event.*;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
@ -77,6 +77,7 @@ import WayofTime.alchemicalWizardry.common.alchemy.CombinedPotionRegistry;
import WayofTime.alchemicalWizardry.common.block.ArmourForge;
import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.UpgradedAltars;
import WayofTime.alchemicalWizardry.common.book.BUEntries;
import WayofTime.alchemicalWizardry.common.book.SpecialEntryRegistry;
import WayofTime.alchemicalWizardry.common.commands.CommandBind;
import WayofTime.alchemicalWizardry.common.commands.CommandSN;
import WayofTime.alchemicalWizardry.common.commands.CommandUnbind;
@ -141,6 +142,41 @@ import WayofTime.alchemicalWizardry.common.potion.PotionReciprocation;
import WayofTime.alchemicalWizardry.common.potion.PotionSoulFray;
import WayofTime.alchemicalWizardry.common.potion.PotionSoulHarden;
import WayofTime.alchemicalWizardry.common.renderer.AlchemyCircleRenderer;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAlphaPact;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAnimalGrowth;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAutoAlchemy;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectBiomeChanger;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectContainment;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectCrushing;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectDemonPortal;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectEllipsoid;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectEvaporation;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectExpulsion;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFeatheredEarth;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFeatheredKnife;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFlight;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectFullStomach;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectGrowth;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectHarvest;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectHealing;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectInterdiction;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectItemRouting;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectItemSuction;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectJumping;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLava;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLeap;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLifeConduit;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectMagnetic;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaStalling;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaTest;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSupression;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectUnbinding;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectVeilOfEvil;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWater;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWellOfSuffering;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeDefaultEarth;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeDefensiveEarth;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.cse.earth.CSEMeleeEnvironmentalEarth;
@ -240,8 +276,18 @@ import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer;
import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable;
import WayofTime.alchemicalWizardry.common.tileEntity.gui.GuiHandler;
import WayofTime.alchemicalWizardry.common.tweaker.MineTweakerIntegration;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
@ -625,12 +671,19 @@ public class AlchemicalWizardry
ItemStack magicalesStack = new ItemStack(ModItems.magicales);
//All crafting goes here
GameRegistry.addRecipe(sacrificialDaggerStack, "ggg", " dg", "i g", 'g', glassStack, 'd', goldIngotStack, 'i', ironIngotStack);
SpecialEntryRegistry.registerLatestIRecipe("sacrificialKnife");
GameRegistry.addRecipe(new ShapedBloodOrbRecipe(lavaCrystalStackCrafted, "glg", "lbl", "odo", 'g', glassStack, 'l', lavaBucketStack, 'b', weakBloodOrbStack, 'd', diamondStack, 'o', obsidianStack));
SpecialEntryRegistry.registerLatestIRecipe("lavaCrystal");
GameRegistry.addRecipe(new ShapedBloodOrbRecipe(waterSigilStackCrafted, "www", "wbw", "wow", 'w', waterBucketStack, 'b', blankSlateStack, 'o', weakBloodOrbStack));
SpecialEntryRegistry.registerLatestIRecipe("waterSigil");
GameRegistry.addRecipe(lavaSigilStackCrafted, "lml", "lbl", "lcl", 'l', lavaBucketStack, 'b', blankSlateStack, 'm', magmaCreamStack, 'c', lavaCrystalStack);
SpecialEntryRegistry.registerLatestIRecipe("lavaSigil");
GameRegistry.addRecipe(new ShapedBloodOrbRecipe(voidSigilStackCrafted, "ese", "ere", "eoe", 'e', emptyBucketStack, 'r', reinforcedSlateStack, 'o', apprenticeBloodOrbStack, 's', stringStack));
SpecialEntryRegistry.registerLatestIRecipe("voidSigil");
GameRegistry.addRecipe(bloodAltarStack, "s s", "scs", "gdg", 's', stoneStack, 'c', furnaceStack, 'd', diamondStack, 'g', goldIngotStack);
SpecialEntryRegistry.registerLatestIRecipe("bloodAltar");
GameRegistry.addRecipe(new ShapedBloodOrbRecipe(bloodRuneCraftedStack, "sss", "ror", "sss", 's', stoneStack, 'o', weakBloodOrbStack, 'r', blankSlateStack));
SpecialEntryRegistry.registerLatestIRecipe("blankRune");
GameRegistry.addRecipe(speedRuneStack, "sbs", "uru", "sbs", 'u', sugarStack, 's', stoneStack, 'r', bloodRuneStack, 'b', blankSlateStack);
GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 1), "sbs", "bob", "srs", 's', stoneStack, 'o', magicianBloodOrbStack, 'b', emptyBucketStack, 'r', new ItemStack(ModItems.imbuedSlate)));
GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.bloodRune, 1, 2), "sbs", "bob", "srs", 's', stoneStack, 'o', magicianBloodOrbStack, 'b', waterBucketStack, 'r', new ItemStack(ModItems.imbuedSlate)));
@ -1566,7 +1619,7 @@ public class AlchemicalWizardry
continue;
}
if(strLine.startsWith("//TITLE "))
if(strLine.startsWith("//TITLE ")) //New entry~
{
String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing
for(int i=0; i<strings.length; i++)
@ -1636,7 +1689,7 @@ public class AlchemicalWizardry
{
changePage = true;
}
if(changePage)
if(changePage) //Encode into current entry, then move to next entry
{
String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing
for(int i=0; i<strings.length; i++)

View file

@ -0,0 +1,21 @@
package WayofTime.alchemicalWizardry.book.entries;
import net.minecraft.item.crafting.IRecipe;
public class EntryCraftingRecipeCustomText extends EntryCraftingRecipe implements IEntryCustomText
{
public EntryCraftingRecipeCustomText(IRecipe recipes)
{
super(recipes);
}
@Override
public String getText()
{
return "";
}
@Override
public void setText(String str){}
}

View file

@ -0,0 +1,49 @@
package WayofTime.alchemicalWizardry.book.entries;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import WayofTime.alchemicalWizardry.book.classes.guide.GuiEntry;
public class EntryImageCustomText extends EntryImage implements IEntryCustomText
{
public EntryImageCustomText(String resource, int iconWidth, int iconHeight)
{
super(resource, iconWidth, iconHeight);
}
public EntryImageCustomText(String resource, int iconWidth, int iconHeight, String entryName)
{
super(resource, iconWidth, iconHeight, entryName);
}
public String str = "";
@Override
public String getText()
{
return str;
}
@Override
public void setText(String str)
{
this.str = str;
}
public void drawText(GuiEntry entry, int width, int height, int left, int top, EntityPlayer player, String key, int page, int mX, int mY)
{
int x, y;
if(this.entryName == null)
this.entryName = key;
String s = this.str;
x = left + width / 2 - 58;
y = (top + 15) + 65;
Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(true);
Minecraft.getMinecraft().fontRenderer.drawSplitString(s, x, y, 110, 0);
Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(false);
}
}

View file

@ -0,0 +1,38 @@
package WayofTime.alchemicalWizardry.book.entries;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import WayofTime.alchemicalWizardry.book.classes.guide.GuiEntry;
public class EntryTextCustomText extends EntryText implements IEntryCustomText
{
public String str = "";
@Override
public String getText()
{
return str;
}
@Override
public void setText(String str)
{
this.str = str;
}
@Override
public void draw(GuiEntry entry, int width, int height, int left, int top, EntityPlayer player, String key, int page, int mX, int mY){
int x, y;
if(this.entryName == null)
this.entryName = key;
String s = this.str;
x = left + width / 2 - 58;
y = (top + 15);
Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(true);
Minecraft.getMinecraft().fontRenderer.drawSplitString(s, x, y, 110, 0);
Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(false);
}
}

View file

@ -0,0 +1,7 @@
package WayofTime.alchemicalWizardry.book.entries;
public interface IEntryCustomText extends IEntry
{
public String getText();
public void setText(String str);
}

View file

@ -43,6 +43,7 @@ public class EntryRegistry
public static HashMap<String, Entry> basics = new HashMap<String, Entry>();
public static HashMap<String, Entry> rituals = new HashMap<String, Entry>();
public static HashMap<String, Entry> bloodUtils = new HashMap<String, Entry>();
public static HashMap<String, Entry> test = new HashMap();
public static Entry[] getEntriesInOrderForCategory(Category category)
{

View file

@ -1,6 +1,7 @@
package WayofTime.alchemicalWizardry.common.book;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.item.ItemStack;
@ -30,16 +31,20 @@ public class BUEntries
categoryRituals = new Category("Rituals", new ItemStack(ModItems.itemRitualDiviner), EnumType.ITEM);
catagoryArchitect = new Category("The Architect", new ItemStack(ModBlocks.blockAltar), EnumType.BLOCK);
categoryTest = new Category("Test", new ItemStack(ModItems.aether), EnumType.ITEM);
registerCategories();
}
public static Category categoryBasics;
public static Category categoryRituals;
public static Category catagoryArchitect;
public static Category categoryTest;
public void registerCategories(){
EntryRegistry.registerCategories(BUEntries.categoryBasics);
EntryRegistry.registerCategories(BUEntries.categoryRituals);
EntryRegistry.registerCategories(BUEntries.catagoryArchitect);
EntryRegistry.registerCategories(BUEntries.categoryTest);
}
public void initEntries()
@ -133,6 +138,8 @@ public class BUEntries
/** Debug */
debug = new Entry(new IEntry[]{new EntryText("Debug"), new EntryImage("bloodutils:textures/misc/screenshots/t1.png", 854, 480, "Debug")}, EnumChatFormatting.AQUA + "De" + EnumChatFormatting.RED + "bug", 1);
registerKeys();
registerEntries();
}
@ -251,6 +258,11 @@ public class BUEntries
public static Entry debug;
public void registerKeys()
{
}
public void registerEntries()
{
/* Architect */
@ -332,5 +344,17 @@ public class BUEntries
/** Debug */
EntryRegistry.registerEntry(BUEntries.categoryBasics, EntryRegistry.basics, BUEntries.debug);
this.registerCategory(BUEntries.categoryTest, EntryRegistry.test, BookParser.parseTextFile());
}
public void registerCategory(Category cat, HashMap<String, Entry> entryMap, List<Entry> entries)
{
for(Entry entry : entries)
{
EntryRegistry.registerEntry(cat, entryMap, entry);
}
}
}

View file

@ -0,0 +1,319 @@
package WayofTime.alchemicalWizardry.common.book;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.item.crafting.IRecipe;
import WayofTime.alchemicalWizardry.AlchemicalWizardry;
import WayofTime.alchemicalWizardry.book.compact.Entry;
import WayofTime.alchemicalWizardry.book.entries.EntryCraftingRecipeCustomText;
import WayofTime.alchemicalWizardry.book.entries.EntryImageCustomText;
import WayofTime.alchemicalWizardry.book.entries.EntryTextCustomText;
import WayofTime.alchemicalWizardry.book.entries.IEntryCustomText;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BookParser
{
@SideOnly(Side.CLIENT)
public static List<Entry> parseTextFile()
{
File textFiles = new File("config/BloodMagic/bookDocs");
ArrayList<Entry> entryList = new ArrayList();
//if(textFiles.exists())
{
try {
System.out.println("I am in an island of files!");
InputStream input = AlchemicalWizardry.class.getResourceAsStream("/assets/alchemicalwizardryBooks/books/book.txt");
Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(true);
if(input != null)
{
DataInputStream in = new DataInputStream(input);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
int defMaxLines = 16;
int maxLines = defMaxLines;
int currentPage = 0;
int pageIndex = 1;
String currentTitle = "aw.entry.Magnus";
String[] strings = new String[1];
strings[0] = "";
//New entry stuff
ArrayList<IEntryCustomText> iEntryList = new ArrayList();
IEntryCustomText currentIEntry = new EntryTextCustomText();
boolean lastPageWasSpecial = true;
int entriesPerPage = 14;
while ((strLine = br.readLine()) != null)
{
if(strLine.trim().isEmpty())
{
continue;
}
if(strLine.startsWith("//TITLE ")) //New entry~
{
lastPageWasSpecial = false;
String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing
for(int i=0; i<strings.length; i++)
{
newStrings[i] = strings[i];
}
if(currentPage != 0) /* New stuff */
{
currentIEntry.setText(strings[currentPage]);
iEntryList.add(currentIEntry);
Entry entry = new Entry(BookParser.getArrayForList(iEntryList), currentTitle, entryList.size() / entriesPerPage + 1);
entryList.add(entry);
iEntryList.clear();
currentIEntry = new EntryTextCustomText();
}
currentPage++;
newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1];
newStrings[currentPage] = "";
strings = newStrings;
pageIndex = 1;
String title = strLine.replaceFirst("//TITLE ", " ").trim();
currentTitle = title;
continue;
}else if(BookParser.containsSpecialInfo(strLine))
{
if(!strings[currentPage].isEmpty() || lastPageWasSpecial)
{
String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing
for(int i=0; i<strings.length; i++)
{
newStrings[i] = strings[i];
}
currentIEntry.setText(strings[currentPage]);
iEntryList.add(currentIEntry);
currentPage++;
newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1];
newStrings[currentPage] = "";
strings = newStrings;
}
currentIEntry = BookParser.getEntryForStringTitle(strLine);
maxLines = BookParser.getlineLimitForStringTitle(strLine, defMaxLines);
lastPageWasSpecial = true;
continue;
}
strLine = strLine.replace('”', '"').replace('“','"').replace("", "...").replace('', '\'').replace('', '-');
if(Minecraft.getMinecraft() != null && Minecraft.getMinecraft().fontRenderer != null)
{
List list = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strLine, 110);
if(list != null)
{
System.out.println("Number of lines: " + list.size());
}
}
String[] cutStrings = strLine.split(" ");
for(String word : cutStrings)
{
lastPageWasSpecial = true;
boolean changePage = false;
int length = word.length();
word = word.replace('\t', ' ');
List list = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage] + " " + word, 110);
if(list.size() > maxLines)
{
changePage = true;
}
if(changePage) //Encode into current entry, then move to next entry
{
String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing
for(int i=0; i<strings.length; i++)
{
newStrings[i] = strings[i];
}
currentIEntry.setText(strings[currentPage]);
iEntryList.add(currentIEntry);
currentIEntry = new EntryTextCustomText();
currentPage++;
newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1];
newStrings[currentPage] = word;
strings = newStrings;
pageIndex++;
maxLines = defMaxLines;
changePage = false;
}else
{
strings[currentPage] = strings[currentPage] + " " + word;
}
}
int currentLines = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage], 110).size();
while(Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage] + " ", 110).size() <= currentLines)
{
{
strings[currentPage] = strings[currentPage] + " ";
}
}
System.out.println("" + strLine);
}
strings[currentPage] = strings[currentPage];
//
currentIEntry.setText(strings[currentPage]);
iEntryList.add(currentIEntry);
Entry entry = new Entry(BookParser.getArrayForList(iEntryList), currentTitle, entryList.size() / entriesPerPage + 1);
entryList.add(entry);
iEntryList.clear();
//
File bmDirectory = new File("src/main/resources/assets/alchemicalwizardryBooks");
if(!bmDirectory.exists())
{
bmDirectory.mkdirs();
}
File file = new File(bmDirectory, "books.txt");
// if (file.exists() && file.length() > 3L)
// {
//
// }else
{
PrintWriter writer = new PrintWriter(file);
for(String stri : strings)
{
writer.println(stri);
}
writer.close();
}
//
}
Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(false);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return entryList;
}
public static IEntryCustomText[] getArrayForList(List<IEntryCustomText> list)
{
Object[] tempArray = list.toArray();
IEntryCustomText[] customTextArray = new IEntryCustomText[tempArray.length];
for(int i=0; i<tempArray.length; i++)
{
if(tempArray[i] instanceof IEntryCustomText)
{
customTextArray[i] = (IEntryCustomText)tempArray[i];
}
}
return customTextArray;
}
public static boolean containsSpecialInfo(String unparsedString)
{
return unparsedString.startsWith("//IMAGE") || unparsedString.startsWith("//CRAFTING");
}
public static IEntryCustomText getEntryForStringTitle(String unparsedString)
{
if(unparsedString.startsWith("//IMAGE ")) //Format is //IMAGE maxLines xSize ySize ImageString (optional)Title
{
String lines = unparsedString.replaceFirst("//IMAGE ", "");
String[] arguments = lines.split(" ");
if(arguments.length < 4)
{
return null;
}
int xSize = Integer.decode(arguments[1]);
int ySize = Integer.decode(arguments[2]);
if(arguments.length >= 5)
{
return new EntryImageCustomText(arguments[3], xSize, ySize, arguments[4]);
}else
{
return new EntryImageCustomText(arguments[3], xSize, ySize);
}
}else if(unparsedString.startsWith("//CRAFTING "))
{
String lines = unparsedString.replaceFirst("//CRAFTING ", "");
IRecipe recipe = SpecialEntryRegistry.getIRecipeForKey(lines);
if(recipe != null)
{
return new EntryCraftingRecipeCustomText(recipe);
}
}
return new EntryTextCustomText();
}
public static int getlineLimitForStringTitle(String unparsedString, int def)
{
if(unparsedString.startsWith("//IMAGE "))
{
String lines = unparsedString.replaceFirst("//IMAGE ", "");
String[] arguments = lines.split(" ");
if(arguments.length < 4)
{
return def;
}
return Integer.decode(arguments[0]);
}else if(unparsedString.startsWith("//CRAFTING "))
{
return 0;
}
return def;
}
}

View file

@ -0,0 +1,27 @@
package WayofTime.alchemicalWizardry.common.book;
import java.util.HashMap;
import java.util.Map;
import WayofTime.alchemicalWizardry.book.registries.RecipeRegistry;
import net.minecraft.item.crafting.IRecipe;
public class SpecialEntryRegistry
{
public static Map<String, IRecipe> recipeStringMap = new HashMap();
public static void registerIRecipeKey(IRecipe recipe, String key)
{
recipeStringMap.put(key, recipe);
}
public static IRecipe getIRecipeForKey(String str)
{
return recipeStringMap.get(str);
}
public static void registerLatestIRecipe(String key)
{
SpecialEntryRegistry.registerIRecipeKey(RecipeRegistry.getLatestCraftingRecipe(), key);
}
}

View file

@ -57,7 +57,7 @@ public class RitualEffectDemonPortal extends RitualEffect
if(reagentAmount < neededAmount)
{
reagentsFulfilled = false;
System.out.println("Reagents not fulfilled. Missing: " + ReagentRegistry.getKeyForReagent(reagent));
// System.out.println("Reagents not fulfilled. Missing: " + ReagentRegistry.getKeyForReagent(reagent));
int drainAmount = Math.min(drainRate, neededAmount - reagentAmount);
if(drainAmount <= 0)

View file

@ -619,7 +619,7 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui
PotionEffect regenEffect = player.getActivePotionEffect(Potion.regeneration);
if (regenEffect != null && regenEffect.getAmplifier() > 0)
{
if(AlchemicalWizardry.causeHungerChatMessage && player.getActivePotionEffect(Potion.hunger) != null)
if(AlchemicalWizardry.causeHungerChatMessage && player.getActivePotionEffect(Potion.hunger) == null)
{
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.altar.hunger")));
}

View file

@ -1,12 +1,12 @@
aw.entry.Magnus.1=
aw.entry.Your classic tragic backstory.1= My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some
aw.entry.Your classic tragic backstory.2=travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village. I was brought to a village nearby, where a magician named Magus helped tend to my wounds. The magic that he used was something that I had never seen before - it wasn't Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes
aw.entry.Your classic tragic backstory.3=were open, holding his finger to his lips. Fast-forward several years, and I have learned almost everything from Master Magus, being his third student ever to master his arts. Against his wishes, I have recorded my research and put several wards and spells on this book. So welcome, apprentice. I am known as The Architect, and I am a Blood Mage. It took several years of pestering before I managed to convince Magus to teach
aw.entry.Your classic tragic backstory.4=me. He kept on telling me that, "Magic that uses the life essence of living beings requires patience and preparation in order to master it. One false move, go a little past your natural endurance, and you may find yourself taking a nice vacation in Tartarus." The thing was, I wanted to go there - I had some unfinished business with the demons. The process that Magus originally constructed
aw.entry.Your classic tragic backstory.5=required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of "Equivalent Exchange," I managed to construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight!
aw.entry.The Blood Altar.1= To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master
aw.entry.The Blood Altar.2=Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand. The blood dissipated in a cloud of red swirls as I waited for the atoms of the diamond to shift and reform. There were a few moments where the particles turned gray, which meant that the altar was empty and I had to hurry to fill it. After the diamond burst in a shower of red particles, what finally
aw.entry.The Blood Altar.3=sat in the altar was a Weak Blood Orb.
aw.entry.Your classic tragic backstory.1= My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village. I was brought to a village nearby, where a magician
aw.entry.Your classic tragic backstory.2=named Magus helped tend to my wounds. The magic that he used was something that I had never seen before - it wasn't Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes were open, holding his finger to his lips. Fast-forward several years, and I have learned almost everything from Master Magus, being his third student ever to master his arts. Against his wishes, I have recorded
aw.entry.Your classic tragic backstory.3=my research and put several wards and spells on this book. So welcome, apprentice. I am known as The Architect, and I am a Blood Mage. It took several years of pestering before I managed to convince Magus to teach me. He kept on telling me that, "Magic that uses the life essence of living beings requires patience and preparation in order to master it. One false move, go a little past your natural endurance, and you may find
aw.entry.Your classic tragic backstory.4=yourself taking a nice vacation in Tartarus." The thing was, I wanted to go there - I had some unfinished business with the demons. The process that Magus originally constructed required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of "Equivalent Exchange," I managed to
aw.entry.Your classic tragic backstory.5=construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight!
aw.entry.The Blood Altar.1= //IMAGE 8 854 480 bloodutils:textures/misc/screenshots/t1.png //CRAFTING sacrificialKnife To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really
aw.entry.The Blood Altar.2=close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand. The blood dissipated in a cloud of red swirls as I waited for the atoms of the diamond to shift and reform. There were a few moments where the particles turned gray, which meant that the
aw.entry.The Blood Altar.3=altar was empty and I had to hurry to fill it. After the diamond burst in a shower of red particles, what finally sat in the altar was a Weak Blood Orb.
aw.entry.The Soul Network.1= One thing that I initially didn't understand was the overarching connection between the blood orb and myself. When I initially met Magus, I could see many sparkling strands branching off of him, flowing throughout his house and linking with intricate stones and runic drawings. I asked Magus about the strands, but he had no clue what I was talking about. It took three years of thorough research to finally find the answer, and when I
aw.entry.The Soul Network.2=brought my notes to him he was really impressed with what I have found. When you send power into the orb, the energy is transmitted from the strand connecting the orb and into the very soul of the person the orb is bound to. Similarly, and Magus managed to show this effect with several of his rituals, when you use something that drains energy it will drain the energy directly from the soul. The thing is that if you
aw.entry.The Soul Network.3=use an item whose owner has no energy left, the item will instead grab the requisite energy from the user of the item. Directly. From his or her life force. As such, the unit of measurement is called "Life Points," or LP. I experimented with this, and one heart equals 200 LP. I have christened this system to be the "Soul Network," and is used in all branches of Blood Magic indirectly. Sigils

View file

@ -1,5 +1,4 @@
//TITLE Your classic tragic backstory
//SPECIAL 8
My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village.
I was brought to a village nearby, where a magician named Magus helped tend to my wounds. The magic that he used was something that I had never seen before it wasnt Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes were open, holding his finger to his lips.
@ -10,6 +9,8 @@ It took several years of pestering before I managed to convince Magus to teach m
The process that Magus originally constructed required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of “Equivalent Exchange,” I managed to construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight!
//TITLE The Blood Altar
//IMAGE 8 854 480 bloodutils:textures/misc/screenshots/t1.png
//CRAFTING sacrificialKnife
To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand.