2015-08-29 14:33:25 +02:00
|
|
|
/*
|
|
|
|
* This file ("GuiBooklet.java") is part of the Actually Additions Mod for Minecraft.
|
|
|
|
* It is created and owned by Ellpeck and distributed
|
|
|
|
* under the Actually Additions License to be found at
|
|
|
|
* http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md
|
|
|
|
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
|
|
|
|
*
|
2015-11-02 20:55:19 +01:00
|
|
|
* © 2015 Ellpeck
|
2015-08-29 14:33:25 +02:00
|
|
|
*/
|
|
|
|
|
2015-08-29 23:01:13 +02:00
|
|
|
package ellpeck.actuallyadditions.booklet;
|
2015-08-28 21:17:09 +02:00
|
|
|
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
2015-11-11 18:51:20 +01:00
|
|
|
import ellpeck.actuallyadditions.booklet.chapter.BookletChapter;
|
|
|
|
import ellpeck.actuallyadditions.booklet.entry.BookletEntry;
|
|
|
|
import ellpeck.actuallyadditions.booklet.entry.BookletEntryAllSearch;
|
2015-09-10 21:25:34 +02:00
|
|
|
import ellpeck.actuallyadditions.booklet.page.BookletPage;
|
2015-08-28 21:17:09 +02:00
|
|
|
import ellpeck.actuallyadditions.config.GuiConfiguration;
|
2015-10-18 19:56:18 +02:00
|
|
|
import ellpeck.actuallyadditions.proxy.ClientProxy;
|
2015-09-02 20:06:34 +02:00
|
|
|
import ellpeck.actuallyadditions.update.UpdateChecker;
|
2015-11-11 18:51:20 +01:00
|
|
|
import ellpeck.actuallyadditions.util.AssetUtil;
|
2015-09-30 06:56:33 +02:00
|
|
|
import ellpeck.actuallyadditions.util.playerdata.PersistentClientData;
|
2015-11-11 18:51:20 +01:00
|
|
|
import net.minecraft.client.gui.FontRenderer;
|
2015-08-28 21:17:09 +02:00
|
|
|
import net.minecraft.client.gui.GuiButton;
|
|
|
|
import net.minecraft.client.gui.GuiScreen;
|
2015-08-29 15:40:12 +02:00
|
|
|
import net.minecraft.client.gui.GuiTextField;
|
2015-08-28 21:17:09 +02:00
|
|
|
import net.minecraft.util.ResourceLocation;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
|
2015-08-29 17:32:39 +02:00
|
|
|
import java.util.List;
|
2015-08-28 21:17:09 +02:00
|
|
|
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
|
|
public class GuiBooklet extends GuiScreen{
|
|
|
|
|
2015-10-30 20:07:36 +01:00
|
|
|
public static final ResourceLocation resLoc = AssetUtil.getBookletGuiLocation("guiBooklet");
|
|
|
|
public static final ResourceLocation resLocHalloween = AssetUtil.getBookletGuiLocation("guiBookletHalloween");
|
|
|
|
public static final ResourceLocation resLocChristmas = AssetUtil.getBookletGuiLocation("guiBookletChristmas");
|
|
|
|
public static final ResourceLocation resLocValentine = AssetUtil.getBookletGuiLocation("guiBookletValentinesDay");
|
2015-10-03 10:16:18 +02:00
|
|
|
public static final int CHAPTER_BUTTONS_AMOUNT = 13;
|
|
|
|
public static final int TOOLTIP_SPLIT_LENGTH = 200;
|
2015-08-28 21:17:09 +02:00
|
|
|
public int xSize;
|
|
|
|
public int ySize;
|
|
|
|
public int guiLeft;
|
|
|
|
public int guiTop;
|
2015-09-10 21:25:34 +02:00
|
|
|
public BookletPage currentPage;
|
2015-08-28 21:17:09 +02:00
|
|
|
public BookletChapter currentChapter;
|
2015-11-11 18:51:20 +01:00
|
|
|
public BookletEntry currentIndexEntry;
|
2015-08-29 10:59:03 +02:00
|
|
|
public int pageOpenInIndex;
|
|
|
|
public int indexPageAmount;
|
2015-11-11 18:51:20 +01:00
|
|
|
public GuiButton buttonForward;
|
|
|
|
public GuiButton buttonBackward;
|
|
|
|
public GuiButton buttonPreviousScreen;
|
|
|
|
public GuiButton buttonPreviouslyOpenedGui;
|
|
|
|
public GuiButton buttonUpdate;
|
|
|
|
public GuiButton buttonTwitter;
|
|
|
|
public GuiButton buttonForum;
|
|
|
|
public GuiButton buttonAchievements;
|
|
|
|
public GuiButton buttonConfig;
|
|
|
|
public GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT];
|
2015-10-30 23:37:20 +01:00
|
|
|
public GuiTextField searchField;
|
2015-09-28 23:39:34 +02:00
|
|
|
private int ticksElapsed;
|
2015-10-04 13:21:07 +02:00
|
|
|
private boolean mousePressed;
|
2015-08-30 19:10:10 +02:00
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
public GuiScreen parentScreen;
|
2015-09-24 23:42:03 +02:00
|
|
|
|
|
|
|
public GuiBooklet(GuiScreen parentScreen){
|
2015-08-28 21:17:09 +02:00
|
|
|
this.xSize = 146;
|
|
|
|
this.ySize = 180;
|
2015-09-24 23:42:03 +02:00
|
|
|
this.parentScreen = parentScreen;
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|
|
|
|
|
2015-08-29 17:32:39 +02:00
|
|
|
public void drawHoveringText(List list, int x, int y){
|
|
|
|
super.func_146283_a(list, x, y);
|
|
|
|
}
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
public FontRenderer getFontRenderer(){
|
|
|
|
return this.fontRendererObj;
|
|
|
|
}
|
|
|
|
|
2015-08-28 21:17:09 +02:00
|
|
|
@Override
|
|
|
|
public void drawScreen(int x, int y, float f){
|
2015-11-11 18:51:20 +01:00
|
|
|
//Fixes Unicode flag
|
2015-10-03 19:19:26 +02:00
|
|
|
boolean unicodeBefore = this.fontRendererObj.getUnicodeFlag();
|
|
|
|
this.fontRendererObj.setUnicodeFlag(true);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
//Draws the Background
|
2015-08-28 21:17:09 +02:00
|
|
|
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
2015-10-23 23:08:53 +02:00
|
|
|
this.mc.getTextureManager().bindTexture(ClientProxy.jingleAllTheWay ? resLocChristmas : (ClientProxy.pumpkinBlurPumpkinBlur ? resLocHalloween : (ClientProxy.bulletForMyValentine ? resLocValentine : resLoc)));
|
2015-10-16 22:34:58 +02:00
|
|
|
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
2015-08-28 21:17:09 +02:00
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
//Draws the search bar
|
2015-08-29 17:32:39 +02:00
|
|
|
if(this.currentIndexEntry instanceof BookletEntryAllSearch && this.currentChapter == null){
|
2015-11-14 01:18:37 +01:00
|
|
|
this.mc.getTextureManager().bindTexture(resLoc);
|
2015-08-29 15:40:12 +02:00
|
|
|
this.drawTexturedModalRect(this.guiLeft+146, this.guiTop+160, 146, 80, 70, 14);
|
|
|
|
}
|
|
|
|
|
2015-11-14 01:18:37 +01:00
|
|
|
//Draws Achievement Info
|
|
|
|
BookletUtils.drawAchievementInfo(this, true, x, y);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
//Draws the title
|
2015-10-03 19:19:26 +02:00
|
|
|
this.fontRendererObj.setUnicodeFlag(false);
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.drawTitle(this);
|
2015-10-03 19:19:26 +02:00
|
|
|
this.fontRendererObj.setUnicodeFlag(true);
|
2015-08-28 21:17:09 +02:00
|
|
|
|
2015-11-16 19:03:29 +01:00
|
|
|
//Pre-Renders the current page's content etc.
|
|
|
|
BookletUtils.renderPre(this, x, y, this.ticksElapsed, this.mousePressed);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
//Does vanilla drawing stuff
|
2015-08-28 22:18:46 +02:00
|
|
|
super.drawScreen(x, y, f);
|
2015-08-29 15:40:12 +02:00
|
|
|
this.searchField.drawTextBox();
|
2015-08-28 22:18:46 +02:00
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
//Draws hovering texts for buttons
|
2015-10-03 19:19:26 +02:00
|
|
|
this.fontRendererObj.setUnicodeFlag(false);
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.doHoverTexts(this, x, y);
|
2015-11-13 21:40:38 +01:00
|
|
|
BookletUtils.drawAchievementInfo(this, false, x, y);
|
2015-11-16 19:03:29 +01:00
|
|
|
this.fontRendererObj.setUnicodeFlag(true);
|
|
|
|
|
|
|
|
//Renders the current page's content
|
|
|
|
if(this.currentIndexEntry != null && this.currentChapter != null && this.currentPage != null){
|
|
|
|
this.currentPage.render(this, x, y, this.ticksElapsed, this.mousePressed);
|
|
|
|
}
|
2015-10-03 19:19:26 +02:00
|
|
|
this.fontRendererObj.setUnicodeFlag(unicodeBefore);
|
2015-10-04 13:21:07 +02:00
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
//Resets mouse
|
2015-10-04 13:21:07 +02:00
|
|
|
if(this.mousePressed){
|
|
|
|
this.mousePressed = false;
|
|
|
|
}
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|
|
|
|
|
2015-10-03 10:19:40 +02:00
|
|
|
@Override
|
|
|
|
public void keyTyped(char theChar, int key){
|
|
|
|
if(key != 1 && this.searchField.isFocused()){
|
|
|
|
this.searchField.textboxKeyTyped(theChar, key);
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.updateSearchBar(this);
|
2015-10-30 23:37:20 +01:00
|
|
|
}
|
|
|
|
else{
|
|
|
|
super.keyTyped(theChar, key);
|
|
|
|
}
|
|
|
|
}
|
2015-08-31 06:15:06 +02:00
|
|
|
|
2015-10-03 10:19:40 +02:00
|
|
|
@Override
|
|
|
|
protected void mouseClicked(int par1, int par2, int par3){
|
|
|
|
this.searchField.mouseClicked(par1, par2, par3);
|
2015-11-11 18:51:20 +01:00
|
|
|
//Notifys the booklet of the mouse being pressed
|
2015-10-04 15:24:11 +02:00
|
|
|
if(par3 == 0 && this.currentChapter != null){
|
2015-10-04 13:21:07 +02:00
|
|
|
this.mousePressed = true;
|
|
|
|
}
|
2015-10-03 10:19:40 +02:00
|
|
|
super.mouseClicked(par1, par2, par3);
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void actionPerformed(GuiButton button){
|
2015-11-11 18:51:20 +01:00
|
|
|
//Handles going to the parent GUI
|
2015-09-30 19:18:13 +02:00
|
|
|
if(button == this.buttonPreviouslyOpenedGui){
|
2015-09-28 22:22:43 +02:00
|
|
|
if(this.parentScreen != null){
|
|
|
|
mc.displayGuiScreen(this.parentScreen);
|
|
|
|
}
|
|
|
|
}
|
2015-11-11 18:51:20 +01:00
|
|
|
//Handles update
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonUpdate){
|
2015-10-28 18:28:30 +01:00
|
|
|
if(UpdateChecker.needsUpdateNotify){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.openBrowser(UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK);
|
2015-09-02 20:06:34 +02:00
|
|
|
}
|
|
|
|
}
|
2015-11-11 18:51:20 +01:00
|
|
|
//Handles Twitter
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonTwitter){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.openBrowser("http://twitter.com/ActAddMod");
|
2015-08-30 05:11:05 +02:00
|
|
|
}
|
2015-11-11 18:51:20 +01:00
|
|
|
//Handles forum
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonForum){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.openBrowser("http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2551118");
|
2015-08-30 05:11:05 +02:00
|
|
|
}
|
2015-11-11 18:51:20 +01:00
|
|
|
//Handles config
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonConfig){
|
2015-08-28 21:17:09 +02:00
|
|
|
mc.displayGuiScreen(new GuiConfiguration(this));
|
|
|
|
}
|
2015-11-11 18:51:20 +01:00
|
|
|
//Handles achievements
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonAchievements){
|
2015-08-28 21:17:09 +02:00
|
|
|
mc.displayGuiScreen(new GuiAAAchievements(this, mc.thePlayer.getStatFileWriter()));
|
|
|
|
}
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonForward){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.handleNextPage(this);
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonBackward){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.handlePreviousPage(this);
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|
2015-11-11 18:51:20 +01:00
|
|
|
//Handles gonig from page to chapter or from chapter to index
|
2015-09-30 19:18:13 +02:00
|
|
|
else if(button == this.buttonPreviousScreen){
|
2015-09-28 22:22:43 +02:00
|
|
|
if(this.currentChapter != null && this.currentChapter != InitBooklet.chapterIntro){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.openIndexEntry(this, this.currentIndexEntry, this.pageOpenInIndex, true);
|
2015-08-29 10:59:03 +02:00
|
|
|
}
|
|
|
|
else{
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.openIndexEntry(this, null, 1, true);
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|
|
|
|
}
|
2015-09-30 19:18:13 +02:00
|
|
|
else{
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.handleChapterButtonClick(this, button);
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-10-03 10:19:40 +02:00
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
@Override
|
|
|
|
public void initGui(){
|
|
|
|
this.guiLeft = (this.width-this.xSize)/2;
|
|
|
|
this.guiTop = (this.height-this.ySize)/2;
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonForward = new BookletUtils.TexturedButton(0, this.guiLeft+this.xSize, this.guiTop+this.ySize+2, 164, 0, 18, 10);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonForward);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonBackward = new BookletUtils.TexturedButton(1, this.guiLeft-18, this.guiTop+this.ySize+2, 146, 0, 18, 10);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonBackward);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonPreviousScreen = new BookletUtils.TexturedButton(2, this.guiLeft+this.xSize/2-7, this.guiTop+this.ySize+2, 182, 0, 15, 10);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonPreviousScreen);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonPreviouslyOpenedGui = new BookletUtils.TexturedButton(3, this.guiLeft+this.xSize/3, this.guiTop+this.ySize+2, 245, 44, 11, 15);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonPreviouslyOpenedGui);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonUpdate = new BookletUtils.TexturedButton(4, this.guiLeft-11, this.guiTop-11, 245, 0, 11, 11);
|
2015-10-28 18:28:30 +01:00
|
|
|
this.buttonUpdate.visible = UpdateChecker.needsUpdateNotify;
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonUpdate);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonTwitter = new BookletUtils.TexturedButton(5, this.guiLeft, this.guiTop, 213, 0, 8, 8);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonTwitter);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonForum = new BookletUtils.TexturedButton(6, this.guiLeft, this.guiTop+10, 221, 0, 8, 8);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonForum);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonAchievements = new BookletUtils.TexturedButton(7, this.guiLeft+138, this.guiTop, 205, 0, 8, 8);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonAchievements);
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
this.buttonConfig = new BookletUtils.TexturedButton(8, this.guiLeft+138, this.guiTop+10, 197, 0, 8, 8);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.buttonConfig);
|
|
|
|
|
|
|
|
for(int i = 0; i < this.chapterButtons.length; i++){
|
2015-11-11 18:51:20 +01:00
|
|
|
this.chapterButtons[i] = new BookletUtils.IndexButton(9+i, guiLeft+15, guiTop+10+(i*12), 115, 10, "", this);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonList.add(this.chapterButtons[i]);
|
|
|
|
}
|
|
|
|
|
2015-10-03 19:19:26 +02:00
|
|
|
this.searchField = new GuiTextField(this.fontRendererObj, guiLeft+148, guiTop+162, 66, 10);
|
2015-10-03 10:19:40 +02:00
|
|
|
this.searchField.setMaxStringLength(30);
|
|
|
|
this.searchField.setEnableBackgroundDrawing(false);
|
2015-10-10 03:39:42 +02:00
|
|
|
this.searchField.setCanLoseFocus(false);
|
2015-10-03 10:19:40 +02:00
|
|
|
|
|
|
|
this.currentPage = null;
|
|
|
|
this.currentChapter = null;
|
|
|
|
this.currentIndexEntry = null;
|
|
|
|
|
2015-11-11 18:51:20 +01:00
|
|
|
// So that the First Page will still open if used via something like NEI before
|
2015-10-13 03:43:41 +02:00
|
|
|
if(this.parentScreen == null && !PersistentClientData.getBoolean("BookAlreadyOpened")){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.openIndexEntry(this, InitBooklet.chapterIntro.entry, 1, true);
|
|
|
|
BookletUtils.openChapter(this, InitBooklet.chapterIntro, null);
|
2015-10-03 10:19:40 +02:00
|
|
|
|
|
|
|
PersistentClientData.setBoolean("BookAlreadyOpened", true);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
PersistentClientData.openLastBookPage(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void updateScreen(){
|
|
|
|
super.updateScreen();
|
|
|
|
this.searchField.updateCursorCounter();
|
|
|
|
|
|
|
|
if(this.currentIndexEntry != null && this.currentChapter != null && this.currentPage != null){
|
|
|
|
this.currentPage.updateScreen(this.ticksElapsed);
|
|
|
|
}
|
|
|
|
|
2015-10-28 18:28:30 +01:00
|
|
|
boolean buttonThere = UpdateChecker.needsUpdateNotify;
|
2015-10-03 10:19:40 +02:00
|
|
|
this.buttonUpdate.visible = buttonThere;
|
|
|
|
if(buttonThere){
|
|
|
|
if(this.ticksElapsed%8 == 0){
|
2015-11-11 18:51:20 +01:00
|
|
|
BookletUtils.TexturedButton button = (BookletUtils.TexturedButton)this.buttonUpdate;
|
2015-10-03 10:19:40 +02:00
|
|
|
button.setTexturePos(245, button.texturePosY == 0 ? 22 : 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.ticksElapsed++;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onGuiClosed(){
|
2015-10-30 23:37:20 +01:00
|
|
|
PersistentClientData.saveBookPage(this.currentIndexEntry, this.currentChapter, this.currentPage, this.pageOpenInIndex, this.searchField.getText());
|
2015-10-03 10:19:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean doesGuiPauseGame(){
|
|
|
|
return false;
|
|
|
|
}
|
2015-08-28 21:17:09 +02:00
|
|
|
}
|