Краш при открытии своей книги

Версия Minecraft
1.7.10

Led

291
3
0
Здравствуйте!
У меня есть книга. Я открываю ее гуи, в 86.4% все нормально (выборка - 216 отркываний).
А в 13.6% открываний происходит краш, в качестве проблемы указывающий строку, проверяющий номер совпадение номера страницы с нулем (для того что бы отрисовать обложку).


Заранее спасибо!

Код:
[09:48:11] [Server thread/INFO] [STDOUT]: [ru.legendary.lwmod.lwmcore.gui.guiGuideBook:initGui:49]: GuiMysteriousStranger initGUI()
[09:48:12] [Server thread/INFO]: Stopping server
[09:48:12] [Server thread/INFO]: Saving players
[09:48:12] [Server thread/INFO]: Saving worlds
[09:48:12] [Server thread/INFO]: Saving chunks for level 'Новый мир_serv'/Overworld
[09:48:12] [Server thread/INFO]: Saving chunks for level 'Новый мир_serv'/Nether
[09:48:12] [Server thread/INFO]: Saving chunks for level 'Новый мир_serv'/The End
[09:48:12] [Server thread/INFO] [FML]: Unloading dimension 0
[09:48:12] [Server thread/INFO] [FML]: Unloading dimension -1
[09:48:12] [Server thread/INFO] [FML]: Unloading dimension 1
[09:48:12] [Server thread/INFO] [FML]: Applying holder lookups
[09:48:12] [Server thread/INFO] [FML]: Holder lookups applied
[09:48:13] [Client thread/FATAL]: Reported exception thrown!
net.minecraft.util.ReportedException: Ticking screen
 at net.minecraft.client.Minecraft.runTick(Minecraft.java:1766) ~[Minecraft.class:?]
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?]
 at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
 at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_60]
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_60]
 at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_60]
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
 at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
 at ru.legendary.lwmod.lwmcore.gui.guiGuideBook.updateScreen(guiGuideBook.java:71) ~[guiGuideBook.class:?]
 at net.minecraft.client.Minecraft.runTick(Minecraft.java:1752) ~[Minecraft.class:?]
 ... 11 more
[09:48:13] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Hey, that tickles! Hehehe!

Time: 23.10.16 9:48
Description: Ticking screen

java.lang.NullPointerException: Ticking screen
 at ru.legendary.lwmod.lwmcore.gui.guiGuideBook.updateScreen(guiGuideBook.java:71)
 at net.minecraft.client.Minecraft.runTick(Minecraft.java:1752)
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
 at net.minecraft.client.Minecraft.run(Minecraft.java:962)
 at net.minecraft.client.main.Main.main(Main.java:164)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
 at GradleStart.main(Unknown Source)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
 at ru.legendary.lwmod.lwmcore.gui.guiGuideBook.updateScreen(guiGuideBook.java:71)

-- Affected screen --
Details:
 Screen name: ru.legendary.lwmod.lwmcore.gui.guiGuideBook

