Как играть в GIF

Версия Minecraft
1.12.2
API
Forge
24
1
Привет. Я хочу знать, как воспроизводить файлы GIF в Minecraft. Вот что я пробовал до сих пор:

1. Воспроизведение gif.
- Я использовал пример из этого поста, но получаю следующую ошибку:
Java:
java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.createImageInputStream(ImageIO.java:339)
    at ru.zloy.gif.Gif.images(Gif.java:50)
    at ru.zloy.gif.Gif.<init>(Gif.java:32)
    at gl.jeong.msm.decoder.GuiTest.<init>(GuiTest.java:13)

ImageIO.java:339 - throw new IllegalArgumentException("input == null!");
Gif.java:50 - ImageInputStream stream = ImageIO.createImageInputStream(this.inputStream);
Gif.java:32 - this.list = this.images();
GuiTest.java:13 - Gif gif = new Gif(new ResourceLocation(Main.MOD_ID + ":textures/gui/1.gif"));

2. animated-gif-lib-for-java/GifDecoder.java at master · rtyley/animated-gif-lib-for-java
Основная цель состоит в том, чтобы воспроизводить файл gif, когда клиент получает пакет от сервера, поэтому при получении пакета флаг меняется на true, и изображения отображаются одно за другим. Однако этот декодер требует постоянного увеличения количества кадров в выражении d.getFrame (frame). Если я использую итеративный синтаксис с for или while, число будет увеличиваться слишком быстро, поэтому, если я использую Thread или Timer, он остановится в середине операции. Я использовал PlayerTickEvent для увеличения кадра, но он все равно не работает. Есть ли способ правильно увеличить значение кадра?

Или есть более простой способ воспроизвести файл в формате gif? Буду признателен за вашу помощь.
 
Краш-лог
java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.createImageInputStream(ImageIO.java:339) ~[?:1.8.0_301]
at ru.zloy.gif.Gif.images(Gif.java:50) ~[Gif.class:?]
at ru.zloy.gif.Gif.<init>(Gif.java:32) ~[Gif.class:?]
at gl.jeong3954.msm.decoder.GuiTest.<init>(GuiTest.java:13) ~[GuiTest.class:?]
at gl.jeong3954.msm.networking.PacketHandler.on(PacketHandler.java:139) ~[PacketHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_20_PacketHandler_on_GuiOpenEvent.invoke(.dynamic) ~[?:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) ~[EventBus.class:?]
at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:984) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.processKeyBinds(Minecraft.java:2175) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.runTickKeyboard(Minecraft.java:2020) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1808) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1098) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:398) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_301]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_301]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_301]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_301]
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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_301]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_301]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_301]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_301]
at net.minecraftforge.legacydev.Main.start(Main.java:86) [legacydev-0.2.3.1-fatjar.jar:0.2.3.1+4+372be23]
at net.minecraftforge.legacydev.MainClient.main(MainClient.java:29) [legacydev-0.2.3.1-fatjar.jar:0.2.3.1+4+372be23]
Краш-лог:
java.lang.IllegalArgumentException: input == null!
	at javax.imageio.ImageIO.createImageInputStream(ImageIO.java:339) ~[?:1.8.0_301]
	at ru.zloy.gif.Gif.images(Gif.java:50) ~[Gif.class:?]
	at ru.zloy.gif.Gif.<init>(Gif.java:32) ~[Gif.class:?]
	at gl.jeong3954.msm.decoder.GuiTest.<init>(GuiTest.java:13) ~[GuiTest.class:?]
	at gl.jeong3954.msm.networking.PacketHandler.on(PacketHandler.java:139) ~[PacketHandler.class:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_20_PacketHandler_on_GuiOpenEvent.invoke(.dynamic) ~[?:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) ~[EventBus.class:?]
	at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:984) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.processKeyBinds(Minecraft.java:2175) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.runTickKeyboard(Minecraft.java:2020) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1808) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1098) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.run(Minecraft.java:398) [Minecraft.class:?]
	at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_301]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_301]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_301]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_301]
	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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_301]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_301]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_301]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_301]
	at net.minecraftforge.legacydev.Main.start(Main.java:86) [legacydev-0.2.3.1-fatjar.jar:0.2.3.1+4+372be23]
	at net.minecraftforge.legacydev.MainClient.main(MainClient.java:29) [legacydev-0.2.3.1-fatjar.jar:0.2.3.1+4+372be23]
7,099
324
1,510
Нет разницы, ImageReader поддерживает gif
В 1.7.10 использовалась гифка с точно таким же кодом загрузки
 
Сверху