Здравствуйте!
У меня есть книга. Я открываю ее гуи, в 86.4% все нормально (выборка - 216 отркываний).
А в 13.6% открываний происходит краш, в качестве проблемы указывающий строку, проверяющий номер совпадение номера страницы с нулем (для того что бы отрисовать обложку).
Заранее спасибо!
Заранее спасибо!
У меня есть книга. Я открываю ее гуи, в 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);
}
Заранее спасибо!