-- Affected level --
Details:
 Level name: MpServer
 All players: 1 total; [EntityClientPlayerMP['Player458'/3068, l='MpServer', x=7,59, y=72,62, z=120,83]]
 Chunk stats: MultiplayerChunkCache: 169, 169
 Level seed: 0
 Level generator: ID 00 - default, ver 1. Features enabled: false
 Level generator options: 
 Level spawn location: World: (40,64,124), Chunk: (at 8,4,12 in 2,7; contains blocks 32,0,112 to 47,255,127), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
 Level time: 566952 game time, 1000 day time
 Level dimension: 0
 Level storage version: 0x00000 - Unknown?
 Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
 Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
 Forced entities: 127 total; [EntityBat['Летучая мышь'/2816, l='MpServer', x=-22,25, y=39,10, z=86,25], EntityZombie['Зомби'/2817, l='MpServer', x=-24,09, y=41,00, z=96,41], EntityPainting['Картина'/2854, l='MpServer', x=11,06, y=76,50, z=47,50], EntityPig['Свинья'/2818, l='MpServer', x=-31,19, y=70,00, z=108,75], EntityPainting['Картина'/2855, l='MpServer', x=13,50, y=77,00, z=44,06], EntityBat['Летучая мышь'/2819, l='MpServer', x=-24,75, y=63,10, z=125,75], EntityBat['Летучая мышь'/2820, l='MpServer', x=-20,44, y=44,45, z=132,00], EntityCreeper['Крипер'/2821, l='MpServer', x=-30,97, y=36,00, z=139,50], EntityCreeper['Крипер'/2822, l='MpServer', x=-21,50, y=24,00, z=160,50], EntitySheep['Овца'/2823, l='MpServer', x=-17,66, y=70,00, z=163,53], EntitySkeleton['Скелет'/2824, l='MpServer', x=-21,44, y=42,00, z=180,94], EntitySheep['Овца'/2825, l='MpServer', x=-20,50, y=72,00, z=182,41], EntitySheep['Овца'/2826, l='MpServer', x=-28,59, y=63,00, z=192,47], EntitySheep['Овца'/2837, l='MpServer', x=-1,53, y=77,00, z=63,44], EntityItemFrame['entity.ItemFrame.name'/2838, l='MpServer', x=-1,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/2839, l='MpServer', x=-2,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/2840, l='MpServer', x=-3,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/2841, l='MpServer', x=-5,50, y=72,50, z=114,94], EntityItemFrame['entity.ItemFrame.name'/2842, l='MpServer', x=-0,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2843, l='MpServer', x=-0,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2844, l='MpServer', x=-1,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2845, l='MpServer', x=-1,50, y=70,50, z=138,94], EntityBat['Летучая мышь'/2846, l='MpServer', x=-2,50, y=25,10, z=175,53], EntityBat['Летучая мышь'/2847, l='MpServer', x=-5,26, y=22,70, z=167,68], EntityPainting['Картина'/2854, l='MpServer', x=11,06, y=76,50, z=47,50], EntityPainting['Картина'/2855, l='MpServer', x=13,50, y=77,00, z=44,06], EntityItemFrame['entity.ItemFrame.name'/2856, l='MpServer', x=15,94, y=76,50, z=47,50], EntityPainting['Картина'/2857, l='MpServer', x=14,50, y=77,50, z=50,94], EntityPainting['Картина'/2858, l='MpServer', x=12,50, y=77,50, z=50,94], EntityItemFrame['entity.ItemFrame.name'/2859, l='MpServer', x=13,50, y=80,50, z=50,94], EntityCreeper['Крипер'/2860, l='MpServer', x=10,53, y=37,00, z=97,31], EntityItemFrame['entity.ItemFrame.name'/2861, l='MpServer', x=12,50, y=72,50, z=98,06], EntityItemFrame['entity.ItemFrame.name'/2862, l='MpServer', x=13,50, y=72,50, z=98,06], EntityItemFrame['entity.ItemFrame.name'/2863, l='MpServer', x=14,50, y=72,50, z=98,06], EntityItemFrame['entity.ItemFrame.name'/2864, l='MpServer', x=15,50, y=72,50, z=98,06], EntityCreeper['Крипер'/2865, l='MpServer', x=9,41, y=60,00, z=122,00], EntityItemFrame['entity.ItemFrame.name'/2866, l='MpServer', x=7,50, y=72,50, z=113,06], EntityItemFrame['entity.ItemFrame.name'/2867, l='MpServer', x=8,50, y=72,50, z=113,06], EntitySkeleton['Скелет'/2868, l='MpServer', x=10,66, y=59,00, z=130,31], EntityItemFrame['entity.ItemFrame.name'/2869, l='MpServer', x=5,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2870, l='MpServer', x=4,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2871, l='MpServer', x=3,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2872, l='MpServer', x=2,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2873, l='MpServer', x=4,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2874, l='MpServer', x=5,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2875, l='MpServer', x=2,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2876, l='MpServer', x=3,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2877, l='MpServer', x=1,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2878, l='MpServer', x=1,50, y=70,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2879, l='MpServer', x=0,50, y=71,50, z=138,94], EntityItemFrame['entity.ItemFrame.name'/2880, l='MpServer', x=0,50, y=70,50, z=138,94], EntitySheep['Овца'/2881, l='MpServer', x=13,53, y=63,00, z=170,47], EntityBat['Летучая мышь'/2882, l='MpServer', x=14,72, y=19,10, z=183,25], EntitySheep['Овца'/2883, l='MpServer', x=6,13, y=69,00, z=187,41], EntityCreeper['Крипер'/2888, l='MpServer', x=18,52, y=59,47, z=121,67], EntitySkeleton['Скелет'/2889, l='MpServer', x=18,09, y=59,00, z=120,59], EntityItemFrame['entity.ItemFrame.name'/2890, l='MpServer', x=24,50, y=71,50, z=124,94], EntityZombie['Зомби'/2891, l='MpServer', x=25,00, y=26,00, z=133,44], EntityZombie['Зомби'/2892, l='MpServer', x=18,99, y=27,00, z=130,47], EntitySheep['Овца'/2893, l='MpServer', x=31,41, y=63,00, z=146,22], EntityZombie['Зомби'/2894, l='MpServer', x=29,44, y=49,00, z=154,47], EntitySheep['Овца'/2895, l='MpServer', x=25,84, y=69,00, z=160,06], EntityBat['Летучая мышь'/2896, l='MpServer', x=30,50, y=19,10, z=190,75], EntityWitch['Ведьма'/2897, l='MpServer', x=25,63, y=44,00, z=181,53], EntitySheep['Овца'/2904, l='MpServer', x=40,75, y=69,00, z=154,50], EntitySheep['Овца'/2905, l='MpServer', x=37,69, y=75,00, z=194,53], EntitySheep['Овца'/2906, l='MpServer', x=34,91, y=75,00, z=196,53], EntityPig['Свинья'/2916, l='MpServer', x=60,19, y=69,00, z=57,88], EntityBat['Летучая мышь'/2917, l='MpServer', x=57,31, y=28,00, z=67,56], EntityBat['Летучая мышь'/2918, l='MpServer', x=57,26, y=35,89, z=74,63], EntityPig['Свинья'/2919, l='MpServer', x=49,97, y=69,00, z=72,03], EntitySheep['Овца'/2920, l='MpServer', x=61,94, y=67,00, z=65,53], EntityBat['Летучая мышь'/2921, l='MpServer', x=59,50, y=29,73, z=78,34], EntitySheep['Овца'/2922, l='MpServer', x=48,53, y=63,00, z=139,09], EntitySheep['Овца'/2923, l='MpServer', x=49,16, y=65,00, z=142,44], EntitySheep['Овца'/2924, l='MpServer', x=61,47, y=66,00, z=152,63], EntitySheep['Овца'/2925, l='MpServer', x=55,63, y=68,00, z=155,47], EntityZombie['Зомби'/2926, l='MpServer', x=49,50, y=21,00, z=177,94], EntityZombie['Зомби'/2927, l='MpServer', x=50,59, y=22,00, z=180,53], EntitySheep['Овца'/2928, l='MpServer', x=59,91, y=66,00, z=177,09], EntitySheep['Овца'/2929, l='MpServer', x=48,50, y=73,00, z=186,66], EntityZombie['Зомби'/2930, l='MpServer', x=54,44, y=26,00, z=193,69], EntityPig['Свинья'/2946, l='MpServer', x=74,78, y=63,00, z=53,88], EntitySkeleton['Скелет'/2947, l='MpServer', x=77,75, y=17,00, z=64,31], EntitySheep['Овца'/2948, l='MpServer', x=75,78, y=64,00, z=84,53], EntityBat['Летучая мышь'/2949, l='MpServer', x=78,25, y=26,10, z=102,25], EntitySkeleton['Скелет'/2950, l='MpServer', x=73,50, y=63,00, z=112,13], EntitySheep['Овца'/2951, l='MpServer', x=70,81, y=65,00, z=127,69], EntityZombie['Зомби'/2952, l='MpServer', x=78,34, y=45,00, z=159,34], EntitySheep['Овца'/2953, l='MpServer', x=76,16, y=76,00, z=162,56], EntitySheep['Овца'/2954, l='MpServer', x=77,78, y=70,00, z=164,47], EntitySheep['Овца'/2955, l='MpServer', x=75,94, y=79,00, z=196,97], EntitySheep['Овца'/2963, l='MpServer', x=82,44, y=70,00, z=158,91], EntitySheep['Овца'/2965, l='MpServer', x=84,88, y=64,00, z=146,22], EntityPainting['Картина'/2857, l='MpServer', x=14,50, y=77,50, z=50,94], EntityPainting['Картина'/2858, l='MpServer', x=12,50, y=77,50, z=50,94], EntitySheep['Овца'/2744, l='MpServer', x=-68,72, y=71,00, z=79,78], EntityCreeper['Крипер'/2747, l='MpServer', x=-71,78, y=35,00, z=134,47], EntityCreeper['Крипер'/2749, l='MpServer', x=-65,41, y=48,00, z=137,00], EntityCreeper['Крипер'/2750, l='MpServer', x=-66,50, y=36,00, z=153,50], EntityCreeper['Крипер'/2751, l='MpServer', x=-72,41, y=38,00, z=146,00], EntityCreeper['Крипер'/2752, l='MpServer', x=-68,50, y=36,00, z=153,50], EntityCreeper['Крипер'/2755, l='MpServer', x=-67,50, y=42,00, z=171,50], EntitySkeleton['Скелет'/2758, l='MpServer', x=-66,09, y=48,00, z=168,44], EntitySheep['Овца'/2759, l='MpServer', x=-72,34, y=100,00, z=166,50], EntityZombie['Зомби'/2769, l='MpServer', x=-56,53, y=40,00, z=47,44], EntitySkeleton['Скелет'/2770, l='MpServer', x=-48,63, y=13,00, z=87,69], EntityPig['Свинья'/2771, l='MpServer', x=-56,69, y=67,00, z=98,50], EntityCreeper['Крипер'/2772, l='MpServer', x=-52,69, y=47,00, z=114,07], EntityZombie['Зомби'/2773, l='MpServer', x=-59,44, y=40,00, z=127,53], EntityBat['Летучая мышь'/2774, l='MpServer', x=-59,25, y=42,10, z=126,50], EntitySkeleton['Скелет'/2775, l='MpServer', x=-49,88, y=41,00, z=132,59], EntitySkeleton['Скелет'/2776, l='MpServer', x=-61,91, y=49,00, z=138,25], EntityZombie['Зомби'/2777, l='MpServer', x=-57,91, y=35,00, z=152,53], EntityZombie['Зомби'/2778, l='MpServer', x=-62,00, y=38,00, z=147,56], EntitySheep['Овца'/2779, l='MpServer', x=-55,81, y=89,00, z=161,25], EntityZombie['Зомби'/2789, l='MpServer', x=-32,41, y=33,00, z=77,00], EntityCow['Корова'/2790, l='MpServer', x=-35,19, y=72,00, z=86,91], EntityPig['Свинья'/2791, l='MpServer', x=-36,50, y=77,00, z=80,31], EntityCreeper['Крипер'/2792, l='MpServer', x=-38,50, y=13,00, z=110,50], EntitySkeleton['Скелет'/2793, l='MpServer', x=-34,53, y=58,00, z=98,44], EntityPig['Свинья'/2794, l='MpServer', x=-34,84, y=71,00, z=98,91], EntitySkeleton['Скелет'/2795, l='MpServer', x=-43,78, y=22,00, z=119,25], EntitySkeleton['Скелет'/2796, l='MpServer', x=-46,50, y=21,00, z=129,50], EntitySkeleton['Скелет'/2797, l='MpServer', x=-47,50, y=41,00, z=176,50], EntityClientPlayerMP['Player458'/3068, l='MpServer', x=7,59, y=72,62, z=120,83], EntityPig['Свинья'/2815, l='MpServer', x=-20,88, y=75,00, z=77,91]]
 Retry entities: 0 total; []
 Server brand: fml,forge
 Server type: Integrated singleplayer server
