ActuallyAdditions/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java

542 lines
23 KiB
Java
Raw Normal View History

2015-08-29 14:33:25 +02:00
/*
2016-05-16 22:52:27 +02:00
* This file ("GuiBooklet.java") is part of the Actually Additions mod for Minecraft.
2015-08-29 14:33:25 +02:00
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
2016-05-16 22:52:27 +02:00
* http://ellpeck.de/actaddlicense
2015-08-29 14:33:25 +02:00
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
2016-05-16 22:54:42 +02:00
* © 2015-2016 Ellpeck
2015-08-29 14:33:25 +02:00
*/
2016-01-05 04:47:35 +01:00
package de.ellpeck.actuallyadditions.mod.booklet;
2015-08-28 21:17:09 +02:00
2016-01-05 14:57:50 +01:00
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.api.booklet.BookletPage;
2016-05-29 22:11:18 +02:00
import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter;
2016-01-05 14:57:50 +01:00
import de.ellpeck.actuallyadditions.api.internal.IBookletGui;
2016-06-01 00:39:35 +02:00
import de.ellpeck.actuallyadditions.api.internal.IEntrySet;
2016-01-05 04:47:35 +01:00
import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton;
import de.ellpeck.actuallyadditions.mod.booklet.button.IndexButton;
import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton;
import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch;
2016-05-14 13:51:18 +02:00
import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet;
2016-01-05 04:47:35 +01:00
import de.ellpeck.actuallyadditions.mod.config.GuiConfiguration;
import de.ellpeck.actuallyadditions.mod.data.PlayerData;
2016-01-05 04:47:35 +01:00
import de.ellpeck.actuallyadditions.mod.items.ItemBooklet;
2016-05-01 22:26:26 +02:00
import de.ellpeck.actuallyadditions.mod.misc.SoundHandler;
import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer;
import de.ellpeck.actuallyadditions.mod.network.PacketHandler;
2016-01-05 04:47:35 +01:00
import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy;
import de.ellpeck.actuallyadditions.mod.update.UpdateChecker;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
2016-07-01 13:56:15 +02:00
import de.ellpeck.actuallyadditions.mod.util.Util;
2016-05-01 22:26:26 +02:00
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
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;
import net.minecraft.client.renderer.GlStateManager;
2016-05-01 22:26:26 +02:00
import net.minecraft.init.SoundEvents;
2016-01-05 14:57:50 +01:00
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
2015-08-28 21:17:09 +02:00
import net.minecraft.util.ResourceLocation;
2016-07-01 13:56:15 +02:00
import net.minecraft.util.math.MathHelper;
2016-03-18 23:47:22 +01:00
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
2016-01-07 18:20:59 +01:00
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
2015-08-28 21:17:09 +02:00
import java.io.IOException;
2015-12-04 18:14:03 +01:00
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
2015-08-28 21:17:09 +02:00
@SideOnly(Side.CLIENT)
2016-01-05 14:57:50 +01:00
public class GuiBooklet extends GuiScreen implements IBookletGui{
2015-08-28 21:17:09 +02:00
2016-06-17 23:50:38 +02:00
public static final ResourceLocation RES_LOC = AssetUtil.getBookletGuiLocation("guiBooklet");
public static final ResourceLocation RES_LOC_HALLOWEEN = AssetUtil.getBookletGuiLocation("guiBookletHalloween");
public static final ResourceLocation RES_LOC_CHRISTMAS = AssetUtil.getBookletGuiLocation("guiBookletChristmas");
public static final ResourceLocation RES_LOC_VALENTINE = AssetUtil.getBookletGuiLocation("guiBookletValentinesDay");
2015-11-16 19:57:46 +01:00
2015-10-03 10:16:18 +02:00
public static final int CHAPTER_BUTTONS_AMOUNT = 13;
2015-12-17 21:58:59 +01:00
public static final int INDEX_BUTTONS_OFFSET = 3;
2015-12-19 10:30:39 +01:00
private static final int[] AND_HIS_NAME_IS = new int[]{Keyboard.KEY_C, Keyboard.KEY_E, Keyboard.KEY_N, Keyboard.KEY_A};
2016-05-19 20:05:12 +02:00
public final int xSize;
public final int ySize;
2016-06-01 00:39:35 +02:00
public final IEntrySet currentEntrySet = new EntrySet(null);
public final GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT];
public final GuiButton[] bookmarkButtons = new GuiButton[8];
public final GuiScreen parentScreen;
private final boolean tryOpenMainPage;
private final boolean saveOnClose;
2015-08-28 21:17:09 +02:00
public int guiLeft;
public int guiTop;
public int indexPageAmount;
public GuiButton buttonForward;
public GuiButton buttonBackward;
public GuiButton buttonPreviousScreen;
public GuiButton buttonUpdate;
public GuiButton buttonTwitter;
public GuiButton buttonForum;
public GuiButton buttonAchievements;
public GuiButton buttonConfig;
public GuiButton buttonWebsite;
2016-05-06 10:55:51 +02:00
public GuiButton buttonPatreon;
2016-05-29 22:11:18 +02:00
public GuiButton buttonViewOnline;
public GuiTextField searchField;
public boolean shouldSaveDataNextClose;
2016-07-07 17:59:45 +02:00
public String bookletName;
private int ticksElapsed;
2015-10-04 13:21:07 +02:00
private boolean mousePressed;
2015-12-02 22:31:50 +01:00
private int hisNameIsAt;
2015-11-24 17:50:27 +01:00
public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){
2015-08-28 21:17:09 +02:00
this.xSize = 146;
this.ySize = 180;
this.parentScreen = parentScreen;
2015-11-24 17:50:27 +01:00
this.tryOpenMainPage = tryOpenMainPage;
this.saveOnClose = saveOnClose;
2015-08-28 21:17:09 +02:00
}
public FontRenderer getFontRenderer(){
return this.fontRendererObj;
}
2016-06-12 13:39:26 +02:00
@Override
2015-12-04 18:14:03 +01:00
public List getButtonList(){
return this.buttonList;
}
2015-08-28 21:17:09 +02:00
@Override
public void drawScreen(int x, int y, float f){
//Fixes Unicode flag
boolean unicodeBefore = this.fontRendererObj.getUnicodeFlag();
this.fontRendererObj.setUnicodeFlag(true);
2015-12-24 23:13:57 +01:00
//To Player:
2015-12-24 23:13:46 +01:00
//
//FastCraft's a must, definitely
//But the bigger unicode option sucks real
//It screws with my book and makes me feel ill
//So don't fuck with everything unintentionally
//
//(This fixes your fuckery)
GlStateManager.scale(1.0F, 1.0F, 1.0F);
2015-12-24 23:13:46 +01:00
//Draws the Background
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
2016-06-17 23:50:38 +02:00
this.mc.getTextureManager().bindTexture(ClientProxy.jingleAllTheWay ? RES_LOC_CHRISTMAS : (ClientProxy.pumpkinBlurPumpkinBlur ? RES_LOC_HALLOWEEN : (ClientProxy.bulletForMyValentine ? RES_LOC_VALENTINE : RES_LOC)));
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
//Draws the search bar
2016-05-14 13:51:18 +02:00
if(this.currentEntrySet.getCurrentEntry() instanceof BookletEntryAllSearch && this.currentEntrySet.getCurrentChapter() == null){
2016-06-17 23:50:38 +02:00
this.mc.getTextureManager().bindTexture(RES_LOC);
2015-08-29 15:40:12 +02:00
this.drawTexturedModalRect(this.guiLeft+146, this.guiTop+160, 146, 80, 70, 14);
}
//Draws Achievement Info
BookletUtils.drawAchievementInfo(this, true, x, y);
//Draws the title
this.fontRendererObj.setUnicodeFlag(false);
BookletUtils.drawTitle(this);
this.fontRendererObj.setUnicodeFlag(true);
2015-08-28 21:17:09 +02:00
//Pre-Renders the current page's content etc.
BookletUtils.renderPre(this, x, y, this.ticksElapsed, this.mousePressed);
2016-06-12 13:39:26 +02:00
//Buttons and search field
if(this.currentEntrySet.getCurrentPage() != null){
this.fontRendererObj.setUnicodeFlag(false);
}
for(GuiButton button : this.buttonList){
button.drawButton(this.mc, x, y);
}
this.fontRendererObj.setUnicodeFlag(true);
2015-08-29 15:40:12 +02:00
this.searchField.drawTextBox();
//Renders the current page's content
2016-05-14 13:51:18 +02:00
if(this.currentEntrySet.getCurrentEntry() != null && this.currentEntrySet.getCurrentChapter() != null && this.currentEntrySet.getCurrentPage() != null){
this.currentEntrySet.getCurrentPage().render(this, x, y, this.ticksElapsed, this.mousePressed);
}
//Draws hovering texts for buttons
this.fontRendererObj.setUnicodeFlag(false);
BookletUtils.doHoverTexts(this, x, y);
2015-11-13 21:40:38 +01:00
BookletUtils.drawAchievementInfo(this, false, x, y);
this.fontRendererObj.setUnicodeFlag(unicodeBefore);
2015-10-04 13:21:07 +02:00
//Resets mouse
2016-06-12 13:39:26 +02:00
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(!this.searchField.isFocused() && AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){
if(this.hisNameIsAt+1 >= AND_HIS_NAME_IS.length){
2016-05-01 22:26:26 +02:00
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundHandler.duhDuhDuhDuuuh, 0.5F));
ModUtil.LOGGER.info("AND HIS NAME IS JOHN CENA DUH DUH DUH DUUUH");
this.hisNameIsAt = 0;
}
else{
this.hisNameIsAt++;
}
}
else{
this.hisNameIsAt = 0;
if(key == Keyboard.KEY_ESCAPE || (key == this.mc.gameSettings.keyBindInventory.getKeyCode() && !this.searchField.isFocused())){
if(this.parentScreen != null){
this.mc.displayGuiScreen(this.parentScreen);
2015-12-02 22:31:50 +01:00
}
else{
this.mc.displayGuiScreen(null);
this.mc.setIngameFocus();
2015-12-02 22:31:50 +01:00
}
}
else if(this.searchField.isFocused()){
this.searchField.textboxKeyTyped(theChar, key);
BookletUtils.updateSearchBar(this);
2015-12-02 22:31:50 +01:00
}
}
}
2015-08-31 06:15:06 +02:00
2016-02-01 17:49:55 +01:00
@Override
public void drawHoveringText(List list, int x, int y){
2016-02-01 17:49:55 +01:00
super.drawHoveringText(list, x, y);
}
2015-10-03 10:19:40 +02:00
@Override
protected void mouseClicked(int par1, int par2, int par3) throws IOException{
2015-10-03 10:19:40 +02:00
this.searchField.mouseClicked(par1, par2, par3);
//Left mouse button
2016-05-14 13:51:18 +02:00
if(par3 == 0 && this.currentEntrySet.getCurrentChapter() != null){
2015-10-04 13:21:07 +02:00
this.mousePressed = true;
}
//Right mouse button
else if(par3 == 1){
2016-05-14 13:51:18 +02:00
if(this.currentEntrySet.getCurrentChapter() != null){
BookletUtils.openIndexEntry(this, this.currentEntrySet.getCurrentEntry(), this.currentEntrySet.getPageInIndex(), true);
}
else{
BookletUtils.openIndexEntry(this, null, 1, true);
}
}
super.mouseClicked(par1, par2, par3);
2015-08-28 21:17:09 +02:00
}
@Override
public void actionPerformed(GuiButton button){
2016-06-12 13:39:26 +02:00
if(this.currentEntrySet.getCurrentPage() != null){
if(this.currentEntrySet.getCurrentPage().onActionPerformed(this, button)){
return;
}
}
//Handles update
if(button == this.buttonUpdate){
if(UpdateChecker.needsUpdateNotify){
BookletUtils.openBrowser(UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK);
}
}
2016-05-29 22:11:18 +02:00
//Handles View Online
else if(button == this.buttonViewOnline){
IBookletChapter chapter = this.currentEntrySet.getCurrentChapter();
if(chapter != null){
BookletUtils.openBrowser("http://ellpeck.de/actaddmanual/#"+chapter.getUnlocalizedName());
}
}
//Handles Website
else if(button == this.buttonWebsite){
BookletUtils.openBrowser("http://ellpeck.de");
}
2016-05-06 10:55:51 +02:00
//Handles Patreon
else if(button == this.buttonPatreon){
BookletUtils.openBrowser("http://www.patreon.com/Ellpeck");
}
//Handles Twitter
else if(button == this.buttonTwitter){
BookletUtils.openBrowser("http://twitter.com/ActAddMod");
}
//Handles forum
else if(button == this.buttonForum){
BookletUtils.openBrowser("http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2551118");
}
//Handles config
else if(button == this.buttonConfig){
2016-03-18 15:55:55 +01:00
this.mc.displayGuiScreen(new GuiConfiguration(this));
2015-08-28 21:17:09 +02:00
}
//Handles achievements
else if(button == this.buttonAchievements){
2016-03-18 15:55:55 +01:00
this.mc.displayGuiScreen(new GuiAAAchievements(this, this.mc.thePlayer.getStatFileWriter()));
2015-08-28 21:17:09 +02:00
}
else if(button == this.buttonForward){
BookletUtils.handleNextPage(this);
2015-08-28 21:17:09 +02:00
}
else if(button == this.buttonBackward){
BookletUtils.handlePreviousPage(this);
2015-08-28 21:17:09 +02:00
}
//Handles gonig from page to chapter or from chapter to index
else if(button == this.buttonPreviousScreen){
2016-05-14 13:51:18 +02:00
if(this.currentEntrySet.getCurrentChapter() != null){
BookletUtils.openIndexEntry(this, this.currentEntrySet.getCurrentEntry(), this.currentEntrySet.getPageInIndex(), true);
}
else{
BookletUtils.openIndexEntry(this, null, 1, true);
2015-08-28 21:17:09 +02:00
}
}
2015-11-16 19:57:46 +01:00
//Handles Bookmark button
2015-12-04 18:14:03 +01:00
else if(button instanceof BookmarkButton){
((BookmarkButton)button).onPressed();
2015-11-16 19:57:46 +01:00
}
else{
BookletUtils.handleChapterButtonClick(this, button);
2015-08-28 21:17:09 +02:00
}
}
2015-10-03 10:19:40 +02:00
@Override
public void initGui(){
2016-07-01 13:56:15 +02:00
int flavor = 1;
if(Util.RANDOM.nextFloat() <= 0.1){
2016-07-24 21:18:36 +02:00
flavor = MathHelper.getRandomIntegerInRange(Util.RANDOM, 2, 6);
2016-07-01 13:56:15 +02:00
}
this.bookletName = "info."+ModUtil.MOD_ID+".booklet.manualName.1."+flavor;
2015-10-03 10:19:40 +02:00
this.guiLeft = (this.width-this.xSize)/2;
this.guiTop = (this.height-this.ySize)/2;
2016-03-18 23:47:22 +01:00
this.buttonForward = new TexturedButton(0, this.guiLeft+this.xSize-26, this.guiTop+this.ySize+1, 164, 0, 18, 10, Collections.singletonList(TextFormatting.GOLD+"Next Page"));
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonForward);
2016-03-18 23:47:22 +01:00
this.buttonBackward = new TexturedButton(1, this.guiLeft+8, this.guiTop+this.ySize+1, 146, 0, 18, 10, Collections.singletonList(TextFormatting.GOLD+"Previous Page"));
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonBackward);
2016-03-18 23:47:22 +01:00
this.buttonPreviousScreen = new TexturedButton(2, this.guiLeft+this.xSize/2-7, this.guiTop+this.ySize+1, 182, 0, 15, 10, Collections.singletonList(TextFormatting.GOLD+"Back"));
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonPreviousScreen);
2015-12-04 18:14:03 +01:00
ArrayList updateHover = new ArrayList();
if(UpdateChecker.checkFailed){
2016-04-20 21:39:03 +02:00
updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.failed")).getFormattedText());
2015-12-04 18:14:03 +01:00
}
else if(UpdateChecker.needsUpdateNotify){
2016-04-20 21:39:03 +02:00
updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.generic")).getFormattedText());
updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString)).getFormattedText());
updateHover.add(StringUtil.localize("info."+ModUtil.MOD_ID+".update.buttonOptions"));
2015-12-04 18:14:03 +01:00
}
this.buttonUpdate = new TexturedButton(4, this.guiLeft-11, this.guiTop-11, 245, 0, 11, 11, updateHover);
2016-05-29 22:11:18 +02:00
this.buttonUpdate.visible = UpdateChecker.needsUpdateNotify || UpdateChecker.checkFailed;
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonUpdate);
2016-05-06 10:55:51 +02:00
this.buttonTwitter = new TexturedButton(5, this.guiLeft, this.guiTop+10, 213, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open @ActAddMod on Twitter in Browser"));
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonTwitter);
2016-05-06 10:55:51 +02:00
this.buttonForum = new TexturedButton(6, this.guiLeft, this.guiTop+20, 221, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open Minecraft Forum Post in Browser"));
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonForum);
2016-03-18 23:47:22 +01:00
this.buttonAchievements = new TexturedButton(7, this.guiLeft+138, this.guiTop, 205, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Show Achievements"));
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonAchievements);
ArrayList websiteHover = new ArrayList();
2016-03-18 23:47:22 +01:00
websiteHover.add(TextFormatting.GOLD+"Open Author's Website");
websiteHover.add("(There's some cool stuff there!)");
2016-03-18 23:47:22 +01:00
websiteHover.add(TextFormatting.GRAY+""+TextFormatting.ITALIC+"Would you call this Product Placement?");
2016-05-06 10:55:51 +02:00
this.buttonWebsite = new TexturedButton(-99, this.guiLeft, this.guiTop+30, 229, 0, 8, 8, websiteHover);
this.buttonList.add(this.buttonWebsite);
2016-05-06 10:55:51 +02:00
List<String> patreonHover = new ArrayList<String>();
patreonHover.add("Like the mod?");
patreonHover.add("Why don't support me on "+TextFormatting.GOLD+"Patreon"+TextFormatting.RESET+"?");
this.buttonPatreon = new TexturedButton(-100, this.guiLeft, this.guiTop, 237, 0, 8, 8, patreonHover);
this.buttonList.add(this.buttonPatreon);
2016-05-29 22:11:18 +02:00
this.buttonViewOnline = new TexturedButton(-101, this.guiLeft+146, this.guiTop+180, 245, 44, 11, 11, Collections.singletonList(TextFormatting.GOLD+"View Online"));
this.buttonList.add(this.buttonViewOnline);
2015-12-04 18:14:03 +01:00
ArrayList configHover = new ArrayList();
2016-03-18 23:47:22 +01:00
configHover.add(TextFormatting.GOLD+"Show Configuration GUI");
2015-12-04 18:14:03 +01:00
configHover.addAll(this.fontRendererObj.listFormattedStringToWidth("It is highly recommended that you restart your game after changing anything as that prevents possible bugs occuring!", 200));
this.buttonConfig = new TexturedButton(8, this.guiLeft+138, this.guiTop+10, 197, 0, 8, 8, configHover);
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.buttonConfig);
for(int i = 0; i < this.chapterButtons.length; i++){
2016-05-02 17:46:53 +02:00
this.chapterButtons[i] = new IndexButton(9+i, this.guiLeft+15, this.guiTop+10+(i*12), 115, 10, "", this);
2015-10-03 10:19:40 +02:00
this.buttonList.add(this.chapterButtons[i]);
}
2015-11-16 19:57:46 +01:00
for(int i = 0; i < this.bookmarkButtons.length; i++){
2016-05-02 17:46:53 +02:00
int x = this.guiLeft+this.xSize/2-(this.bookmarkButtons.length/2*16)+(i*16);
2015-12-04 18:14:03 +01:00
this.bookmarkButtons[i] = new BookmarkButton(this.chapterButtons[this.chapterButtons.length-1].id+1+i, x, this.guiTop+this.ySize+13, this);
2015-11-16 19:57:46 +01:00
this.buttonList.add(this.bookmarkButtons[i]);
}
2016-05-02 17:46:53 +02:00
this.searchField = new GuiTextField(4500, this.fontRendererObj, this.guiLeft+148, this.guiTop+162, 66, 10);
2015-10-03 10:19:40 +02:00
this.searchField.setMaxStringLength(30);
this.searchField.setEnableBackgroundDrawing(false);
this.searchField.setCanLoseFocus(false);
2015-10-03 10:19:40 +02:00
this.currentEntrySet.removeEntry();
2015-10-03 10:19:40 +02:00
if(ItemBooklet.forcedEntry == null){
//Open last entry or introductory entry
PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(Minecraft.getMinecraft().thePlayer);
if(data != null){
if(this.tryOpenMainPage && !data.theCompound.getBoolean("BookAlreadyOpened")){
BookletUtils.openIndexEntry(this, InitBooklet.chapterIntro.entry, 1, true);
BookletUtils.openChapter(this, InitBooklet.chapterIntro, null);
NBTTagCompound extraData = new NBTTagCompound();
extraData.setBoolean("BookAlreadyOpened", true);
NBTTagCompound dataToSend = new NBTTagCompound();
dataToSend.setTag("Data", extraData);
dataToSend.setInteger("WorldID", Minecraft.getMinecraft().theWorld.provider.getDimension());
dataToSend.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId());
PacketHandler.theNetwork.sendToServer(new PacketClientToServer(dataToSend, PacketHandler.CHANGE_PLAYER_DATA_HANDLER));
}
else{
BookletUtils.openLastBookPage(this, data.theCompound.getCompoundTag("BookletData"));
}
}
2016-07-14 22:04:24 +02:00
this.shouldSaveDataNextClose = false;
2015-10-03 10:19:40 +02:00
}
else{
//Open forced entry
BookletUtils.openIndexEntry(this, ItemBooklet.forcedEntry.entry, ItemBooklet.forcedEntry.pageInIndex, true);
BookletUtils.openChapter(this, ItemBooklet.forcedEntry.chapter, ItemBooklet.forcedEntry.page);
ItemBooklet.forcedEntry = null;
2016-07-14 22:04:24 +02:00
this.shouldSaveDataNextClose = true;
2015-10-03 10:19:40 +02:00
}
2015-10-03 10:19:40 +02:00
}
2015-12-19 10:30:39 +01:00
@Override
//For scrolling through pages
public void handleMouseInput() throws IOException{
2015-12-19 10:30:39 +01:00
int wheel = Mouse.getEventDWheel();
if(wheel != 0){
2016-01-08 20:51:03 +01:00
if(wheel < 0){
2015-12-19 10:30:39 +01:00
BookletUtils.handleNextPage(this);
}
2016-01-08 20:51:03 +01:00
else if(wheel > 0){
2015-12-19 10:30:39 +01:00
BookletUtils.handlePreviousPage(this);
}
}
super.handleMouseInput();
2015-12-19 10:30:39 +01:00
}
2015-10-03 10:19:40 +02:00
@Override
public void updateScreen(){
super.updateScreen();
this.searchField.updateCursorCounter();
2016-05-14 13:51:18 +02:00
if(this.currentEntrySet.getCurrentEntry() != null && this.currentEntrySet.getCurrentChapter() != null && this.currentEntrySet.getCurrentPage() != null){
this.currentEntrySet.getCurrentPage().updateScreen(this.ticksElapsed);
2015-10-03 10:19:40 +02:00
}
2016-05-29 22:11:18 +02:00
boolean buttonThere = UpdateChecker.needsUpdateNotify || UpdateChecker.checkFailed;
2015-10-03 10:19:40 +02:00
this.buttonUpdate.visible = buttonThere;
if(buttonThere){
if(this.ticksElapsed%8 == 0){
2015-12-04 18:14:03 +01:00
TexturedButton button = (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(){
if(this.saveOnClose && this.shouldSaveDataNextClose){
NBTTagCompound bookletData = new NBTTagCompound();
BookletUtils.saveBookPage(this, bookletData);
NBTTagCompound extraData = new NBTTagCompound();
extraData.setTag("BookletData", bookletData);
NBTTagCompound dataToSend = new NBTTagCompound();
dataToSend.setTag("Data", extraData);
dataToSend.setInteger("WorldID", Minecraft.getMinecraft().theWorld.provider.getDimension());
dataToSend.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId());
PacketHandler.theNetwork.sendToServer(new PacketClientToServer(dataToSend, PacketHandler.CHANGE_PLAYER_DATA_HANDLER));
2015-11-24 17:50:27 +01:00
}
2015-10-03 10:19:40 +02:00
}
@Override
public boolean doesGuiPauseGame(){
return false;
}
2016-01-05 14:57:50 +01:00
@Override
public void renderTooltipAndTransferButton(BookletPage from, ItemStack stack, int x, int y, boolean renderTransferButton, boolean mousePressed){
boolean flagBefore = this.mc.fontRendererObj.getUnicodeFlag();
this.mc.fontRendererObj.setUnicodeFlag(false);
2016-01-05 14:57:50 +01:00
List list = stack.getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips);
for(int k = 0; k < list.size(); ++k){
if(k == 0){
list.set(k, stack.getRarity().rarityColor+(String)list.get(k));
}
else{
2016-03-18 23:47:22 +01:00
list.set(k, TextFormatting.GRAY+(String)list.get(k));
2016-01-05 14:57:50 +01:00
}
}
if(renderTransferButton){
BookletPage page = BookletUtils.getFirstPageForStack(stack);
if(page != null && page != from){
list.add(from.getClickToSeeRecipeString());
if(mousePressed){
2016-05-19 20:05:12 +02:00
BookletUtils.openIndexEntry(this, page.getChapter().getEntry(), ActuallyAdditionsAPI.BOOKLET_ENTRIES.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true);
2016-01-05 14:57:50 +01:00
BookletUtils.openChapter(this, page.getChapter(), page);
2016-05-01 22:26:26 +02:00
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F));
2016-01-05 14:57:50 +01:00
}
}
}
this.drawHoveringText(list, x, y);
this.mc.fontRendererObj.setUnicodeFlag(flagBefore);
2016-01-05 14:57:50 +01:00
}
@Override
public int getXSize(){
return this.xSize;
}
@Override
public int getYSize(){
return this.ySize;
}
@Override
public int getGuiLeft(){
return this.guiLeft;
}
@Override
public int getGuiTop(){
return this.guiTop;
}
@Override
public void drawRect(int startX, int startY, int u, int v, int xSize, int ySize){
this.drawTexturedModalRect(startX, startY, u, v, xSize, ySize);
}
2016-01-05 14:57:50 +01:00
@Override
2016-05-14 13:51:18 +02:00
public IEntrySet getCurrentEntrySet(){
2016-01-05 14:57:50 +01:00
return this.currentEntrySet;
}
2015-08-28 21:17:09 +02:00
}