From 655a130df96a693f17664efde8c24be73cf3bfe2 Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Wed, 27 Dec 2023 23:11:14 +0100 Subject: [PATCH] Don't block custom characters from resource packs --- .../fixes/data/RenderableGlyphDiff.java | 6 +++--- .../mixin/fixes/minecraft/MixinFontStorage.java | 16 +++------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/florianmichael/viafabricplus/fixes/data/RenderableGlyphDiff.java b/src/main/java/de/florianmichael/viafabricplus/fixes/data/RenderableGlyphDiff.java index 7b2c644f..67810a0f 100644 --- a/src/main/java/de/florianmichael/viafabricplus/fixes/data/RenderableGlyphDiff.java +++ b/src/main/java/de/florianmichael/viafabricplus/fixes/data/RenderableGlyphDiff.java @@ -457,7 +457,7 @@ public class RenderableGlyphDiff { RENDERABLE_GLYPH_DIFF_LEGACY.put(128276, r1_17_1); RENDERABLE_GLYPH_DIFF_LEGACY.put(129699, r1_17_1); - // 1.20 switch to using Unihex as a main font + // 1.20 switched to using Unihex as a main font rangeClosed(0, 2559).forEach(put(r1_20tor1_20_1)); rangeClosed(2561, 55295).forEach(put(r1_20tor1_20_1)); @@ -976,8 +976,8 @@ public class RenderableGlyphDiff { public static boolean isGlyphRenderable(final int codePoint) { final VersionEnum targetVersion = ProtocolHack.getTargetVersion(); - if (targetVersion.isNewerThanOrEqualTo(r1_20tor1_20_1)) { // 1.20 switch to using Unihex as a main font - return RENDERABLE_GLYPH_DIFF.containsKey(codePoint) && targetVersion.isNewerThanOrEqualTo(RENDERABLE_GLYPH_DIFF.get(codePoint)); + if (targetVersion.isNewerThanOrEqualTo(r1_20tor1_20_1)) { // 1.20 switched to using Unihex as a main font + return !RENDERABLE_GLYPH_DIFF.containsKey(codePoint) || targetVersion.isNewerThanOrEqualTo(RENDERABLE_GLYPH_DIFF.get(codePoint)); } else { return RENDERABLE_GLYPH_DIFF_LEGACY.containsKey(codePoint) && targetVersion.isNewerThanOrEqualTo(RENDERABLE_GLYPH_DIFF_LEGACY.get(codePoint)); } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java index edd35f4b..5d76ad67 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java @@ -23,8 +23,6 @@ import com.llamalad7.mixinextras.sugar.Local; import de.florianmichael.viafabricplus.fixes.data.RenderableGlyphDiff; import de.florianmichael.viafabricplus.fixes.replacement.BuiltinEmptyGlyph1_12_2; import de.florianmichael.viafabricplus.settings.impl.VisualSettings; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.*; import net.minecraft.util.Identifier; @@ -56,25 +54,21 @@ public abstract class MixinFontStorage { @Unique private GlyphRenderer viaFabricPlus$blankGlyphRenderer1_12_2; - @Unique - private Object2IntMap viaFabricPlus$providedGlyphsCache; - @Inject(method = "setFonts", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/BuiltinEmptyGlyph;bake(Ljava/util/function/Function;)Lnet/minecraft/client/font/GlyphRenderer;", ordinal = 0)) private void bakeBlankGlyph1_12_2(List fonts, CallbackInfo ci) { this.viaFabricPlus$blankGlyphRenderer1_12_2 = BuiltinEmptyGlyph1_12_2.INSTANCE.bake(this::getGlyphRenderer); - this.viaFabricPlus$providedGlyphsCache = new Object2IntOpenHashMap<>(); } @Inject(method = "findGlyph", at = @At("RETURN"), cancellable = true) private void filterGlyphs1(int codePoint, CallbackInfoReturnable cir, @Local Font font) { - if (this.viaFabricPlus$shouldBeInvisible(cir.getReturnValue().equals(FontStorage.GlyphPair.MISSING) ? null : font, codePoint)) { + if (this.viaFabricPlus$shouldBeInvisible(codePoint)) { cir.setReturnValue(this.viaFabricPlus$getBlankGlyphPair()); } } @Inject(method = "findGlyphRenderer", at = @At("RETURN"), cancellable = true) private void filterGlyphs2(int codePoint, CallbackInfoReturnable cir, @Local Font font) { - if (this.viaFabricPlus$shouldBeInvisible(cir.getReturnValue().equals(this.blankGlyphRenderer) ? null : font, codePoint)) { + if (this.viaFabricPlus$shouldBeInvisible(codePoint)) { cir.setReturnValue(this.viaFabricPlus$getBlankGlyphRenderer()); } } @@ -95,11 +89,7 @@ public abstract class MixinFontStorage { } @Unique - private boolean viaFabricPlus$shouldBeInvisible(final Font font, final int codePoint) { - if (font != null && this.viaFabricPlus$providedGlyphsCache.computeIfAbsent(font, f -> ((Font) f).getProvidedGlyphs().size()) == 1) { - return false; // Probably a custom icon character from a resource pack - } - + private boolean viaFabricPlus$shouldBeInvisible(final int codePoint) { return (this.id.equals(MinecraftClient.DEFAULT_FONT_ID) || this.id.equals(MinecraftClient.UNICODE_FONT_ID)) && !RenderableGlyphDiff.isGlyphRenderable(codePoint); }