Stacktrace:
 at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:415)
 at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2566)
 at net.minecraft.client.Minecraft.run(Minecraft.java:984)
 at net.minecraft.client.main.Main.main(Main.java:164)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
 at GradleStart.main(Unknown Source)

-- System Details --
Details:
 Minecraft Version: 1.7.10
 Operating System: Windows 7 (amd64) version 6.1
 Java Version: 1.8.0_60, Oracle Corporation
 Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
 Memory: 1884553816 bytes (1797 MB) / 2112618496 bytes (2014 MB) up to 2112618496 bytes (2014 MB)
 JVM Flags: 3 total; -Xincgc -Xmx2048M -Xms2048M
 AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
 IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
 FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1564 8 mods loaded, 8 mods active
 States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
 UCHIJAAAAAAAAAAAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
 UCHIJAAAAAAAAAAAAAA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1564-1.7.10.jar) 
 UCHIJAAAAAAAAAAAAAA Forge{10.13.4.1564} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1564-1.7.10.jar) 
 UCHIJAAAAAAAAAAAAAA lwm3{v1.0.4-indev (1.8.x)} [LWMod: Core] (bin) 
 UCHIJAAAAAAAAAAAAAA lwm2{v1.0.4-indev (1.8.x)} [LWMod: SoulPearl] (bin) 
 UCHIJAAAAAAAAAAAAAA lwm4{v1.0.4-indev (1.8.x)} [LWMod: Event] (bin) 
 UCHIJAAAAAAAAAAAAAA lwm5{v1.0.4-indev (1.8.x)} [LWMod: Farm] (bin) 
 UCHIJAAAAAAAAAAAAAA legendarymod{v1.0.4-indev (1.8.x)} [LWMod: Tools] (bin) 
 GL info: ' Vendor: 'Intel' Version: '4.0.0 - Build 10.18.10.4276' Renderer: 'Intel(R) HD Graphics 4000'
 Launched Version: 1.7.10
 LWJGL: 2.9.1
 OpenGL: Intel(R) HD Graphics 4000 GL version 4.0.0 - Build 10.18.10.4276, Intel
 GL Caps: Using GL 1.3 multitexturing.
Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
Anisotropic filtering is supported and maximum anisotropy is 16.
Shaders are available because OpenGL 2.1 is supported.

 Is Modded: Definitely; Client brand changed to 'fml,forge'
 Type: Client (map_client.txt)
 Resource Packs: [RUS_172_bold]
 Current Language: Русский (Россия)
 Profiler Position: N/A (disabled)
 Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
 Anisotropic Filtering: Off (1)
