From 0bee4adc4c4732199f98a22ac3e89d82fa3857ad Mon Sep 17 00:00:00 2001 From: Zywl <86253343+opZywl@users.noreply.github.com> Date: Thu, 11 Jan 2024 21:24:33 -0300 Subject: [PATCH] Fixed font issues --- .../module/modules/movement/TargetStrafe.kt | 31 +- .../resources/MixinDefaultResourcePack.java | 30 -- .../mixins/resources/MixinSkinManager.java | 27 -- .../ui/clickgui/fonts/api/FontFamily.java | 13 - .../ui/clickgui/fonts/api/FontManager.java | 10 - .../ui/clickgui/fonts/api/FontRenderer.java | 37 -- .../ui/clickgui/fonts/api/FontType.java | 22 - .../ui/clickgui/fonts/impl/Fonts.java | 85 ---- .../clickgui/fonts/impl/SimpleFontFamily.java | 32 -- .../fonts/impl/SimpleFontManager.java | 82 ---- .../fonts/impl/SimpleFontRenderer.java | 449 ------------------ .../ui/clickgui/fonts/logo/OutlineUtils.java | 124 ----- .../ui/clickgui/fonts/logo/info.java | 25 - .../clickgui/fonts/util/SneakyThrowing.java | 22 - .../clickgui/style/styles/classic/Module.java | 4 +- .../style/styles/classic/Setting.java | 22 +- .../ui/clickgui/style/styles/classic/Tab.java | 8 +- .../hud/element/elements/Indicators.java | 10 +- .../ui/client/hud/element/elements/Targets.kt | 4 +- .../ccbluex/liquidbounce/ui/font/Fonts.java | 111 ++--- .../liquidbounce/ui/font/GameFontRenderer.kt | 10 - .../liquidbounce/ui/font/TTFFontRenderer.java | 9 - .../liquidbounce/ui/font/cf/CFont.java | 41 +- .../ui/font/cf/CFontRenderer.java | 14 +- .../liquidbounce/ui/font/cf/FontLoaders.java | 132 ++++- .../utils/CustomSplashProgress.java | 213 ++------- .../liquidbounce/utils/MainMenuButton.java | 7 +- .../liquidbounce/utils/render/ColorUtils.kt | 42 +- .../minecraft/fdpclient/font/Bangers.ttf | Bin 96116 -> 0 bytes .../fdpclient/font/Roboto-Medium.ttf | Bin 0 -> 41116 bytes .../assets/minecraft/fdpclient/font/SF.ttf | Bin 170408 -> 0 bytes src/main/resources/mixins.fdpclient.json | 2 - 32 files changed, 281 insertions(+), 1337 deletions(-) delete mode 100644 src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinDefaultResourcePack.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinSkinManager.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontFamily.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontManager.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontRenderer.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontType.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/Fonts.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontFamily.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontManager.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontRenderer.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/OutlineUtils.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/info.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/util/SneakyThrowing.java delete mode 100644 src/main/resources/assets/minecraft/fdpclient/font/Bangers.ttf create mode 100644 src/main/resources/assets/minecraft/fdpclient/font/Roboto-Medium.ttf delete mode 100644 src/main/resources/assets/minecraft/fdpclient/font/SF.ttf diff --git a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TargetStrafe.kt b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TargetStrafe.kt index 55d522e962..b9cef23425 100644 --- a/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TargetStrafe.kt +++ b/src/main/java/net/ccbluex/liquidbounce/features/module/modules/movement/TargetStrafe.kt @@ -34,25 +34,28 @@ import kotlin.math.sin object TargetStrafe : Module() { private val thirdPersonViewValue = BoolValue("ThirdPersonView", false) - private val renderModeValue = ListValue("RenderMode", arrayOf("Circle", "Polygon", "Zavz", "None"), "Zavz") - private val zavzRender = ListValue("Zavz-Render", arrayOf("Circle", "Points"), "Points") - - private var redValue = IntegerValue("Zavz-Red", 0, 0, 255) { renderModeValue.get().equals("Zavz", true) } - private var greenValue = IntegerValue("Zavz-Green", 0, 0, 255) { renderModeValue.get().equals("Zavz", true) } - private var blueValue = IntegerValue("Zavz-Blue", 0, 0, 255) { renderModeValue.get().equals("Zavz", true) } - private var alphaValue = IntegerValue("Zavz-Alpha", 255, 0, 255) { renderModeValue.get().equals("Zavz", true) } - private var rainbowValue = BoolValue("Zavz-RainBow", false).displayable { renderModeValue.get().equals("Zavz", true) } - - private val pointsProperty = IntegerValue("Points", 12, 1, 18) - private val adaptiveSpeedProperty = BoolValue("Adapt Speed", true) - private val lineWidthValue = FloatValue("LineWidth", 1f, 1f, 10f).displayable {!renderModeValue.equals("None")} - private val radiusModeValue = ListValue("RadiusMode", arrayOf("Normal", "Strict"/*, "Dynamic"*/), "Normal") private val radiusValue = FloatValue("Radius", 0.5f, 0.1f, 5.0f) + private val radiusModeValue = ListValue("RadiusMode", arrayOf("Normal", "Strict"/*, "Dynamic"*/), "Normal") + private val ongroundValue = BoolValue("OnlyOnGround",false) private val holdSpaceValue = BoolValue("HoldSpace", false) private val onlySpeedValue = BoolValue("OnlySpeed", true) - private val trips = FloatValue("Radius", 2.0f, 0.1f, 4.0f) + + private val pointsProperty = IntegerValue("Points", 12, 1, 18) + private val adaptiveSpeedProperty = BoolValue("Adapt Speed", true) + private val lineWidthValue = FloatValue("LineWidth", 1f, 1f, 10f).displayable {!renderModeValue.equals("None")} + private val trips = FloatValue("Trips", 2.0f, 0.1f, 4.0f) + + private val renderModeValue = ListValue("RenderMode", arrayOf("Circle", "Polygon", "Zavz", "None"), "Zavz") + private val zavzRender = ListValue("Zavz-Render", arrayOf("Circle", "Points"), "Points").displayable { renderModeValue.equals("Zavz") } + + private var redValue = IntegerValue("Zavz-Red", 0, 0, 255).displayable { renderModeValue.get().equals("Zavz", true) } + private var greenValue = IntegerValue("Zavz-Green", 0, 0, 255).displayable { renderModeValue.get().equals("Zavz", true) } + private var blueValue = IntegerValue("Zavz-Blue", 0, 0, 255).displayable { renderModeValue.get().equals("Zavz", true) } + private var alphaValue = IntegerValue("Zavz-Alpha", 255, 0, 255).displayable { renderModeValue.get().equals("Zavz", true) } + private var rainbowValue = BoolValue("Zavz-RainBow", false).displayable { renderModeValue.get().equals("Zavz", true) } + private var direction = -1.0 private var directionA = 1 diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinDefaultResourcePack.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinDefaultResourcePack.java deleted file mode 100644 index 0a98464b1b..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinDefaultResourcePack.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.injection.forge.mixins.resources; - -import com.google.common.collect.ImmutableSet; -import net.minecraft.client.resources.DefaultResourcePack; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Set; - -/** - * The type Mixin default resource pack. - */ -@Mixin(DefaultResourcePack.class) -public class MixinDefaultResourcePack { - - /** - * The constant defaultResourceDomains. - */ - @Final - @Shadow - public static final Set defaultResourceDomains = ImmutableSet - .of("minecraft", "realms"); - -} diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinSkinManager.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinSkinManager.java deleted file mode 100644 index 8d67e5f5aa..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/resources/MixinSkinManager.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.injection.forge.mixins.resources; - -import com.mojang.authlib.GameProfile; -import com.mojang.authlib.minecraft.MinecraftProfileTexture; -import net.minecraft.client.resources.SkinManager; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Map; - -/** - * The type Mixin skin manager. - */ -@Mixin(SkinManager.class) -public class MixinSkinManager { - - @Inject(method = "loadSkinFromCache", at = @At("HEAD")) - private void injectSkinProtect(GameProfile gameProfile, CallbackInfoReturnable> cir) { - } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontFamily.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontFamily.java deleted file mode 100644 index 7ce07cbbd8..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontFamily.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.api; - -public interface FontFamily { - - FontRenderer ofSize(int size); - - FontType font(); -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontManager.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontManager.java deleted file mode 100644 index 739d862f41..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontManager.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.api; -@FunctionalInterface -public interface FontManager { - FontFamily fontFamily(FontType fontType); -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontRenderer.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontRenderer.java deleted file mode 100644 index c247cb14ab..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontRenderer.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.api; - -public interface FontRenderer { - float drawString(CharSequence text, float x, float y, int color, boolean dropShadow); - - String trimStringToWidth(CharSequence text, int width, boolean reverse); - int stringWidth(CharSequence text); - - int getHeight(); - - //region default methods - default float drawString(CharSequence text, float x, float y, int color) { - return drawString(text, x, y, color, false); - } - default void drawString(CharSequence text, int x, int y, int color) { - drawString(text, x, y, color, false); - } - default String trimStringToWidth(CharSequence text, int width) { - return trimStringToWidth(text, width, false); - } - - default float drawCenteredString(CharSequence text, float x, float y, int color, boolean dropShadow) { - return drawString(text, x - stringWidth(text) / 2.0F, y, color, dropShadow); - } - default float getMiddleOfBox(float boxHeight) { - return boxHeight / 2f - getHeight() / 2f; - } - - default void drawCenteredString(CharSequence text, float x, float y, int color) { - drawCenteredString(text, x, y, color, false); - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontType.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontType.java deleted file mode 100644 index 9c37ff6c23..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/api/FontType.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.api; -@SuppressWarnings("SpellCheckingInspection") -public enum FontType { - ICONFONT("stylesicons.ttf"), - - Check("check.ttf"), - SF("SF.ttf"), - MAINMENU("mainmenu.ttf"); - - private final String fileName; - - FontType(String fileName) { - this.fileName = fileName; - } - - public String fileName() { return fileName; } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/Fonts.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/Fonts.java deleted file mode 100644 index ee6ca4f927..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/Fonts.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.impl; - -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontFamily; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontManager; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontRenderer; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontType; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.logo.info; -@SuppressWarnings("SpellCheckingInspection") -public interface Fonts { - - FontManager FONT_MANAGER = info.getFontManager(); - - interface ICONFONT { - - FontFamily ICONFONT = FONT_MANAGER.fontFamily(FontType.ICONFONT); - - final class ICONFONT_24 { - public static final FontRenderer ICONFONT_24 = ICONFONT.ofSize(24); - - private ICONFONT_24() { - } - } - - } - - interface MAINMENU { - FontFamily MAINMENU = FONT_MANAGER.fontFamily(FontType.MAINMENU); - final class MAINMENU30 { - public static final FontRenderer MAINMENU30 = MAINMENU.ofSize(30); - - private MAINMENU30() { - } - } - - } - - interface CheckFont { - FontFamily CheckFont = FONT_MANAGER.fontFamily(FontType.Check); - - final class CheckFont_24 { - public static final FontRenderer CheckFont_24 = CheckFont.ofSize(24); - - private CheckFont_24() { - } - } - } - - interface SF { - - FontFamily SF = FONT_MANAGER.fontFamily(FontType.SF); - - final class SF_16 { - public static final FontRenderer SF_16 = SF.ofSize(16); - - private SF_16() { - } - } - - final class SF_17 { - public static final FontRenderer SF_17 = SF.ofSize(17); - - private SF_17() { - } - } - - final class SF_18 { - public static final FontRenderer SF_18 = SF.ofSize(18); - - private SF_18() { - } - } - - final class SF_20 { - public static final FontRenderer SF_20 = SF.ofSize(20); - - private SF_20() { - } - } - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontFamily.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontFamily.java deleted file mode 100644 index 2ebe66e857..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontFamily.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.impl; - -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontFamily; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontRenderer; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontType; -final class SimpleFontFamily implements FontFamily { - - private final FontType fontType; - private final java.awt.Font awtFont; - - private SimpleFontFamily(FontType fontType, java.awt.Font awtFont) { - this.fontType = fontType; - this.awtFont = awtFont; - } - - static FontFamily create(FontType fontType, java.awt.Font awtFont) { - return new SimpleFontFamily(fontType, awtFont); - } - - @Override - public FontRenderer ofSize(int size) { - return SimpleFontRenderer.create(awtFont.deriveFont(java.awt.Font.PLAIN, size)); - } - - @Override - public FontType font() { return fontType; } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontManager.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontManager.java deleted file mode 100644 index 650346c8eb..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontManager.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.impl; - -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontFamily; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontManager; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontType; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.util.SneakyThrowing; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.IResource; -import net.minecraft.client.resources.IResourceManager; -import net.minecraft.util.ResourceLocation; - -import java.awt.*; -import java.io.IOException; -import java.io.InputStream; -import java.util.EnumMap; - -public final class SimpleFontManager implements FontManager { - - private SimpleFontManager() {} - - public static FontManager create() { - return new SimpleFontManager(); - } - - private static final String FONT_DIRECTORY = "fdpclient/font/"; - private final FontRegistry fonts = new FontRegistry(); - - @Override - public FontFamily fontFamily(FontType fontType) { - return fonts.fontFamily(fontType); - } - - private static final class FontRegistry extends EnumMap { - - private FontRegistry() { super(FontType.class); } - - private FontFamily fontFamily(FontType fontType) { - return computeIfAbsent(fontType, ignored -> { - try { - return SimpleFontFamily.create(fontType, readFontFromResources(fontType)); - } catch(IOException e) { - throw SneakyThrowing.sneakyThrow(e); - } - }); - } - - private static Font readFontFromResources(FontType fontType) throws IOException { - IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager(); - ResourceLocation location = new ResourceLocation(FONT_DIRECTORY + fontType.fileName()); - IResource resource; - - try { - resource = resourceManager.getResource(location); - } catch(IOException e) { - throw new IOException("Couldn't find resource: " + location, e); - } - - try(InputStream resourceInputStream = resource.getInputStream()) { - return readFont(resourceInputStream); - } - } - - private static Font readFont(InputStream resource) { - Font font; - - try { - font = Font.createFont(Font.TRUETYPE_FONT, resource); - } catch(FontFormatException e) { - throw new RuntimeException("Resource does not contain the required font tables for the specified format", e); - } catch(IOException e) { - throw new RuntimeException("Couldn't completely read font resource", e); - } - - return font; - } - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontRenderer.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontRenderer.java deleted file mode 100644 index 774ccdfa4a..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/impl/SimpleFontRenderer.java +++ /dev/null @@ -1,449 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.impl; - -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontRenderer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.texture.DynamicTexture; -import org.lwjgl.opengl.GL11; - -import java.awt.*; -import java.awt.geom.Rectangle2D; -import java.awt.image.BufferedImage; - -import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D; - -/** - * @author Zywl - */ -@SuppressWarnings("MagicNumber") -final class SimpleFontRenderer implements FontRenderer { - - private static final int[] COLOR_CODES = setupMinecraftColorCodes(); - private static final String COLORS = "0123456789abcdefklmnor"; - private static final char COLOR_PREFIX = '\u00a7'; - - private static final short CHARS = 256; - private static final float IMG_SIZE = 512; - private static final float CHAR_OFFSET = 0f; - - private final CharData[] charData = new CharData[CHARS]; - private final CharData[] boldChars = new CharData[CHARS]; - private final CharData[] italicChars = new CharData[CHARS]; - private final CharData[] boldItalicChars = new CharData[CHARS]; - - private final Font awtFont; - private final boolean antiAlias; - private final boolean fractionalMetrics; - - private DynamicTexture texturePlain; - private DynamicTexture textureBold; - private DynamicTexture textureItalic; - private DynamicTexture textureItalicBold; - private int fontHeight = -1; - - //region instantiating - private SimpleFontRenderer(Font awtFont, boolean antiAlias, boolean fractionalMetrics) { - this.awtFont = awtFont; - this.antiAlias = antiAlias; - this.fractionalMetrics = fractionalMetrics; - setupBoldItalicFonts(); - } - - static FontRenderer create(Font font, boolean antiAlias) { - return new SimpleFontRenderer(font, antiAlias, true); - } - - public static FontRenderer create(Font font) { - return create(font, true); - } - - private DynamicTexture setupTexture(Font font, boolean antiAlias, boolean fractionalMetrics, CharData[] chars) { - return new DynamicTexture(generateFontImage(font, antiAlias, fractionalMetrics, chars)); - } - - private BufferedImage generateFontImage(Font font, boolean antiAlias, boolean fractionalMetrics, CharData[] chars) { - final int imgSize = (int) IMG_SIZE; - BufferedImage bufferedImage = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_ARGB); - Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics(); - - graphics.setFont(font); - graphics.setColor(new Color(255, 255, 255, 0)); - graphics.fillRect(0, 0, imgSize, imgSize); - graphics.setColor(Color.WHITE); - - graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); - - if (this.fractionalMetrics) { - graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); - } else { - graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF); - } - - FontMetrics fontMetrics = graphics.getFontMetrics(); - int charHeight = 0, positionX = 0, positionY = 1; - - for (int i = 0; i < chars.length; i++) { - char ch = (char) i; - CharData charData = new CharData(); - Rectangle2D dimensions = fontMetrics.getStringBounds(String.valueOf(ch), graphics); - - charData.width = dimensions.getBounds().width + 8; - charData.height = dimensions.getBounds().height; - - if (positionX + charData.width >= imgSize) { - positionX = 0; - positionY += charHeight; - charHeight = 0; - } - - if (charData.height > charHeight) { - charHeight = charData.height; - } - - charData.storedX = positionX; - charData.storedY = positionY; - - if (charData.height > fontHeight) { - this.fontHeight = charData.height; - } - - chars[i] = charData; - - graphics.drawString(String.valueOf(ch), positionX + 2, positionY + fontMetrics.getAscent()); - positionX += charData.width; - } - - return bufferedImage; - } - - private void setupBoldItalicFonts() { - this.texturePlain = setupTexture(awtFont, antiAlias, fractionalMetrics, charData); - this.textureBold = setupTexture(awtFont.deriveFont(Font.BOLD), antiAlias, fractionalMetrics, boldChars); - this.textureItalic = setupTexture(awtFont.deriveFont(Font.ITALIC), antiAlias, fractionalMetrics, italicChars); - this.textureItalicBold = setupTexture(awtFont.deriveFont(Font.BOLD | Font.ITALIC), antiAlias, fractionalMetrics, boldItalicChars); - } - //endregion - - @Override - public float drawString(CharSequence text, float x, float y, int color, boolean dropShadow) { - if (dropShadow) { - float shadowWidth = drawStringInternal(text, x + 0.5, y + 0.5, color, true); - return Math.max(shadowWidth, drawStringInternal(text, x, y, color, false)); - } else { - return drawStringInternal(text, x, y, color, false); - } - } - @SuppressWarnings("OverlyComplexMethod") - private float drawStringInternal(CharSequence text, double x, double y, int color, boolean shadow) { - x -= 1; - - if (text == null) return 0.0F; - if (color == 0x20FFFFFF) color = 0xFFFFFF; - if ((color & 0xFC000000) == 0) color |= 0xFF000000; - //endregion - - if (shadow) { - color = (color & 0xFCFCFC) >> 2 | color & 0xFF000000; - } - - CharData[] charData = this.charData; - float alpha = (color >> 24 & 0xFF) / 255.0F; - final boolean randomCase = false; - - x *= 2.0D; - y = (y - 3.0D) * 2.0D; - - //region rendering - GL11.glPushMatrix(); - GlStateManager.scale(0.5D, 0.5D, 0.5D); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 771); - GL11.glColor4f((color >> 16 & 0xFF) / 255.0F, (color >> 8 & 0xFF) / 255.0F, (color & 0xFF) / 255.0F, alpha); - GlStateManager.color((color >> 16 & 0xFF) / 255.0F, (color >> 8 & 0xFF) / 255.0F, (color & 0xFF) / 255.0F, alpha); - GlStateManager.enableTexture2D(); - GlStateManager.bindTexture(texturePlain.getGlTextureId()); - - GL11.glBindTexture(GL_TEXTURE_2D, texturePlain.getGlTextureId()); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); - - boolean underline = false; - boolean strikethrough = false; - boolean italic = false; - boolean bold = false; - - for (int i = 0, size = text.length(); i < size; i++) { - char character = text.charAt(i); - - if (character == COLOR_PREFIX && i + 1 < size) { - // TODO: Проверить, будет ли рисовать § без отдельного символа - int colorIndex = COLORS.indexOf(text.charAt(i + 1)); - - if (colorIndex < 16) { - bold = false; - italic = false; - underline = false; - strikethrough = false; - GlStateManager.bindTexture(texturePlain.getGlTextureId()); - charData = this.charData; - - if (colorIndex < 0) colorIndex = 15; - if (shadow) colorIndex += 16; - - int colorCode = COLOR_CODES[colorIndex]; - GlStateManager.color( - (colorCode >> 16 & 0xFF) / 255.0F, - (colorCode >> 8 & 0xFF) / 255.0F, - (colorCode & 0xFF) / 255.0F, - 255); - } else if (colorIndex == 17) { - bold = true; - - if (italic) { - GlStateManager.bindTexture(textureItalicBold.getGlTextureId()); - charData = boldItalicChars; - } else { - GlStateManager.bindTexture(textureBold.getGlTextureId()); - charData = boldChars; - } - } else if (colorIndex == 18) { - strikethrough = true; - } else if (colorIndex == 19) { - underline = true; - } else if (colorIndex == 20) { - italic = true; - - if (bold) { - GlStateManager.bindTexture(textureItalicBold.getGlTextureId()); - charData = boldItalicChars; - } else { - GlStateManager.bindTexture(textureItalic.getGlTextureId()); - charData = italicChars; - } - } else if (colorIndex == 21) { - bold = false; - italic = false; - underline = false; - strikethrough = false; - - GlStateManager.color( - (color >> 16 & 0xFF) / 255.0F, - (color >> 8 & 0xFF) / 255.0F, - (color & 0xFF) / 255.0F, - 255); - GlStateManager.bindTexture(texturePlain.getGlTextureId()); - - charData = this.charData; - } - - //noinspection AssignmentToForLoopParameter - i++; - } else if (character < charData.length) { - GL11.glBegin(GL11.GL_TRIANGLES); - drawChar(charData, character, (float) x, (float) y); - GL11.glEnd(); - - if (strikethrough) { - drawLine(x, - y + charData[character].height / 2.0F, - x + charData[character].width - 8.0D, - y + charData[character].height / 2.0F - ); - } - - if (underline) { - drawLine(x, - y + charData[character].height - 2.0D, - x + charData[character].width - 8.0D, - y + charData[character].height - 2.0D - ); - } - - x += charData[character].width - (character == ' ' ? 8 : 9); - } - } - - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); - GL11.glHint(GL11.GL_POLYGON_SMOOTH_HINT, GL11.GL_DONT_CARE); - GL11.glPopMatrix(); - //endregion - - return (float) x / 2.0F; - } - - - - @Override - public String trimStringToWidth(CharSequence text, int width, boolean reverse) { - StringBuilder builder = new StringBuilder(); - - float f = 0.0F; - int i = reverse ? text.length() - 1 : 0; - int j = reverse ? -1 : 1; - boolean flag = false; - boolean flag1 = false; - - for (int k = i; k >= 0 && k < text.length() && f < width; k += j) { - char c0 = text.charAt(k); - float f1 = stringWidth(String.valueOf(c0)); - - if (flag) { - flag = false; - - if (c0 != 'l' && c0 != 'L') { - if (c0 == 'r' || c0 == 'R') { - flag1 = false; - } - } else { - flag1 = true; - } - } else if (f1 < 0.0F) { - flag = true; - } else { - f += f1; - if (flag1) ++f; - } - - if (f > width) break; - - if (reverse) { - builder.insert(0, c0); - } else { - builder.append(c0); - } - } - - return builder.toString(); - } - - @Override - public int stringWidth(CharSequence text) { - if (text == null) return 0; - int width = 0; - CharData[] currentData = charData; - boolean bold = false; - boolean italic = false; - - for (int i = 0, size = text.length(); i < size; i++) { - char character = text.charAt(i); - - if (character == COLOR_PREFIX && i + 1 < size) { - int colorIndex = COLORS.indexOf(text.charAt(i + 1)); - - if (colorIndex < 16) { // color - bold = false; - italic = false; - } else if (colorIndex == 17) { // bold - bold = true; - if (italic) currentData = boldItalicChars; - else currentData = boldChars; - } else if (colorIndex == 20) { // italic - italic = true; - if (bold) currentData = boldItalicChars; - else currentData = italicChars; - } else if (colorIndex == 21) { // reset - bold = false; - italic = false; - currentData = charData; - } - - //noinspection AssignmentToForLoopParameter - i++; - } else if (character < currentData.length) { - width += currentData[character].width - (character == ' ' ? 8 : 9); - } - } - - return width / 2; - } - - public CharData[] getCharData() { - return charData; - } - - //region shit - private static int[] setupMinecraftColorCodes() { - int[] colorCodes = new int[32]; - - for (int i = 0; i < 32; i++) { - int noClue = (i >> 3 & 0x1) * 85; - int red = (i >> 2 & 0x1) * 170 + noClue; - int green = (i >> 1 & 0x1) * 170 + noClue; - int blue = (i & 0x1) * 170 + noClue; - - if (i == 6) { - red += 85; - } - - if (i >= 16) { - red >>= 2; // divide by 4 - green >>= 2; - blue >>= 2; - } - - colorCodes[i] = (red & 0xFF) << 16 | (green & 0xFF) << 8 | blue & 0xFF; - } - - return colorCodes; - } - - private static class CharData { - - private int width; - private int height; - private int storedX; - private int storedY; - - private CharData() { - } - } - - //endregion - //region rendering - private static void drawChar(CharData[] chars, char c, float x, float y) { - drawQuad(x, y, chars[c].width, chars[c].height, chars[c].storedX, chars[c].storedY, chars[c].width, chars[c].height); - } - - private static void drawQuad(float x, float y, float width, float height, float srcX, float srcY, float srcWidth, float srcHeight) { - float renderSRCX = srcX / IMG_SIZE; - float renderSRCY = srcY / IMG_SIZE; - float renderSRCWidth = srcWidth / IMG_SIZE; - float renderSRCHeight = srcHeight / IMG_SIZE; - - - GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY); - GL11.glVertex2d(x + width, y); - GL11.glTexCoord2f(renderSRCX, renderSRCY); - GL11.glVertex2d(x, y); - GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight); - GL11.glVertex2d(x, y + height); - GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight); - GL11.glVertex2d(x, y + height); - GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY + renderSRCHeight); - GL11.glVertex2d(x + width, y + height); - GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY); - GL11.glVertex2d(x + width, y); - } - - private static void drawLine(double x, double y, double x1, double y1) { - GL11.glDisable(GL_TEXTURE_2D); - GL11.glLineWidth((float) 1.0); - GL11.glBegin(1); - GL11.glVertex2d(x, y); - GL11.glVertex2d(x1, y1); - GL11.glEnd(); - GL11.glEnable(GL_TEXTURE_2D); - } - - @Override - public int getHeight() { - return (fontHeight - 8) / 2; - } - - //endregion -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/OutlineUtils.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/OutlineUtils.java deleted file mode 100644 index 7b488b75b9..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/OutlineUtils.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.logo; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.shader.Framebuffer; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.opengl.EXTPackedDepthStencil; - -import java.awt.*; - -import static org.lwjgl.opengl.EXTFramebufferObject.*; -import static org.lwjgl.opengl.GL11.*; - -@SideOnly(Side.CLIENT) -public class OutlineUtils { - - public static void renderOne(final float lineWidth) { - checkSetupFBO(); - glPushAttrib(GL_ALL_ATTRIB_BITS); - glDisable(GL_ALPHA_TEST); - glDisable(GL_TEXTURE_2D); - glDisable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glLineWidth(lineWidth); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_STENCIL_TEST); - glClear(GL_STENCIL_BUFFER_BIT); - glClearStencil(0xF); - glStencilFunc(GL_NEVER, 1, 0xF); - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - } - - public static void renderTwo() { - glStencilFunc(GL_NEVER, 0, 0xF); - glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } - - public static void renderThree() { - glStencilFunc(GL_EQUAL, 1, 0xF); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - } - - public static void renderFour(final Color color) { - setColor(color); - glDepthMask(false); - glDisable(GL_DEPTH_TEST); - glEnable(GL_POLYGON_OFFSET_LINE); - glPolygonOffset(1F, -2000000F); - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); - } - - public static void renderFive() { - glPolygonOffset(1F, 2000000F); - glDisable(GL_POLYGON_OFFSET_LINE); - glEnable(GL_DEPTH_TEST); - glDepthMask(true); - glDisable(GL_STENCIL_TEST); - glDisable(GL_LINE_SMOOTH); - glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glEnable(GL_BLEND); - glEnable(GL_LIGHTING); - glEnable(GL_TEXTURE_2D); - glEnable(GL_ALPHA_TEST); - glPopAttrib(); - } - - public static void setColor(final Color color) { - glColor4d(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, color.getAlpha() / 255F); - } - - public static void checkSetupFBO() { - // Gets the FBO of Minecraft - final Framebuffer fbo = Minecraft.getMinecraft().getFramebuffer(); - - // Check if FBO isn't null - if(fbo != null) { - // Checks if screen has been resized or new FBO has been created - if(fbo.depthBuffer > -1) { - // Sets up the FBO with depth and stencil extensions (24/8 bit) - setupFBO(fbo); - // Reset the ID to prevent multiple FBO's - fbo.depthBuffer = -1; - } - } - } - - /** - * Sets up the FBO with depth and stencil - * - * @param fbo Framebuffer - */ - private static void setupFBO(final Framebuffer fbo) { - // Deletes old render buffer extensions such as depth - // Args: Render Buffer ID - glDeleteRenderbuffersEXT(fbo.depthBuffer); - // Generates a new render buffer ID for the depth and stencil extension - final int stencil_depth_buffer_ID = glGenRenderbuffersEXT(); - // Binds new render buffer by ID - // Args: Target (GL_RENDERBUFFER_EXT), ID - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, stencil_depth_buffer_ID); - // Adds the depth and stencil extension - // Args: Target (GL_RENDERBUFFER_EXT), Extension (GL_DEPTH_STENCIL_EXT), - // Width, Height - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, EXTPackedDepthStencil.GL_DEPTH_STENCIL_EXT, Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); - // Adds the stencil attachment - // Args: Target (GL_FRAMEBUFFER_EXT), Attachment - // (GL_STENCIL_ATTACHMENT_EXT), Target (GL_RENDERBUFFER_EXT), ID - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, stencil_depth_buffer_ID); - // Adds the depth attachment - // Args: Target (GL_FRAMEBUFFER_EXT), Attachment - // (GL_DEPTH_ATTACHMENT_EXT), Target (GL_RENDERBUFFER_EXT), ID - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, stencil_depth_buffer_ID); - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/info.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/info.java deleted file mode 100644 index 01045b7df0..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/logo/info.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.logo; - -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontManager; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.impl.SimpleFontManager; - -public class info { - public static String Name = "FDPCLIENT"; - - public static String version = ""; - public static String username; - private static info INSTANCE; - public static info getInstance() { - if (INSTANCE == null) INSTANCE = new info(); - return INSTANCE; - } - public static final FontManager fontManager = SimpleFontManager.create(); - public static FontManager getFontManager() { - return fontManager; - } -} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/util/SneakyThrowing.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/util/SneakyThrowing.java deleted file mode 100644 index bdcefd2c56..0000000000 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/fonts/util/SneakyThrowing.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ -package net.ccbluex.liquidbounce.ui.clickgui.fonts.util; - -public final class SneakyThrowing { - - public static RuntimeException sneakyThrow(Throwable throwable) { - return sneakyThrow0(throwable); - } - - @SuppressWarnings("unchecked") - private static T sneakyThrow0(Throwable throwable) throws T { - throw (T) throwable; - } - - private SneakyThrowing() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } -} diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Module.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Module.java index c973ff0333..dfcd6b3fbb 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Module.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Module.java @@ -10,7 +10,7 @@ import net.ccbluex.liquidbounce.features.module.modules.client.HUD; import net.ccbluex.liquidbounce.ui.clickgui.ClickGUIModule; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.impl.Fonts; +import net.ccbluex.liquidbounce.ui.font.Fonts; import net.ccbluex.liquidbounce.utils.render.RenderUtils; import net.ccbluex.liquidbounce.utils.timer.TickTimer; import net.ccbluex.liquidbounce.value.TextValue; @@ -97,7 +97,7 @@ public void drawScreen(int mouseX, int mouseY) { } else { RenderUtils.drawRect(tab.getPosX(), y, tab.getPosX() + 100, y + 14, interpolateColor(new Color(40, 40, 40, 255), colorHUD, MathHelper.clamp_float(fraction, 0, 1))); } - Fonts.SF.SF_18.SF_18.drawString(module.getName(), tab.getPosX() + 2, (float) (y + 4), 0xffffffff, true); + Fonts.fontSFUI35.drawString(module.getName(), tab.getPosX() + 2, (float) (y + 4), 0xffffffff, true); if (!settings.isEmpty()) { double val = debugFPS / 8.3; diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Setting.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Setting.java index 33b37ecc4c..06bb429347 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Setting.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Setting.java @@ -9,7 +9,7 @@ import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.features.module.modules.client.HUD; import net.ccbluex.liquidbounce.ui.clickgui.ClickGUIModule; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.impl.Fonts; +import net.ccbluex.liquidbounce.ui.font.Fonts; import net.ccbluex.liquidbounce.utils.MathUtils; import net.ccbluex.liquidbounce.utils.render.RenderUtils; import net.ccbluex.liquidbounce.utils.timer.TickTimer; @@ -62,7 +62,7 @@ public void drawScreen(int mouseX, int mouseY) { percent = Math.max(0, Math.min(1, (float) (percent + (Math.max(0, Math.min(percentBar, 1)) - percent) * (0.2 / clamp)))); RenderUtils.drawRect(module.tab.getPosX() + 1, y + 3, module.tab.getPosX() + 99, y + 14, new Color(0, 0, 0, 50).getRGB()); RenderUtils.drawRect(module.tab.getPosX() + 1, y + 3, module.tab.getPosX() + 1 + 98 * percent, y + 14, ClickGUIModule.generateColor()); - Fonts.SF.SF_18.SF_18.drawString(numberValue.getName() + " " + rounded, module.tab.getPosX() + 4, y + 5.5f, 0xffffffff, true); + Fonts.fontSFUI35.drawString(numberValue.getName() + " " + rounded, module.tab.getPosX() + 4, y + 5.5f, 0xffffffff, true); if (this.dragging) { double difference = numberValue.getMaximum() - numberValue.getMinimum(); @@ -95,7 +95,7 @@ public void drawScreen(int mouseX, int mouseY) { percent = Math.max(0, Math.min(1, (float) (percent + (Math.max(0, Math.min(percentBar, 1)) - percent) * (0.2 / clamp)))); RenderUtils.drawRect(module.tab.getPosX() + 1, y + 3, module.tab.getPosX() + 99, y + 14, new Color(0, 0, 0, 50).getRGB()); RenderUtils.drawRect(module.tab.getPosX() + 1, y + 3, module.tab.getPosX() + 1 + 98 * percent, y + 14, ClickGUIModule.generateColor()); - Fonts.SF.SF_18.SF_18.drawString(integerValue.getName() + " " + rounded, module.tab.getPosX() + 4, y + 5.5f, 0xffffffff, true); + Fonts.fontSFUI35.drawString(integerValue.getName() + " " + rounded, module.tab.getPosX() + 4, y + 5.5f, 0xffffffff, true); if (this.dragging2) { double difference = integerValue.getMaximum() - integerValue.getMinimum(); @@ -120,16 +120,16 @@ public void drawScreen(int mouseX, int mouseY) { RenderUtils.drawCheck(module.tab.getPosX() + 91, y + 8.5f, 2, ClickGUIModule.generateColor().brighter().getRGB()); } - Fonts.SF.SF_18.SF_18.drawString(boolValue.getName(), module.tab.getPosX() + 4, y + 5.5f, + Fonts.fontSFUI35.drawString(boolValue.getName(), module.tab.getPosX() + 4, y + 5.5f, new Color(227, 227, 227, 255).getRGB(), true); } if (setting instanceof ListValue) { final ListValue listValue = (ListValue) setting; - Fonts.SF.SF_17.SF_17.drawString(listValue.getName(), module.tab.getPosX() + 3, (float) (y + 6), + Fonts.fontSFUI35.drawString(listValue.getName(), module.tab.getPosX() + 3, (float) (y + 6), 0xffffffff, true); - Fonts.SF.SF_17.SF_17.drawString(listValue.get().toUpperCase(), - module.tab.getPosX() + 97 - Fonts.SF.SF_17.SF_17.stringWidth(listValue.get().toUpperCase()), y + 7f, + Fonts.fontSFUI35.drawString(listValue.get().toUpperCase(), + module.tab.getPosX() + 97 - Fonts.fontSFUI35.getStringWidth(listValue.get().toUpperCase()), y + 7f, new Color(255, 255, 255, 255).getRGB(), true); } @@ -143,12 +143,12 @@ public void drawScreen(int mouseX, int mouseY) { } RenderUtils.drawRect(module.tab.getPosX() + 6, y + 16, module.tab.getPosX() + 84, y + 16.5, new Color(195, 195, 195, 220).getRGB()); - Fonts.SF.SF_16.SF_16.drawString(textValue.getName(), module.tab.getPosX() + 5.5f, y + 1.5f, new Color(227, 227, 227, 255).getRGB()); + Fonts.fontSFUI35.drawString(textValue.getName(), module.tab.getPosX() + 5.5f, y + 1.5f, new Color(227, 227, 227, 255).getRGB()); - if (Fonts.SF.SF_16.SF_16.stringWidth(s) > 65) { - Fonts.SF.SF_16.SF_16.drawString(Fonts.SF.SF_16.SF_16.trimStringToWidth(s, 78, true), module.tab.getPosX() + 6, y + 10, 0xFFFFFFFF); + if (Fonts.fontSFUI35.getStringWidth(s) > 65) { + Fonts.fontSFUI35.drawString(Fonts.fontSFUI35.trimStringToWidth(s, 78, true), module.tab.getPosX() + 6, y + 10, 0xFFFFFFFF); } else { - Fonts.SF.SF_16.SF_16.drawString(s, module.tab.getPosX() + 6, y + 10, 0xFFFFFFFF); + Fonts.fontSFUI35.drawString(s, module.tab.getPosX() + 6, y + 10, 0xFFFFFFFF); } } diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Tab.java b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Tab.java index 2d95da81c2..444a920bc9 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Tab.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/clickgui/style/styles/classic/Tab.java @@ -7,7 +7,7 @@ import net.ccbluex.liquidbounce.FDPClient; import net.ccbluex.liquidbounce.features.module.ModuleCategory; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.impl.Fonts; +import net.ccbluex.liquidbounce.ui.font.Fonts; import net.ccbluex.liquidbounce.utils.render.RenderUtils; import java.awt.*; @@ -51,11 +51,11 @@ public void drawScreen(int mouseX, int mouseY) { l = "E"; } RenderUtils.drawRect(posX - 1, posY, posX + 101, posY + 15, new Color(29, 29, 29, 255).getRGB()); - Fonts.ICONFONT.ICONFONT_24.ICONFONT_24.drawString(l, posX + 88, posY + 5, 0xffffffff); + Fonts.ICONFONT_50.drawString(l, posX + 88, posY + 5, 0xffffffff); if (enumModuleType.name().equalsIgnoreCase("World")){ - Fonts.CheckFont.CheckFont_24.CheckFont_24.drawString("b",posX + 88, posY + 5, 0xffffffff); + Fonts.fontCheck42.drawString("b",posX + 88, posY + 5, 0xffffffff); } - Fonts.SF.SF_20.SF_20.drawString(enumModuleType.name().charAt(0) + enumModuleType.name().substring(1).toLowerCase(), posX + 4, posY + 4, 0xffffffff, true); + Fonts.fontSFUI35.drawString(enumModuleType.name().charAt(0) + enumModuleType.name().substring(1).toLowerCase(), posX + 4, posY + 4, 0xffffffff, true); if (opened) { RenderUtils.drawRect(posX - 1, posY + 15, posX + 101, posY + 15 + getTabHeight() + 1, new Color(29, 29, 29, 255).getRGB()); modules.forEach(module -> module.drawScreen(mouseX, mouseY)); diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Indicators.java b/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Indicators.java index 2ceec2d092..e838582d3d 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Indicators.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Indicators.java @@ -68,7 +68,7 @@ public Border drawElement(float partialTicks) { RenderUtils.drawNewRect(xX + 44, yX + 237 - 406, xX + 95, yX + 240.5 - 406, new Color(41, 41, 41, 255).getRGB()); RenderUtils.drawNewRect(xX + 5, yX + 197 - 405, xX + 100, yX + 198 - 405, mainColor().getRGB()); - Fonts.SFUI35.drawString("Indicators", xX + 37, yX + 202 - 406, -1); + Fonts.fontSFUI35.drawString("Indicators", xX + 37, yX + 202 - 406, -1); // armor final float armorValue = mc.thePlayer.getTotalArmorValue(); @@ -79,7 +79,7 @@ public Border drawElement(float partialTicks) { this.armorBarWidth = AnimationHelper.animate(armorWidth, this.armorBarWidth, 0.0229999852180481); RenderUtils.drawRect(xX + 44, yX + 210 - 406, xX + 44 + this.armorBarWidth, yX + 213.5 - 406, mainColor().getRGB()); - Fonts.SFUI35.drawString("Armor", xX + 8, yX + 211 - 406, -1); + Fonts.fontSFUI35.drawString("Armor", xX + 8, yX + 211 - 406, -1); // HurtTime double hurttimePercentage = MathHelper.clamp_double(mc.thePlayer.hurtTime, 0.0, 0.6); @@ -87,7 +87,7 @@ public Border drawElement(float partialTicks) { this.hurttimeBarWidth = AnimationHelper.animate(hurttimeWidth, this.hurttimeBarWidth, 0.0429999852180481); RenderUtils.drawRect(xX + 44, yX + 219 - 406, xX + 44 + this.hurttimeBarWidth, yX + 222.5 - 406, mainColor().getRGB()); - Fonts.SFUI35.drawString("HurtTime", xX + 8, yX + 220 - 406, -1); + Fonts.fontSFUI35.drawString("HurtTime", xX + 8, yX + 220 - 406, -1); // HurtTime double bpsPercentage = MathHelper.clamp_double(currSpeed, 0.0, 1.0); @@ -96,7 +96,7 @@ public Border drawElement(float partialTicks) { RenderUtils.drawRect(xX + 44, yX + 228 - 406, xX + 44 + this.bpsBarWidth, yX + 231.5 - 406, mainColor().getRGB()); - Fonts.SFUI35.drawString("BPS", xX + 8, yX + 229 - 406, -1); + Fonts.fontSFUI35.drawString("BPS", xX + 8, yX + 229 - 406, -1); // HurtTime final float health = mc.thePlayer.getHealth(); @@ -112,7 +112,7 @@ public Border drawElement(float partialTicks) { RenderUtils.drawRect(xX + 44, yX + 237 - 406, xX + 44 + this.healthBarWidth, yX + 240.5 - 406, mainColor().getRGB()); - Fonts.SFUI35.drawString("HP", xX + 8, yX + 238 - 406, -1); + Fonts.fontSFUI35.drawString("HP", xX + 8, yX + 238 - 406, -1); return new Border(xX + 5, yX + 198 - 405, xX + 100, yX + 246 - 408); } } \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Targets.kt b/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Targets.kt index 715a33d571..134bec9d3a 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Targets.kt +++ b/src/main/java/net/ccbluex/liquidbounce/ui/client/hud/element/elements/Targets.kt @@ -1761,7 +1761,7 @@ open class Targets : Element(-46.0, -40.0, 1F, Side(Side.Horizontal.MIDDLE, Side GL11.glScalef(1F - calcScaleX, 1F - calcScaleY, 1F - calcScaleX) } // the part to blur for the epic glow - val font = Fonts.SFUI40 + val font = Fonts.fontSFUI40 val name = "Name: ${entity.name}" val info = "Distance: ${decimalFormat2.format(mc.thePlayer.getDistanceToEntityBox(entity))}" val length = (font.getStringWidth(name).coerceAtLeast(font.getStringWidth(info)).toFloat() + 40F).coerceAtLeast(125F) @@ -1775,7 +1775,7 @@ open class Targets : Element(-46.0, -40.0, 1F, Side(Side.Horizontal.MIDDLE, Side GL11.glScalef(1F - calcScaleX, 1F - calcScaleY, 1F - calcScaleX) } // the part to cut - val font = Fonts.SFUI40 + val font = Fonts.fontSFUI40 val name = "Name: ${entity.name}" val info = "Distance: ${decimalFormat2.format(mc.thePlayer.getDistanceToEntityBox(entity))}" val length = (font.getStringWidth(name).coerceAtLeast(font.getStringWidth(info)).toFloat() + 40F).coerceAtLeast(125F) diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/font/Fonts.java b/src/main/java/net/ccbluex/liquidbounce/ui/font/Fonts.java index efb57cd9f4..4df872e5ca 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/font/Fonts.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/font/Fonts.java @@ -11,8 +11,6 @@ import net.ccbluex.liquidbounce.utils.FileUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.util.ResourceLocation; - import java.awt.*; import java.io.*; import java.lang.reflect.Field; @@ -21,17 +19,16 @@ public class Fonts { + + @FontDetails(fontName = "Medium", fontSize = 40, fileName = "regular.ttf") + public static GameFontRenderer font40; + + @FontDetails(fontName = "Small", fontSize = 35, fileName = "regular.ttf") + public static GameFontRenderer font35; @FontDetails(fontName = "Light", fontSize = 32, fileName = "regular.ttf") public static GameFontRenderer font32; @FontDetails(fontName = "superLight", fontSize = 28, fileName = "regular.ttf") public static GameFontRenderer font28; - - @FontDetails(fontName = "Roboto Medium", fontSize = 35) - public static GameFontRenderer font35; - - @FontDetails(fontName = "Roboto Medium", fontSize = 40) - public static GameFontRenderer font40; - @FontDetails(fontName = "Roboto Medium", fontSize = 72) public static GameFontRenderer font72; @@ -44,49 +41,39 @@ public class Fonts { @FontDetails(fontName = "Roboto Medium", fontSize = 52) public static GameFontRenderer fontLarge; - @FontDetails(fontName = "SF", fontSize = 40) - public static GameFontRenderer SF; - - @FontDetails(fontName = "SFUI40", fontSize = 20) - public static GameFontRenderer SFUI40; - - @FontDetails(fontName = "SFUI35", fontSize = 18) - public static GameFontRenderer SFUI35; - - @FontDetails(fontName = "SFUI10", fontSize = 10) - public static GameFontRenderer SFUI10; - + @FontDetails(fontName = "SFUI Regular", fontSize = 32) + public static GameFontRenderer fontSFUI32; @FontDetails(fontName = "SFUI Regular", fontSize = 35) public static GameFontRenderer fontSFUI35; @FontDetails(fontName = "SFUI Regular", fontSize = 40) public static GameFontRenderer fontSFUI40; - @FontDetails(fontName = "Tahoma", fontSize = 35) + @FontDetails(fontName = "Tahoma Bold", fontSize = 35) public static GameFontRenderer fontTahoma; - @FontDetails(fontName = "Tahoma", fontSize = 30) + @FontDetails(fontName = "Tahoma Bold", fontSize = 30) public static GameFontRenderer fontTahoma30; + @FontDetails(fontName = "mainmenu", fontSize = 30) + public static GameFontRenderer fontMainMenu60; + @FontDetails(fontName = "Check", fontSize = 42) + public static GameFontRenderer fontCheck42; public static TTFFontRenderer fontTahomaSmall; - - @FontDetails(fontName = "Bangers", fontSize = 45) - public static GameFontRenderer fontBangers; - - @FontDetails(fontName = "ICONFONT_50", fontSize = 50) + @FontDetails(fontName = "ICONFONT", fontSize = 50) public static GameFontRenderer ICONFONT_50; - @FontDetails(fontName = "Minecraft Font") - public static final FontRenderer minecraftFont = Minecraft.getMinecraft().fontRendererObj; - - @FontDetails(fontName = "Tenacity35", fontSize = 35) + @FontDetails(fontName = "Tenacity", fontSize = 35) public static GameFontRenderer fontTenacity35; - @FontDetails(fontName = "TenacityBold35", fontSize = 35) + @FontDetails(fontName = "Tenacity", fontSize = 40) + public static GameFontRenderer fontTenacity40; + + @FontDetails(fontName = "Tenacity Bold", fontSize = 35) public static GameFontRenderer fontTenacityBold35; - @FontDetails(fontName = "tenacity40", fontSize = 40) - public static GameFontRenderer fontTenacity40; + @FontDetails(fontName = "Minecraft Font") + public static final FontRenderer minecraftFont = Minecraft.getMinecraft().fontRendererObj; private static final List CUSTOM_FONT_RENDERERS = new ArrayList<>(); @@ -95,27 +82,26 @@ public static void loadFonts() { ClientUtils.INSTANCE.logInfo("Loading Fonts."); - SF = new GameFontRenderer(getFont("SF.ttf", 20)); - SFUI40 = new GameFontRenderer(getFont("SF.ttf", 20)); - SFUI35 = new GameFontRenderer(getFont("SF.ttf", 18)); - SFUI10 = new GameFontRenderer(getFont("SF.ttf", 10)); - fontSFUI35 = new GameFontRenderer(getFont("sfui.ttf", 35)); - fontSFUI40 = new GameFontRenderer(getFont("sfui.ttf", 40)); - font35 = new GameFontRenderer(getFont("Roboto-Medium.ttf", 35)); - font40 = new GameFontRenderer(getFont("Roboto-Medium.ttf", 40)); - font72 = new GameFontRenderer(getFont("Roboto-Medium.ttf", 72)); + font40 = new GameFontRenderer(getFont("regular.ttf", 40)); + font35 = new GameFontRenderer(getFont("regular.ttf", 35)); + font32 = new GameFontRenderer(getFont("regular.ttf", 32)); + font28 = new GameFontRenderer(getFont("regular.ttf", 28)); fontSmall = new GameFontRenderer(getFont("Roboto-Medium.ttf", 30)); + font72 = new GameFontRenderer(getFont("Roboto-Medium.ttf", 72)); fontTiny = new GameFontRenderer(getFont("Roboto-Medium.ttf", 24)); fontLarge = new GameFontRenderer(getFont("Roboto-Medium.ttf", 60)); - ICONFONT_50 = new GameFontRenderer(getFont("stylesicons.ttf", 50)); + fontSFUI32 = new GameFontRenderer(getFont("sfui.ttf", 32)); + fontSFUI35 = new GameFontRenderer(getFont("sfui.ttf", 35)); + fontSFUI40 = new GameFontRenderer(getFont("sfui.ttf", 40)); + fontTahoma = new GameFontRenderer(getFont("TahomaBold.ttf", 35)); + fontTahoma30 = new GameFontRenderer(getFont("TahomaBold.ttf", 30)); fontTahomaSmall = new TTFFontRenderer(getFont("Tahoma.ttf", 11)); - fontBangers = new GameFontRenderer(getFontcustom(45, "Bangers")); - fontTahoma = new GameFontRenderer(getFontcustom(35,"Tahoma")); - fontTahoma30 = new GameFontRenderer(getFontcustom(30,"Tahoma")); - fontTenacity35 = new GameFontRenderer(getFontcustom(35, "tenacity")); - fontTenacityBold35 = new GameFontRenderer(getFontcustom(35, "tenacity-bold")); - fontTenacity40 = new GameFontRenderer(getFontcustom(40,"tenacity")); - + ICONFONT_50 = new GameFontRenderer(getFont("stylesicons.ttf", 50)); + fontTenacityBold35 = new GameFontRenderer(getFont("tenacity-bold.ttf", 35)); + fontTenacity35 = new GameFontRenderer(getFont("tenacity.ttf", 35)); + fontTenacity40 = new GameFontRenderer(getFont("tenacity.ttf", 40)); + fontMainMenu60 = new GameFontRenderer(getFont("mainmenu.ttf", 60)); + fontCheck42 = new GameFontRenderer(getFont("check.ttf", 42)); getCustomFonts(); initFonts(); @@ -171,29 +157,14 @@ public static void loadFonts() { private static void initFonts() { try { - initSingleFont("regular.ttf", "assets/minecraft/fdpclient/font/regular.ttf"); + initSingleFont("assets/minecraft/fdpclient/font/regular.ttf"); }catch(IOException e) { e.printStackTrace(); } } - private static Font getFontcustom(int size,String fontname) { - Font font; - try { - InputStream is = Minecraft.getMinecraft().getResourceManager() - .getResource(new ResourceLocation("fdpclient/font/"+fontname+".ttf")).getInputStream(); - font = Font.createFont(0, is); - font = font.deriveFont(Font.PLAIN, size); - } catch (Exception ex) { - ex.printStackTrace(); - System.out.println("Error loading font"); - font = new Font("default", Font.PLAIN, size); - } - return font; - } - - private static void initSingleFont(String name, String resourcePath) throws IOException { - File file=new File(FDPClient.fileManager.getFontsDir(), name); + private static void initSingleFont(String resourcePath) throws IOException { + File file=new File(FDPClient.fileManager.getFontsDir(), "regular.ttf"); if(!file.exists()) FileUtils.INSTANCE.unpackFile(file, resourcePath); } diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt b/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt index 3d840ac19d..8053874034 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt +++ b/src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt @@ -390,16 +390,6 @@ class GameFontRenderer(font: Font) : FontRenderer(Minecraft.getMinecraft().gameS override fun bindTexture(location: ResourceLocation?) {} - fun drawOutlineStringWithoutGL(s: String, x: Float, y: Float, color: Int,font: FontRenderer) { - - font.drawString(ColorUtils.stripColor(s), (x * 2 - 1).toInt(), (y * 2).toInt(), Color.BLACK.rgb) - font.drawString(ColorUtils.stripColor(s), (x * 2 + 1).toInt(), (y * 2).toInt(), Color.BLACK.rgb) - font.drawString(ColorUtils.stripColor(s), (x * 2).toInt(), (y * 2 - 1).toInt(), Color.BLACK.rgb) - font.drawString(ColorUtils.stripColor(s), (x * 2).toInt(), (y * 2 + 1).toInt(), Color.BLACK.rgb) - font.drawString(s, (x * 2).toInt(), (y * 2).toInt(), color) - } - - companion object { @JvmStatic fun getColorIndex(type: Char): Int { diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/font/TTFFontRenderer.java b/src/main/java/net/ccbluex/liquidbounce/ui/font/TTFFontRenderer.java index 8039adde45..33ecc5e1ce 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/font/TTFFontRenderer.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/font/TTFFontRenderer.java @@ -5,7 +5,6 @@ */ package net.ccbluex.liquidbounce.ui.font; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.api.FontRenderer; import net.ccbluex.liquidbounce.utils.render.ColorUtils; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.MathHelper; @@ -251,14 +250,6 @@ public void drawStringWithShadow(String text, float x, float y, int color) { renderString(text, x, y, color, false); } - public static void drawOutlineStringWithoutGL(String s, float x, float y, int color, FontRenderer fontRenderer) { - fontRenderer.drawString(ColorUtils.stripColor(s), (int) (x * 2 - 1), (int) (y * 2), Color.BLACK.getRGB()); - fontRenderer.drawString(ColorUtils.stripColor(s), (int) (x * 2 + 1), (int) (y * 2), Color.BLACK.getRGB()); - fontRenderer.drawString(ColorUtils.stripColor(s), (int) (x * 2), (int) (y * 2 - 1), Color.BLACK.getRGB()); - fontRenderer.drawString(ColorUtils.stripColor(s), (int) (x * 2), (int) (y * 2 + 1), Color.BLACK.getRGB()); - fontRenderer.drawString(s, (int) (x * 2), (int) (y * 2), color); - } - /** diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFont.java b/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFont.java index 004c47e050..49022763d3 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFont.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFont.java @@ -3,15 +3,17 @@ * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. * https://github.com/SkidderMC/FDPClient/ */ - package net.ccbluex.liquidbounce.ui.font.cf; -import net.minecraft.client.renderer.texture.DynamicTexture; -import org.lwjgl.opengl.GL11; - -import java.awt.*; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; +import net.minecraft.client.renderer.texture.DynamicTexture; +import org.lwjgl.opengl.GL11; public class CFont { protected Font font; @@ -19,9 +21,9 @@ public class CFont { protected boolean fractionalMetrics; protected DynamicTexture tex; private final float imgSize = 512.0f; - protected final CharData[] charData = new CharData[256]; + protected CharData[] charData = new CharData[256]; protected int fontHeight = -1; - protected final int charOffset = 0; + protected int charOffset = 0; public CFont(Font font, boolean antiAlias, boolean fractionalMetrics) { this.font = font; @@ -93,28 +95,32 @@ protected void drawQuad(float x, float y, float width, float height, float srcX, float renderSRCWidth = srcWidth / 512.0f; float renderSRCHeight = srcHeight / 512.0f; GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY); - GL11.glVertex2d(x + width, y); + GL11.glVertex2d((double) (x + width), (double) y); GL11.glTexCoord2f(renderSRCX, renderSRCY); - GL11.glVertex2d(x, y); + GL11.glVertex2d((double) x, (double) y); GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight); - GL11.glVertex2d(x, y + height); + GL11.glVertex2d((double) x, (double) (y + height)); GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight); - GL11.glVertex2d(x, y + height); + GL11.glVertex2d((double) x, (double) (y + height)); GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY + renderSRCHeight); - GL11.glVertex2d(x + width, y + height); + GL11.glVertex2d((double) (x + width), (double) (y + height)); GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY); - GL11.glVertex2d(x + width, y); + GL11.glVertex2d((double) (x + width), (double) y); + } + + public int getStringHeight(String text) { + return getHeight(); } - public double getHeight() { + public int getHeight() { return (this.fontHeight - 8) / 2; } - public double getStringWidth(String text) { + public int getStringWidth(String text) { int width = 0; char[] arrc = text.toCharArray(); for (char c : arrc) { - if (c < this.charData.length) { + if (c < this.charData.length && c >= 0) { width += (this.charData[c].width - 8) + this.charOffset; } } @@ -152,8 +158,7 @@ public void setFont(Font font) { this.tex = setupTexture(font, this.antiAlias, this.fractionalMetrics, this.charData); } - /* loaded from: LiquidBounce-b73.jar:net/ccbluex/liquidbounce/CFont$CharData.class */ - protected static class CharData { + protected class CharData { public int width; public int height; public int storedX; diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFontRenderer.java b/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFontRenderer.java index 895fa682cb..0f1706ad24 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFontRenderer.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/CFontRenderer.java @@ -284,7 +284,7 @@ public static int getColor(String str) { /* JADX WARN: Type inference failed for: r0v55, types: [double] */ public float drawString(String text, float x, float y, int color, boolean shadow) { - return drawString(text, (double) x, (double) y,color,shadow); + return drawString(text, x, (double) y,color,shadow); } public float drawString(String text, double x, double y, int color, boolean shadow) { GlStateManager.enableBlend(); @@ -380,7 +380,7 @@ public float drawString(String text, double x, double y, int color, boolean shad i++; } else if (character < currentData.length) { GL11.glBegin(4); - drawChar(currentData, character, (float) c, (float) y2); + drawChar(currentData, character, c, (float) y2); GL11.glEnd(); if (strikethrough) { drawLine(c, y2 + ((double) (currentData[character].height / 2)), (c + ((double) currentData[character].width)) - 8.0d, y2 + ((double) (currentData[character].height / 2))); @@ -490,7 +490,7 @@ public int drawStringi(String text, double x, double y, int color, boolean shado i++; } else if (character < currentData.length) { GL11.glBegin(4); - drawChar(currentData, character, (float) c, (float) y2); + drawChar(currentData, character, c, (float) y2); GL11.glEnd(); if (strikethrough) { drawLine(c, y2 + ((double) (currentData[character].height / 2)), (c + ((double) currentData[character].width)) - 8.0d, y2 + ((double) (currentData[character].height / 2))); @@ -498,7 +498,7 @@ public int drawStringi(String text, double x, double y, int color, boolean shado if (underline) { drawLine(c, (y2 + ((double) currentData[character].height)) - 2.0d, (c + ((double) currentData[character].width)) - 8.0d, (y2 + ((double) currentData[character].height)) - 2.0d); } - c += (double) ((currentData[character].width - 8) + this.charOffset); + c += (char) ((currentData[character].width - 8) + this.charOffset); } i++; } @@ -507,8 +507,8 @@ public int drawStringi(String text, double x, double y, int color, boolean shado return ((int) c) / 2; } - @Override // net.ccbluex.liquidbounce.CFont - public double getStringWidth(String text) { + @Override + public int getStringWidth(String text) { if (text == null) { return 0; } @@ -533,7 +533,7 @@ public double getStringWidth(String text) { return width / 2; } - @Override // net.ccbluex.liquidbounce.CFont + @Override public void setFont(Font font) { setFont(font); setupBoldItalicIDs(); diff --git a/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/FontLoaders.java b/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/FontLoaders.java index 90a6bad974..54ceecde13 100644 --- a/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/FontLoaders.java +++ b/src/main/java/net/ccbluex/liquidbounce/ui/font/cf/FontLoaders.java @@ -1,18 +1,15 @@ -/* - * FDPClient Hacked Client - * A free open source mixin-based injection hacked client for Minecraft using Minecraft Forge by LiquidBounce. - * https://github.com/SkidderMC/FDPClient/ - */ - package net.ccbluex.liquidbounce.ui.font.cf; -import net.ccbluex.liquidbounce.ui.font.cf.CFontRenderer; +import net.ccbluex.liquidbounce.utils.MinecraftInstance; import net.minecraft.client.Minecraft; import net.minecraft.util.ResourceLocation; import java.awt.*; +import java.io.InputStream; import java.util.ArrayList; + public abstract class FontLoaders { + public static final CFontRenderer F14 = new CFontRenderer(getFont(14), true, true); public static final CFontRenderer F18 = new CFontRenderer(getFont(18), true, true); public static final CFontRenderer F20 = new CFontRenderer(getFont(20), true, true); @@ -24,6 +21,49 @@ public abstract class FontLoaders { public static final CFontRenderer M16 = new CFontRenderer(getMojangles(16), true, true); public static final ArrayList fonts = new ArrayList<>(); + // Tahoma2 + public static CFontRenderer Tahoma9 = new CFontRenderer(FontLoaders.getTahoma(9), true, true); + public static CFontRenderer Tahoma11 = new CFontRenderer(FontLoaders.getTahoma(11), true, true); + public static CFontRenderer Tahoma13 = new CFontRenderer(FontLoaders.getTahoma(13), true, true); + public static CFontRenderer Tahoma14 = new CFontRenderer(FontLoaders.getTahoma(14), true, true); + public static CFontRenderer Tahoma16 = new CFontRenderer(FontLoaders.getTahoma(16), true, true); + public static CFontRenderer Tahoma18 = new CFontRenderer(FontLoaders.getTahoma(18), true, true); + public static CFontRenderer Tahoma17 = new CFontRenderer(FontLoaders.getTahoma(17), true, true); + public static CFontRenderer Tahoma19 = new CFontRenderer(FontLoaders.getTahoma(19), true, true); + public static CFontRenderer Tahoma21 = new CFontRenderer(FontLoaders.getTahoma(21), true, true); + public static CFontRenderer Tahoma22 = new CFontRenderer(FontLoaders.getTahoma(22), true, true); + public static CFontRenderer Tahoma24 = new CFontRenderer(FontLoaders.getTahoma(24), true, true); + public static CFontRenderer Tahoma23 = new CFontRenderer(FontLoaders.getTahoma(23), true, true); + public static CFontRenderer Tahoma20 = new CFontRenderer(FontLoaders.getTahoma(20), true, true); + + // Tahoma3 + public static CFontRenderer TahomaBold8 = new CFontRenderer(FontLoaders.getTahomaBold(8), true, true); + public static CFontRenderer TahomaBold9 = new CFontRenderer(FontLoaders.getTahomaBold(9), true, true); + public static CFontRenderer TahomaBold10 = new CFontRenderer(FontLoaders.getTahomaBold(10), true, true); + public static CFontRenderer TahomaBold11 = new CFontRenderer(FontLoaders.getTahomaBold(11), true, true); + public static CFontRenderer TahomaBold12 = new CFontRenderer(FontLoaders.getTahomaBold(12), true, true); + public static CFontRenderer TahomaBold13 = new CFontRenderer(FontLoaders.getTahomaBold(13), true, true); + public static CFontRenderer TahomaBold14 = new CFontRenderer(FontLoaders.getTahomaBold(14), true, true); + public static CFontRenderer TahomaBold16 = new CFontRenderer(FontLoaders.getTahomaBold(16), true, true); + public static CFontRenderer TahomaBold17 = new CFontRenderer(FontLoaders.getTahomaBold(17), true, true); + public static CFontRenderer TahomaBold18 = new CFontRenderer(FontLoaders.getTahomaBold(18), true, true); + public static CFontRenderer TahomaBold19 = new CFontRenderer(FontLoaders.getTahomaBold(19), true, true); + public static CFontRenderer TahomaBold20 = new CFontRenderer(FontLoaders.getTahomaBold(20), true, true); + public static CFontRenderer TahomaBold21 = new CFontRenderer(FontLoaders.getTahomaBold(21), true, true); + public static CFontRenderer TahomaBold22 = new CFontRenderer(FontLoaders.getTahomaBold(22), true, true); + public static CFontRenderer TahomaBold23 = new CFontRenderer(FontLoaders.getTahomaBold(23), true, true); + public static CFontRenderer TahomaBold24 = new CFontRenderer(FontLoaders.getTahomaBold(24), true, true); + + public static CFontRenderer SF16 = new CFontRenderer(FontLoaders.getSF(16), true, true); + public static CFontRenderer SF17 = new CFontRenderer(FontLoaders.getSF(17), true, true); + public static CFontRenderer SF18 = new CFontRenderer(FontLoaders.getSF(18), true, true); + public static CFontRenderer SF19 = new CFontRenderer(FontLoaders.getSF(19), true, true); + public static CFontRenderer SF20 = new CFontRenderer(FontLoaders.getSF(20), true, true); + public static CFontRenderer SF21 = new CFontRenderer(FontLoaders.getSF(21), true, true); + public static CFontRenderer SF22 = new CFontRenderer(FontLoaders.getSF(22), true, true); + public static CFontRenderer SF23 = new CFontRenderer(FontLoaders.getSF(23), true, true); + public static CFontRenderer SF24 = new CFontRenderer(FontLoaders.getSF(24), true, true); + public static Font getFont(int size) { Font font; try { @@ -36,10 +76,13 @@ public static Font getFont(int size) { return font; } - public static Font getComfortaa(int size) { + private static Font getComfortaa(int size) { Font font; try { - font = Font.createFont(0, Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation("fdpclient/font/regular.ttf")).getInputStream()).deriveFont(Font.PLAIN, (float) size); + InputStream is = MinecraftInstance.mc.getResourceManager() + .getResource(new ResourceLocation("fdpclient/font/Comfortaa.ttf")).getInputStream(); + font = Font.createFont(0, is); + font = font.deriveFont(Font.PLAIN, size); } catch (Exception ex) { ex.printStackTrace(); System.out.println("Error loading font"); @@ -48,10 +91,13 @@ public static Font getComfortaa(int size) { return font; } - public static Font getMojangles(int size) { + private static Font getMojangles(int size) { Font font; try { - font = Font.createFont(0, Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation("fdpclient/font/mojangles.ttf")).getInputStream()).deriveFont(Font.PLAIN, (float) size); + InputStream is = MinecraftInstance.mc.getResourceManager() + .getResource(new ResourceLocation("fdpclient/font/mojangles.ttf")).getInputStream(); + font = Font.createFont(0, is); + font = font.deriveFont(Font.PLAIN, size); } catch (Exception ex) { ex.printStackTrace(); System.out.println("Error loading font"); @@ -59,4 +105,66 @@ public static Font getMojangles(int size) { } return font; } -} + + private static Font getSF(int size) { + Font font; + try { + InputStream is = MinecraftInstance.mc.getResourceManager() + .getResource(new ResourceLocation("fdpclient/font/sfui.ttf")).getInputStream(); + font = Font.createFont(0, is); + font = font.deriveFont(Font.PLAIN, size); + } catch (Exception ex) { + ex.printStackTrace(); + System.out.println("Error loading font"); + font = new Font("default", Font.PLAIN, size); + } + return font; + } + + private static Font getExhibition(int size) { + Font font; + try { + InputStream is = MinecraftInstance.mc.getResourceManager() + .getResource(new ResourceLocation("fdpclient/font/Icons.ttf")).getInputStream(); + font = Font.createFont(0, is); + font = font.deriveFont(Font.PLAIN, size); + } catch (Exception ex) { + ex.printStackTrace(); + System.out.println("Error loading font"); + font = new Font("default", Font.PLAIN, size); + } + return font; + } + + + private static Font getTahoma(int size) { + Font font; + try { + InputStream is = MinecraftInstance.mc.getResourceManager() + .getResource(new ResourceLocation("fdpclient/font/Tahoma.ttf")).getInputStream(); + font = Font.createFont(0, is); + font = font.deriveFont(Font.PLAIN, size); + } catch (Exception ex) { + ex.printStackTrace(); + System.out.println("Error loading font"); + font = new Font("default", Font.PLAIN, size); + } + return font; + } + + private static Font getTahomaBold(int size) { + Font font; + try { + InputStream is = MinecraftInstance.mc.getResourceManager() + .getResource(new ResourceLocation("fdpclient/font/TahomaBold.ttf")).getInputStream(); + font = Font.createFont(0, is); + font = font.deriveFont(Font.PLAIN, size); + } catch (Exception ex) { + ex.printStackTrace(); + System.out.println("Error loading font"); + font = new Font("default", Font.PLAIN, size); + } + return font; + } + +} \ No newline at end of file diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/CustomSplashProgress.java b/src/main/java/net/ccbluex/liquidbounce/utils/CustomSplashProgress.java index b7b7736165..e2f9b0d879 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/CustomSplashProgress.java +++ b/src/main/java/net/ccbluex/liquidbounce/utils/CustomSplashProgress.java @@ -7,7 +7,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.resources.FileResourcePack; import net.minecraft.client.resources.FolderResourcePack; import net.minecraft.client.resources.IResourcePack; @@ -26,11 +25,9 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.SharedDrawable; import org.lwjgl.util.glu.GLU; - import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; -import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.nio.ByteBuffer; @@ -41,31 +38,22 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import static org.lwjgl.opengl.GL11.glLoadIdentity; + public class CustomSplashProgress { private static Drawable d; private static volatile boolean pause = false; private static volatile boolean done = false; private static Thread thread; private static volatile Throwable threadError; - private static final int angle = 0; private static final Lock lock = new ReentrantLock(true); - private static CustomSplashProgress.SplashFontRenderer fontRenderer; private static final IResourcePack mcPack; private static final IResourcePack fmlPack; private static IResourcePack miscPack; private static CustomSplashProgress.Texture fontTexture; - //private static CustomSplashProgress.Texture logoTexture; private static CustomSplashProgress.Texture backgroundTexture; - //private static CustomSplashProgress.Texture forgeTexture; private static Properties config; private static boolean enabled; - private static boolean rotate; - //private static int logoOffset; - //private static int backgroundColor; - private static int fontColor; - private static int barBorderColor; - private static int barColor; - private static int barBackgroundColor; public static final Semaphore mutex; private static int max_texture_size; private static final IntBuffer buf; @@ -76,16 +64,8 @@ private static String getString(String name, String def) { return value; } - private static boolean getBool(String name, boolean def) { - return Boolean.parseBoolean(getString(name, Boolean.toString(def))); - } - - private static int getInt(String name, int def) { - return Integer.decode(getString(name, Integer.toString(def))); - } - - private static int getHex(String name, int def) { - return Integer.decode(getString(name, "0x" + Integer.toString(def, 16).toUpperCase())); + private static boolean getBool(boolean def) { + return Boolean.parseBoolean(getString("enabled", Boolean.toString(def))); } public static void start() { @@ -102,27 +82,15 @@ public static void start() { r = new FileReader(configFile); config.load(r); } catch (IOException var24) { - FMLLog.info("Could not load splash.properties, will create a default one", new Object[0]); + FMLLog.info("Could not load splash.properties, will create a default one"); } finally { IOUtils.closeQuietly(r); } boolean defaultEnabled = !System.getProperty("os.name").toLowerCase().contains("mac"); - enabled = getBool("enabled", defaultEnabled) && (!FMLClientHandler.instance().hasOptifine() || Launch.blackboard.containsKey("optifine.ForgeSplashCompatible")); - rotate = getBool("rotate", false); - //logoOffset = getInt("logoOffset", 0); - //backgroundColor = getHex("background", 16777215); - //fontColor = getHex("font", 0); - fontColor = Color.WHITE.getRGB(); - barBorderColor = getHex("barBorder", 12632256); - //barColor = getHex("bar", 13319477); - barColor = new Color(200, 0, 255, 180).getRGB(); - //barBackgroundColor = getHex("barBackground", 16777215); - barBackgroundColor = new Color(200, 200, 255).getRGB(); + enabled = getBool(defaultEnabled) && (!FMLClientHandler.instance().hasOptifine() || Launch.blackboard.containsKey("optifine.ForgeSplashCompatible")); final ResourceLocation fontLoc = new ResourceLocation(getString("fontTexture", "minecraft:textures/font/ascii.png")); - final ResourceLocation logoLoc = new ResourceLocation(getString("logoTexture", "minecraft:textures/gui/title/mojang.png")); final ResourceLocation backgroundLoc = new ResourceLocation(getString("backgroundTexture", "fdpclient/misc/splash.png")); - final ResourceLocation forgeLoc = new ResourceLocation(getString("forgeTexture", "fml:textures/gui/forge.gif")); File miscPackFile = new File(Minecraft.getMinecraft().mcDataDir, getString("resourcePackPath", "resources")); FileWriter w = null; @@ -130,7 +98,7 @@ public static void start() { w = new FileWriter(configFile); config.store(w, "Splash screen properties"); } catch (IOException var22) { - FMLLog.log(Level.ERROR, var22, "Could not save the splash.properties file", new Object[0]); + FMLLog.log(Level.ERROR, var22, "Could not save the splash.properties file"); } finally { IOUtils.closeQuietly(w); } @@ -138,7 +106,7 @@ public static void start() { miscPack = createResourcePack(miscPackFile); if (enabled) { FMLCommonHandler.instance().registerCrashCallable(new ICrashCallable() { - public String call() throws Exception { + public String call() { return "' Vendor: '" + GL11.glGetString(7936) + "' Version: '" + GL11.glGetString(7938) + "' Renderer: '" + GL11.glGetString(7937) + "'"; } @@ -172,19 +140,12 @@ public void printStackTrace(PrintStream s) { getMaxTextureSize(); thread = new Thread(new Runnable() { - private final int barWidth = 400; - private final int barHeight = 20; - private final int textHeight2 = 20; - private final int barOffset = 55; - public void run() { this.setGL(); CustomSplashProgress.fontTexture = new CustomSplashProgress.Texture(fontLoc); - //CustomSplashProgress.logoTexture = new CustomSplashProgress.Texture(logoLoc); CustomSplashProgress.backgroundTexture = new CustomSplashProgress.Texture(backgroundLoc); - //CustomSplashProgress.forgeTexture = new CustomSplashProgress.Texture(forgeLoc); GL11.glEnable(3553); - CustomSplashProgress.fontRenderer = new CustomSplashProgress.SplashFontRenderer(); + new SplashFontRenderer(); GL11.glDisable(3553); for(; !CustomSplashProgress.done; Display.sync(100)) { @@ -207,26 +168,10 @@ public void run() { int h = Display.getHeight(); GL11.glViewport(0, 0, w, h); GL11.glMatrixMode(5889); - GL11.glLoadIdentity(); + glLoadIdentity(); GL11.glOrtho(320 - w / 2, 320 + w / 2, 240 + h / 2, 240 - h / 2, -1.0, 1.0); GL11.glMatrixMode(5888); - GL11.glLoadIdentity(); - - /*this.setColor(CustomSplashProgress.backgroundColor); - GL11.glEnable(3553); - CustomSplashProgress.logoTexture.bind(); - GL11.glBegin(7); - CustomSplashProgress.logoTexture.texCoord(0, 0.0F, 0.0F); - GL11.glVertex2f(64.0F, -16.0F); - CustomSplashProgress.logoTexture.texCoord(0, 0.0F, 1.0F); - GL11.glVertex2f(64.0F, 496.0F); - CustomSplashProgress.logoTexture.texCoord(0, 1.0F, 1.0F); - GL11.glVertex2f(576.0F, 496.0F); - CustomSplashProgress.logoTexture.texCoord(0, 1.0F, 0.0F); - GL11.glVertex2f(576.0F, -16.0F); - GL11.glEnd(); - GL11.glDisable(3553);*/ - + glLoadIdentity(); int w2 = Display.getWidth(); int h2 = Display.getHeight(); @@ -260,35 +205,6 @@ public void run() { GL11.glPopMatrix(); } - //this.setColor(CustomSplashProgress.backgroundColor); - - /*CustomSplashProgress.angle = CustomSplashProgress.angle + 1; - this.setColor(CustomSplashProgress.backgroundColor); - float fw = (float) CustomSplashProgress.forgeTexture.getWidth() / 2.0F / 2.0F; - float fh = (float) CustomSplashProgress.forgeTexture.getHeight() / 2.0F / 2.0F; - if (CustomSplashProgress.rotate) { - float sh = Math.max(fw, fh); - GL11.glTranslatef((float)(320 + w / 2) - sh - (float) CustomSplashProgress.logoOffset, (float)(240 + h / 2) - sh - (float) CustomSplashProgress.logoOffset, 0.0F); - GL11.glRotatef((float) CustomSplashProgress.angle, 0.0F, 0.0F, 1.0F); - } else { - GL11.glTranslatef((float)(320 + w / 2) - fw - (float) CustomSplashProgress.logoOffset, (float)(240 + h / 2) - fh - (float) CustomSplashProgress.logoOffset, 0.0F); - } - - int f = CustomSplashProgress.angle / 10 % CustomSplashProgress.forgeTexture.getFrames(); - GL11.glEnable(3553); - CustomSplashProgress.forgeTexture.bind(); - GL11.glBegin(7); - CustomSplashProgress.forgeTexture.texCoord(f, 0.0F, 0.0F); - GL11.glVertex2f(-fw, -fh); - CustomSplashProgress.forgeTexture.texCoord(f, 0.0F, 1.0F); - GL11.glVertex2f(-fw, fh); - CustomSplashProgress.forgeTexture.texCoord(f, 1.0F, 1.0F); - GL11.glVertex2f(fw, fh); - CustomSplashProgress.forgeTexture.texCoord(f, 1.0F, 0.0F); - GL11.glVertex2f(fw, -fh); - GL11.glEnd(); - GL11.glDisable(3553);*/ - CustomSplashProgress.mutex.acquireUninterruptibly(); Display.update(); @@ -302,36 +218,6 @@ public void run() { this.clearGL(); } - private void setColor(int color) { - GL11.glColor3ub((byte)(color >> 16 & 255), (byte)(color >> 8 & 255), (byte)(color & 255)); - } - - private void drawBox(int w, int h) { - double paramXStart = 0; - double paramYStart = 0; - double paramXEnd = w; - double paramYEnd = h; - double radius = (double) h / 2; - - double x1 = paramXStart + radius; - double y1 = paramYStart + radius; - double x2 = paramXEnd - radius; - double y2 = paramYEnd - radius; - - GL11.glBegin(GL11.GL_POLYGON); - - double degree = Math.PI / 180; - for (double i = 0; i <= 90; i += 1) - GL11.glVertex2d(x2 + Math.sin(i * degree) * radius, y2 + Math.cos(i * degree) * radius); - for (double i = 90; i <= 180; i += 1) - GL11.glVertex2d(x2 + Math.sin(i * degree) * radius, y1 + Math.cos(i * degree) * radius); - for (double i = 180; i <= 270; i += 1) - GL11.glVertex2d(x1 + Math.sin(i * degree) * radius, y1 + Math.cos(i * degree) * radius); - for (double i = 270; i <= 360; i += 1) - GL11.glVertex2d(x1 + Math.sin(i * degree) * radius, y2 + Math.cos(i * degree) * radius); - GL11.glEnd(); - } - private void setGL() { CustomSplashProgress.lock.lock(); @@ -342,7 +228,6 @@ private void setGL() { throw new RuntimeException(var2); } - //GL11.glClearColor((float)(CustomSplashProgress.backgroundColor >> 16 & 255) / 255.0F, (float)(CustomSplashProgress.backgroundColor >> 8 & 255) / 255.0F, (float)(CustomSplashProgress.backgroundColor & 255) / 255.0F, 1.0F); GL11.glDisable(2896); GL11.glDisable(2929); GL11.glEnable(3042); @@ -372,7 +257,7 @@ private void clearGL() { } }); thread.setUncaughtExceptionHandler((t, e) -> { - FMLLog.log(Level.ERROR, e, "Splash thread Exception", new Object[0]); + FMLLog.log(Level.ERROR, e, "Splash thread Exception"); CustomSplashProgress.threadError = e; }); thread.start(); @@ -380,19 +265,17 @@ private void clearGL() { } } - public static int getMaxTextureSize() { + public static void getMaxTextureSize() { if (max_texture_size != -1) { - return max_texture_size; } else { for(int i = 16384; i > 0; i >>= 1) { GL11.glTexImage2D(32868, 0, 6408, i, i, 0, 6408, 5121, (ByteBuffer)null); if (GL11.glGetTexLevelParameteri(32868, 0, 4096) != 0) { max_texture_size = i; - return i; + return; } } - return -1; } } @@ -448,8 +331,6 @@ public static void finish() { d.releaseContext(); Display.getDrawable().makeCurrent(); fontTexture.delete(); - //logoTexture.delete(); - //forgeTexture.delete(); } catch (Exception e) { e.printStackTrace(); disableSplash(e); @@ -458,7 +339,7 @@ public static void finish() { } } - private static boolean disableSplash(Exception e) { + private static void disableSplash(Exception e) { if (disableSplash()) { throw new EnhancedRuntimeException(e) { protected void printStackTrace(EnhancedRuntimeException.WrappedPrintStream stream) { @@ -491,37 +372,22 @@ private static boolean disableSplash() { config.setProperty("enabled", "false"); FileWriter w = null; - boolean var4; try { w = new FileWriter(configFile); config.store(w, "Splash screen properties"); return true; } catch (IOException var8) { - FMLLog.log(Level.ERROR, var8, "Could not save the splash.properties file", new Object[0]); - var4 = false; + FMLLog.log(Level.ERROR, var8, "Could not save the splash.properties file"); + } finally { IOUtils.closeQuietly(w); } - return var4; + return false; } private static IResourcePack createResourcePack(File file) { - return (IResourcePack)(file.isDirectory() ? new FolderResourcePack(file) : new FileResourcePack(file)); - } - - public static void drawVanillaScreen(TextureManager renderEngine) throws LWJGLException { - if (!enabled) { - Minecraft.getMinecraft().drawSplashScreen(renderEngine); - } - - } - - public static void clearVanillaResources(TextureManager renderEngine, ResourceLocation mojangLogo) { - if (!enabled) { - renderEngine.deleteTexture(mojangLogo); - } - + return file.isDirectory() ? new FolderResourcePack(file) : new FileResourcePack(file); } public static void checkGLError(String where) { @@ -549,7 +415,7 @@ private static InputStream open(ResourceLocation loc) throws IOException { private static class SplashFontRenderer extends FontRenderer { public SplashFontRenderer() { - super(Minecraft.getMinecraft().gameSettings, CustomSplashProgress.fontTexture.getLocation(), null, false); + super(Minecraft.getMinecraft().gameSettings, CustomSplashProgress.fontTexture.location, null, false); super.onResourceManagerReload(null); } @@ -567,11 +433,11 @@ protected InputStream getResourceInputStream(ResourceLocation location) throws I } private static class Texture { + private final ResourceLocation location; private final int name; private final int width; private final int height; - private final int frames; private final int size; public Texture(ResourceLocation location) { @@ -587,11 +453,11 @@ public Texture(ResourceLocation location) { } else { ImageReader reader = readers.next(); reader.setInput(stream); - this.frames = reader.getNumImages(true); - BufferedImage[] images = new BufferedImage[this.frames]; + int frames = reader.getNumImages(true); + BufferedImage[] images = new BufferedImage[frames]; int size; - for(size = 0; size < this.frames; ++size) { + for(size = 0; size < frames; ++size) { images[size] = reader.read(size); } @@ -599,12 +465,11 @@ public Texture(ResourceLocation location) { size = 1; this.width = images[0].getWidth(); - for(this.height = images[0].getHeight(); size / this.width * (size / this.height) < this.frames; size *= 2) { + for(this.height = images[0].getHeight(); size / this.width * (size / this.height) < frames; size *= 2) { } this.size = size; GL11.glEnable(3553); - Class var8 = CustomSplashProgress.class; synchronized(CustomSplashProgress.class) { this.name = GL11.glGenTextures(); GL11.glBindTexture(3553, this.name); @@ -615,8 +480,8 @@ public Texture(ResourceLocation location) { GL11.glTexImage2D(3553, 0, 6408, size, size, 0, 32993, 33639, (IntBuffer)null); CustomSplashProgress.checkGLError("Texture creation"); - for(int i = 0; i * (size / this.width) < this.frames; ++i) { - for(int j = 0; i * (size / this.width) + j < this.frames && j < size / this.width; ++j) { + for(int i = 0; i * (size / this.width) < frames; ++i) { + for(int j = 0; i * (size / this.width) + j < frames && j < size / this.width; ++j) { CustomSplashProgress.buf.clear(); BufferedImage image = images[i * (size / this.width) + j]; @@ -643,30 +508,6 @@ public Texture(ResourceLocation location) { } } - public ResourceLocation getLocation() { - return this.location; - } - - public int getName() { - return this.name; - } - - public int getWidth() { - return this.width; - } - - public int getHeight() { - return this.height; - } - - public int getFrames() { - return this.frames; - } - - public int getSize() { - return this.size; - } - public void bind() { GL11.glBindTexture(3553, this.name); } diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/MainMenuButton.java b/src/main/java/net/ccbluex/liquidbounce/utils/MainMenuButton.java index 2fbd068bd3..baa5a7d7f6 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/MainMenuButton.java +++ b/src/main/java/net/ccbluex/liquidbounce/utils/MainMenuButton.java @@ -5,7 +5,8 @@ */ package net.ccbluex.liquidbounce.utils; -import net.ccbluex.liquidbounce.ui.clickgui.fonts.impl.Fonts; + +import net.ccbluex.liquidbounce.ui.font.Fonts; import net.ccbluex.liquidbounce.utils.render.RenderUtils; import java.awt.*; @@ -34,9 +35,9 @@ public void draw(float x, float y, int mouseX, int mouseY) { this.y = y; RenderUtils.drawRoundedCornerRect(x-30F,y-30F,x+30f,y+30f,15f,new Color(0,0,0,40).getRGB()); this.yAnimation = RenderUtils.smoothAnimation(this.yAnimation, RenderUtils.isHovering(mouseX, mouseY, this.x-30f, this.y-30f, this.x + 30.0F, this.y + 30.0F) ? 4.0F : 0.0F, 20.0F, 0.3F); - Fonts.MAINMENU.MAINMENU30.MAINMENU30.drawString(this.icon, x - (float) Fonts.MAINMENU.MAINMENU30.MAINMENU30.stringWidth(this.icon) / 2.0F, y-6f+(this.yAnimation*-1f), Color.WHITE.getRGB(),false); + Fonts.fontMainMenu60.drawString(this.icon, x - (float) Fonts.fontMainMenu60.getStringWidth(this.icon) / 2.0F, y-6f+(this.yAnimation*-1f), Color.WHITE.getRGB(),false); if(this.yAnimation>=0.11) { - Fonts.SF.SF_16.SF_16.drawString(this.text, x - (float) Fonts.SF.SF_16.SF_16.stringWidth(this.text) / 2.0F, y + 12f +(this.yAnimation*-1f), new Color(255,255,255, ((((this.yAnimation/4.0f)) * 254.0f * 1f)<=255.0f) ? (int)(((this.yAnimation/4.0f)) * 254.0f + 1f) : 25).getRGB()); + Fonts.fontSFUI35.drawString(this.text, x - (float) Fonts.fontSFUI35.getStringWidth(this.text) / 2.0F, y + 12f +(this.yAnimation*-1f), new Color(255,255,255, ((((this.yAnimation/4.0f)) * 254.0f * 1f)<=255.0f) ? (int)(((this.yAnimation/4.0f)) * 254.0f + 1f) : 25).getRGB()); }//RenderUtils.drawGradientRect(x, y + 40.0F - this.yAnimation * 3.0F, x + 50.0F, y + 40.0F, 3453695, 2016719615); RenderUtils.drawRoundedCornerRect(x-30F,y-30F,x+30f,y+30f,15f,new Color(255,255,255,50).getRGB()); } diff --git a/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt b/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt index 2a3b482964..b8c768de65 100644 --- a/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt +++ b/src/main/java/net/ccbluex/liquidbounce/utils/render/ColorUtils.kt @@ -130,7 +130,7 @@ object ColorUtils { } } - fun blend(color1: Color, color2: Color, ratio: Double): Color? { + private fun blend(color1: Color, color2: Color, ratio: Double): Color? { val r = ratio.toFloat() val ir = 1.0f - r val rgb1 = FloatArray(3) @@ -181,7 +181,7 @@ object ColorUtils { throw IllegalArgumentException("Fractions and colours must have equal number of elements") } - fun getFraction(fractions: FloatArray, progress: Float): IntArray { + private fun getFraction(fractions: FloatArray, progress: Float): IntArray { var startPoint: Int val range = IntArray(2) startPoint = 0 @@ -215,16 +215,16 @@ object ColorUtils { return Color.getHSBColor((abs(((((System.currentTimeMillis() - startTime).toInt() + index * indexOffset) / timeSplit.toFloat()) % 2) - 1) * (bigest - lowest)) + lowest, saturation, brightness) } - fun interpolate(oldValue: Double, newValue: Double, interpolationValue: Double): Double? { + fun interpolate(oldValue: Double, newValue: Double, interpolationValue: Double): Double { return oldValue + (newValue - oldValue) * interpolationValue } - fun interpolateFloat(oldValue: Float, newValue: Float, interpolationValue: Double): Float { - return net.ccbluex.liquidbounce.utils.render.ColorUtils.interpolate(oldValue.toDouble(), newValue.toDouble(), interpolationValue.toFloat().toDouble())!!.toFloat() + private fun interpolateFloat(oldValue: Float, newValue: Float, interpolationValue: Double): Float { + return interpolate(oldValue.toDouble(), newValue.toDouble(), interpolationValue.toFloat().toDouble()).toFloat() } - fun interpolateColorHue(color1: Color, color2: Color, amount: Float): Color? { + private fun interpolateColorHue(color1: Color, color2: Color, amount: Float): Color { var amount = amount - amount = Math.min(1f, Math.max(0f, amount)) + amount = 1f.coerceAtMost(0f.coerceAtLeast(amount)) val color1HSB = Color.RGBtoHSB(color1.red, color1.green, color1.blue, null) val color2HSB = Color.RGBtoHSB(color2.red, color2.green, color2.blue, null) val resultColor = Color.getHSBColor(interpolateFloat(color1HSB[0], color2HSB[0], amount.toDouble()), interpolateFloat(color1HSB[1], color2HSB[1], amount.toDouble()), interpolateFloat(color1HSB[2], color2HSB[2], amount.toDouble())) @@ -233,7 +233,6 @@ object ColorUtils { } - @JvmStatic fun astolfoRainbow(delay: Int, offset: Int, index: Int): Color { var rainbowDelay = ceil((System.currentTimeMillis() + (delay * index).toLong()).toDouble()) / offset @@ -243,13 +242,13 @@ object ColorUtils { @JvmStatic fun interpolateInt(oldValue: Int, newValue: Int, interpolationValue: Double): Int { - return interpolate(oldValue.toDouble(), newValue.toDouble(), interpolationValue.toFloat().toDouble())!!.toInt() + return interpolate(oldValue.toDouble(), newValue.toDouble(), interpolationValue.toFloat().toDouble()).toInt() } @JvmStatic - fun interpolateColorC(color1: Color, color2: Color, amount: Float): Color? { + fun interpolateColorC(color1: Color, color2: Color, amount: Float): Color { var amount = amount - amount = Math.min(1f, Math.max(0f, amount)) + amount = 1f.coerceAtMost(0f.coerceAtLeast(amount)) return Color( interpolateInt(color1.red, color2.red, amount.toDouble()), interpolateInt(color1.green, color2.green, amount.toDouble()), @@ -270,7 +269,7 @@ object ColorUtils { } @JvmStatic - fun getGradientOffset(color1: Color, color2: Color, offset: Double): Color? { + fun getGradientOffset(color1: Color, color2: Color, offset: Double): Color { var offset = offset if (offset > 1) { val left = offset % 1 @@ -285,11 +284,11 @@ object ColorUtils { } @JvmStatic - fun rainbowc(speed: Int, index: Int, saturation: Float, brightness: Float, opacity: Float): Color? { + fun rainbowc(speed: Int, index: Int, saturation: Float, brightness: Float, opacity: Float): Color { val angle = ((System.currentTimeMillis() / speed + index) % 360).toInt() val hue = angle / 360f val color = Color(Color.HSBtoRGB(hue, saturation, brightness)) - return Color(color.red, color.green, color.blue, Math.max(0, Math.min(255, (opacity * 255).toInt()))) + return Color(color.red, color.green, color.blue, 0.coerceAtLeast(min(255, (opacity * 255).toInt()))) } @JvmStatic fun rainbow(): Color { @@ -343,19 +342,14 @@ object ColorUtils { @JvmStatic fun StaticRainbow(speed: Int, index: Int): Color { - var angle = ((System.currentTimeMillis() / speed + index) % 360).toInt() + val angle = ((System.currentTimeMillis() / speed + index) % 360).toInt() val hue = angle / 360f - return Color.getHSBColor(if ((360.0.also { (angle).toInt() } / 360.0).toFloat().toDouble() < 0.5) -(angle / 360.0).toFloat() else (angle / 360.0).toFloat(), 0.5f, 1.0f) - } - - @JvmStatic - fun getFontColor(target: Any): Color { - return Color(0xAEB5B9) + return Color.getHSBColor(if ((360.0.also { angle } / 360.0).toFloat().toDouble() < 0.5) -(angle / 360.0).toFloat() else (angle / 360.0).toFloat(), 0.5f, 1.0f) } @JvmStatic fun otherAstolfo(delay: Int, offset: Int, index: Int): Int { - var rainbowDelay = Math.ceil((System.currentTimeMillis() + (delay * index).toLong()).toDouble()) / offset + var rainbowDelay = ceil((System.currentTimeMillis() + (delay * index).toLong()).toDouble()) / offset return Color.getHSBColor(if ((360.0.also { rainbowDelay %= it } / 360.0).toFloat() .toDouble() < 0.5) -(rainbowDelay / 360.0).toFloat() else (rainbowDelay / 360.0).toFloat(), 0.5f, 1.0f).rgb } @@ -395,7 +389,7 @@ object ColorUtils { return Color(color1.red + ((color2.red - color1.red) * percent).toInt(), color1.green + ((color2.green - color1.green) * percent).toInt(), color1.blue + ((color2.blue - color1.blue) * percent).toInt(), color1.alpha + ((color2.alpha - color1.alpha) * percent).toInt()) } - fun toRGB(n: Int, n2: Int, n3: Int, n4: Int): Int { + private fun toRGB(n: Int, n2: Int, n3: Int, n4: Int): Int { return (n4 and 0xFF shl 24) or (n3 and 0xFF shl 16) or (n2 and 0xFF shl 8) or (n and 0xFF) } @@ -408,7 +402,7 @@ object ColorUtils { setColorAlpha(color) } - fun setColorAlpha(color: Int) { + private fun setColorAlpha(color: Int) { val alpha = (color shr 24 and 255) / 255f val red = (color shr 16 and 255) / 255f val green = (color shr 8 and 255) / 255f diff --git a/src/main/resources/assets/minecraft/fdpclient/font/Bangers.ttf b/src/main/resources/assets/minecraft/fdpclient/font/Bangers.ttf deleted file mode 100644 index 0bba49670e05f0bee5429a3735383ee0fce1d133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96116 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/fdpclient/font/SF.ttf b/src/main/resources/assets/minecraft/fdpclient/font/SF.ttf deleted file mode 100644 index e50d50baf3eee17521ef97b14b1cdb2e63feab87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170408 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

;7NmD7H^6ESc z_SF)QiOM)+P!#4PQ)Q3&3fL@1FuyLEu(fiNXy7tcqMR?4YV(z)lWsm+(uiL1%9?N$ z4KmTnkU({LS$UOmZe?h5omz}9sVEA$-~JHBz``ZrNT_8_MOCB(LsCxg%p43|IbT`1 zkRkW8<*d>OH3&Q|^Ai!Ym{l4s^n_^_0gA>n1r$w+V*iA2bx7F)Q$i4VZJiV@v0XE4 zA~o<51Dpm*HR!w|7mlR0&P#7QKP(5XWHhXi2Ba3Q>Hy4l>bLW>;yKfZ~UOYDv@?Rw$P?Hj+5U7NPj; zY8g)CaVFC1=0O&5*!?^R4PweugVXg1D8wpaf1Y7kpwQ)cfy;9{P7S=)0H+xXTHMC! zr|1=2pxEVkiHGN(f%;a~v}%(F zc2c!#g<*ZZv49aeY&prKvbH2@4QrH3n*@GoFq<})c`a=)*QJHR>V5}u%k$S%q9qr} zPoIQ2C}W@E+Wk3>>!h^~gg@7~1{Oyg>omtdeY%SweWq*Am{(Qg0v+voWX;E{Ol7q} zl`(0p3+EqioC6b_z<~v>b&6}9DhnV!4q+LK!<9}7v*%)Z&g~i1bWqP%T`}rR3Q+v^HzbcOVMTy*Bd5x?fL}nM_igBP9%YdlfLu< zx45Jix^};ls`LVvy?%$gfiDynPH z>acl}U6|lt<%No>b-P@(33R($TPHYeqClQw^^>de_miUySrRD=Yipik&75erS5#{( z6C)q0Z>qimlN^MB0>|nnSB;w-HNr^_!a#vz&6wnAxMmc1KC&kzG>Ebb5*#w@&X8&? zX4oAf{bBnk5{-}g$j(VXk{wQPNY8QGS?OWdo@rXls!^6{n$7AfFxg3ZV7X&Wonp6d zQE5>VDKORX3KTh3Ke=jNk)yUvHPw;7$k@`R+I&wdvMuRT-S%O6k;kq_ZWN|;J$$3= zS-A$6VntRY?$Za2OrtJP4KVyiJG2xVTi|FX+XBUo)j!?%`%8?ih2y4E-oo**IWgS{ z9zfk_i(K~fgsjLeNpSGZ&@=)IXbj9ie0I;K)Uo=>RdbOXl`SyS@eY(ZRzJCFNOH6x z9dZI?jx~E`0wLL0jBUmSRk(EBJ5qF|>&}s~XK8oC=`8JKKGDQflA(px9)i*zwvR%R zVf&~L-)wDEC?hc2Nlu``wa#&^m5$XT$W>Rq@}g9GnhFD+jsb6qx5)s~xMKTs1x9sBD3G zZX&83YxcZ^?98rCaBxS06dHFlM}4O2Q8;baLvhNUJwE|Wc1?nV9a80Gx(=!AE$opz zBPlKH5k2$mTc9+PZUq`m0T3DOd`F;Z0PKWrY}GGN@?GL!%n+i~s~ejx~F{OMv1{b|}%o1EF~7g-{M{ zJP;1zHXb~Vqc=8{b6#A^p|uB>p}e&Rm2pega~F!_bUlHg?b=<@WxFeT3+?Vu(n5!E zzHNMp20NUxXX$Vz+AJN+d}3hE@R?>XG@o-Eq=B$w_33KWr)yMiHLSVrsfM+Kr=r$e z_dsZ_dmx->+IXNGM{jJJ>mDf0bq_9+j@BL^;}*zukOm@-6@!h23lYag!(UpMY1~V5 z27})A7*qfw-?lY-R-(X_Cpvf_G%q|5nin1j2XPw@l;h})P4mJ7rFr4OWhig$0Wxj@ zHH5D+i&9gmCtkFxB1*d|YnFm_h{#g#&ZiEeBG+M*6_YPOYGT9Wi|5Nf-?(ES)o>Tn z2!^|uOE6Y7xuB_3GYs0QTs4)-Ra2>4ouFCD$N3B>UrnX*(Nro|LjxvKJXHD?E402f z%J7pi)Dl6uP)o#O7yTN?>RYT(`_^b9T(+_%RNxDjl97tls;K(IsaVcQW(L+cR$?!h z`p5zV#?UK`UsYr^24%Eg`tnF&4dyy1PywYsw-+1`Qe79xL?F>{D=rN5SdLQ&ydM3Q$Erwsak@4XcDyIosl>!l~>TkRPfFYl;dCMan`Hk;SHn ztePTiBZ`!_7AS310;Q~)CbAlVBD)qS1)v2=!zzIyt4E;d(<@N)t;vL?QZY_hh)lBB zWRg{rscl52^44T(t0GfbHJM~JWRhKzsQ@&Y8di}>Ru7r<=_QlCTg|MYHPdr3A~(?< z7Rhjnc1?b!r(oCQXXRn0zBr5-CY1Y{{1*17F84M08T5?_5ao%97kn76ln@0-Qxll5 z_%Q7b0|Cm5A>j50a2tR?4XMXrLjmM3T2oO3Z3SDnj8rFVnXV#L?xnW7UzZiQX#_(E zL8e=X@Rdr_V+4Q!=@9fhtQq8_RRt1dyPNMcV@apk9mQ85QQ8Ix(mb!pPcN-0sg6{X ztN}WIL4=k`6Ji20AXym2uPk3}P-K>r7h-n31Xux?9x20^e59Jfr-x`Ue59%v_Dp0F z@`py{=t~VynDMJDcZ?h*qe4xVse+7|uuN6$nXfGMrF)|^&!#?2n;#At&TCcC_(JimlptKK)L_tq-HaCcP|!fwZV2zwOoq3kJa%d2Abv{;k9LJcMC&!Cj0 z;7vI~{N*-xb((Qr9bD+pc#b_NbUuvUpF-c1OZ3p2cDiuvQ|XC!26m*-2{=K#DaSeX zwa`0Fy?tcGgBKUr(=q`0Iu3hJW@3K{o%T?P{Te4>=g3B^*S#7$MQ&%?u!8s*tjK*+ z2gJH!g@8R_)BBA5{cqdcjh!^06#E$NSDdNI1{UhyJIDBN436~;_LxFm@<@&{MI{*df0n}^iH25?6Ik2 zm#};6RpYcu`~`x+D;n;^n`P3F~O|O7_&}qgm$ybn4Y^8|%_J$-W z@`mJ)tFdrtF3i4Sb8!S&rhK)jwcU;45Qw{lTA_ZaUg0j!mmBpuc6l*YuwO1O1GOy_ z_p*}i)C$Ubft9e(I{6K9J@zA2vFf;W^k>R5_8SY@I(0(AW0sn1Q0GI=W6x*`|<<0 zSlFr73G3$Hg%5HYx&9tp1#2(gfa#TE@_kvpuY3=ZZ`ts#C@cav_7}q|8UxZMu&=GN zDjBL=$OgM)c*}(;6{bvdiYpJD?fj&&(Ah2xdcT}53#KH{?g=Uf_j<~Jz)rkuxsN>p zpiuxboxMk#CmvFrHxD|{TjzCj>OAr{^;#cQuk}&&S|3%f^-=X&A62jQQS}VM4b}kP zRNuvTZ}m0!zD(_yx-@lF>b0r2r@o!$OBDB7DHhq2imFYL7Z%h9^qg}?*jEgfiXWWocm+?%-3mKnh{7f*Jfy|>a zS3$478(RiFkIQ;lA9*YGTyoJqwgstbAFCIGW4qzDTfP))fJ?{NZn)GdmseuDX=i1u znstqB<6p+=`PX>9$MX}yWye+kOSL#Swn=oxci-4fF)~&sj)<)j<6xf$w*`2PjqQ{- z<9R8zQNE0)AqJU?ZD7L0gZd~4I6GEQ`(>;SG1VcaI>c0myzhwkU&Pltc;1ao=N}+W zj=0(*o_?`Spmv>nCAO2LfU2!<-3E$wgOc5dv4Qyzb~nQAM%WDqTaPd*g)9v&D|ka} zQ=`=J*cM>j#L@v#FAioGBYh2G0OB2tXB1&)t3@vSW`d4mR2mzgD{ci99OK@@KSP3zDyXammR3n{K=2ge!^YMp}oGPV^w z*$SR)1y8mj)E02G4yoP<8ec@7yn}~Q1KuDtI|02D&^rOW6Zq?FKGi`twE}e~B92R9 zyDfjL-pat!F1FL^tR$cfQqUdGB?yarfsQM~`w~1+?2YBv89M~KWm96?SO8BZo;JWY z5+TOm8ISM9v8}j~w2m!>xf0)3!2JQ(9|G;2fVB&rf#Ajh}YCm-WC-RZH zT3~oNwhjJU5NZ=RQybd@>3x>H%|Av;K1cbmu*a73FCoFH9vR$?Jlf5_1qXhN?cq^` z>csruPkY4JHHNke%n694HZ}@;U%@{_j(!~5$agEO3y`~;kh|;nH?fWi%O05D!|g|y zKSkdK#*UDWj`Dt#wwF*cUPik7v5ug09VlI9bweDPh^Y=S?M5sUD0hK%H?ZyorrnSk zDmnF58l<9aY$HN#Lnufl=&VD2Z(;3VLaJB?(0MSPPI$V4Q)No}-17UQlGi%WL^9g| znn-T90sBtyo47Xs*tY=t3eeOF(mVkvei4%Y2IzPPCh^M1^S7~TBh$cAPy9y@q;X2L z^nasLvlD#TNTmQYEJ&KFgPP_3$FVJlpGw~*aC{j!zLW2PN!m$q9A#N^d|k5~Zw)#( zf#dby5lPQFa6P`H{-`u7(OC~(?F2TGum8l3cMXyQ~IprNA_cAbI-q#$`%l8Qax0Ll0s(9t|(Js>HUiQ=XqDP4q< zbS>fBjo4eEe2`3%-mC?`-$hv^-jft-38vDuTjf+ea;X6_-vIr*Qw%`OH5hfmSV+J) zhA+5fR z9SPcMmF}-oHCjKXR$HfHn+aUUK<-elAV#eLGN3ow#ehT32IRPlZ4d+Qv(Zv9?~5fZQZe{k?!aY%+Mbq6QR3+uD-AjKn@R%Z4tv1 zH@2a+rF3o*^Wc9hu)F$%Xx=2>1MTnQ`5;zjmzhNU(jKuu$DpM!0rlb*v|qNU_RC;k zJOUwYy#h?TfvEwfMi|}P8659|Cy9=>TSLDfTJ9=OAT5l)S4k3F#%F7QPwu1tWj&H4n5B*)W6ku*09y+TdtNT;W-)4DR@rB za~hu0@od0z2A(tVoQ3CXgh@r5btLUnenHPxq^yD3cO=m`dxUC1qKLF?ca-v=YNPH! zowWxcs!4+*A4qyP+36zAQoEDtEyA)1r3pL%y$z6`O|~>r$s+n2RK5^Lk3a~`Ns{rM z)Ph!;U=QI|Hp)ZP3Ba-qShhk2wgSsGU?FXR7Ae9}>y&gZwM2G;N{Y80&^rOW8_=p% z%p`D7dvqPik>ck7w0`>lOFio6j%YszQ6IhtjrNXenUZE(hcMI@H}S4O=_PE$wM{G& zAvPhzHiXy)&MZTSEeO$o5LEgoy<1dy?+0@*$^yy^T20_OwA@nk$yz~|wa3_rKG#K` z>T)E`W}(wL%W#s(i5Pjg5+^Zl#aSpnqm>%tLEa6gVLVGGVc^t@SDiC1KEMeV|H6qD zU*aT-Z`3&!-{TAmoL_;nD*`yDA{*yZv{h$QbjAr3=KP7VI7#AIdt|2;yY275xXugq zet3J=J9e(qZuJZ`j?@lgO5JcA#w68m9EKBQq#8>bg0Z~G-t%sdPR}1WOg-Oa_;Jt= z4EP;}wl-SZIA3NVxUm>Nx+!@HFdmDa1^z6B%LDic_7Hvo=dW~PDZDd{qTvjdF0gmy zU11-{2O>WQ^TB{Qo1YE$bND%Mzk*)@8G1>)gx=H3;$@V*SHvr@zbbGe22P524ffaR z9BrH!K|QQD1V$-vM#R4mYM0oB_s8O6$jztXQ@lSDpW*$5_yX^*aO<+fi4p%{7S4?L z7Vq!GcYu$H7-SJiU=n9WVB`ZQGR((&p{3T!v$jA`YNs>?7g@@2R??j(7h(zQBns#AWoB)t}9IMNzB{JlX<& zxj#q#ehXTV7f7d@R?Qc}tf_#RwA6UR{8~CpOikf&scQ_;oL^(;=3QJFKz~C2**SvL zZfcs!ST%aOzu})M1t<~F7xtfrLR@qT*KEjje!=fM(wJpVC;H5ViptMrpBqhiM+7 zu{>ya6%$G(eW?nMBV7 z+IvE58S+S*u1qfbwQ-y9RAYe8PPstO(D`#E({WN73>48#XzCCA*oxj5E(yeM9b|*_ zZaui>NVS1XG|6Q~$R3*N?d0m}|Gf{se`g_0Koc6l9_SiDl4%-+lQz#46o?%WZ`@}&dd_d-G zc|%ET0#cRHA<%(c5@MuSRQ-^E^cQ}*HAPe0ftFSEAt8pgtKS!Ak`dsRmgaqtt4(Nb zZw&|(+$52~C2W_mr9@!ZzdV zmG*eBrhVe!8h?2uu(9v&??UnaI;XL<{h|EeMpRPi)_<@k!b~TheU)pMmSm9BjwKwR3B5Br zDrLaO?kTygMD+C0KZt`u8`%4uXxGqgDiZza8*N(~2WarL$6Z+DtlgUir9IJtP70;r z6S?GK`R~~Nuj44}p_7dN#{OgN9Lf+kr9 zHhUaQ*;I*h;fyW5R2bL&F`J?*J}e|!Q)HWozVYAx?JqYCF2@sTXxaxnwp(F|VGiuO zY2EJnG#%rCP;R|Len$Sha8w_VoU32sgCDQ6XinXI!Z>9GTc1h zyzw<{$4a7vKTS<@G87*mIi%~_n2%`RK&l|uhJ&*k!{|5wsatIJIHWgbjG9&x4*UiH zn={f72Lm7d*I15?kL@3qKkys5Pj^AGC=aB8lsXHHLOc zGi5|U>iU&t3hmLeeWl&zK%AyZDwC!q-|$<@q;BsfVx`oh6m2!FVGm#8%7iXWfTgy5 z+?#_9WIE+`MwQfO*SO!aCBqn0Ps5D6{8UpFT9%V^cm zTBjUHNN*UVSk*&bx8(MCd5MRC9=A)ZDx-0dWguNyOdcaBp&m?J$v0ttca!$?`0;Cv zl~S#6i&Y!^24Tfid+eO+fL~{wyqQ;@1wV zswTk9$FCFCR+VA(Bi*Sz7;CIf#7$Y3;MX5(t**q%wZGvP#G0$ExO3}8{5oRgRTL{# zV)*stK^|loxTEM{)&py>>S+%Kf04DsTC7*G0_|=7HuK}&p?6pScMrXb9Sk4v53sgo zH{Z=VU~SgdY%JDieZvmHO+$NFKdjOEkqyB*t-Wj{?iz}+Bd}hJvxC&C6{*&%w7`8r z9k6Ppv*^rPVeQr-SkpplS2A&fP+zP(>L>cKY}^zymK}xFT)Auv?gg68dSW%#&8!zz zblt(mVO7`ttT)zmy~Mg=*VW5x6z)5Dg$=~Yt~AybtGoQ{aIEmkVC}J!upR4;RbHLh z0PG>`ruOrtSe?{vSe@P3Fh*hpVk&q<4+HPrKd+sE_xkTJxI=NBh=169S>oko6UNw-;sFtS4jKA9DrYM`x%H;JA>41XoKPLv?46X^*?u3aLecGm2jeb5frkTX6n+d^ zS-VK}MQ-FukA@hfASeX+(26|0W>7^H*-Lh>aja(CZ4 z6hUe?9g^%Rct$B$onNk;Yk6o~eq34b`W@*=l_?{xY08v~+x0VUZh0|f%9uvhjA`5x zO>Y@9c2m}jY2?&v_JlmrLuD@U8G|~I9+FvaNu*n$`@qeVkNq{1^Ull1`0{1ayf4$6 zoxZiyfL1=XAOKWAaZsi^^|HlW&}@sC!gHuqEL_WPx2 zFe_mx7`1fhM}M?8Tkp?SpXxA!-(JiQM=e-J!qyeiC@^8rr-w>#)XBWVMMim5 zW5OB^E*NuEC2~uA58Q-=?>10hk2GL?4brp%c8tQCcz&%(RO8nZ6k<#sdPVi%5f6=y zsqruHFdKAYEE~^mHLjub2>k1@ViW6tlhfdqRNz!2;RN^Fj<me4oqS9f%eAqP2H1%C!VSOW9te&5 z*S<~ae+?eeuLwT`C6dZXfm_>PZ1!S>*)6Bqrb;Dr4^|$NKeQ#4DbnUxX%1f55^C1~ zTBBk$JRsCKI>N0}EoCb0lX1_m{#&AVrD)lQb_P{=D@|-ecnrjn&?Zs%skX$qsRRq=I;N?*KOV3b z1TbMIJMvZKq8-}=xRUhLdHAg*0kI;TN@gGrs@zi;XQp~Oc1U5SA3rtUs<9#jYGGib zd{q2_E?TF;C8Z3qwh34$3?xp|lkc)a3<_0Vn-In{<Ge(M#UuyNf z3r#k-qStJf3N2$=x|-<2qP*#n@6i?U7`}c*JNQT>I@Z$UJ?I!;VnVZdL6se z?(}L|g7=mfl5FCMt+DNu8wx{04(a%nPh5#pHD?@68b;AMgj!T+8x6r}GOn(xv)ffJ z%E>AncF)F>Lh7mXQ8YKwVkoO<)7UK;qG*V+yCr_IiypQy;A9-#y0xWfiv!djXou52 z*PW)9qIlG3Zr?*Gf)Re?l%kY;+`NHneB5y{x}1q~CX7zbB>K>Id^i;YrJmZ6ZItFC ze$Hl-k^ieze{eG1x|M1AhN@R?r=kmDD+9j^pl?i1dbYwt&^Si~Z*QD^R6k>~-Iwg5 zdb9*Wc}|dVbvxu&$9WR@feMY8R!S(&=zJtEm#6XRQ+}=tc_dEfjq>-%FMZP=@{qWw zTeCWEaJrrLOZGV{?9up?_Z&YCG65bkQXR zCBfEFZco#tL2+*h@&_$wlMA-=459Wil`7+|L+P5q?lr2o;`=E|&)G3j2(;dHN!Iyf zMq2FhNTt-PZ#BP7En&x)khjz`(>@66kqu)fU(l4aKCx+0erP!*U^ZCEjBk-TK9e1r zvY1#vx2ow34dj_97m0KmzQ&%`IEk}>NlLd3q3OozL;aoXy`OZeeW{S`6*@l1O_TA0 zCP%lroCmEmj%$ZXTuDqm>gUP(WYl`ylBUY(djX@CAX|=Xx*N5}U5s&bd*p;54DVfN zV}tCe(E$bJ;fYD9fpbm5wU72B$LgY+Ft?wI*?r3nnSptCpR&^_KB;Pr4b5U^VeL>h zW?fskF~HUyYYSS#Y=cz|IGGn~6KJ&pxs%VqaMNdG1=ZYPPrQ4@h5s!+^y&mUQ^-Bn zh)yG-lZo_?>>2h?&)E`v=GR7@1g__8iGKR&lu-)khbc(RH0xh?*t;u#f}w}bM)y9c zSfxSnOK>IeVQOthJNTMM<6tUIir0NIV5cVq9Hku5Pe<73&xC7_xDIw6iZ1}3n@6wm zQY{yR>4N#_uIeES8AwsGrv+wtTOy5=*S(yF&V1^G+4pYBrI(^i)2F#bloKV%FdAz0 zy#(!4iVW2h2gwBSL#K(L$k%)u9va@5kS2{LMw32oI0I`;N*B@l|Nj2hI6!%?OB$I} zo^%=3t1FD%$b#3j)QT!seoX#rQ!CGBGw=)8PhYi4iPly1L;m&0DUOp6p8ix1R@oM)H)D&Cs^NIk zD#oKBo!QErRw8CAR}FRy=yrd7oD}GE(0h(bj|Ct4b;WbI{qw`;NYL&5x$C%&LJH`o zX*ce4YlW%bGZ8uyu^;9<7JR+WSbWdHLuTURg(ExBG9P^htkO>U914CCjQ3g0rr>*q z^EAfk`i;ZdMDLS=yr8E8#s&^Ynvy-K$SFV4NO|4gd1xJFK*1A#iE>R7Q9|6H6c~s^ ztcF{C0B2HdsMgrDtHxxYOemL!nn!L(olX-QrIXS|bZLs>^M%4uy2fiE`hV~LAr9#L za^+mhL*w$}%7WLgwWl3G_;MVrNmH|(Vy-;ab>3$)do~MH2y6@JEysygJQodng+UUivDQ*@6q;;zNrV3 z*kjfEI7l1P>hf*`_PhMi9as~crz4xia`4p&kK0SdhZ+x_j{CvrM?Kge9n&zMl z&=WAdu_u5-*AImL9D@2c4ef-ns2wJuW@?QV#7wj;X0zkaZdlLGf|mUYej{-!+r>!X zrR)m8Zf3WFn%mgjXdT?kUcjl%FR{09L)bg`9napw?*#S%e(TtW_?^i9h2MI%3%@_J zkMTQ+eTv`7>@)mMVPD{PD*K9k&rV}M;&(1ix!%jp;`@~pUNKL)A&;M0{;UqWFPVfkFd{pF<-+z=YQgV zVte@s{0!W0bQaErPUq+GD|wbE5)s}-6pLaW6s4k+cN68Jl6M!?qMG*>tHdgPh*&LF z^FCs&Sj!I;$BWbXVd4yN1|K2L5@+#|;v8`fA0^Hc=kd|vd~rTMTwEY7;75py#6^6J zxI|pZ$BNBjGta^8Nmuj9;#zSnpCYak*YT<1dT~9^6*r0-`808}xS1aEbqV z8=oQW5Kr=%;%V_T&lk^%XL*5mPCUoM;(75rUoKvhhw?(%SN7!(%l`6M{)l`|KF7bL zdlmUtOaxwoK4YnC)6$eip)q@mgW*?)xd>X(g837S9wj}~7_J+!;=rtTrj^e$f1y`A z)481(NrM}my{1kUBGEhWKcYp4_KYxj#>DoG*$M9%%i4FSWDqpAiE+L?$^8Cr-0WGF zMie>oNe)?ROxRvy(Dc}!0Y}cQKtAIvT#^Fgx^Gj(LZ_zEdY7#*$);DtxND6R6$UHG z4&ep7cLhvGjS230uQ^r~>s5B(Kdoh<6)np^onG^SnQ{DRjSR^ltsKH=zWIY2$+MCp zJxXih)(}XiCxxyZDfi65fRddyJe^YINTrD-(KLA65q4K@?781Yxkg;@;z24wSzKCd z8sG|P){+fc5-^##0pUrR!JN!Z`|Ueb28S^daXCD4=roYO)TDV}r{sFd9CC|Fp=ZB0 z#c5VdnOKyYyWVS$nf0I)+VbW|h?l=6yw`;MC@zv55l!k%E12z>Hv`+G969I2Xh2%mxx7TT%S5q<&KGx2MKenl3bsr@`qwXHMIzHJFR?X#zyldaL>qqcZY zglLPFA+^%SVl<%xT8anZHwySVqBW^^js?-$9F8_{H;h=&4zNQouGj-(2sA>}3H|W# zz(o7+hpGMdV^}GE>1yTvc(xM1HfTXs0t0SH1x2(kzZY({Spz%m%kReS!7qb9hMOq{ z;O>)WvCn=7-vRsc{CT`-|NUV8GRF-c{5Ad>T;AlkH(2e$AEb8SAH?6|?_n4I`}}>l z(~kW1>i&xk{6qdB8;zS&aOVgAh<}88M0W9AxDn&uxJ5XHf6PBdT%X`h>Hzfj_uNAz7Nh zRi`XfqzK#@B7DLJm{fsTHjyT<|4tUmV%AEQ$P(6Cmda8#QkKawxRlFsxKzjrxU7_w ztevcpHEf_RPx4PJU9Okwac}KOxGSgyZokD{KJrd^Cm`>|EwCBtEP*3&^XbEE zxO_}LhFeeTWF2cMAIB}l+42eb1nhLuz&Lf%z$A6jKo51&z`^RIfgE+xKxf<^ioPxG zXl=`axRDsAIN&~G%nPZr2fABbtS+#3wSsV`a|kA&wDf@lJkFoO{Ws4*3U(m(UqG(E z#@|4GzlXg25c&8K^6%fsw@;8?pCO07K%V>uJpTdwje(Z}+_S(nAGnpqM9Z_OrJV6& z=5|Q@LX@CB=tqq~-)Icl8N11Bw6=;$+yC63cLp1p-mEwJpQ01(9okcYos+0hM!`<^ zOPM_ro6z2)eHFAfLhaeWI;(1E@ongfp!R`JPvi)lOH>b+1+dW$js>ufLI|vo#)JJD zv>HSC(XJ0wTm6?<@QeB^zb8%Ll3QnCe*x9rss>lJJ-B19eFP@~XJB>xi*M>3QmdPC zMz1r$&N|gv+oEvMeguUdT;6~j!Y({O)81LE3&R_}c+~oJgR{BRy7jzXagz*|=-Bt4 zX-OqQ>YCkkHLW1mg=`8cuBVXTU#ECra~3H@F9)2qTU1_Hlj>xCUbx@FP8?6f1OC%* zI;cat7B*E5bXh>oV3&e=sO*pgjEOA+6!izGbyf{u>S>|vtMZciU5fi~$LYBE(f$zJ z-U5H>i4l})ohp8)b~LawYRwrML5s~n|nc`+aV_jpg3;+qcc7h5B7?-^&fD zbfzj>26o@_sY+7P95=aZaJlj9kIfB5Hltq>Lz+0WyO9qArPkh=@gZ7=hjQqq$b?0C zP9jOh7a`DVLg}_)65}906W{M^CdT8Yq^WqDf>3;EmTDylN^3PvZ_}}9`6N2kL%MZi zV`%WwkrxFQr!n*yp@#d~G#Ck2yd*$}+dWj+;_4;RlbDIs-fVoWgDfNcr{+n7r*fzQ}P zU;`$kb%Wpt` zmz4m0$Na@-mYx_srZ1Y|qayx#xy$@MeVxi;`&!x773aw{g`2`0cu!&!L<@*N5NV*m z3<;FT1n~yCxM4QpS$So0&&@gpG}XN7bO3hB5Azk|Sbcrw-;*2ne$8R3}#<3d12fq(2p zd_+L53j6q>R@`u3IOG)}AOk``nuUN|76P(M2*|7ukO3heJB5Js2?04Q1f(zg60$eE zk9D$=(2zrphJ=qGOW}`@rSLIisW4ZV16?XCfi4%8K{pB;pqqtF(5=E2=m&)lLP@6! zwpgnH0m9v|Z8$lw({S6oZpkd@)WH_q7P~84z$rVs!;lTyAWj|R354x7Y{TKS?$9jQ ze%p^2Mr;I>XA-v90Xu+DJehEhP9|)#Q5y{>?T{V9ExzM69!}X&!-Ie^9+yKjLn2eJ87rjdfHB7`hLb-r{@ zogU#kyM^z(CVXeN@SPsvJ7egD#;wW7m0i|tJ>b878vy4Gf#Y5Tr;UKOUbQiB(qZt? z5%A9>`377w1wJ_io|pqKETHx;+GW)8o2cDusL$)D%@x$#s;!~U?$|nN$@)KKU)K3a z*QaRv_t2aBsVqJ>;!GCj%WJ0eaqNDcpC{&L>D?ve5kWfkz_*k;{D1!(<%Me?6*x{h zlf~D~=S2B2)c<$BfTNV4xQX_JW-IRnS3KK~TAoR! zh)O^)4?fP<`Z7#ByMtJkpB!>1;+j*5L?S*@tgdsgsx@3ixHd$}8NtD8EIkwFBUqc*lh_Zk){o({Eg5 z!P!G2-K3l^v)==rQtrjLuCWSRzXe9Mss53Dq$FcfX!U|fYxxbiyp&%jJ0h(77Jxs{ zH>&?Bd#IxUI?Hp1_%&H|XP7F!oiUJ7?sr@;6Z zkQ4OvdP;r0zd8SYraW)1&IN1DTSBZqnji10+U41qzt6m6C6MWAb1F{ZDjc{3rRHBn z@*KvPSslx5GSWQnVuh|gPx22%esgs$lz8SPp&Yr$Kc(YXe0v#!Z&#ndcS2w0 zU9=#cbj3A||AF5eiB|uVrG6GGmdc~QGo#2OS1hR{k)G2m(>k~Qus=!tNXHSCdWc+X z$eRnboOnhDdpw?qB)(Pb6&xJv&|O5o_EJgnayrJE#;w!Hs_fWOu?h>CiyOT~&Quv9 zZ$hb;Q=YzqU#C>SH9bKu+VGkGO62Vyr%$<1yqNhx3LjH1{stnXlrX6_^KVUgjBcqP z#tSa0e~yJ-iXNW+tLn|u<7I`od_@iZ7_+L%*=s#;MX{pulMU0?)=bKB{Udaggbo@_3RPSN%WI@?ulsj2%+p0Drv$aJB36x34?4B2AK$VEDDio7b4Xm zM5;xIRJ#zV4k1!4LZrHdNHq(Q>JTDjLZlKQQcXgnnuJI-3X3WVe`*!})F%9?Rrpg| z@>TNp(2)G22(($K(hlKC1>s3Mge2_{l2ibOv?KXfSWL_9tyFgz=JTnV2DW<($oC4& z)5yJx*VE@IJO{7`XA+9ipQEYC&9rk&d=RBdw7WeG&G!WCYgxmeZzNOxX(4m=m`%hMk1nYZOs4kPq1-n~#(lW@(eb1*XmpVcbwk9wws!c$!P$ifo} z-bdiO#q$A{u$mI>xpH%;Y@)_Zo#>Yg`X;$?b>}twgW8Ax@vduL+>bv)4`bD(4?CZh zuznJ7Hda4ophqw#J_C9L|Dj$7-48mhP~2HOj=xq5PzT|E9&#UgIk(~etlTe6`3h7w z)@s~D9}MBN0BraQR%do=>MSByD=3=Hg!y3Kp)9B?Tjb09F z^fIG0w38Ua{3)DCzQR~#PGgmIj8%rhJ&aQJh7I&bzLH)nJim_Y|dP2rj_-4eP(0?~R ZxMu<4lj#rt%;#T!^}E05`P;w!`rjlHDfj>Y diff --git a/src/main/resources/mixins.fdpclient.json b/src/main/resources/mixins.fdpclient.json index 4ab3eb1f75..568b08e2a6 100644 --- a/src/main/resources/mixins.fdpclient.json +++ b/src/main/resources/mixins.fdpclient.json @@ -102,8 +102,6 @@ "render.MixinTileEntityRendererDispatcher", "render.MixinTileEntitySkullRenderer", "render.MixinVisGraph", - "resources.MixinDefaultResourcePack", - "resources.MixinSkinManager", "splash.MixinFMLClientHandler" ], "client": [