SVG mod icons

This commit is contained in:
2026-02-22 23:40:39 +01:00
parent 9caf47d81b
commit 0cfa7b81ef
34 changed files with 69 additions and 6 deletions
@@ -9,11 +9,14 @@ import java.util.function.Function;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix4f;
import org.saturnclient.ui2.resources.Fonts;
import org.saturnclient.ui2.resources.SvgTexture;
import com.mojang.blaze3d.systems.RenderSystem;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.mixin.DrawContextAccessor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.font.TextRenderer.TextLayerType;
import net.minecraft.client.gui.DrawContext;
@@ -224,6 +227,11 @@ public class RenderScope {
private void drawTexturedQuad(Identifier sprite, int x1, int x2, int y1, int y2, float u1, float u2, float v1,
float v2, int color) {
if (sprite.toString().endsWith(".svg")) {
sprite = SvgTexture.getSvg(MinecraftClient.getInstance(), sprite, (x2 - x1) * 2, (y2 - y1) * 2);
}
if (color == 0)
return;
x1 *= 4;
@@ -4,12 +4,13 @@ import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import com.kitfox.svg.SVGDiagram;
import com.kitfox.svg.SVGUniverse;
import org.jetbrains.annotations.Nullable;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnclient.cosmetics.cloaks.utils.IdentifierUtils;
import net.minecraft.client.MinecraftClient;
@@ -17,6 +18,8 @@ import net.minecraft.util.Identifier;
public class SvgTexture {
private static List<Identifier> svgCache = new ArrayList<>();
private static BufferedImage renderSvg(InputStream svgStream, int width, int height) throws Exception {
// Load SVG
SVGUniverse universe = new SVGUniverse();
@@ -52,6 +55,13 @@ public class SvgTexture {
@Nullable
@SuppressWarnings("resource")
public static Identifier getSvg(MinecraftClient client, Identifier svgImage, int width, int height) {
Identifier id = Identifier
.of(svgImage.toString().replaceAll("\\.svg$", (width + "_" + height).toString() + ".png"));
if (svgCache.contains(id)) {
return id;
}
try (InputStream svgStream = client
.getResourceManager()
.getResource(svgImage).get()
@@ -59,9 +69,6 @@ public class SvgTexture {
BufferedImage image = renderSvg(svgStream, width, height);
System.out.println(svgImage.toString());
Identifier id = Identifier.of(SaturnClient.MOD_ID, "img_svg_render_" + (int) (Math.random() * 30));
IdentifierUtils.registerBufferedImageTexture(id, image);
return id;
@@ -53,7 +53,7 @@ public class Textures {
}
public static Identifier getModIcon(String modId) {
return Identifier.of("saturnclient", "textures/gui/mod/" + modId + ".png");
return Identifier.of("saturnclient", "textures/gui/mod/" + modId + ".svg");
}
}