[09:48:13] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:398]: #@!@# Game crashed! Crash report saved to: #@!@# C:\DevMine\eclipse\.\crash-reports\crash-2016-10-23_09.48.13-client.txt
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
Код:
package ru.legendary.lwmod.lwmcore.gui;

import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.ResourceLocation;
import ru.legendary.lwmod.lwmcore.LWMCore;

public class guiGuideBook extends GuiScreen
{ 
    private final int bookImageHeight = 192; //Высота изображения
    private final int bookImageWidth = 249; //Ширина изображения
    private int currPage = 0; //Активная страница
    private static final int bookTotalPages = 4; //Общее количество страниц
    private static ResourceLocation[] bookPageTextures = new ResourceLocation[bookTotalPages]; //Изображенияе GUI
    private static String[] stringPageText = new String[bookTotalPages]; //Текст в GUI
    private GuiButton buttonDone; //Кнопка закрытия
    private NextPageButton buttonNextPage; //Пользопательская кнопка "Предыдущаяя страница"
    private NextPageButton buttonPreviousPage; //Пользовательская кнопака "Предыдущаяя страница" 
    
    
    
    public guiGuideBook()
    {
        bookPageTextures[0] = new ResourceLocation(LWMCore.MOD_ID + ":textures/gui/my_book_title.png");
        bookPageTextures[1] = new ResourceLocation(LWMCore.MOD_ID + ":textures/gui/my_book.png");
        bookPageTextures[2] = new ResourceLocation(LWMCore.MOD_ID + ":textures/gui/my_book.png");
        
        
        stringPageText[0] = "";
        stringPageText[1] = "стр 2";
        stringPageText[2]="Стр3 1\n\nстр 3 3";
        stringPageText[3]="конец...";
 }

