From 3a8fd56e8a92cfa37e1382a0eb8ad93c2edcee95 Mon Sep 17 00:00:00 2001 From: Vasco Lavos Date: Tue, 25 Mar 2014 21:53:44 +0000 Subject: [PATCH] Added a 3D model renderer for the lexica botania. --- .../core/handler/ClientTickHandler.java | 26 ++++++++ .../client/core/proxy/ClientProxy.java | 8 ++- .../vazkii/botania/client/gui/GuiLexicon.java | 5 +- .../botania/client/gui/GuiLexiconEntry.java | 4 ++ .../botania/client/gui/GuiLexiconIndex.java | 5 ++ .../botania/client/lib/LibResources.java | 1 + .../client/render/item/RenderLexicon.java | 60 ++++++++++++++++++ .../common/core/handler/ConfigHandler.java | 7 +- .../assets/botania/textures/model/lexica.png | Bin 0 -> 4305 bytes 9 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 MODSRC/vazkii/botania/client/render/item/RenderLexicon.java create mode 100644 resources/assets/botania/textures/model/lexica.png 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 0000000000000000000000000000000000000000..36d20e2b5dc4121a8a751d35798c6ea11220f2c8 GIT binary patch literal 4305 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