Fruitful work on .txt document parser
This commit is contained in:
parent
815dc167dd
commit
1c806c4328
|
@ -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++)
|
||||
|
|
|
@ -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){}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package WayofTime.alchemicalWizardry.book.entries;
|
||||
|
||||
public interface IEntryCustomText extends IEntry
|
||||
{
|
||||
public String getText();
|
||||
public void setText(String str);
|
||||
}
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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")));
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in a new issue