From bc6dbe8413101fe3910fc1575303adf4eaf348fb Mon Sep 17 00:00:00 2001 From: Vinrobot Date: Mon, 10 Jul 2023 18:33:32 +0200 Subject: [PATCH] Use NativeImage rather than BufferedImage --- .../java/net/vinrobot/mcemote/client/font/Emote.java | 7 ++++--- .../vinrobot/mcemote/client/font/EmoteFontStorage.java | 3 +-- .../net/vinrobot/mcemote/client/font/impl/FFZEmote.java | 5 ++++- .../vinrobot/mcemote/client/font/impl/SevenTVEmote.java | 8 ++++++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/client/java/net/vinrobot/mcemote/client/font/Emote.java b/src/client/java/net/vinrobot/mcemote/client/font/Emote.java index da06422..8307971 100644 --- a/src/client/java/net/vinrobot/mcemote/client/font/Emote.java +++ b/src/client/java/net/vinrobot/mcemote/client/font/Emote.java @@ -1,6 +1,7 @@ package net.vinrobot.mcemote.client.font; -import java.awt.image.BufferedImage; +import net.minecraft.client.texture.NativeImage; + import java.io.IOException; import java.time.Duration; @@ -13,8 +14,8 @@ public interface Emote { Frame[] loadFrames() throws IOException; - record Frame(BufferedImage image, Duration duration) { - public Frame(BufferedImage image) { + record Frame(NativeImage image, Duration duration) { + public Frame(NativeImage image) { this(image, Duration.ofDays(1)); } } diff --git a/src/client/java/net/vinrobot/mcemote/client/font/EmoteFontStorage.java b/src/client/java/net/vinrobot/mcemote/client/font/EmoteFontStorage.java index 8bc045a..15547a3 100644 --- a/src/client/java/net/vinrobot/mcemote/client/font/EmoteFontStorage.java +++ b/src/client/java/net/vinrobot/mcemote/client/font/EmoteFontStorage.java @@ -55,8 +55,7 @@ private Frames loadAnimationManager(Integer integer) { final Frames.Frame[] animatedFrames = new Frames.Frame[frames.length]; for (int i = 0; i < frames.length; i++) { final Emote.Frame frame = frames[i]; - final NativeImage nativeImage = NativeImageHelper.fromBufferedImage(frame.image()); - final Glyph glyph = new NativeImageGlyph(nativeImage, advance, oversample); + final Glyph glyph = new NativeImageGlyph(frame.image(), advance, oversample); animatedFrames[i] = new Frames.Frame(glyph, frame.duration()); } diff --git a/src/client/java/net/vinrobot/mcemote/client/font/impl/FFZEmote.java b/src/client/java/net/vinrobot/mcemote/client/font/impl/FFZEmote.java index b33ecf2..26ecacb 100644 --- a/src/client/java/net/vinrobot/mcemote/client/font/impl/FFZEmote.java +++ b/src/client/java/net/vinrobot/mcemote/client/font/impl/FFZEmote.java @@ -2,8 +2,10 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.texture.NativeImage; import net.vinrobot.mcemote.api.ffz.Emoticon; import net.vinrobot.mcemote.client.font.Emote; +import net.vinrobot.mcemote.client.helpers.NativeImageHelper; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -40,6 +42,7 @@ public Frame[] loadFrames() throws IOException { final Map urls = this.emoticon.urls(); final String url = urls.containsKey("1") ? urls.get("1") : urls.values().iterator().next(); final BufferedImage image = Objects.requireNonNull(ImageIO.read(new URL(url))); - return new Frame[]{new Frame(image)}; + final NativeImage nativeImage = NativeImageHelper.fromBufferedImage(image); + return new Frame[]{new Frame(nativeImage)}; } } diff --git a/src/client/java/net/vinrobot/mcemote/client/font/impl/SevenTVEmote.java b/src/client/java/net/vinrobot/mcemote/client/font/impl/SevenTVEmote.java index 202b4e5..fbe458f 100644 --- a/src/client/java/net/vinrobot/mcemote/client/font/impl/SevenTVEmote.java +++ b/src/client/java/net/vinrobot/mcemote/client/font/impl/SevenTVEmote.java @@ -2,10 +2,12 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.texture.NativeImage; import net.vinrobot.mcemote.api.seventv.Emote; import net.vinrobot.mcemote.api.seventv.EmoteData; import net.vinrobot.mcemote.api.seventv.EmoteFile; import net.vinrobot.mcemote.api.seventv.EmoteHost; +import net.vinrobot.mcemote.client.helpers.NativeImageHelper; import webpdecoderjn.WebPDecoder; import javax.imageio.ImageIO; @@ -62,12 +64,14 @@ public Frame[] loadFrames() throws IOException { final Frame[] frames = new Frame[frameCount]; for (int i = 0; i < frameCount; ++i) { final WebPDecoder.WebPImageFrame frame = image.frames.get(i); - frames[i] = new Frame(frame.img, Duration.ofMillis(frame.delay)); + final NativeImage nativeImage = NativeImageHelper.fromBufferedImage(frame.img); + frames[i] = new Frame(nativeImage, Duration.ofMillis(frame.delay)); } return frames; } else { final BufferedImage image = Objects.requireNonNull(ImageIO.read(new URL(url))); - return new Frame[]{new Frame(image)}; + final NativeImage nativeImage = NativeImageHelper.fromBufferedImage(image); + return new Frame[]{new Frame(nativeImage)}; } } }