    /**
     * Добавляет кнопки (и другие элементы управления) на экране.
     */
    @Override
    public void initGui() 
    {
     // DEBUG
     System.out.println("GuiMysteriousStranger initGUI()");
        buttonList.clear();
        Keyboard.enableRepeatEvents(true);
        
        // добавление кнопок (ID кнопки, позиция по горизонтали, позиция по вертикали, длинна (width) кнопки (по умолчианию 200), высота кнопки (по умолчанию 20), отображаемая строка) 
        buttonDone = new GuiButton(0, width / 2 /*+ 2*/ - 49, 4 + bookImageHeight, 98, 20, I18n.format("gui.done", new Object[0]));
        buttonList.add(buttonDone);
        
        int offsetFromScreenLeft = (width - bookImageWidth) / 2;
        
        buttonList.add(buttonNextPage = new NextPageButton(1, 
              offsetFromScreenLeft + 120, 156, true));
        buttonList.add(buttonPreviousPage = new NextPageButton(2, 
              offsetFromScreenLeft + 38, 156, false));
    }

    /**
     * Вызывается из основного цикла игры для обновления экрана. Здесь мы прячем кнопки в зависимости от номера сраницы
     */
    @Override
    public void updateScreen() 
    {
        buttonDone.visible = currPage >= 0;/*(currPage == bookTotalPages - 1);*/
        buttonNextPage.visible = (currPage < bookTotalPages - 1);
        buttonPreviousPage.visible = currPage > 0;
    }
 
