diff --git a/src/main/java/vazkii/botania/api/lexicon/multiblock/Multiblock.java b/src/main/java/vazkii/botania/api/lexicon/multiblock/Multiblock.java index e48e9eaf5..0fb0413e1 100644 --- a/src/main/java/vazkii/botania/api/lexicon/multiblock/Multiblock.java +++ b/src/main/java/vazkii/botania/api/lexicon/multiblock/Multiblock.java @@ -29,12 +29,15 @@ public class Multiblock { public List components = new ArrayList(); + public int minX, minY, minZ, maxX, maxY, maxZ, offX, offY, offZ; + /** * Adds a multiblock component to this multiblock. The component's x y z * coords should be pivoted to the center of the structure. */ public void addComponent(MultiblockComponent component) { components.add(component); + changeAxisForNewComponent(component.relPos.posX, component.relPos.posY, component.relPos.posZ); } /** @@ -42,7 +45,30 @@ public class Multiblock { * coords should be pivoted to the center of the structure. */ public void addComponent(int x, int y, int z, Block block, int meta) { - components.add(new MultiblockComponent(new ChunkCoordinates(x, y, z), block, meta)); + addComponent(new MultiblockComponent(new ChunkCoordinates(x, y, z), block, meta)); + } + + private void changeAxisForNewComponent(int x, int y, int z) { + if(x < minX) + minX = x; + else if(x > maxX) + maxX = x; + + if(y < minY) + minY = y; + else if(y > maxY) + maxY = y; + + if(z < minZ) + minZ = z; + else if(z > maxZ) + maxZ = z; + } + + public void setRenderOffset(int x, int y, int z) { + offX = x; + offY = y; + offZ = z; } public List getComponents() { @@ -92,4 +118,16 @@ public class Multiblock { return new MultiblockSet(this); } + public int getXSize() { + return Math.abs(minX) + Math.abs(maxX) + 1; + } + + public int getYSize() { + return Math.abs(minY) + Math.abs(maxY) + 1; + } + + public int getZSize() { + return Math.abs(minZ) + Math.abs(maxZ) + 1; + } + } diff --git a/src/main/java/vazkii/botania/client/core/handler/MultiblockRenderHandler.java b/src/main/java/vazkii/botania/client/core/handler/MultiblockRenderHandler.java index 0ed20e426..7e576d31d 100644 --- a/src/main/java/vazkii/botania/client/core/handler/MultiblockRenderHandler.java +++ b/src/main/java/vazkii/botania/client/core/handler/MultiblockRenderHandler.java @@ -49,9 +49,6 @@ public final class MultiblockRenderHandler { } private void renderPlayerLook(EntityPlayer player, MovingObjectPosition src) { - //if(currentMultiblock == null) // TODO Remove debug - currentMultiblock = ModMultiblocks.gaiaRitual; - if(currentMultiblock != null) { Multiblock mb = currentMultiblock.getForEntity(player); for(MultiblockComponent comp : mb.getComponents()) @@ -73,7 +70,6 @@ public final class MultiblockRenderHandler { if(IMultiblockRenderHook.renderHooks.containsKey(block)) IMultiblockRenderHook.renderHooks.get(block).renderBlockForMultiblock(world, mb, block, comp.getMeta(), blockRender); else blockRender.renderBlockAsItem(comp.getBlock(), comp.getMeta(), 1F); - GL11.glPopMatrix(); } diff --git a/src/main/java/vazkii/botania/client/lib/LibResources.java b/src/main/java/vazkii/botania/client/lib/LibResources.java index 1859c0a19..6781bc598 100644 --- a/src/main/java/vazkii/botania/client/lib/LibResources.java +++ b/src/main/java/vazkii/botania/client/lib/LibResources.java @@ -36,6 +36,7 @@ public final class LibResources { public static final String GUI_TERRASTEEL_OVERLAY = PREFIX_GUI + "terrasteelOverlay.png"; public static final String GUI_ELVEN_TRADE_OVERLAY = PREFIX_GUI + "elvenTradeOverlay.png"; public static final String GUI_SHEDDING_OVERLAY = PREFIX_GUI + "sheddingOverlay.png"; + public static final String GUI_MULTIBLOCK_OVERLAY = PREFIX_GUI + "multiblockOverlay.png"; public static final String GUI_CREATIVE = "botania.png"; public static final String GUI_TOFF = PREFIX_GUI + "toff.png"; public static final String GUI_BOSS_BAR = PREFIX_GUI + "bossBar.png"; @@ -50,18 +51,8 @@ public final class LibResources { public static final String ENTRY_SPREADER = PREFIX_ENTRIES + "spreader.png"; public static final String ENTRY_UNSTABLE_BLOCK = PREFIX_ENTRIES + "unstableBlock.png"; public static final String ENTRY_UNSTABLE_BEACON = PREFIX_ENTRIES + "unstableBeacon.png"; - public static final String ENTRY_ENCHANTER0 = PREFIX_ENTRIES + "enchanter0.png"; - public static final String ENTRY_ENCHANTER1 = PREFIX_ENTRIES + "enchanter1.png"; - public static final String ENTRY_ENCHANTER2 = PREFIX_ENTRIES + "enchanter2.png"; - public static final String ENTRY_ENCHANTER3 = PREFIX_ENTRIES + "enchanter3.png"; public static final String ENTRY_BAUBLES = PREFIX_ENTRIES + "baubles.png"; - public static final String ENTRY_PORTAL0 = PREFIX_ENTRIES + "portal0.png"; - public static final String ENTRY_PORTAL1 = PREFIX_ENTRIES + "portal1.png"; - public static final String ENTRY_PORTAL2 = PREFIX_ENTRIES + "portal2.png"; - public static final String ENTRY_PORTAL3 = PREFIX_ENTRIES + "portal3.png"; - public static final String ENTRY_PORTAL4 = PREFIX_ENTRIES + "portal4.png"; public static final String ENTRY_ELVEN_GARDE = PREFIX_ENTRIES + "elvenGarde.png"; - public static final String ENTRY_GAIA_RITUAL = PREFIX_ENTRIES + "gaiaRitual.png"; public static final String ENTRY_DIMINISHING_RETURNS = PREFIX_ENTRIES + "diminishingReturns.png"; public static final String ENTRY_HYDROANGEAS = PREFIX_ENTRIES + "hydroangeas.png"; public static final String ENTRY_CRAFT_CRATE = PREFIX_ENTRIES + "craftCrate.png"; diff --git a/src/main/java/vazkii/botania/common/block/tile/TileAlfPortal.java b/src/main/java/vazkii/botania/common/block/tile/TileAlfPortal.java index d66c6d1f7..2ea8a986a 100644 --- a/src/main/java/vazkii/botania/common/block/tile/TileAlfPortal.java +++ b/src/main/java/vazkii/botania/common/block/tile/TileAlfPortal.java @@ -108,7 +108,8 @@ public class TileAlfPortal extends TileMod { mb.addComponent(-p[0], p[1] + 1, -p[2], ModBlocks.pool, 0); mb.addComponent(0, 1, 0, ModBlocks.alfPortal, 0); - + mb.setRenderOffset(0, -1, 0); + return mb.makeSet(); } diff --git a/src/main/java/vazkii/botania/common/block/tile/TileTerraPlate.java b/src/main/java/vazkii/botania/common/block/tile/TileTerraPlate.java index 1f3170734..c891dc9d7 100644 --- a/src/main/java/vazkii/botania/common/block/tile/TileTerraPlate.java +++ b/src/main/java/vazkii/botania/common/block/tile/TileTerraPlate.java @@ -55,7 +55,8 @@ public class TileTerraPlate extends TileMod implements ISparkAttachable { mb.addComponent(l[0], 0, l[1], ModBlocks.livingrock, 0); mb.addComponent(0, 1, 0, ModBlocks.terraPlate, 0); - + mb.setRenderOffset(0, 1, 0); + return mb.makeSet(); } diff --git a/src/main/java/vazkii/botania/common/entity/EntityDoppleganger.java b/src/main/java/vazkii/botania/common/entity/EntityDoppleganger.java index 39ccf2f8d..52ed365c3 100644 --- a/src/main/java/vazkii/botania/common/entity/EntityDoppleganger.java +++ b/src/main/java/vazkii/botania/common/entity/EntityDoppleganger.java @@ -122,6 +122,7 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi mb.addComponent(i - 1, 0, j - 1, Blocks.iron_block, 0); mb.addComponent(0, 1, 0, Blocks.beacon, 0); + mb.setRenderOffset(0, -1, 0); return mb.makeSet(); } diff --git a/src/main/java/vazkii/botania/common/lexicon/LexiconData.java b/src/main/java/vazkii/botania/common/lexicon/LexiconData.java index 5d56addf5..2bc30450e 100644 --- a/src/main/java/vazkii/botania/common/lexicon/LexiconData.java +++ b/src/main/java/vazkii/botania/common/lexicon/LexiconData.java @@ -25,6 +25,7 @@ import vazkii.botania.api.lexicon.LexiconRecipeMappings; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.Botania; import vazkii.botania.common.block.ModBlocks; +import vazkii.botania.common.block.ModMultiblocks; import vazkii.botania.common.brew.ModBrews; import vazkii.botania.common.core.handler.ConfigHandler; import vazkii.botania.common.core.handler.SheddingHandler; @@ -45,6 +46,7 @@ import vazkii.botania.common.lexicon.page.PageGuide; import vazkii.botania.common.lexicon.page.PageImage; import vazkii.botania.common.lexicon.page.PageLoreText; import vazkii.botania.common.lexicon.page.PageManaInfusionRecipe; +import vazkii.botania.common.lexicon.page.PageMultiblock; import vazkii.botania.common.lexicon.page.PagePetalRecipe; import vazkii.botania.common.lexicon.page.PageRuneRecipe; import vazkii.botania.common.lexicon.page.PageTerrasteel; @@ -309,7 +311,7 @@ public final class LexiconData { new PageRuneRecipe("13", ModRuneRecipes.recipeLustRune), new PageRuneRecipe("14", ModRuneRecipes.recipeGluttonyRune), new PageRuneRecipe("15", ModRuneRecipes.recipeGreedRune), new PageRuneRecipe("16", ModRuneRecipes.recipeSlothRune), new PageRuneRecipe("17", ModRuneRecipes.recipeWrathRune), new PageRuneRecipe("18", ModRuneRecipes.recipeEnvyRune), new PageRuneRecipe("19", ModRuneRecipes.recipePrideRune)); terrasteel = new BLexiconEntry(LibLexicon.BASICS_TERRASTEEL, categoryBasics); - terrasteel.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeTerraPlate), new PageText("2"), new PageTerrasteel("3")).setIcon(new ItemStack(ModItems.manaResource, 1, 4)); + terrasteel.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeTerraPlate), new PageText("2"), new PageMultiblock("4", ModMultiblocks.terrasteelPlate), new PageTerrasteel("3")).setIcon(new ItemStack(ModItems.manaResource, 1, 4)); blackLotus = new BLexiconEntry(LibLexicon.BASICS_BLACK_LOTUS, categoryBasics); blackLotus.setLexiconPages(new PageText("0")).setIcon(new ItemStack(ModItems.blackLotus)); @@ -526,9 +528,7 @@ public final class LexiconData { if(ConfigHandler.enchanterEnabled) { manaEnchanting = new BLexiconEntry(LibLexicon.DEVICE_MANA_ENCHANTING, categoryDevices); - manaEnchanting.setLexiconPages(new PageText("0"), new PageText("1"), - new PageImage("2", LibResources.ENTRY_ENCHANTER0), new PageImage("3", LibResources.ENTRY_ENCHANTER1), new PageImage("4", LibResources.ENTRY_ENCHANTER2), new PageImage("5", LibResources.ENTRY_ENCHANTER3), - new PageText("6"), new PageText("7"), new PageText("8"), new PageText("9"), new PageText("10")).setIcon(new ItemStack(ModBlocks.enchanter)); + manaEnchanting.setLexiconPages(new PageText("0"), new PageText("1"), new PageMultiblock("2", ModMultiblocks.enchanter), new PageText("3"), new PageText("4"), new PageText("5"), new PageText("6"), new PageText("7")).setIcon(new ItemStack(ModBlocks.enchanter)); } turntable = new BLexiconEntry(LibLexicon.DEVICE_TURNTABLE, categoryDevices); @@ -849,9 +849,8 @@ public final class LexiconData { // ALFHOMANCY ENTRIES alfhomancyIntro = new BLexiconEntry(LibLexicon.ALF_INTRO, categoryAlfhomancy); - alfhomancyIntro.setPriority().setLexiconPages(new PageText("0"), new PageText("1"), new PageCraftingRecipe("2", ModCraftingRecipes.recipeAlfPortal), new PageCraftingRecipe("3", ModCraftingRecipes.recipeNaturaPylon), - new PageImage("4", LibResources.ENTRY_PORTAL0), new PageImage("5", LibResources.ENTRY_PORTAL1), new PageImage("6", LibResources.ENTRY_PORTAL2), new PageImage("7", LibResources.ENTRY_PORTAL3), - new PageImage("8", LibResources.ENTRY_PORTAL4), new PageText("9"), new PageText("10"), new PageText("11")).setIcon(new ItemStack(ModItems.lexicon)); + alfhomancyIntro.setPriority().setLexiconPages(new PageText("0"), new PageText("1"), new PageCraftingRecipe("2", ModCraftingRecipes.recipeAlfPortal), new PageCraftingRecipe("3", ModCraftingRecipes.recipeNaturaPylon), new PageMultiblock("4", ModMultiblocks.alfPortal), + new PageText("5"), new PageText("6"), new PageText("7")).setIcon(new ItemStack(ModItems.lexicon)); elvenMessage = new ALexiconEntry(LibLexicon.ALF_MESSAGE, categoryAlfhomancy); elvenMessage.setPriority().setLexiconPages(new PageImage("0", LibResources.ENTRY_ELVEN_GARDE), new PageLoreText("1"), new PageLoreText("2"), new PageLoreText("3"), new PageLoreText("4"), new PageLoreText("5"), new PageLoreText("6")).setIcon(new ItemStack(Items.writable_book)); @@ -860,7 +859,7 @@ public final class LexiconData { elvenResources.setPriority().setLexiconPages(new PageText("0"), new PageElvenRecipe("1", ModElvenTradeRecipes.dreamwoodRecipe), new PageText("2"), new PageCraftingRecipe("10", ModCraftingRecipes.recipeDreamwoodTwig), new PageElvenRecipe("3", ModElvenTradeRecipes.elementiumRecipes), new PageElvenRecipe("4", ModElvenTradeRecipes.pixieDustRecipe), new PageElvenRecipe("5", ModElvenTradeRecipes.dragonstoneRecipes), new PageText("6"), new PageElvenRecipe("7", ModElvenTradeRecipes.elvenQuartzRecipe), new PageText("8"), new PageElvenRecipe("9", ModElvenTradeRecipes.alfglassRecipe)).setIcon(new ItemStack(ModItems.manaResource, 1, 9)); gaiaRitual = new ALexiconEntry(LibLexicon.ALF_GAIA_RITUAL, categoryAlfhomancy); - gaiaRitual.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeGaiaPylon), new PageImage("2", LibResources.ENTRY_GAIA_RITUAL), new PageText("3"), new PageText("4")).setIcon(new ItemStack(ModItems.manaResource, 1, 5)); + gaiaRitual.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeGaiaPylon), new PageMultiblock("2", ModMultiblocks.gaiaRitual), new PageText("3"), new PageText("4")).setIcon(new ItemStack(ModItems.manaResource, 1, 5)); LexiconRecipeMappings.map(new ItemStack(ModItems.manaResource, 1, 5), gaiaRitual, 0); gaiaRitualHardmode = new ALexiconEntry(LibLexicon.ALF_GAIA_RITUAL_HARDMODE, categoryAlfhomancy); diff --git a/src/main/java/vazkii/botania/common/lexicon/page/PageCraftingRecipe.java b/src/main/java/vazkii/botania/common/lexicon/page/PageCraftingRecipe.java index a534bdf92..6f316fcd5 100644 --- a/src/main/java/vazkii/botania/common/lexicon/page/PageCraftingRecipe.java +++ b/src/main/java/vazkii/botania/common/lexicon/page/PageCraftingRecipe.java @@ -70,7 +70,6 @@ public class PageCraftingRecipe extends PageRecipe { IRecipe recipe = recipes.get(recipeAt); renderCraftingRecipe(gui, recipe); - TextureManager render = Minecraft.getMinecraft().renderEngine; render.bindTexture(craftingOverlay); diff --git a/src/main/java/vazkii/botania/common/lexicon/page/PageImage.java b/src/main/java/vazkii/botania/common/lexicon/page/PageImage.java index c86a6004a..5d23d133d 100644 --- a/src/main/java/vazkii/botania/common/lexicon/page/PageImage.java +++ b/src/main/java/vazkii/botania/common/lexicon/page/PageImage.java @@ -19,6 +19,7 @@ import org.lwjgl.opengl.GL11; import vazkii.botania.api.internal.IGuiLexiconEntry; import vazkii.botania.api.lexicon.LexiconPage; +import vazkii.botania.client.lib.LibResources; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/vazkii/botania/common/lexicon/page/PageMultiblock.java b/src/main/java/vazkii/botania/common/lexicon/page/PageMultiblock.java new file mode 100644 index 000000000..ea56da64b --- /dev/null +++ b/src/main/java/vazkii/botania/common/lexicon/page/PageMultiblock.java @@ -0,0 +1,136 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Jun 28, 2015, 1:48:58 AM (GMT)] + */ +package vazkii.botania.common.lexicon.page; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.api.internal.IGuiLexiconEntry; +import vazkii.botania.api.lexicon.LexiconPage; +import vazkii.botania.api.lexicon.multiblock.Multiblock; +import vazkii.botania.api.lexicon.multiblock.MultiblockSet; +import vazkii.botania.api.lexicon.multiblock.component.MultiblockComponent; +import vazkii.botania.client.gui.lexicon.GuiLexicon; +import vazkii.botania.client.lib.LibResources; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class PageMultiblock extends LexiconPage { + + private static final ResourceLocation multiblockOverlay = new ResourceLocation(LibResources.GUI_MULTIBLOCK_OVERLAY); + + GuiButton button; + Multiblock mb; + int ticksElapsed; + + public PageMultiblock(String unlocalizedName, Multiblock mb) { + super(unlocalizedName); + this.mb = mb; + } + + public PageMultiblock(String unlocalizedName, MultiblockSet mb) { + this(unlocalizedName, mb.getForIndex(0)); + } + + @Override + @SideOnly(Side.CLIENT) + public void renderScreen(IGuiLexiconEntry gui, int mx, int my) { + TextureManager render = Minecraft.getMinecraft().renderEngine; + render.bindTexture(multiblockOverlay); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1F, 1F, 1F, 1F); + ((GuiScreen) gui).drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight()); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + final float maxX = 90, maxY = 60; + GL11.glPushMatrix(); + GL11.glTranslatef(gui.getLeft() + gui.getWidth() / 2, gui.getTop() + 90, gui.getZLevel() + 500F); + + float diag = (float) Math.sqrt(mb.getXSize() * mb.getXSize() + mb.getZSize() * mb.getZSize()); + float height = mb.getYSize(); + float scaleX = maxX / diag; + float scaleY = maxY / height; + float scale = -Math.min(scaleY, scaleX); + GL11.glScalef(scale, scale, scale); + + GL11.glRotatef(-20F, 1, 0, 0); + GL11.glRotatef(gui.getElapsedTicks(), 0, 1, 0); + + for(MultiblockComponent comp : mb.getComponents()) { + ChunkCoordinates pos = comp.getRelativePosition(); + renderBlock(comp.getBlock(), comp.getMeta(), pos.posX + mb.offX, pos.posY + mb.offY, pos.posZ + mb.offZ); + } + GL11.glPopMatrix(); + + FontRenderer font = Minecraft.getMinecraft().fontRenderer; + boolean unicode = font.getUnicodeFlag(); + String s = EnumChatFormatting.BOLD + StatCollector.translateToLocal(getUnlocalizedName()); + font.setUnicodeFlag(true); + font.drawString(s, gui.getLeft() + gui.getWidth() / 2 - font.getStringWidth(s) / 2, gui.getTop() + 16, 0x000000); + font.setUnicodeFlag(unicode); + } + + public void renderBlock(Block block, int meta, int x, int y, int z) { + if(block != null) { + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); + + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, z); + RenderBlocks.getInstance().renderBlockAsItem(block, meta, 0.8F); + GL11.glPopMatrix(); + } + } + + @Override + public void onOpened(IGuiLexiconEntry gui) { + button = new GuiButton(101, gui.getLeft() + 30, gui.getTop() + gui.getHeight() - 50, gui.getWidth() - 60, 20, StatCollector.translateToLocal("botaniamisc.visualize")); + gui.getButtonList().add(button); + } + + @Override + public void onClosed(IGuiLexiconEntry gui) { + gui.getButtonList().remove(button); + } + + @Override + @SideOnly(Side.CLIENT) + public void onActionPerformed(IGuiLexiconEntry gui, GuiButton button) { + if(button == this.button) { + // TODO + } + } + + @Override + @SideOnly(Side.CLIENT) + public void updateScreen() { + ++ticksElapsed; + } + +} diff --git a/src/main/java/vazkii/botania/common/lexicon/page/PageShedding.java b/src/main/java/vazkii/botania/common/lexicon/page/PageShedding.java index a03d704e6..9914fc988 100644 --- a/src/main/java/vazkii/botania/common/lexicon/page/PageShedding.java +++ b/src/main/java/vazkii/botania/common/lexicon/page/PageShedding.java @@ -77,7 +77,6 @@ public class PageShedding extends PageEntity { GL11.glColor4f(1F, 1F, 1F, 1F); ((GuiScreen) gui).drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight()); - if(tooltipStack != null) { List tooltipData = tooltipStack.getTooltip(Minecraft.getMinecraft().thePlayer, false); List parsedTooltip = new ArrayList(); diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 1f0375e75..94911c47e 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -115,6 +115,7 @@ botaniamisc.hourglassLock=This Hourglass is locked. Right click it with a Wand o botaniamisc.locked=Locked botaniamisc.stopped=Stopped botaniamisc.lockedStopped=Locked, Stopped +botaniamisc.visualize=Visualize # NEI INTEGRATION botania.nei.brewery=Botanical Brewery @@ -1490,6 +1491,7 @@ botania.page.terrasteel0=&1Terrasteel&0 is a complex magical alloy, infused with botania.page.terrasteel1=Creating the plate botania.page.terrasteel2=After the plate is set up and ready to receive &4Mana&0, tossing a single &1Manasteel Ingot, Mana Diamond and Mana Pearl&0 on top of it will begin the infusion.
Picking up any of the items will halt the infusion causing severe &4Mana Loss&0. The infusion uses half a &1Mana Pool&0 total to create a single piece of &4Terrasteel&0, multiple &1Sparks&0 would make it go faster, too. botania.page.terrasteel3=Creating &1Terrasteel&0 (there's &1Livingrock&0 under the plate) +botania.page.terrasteel4=T.A. Plate # -- BLACK LOTUS botania.entry.blackLotus=Black Lotus @@ -1911,15 +1913,12 @@ botania.page.pylon1=&oYou must construct additional pylons!&r botania.entry.manaEnchanting=Enchanting with Mana botania.page.manaEnchanting0=By utilizing the magical power emitted from &1Mana Pylons&0, a structure that can enchant items with books without consuming them can be created, called the &1Mana Enchanter&0.
Constructing one of these requires a fair amount of space and materials alike. botania.page.manaEnchanting1=To construct the &1Mana Enchanter&0, one requires, as well as fair amount of space, 17 &1Obsidian&0 blocks, 10 &1Mystical Flowers&0 of any color, 6 &1Mana Pylons&0 and a &1Lapis Lazuli Block&0.
The instructions on how to assemble this structure are in the following pages. -botania.page.manaEnchanting2=Start by making an &1Obsidian&0 circle. -botania.page.manaEnchanting3=Put &1Mana Pylons&0 1 block in the air where marked. -botania.page.manaEnchanting4=Put flowers under the pylons and in the center -botania.page.manaEnchanting5=Place a &1Lapis Lazuli Block&0 in the center. -botania.page.manaEnchanting6=After the construct is done, right click the Lapis block with a &1Wand of the Forest&0 and the enchanter should form.
In order to utilize the enchanter, one would place (via right click) the item to be enchanted in the enchanter itself and drop &1Enchanted Books&0 inside the circle around it. -botania.page.manaEnchanting7=Items that are already enchanted can't be placed in the enchanter.
To start the enchanting, right click the enchanter with a &1Wand of the Forest&0. It'll scan the books around, and once it's done, a spell circle of sorts will appear around it, indicating the books can be safely picked up again. -botania.page.manaEnchanting8=After the enchanting begins, the enchanter will require &4Mana&0.
It can be fed via one of two ways, either via &4Mana Bursts&0 or nearby &1Sparks&0, by placing a &1Spark&0 on top of the enchanter. The later being much faster. -botania.page.manaEnchanting9=When enough &4Mana&0 is gathered, the enchanting process will finalize, and the enchantments will be applied to the item.
The amount of &4Mana&0 required depends on the rarity of the enchantments being applied, their level, and the total amount of enchantments.
If any book has more than one enchantment, only the first will be accounted for. -botania.page.manaEnchanting10=During the enchanting process, the item can not be removed, but it can after the process has been completed.
Note that if at any point, any component of the construct is removed, it'll revert to its original &1Lapis Lazuli Block&0 form. +botania.page.manaEnchanting2=Mana Enchanter +botania.page.manaEnchanting5=After the construct is done, right click the Lapis block with a &1Wand of the Forest&0 and the enchanter should form.
In order to utilize the enchanter, one would place (via right click) the item to be enchanted in the enchanter itself and drop &1Enchanted Books&0 inside the circle around it. +botania.page.manaEnchanting6=Items that are already enchanted can't be placed in the enchanter.
To start the enchanting, right click the enchanter with a &1Wand of the Forest&0. It'll scan the books around, and once it's done, a spell circle of sorts will appear around it, indicating the books can be safely picked up again. +botania.page.manaEnchanting7=After the enchanting begins, the enchanter will require &4Mana&0.
It can be fed via one of two ways, either via &4Mana Bursts&0 or nearby &1Sparks&0, by placing a &1Spark&0 on top of the enchanter. The later being much faster. +botania.page.manaEnchanting8=When enough &4Mana&0 is gathered, the enchanting process will finalize, and the enchantments will be applied to the item.
The amount of &4Mana&0 required depends on the rarity of the enchantments being applied, their level, and the total amount of enchantments.
If any book has more than one enchantment, only the first will be accounted for. +botania.page.manaEnchanting9=During the enchanting process, the item can not be removed, but it can after the process has been completed.
Note that if at any point, any component of the construct is removed, it'll revert to its original &1Lapis Lazuli Block&0 form. # -- SPREADER TURNTABLE botania.entry.turntable=Spreader Turntable @@ -2610,14 +2609,10 @@ botania.page.aIntro0=It's said that once, &4Elves&0 used to share the world with botania.page.aIntro1=Creating this portal proves not to be an easy task, as quite a few exquisite resources are necessary. The requirements are as follows: 8 &1Livingwood&0 blocks, 3 &1Glimmering Livingwood&0 blocks, 1 &1Elven Gateway Core&0 (read on), 2 &1Mana Pools&0 and 2 &1Natura Pylons&0 (read on). botania.page.aIntro2=Creating the &1Elven Gateway Core&0 botania.page.aIntro3=Creating &1Natura Pylons&0 -botania.page.aIntro4=Make a frame of &1Livingwood&0 -botania.page.aIntro5=Add &1Glimmering Livingwood&0 -botania.page.aIntro6=Place the &1Elven Gateway Core&0 -botania.page.aIntro7=Add &1Mana Pools&0 -botania.page.aIntro8=Place &1Natura Pylons&0 above the pools -botania.page.aIntro9=To open up the portal, simply right click the core with a &1Wand of the Forest&0.
The portal requires a substantial amount of &4Mana&0 deposited in both the pools to open up, after that, it'll slowly drain some to keep itself powered. If it runs out of &4Mana&0, the connection will be broken. -botania.page.aIntro10=The amount of &4Mana&0 required to open up the portal is orders of magnitude higher than that to keep it maintained, thus closing the portal to prevent &4Mana&0 loss is a poor strategy.
Furthermore, the link isn't strong enough to allow living beings to go through it, but it seems that &4items&0 can. -botania.page.aIntro11=The amount of information about &1Alfheim&0 stored in this lexicon is limited to this entry alone. Perhaps &4letting the&0 &4Elves have a look at it&0 might prove beneficial.
Perhaps they'd also return a good amount of knowledge of their mystical constructs. +botania.page.aIntro4=Alfheim Portal +botania.page.aIntro5=To open up the portal, simply right click the core with a &1Wand of the Forest&0.
The portal requires a substantial amount of &4Mana&0 deposited in both the pools to open up, after that, it'll slowly drain some to keep itself powered. If it runs out of &4Mana&0, the connection will be broken. +botania.page.aIntro6=The amount of &4Mana&0 required to open up the portal is orders of magnitude higher than that to keep it maintained, thus closing the portal to prevent &4Mana&0 loss is a poor strategy.
Furthermore, the link isn't strong enough to allow living beings to go through it, but it seems that &4items&0 can. +botania.page.aIntro7=The amount of information about &1Alfheim&0 stored in this lexicon is limited to this entry alone. Perhaps &4letting the&0 &4Elves have a look at it&0 might prove beneficial.
Perhaps they'd also return a good amount of knowledge of their mystical constructs. # -- A MESSAGE FROM ELVEN GARDE botania.entry.elfMessage=A Message from Elven Garde @@ -2648,7 +2643,7 @@ botania.page.elfResources9=Trading for &1Alfglass&0 botania.entry.gaiaRitual=Ritual of Gaia botania.page.gaiaRitual0=The &4Ritual of Gaia&0 is a procedure often enacted by the elves, which is the only way to acquire &1Gaia Spirits&0, which are essences of the power of the Goddess of Gaia herself.
This ritual required an &4Active&0 &1Beacon&0 with some &1Gaia Pylons&0 (read on) one level above the beacon as the altar, as well as a single &1Terrasteel Ingot&0 as a sacrifice. botania.page.gaiaRitual1=Creating &1Gaia Pylons&0 -botania.page.gaiaRitual2=Place the pylons (1 block above the beacon) +botania.page.gaiaRitual2=Ritual of Gaia botania.page.gaiaRitual3=To start the ritual, simply shift-right click the &1Beacon&0 block with a &1Terrasteel Ingot&0, take a step back and prepare to fight for your life. Good preparation is required, as the fight with the &4Guardian of Gaia&0 can be even harder than that of the &4Wither&0. Upon defeating the &4Guardian&0, one can collect their prize, a handful of &1Spirits of Gaia&0. botania.page.gaiaRitual4=The common attire for this ritual is a set of Enchanted &1Elementium Armor&0, a &1Terra Blade&0 and a large assortment of &4Brews&0 and &4Baubles&0.
The effect of the &1Beacon&0 is nullified during the battle, so that should be taken in mind. Lastly, staying away from the purple might be a good idea. diff --git a/src/main/resources/assets/botania/textures/gui/entries/enchanter0.png b/src/main/resources/assets/botania/textures/gui/entries/enchanter0.png deleted file mode 100644 index 7c2d1c716..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/enchanter0.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/enchanter1.png b/src/main/resources/assets/botania/textures/gui/entries/enchanter1.png deleted file mode 100644 index f7ff5bd3c..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/enchanter1.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/enchanter2.png b/src/main/resources/assets/botania/textures/gui/entries/enchanter2.png deleted file mode 100644 index 7313b7047..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/enchanter2.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/enchanter3.png b/src/main/resources/assets/botania/textures/gui/entries/enchanter3.png deleted file mode 100644 index 47999950a..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/enchanter3.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/gaiaRitual.png b/src/main/resources/assets/botania/textures/gui/entries/gaiaRitual.png deleted file mode 100644 index 3a75342a2..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/gaiaRitual.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/portal0.png b/src/main/resources/assets/botania/textures/gui/entries/portal0.png deleted file mode 100644 index 433cedbb6..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/portal0.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/portal1.png b/src/main/resources/assets/botania/textures/gui/entries/portal1.png deleted file mode 100644 index 060bbdc07..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/portal1.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/portal2.png b/src/main/resources/assets/botania/textures/gui/entries/portal2.png deleted file mode 100644 index 063f972cc..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/portal2.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/portal3.png b/src/main/resources/assets/botania/textures/gui/entries/portal3.png deleted file mode 100644 index f2ca01de8..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/portal3.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/entries/portal4.png b/src/main/resources/assets/botania/textures/gui/entries/portal4.png deleted file mode 100644 index 4a35c7ed5..000000000 Binary files a/src/main/resources/assets/botania/textures/gui/entries/portal4.png and /dev/null differ diff --git a/src/main/resources/assets/botania/textures/gui/multiblockOverlay.png b/src/main/resources/assets/botania/textures/gui/multiblockOverlay.png new file mode 100644 index 000000000..a22451a92 Binary files /dev/null and b/src/main/resources/assets/botania/textures/gui/multiblockOverlay.png differ