diff --git a/MODSRC/vazkii/botania/client/core/handler/ClientTickHandler.java b/MODSRC/vazkii/botania/client/core/handler/ClientTickHandler.java index 937e36fea..aaa516175 100644 --- a/MODSRC/vazkii/botania/client/core/handler/ClientTickHandler.java +++ b/MODSRC/vazkii/botania/client/core/handler/ClientTickHandler.java @@ -22,6 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import vazkii.botania.api.mana.IManaCollector; import vazkii.botania.client.core.handler.LightningHandler.LightningBolt; +import vazkii.botania.client.gui.GuiLexicon; import vazkii.botania.common.core.handler.ManaNetworkHandler; import vazkii.botania.common.item.ItemTwigWand; import vazkii.botania.common.lib.LibMisc; @@ -30,6 +31,9 @@ import cpw.mods.fml.common.TickType; public class ClientTickHandler implements ITickHandler { + public static int ticksWithLexicaOpen = 0; + public static int pageFlipTicks = 0; + @Override public void tickStart(EnumSet type, Object... tickData) { // NO-OP @@ -56,6 +60,28 @@ public class ClientTickHandler implements ITickHandler { } } } + + int ticksToOpen = 10; + if(gui instanceof GuiLexicon) { + if(ticksWithLexicaOpen < 0) + ticksWithLexicaOpen = 0; + if(ticksWithLexicaOpen < ticksToOpen) + ticksWithLexicaOpen++; + if(pageFlipTicks > 0) + pageFlipTicks--; + } else { + pageFlipTicks = 0; + if(ticksWithLexicaOpen > 0) { + if(ticksWithLexicaOpen > ticksToOpen) + ticksWithLexicaOpen = ticksToOpen; + ticksWithLexicaOpen--; + } + } + } + + public static void notifyPageChange() { + if(pageFlipTicks == 0) + pageFlipTicks = 5; } @Override diff --git a/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java b/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java index e3655b99b..186e06d65 100644 --- a/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java +++ b/MODSRC/vazkii/botania/client/core/proxy/ClientProxy.java @@ -33,6 +33,7 @@ import vazkii.botania.client.render.block.RenderPylon; import vazkii.botania.client.render.block.RenderSpecialFlower; import vazkii.botania.client.render.block.RenderSpreader; import vazkii.botania.client.render.item.RenderLens; +import vazkii.botania.client.render.item.RenderLexicon; import vazkii.botania.client.render.tile.RenderTileAltar; import vazkii.botania.client.render.tile.RenderTileEnchanter; import vazkii.botania.client.render.tile.RenderTilePool; @@ -85,9 +86,10 @@ public class ClientProxy extends CommonProxy { RenderingRegistry.registerBlockHandler(new RenderPool()); RenderingRegistry.registerBlockHandler(new RenderPylon()); - RenderLens lensRender = new RenderLens(); - MinecraftForgeClient.registerItemRenderer(ModItems.lens.itemID, lensRender); - + MinecraftForgeClient.registerItemRenderer(ModItems.lens.itemID, new RenderLens()); + if(ConfigHandler.lexicon3dModel) + MinecraftForgeClient.registerItemRenderer(ModItems.lexicon.itemID, new RenderLexicon()); + ClientRegistry.bindTileEntitySpecialRenderer(TileAltar.class, new RenderTileAltar()); ClientRegistry.bindTileEntitySpecialRenderer(TileSpreader.class, new RenderTileSpreader()); ClientRegistry.bindTileEntitySpecialRenderer(TilePool.class, new RenderTilePool()); diff --git a/MODSRC/vazkii/botania/client/gui/GuiLexicon.java b/MODSRC/vazkii/botania/client/gui/GuiLexicon.java index 12839c784..837bc26a5 100644 --- a/MODSRC/vazkii/botania/client/gui/GuiLexicon.java +++ b/MODSRC/vazkii/botania/client/gui/GuiLexicon.java @@ -22,6 +22,7 @@ import org.lwjgl.opengl.GL11; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.lexicon.LexiconCategory; +import vazkii.botania.client.core.handler.ClientTickHandler; import vazkii.botania.client.gui.button.GuiButtonInvisible; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.item.ModItems; @@ -83,8 +84,10 @@ public class GuiLexicon extends GuiScreen { List categoryList = BotaniaAPI.getAllCategories(); LexiconCategory category = i >= categoryList.size() ? null : categoryList.get(i); - if(category != null) + if(category != null) { mc.displayGuiScreen(new GuiLexiconIndex(category)); + ClientTickHandler.notifyPageChange(); + } } @Override diff --git a/MODSRC/vazkii/botania/client/gui/GuiLexiconEntry.java b/MODSRC/vazkii/botania/client/gui/GuiLexiconEntry.java index 157748968..27f3a4047 100644 --- a/MODSRC/vazkii/botania/client/gui/GuiLexiconEntry.java +++ b/MODSRC/vazkii/botania/client/gui/GuiLexiconEntry.java @@ -17,6 +17,7 @@ import net.minecraft.util.StatCollector; import vazkii.botania.api.internal.IGuiLexiconEntry; import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.lexicon.LexiconPage; +import vazkii.botania.client.core.handler.ClientTickHandler; import vazkii.botania.client.gui.button.GuiButtonBackWithShift; import vazkii.botania.client.gui.button.GuiButtonPage; @@ -77,12 +78,15 @@ public class GuiLexiconEntry extends GuiLexicon implements IGuiLexiconEntry { switch(par1GuiButton.id) { case 0 : mc.displayGuiScreen(GuiScreen.isShiftKeyDown() ? new GuiLexicon() : parent); + ClientTickHandler.notifyPageChange(); break; case 1 : page--; + ClientTickHandler.notifyPageChange(); break; case 2 : page++; + ClientTickHandler.notifyPageChange(); break; } updatePageButtons(); diff --git a/MODSRC/vazkii/botania/client/gui/GuiLexiconIndex.java b/MODSRC/vazkii/botania/client/gui/GuiLexiconIndex.java index b7ec707d5..a0fe3ef94 100644 --- a/MODSRC/vazkii/botania/client/gui/GuiLexiconIndex.java +++ b/MODSRC/vazkii/botania/client/gui/GuiLexiconIndex.java @@ -20,6 +20,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import vazkii.botania.api.lexicon.LexiconCategory; import vazkii.botania.api.lexicon.LexiconEntry; +import vazkii.botania.client.core.handler.ClientTickHandler; import vazkii.botania.client.gui.button.GuiButtonBack; import vazkii.botania.client.gui.button.GuiButtonInvisible; import vazkii.botania.client.gui.button.GuiButtonPage; @@ -80,16 +81,19 @@ public class GuiLexiconIndex extends GuiLexicon { switch(par1GuiButton.id) { case 12 : mc.displayGuiScreen(new GuiLexicon()); + ClientTickHandler.notifyPageChange(); break; case 13 : page--; updatePageButtons(); populateIndex(); + ClientTickHandler.notifyPageChange(); break; case 14 : page++; updatePageButtons(); populateIndex(); + ClientTickHandler.notifyPageChange(); break; default : int index = par1GuiButton.id + page * 12; @@ -98,6 +102,7 @@ public class GuiLexiconIndex extends GuiLexicon { LexiconEntry entry = entriesToDisplay.get(index); mc.displayGuiScreen(new GuiLexiconEntry(entry, this)); + ClientTickHandler.notifyPageChange(); } } diff --git a/MODSRC/vazkii/botania/client/lib/LibResources.java b/MODSRC/vazkii/botania/client/lib/LibResources.java index 361dda653..2db674dc7 100644 --- a/MODSRC/vazkii/botania/client/lib/LibResources.java +++ b/MODSRC/vazkii/botania/client/lib/LibResources.java @@ -45,6 +45,7 @@ public final class LibResources { public static final String MODEL_SPREADER = PREFIX_MODEL + "spreader.png"; public static final String MODEL_POOL = PREFIX_MODEL + "pool.png"; public static final String MODEL_PYLON = PREFIX_MODEL + "pylon.png"; + public static final String MODEL_LEXICA = PREFIX_MODEL + "lexica.png"; public static final String MODEL_CAPE = "/assets/botania/textures/model/cape.png"; public static final String MISC_PARTICLES = PREFIX_MISC + "particles.png"; diff --git a/MODSRC/vazkii/botania/client/render/item/RenderLexicon.java b/MODSRC/vazkii/botania/client/render/item/RenderLexicon.java new file mode 100644 index 000000000..9efa91e2b --- /dev/null +++ b/MODSRC/vazkii/botania/client/render/item/RenderLexicon.java @@ -0,0 +1,60 @@ +/** + * 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 a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Mar 25, 2014, 8:49:01 PM (GMT)] + */ +package vazkii.botania.client.render.item; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.client.core.handler.ClientTickHandler; +import vazkii.botania.client.lib.LibResources; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBook; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; + +public class RenderLexicon implements IItemRenderer { + + ModelBook model = new ModelBook(); + ResourceLocation texture = new ResourceLocation(LibResources.MODEL_LEXICA); + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type == ItemRenderType.EQUIPPED_FIRST_PERSON; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return false; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + GL11.glPushMatrix(); + Minecraft mc = Minecraft.getMinecraft(); + mc.renderEngine.bindTexture(texture); + float opening = 0F; + float pageFlip = 0F; + + int ticks = ClientTickHandler.ticksWithLexicaOpen; + GL11.glTranslatef(0.3F + 0.02F * ticks, 0.475F + 0.01F * ticks, -0.2F - 0.01F * ticks); + GL11.glRotatef(95F + ticks * 5, 0F, 1F, 0F); + GL11.glRotatef(ticks * 2.5F, 0F, 0F, 1F); + GL11.glScalef(0.9F, 0.9F, 0.9F); + opening = (float) ticks / 12F; + pageFlip = (float) ClientTickHandler.pageFlipTicks / 5F; + + model.render(null, 0F, 0F, pageFlip, opening, 0F, 1F / 16F); + + GL11.glPopMatrix(); + } + +} diff --git a/MODSRC/vazkii/botania/common/core/handler/ConfigHandler.java b/MODSRC/vazkii/botania/common/core/handler/ConfigHandler.java index 0296c4301..9045d0e15 100644 --- a/MODSRC/vazkii/botania/common/core/handler/ConfigHandler.java +++ b/MODSRC/vazkii/botania/common/core/handler/ConfigHandler.java @@ -29,7 +29,8 @@ public final class ConfigHandler { public static boolean staticWandBeam = false; public static boolean overrideVanillaBlocks = true; public static boolean boundBlockWireframe = true; - + public static boolean lexicon3dModel = true; + public static int flowerQuantity = 3; public static int flowerDensity = 32; @@ -58,6 +59,10 @@ public final class ConfigHandler { boundBlockWireframeProp.comment = "Set to false to disable the wireframe when looking a block bound to something (spreaders, flowers, etc)."; boundBlockWireframe = boundBlockWireframeProp.getBoolean(true); + Property lexicon3dModelProp = config.get(Configuration.CATEGORY_GENERAL, "lexicon.render.3D", true); + lexicon3dModelProp.comment = "Set to false to disabled the animated 3D render for the lexica botania"; + lexicon3dModel = lexicon3dModelProp.getBoolean(true); + Property propFlowerQuantity = config.get(Configuration.CATEGORY_GENERAL, "worldgen.flower.quantity", 3); flowerQuantity = propFlowerQuantity.getInt(3); Property propFlowerDensity = config.get(Configuration.CATEGORY_GENERAL, "worldgen.flower.density", 32); diff --git a/resources/assets/botania/textures/model/lexica.png b/resources/assets/botania/textures/model/lexica.png new file mode 100644 index 000000000..36d20e2b5 Binary files /dev/null and b/resources/assets/botania/textures/model/lexica.png differ