    /**
     * Отрисовка компонентов GUI.
     */
    @Override
    public void drawScreen(int parWidth, int parHeight, float p_73863_3_)
    {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        if (currPage < 0 && currPage > 4) {currPage = 0;}
        System.out.println("Станица: " + currPage);
        if (currPage == 0)
     {
         mc.getTextureManager().bindTexture(bookPageTextures[0]);
     }
        else
        {
         mc.getTextureManager().bindTexture(bookPageTextures[1]);
        }
        int offsetFromScreenLeft = (width - bookImageWidth ) / 2;
        drawTexturedModalRect(offsetFromScreenLeft, 2, 0, 0, bookImageWidth, 
              bookImageHeight);
        int widthOfString;
        String stringPageIndicator = I18n.format("book.pageIndicator", 
              new Object[] {Integer.valueOf(currPage + 1), bookTotalPages});
        widthOfString = fontRendererObj.getStringWidth(stringPageIndicator);
        fontRendererObj.drawString(stringPageIndicator, 
              offsetFromScreenLeft - widthOfString + bookImageWidth - 44, 
              18, 0);
        fontRendererObj.drawSplitString(stringPageText[currPage], 
              offsetFromScreenLeft + 36, 34, 116, 0);
        super.drawScreen(parWidth, parHeight, p_73863_3_);

    }

    /**
     * Called when a mouse button is pressed and the mouse is moved around. 
     * Parameters are : mouseX, mouseY, lastButtonClicked & 
     * timeSinceMouseClick.
     */
    @Override
    protected void mouseClickMove(int parMouseX, int parMouseY, 
          int parLastButtonClicked, long parTimeSinceMouseClick) 
    {
     
    }

    /**
     * Здесь мы проверяем, какие кнопки нажаты
     */
    @Override
    protected void actionPerformed(GuiButton parButton) 
    {
     if (parButton == buttonDone)
     {
         // You can send a packet to server here if you need server to do 
         // something
         mc.displayGuiScreen((GuiScreen)null);
     }
        else if (parButton == buttonNextPage)
        {
            if (currPage < bookTotalPages - 1)
            {
                ++currPage;
            }
        }
        else if (parButton == buttonPreviousPage)
        {
            if (currPage > 0)
            {
                --currPage;
            }
        }
   }

    /**
     * Вызывается, когда экран выгружается. 
     * Используется для отключения клавиатуры повторение событий
     */
    @Override
    public void onGuiClosed() 
    {
     
    }

    /**
     * Возвращаем истинну, если ГУИ должно останавливать игру (в Single Player)
     */
    @Override
    public boolean doesGuiPauseGame()
    {
        return false;
    }
    
    
    
    @SideOnly(Side.CLIENT)
    static class NextPageButton extends GuiButton
    {
        private final boolean isNextButton;

        public NextPageButton(int parButtonId, int parPosX, int parPosY, 
              boolean parIsNextButton)
        {
            super(parButtonId, parPosX, parPosY, 23, 13, "");
            isNextButton = parIsNextButton;
        }

        /**
         * Создаем кастомные кнопки. Надо заметить 
         */
        @Override
        public void drawButton(Minecraft mc, int parX, int parY)
        {
            if (visible)
            {
                boolean isButtonPressed = (parX >= xPosition 
                      && parY >= yPosition 
                      && parX < xPosition + width 
                      && parY < yPosition + height);
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                mc.getTextureManager().bindTexture(bookPageTextures[1]);
                int textureX = 0;
                int textureY = 192;

                if (isButtonPressed)
                {
                    textureX += 23;
                }

                if (!isNextButton)
                {
                    textureY += 13;
                }

                drawTexturedModalRect(xPosition, yPosition, 
                      textureX, textureY, 
                      23, 13);
            }
        }
    }
}
Код:
public void openGuideBookGUI()
 {
 }
Код:
 @Override
 public void openGuideBookGUI()
 {
     Minecraft.getMinecraft().displayGuiScreen(new guiGuideBook());
 }
Код:
@SideOnly(Side.CLIENT)
 @Override
 public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player)
    {
    if (!world.isRemote)
    {
        LWMCore.proxy.openGuideBookGUI(); 
    }

        return super.onItemRightClick(is, world, player);
 }


Заранее спасибо!
 

timaxa007

Модератор
5,831
409
672
У тебя перед методом onItemRightClick стоит аннотация @SideOnly(Side.CLIENT), не нужно делать проверку на "if (!world.isRemote)", а то будет противоречие.


Хотя ошибка указывает не на это, хотя может быть ей причиной.


Попробуй у buttonDone.visible = currPage >= 0; поставить проверку на buttonDone != null. Больше предположений нет в чём проблема.
 

Led

291
3
0
Спасибо большое. при совмещении обоих действий заработало.
Но, похоже, проблема была в первом.
Но теперь у меня возник еще один вопрос, что за бабуйня с текстурой?
Когда ширина чуть больше стандартной книги, я понимаю, что происходит, и могу все контролировать.
А когда ширина более чем в полтора раза превышает стандартную книгу, начинает твориться что то странное.
Помогите, пожалуйста!
7PVBUG6T4iY.jpg
Hj5KlKnDjC0.jpg
a9rsRu-vyKc.jpg

Исходники выше
 

timaxa007

Модератор
5,831
409
672
Нет, размеры не в порядке, стандартный размер 256 на 256 (1:1), а у тебя ширина больше а значит в drawTexturedModalRect нужно взять примерно такой-же метод но с дополнительными аргументами.


Типа место:
Код:
drawTexturedModalRect(offsetFromScreenLeft, 2, 0, 0, bookImageWidth,
             bookImageHeight);
Надо:
Код:
func_146110_a(offsetFromScreenLeft, 2, 0, 0,
				bookImageWidth, bookImageHeight,
				512F, 256F);
Я точно не знаю. Времени не было на тестирования этого метода.


И кажется что "Ширина изображения" тоже надо изменить.
 

Led

291
3
0
текстура 349*180

а он менее понятный,чем я предполагал.

Код:
    public void drawTexturedModalRect(int p_73729_1_, int p_73729_2_, int p_73729_3_, int p_73729_4_, int p_73729_5_, int p_73729_6_)
    {
        float f = 0.00390625F;
        float f1 = 0.00390625F;
        Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + p_73729_6_), (double)this.zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1));
        tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + p_73729_6_), (double)this.zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1));
        tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + 0), (double)this.zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + 0) * f1));
        tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + 0), (double)this.zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + 0) * f1));
        tessellator.draw();
    }
 

Led

291
3
0
Agravaine написал(а):
Сделай 512х512 и делай как я сказал.

Хорошо, сэр!


Yc-COcNGnBU.jpg

Код:
        drawTexturedModalRect(offsetFromScreenLeft/2, 2/2, 0, 0, bookImageWidth/2, bookImageHeight/2);



timaxa007, не совсем понимаю, как использовать дополнительные аргументы в drawTexturedModalRect.

Заранее спасибо!
 

timaxa007

Модератор
5,831
409
672
Я имел виду про метод func_146110_a, в котором такие-же функции, но два дополнительных метода.
Led написал(а):
Примерно так:
Код:
func_146110_a(offsetFromScreenLeft, 2, 0, 0,
               bookImageWidth, bookImageHeight,
               349F, 180F);
За место:
Код:
drawTexturedModalRect(offsetFromScreenLeft, 2, 0, 0, bookImageWidth,
             bookImageHeight);
 

Led

291
3
0
timaxa007 написал(а):
Я имел виду про метод func_146110_a, в котором такие-же функции, но два дополнительных метода.
Led написал(а):
Примерно так:
Код:
func_146110_a(offsetFromScreenLeft, 2, 0, 0,
               bookImageWidth, bookImageHeight,
               349F, 180F);
За место:
Код:
drawTexturedModalRect(offsetFromScreenLeft, 2, 0, 0, bookImageWidth,
             bookImageHeight);

Спасибо тебе!
Намного приятнее!

А что за метод такой [font=Monaco, Consolas, Courier, monospace]func_146110_a[/font]? И откуда, допусти, я мог о нем знать? И вообще подобные методы где живут? Причем с не супер приятным именем.
 

timaxa007

Модератор
5,831
409
672
Led написал(а):
Пожалуйста.

Led написал(а):
А что за метод такой [font=Monaco, Consolas, Courier, monospace]func_146110_a[/font]?
Да, примерно такой-же как и drawTexturedModalRect.

Led написал(а):
И откуда, допусти, я мог о нем знать?
Искать в исходниках, либо пришлось-бы создавать свой вариант.

Led написал(а):
И вообще подобные методы где живут?
Эти были в net.minecraft.client.gui.Gui;.

Led написал(а):
Причем с не супер приятным именем.
Не дали имя для обуфикации исходного кода. (О подобном было разъяснения.)
 
Сверху