aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/OneConfig.java20
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java69
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/data/OptionSubcategory.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java8
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java4
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java8
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java26
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java14
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java6
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigHeader.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigInfo.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java4
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigTextBox.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigUniSelector.java8
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java22
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/CreditsPage.java44
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java4
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/init/OneConfigInit.java5
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java530
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/test/TestCommand_Test.java (renamed from src/main/java/cc/polyfrost/oneconfig/test/TestCommand.java)2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/test/TestNanoVGGui_Test.java (renamed from src/main/java/cc/polyfrost/oneconfig/test/TestNanoVGGui.java)6
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/test/package-info.java5
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/MathUtils.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/TextUtils.java14
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandHelper.java2
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandManager.java43
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/commands/annotations/Command.java2
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/ColorUtilsDSL.kt67
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/GuiUtilsDSL.kt11
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/JsonUtilsDSL.kt11
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MathUtilsDSL.kt8
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MultithreadingDSL.kt18
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/NetworkUtilsDSL.kt28
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/RenderManagerDSL.kt265
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TextUtilsDSL.kt25
-rw-r--r--src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TickDelayDSL.kt10
44 files changed, 901 insertions, 414 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/OneConfig.java b/src/main/java/cc/polyfrost/oneconfig/OneConfig.java
index c1301d3..9bde547 100644
--- a/src/main/java/cc/polyfrost/oneconfig/OneConfig.java
+++ b/src/main/java/cc/polyfrost/oneconfig/OneConfig.java
@@ -11,12 +11,10 @@ import cc.polyfrost.oneconfig.lwjgl.BlurHandler;
import cc.polyfrost.oneconfig.lwjgl.RenderManager;
import cc.polyfrost.oneconfig.lwjgl.font.Fonts;
import cc.polyfrost.oneconfig.lwjgl.image.Images;
-import cc.polyfrost.oneconfig.test.TestCommand;
import cc.polyfrost.oneconfig.test.TestConfig;
import cc.polyfrost.oneconfig.utils.commands.CommandManager;
import cc.polyfrost.oneconfig.utils.hypixel.HypixelUtils;
import net.minecraft.launchwrapper.Launch;
-import net.minecraftforge.client.ClientCommandHandler;
import net.minecraftforge.fml.common.DummyModContainer;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
@@ -27,24 +25,23 @@ import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
+/**
+ * The main class of OneConfig.
+ */
@net.minecraftforge.fml.common.Mod(modid = "@ID@", name = "@NAME@", version = "@VER@")
public class OneConfig {
- public static File jarFile;
- public static File oneConfigDir = new File("./OneConfig");
- public static File themesDir = new File(oneConfigDir, "themes");
+ public static final File oneConfigDir = new File("./OneConfig");
public static OneConfigConfig config;
public static TestConfig testConfig;
- public static List<Mod> loadedMods = new ArrayList<>();
- public static List<ModMetadata> loadedOtherMods = new ArrayList<>();
+ public static final List<Mod> loadedMods = new ArrayList<>();
+ public static final List<ModMetadata> loadedOtherMods = new ArrayList<>();
@net.minecraftforge.fml.common.Mod.EventHandler
public void onPreFMLInit(net.minecraftforge.fml.common.event.FMLPreInitializationEvent event) {
if (!Launch.blackboard.containsKey("oneconfig.initialized")) {
throw new RuntimeException("OneConfig has not been initialized! Please add the OneConfig tweaker or call OneConfigInit via an ITweaker or a FMLLoadingPlugin!");
}
- jarFile = event.getSourceFile();
oneConfigDir.mkdirs();
- themesDir.mkdirs();
config = new OneConfigConfig();
}
@@ -52,13 +49,12 @@ public class OneConfig {
public void onFMLInitialization(net.minecraftforge.fml.common.event.FMLInitializationEvent event) {
BlurHandler.INSTANCE.load();
testConfig = new TestConfig();
- CommandManager.registerCommand(new TestCommand());
- ClientCommandHandler.instance.registerCommand(new OneConfigCommand());
+ CommandManager.INSTANCE.registerCommand(new OneConfigCommand());
EventManager.INSTANCE.register(new HudCore());
EventManager.INSTANCE.register(HypixelUtils.INSTANCE);
RenderManager.setupAndDraw((vg) -> {
RenderManager.drawRoundedRect(vg, -100, -100, 50, 50, -1, 12f);
- RenderManager.drawString(vg, "OneConfig loading...", -100, -100, -1, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "OneConfig loading...", -100, -100, -1, 12f, Fonts.MEDIUM);
RenderManager.drawImage(vg, Images.HUE_GRADIENT, -100, -100, 50, 50);
});
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java b/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java
index 0743b54..ab2c403 100644
--- a/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java
+++ b/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java
@@ -2,54 +2,35 @@ package cc.polyfrost.oneconfig.command;
import cc.polyfrost.oneconfig.gui.HudGui;
import cc.polyfrost.oneconfig.gui.OneConfigGui;
-import cc.polyfrost.oneconfig.test.TestNanoVGGui;
import cc.polyfrost.oneconfig.utils.GuiUtils;
-import net.minecraft.command.CommandBase;
-import net.minecraft.command.ICommandSender;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class OneConfigCommand extends CommandBase {
-
- @Override
- public String getCommandName() {
- return "oneconfig";
- }
-
- @Override
- public String getCommandUsage(ICommandSender sender) {
- return "oneconfig <>";
- }
-
- @Override
- public List<String> getCommandAliases() {
- return new ArrayList<String>() {{
- add("oneconfig");
- add("ocfg");
- }};
+import cc.polyfrost.oneconfig.utils.commands.annotations.Command;
+import cc.polyfrost.oneconfig.utils.commands.annotations.Main;
+import cc.polyfrost.oneconfig.utils.commands.annotations.SubCommand;
+
+/**
+ * The main OneConfig command.
+ */
+@Command(value = "oneconfig", aliases = {"ocfg", "oneconfig"}, description = "Access the OneConfig GUI.")
+public class OneConfigCommand {
+
+ @Main
+ private static void main() {
+ GuiUtils.displayScreen(OneConfigGui.create());
}
- @Override
- public void processCommand(ICommandSender sender, String[] args) {
- if (args.length == 0) GuiUtils.displayScreen(OneConfigGui.create());
- else {
- switch (args[0]) {
- case "hud":
- GuiUtils.displayScreen(new HudGui());
- break;
- case "lwjgl":
- GuiUtils.displayScreen(new TestNanoVGGui());
- break;
- case "destroy":
- OneConfigGui.instanceToRestore = null;
- break;
- }
+ @SubCommand(value = "hud", description = "Open the OneConfig HUD config.")
+ private static class HUDSubCommand {
+ @Main
+ private static void main() {
+ GuiUtils.displayScreen(new HudGui());
}
}
- @Override
- public int getRequiredPermissionLevel() {
- return -1;
+ @SubCommand(value = "destory", description = "Destroy the cached OneConfig GUI.")
+ private static class DestroySubCommand {
+ @Main
+ private static void main() {
+ OneConfigGui.instanceToRestore = null;
+ }
}
-}
+} \ No newline at end of file
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/data/OptionSubcategory.java b/src/main/java/cc/polyfrost/oneconfig/config/data/OptionSubcategory.java
index cf4e2f0..e69e077 100644
--- a/src/main/java/cc/polyfrost/oneconfig/config/data/OptionSubcategory.java
+++ b/src/main/java/cc/polyfrost/oneconfig/config/data/OptionSubcategory.java
@@ -45,7 +45,7 @@ public class OptionSubcategory {
if (filteredOptions.size() == 0 && filteredTop.size() == 0 && filteredBottom.size() == 0) return 0;
int optionY = y;
if (!name.equals("")) {
- RenderManager.drawString(vg, name, x, y + 12, OneConfigConfig.WHITE_90, 24, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 12, OneConfigConfig.WHITE_90, 24, Fonts.MEDIUM);
optionY += 36;
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java
index 5194f83..75e6750 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java
@@ -93,8 +93,8 @@ public class OneConfigGui extends UScreen {
RenderManager.drawLine(vg, x + 224, y, x + 222, y + 800, 1, OneConfigConfig.GRAY_700);
RenderManager.drawSvg(vg, SVGs.ONECONFIG, x + 19, y + 19, 42, 42);
- RenderManager.drawString(vg, "OneConfig", x + 69, y + 32, OneConfigConfig.WHITE, 18f, Fonts.BOLD); // added half line height to center text
- RenderManager.drawString(vg, "ALPHA - By Polyfrost", x + 69, y + 51, OneConfigConfig.WHITE, 12f, Fonts.REGULAR);
+ RenderManager.drawText(vg, "OneConfig", x + 69, y + 32, OneConfigConfig.WHITE, 18f, Fonts.BOLD); // added half line height to center text
+ RenderManager.drawText(vg, "ALPHA - By Polyfrost", x + 69, y + 51, OneConfigConfig.WHITE, 12f, Fonts.REGULAR);
textInputField.draw(vg, x + 1020, y + 16);
sideBar.draw(vg, x, y);
@@ -159,7 +159,7 @@ public class OneConfigGui extends UScreen {
int color = OneConfigConfig.WHITE_60;
if (i == parents.size() - 1) color = OneConfigConfig.WHITE_95;
else if (hovered && !Mouse.isButtonDown(0)) color = OneConfigConfig.WHITE_80;
- RenderManager.drawString(vg, title, breadcrumbX, y + 38, color, 24f, Fonts.SEMIBOLD);
+ RenderManager.drawText(vg, title, breadcrumbX, y + 38, color, 24f, Fonts.SEMIBOLD);
if (i != 0)
RenderManager.drawSvg(vg, SVGs.CHEVRON_RIGHT, breadcrumbX - 28, y + 25, 24, 24, color);
if (hovered && InputUtils.isClicked()) openPage(parents.get(i));
@@ -168,7 +168,7 @@ public class OneConfigGui extends UScreen {
long end = System.nanoTime() - start;
String s = (" draw: " + end / 1000000f + "ms");
- RenderManager.drawString(vg, s, x + 1170, y + 790, OneConfigConfig.GRAY_300, 10f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, s, x + 1170, y + 790, OneConfigConfig.GRAY_300, 10f, Fonts.MEDIUM);
if (currentColorSelector != null) {
currentColorSelector.draw(vg);
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java
index 51e5a66..a17076b 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java
@@ -58,11 +58,11 @@ public class SideBar {
if (i >= 562) i += 44;
else i += 36;
if (i == 144) {
- RenderManager.drawString(vg, "MOD CONFIG", x + 16, y + 266, OneConfigConfig.WHITE_80, 12f, Fonts.SEMIBOLD);
+ RenderManager.drawText(vg, "MOD CONFIG", x + 16, y + 266, OneConfigConfig.WHITE_80, 12f, Fonts.SEMIBOLD);
i = 180;
}
if (i == 324) {
- RenderManager.drawString(vg, "PERSONALIZATION", x + 16, y + 446, OneConfigConfig.WHITE_80, 12f, Fonts.SEMIBOLD);
+ RenderManager.drawText(vg, "PERSONALIZATION", x + 16, y + 446, OneConfigConfig.WHITE_80, 12f, Fonts.SEMIBOLD);
i = 360;
}
if (i == 504) {
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java
index a84c290..f97cde2 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java
@@ -101,7 +101,7 @@ public class BasicButton extends BasicElement {
contentWidth += iconSize + xSpacing;
}
if (text != null) {
- RenderManager.drawString(vg, text, middle - contentWidth / 2 + (icon1 == null ? 0 : iconSize + xSpacing), middleYText, textColor, fontSize, Fonts.MEDIUM);
+ RenderManager.drawText(vg, text, middle - contentWidth / 2 + (icon1 == null ? 0 : iconSize + xSpacing), middleYText, textColor, fontSize, Fonts.MEDIUM);
}
if (icon1 != null) {
RenderManager.drawSvg(vg, icon1, middle - contentWidth / 2, middleYIcon, iconSize, iconSize);
@@ -114,7 +114,7 @@ public class BasicButton extends BasicElement {
}
if (alignment == ALIGNMENT_JUSTIFIED) {
if (text != null) {
- RenderManager.drawString(vg, text, middle - contentWidth / 2, middleYText, textColor, fontSize, Fonts.MEDIUM);
+ RenderManager.drawText(vg, text, middle - contentWidth / 2, middleYText, textColor, fontSize, Fonts.MEDIUM);
}
if (icon1 != null) {
RenderManager.drawSvg(vg, icon1, x + xSpacing, middleYIcon, iconSize, iconSize);
@@ -132,7 +132,7 @@ public class BasicButton extends BasicElement {
contentWidth += iconSize + xSpacing;
}
if (text != null) {
- RenderManager.drawString(vg, text, x + contentWidth, middleYText, textColor, fontSize, Fonts.MEDIUM);
+ RenderManager.drawText(vg, text, x + contentWidth, middleYText, textColor, fontSize, Fonts.MEDIUM);
contentWidth += RenderManager.getTextWidth(vg, text, fontSize, Fonts.MEDIUM) + xSpacing;
}
if (icon2 != null) {
@@ -150,7 +150,7 @@ public class BasicButton extends BasicElement {
}
if (text != null) {
contentWidth -= RenderManager.getTextWidth(vg, text, fontSize, Fonts.MEDIUM);
- RenderManager.drawString(vg, text, x + contentWidth, middleYText, textColor, fontSize, Fonts.MEDIUM);
+ RenderManager.drawText(vg, text, x + contentWidth, middleYText, textColor, fontSize, Fonts.MEDIUM);
contentWidth -= xSpacing;
}
if (icon1 != null) {
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java
index c734ccb..6c8845c 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java
@@ -105,7 +105,7 @@ public class ColorSelector {
int height = 768;
RenderManager.drawHollowRoundRect(vg, x - 3, y - 3, width + 4, height + 4, new Color(204, 204, 204, 77).getRGB(), 20f, 2f);
RenderManager.drawRoundedRect(vg, x, y, width, height, OneConfigConfig.GRAY_800, 20f);
- RenderManager.drawString(vg, "Color Selector", x + 16, y + 32, OneConfigConfig.WHITE_90, 18f, Fonts.SEMIBOLD);
+ RenderManager.drawText(vg, "Color Selector", x + 16, y + 32, OneConfigConfig.WHITE_90, 18f, Fonts.SEMIBOLD);
if (!closeBtn.isHovered()) RenderManager.setAlpha(vg, 0.8f);
closeBtn.draw(vg, x + 368, y + 16);
RenderManager.drawSvg(vg, SVGs.X_CIRCLE, x + 368, y + 16, 32, 32, closeBtn.isHovered() ? OneConfigConfig.ERROR_600 : -1);
@@ -172,17 +172,17 @@ public class ColorSelector {
}
percentMove = MathUtils.easeOut(percentMove, mode, 100f);
- RenderManager.drawString(vg, "HSB Box", x + 55, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
- RenderManager.drawString(vg, "Color Wheel", x + 172.5f, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
- RenderManager.drawString(vg, "Chroma", x + 313, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "HSB Box", x + 55, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Color Wheel", x + 172.5f, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Chroma", x + 313, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
- RenderManager.drawString(vg, "Saturation", x + 224, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Saturation", x + 224, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
saturationInput.draw(vg, x + 312, y + 544);
- RenderManager.drawString(vg, "Brightness", x + 16, y + 599, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Brightness", x + 16, y + 599, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
brightnessInput.draw(vg, x + 104, y + 584);
- RenderManager.drawString(vg, "Alpha (%)", x + 224, y + 599, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Alpha (%)", x + 224, y + 599, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
alphaInput.draw(vg, x + 312, y + 584);
- RenderManager.drawString(vg, color.getDataBit() == -1 ? "Hex (RGB):" : "Color Code:", x + 16, y + 641, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, color.getDataBit() == -1 ? "Hex (RGB):" : "Color Code:", x + 16, y + 641, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
hexInput.draw(vg, x + 104, y + 624);
copyBtn.draw(vg, x + 204, y + 624);
@@ -218,14 +218,14 @@ public class ColorSelector {
if (mode == 0) {
topSlider.setColor(color);
topSlider.draw(vg, x + 16, y + 424);
- RenderManager.drawString(vg, "Hue", x + 16, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Hue", x + 16, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
hueInput.draw(vg, x + 104, y + 544);
}
if (mode == 2) {
speedSlider.draw(vg, x + 60, y + 424);
- RenderManager.drawString(vg, "SLOW", x + 16, y + 429, OneConfigConfig.WHITE_80, 12f, Fonts.REGULAR);
- RenderManager.drawString(vg, "FAST", x + 370, y + 429, OneConfigConfig.WHITE_80, 12f, Fonts.REGULAR);
- RenderManager.drawString(vg, "Speed (s)", x + 16, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "SLOW", x + 16, y + 429, OneConfigConfig.WHITE_80, 12f, Fonts.REGULAR);
+ RenderManager.drawText(vg, "FAST", x + 370, y + 429, OneConfigConfig.WHITE_80, 12f, Fonts.REGULAR);
+ RenderManager.drawText(vg, "Speed (s)", x + 16, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
hueInput.draw(vg, x + 104, y + 544);
if (!speedSlider.isDragging()) {
color.setChromaSpeed((int) Math.abs(speedSlider.getValue() - 29));
@@ -262,7 +262,7 @@ public class ColorSelector {
color.setHSBA(dragging ? angle : color.getHue(), saturation, (int) (topSlider.getValue() / 360 * 100), (int) ((bottomSlider.getValue() / 100f) * 255));
topSlider.setGradient(OneConfigConfig.BLACK, color.getRGBMax(true));
topSlider.setImage(null);
- RenderManager.drawString(vg, "Hue", x + 16, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Hue", x + 16, y + 560, OneConfigConfig.WHITE_80, 12f, Fonts.MEDIUM);
hueInput.draw(vg, x + 104, y + 544);
topSlider.draw(vg, x + 16, y + 424);
break;
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java
index cc8c54d..d3326a5 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java
@@ -53,7 +53,7 @@ public class ModCard extends BasicElement {
favoriteHitbox.currentColor = ColorUtils.getColor(favoriteHitbox.currentColor, favoriteHitbox.colorPalette, favoriteHitbox.hovered, favoriteHitbox.clicked);
RenderManager.drawRoundedRectVaried(vg, x + 212, y + 87, 32, 32, favoriteHitbox.currentColor, 0f, 0f, 12f, 0f);
favorite = favoriteHitbox.isToggled();
- RenderManager.drawString(vg, modData.name, x + 12, y + 103, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, modData.name, x + 12, y + 103, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
if (favorite) {
RenderManager.drawSvg(vg, SVGs.HEART_FILL, x + 220, y + 95, 16, 16);
} else {
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java
index 3ad7f51..a10e3a0 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java
@@ -28,7 +28,7 @@ public class ConfigButton extends BasicOption {
public void draw(long vg, int x, int y) {
button.disable(!isEnabled());
if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f);
- RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
button.draw(vg, x + (size == 1 ? 352 : 736), y);
RenderManager.setAlpha(vg, 1f);
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java
index f8c34e1..f7e0f90 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java
@@ -45,7 +45,7 @@ public class ConfigCheckbox extends BasicOption {
RenderManager.drawRoundedRect(vg, x, y + 4, 24, 24, color, 6f);
RenderManager.drawHollowRoundRect(vg, x, y + 4, 23.5f, 23.5f, OneConfigConfig.GRAY_300, 6f, 1f); // the 0.5f is to make it look better ok
}
- RenderManager.drawString(vg, name, x + 32, y + 17, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x + 32, y + 17, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
percentOn = MathUtils.clamp(MathUtils.easeOut(percentOn, toggled ? 1f : 0f, 50f));
if (percentOn != 0 && percentOn != 1f) {
RenderManager.drawRoundedRect(vg, x, y + 4, 24, 24, ColorUtils.setAlpha(OneConfigConfig.PRIMARY_500, (int) (percentOn * 255)), 6f);
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java
index 5ecaa9e..0d420e8 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java
@@ -35,7 +35,7 @@ public class ConfigColorElement extends BasicOption {
} catch (IllegalAccessException e) {
return;
}
- RenderManager.drawString(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
if (!hexField.isToggled()) hexField.setInput("#" + color.getHex());
hexField.setErrored(false);
if (hexField.isToggled()) {
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java
index a36a829..9024516 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java
@@ -26,7 +26,7 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f
@Override
public void draw(long vg, int x, int y) {
if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f);
- RenderManager.drawString(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
boolean hovered;
if (size == 1) hovered = InputUtils.isAreaHovered(x + 224, y, 256, 32) && isEnabled();
@@ -50,12 +50,12 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f
if (hovered && Mouse.isButtonDown(0)) RenderManager.setAlpha(vg, 0.8f);
if (size == 1) {
RenderManager.drawRoundedRect(vg, x + 224, y, 256, 32, backgroundColor, 12);
- RenderManager.drawString(vg, options[selected], x + 236, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, options[selected], x + 236, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
RenderManager.drawRoundedRect(vg, x + 452, y + 4, 24, 24, OneConfigConfig.PRIMARY_600, 8);
RenderManager.drawSvg(vg, SVGs.DROPDOWN_LIST, x + 452, y + 4, 24, 24);
} else {
RenderManager.drawRoundedRect(vg, x + 352, y, 640, 32, backgroundColor, 12);
- RenderManager.drawString(vg, options[selected], x + 364, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, options[selected], x + 364, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
RenderManager.drawRoundedRect(vg, x + 964, y + 4, 24, 24, OneConfigConfig.PRIMARY_600, 8);
RenderManager.drawSvg(vg, SVGs.DROPDOWN_LIST, x + 964, y + 4, 24, 24);
}
@@ -80,7 +80,7 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f
if (hovered && Mouse.isButtonDown(0)) RenderManager.setAlpha(vg, 0.8f);
if (size == 1) {
RenderManager.drawRoundedRect(vg, x + 224, y, 256, 32, backgroundColor, 12);
- RenderManager.drawString(vg, options[selected], x + 236, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, options[selected], x + 236, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
if (hovered && Mouse.isButtonDown(0)) RenderManager.setAlpha(vg, 0.8f);
RenderManager.drawRoundedRect(vg, x + 452, y + 4, 24, 24, OneConfigConfig.PRIMARY_600, 8);
RenderManager.drawSvg(vg, SVGs.DROPDOWN_LIST, x + 452, y + 4, 24, 24);
@@ -107,12 +107,12 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f
InputUtils.blockClicks(false);
}
- RenderManager.drawString(vg, option, x + 240, optionY + 18, color, 14, Fonts.MEDIUM);
+ RenderManager.drawText(vg, option, x + 240, optionY + 18, color, 14, Fonts.MEDIUM);
optionY += 32;
}
} else {
RenderManager.drawRoundedRect(vg, x + 352, y, 640, 32, backgroundColor, 12);
- RenderManager.drawString(vg, options[selected], x + 364, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, options[selected], x + 364, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM);
if (hovered && Mouse.isButtonDown(0)) RenderManager.setAlpha(vg, 0.8f);
RenderManager.drawRoundedRect(vg, x + 964, y + 4, 24, 24, OneConfigConfig.PRIMARY_600, 8);
RenderManager.drawSvg(vg, SVGs.DROPDOWN_LIST, x + 964, y + 4, 24, 24);
@@ -131,7 +131,7 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f
color = OneConfigConfig.WHITE;
}
- RenderManager.drawString(vg, option, x + 368, optionY + 18, color, 14, Fonts.MEDIUM);
+ RenderManager.drawText(vg, option, x + 368, optionY + 18, color, 14, Fonts.MEDIUM);
if (optionHovered && InputUtils.isClicked(true)) {
try {
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java
index f8aa0d6..76601f7 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java
@@ -35,15 +35,15 @@ public class ConfigDualOption extends BasicOption {
if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f);
boolean hoveredLeft = InputUtils.isAreaHovered(x + 226, y, 128, 32) && isEnabled();
boolean hoveredRight = InputUtils.isAreaHovered(x + 354, y, 128, 32) && isEnabled();
- RenderManager.drawString(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
RenderManager.drawRoundedRect(vg, x + 226, y, 256, 32, OneConfigConfig.GRAY_600, 12f);
int x1 = (int) (x + 228 + (percentMove * 128));
RenderManager.drawRoundedRect(vg, x1, y + 2, 124, 28, OneConfigConfig.PRIMARY_600, 10f);
if (!hoveredLeft && isEnabled()) RenderManager.setAlpha(vg, 0.8f);
- RenderManager.drawString(vg, left, x + 290 - RenderManager.getTextWidth(vg, left, 12f, Fonts.MEDIUM) / 2, y + 17, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, left, x + 290 - RenderManager.getTextWidth(vg, left, 12f, Fonts.MEDIUM) / 2, y + 17, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
if (isEnabled()) RenderManager.setAlpha(vg, 1f);
if (!hoveredRight && isEnabled()) RenderManager.setAlpha(vg, 0.8f);
- RenderManager.drawString(vg, right, x + 418 - RenderManager.getTextWidth(vg, right, 12f, Fonts.MEDIUM) / 2, y + 17, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, right, x + 418 - RenderManager.getTextWidth(vg, right, 12f, Fonts.MEDIUM) / 2, y + 17, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM);
RenderManager.setAlpha(vg, 1);
if ((hoveredLeft && toggled || hoveredRight && !toggled) && InputUtils.isClicked()) {
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigHeader.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigHeader.java
index c7c7ea9..445424e 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigHeader.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigHeader.java
@@ -18,7 +18,7 @@ public class ConfigHeader extends BasicOption {
@Override
public void draw(long vg, int x, int y) {
Scissor scissor = ScissorManager.scissor(vg, x, y, size == 1 ? 480 : 992, 32);
- RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE_90, 24, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 17, OneConfigConfig.WHITE_90, 24, Fonts.MEDIUM);
ScissorManager.resetScissor(vg, scissor);
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigInfo.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigInfo.java
index 6564e9e..6a6c4f2 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigInfo.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigInfo.java
@@ -22,7 +22,7 @@ public class ConfigInfo extends BasicOption {
public void draw(long vg, int x, int y) {
Scissor scissor = ScissorManager.scissor(vg, x, y, size == 1 ? 448 : 960, 32);
RenderManager.drawInfo(vg, type, x, y + 4, 24);
- RenderManager.drawString(vg, name, x + 32, y + 18, OneConfigConfig.WHITE_90, 14, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x + 32, y + 18, OneConfigConfig.WHITE_90, 14, Fonts.MEDIUM);
ScissorManager.resetScissor(vg, scissor);
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java
index cb90165..78ef0b3 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java
@@ -26,7 +26,7 @@ public class ConfigKeyBind extends BasicOption {
@Override
public void draw(long vg, int x, int y) {
if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f);
- RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
OneKeyBind keyBind = getKeyBind();
String text = keyBind.getDisplay();
button.disable(!isEnabled());
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java
index 61729b9..ec13566 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java
@@ -36,9 +36,9 @@ public class ConfigPageButton extends BasicOption {
if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f);
RenderManager.drawRoundedRect(vg, x - 16, y, 1024, height, backgroundColor, 20);
- RenderManager.drawString(vg, name, x + 10, y + 32, OneConfigConfig.WHITE_90, 24, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x + 10, y + 32, OneConfigConfig.WHITE_90, 24, Fonts.MEDIUM);
if (!description.equals(""))
- RenderManager.drawString(vg, name, x + 10, y + 70, OneConfigConfig.WHITE_90, 14, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x + 10, y + 70, OneConfigConfig.WHITE_90, 14, Fonts.MEDIUM);
RenderManager.drawSvg(vg, SVGs.CHEVRON_RIGHT, x + 981f, y + (description.equals("") ? 20f : 36f), 13, 22);
if (clicked) OneConfigGui.INSTANCE.openPage(new ModConfigPage(page));
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java
index e5b3d90..08761fb 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java
@@ -67,7 +67,7 @@ public class ConfigSlider extends BasicOption {
}
if (!inputField.isToggled()) inputField.setCurrentValue(value);
- RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 17, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
RenderManager.drawRoundedRect(vg, x + 352, y + 13, 512, 6, OneConfigConfig.GRAY_300, 4f);
RenderManager.drawRoundedRect(vg, x + 352, y + 13, xCoordinate - x - 352, 6, OneConfigConfig.PRIMARY_500, 4f);
if (step > 0) {
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java
index f802680..61c0dd5 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java
@@ -35,7 +35,7 @@ public class ConfigSwitch extends BasicOption {
if (percentOn != 0)
RenderManager.drawRoundedRect(vg, x, y + 4, 42, 24, ColorUtils.setAlpha(colorEnabled, (int) (255 * percentOn)), 12f);
RenderManager.drawRoundedRect(vg, x2, y + 7, 18, 18, OneConfigConfig.WHITE, 9f);
- RenderManager.drawString(vg, name, x + 50, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x + 50, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
if (InputUtils.isAreaClicked(x, y, 42, 32) && isEnabled()) {
toggled = !toggled;
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigTextBox.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigTextBox.java
index 4fa57b8..966a85e 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigTextBox.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigTextBox.java
@@ -27,7 +27,7 @@ public class ConfigTextBox extends BasicOption {
public void draw(long vg, int x, int y) {
if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f);
textField.disable(!isEnabled());
- RenderManager.drawString(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14, Fonts.MEDIUM);
try {
String value = (String) get();
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigUniSelector.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigUniSelector.java
index f11a3fd..ce048c9 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigUniSelector.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigUniSelector.java
@@ -39,15 +39,15 @@ public class ConfigUniSelector extends BasicOption {
}
if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f);
String option = options[selected] + " " + (selected + 1) + "/" + options.length;
- RenderManager.drawString(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
Scissor scissor = ScissorManager.scissor(vg, x + 256, y, 192, 32);
if (previous == -1) {
- RenderManager.drawString(vg, option, x + 352 - RenderManager.getTextWidth(vg, option, 14f, Fonts.MEDIUM) / 2f, y + 15, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, option, x + 352 - RenderManager.getTextWidth(vg, option, 14f, Fonts.MEDIUM) / 2f, y + 15, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
} else {
String prevOption = options[previous] + " " + (previous + 1) + "/" + options.length;
- RenderManager.drawString(vg, selected < previous ? prevOption : option, x + 352 - RenderManager.getTextWidth(vg, selected < previous ? prevOption : option, 14f, Fonts.MEDIUM) / 2f + 192 * percentMove, y + 15, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
- RenderManager.drawString(vg, selected < previous ? option : prevOption, x + 352 - RenderManager.getTextWidth(vg, selected < previous ? option : prevOption, 14f, Fonts.MEDIUM) / 2f - 192 * (1 - percentMove), y + 15, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, selected < previous ? prevOption : option, x + 352 - RenderManager.getTextWidth(vg, selected < previous ? prevOption : option, 14f, Fonts.MEDIUM) / 2f + 192 * percentMove, y + 15, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, selected < previous ? option : prevOption, x + 352 - RenderManager.getTextWidth(vg, selected < previous ? option : prevOption, 14f, Fonts.MEDIUM) / 2f - 192 * (1 - percentMove), y + 15, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM);
}
ScissorManager.resetScissor(vg, scissor);
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
index a7dbf62..ff82879 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
@@ -127,18 +127,18 @@ public class TextInputField extends BasicElement {
float width;
StringBuilder s = new StringBuilder();
if (multiLine) {
- wrappedText = TextUtils.wrapText(vg, input, this.width - 24, 14f, Fonts.REGULAR);
+ wrappedText = TextUtils.wrapText(vg, input, this.width - 24, 14f, Fonts.REGULAR.font);
lines = wrappedText.size();
if (!toggled) caretPos = wrappedText.get(wrappedText.size() - 1).length();
int caretLine = (int) MathUtils.clamp(getCaretLine(caretPos), 0, wrappedText.size() - 1);
- width = RenderManager.getTextWidth(vg, wrappedText.get(caretLine).substring(0, getLineCaret(caretPos, caretLine)), 14f, Fonts.REGULAR);
+ width = RenderManager.getTextWidth(vg, wrappedText.get(caretLine).substring(0, getLineCaret(caretPos, caretLine)), 14f, Fonts.REGULAR.font);
} else if (!password) {
- width = RenderManager.getTextWidth(vg, input.substring(0, caretPos), 14f, Fonts.REGULAR);
+ width = RenderManager.getTextWidth(vg, input.substring(0, caretPos), 14f, Fonts.REGULAR.font);
} else {
for (int i = 0; i < input.length(); i++) {
s.append("*");
}
- width = RenderManager.getTextWidth(vg, s.substring(0, caretPos), 14f, Fonts.REGULAR);
+ width = RenderManager.getTextWidth(vg, s.substring(0, caretPos), 14f, Fonts.REGULAR.font);
}
if (hovered) {
while (Mouse.next()) {
@@ -222,11 +222,11 @@ public class TextInputField extends BasicElement {
if (input.equals("")) {
if (multiLine) {
- RenderManager.drawString(vg, defaultText, x + 12, y + 16, color, 14f, Fonts.REGULAR);
+ RenderManager.drawText(vg, defaultText, x + 12, y + 16, color, 14f, Fonts.REGULAR);
} else if (!centered) {
- RenderManager.drawString(vg, defaultText, x + 12, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
+ RenderManager.drawText(vg, defaultText, x + 12, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
} else {
- RenderManager.drawString(vg, defaultText, x + this.width / 2f - halfTextWidth, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
+ RenderManager.drawText(vg, defaultText, x + this.width / 2f - halfTextWidth, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
}
}
@@ -234,16 +234,16 @@ public class TextInputField extends BasicElement {
if (multiLine) {
int textY = y + 20;
for (String line : wrappedText) {
- RenderManager.drawString(vg, line, x + 12, textY, color, 14f, Fonts.REGULAR);
+ RenderManager.drawText(vg, line, x + 12, textY, color, 14f, Fonts.REGULAR);
textY += 24;
}
} else if (!centered) {
- RenderManager.drawString(vg, input, x + 12, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
+ RenderManager.drawText(vg, input, x + 12, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
} else {
- RenderManager.drawString(vg, input, x + this.width / 2f - halfTextWidth, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
+ RenderManager.drawText(vg, input, x + this.width / 2f - halfTextWidth, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
}
} else {
- RenderManager.drawString(vg, s.toString(), x + 12, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
+ RenderManager.drawText(vg, s.toString(), x + 12, y + height / 2f + 1, color, 14f, Fonts.REGULAR);
}
ScissorManager.resetScissor(vg, scissor);
} catch (
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/CreditsPage.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/CreditsPage.java
index e41cc9e..0bb94aa 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/pages/CreditsPage.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/CreditsPage.java
@@ -12,28 +12,28 @@ public class CreditsPage extends Page {
@Override
public void draw(long vg, int x, int y) {
RenderManager.drawSvg(vg, SVGs.ONECONFIG, x + 20f, y + 20f, 96, 96);
- RenderManager.drawString(vg, "OneConfig", x + 130, y + 46, -1, 42, Fonts.BOLD);
- RenderManager.drawString(vg, "ALPHA - By Polyfrost", x + 132, y + 76, -1, 18, Fonts.MEDIUM);
- RenderManager.drawString(vg, "v0.1", x + 132, y + 96, -1, 18, Fonts.MEDIUM);
-
- RenderManager.drawString(vg, "Development Team", x + 20, y + 180, -1, 24, Fonts.SEMIBOLD);
- RenderManager.drawString(vg, " - MoonTidez - Founder and lead designer", x + 20, y + 205, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - DeDiamondPro - Config backend, GUI frontend, HUD", x + 20, y + 220, -1, 12, Fonts.REGULAR); // +15/line
- RenderManager.drawString(vg, " - nextdaydelivery - GUI frontend, Render Manager, Utilities", x + 20, y + 235, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - Wyvest - Gradle, Render Manager, VCAL, Utilities", x + 20, y + 250, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - Ethan - Utilities", x + 20, y + 265, -1, 12, Fonts.REGULAR);
-
- RenderManager.drawString(vg, "Libraries", x + 20, y + 318, -1, 24, Fonts.SEMIBOLD);
- RenderManager.drawString(vg, " - LWJGLTwoPointFive (DJTheRedstoner) - LWJGL3 loading hack", x + 20, y + 340, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - #getResourceAsStream (SpinyOwl) - IO Utility", x + 20, y + 355, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - NanoVG (memononen) - NanoVG Library", x + 20, y + 370, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - UniversalCraft (Sk1er LLC) - Multiversioning bindings", x + 20, y + 385, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - Easing Functions (jesusgollonet)", x + 20, y + 400, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - Quiltflower (Quilt Team) - Gradle decompiler", x + 20, y + 415, -1, 12, Fonts.REGULAR);
- RenderManager.drawString(vg, " - Seraph (Scherso) - Locraw and Multithreading utilities", x + 20, y + 430, -1, 12, Fonts.REGULAR);
-
- RenderManager.drawString(vg, "Terms Of Service & Licensing", x + 20, y + 517, -1, 24, Fonts.SEMIBOLD);
- RenderManager.drawString(vg, " - License Summary goes here", x + 20, y + 540, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, "OneConfig", x + 130, y + 46, -1, 42, Fonts.BOLD);
+ RenderManager.drawText(vg, "ALPHA - By Polyfrost", x + 132, y + 76, -1, 18, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "v0.1", x + 132, y + 96, -1, 18, Fonts.MEDIUM);
+
+ RenderManager.drawText(vg, "Development Team", x + 20, y + 180, -1, 24, Fonts.SEMIBOLD);
+ RenderManager.drawText(vg, " - MoonTidez - Founder and lead designer", x + 20, y + 205, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - DeDiamondPro - Config backend, GUI frontend, HUD", x + 20, y + 220, -1, 12, Fonts.REGULAR); // +15/line
+ RenderManager.drawText(vg, " - nextdaydelivery - GUI frontend, Render Manager, Utilities", x + 20, y + 235, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - Wyvest - Gradle, Render Manager, VCAL, Utilities", x + 20, y + 250, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - Ethan - Utilities", x + 20, y + 265, -1, 12, Fonts.REGULAR);
+
+ RenderManager.drawText(vg, "Libraries", x + 20, y + 318, -1, 24, Fonts.SEMIBOLD);
+ RenderManager.drawText(vg, " - LWJGLTwoPointFive (DJTheRedstoner) - LWJGL3 loading hack", x + 20, y + 340, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - #getResourceAsStream (SpinyOwl) - IO Utility", x + 20, y + 355, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - NanoVG (memononen) - NanoVG Library", x + 20, y + 370, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - UniversalCraft (Sk1er LLC) - Multiversioning bindings", x + 20, y + 385, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - Easing Functions (jesusgollonet)", x + 20, y + 400, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - Quiltflower (Quilt Team) - Gradle decompiler", x + 20, y + 415, -1, 12, Fonts.REGULAR);
+ RenderManager.drawText(vg, " - Seraph (Scherso) - Locraw and Multithreading utilities", x + 20, y + 430, -1, 12, Fonts.REGULAR);
+
+ RenderManager.drawText(vg, "Terms Of Service & Licensing", x + 20, y + 517, -1, 24, Fonts.SEMIBOLD);
+ RenderManager.drawText(vg, " - License Summary goes here", x + 20, y + 540, -1, 12, Fonts.REGULAR);
RenderManager.drawImage(vg, "https://i.insider.com/602ee9ced3ad27001837f2ac?width=700", x + 600, y + 20, 350, 263);
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java
index 5892273..fd6e8fe 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/HomePage.java
@@ -42,10 +42,10 @@ public class HomePage extends Page {
public void draw(long vg, int x, int y) {
RenderManager.drawRoundedRect(vg, x, y, 184, 36, -1, 12f);
- RenderManager.drawString(vg, "This is a cool string to test pages", x + 32, y + 72, -1, 36f, Fonts.BOLD);
+ RenderManager.drawText(vg, "This is a cool string to test pages", x + 32, y + 72, -1, 36f, Fonts.BOLD);
RenderManager.drawRoundedRect(vg, x + 350, y + 310, 300, 200, OneConfigConfig.PRIMARY_600, 14f);
RenderManager.drawSvg(vg, SVGs.INFO_CIRCLE, x + 20, y + 604, 24, 24);
- RenderManager.drawString(vg, "Info", x + 52, y + 618, OneConfigConfig.WHITE_90, 24f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Info", x + 52, y + 618, OneConfigConfig.WHITE_90, 24f, Fonts.MEDIUM);
RenderManager.drawRoundedRect(vg, x + 16, y + 644, 1024, 64, OneConfigConfig.GRAY_700, 20f);
RenderManager.drawURL(vg, "https://www.youtube.com/watch?v=dQw4w9WgXcQ", x + 100, y + 205, 24, Fonts.MEDIUM);
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java
index 1f17c7d..67a1124 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/ModsPage.java
@@ -58,7 +58,7 @@ public class ModsPage extends Page {
}
size = iY + 119;
if (iX == x + 16 && iY == y + 72) {
- RenderManager.drawString(vg, "Looks like there is nothing here. Try another category?", x + 16, y + 72, OneConfigConfig.WHITE_60, 14f, Fonts.MEDIUM);
+ RenderManager.drawText(vg, "Looks like there is nothing here. Try another category?", x + 16, y + 72, OneConfigConfig.WHITE_60, 14f, Fonts.MEDIUM);
}
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/init/OneConfigInit.java b/src/main/java/cc/polyfrost/oneconfig/init/OneConfigInit.java
index 33b13d5..6e0bab3 100644
--- a/src/main/java/cc/polyfrost/oneconfig/init/OneConfigInit.java
+++ b/src/main/java/cc/polyfrost/oneconfig/init/OneConfigInit.java
@@ -10,6 +10,11 @@ import org.spongepowered.asm.mixin.Mixins;
*/
@SuppressWarnings("unused")
public class OneConfigInit {
+
+ /**
+ * Initializes the OneConfig mod.
+ * @param args The arguments passed to the mod.
+ */
public static void initialize(String[] args) {
Launch.blackboard.put("oneconfig.initialized", true);
MixinBootstrap.init();
diff --git a/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java b/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java
index 2215499..f366648 100644
--- a/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java
+++ b/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java
@@ -6,6 +6,7 @@ import cc.polyfrost.oneconfig.gui.OneConfigGui;
import cc.polyfrost.oneconfig.libs.universal.UGraphics;
import cc.polyfrost.oneconfig.libs.universal.UMinecraft;
import cc.polyfrost.oneconfig.libs.universal.UResolution;
+import cc.polyfrost.oneconfig.lwjgl.font.Font;
import cc.polyfrost.oneconfig.lwjgl.font.FontManager;
import cc.polyfrost.oneconfig.lwjgl.font.Fonts;
import cc.polyfrost.oneconfig.lwjgl.image.ImageLoader;
@@ -15,7 +16,8 @@ import cc.polyfrost.oneconfig.utils.InputUtils;
import cc.polyfrost.oneconfig.utils.NetworkUtils;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.shader.Framebuffer;
-import org.lwjgl.nanovg.*;
+import org.lwjgl.nanovg.NVGColor;
+import org.lwjgl.nanovg.NVGPaint;
import org.lwjgl.opengl.GL11;
import java.util.function.LongConsumer;
@@ -28,19 +30,19 @@ import static org.lwjgl.nanovg.NanoVGGL2.nvgCreate;
* Handles NanoVG rendering and wraps it in a more convenient interface.
*/
public final class RenderManager {
- private RenderManager() {
-
- }
+ private static long vg = -1;
//nanovg
- private static long vg = -1;
+ private RenderManager() {
+
+ }
/**
* Sets up rendering, calls the consumer with the NanoVG context, and then cleans up.
*
- * @see RenderManager#setupAndDraw(boolean, LongConsumer)
* @param consumer The consumer to call.
+ * @see RenderManager#setupAndDraw(boolean, LongConsumer)
*/
public static void setupAndDraw(LongConsumer consumer) {
setupAndDraw(false, consumer);
@@ -50,7 +52,7 @@ public final class RenderManager {
* Sets up rendering, calls the consumer with the NanoVG context, and then cleans up.
*
* @param mcScaling Whether to render with Minecraft's scaling.
- * @param consumer The consumer to call.
+ * @param consumer The consumer to call.
*/
public static void setupAndDraw(boolean mcScaling, LongConsumer consumer) {
if (vg == -1) {
@@ -85,12 +87,12 @@ public final class RenderManager {
/**
* Draws a rectangle with the given parameters.
*
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
* @param height The height.
- * @param color The color.
+ * @param color The color.
*/
public static void drawRectangle(long vg, float x, float y, float width, float height, int color) { // TODO make everything use this one day
if (OneConfigConfig.ROUNDED_CORNERS) {
@@ -101,72 +103,99 @@ public final class RenderManager {
}
/**
- * Draws a rounded gradient rectangle with the given parameters.
+ * Draws a rectangle with the given parameters.
*
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
* @param height The height.
- * @param color The first color of the gradient.
- * @param color2 The second color of the gradient.
- * @param radius The corner radius.
+ * @param color The color.
*/
- public static void drawGradientRoundedRect(long vg, float x, float y, float width, float height, int color, int color2, float radius) {
- NVGPaint bg = NVGPaint.create();
+ public static void drawRect(long vg, float x, float y, float width, float height, int color) {
nvgBeginPath(vg);
- nvgRoundedRect(vg, x, y, width, height, radius);
+ nvgRect(vg, x, y, width, height);
NVGColor nvgColor = color(vg, color);
- NVGColor nvgColor2 = color(vg, color2);
- nvgFillPaint(vg, nvgLinearGradient(vg, x, y, x + width, y, nvgColor, nvgColor2, bg));
nvgFill(vg);
nvgColor.free();
- nvgColor2.free();
}
/**
- * Draw a HSB box
+ * Draws a rounded rectangle with the given parameters.
*
- * @param vg The NanoVG context.
- * @param x The x coordinate.
- * @param y The y coordinate
- * @param width The width.
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
* @param height The height.
- * @param colorTarget Hue color
+ * @param color The color.
+ * @param radius The radius.
*/
- public static void drawHSBBox(long vg, float x, float y, float width, float height, int colorTarget) {
- drawRoundedRect(vg, x, y, width, height, colorTarget, 8f);
-
- NVGPaint bg = NVGPaint.create();
+ public static void drawRoundedRect(long vg, float x, float y, float width, float height, int color, float radius) {
nvgBeginPath(vg);
- nvgRoundedRect(vg, x, y, width, height, 8f);
- NVGColor nvgColor = color(vg, -1);
- NVGColor nvgColor2 = color(vg, OneConfigConfig.TRANSPARENT);
- nvgFillPaint(vg, nvgLinearGradient(vg, x, y, x + width, y, nvgColor, nvgColor2, bg));
+ nvgRoundedRect(vg, x, y, width, height, radius);
+ color(vg, color);
+ NVGColor nvgColor = color(vg, color);
nvgFill(vg);
nvgColor.free();
- nvgColor2.free();
+ }
- NVGPaint bg2 = NVGPaint.create();
+ /**
+ * Draw a rounded rectangle where every corner has a different radius
+ *
+ * @param vg The NanoVG context
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param height The height.
+ * @param color The color.
+ * @param radiusTL Top left corner radius.
+ * @param radiusTR Top right corner radius.
+ * @param radiusBR Bottom right corner radius.
+ * @param radiusBL Bottom left corner radius
+ */
+ public static void drawRoundedRectVaried(long vg, float x, float y, float width, float height, int color, float radiusTL, float radiusTR, float radiusBR, float radiusBL) {
nvgBeginPath(vg);
- nvgRoundedRect(vg, x, y, width, height, 8f);
- NVGColor nvgColor3 = color(vg, OneConfigConfig.TRANSPARENT);
- NVGColor nvgColor4 = color(vg, OneConfigConfig.BLACK);
- nvgFillPaint(vg, nvgLinearGradient(vg, x, y, x, y + height, nvgColor3, nvgColor4, bg2));
+ nvgRoundedRectVarying(vg, x, y, width, height, radiusTL, radiusTR, radiusBR, radiusBL);
+ color(vg, color);
+ NVGColor nvgColor = color(vg, color);
nvgFill(vg);
- nvgColor3.free();
- nvgColor4.free();
+ nvgColor.free();
+ }
+
+ /**
+ * Draws a hollow rounded rectangle with the given parameters.
+ *
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param height The height.
+ * @param color The color.
+ * @param radius The radius.
+ * @param thickness The thickness.
+ */
+ public static void drawHollowRoundRect(long vg, float x, float y, float width, float height, int color, float radius, float thickness) {
+ nvgBeginPath(vg);
+ nvgRoundedRect(vg, x + thickness, y + thickness, width - thickness, height - thickness, radius);
+ nvgStrokeWidth(vg, thickness + 0.5f);
+ nvgPathWinding(vg, NVG_HOLE);
+ color(vg, color);
+ NVGColor nvgColor = color(vg, color);
+ nvgStrokeColor(vg, nvgColor);
+ nvgStroke(vg);
+ nvgColor.free();
}
/**
* Draws a gradient rectangle with the given parameters.
*
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
* @param height The height.
- * @param color The first color of the gradient.
+ * @param color The first color of the gradient.
* @param color2 The second color of the gradient.
*/
public static void drawGradientRect(long vg, float x, float y, float width, float height, int color, int color2) {
@@ -183,125 +212,154 @@ public final class RenderManager {
}
/**
- * Draws a rectangle with the given parameters.
+ * Draws a rounded gradient rectangle with the given parameters.
*
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
* @param height The height.
- * @param color The color.
+ * @param color The first color of the gradient.
+ * @param color2 The second color of the gradient.
+ * @param radius The corner radius.
*/
- public static void drawRect(long vg, float x, float y, float width, float height, int color) {
+ public static void drawGradientRoundedRect(long vg, float x, float y, float width, float height, int color, int color2, float radius) {
+ NVGPaint bg = NVGPaint.create();
nvgBeginPath(vg);
- nvgRect(vg, x, y, width, height);
+ nvgRoundedRect(vg, x, y, width, height, radius);
NVGColor nvgColor = color(vg, color);
+ NVGColor nvgColor2 = color(vg, color2);
+ nvgFillPaint(vg, nvgLinearGradient(vg, x, y, x + width, y, nvgColor, nvgColor2, bg));
nvgFill(vg);
nvgColor.free();
+ nvgColor2.free();
}
/**
- * Draws a rounded rectangle with the given parameters.
+ * Draw a HSB box
*
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
- * @param color The color.
- * @param radius The radius.
+ * @param vg The NanoVG context.
+ * @param x The x coordinate.
+ * @param y The y coordinate
+ * @param width The width.
+ * @param height The height.
+ * @param colorTarget Hue color
*/
- public static void drawRoundedRect(long vg, float x, float y, float width, float height, int color, float radius) {
+ public static void drawHSBBox(long vg, float x, float y, float width, float height, int colorTarget) {
+ drawRoundedRect(vg, x, y, width, height, colorTarget, 8f);
+
+ NVGPaint bg = NVGPaint.create();
nvgBeginPath(vg);
- nvgRoundedRect(vg, x, y, width, height, radius);
- color(vg, color);
- NVGColor nvgColor = color(vg, color);
+ nvgRoundedRect(vg, x, y, width, height, 8f);
+ NVGColor nvgColor = color(vg, -1);
+ NVGColor nvgColor2 = color(vg, OneConfigConfig.TRANSPARENT);
+ nvgFillPaint(vg, nvgLinearGradient(vg, x, y, x + width, y, nvgColor, nvgColor2, bg));
nvgFill(vg);
nvgColor.free();
+ nvgColor2.free();
+
+ NVGPaint bg2 = NVGPaint.create();
+ nvgBeginPath(vg);
+ nvgRoundedRect(vg, x, y, width, height, 8f);
+ NVGColor nvgColor3 = color(vg, OneConfigConfig.TRANSPARENT);
+ NVGColor nvgColor4 = color(vg, OneConfigConfig.BLACK);
+ nvgFillPaint(vg, nvgLinearGradient(vg, x, y, x, y + height, nvgColor3, nvgColor4, bg2));
+ nvgFill(vg);
+ nvgColor3.free();
+ nvgColor4.free();
}
/**
- * Draw a rounded rectangle where every corner has a different radius
+ * Draws a circle with the given parameters.
*
- * @param vg The NanoVG context
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
- * @param color The color.
- * @param radiusTL Top left corner radius.
- * @param radiusTR Top right corner radius.
- * @param radiusBR Bottom right corner radius.
- * @param radiusBL Bottom left corner radius
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param radius The radius.
+ * @param color The color.
*/
- public static void drawRoundedRectVaried(long vg, float x, float y, float width, float height, int color, float radiusTL, float radiusTR, float radiusBR, float radiusBL) {
+ public static void drawCircle(long vg, float x, float y, float radius, int color) {
nvgBeginPath(vg);
- nvgRoundedRectVarying(vg, x, y, width, height, radiusTL, radiusTR, radiusBR, radiusBL);
- color(vg, color);
+ nvgCircle(vg, x, y, radius);
NVGColor nvgColor = color(vg, color);
nvgFill(vg);
nvgColor.free();
}
/**
- * Draws a hollow rounded rectangle with the given parameters.
+ * Draws a String with the given parameters.
*
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
+ * @param vg The NanoVG context.
+ * @param text The text.
+ * @param x The x position.
+ * @param y The y position.
* @param color The color.
- * @param radius The radius.
- * @param thickness The thickness.
+ * @param size The size.
+ * @param font The font.
+ * @see cc.polyfrost.oneconfig.lwjgl.font.Font
*/
- public static void drawHollowRoundRect(long vg, float x, float y, float width, float height, int color, float radius, float thickness) {
- nvgBeginPath(vg);
- nvgRoundedRect(vg, x + thickness, y + thickness, width - thickness, height - thickness, radius);
- nvgStrokeWidth(vg, thickness + 0.5f);
- nvgPathWinding(vg, NVG_HOLE);
- color(vg, color);
- NVGColor nvgColor = color(vg, color);
- nvgStrokeColor(vg, nvgColor);
- nvgStroke(vg);
- nvgColor.free();
+ public static void drawText(long vg, String text, float x, float y, int color, float size, Fonts font) {
+ drawText(vg, text, x, y, color, size, font.font);
}
/**
- * Draws a circle with the given parameters.
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param radius The radius.
+ * Draws a String with the given parameters.
+ *
+ * @param vg The NanoVG context.
+ * @param text The text.
+ * @param x The x position.
+ * @param y The y position.
* @param color The color.
+ * @param size The size.
+ * @param font The font.
+ * @see cc.polyfrost.oneconfig.lwjgl.font.Font
*/
- public static void drawCircle(long vg, float x, float y, float radius, int color) {
+ public static void drawText(long vg, String text, float x, float y, int color, float size, Font font) {
nvgBeginPath(vg);
- nvgCircle(vg, x, y, radius);
+ nvgFontSize(vg, size);
+ nvgFontFace(vg, font.getName());
+ nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
NVGColor nvgColor = color(vg, color);
+ nvgText(vg, x, y, text);
nvgFill(vg);
nvgColor.free();
}
/**
- * Draws a String with the given parameters.
- * @param vg The NanoVG context.
- * @param text The text.
- * @param x The x position.
- * @param y The y position.
+ * Draws a String wrapped at the given width, with the given parameters.
+ *
+ * @param vg The NanoVG context.
+ * @param text The text.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
* @param color The color.
- * @param size The size.
- * @param font The font.
+ * @param size The size.
+ * @param font The font.
+ */
+ public static void drawWrappedString(long vg, String text, float x, float y, float width, int color, float size, Fonts font) {
+ drawWrappedString(vg, text, x, y, width, color, size, font.font);
+ }
+
+ /**
+ * Draws a String wrapped at the given width, with the given parameters.
*
- * @see cc.polyfrost.oneconfig.lwjgl.font.Font
+ * @param vg The NanoVG context.
+ * @param text The text.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param color The color.
+ * @param size The size.
+ * @param font The font.
*/
- public static void drawString(long vg, String text, float x, float y, int color, float size, Fonts font) {
+ public static void drawWrappedString(long vg, String text, float x, float y, float width, int color, float size, Font font) {
nvgBeginPath(vg);
nvgFontSize(vg, size);
- nvgFontFace(vg, font.font.getName());
+ nvgFontFace(vg, font.getName());
nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
NVGColor nvgColor = color(vg, color);
- nvgText(vg, x, y, text);
+ nvgTextBox(vg, x, y, width, text);
nvgFill(vg);
nvgColor.free();
}
@@ -311,11 +369,23 @@ public final class RenderManager {
*
* <p><b>This does NOT scale to Minecraft's GUI scale!</b></p>
*
- * @see RenderManager#drawString(long, String, float, float, int, float, Fonts)
+ * @see RenderManager#drawText(long, String, float, float, int, float, Font)
* @see InputUtils#isAreaClicked(int, int, int, int)
*/
public static void drawURL(long vg, String url, float x, float y, float size, Fonts font) {
- drawString(vg, url, x, y, OneConfigConfig.PRIMARY_500, size, font);
+ drawURL(vg, url, x, y, size, font.font);
+ }
+
+ /**
+ * Draw a formatted URL (a string in blue with an underline) that when clicked, opens the given text.
+ *
+ * <p><b>This does NOT scale to Minecraft's GUI scale!</b></p>
+ *
+ * @see RenderManager#drawText(long, String, float, float, int, float, Font)
+ * @see InputUtils#isAreaClicked(int, int, int, int)
+ */
+ public static void drawURL(long vg, String url, float x, float y, float size, Font font) {
+ drawText(vg, url, x, y, OneConfigConfig.PRIMARY_500, size, font);
float length = getTextWidth(vg, url, size, font);
drawRectangle(vg, x, y + size / 2, length, 1, OneConfigConfig.PRIMARY_500);
if (InputUtils.isAreaClicked((int) (x - 2), (int) (y - 1), (int) (length + 4), (int) (size / 2 + 3))) {
@@ -324,36 +394,14 @@ public final class RenderManager {
}
/**
- * Draws a String wrapped at the given width, with the given parameters.
- * @param vg The NanoVG context.
- * @param text The text.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param color The color.
- * @param size The size.
- * @param font The font.
- */
- public static void drawWrappedString(long vg, String text, float x, float y, float width, int color, float size, Fonts font) {
- nvgBeginPath(vg);
- nvgFontSize(vg, size);
- nvgFontFace(vg, font.font.getName());
- nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
- NVGColor nvgColor = color(vg, color);
- nvgTextBox(vg, x, y, width, text);
- nvgFill(vg);
- nvgColor.free();
- }
-
- /**
* Draws an image with the provided file path.
- * @param vg The NanoVG context.
- * @param filePath The file path.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
*
+ * @param vg The NanoVG context.
+ * @param filePath The file path.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param height The height.
* @see RenderManager#drawImage(long, String, float, float, float, float, int)
*/
public static void drawImage(long vg, String filePath, float x, float y, float width, float height) {
@@ -371,13 +419,14 @@ public final class RenderManager {
/**
* Draws an image with the provided file path.
- * @param vg The NanoVG context.
+ *
+ * @param vg The NanoVG context.
* @param filePath The file path.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
- * @param color The color.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param height The height.
+ * @param color The color.
*/
public static void drawImage(long vg, String filePath, float x, float y, float width, float height, int color) {
if (ImageLoader.INSTANCE.loadImage(vg, filePath)) {
@@ -394,14 +443,33 @@ public final class RenderManager {
}
/**
+ * Draws an image with the provided file path and parameters.
+ *
+ * @see RenderManager#drawImage(long, String, float, float, float, float)
+ */
+ public static void drawImage(long vg, Images filePath, float x, float y, float width, float height) {
+ drawImage(vg, filePath.filePath, x, y, width, height);
+ }
+
+ /**
+ * Draws an image with the provided file path and parameters.
+ *
+ * @see RenderManager#drawImage(long, String, float, float, float, float, int)
+ */
+ public static void drawImage(long vg, Images filePath, float x, float y, float width, float height, int color) {
+ drawImage(vg, filePath.filePath, x, y, width, height, color);
+ }
+
+ /**
* Draws a rounded image with the provided file path and parameters.
- * @param vg The NanoVG context.
+ *
+ * @param vg The NanoVG context.
* @param filePath The file path.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
- * @param radius The radius.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param height The height.
+ * @param radius The radius.
*/
public static void drawRoundImage(long vg, String filePath, float x, float y, float width, float height, float radius) {
if (ImageLoader.INSTANCE.loadImage(vg, filePath)) {
@@ -425,46 +493,34 @@ public final class RenderManager {
drawRoundImage(vg, filePath.filePath, x, y, width, height, radius);
}
- /**
- * Draws an image with the provided file path and parameters.
- *
- * @see RenderManager#drawImage(long, String, float, float, float, float)
- */
- public static void drawImage(long vg, Images filePath, float x, float y, float width, float height) {
- drawImage(vg, filePath.filePath, x, y, width, height);
- }
-
- /**
- * Draws an image with the provided file path and parameters.
- *
- * @see RenderManager#drawImage(long, String, float, float, float, float, int)
- */
- public static void drawImage(long vg, Images filePath, float x, float y, float width, float height, int color) {
- drawImage(vg, filePath.filePath, x, y, width, height, color);
+ public static float getTextWidth(long vg, String text, float fontSize, Fonts font) {
+ return getTextWidth(vg, text, fontSize, font.font);
}
/**
* Get the width of the provided String.
- * @param vg The NanoVG context.
- * @param text The text.
+ *
+ * @param vg The NanoVG context.
+ * @param text The text.
* @param fontSize The font size.
- * @param font The font.
+ * @param font The font.
* @return The width of the text.
*/
- public static float getTextWidth(long vg, String text, float fontSize, Fonts font) {
+ public static float getTextWidth(long vg, String text, float fontSize, Font font) {
float[] bounds = new float[4];
nvgFontSize(vg, fontSize);
- nvgFontFace(vg, font.font.getName());
+ nvgFontFace(vg, font.getName());
return nvgTextBounds(vg, 0, 0, text, bounds);
}
/**
* Draws a line with the provided parameters.
- * @param vg The NanoVG context.
- * @param x The x position.
- * @param y The y position.
- * @param endX The end x position.
- * @param endY The end y position.
+ *
+ * @param vg The NanoVG context.
+ * @param x The x position.
+ * @param y The y position.
+ * @param endX The end x position.
+ * @param endY The end y position.
* @param width The width.
* @param color The color.
*/
@@ -484,43 +540,27 @@ public final class RenderManager {
*
* <a href="https://github.com/SpinyOwl/legui/blob/develop/LICENSE">Adapted from legui under MIT license</a>
*
- * @param vg The NanoVG context.
- * @param x The x coordinate.
- * @param y The y coordinate.
- * @param w The width.
- * @param h The height.
- * @param blur The blur (feather).
- * @param spread The spread.
+ * @param vg The NanoVG context.
+ * @param x The x coordinate.
+ * @param y The y coordinate.
+ * @param w The width.
+ * @param h The height.
+ * @param blur The blur (feather).
+ * @param spread The spread.
* @param cornerRadius The radius of the corner
*/
public static void drawDropShadow(long vg, float x, float y, float w, float h, float blur, float spread, float cornerRadius) {
- try (
- NVGPaint shadowPaint = NVGPaint.calloc(); // allocating memory to pass color to nanovg wrapper
- NVGColor firstColor = NVGColor.calloc(); // allocating memory to pass color to nanovg wrapper
- NVGColor secondColor = NVGColor.calloc() // allocating memory to pass color to nanovg wrapper
+ try (NVGPaint shadowPaint = NVGPaint.calloc(); // allocating memory to pass color to nanovg wrapper
+ NVGColor firstColor = NVGColor.calloc(); // allocating memory to pass color to nanovg wrapper
+ NVGColor secondColor = NVGColor.calloc() // allocating memory to pass color to nanovg wrapper
) {
- fillNvgColorWithRGBA(0, 0, 0, 0.5f, firstColor); // filling allocated memory
- fillNvgColorWithRGBA(0, 0, 0, 0, secondColor); // filling allocated memory
+ fillNVGColorWithRGBA(0, 0, 0, 0.5f, firstColor); // filling allocated memory
+ fillNVGColorWithRGBA(0, 0, 0, 0, secondColor); // filling allocated memory
// creating gradient and put it to shadowPaint
- nvgBoxGradient(vg,
- x - spread,
- y - spread,
- w + 2 * spread,
- h + 2 * spread,
- cornerRadius + spread,
- blur,
- firstColor,
- secondColor,
- shadowPaint);
+ nvgBoxGradient(vg, x - spread, y - spread, w + 2 * spread, h + 2 * spread, cornerRadius + spread, blur, firstColor, secondColor, shadowPaint);
nvgBeginPath(vg);
- nvgRoundedRect(vg,
- x - spread - blur,
- y - spread - blur,
- w + 2 * spread + 2 * blur,
- h + 2 * spread + 2 * blur,
- cornerRadius + spread
- );
+ nvgRoundedRect(vg, x - spread - blur, y - spread - blur, w + 2 * spread + 2 * blur, h + 2 * spread + 2 * blur, cornerRadius + spread);
nvgRoundedRect(vg, x, y, w, h, cornerRadius);
nvgPathWinding(vg, NVG_HOLE);
nvgFillPaint(vg, shadowPaint);
@@ -530,13 +570,14 @@ public final class RenderManager {
/**
* Fills the provided {@link NVGColor} with the provided RGBA values.
- * @param r The red value.
- * @param g The green value.
- * @param b The blue value.
- * @param a The alpha value.
+ *
+ * @param r The red value.
+ * @param g The green value.
+ * @param b The blue value.
+ * @param a The alpha value.
* @param color The {@link NVGColor} to fill.
*/
- public static void fillNvgColorWithRGBA(float r, float g, float b, float a, NVGColor color) {
+ public static void fillNVGColorWithRGBA(float r, float g, float b, float a, NVGColor color) {
color.r(r);
color.g(g);
color.b(b);
@@ -546,7 +587,7 @@ public final class RenderManager {
/**
* Create a {@link NVGColor} from the provided RGBA values.
*
- * @param vg The NanoVG context.
+ * @param vg The NanoVG context.
* @param color The color.
* @return The {@link NVGColor} created.
*/
@@ -559,9 +600,10 @@ public final class RenderManager {
/**
* Scales all rendering by the provided scale.
+ *
* @param vg The NanoVG context.
- * @param x The x scale.
- * @param y The y scale.
+ * @param x The x scale.
+ * @param y The y scale.
*/
public static void scale(long vg, float x, float y) {
nvgScale(vg, x, y);
@@ -570,7 +612,7 @@ public final class RenderManager {
/**
* Sets the global alpha value to render with.
*
- * @param vg The NanoVG context.
+ * @param vg The NanoVG context.
* @param alpha The alpha value.
*/
public static void setAlpha(long vg, float alpha) {
@@ -580,12 +622,12 @@ public final class RenderManager {
/**
* Draws a SVG with the provided file path and parameters.
*
- * @param vg The NanoVG context.
+ * @param vg The NanoVG context.
* @param filePath The file path.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param height The height.
*/
public static void drawSvg(long vg, String filePath, float x, float y, float width, float height) {
float w = width;
@@ -609,13 +651,13 @@ public final class RenderManager {
/**
* Draws a SVG with the provided file path and parameters.
*
- * @param vg The NanoVG context.
+ * @param vg The NanoVG context.
* @param filePath The file path.
- * @param x The x position.
- * @param y The y position.
- * @param width The width.
- * @param height The height.
- * @param color The color.
+ * @param x The x position.
+ * @param y The y position.
+ * @param width The width.
+ * @param height The height.
+ * @param color The color.
*/
public static void drawSvg(long vg, String filePath, float x, float y, float width, float height, int color) {
float w = width;
@@ -658,10 +700,10 @@ public final class RenderManager {
/**
* Draw a circle with an info icon inside of it
*
- * @param vg The NanoVG context.
+ * @param vg The NanoVG context.
* @param type The icon type.
- * @param x The x position.
- * @param y The y position.
+ * @param x The x position.
+ * @param y The y position.
* @param size The diameter.
*/
public static void drawInfo(long vg, InfoType type, float x, float y, float size) {
diff --git a/src/main/java/cc/polyfrost/oneconfig/test/TestCommand.java b/src/main/java/cc/polyfrost/oneconfig/test/TestCommand_Test.java
index 753c353..d8c37f0 100644
--- a/src/main/java/cc/polyfrost/oneconfig/test/TestCommand.java
+++ b/src/main/java/cc/polyfrost/oneconfig/test/TestCommand_Test.java
@@ -7,7 +7,7 @@ import cc.polyfrost.oneconfig.utils.commands.annotations.Name;
import cc.polyfrost.oneconfig.utils.commands.annotations.SubCommand;
@Command(value = "test", aliases = {"t"})
-public class TestCommand {
+public class TestCommand_Test {
@Main
private static void main() { // /test
diff --git a/src/main/java/cc/polyfrost/oneconfig/test/TestNanoVGGui.java b/src/main/java/cc/polyfrost/oneconfig/test/TestNanoVGGui_Test.java
index b309429..f6ad3f5 100644
--- a/src/main/java/cc/polyfrost/oneconfig/test/TestNanoVGGui.java
+++ b/src/main/java/cc/polyfrost/oneconfig/test/TestNanoVGGui_Test.java
@@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull;
import java.awt.*;
-public class TestNanoVGGui extends UScreen {
+public class TestNanoVGGui_Test extends UScreen {
@Override
public void onDrawScreen(@NotNull UMatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
@@ -18,10 +18,10 @@ public class TestNanoVGGui extends UScreen {
RenderManager.setupAndDraw((vg) -> {
RenderManager.drawRect(vg, 0, 0, 100, 100, Color.BLUE.getRGB());
RenderManager.drawRoundedRect(vg, 305, 305, 100, 100, Color.YELLOW.getRGB(), 8);
- RenderManager.drawString(vg, "Hello!", 100, 100, Color.WHITE.getRGB(), 50, Fonts.BOLD);
+ RenderManager.drawText(vg, "Hello!", 100, 100, Color.WHITE.getRGB(), 50, Fonts.BOLD);
RenderManager.drawLine(vg, 0, 0, 100, 100, 7, Color.PINK.getRGB());
RenderManager.drawCircle(vg, 200, 200, 50, Color.WHITE.getRGB());
- RenderManager.drawString(vg, (float) (System.nanoTime() - startTime) / 1000000f + "ms", 500, 500, Color.WHITE.getRGB(), 100, Fonts.BOLD);
+ RenderManager.drawText(vg, (float) (System.nanoTime() - startTime) / 1000000f + "ms", 500, 500, Color.WHITE.getRGB(), 100, Fonts.BOLD);
});
}
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/test/package-info.java b/src/main/java/cc/polyfrost/oneconfig/test/package-info.java
new file mode 100644
index 0000000..ef38b37
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/test/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * Test package for the OneConfig library.
+ * Classes in this package that end with {@code _Test} are excluded from actual builds.
+ */
+package cc.polyfrost.oneconfig.test; \ No newline at end of file
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/MathUtils.java b/src/main/java/cc/polyfrost/oneconfig/utils/MathUtils.java
index 19d399f..79634da 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/MathUtils.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/MathUtils.java
@@ -4,7 +4,7 @@ import cc.polyfrost.oneconfig.gui.OneConfigGui;
public final class MathUtils {
public static float clamp(float number) {
- return number < 0f ? 0f : Math.min(number, 1f);
+ return clamp(number, 0, 1);
}
public static float clamp(float number, float min, float max) {
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/TextUtils.java b/src/main/java/cc/polyfrost/oneconfig/utils/TextUtils.java
index f9f0fbd..4fa5125 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/TextUtils.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/TextUtils.java
@@ -1,6 +1,7 @@
package cc.polyfrost.oneconfig.utils;
import cc.polyfrost.oneconfig.lwjgl.RenderManager;
+import cc.polyfrost.oneconfig.lwjgl.font.Font;
import cc.polyfrost.oneconfig.lwjgl.font.Fonts;
import java.util.ArrayList;
@@ -20,6 +21,19 @@ public final class TextUtils {
* @return The array of lines.
*/
public static ArrayList<String> wrapText(long vg, String text, float maxWidth, float fontSize, Fonts font) {
+ return wrapText(vg, text, maxWidth, fontSize, font.font);
+ }
+
+ /**
+ * Wraps a string into an array of lines.
+ * @param vg The NanoVG context.
+ * @param text The text to wrap.
+ * @param maxWidth The maximum width of each line.
+ * @param fontSize The font size.
+ * @param font The font to use.
+ * @return The array of lines.
+ */
+ public static ArrayList<String> wrapText(long vg, String text, float maxWidth, float fontSize, Font font) {
ArrayList<String> wrappedText = new ArrayList<>();
text += " ";
int prevIndex = 0;
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandHelper.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandHelper.java
index bc57fc2..3e7b7ea 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandHelper.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandHelper.java
@@ -10,7 +10,7 @@ package cc.polyfrost.oneconfig.utils.commands;
public abstract class CommandHelper {
public CommandHelper() {
- CommandManager.registerCommand(this);
+ CommandManager.INSTANCE.registerCommand(this);
}
public void preload() {
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandManager.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandManager.java
index a4e2569..f168b8f 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandManager.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/CommandManager.java
@@ -21,17 +21,30 @@ import java.util.stream.Collectors;
* @see Command
*/
public class CommandManager {
- private static final HashMap<Class<?>, ArgumentParser<?>> parsers = new HashMap<>();
+ public static final CommandManager INSTANCE = new CommandManager();
+ private final HashMap<Class<?>, ArgumentParser<?>> parsers = new HashMap<>();
private static final String NOT_FOUND_TEXT = "Command not found! Type /@ROOT_COMMAND@ help for help.";
private static final String METHOD_RUN_ERROR = "Error while running @ROOT_COMMAND@ method! Please report this to the developer.";
+ private CommandManager() {
+ addParser(new StringParser());
+ addParser(new IntegerParser());
+ addParser(new IntegerParser(), int.class);
+ addParser(new DoubleParser());
+ addParser(new DoubleParser(), double.class);
+ addParser(new FloatParser());
+ addParser(new FloatParser(), float.class);
+ addParser(new BooleanParser());
+ addParser(new BooleanParser(), boolean.class);
+ }
+
/**
* Adds a parser to the parsers map.
*
* @param parser The parser to add.
* @param clazz The class of the parser.
*/
- public static void addParser(ArgumentParser<?> parser, Class<?> clazz) {
+ public void addParser(ArgumentParser<?> parser, Class<?> clazz) {
parsers.put(clazz, parser);
}
@@ -39,28 +52,16 @@ public class CommandManager {
* Adds a parser to the parsers map.
* @param parser The parser to add.
*/
- public static void addParser(ArgumentParser<?> parser) {
+ public void addParser(ArgumentParser<?> parser) {
addParser(parser, parser.typeClass);
}
- static {
- addParser(new StringParser());
- addParser(new IntegerParser());
- addParser(new IntegerParser(), int.class);
- addParser(new DoubleParser());
- addParser(new DoubleParser(), double.class);
- addParser(new FloatParser());
- addParser(new FloatParser(), float.class);
- addParser(new BooleanParser());
- addParser(new BooleanParser(), boolean.class);
- }
-
/**
* Registers the provided command.
*
* @param command The command to register.
*/
- public static void registerCommand(Object command) {
+ public void registerCommand(Object command) {
Class<?> clazz = command.getClass();
if (clazz.isAnnotationPresent(Command.class)) {
final Command annotation = clazz.getAnnotation(Command.class);
@@ -122,7 +123,7 @@ public class CommandManager {
}
}
- private static String sendHelpCommand(InternalCommand root) {
+ private String sendHelpCommand(InternalCommand root) {
StringBuilder builder = new StringBuilder();
builder.append(ChatColor.GOLD.toString() + "Help for " + ChatColor.BOLD + root.name + ChatColor.RESET + ChatColor.GOLD + ":\n");
builder.append("\n");
@@ -139,7 +140,7 @@ public class CommandManager {
return builder.toString();
}
- private static void runThroughCommandsHelp(String append, InternalCommand command, StringBuilder builder) {
+ private void runThroughCommandsHelp(String append, InternalCommand command, StringBuilder builder) {
for (InternalCommand.InternalCommandInvoker invoker : command.invokers) {
builder.append("\n" + ChatColor.GOLD + "/" + append + " " + command.name);
for (Parameter parameter : invoker.method.getParameters()) {
@@ -158,7 +159,7 @@ public class CommandManager {
}
}
- private static String runThroughCommands(InternalCommand command, int layer, String[] args) {
+ private String runThroughCommands(InternalCommand command, int layer, String[] args) {
int newLayer = layer + 1;
if (command.isEqual(args[layer]) && !command.invokers.isEmpty()) {
Set<InternalCommand.InternalCommandInvoker> invokers = command.invokers.stream().filter(invoker -> newLayer == args.length - invoker.parameterTypes.length).sorted(Comparator.comparingInt((a) -> a.method.getAnnotation(Main.class).priority())).collect(Collectors.toSet());
@@ -189,7 +190,7 @@ public class CommandManager {
return NOT_FOUND_TEXT;
}
- private static String tryInvoker(InternalCommand.InternalCommandInvoker invoker, int newLayer, String[] args) {
+ private String tryInvoker(InternalCommand.InternalCommandInvoker invoker, int newLayer, String[] args) {
try {
ArrayList<Object> params = new ArrayList<>();
int processed = newLayer;
@@ -228,7 +229,7 @@ public class CommandManager {
}
}
- private static void addToInvokers(Class<?>[] classes, InternalCommand parent) {
+ private void addToInvokers(Class<?>[] classes, InternalCommand parent) {
for (Class<?> clazz : classes) {
if (clazz.isAnnotationPresent(SubCommand.class)) {
SubCommand annotation = clazz.getAnnotation(SubCommand.class);
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/commands/annotations/Command.java b/src/main/java/cc/polyfrost/oneconfig/utils/commands/annotations/Command.java
index 7717d46..b1a4ce5 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/commands/annotations/Command.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/commands/annotations/Command.java
@@ -80,7 +80,7 @@ import java.lang.annotation.Target;
* Note: if you're viewing this in IntelliJ or just see the @literal tag everywhere, please ignore that.
* </p>
*
- * @see cc.polyfrost.oneconfig.test.TestCommand
+ * @see cc.polyfrost.oneconfig.command.OneConfigCommand
* @see Main
* @see CommandManager
*/
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/ColorUtilsDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/ColorUtilsDSL.kt
new file mode 100644
index 0000000..fbcf32a
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/ColorUtilsDSL.kt
@@ -0,0 +1,67 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.config.core.OneColor
+import cc.polyfrost.oneconfig.utils.ColorUtils
+
+/**
+ * Creates a new [OneColor] from the given RGBA integer.
+ *
+ * @see OneColor
+ */
+fun Int.toColor() = OneColor(this)
+
+/**
+ * Get the red component of the given RGBA value.
+ *
+ * @see ColorUtils.getRed
+ */
+fun Int.getRed() = ColorUtils.getRed(this)
+
+/**
+ * Get the green component of the given RGBA value.
+ *
+ * @see ColorUtils.getGreen
+ */
+fun Int.getGreen() = ColorUtils.getGreen(this)
+
+/**
+ * Get the blue component of the given RGBA value.
+ *
+ * @see ColorUtils.getBlue
+ */
+fun Int.getBlue() = ColorUtils.getBlue(this)
+
+/**
+ * Get the alpha component of the given RGBA value.
+ *
+ * @see ColorUtils.getAlpha
+ */
+fun Int.getAlpha() = ColorUtils.getAlpha(this)
+
+/**
+ * Return the color with the given red component.
+ *
+ * @see ColorUtils.setRed
+ */
+fun Int.setRed(red: Int) = ColorUtils.setRed(this, red)
+
+/**
+ * Return the color with the given green component.
+ *
+ * @see ColorUtils.setGreen
+ */
+fun Int.setGreen(green: Int) = ColorUtils.setGreen(this, green)
+
+/**
+ * Return the color with the given blue component.
+ *
+ * @see ColorUtils.setBlue
+ */
+fun Int.setBlue(blue: Int) = ColorUtils.setBlue(this, blue)
+
+/**
+ * Return the color with the given alpha component.
+ *
+ * @see ColorUtils.setAlpha
+ */
+fun Int.setAlpha(alpha: Int) = ColorUtils.setAlpha(this, alpha) \ No newline at end of file
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/GuiUtilsDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/GuiUtilsDSL.kt
new file mode 100644
index 0000000..704ad2b
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/GuiUtilsDSL.kt
@@ -0,0 +1,11 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.utils.GuiUtils
+import net.minecraft.client.gui.GuiScreen
+
+/**
+ * Displays the provided screen after a tick, preventing mouse sync issues.
+ *
+ * @see GuiUtils.displayScreen
+ */
+fun GuiScreen.openScreen() = GuiUtils.displayScreen(this) \ No newline at end of file
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/JsonUtilsDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/JsonUtilsDSL.kt
new file mode 100644
index 0000000..43e0927
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/JsonUtilsDSL.kt
@@ -0,0 +1,11 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.utils.JsonUtils
+import com.google.gson.JsonElement
+
+/**
+ * Returns the [JsonElement] of the given [String].
+ *
+ * @see JsonUtils.parseString
+ */
+fun String.asJsonElement(catchExceptions: Boolean = true): JsonElement? = JsonUtils.parseString(this, catchExceptions) \ No newline at end of file
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MathUtilsDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MathUtilsDSL.kt
new file mode 100644
index 0000000..79afee0
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MathUtilsDSL.kt
@@ -0,0 +1,8 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.utils.MathUtils
+
+/**
+ * @see MathUtils.clamp
+ */
+fun Number.clamp(min: Number = 0F, max: Number = 1F) = MathUtils.clamp(this.toFloat(), min.toFloat(), max.toFloat()) \ No newline at end of file
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MultithreadingDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MultithreadingDSL.kt
new file mode 100644
index 0000000..101bb1f
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/MultithreadingDSL.kt
@@ -0,0 +1,18 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.utils.Multithreading
+import java.util.concurrent.TimeUnit
+
+/**
+ * Runs the given [block] asynchronously.
+ *
+ * @see Multithreading.runAsync
+ */
+fun runAsync(block: () -> Unit) = Multithreading.runAsync(block)
+
+/**
+ * Runs the given [block] asynchronously after the given [delay].
+ *
+ * @see Multithreading.schedule
+ */
+fun schedule(delay: Long, timeUnit: TimeUnit, block: () -> Unit) = Multithreading.schedule(block, delay, timeUnit) \ No newline at end of file
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/NetworkUtilsDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/NetworkUtilsDSL.kt
new file mode 100644
index 0000000..3265993
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/NetworkUtilsDSL.kt
@@ -0,0 +1,28 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.libs.universal.UDesktop
+import cc.polyfrost.oneconfig.utils.NetworkUtils
+import java.io.File
+
+/**
+ * Returns the SHA-256 hash of the given [File].
+ *
+ * @see NetworkUtils.getFileChecksum
+ */
+fun File.checksum() = NetworkUtils.getFileChecksum(this)
+
+/**
+ * Downloads the given [url] to the given [File].
+ *
+ * @see NetworkUtils.downloadFile
+ */
+fun File.download(url: String, userAgent: String = "OneConfig/1.0.0", timeout: Int = 5000, useCaches: Boolean = false) =
+ NetworkUtils.downloadFile(url, this, userAgent, timeout, useCaches)
+
+/**
+ * Launches a URL in the default browser.
+ *
+ * @see NetworkUtils.browseLink
+ */
+@Suppress("unused")
+fun UDesktop.browseLink(uri: String) = NetworkUtils.browseLink(uri) \ No newline at end of file
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/RenderManagerDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/RenderManagerDSL.kt
new file mode 100644
index 0000000..cbdf07e
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/RenderManagerDSL.kt
@@ -0,0 +1,265 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.config.data.InfoType
+import cc.polyfrost.oneconfig.lwjgl.RenderManager
+import cc.polyfrost.oneconfig.lwjgl.font.Font
+import cc.polyfrost.oneconfig.lwjgl.image.Images
+import cc.polyfrost.oneconfig.lwjgl.image.SVGs
+import cc.polyfrost.oneconfig.utils.ColorUtils
+import org.lwjgl.nanovg.NVGColor
+
+/**
+ * Wrapper for a NanoVG instance.
+ * @see nanoVG
+ * @see RenderManager
+ */
+data class VG(val instance: Long)
+
+/**
+ * Sets up rendering, calls the block with the NanoVG instance, and then cleans up.
+ *
+ * To start, call this method.
+ * ```kt
+ * nanoVG {
+ * // Do stuff with the NanoVG instance
+ * }
+ * ```
+ * From there, you can use the passed [VG] object to draw things. For example...
+ * ```kt
+ * nanoVG {
+ * drawRect(1, 1, 100, 100, Color.RED.rgb)
+ * drawText("Hello, world!", 10, 10, Color.BLACK.rgb, 9, Fonts.BOLD)
+ * }
+ * ```
+ * You can also set the [mcScaling] parameter to true to scale the NanoVG instance to match the Minecraft GUI scale.
+ *
+ * @param mcScaling Whether to scale the NanoVG instance to match the Minecraft GUI scale.
+ * @param block The block to run.
+ */
+fun nanoVG(mcScaling: Boolean = false, block: VG.() -> Unit) = RenderManager.setupAndDraw(mcScaling) {
+ block.invoke(
+ VG(it)
+ )
+}
+
+
+fun Long.drawRect(x: Number, y: Number, width: Number, height: Number, color: Int, bypassOneConfig: Boolean = false) =
+ if (bypassOneConfig) {
+ RenderManager.drawRect(this, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color)
+ } else {
+ RenderManager.drawRect(this, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color)
+ }
+
+fun VG.drawRect(x: Number, y: Number, width: Number, height: Number, color: Int, bypassOneConfig: Boolean = false) =
+ instance.drawRect(x, y, width, height, color, bypassOneConfig)
+
+fun Long.drawRoundedRect(x: Number, y: Number, width: Number, height: Number, radius: Number, color: Int) =
+ RenderManager.drawRoundedRect(
+ this, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color, radius.toFloat()
+ )
+
+fun VG.drawRoundedRect(x: Number, y: Number, width: Number, height: Number, radius: Number, color: Int) =
+ instance.drawRoundedRect(x, y, width, height, radius, color)
+
+fun Long.drawHollowRoundedRect(
+ x: Number, y: Number, width: Number, height: Number, radius: Number, color: Int, thickness: Number
+) = RenderManager.drawHollowRoundRect(
+ this, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color, radius.toFloat(), thickness.toFloat()
+)
+
+fun VG.drawHollowRoundedRect(
+ x: Number, y: Number, width: Number, height: Number, radius: Number, color: Int, thickness: Number
+) = instance.drawHollowRoundedRect(x, y, width, height, radius, color, thickness)
+
+fun Long.drawRoundedRectVaried(
+ x: Number,
+ y: Number,
+ width: Number,
+ height: Number,
+ color: Int,
+ radiusTL: Number,
+ radiusTR: Number,
+ radiusBR: Number,
+ radiusBL: Number
+) = RenderManager.drawRoundedRectVaried(
+ this,
+ x.toFloat(),
+ y.toFloat(),
+ width.toFloat(),
+ height.toFloat(),
+ color,
+ radiusTL.toFloat(),
+ radiusTR.toFloat(),
+ radiusBR.toFloat(),
+ radiusBL.toFloat()
+)
+
+fun VG.drawRoundedRectVaried(
+ x: Number,
+ y: Number,
+ width: Number,
+ height: Number,
+ color: Int,
+ radiusTL: Number,
+ radiusTR: Number,
+ radiusBR: Number,
+ radiusBL: Number
+) = instance.drawRoundedRectVaried(x, y, width, height, color, radiusTL, radiusTR, radiusBR, radiusBL)
+
+fun Long.drawGradientRect(x: Number, y: Number, width: Number, height: Number, color1: Int, color2: Int) =
+ RenderManager.drawGradientRect(this, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color1, color2)
+
+fun VG.drawGradientRect(x: Number, y: Number, width: Number, height: Number, color1: Int, color2: Int) =
+ instance.drawGradientRect(x, y, width, height, color1, color2)
+
+fun Long.drawGradientRoundedRect(
+ x: Number, y: Number, width: Number, height: Number, color: Int, color2: Int, radius: Number
+) = RenderManager.drawGradientRoundedRect(
+ this, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color, color2, radius.toFloat()
+)
+
+fun VG.drawGradientRoundedRect(
+ x: Number, y: Number, width: Number, height: Number, color: Int, color2: Int, radius: Number
+) = instance.drawGradientRoundedRect(x, y, width, height, color, color2, radius)
+
+
+fun Long.drawCircle(x: Number, y: Number, radius: Number, color: Int) =
+ RenderManager.drawCircle(this, x.toFloat(), y.toFloat(), radius.toFloat(), color)
+
+fun VG.drawCircle(x: Number, y: Number, radius: Number, color: Int) = instance.drawCircle(x, y, radius, color)
+
+
+fun Long.drawText(text: String, x: Number, y: Number, color: Int, size: Number, font: Font) =
+ RenderManager.drawText(this, text, x.toFloat(), y.toFloat(), color, size.toFloat(), font)
+
+fun VG.drawText(text: String, x: Number, y: Number, color: Int, size: Number, font: Font) =
+ instance.drawText(text, x, y, color, size, font)
+
+fun Long.drawWrappedString(text: String, x: Number, y: Number, width: Number, color: Int, size: Number, font: Font) =
+ RenderManager.drawWrappedString(this, text, x.toFloat(), y.toFloat(), width.toFloat(), color, size.toFloat(), font)
+
+fun VG.drawWrappedString(text: String, x: Number, y: Number, width: Number, color: Int, size: Number, font: Font) =
+ instance.drawWrappedString(text, x, y, width, color, size, font)
+
+fun Long.drawURL(url: String, x: Number, y: Number, size: Number, font: Font) =
+ RenderManager.drawURL(this, url, x.toFloat(), y.toFloat(), size.toFloat(), font)
+
+fun VG.drawURL(url: String, x: Number, y: Number, size: Number, font: Font) = instance.drawURL(url, x, y, size, font)
+
+
+fun Long.drawImage(filePath: String, x: Number, y: Number, width: Number, height: Number) =
+ RenderManager.drawImage(this, filePath, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat())
+
+fun VG.drawImage(filePath: String, x: Number, y: Number, width: Number, height: Number) =
+ instance.drawImage(filePath, x, y, width, height)
+
+fun Long.drawImage(filePath: String, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ RenderManager.drawImage(this, filePath, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color)
+
+fun VG.drawImage(filePath: String, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ instance.drawImage(filePath, x, y, width, height, color)
+
+fun Long.drawImage(image: Images, x: Number, y: Number, width: Number, height: Number) =
+ RenderManager.drawImage(this, image, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat())
+
+fun VG.drawImage(image: Images, x: Number, y: Number, width: Number, height: Number) =
+ instance.drawImage(image, x, y, width, height)
+
+fun Long.drawImage(image: Images, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ RenderManager.drawImage(this, image, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color)
+
+fun VG.drawImage(image: Images, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ instance.drawImage(image, x, y, width, height, color)
+
+
+fun Long.drawRoundedImage(filePath: String, x: Number, y: Number, width: Number, height: Number, radius: Number) =
+ RenderManager.drawRoundImage(
+ this, filePath, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), radius.toFloat()
+ )
+
+fun VG.drawRoundedImage(filePath: String, x: Number, y: Number, width: Number, height: Number, radius: Number) =
+ instance.drawRoundedImage(filePath, x, y, width, height, radius)
+
+fun Long.drawRoundedImage(image: Images, x: Number, y: Number, width: Number, height: Number, radius: Number) =
+ RenderManager.drawRoundImage(
+ this, image, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), radius.toFloat()
+ )
+
+fun VG.drawRoundedImage(image: Images, x: Number, y: Number, width: Number, height: Number, radius: Number) =
+ instance.drawRoundedImage(image, x, y, width, height, radius)
+
+
+fun Long.getTextWidth(text: String, size: Number, font: Font) =
+ RenderManager.getTextWidth(this, text, size.toFloat(), font)
+
+fun VG.getTextWidth(text: String, size: Number, font: Font) = instance.getTextWidth(text, size, font)
+
+
+fun Long.drawLine(x1: Number, y1: Number, x2: Number, y2: Number, width: Number, color: Int) =
+ RenderManager.drawLine(this, x1.toFloat(), y1.toFloat(), x2.toFloat(), y2.toFloat(), width.toFloat(), color)
+
+fun VG.drawLine(x1: Number, y1: Number, x2: Number, y2: Number, width: Number, color: Int) =
+ instance.drawLine(x1, y1, x2, y2, width, color)
+
+
+fun Long.drawDropShadow(
+ x: Number, y: Number, w: Number, h: Number, blur: Number, spread: Number, cornerRadius: Number
+) = RenderManager.drawDropShadow(
+ this, x.toFloat(), y.toFloat(), w.toFloat(), h.toFloat(), blur.toFloat(), spread.toFloat(), cornerRadius.toFloat()
+)
+
+fun VG.drawDropShadow(x: Number, y: Number, w: Number, h: Number, blur: Number, spread: Number, cornerRadius: Number) =
+ instance.drawDropShadow(x, y, w, h, blur, spread, cornerRadius)
+
+
+fun Long.newColor(r: Int, g: Int, b: Int, a: Int) = RenderManager.color(this, ColorUtils.getColor(r, g, b, a))
+fun VG.newColor(r: Int, g: Int, b: Int, a: Int) = instance.newColor(r, g, b, a)
+
+fun Long.newColor(color: Int) = RenderManager.color(this, color)
+fun VG.newColor(color: Int) = instance.newColor(color)
+
+fun NVGColor.fill(color: Int) = fill(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())
+fun NVGColor.fill(r: Int, g: Int, b: Int, a: Int) = RenderManager.fillNVGColorWithRGBA(
+ r.toFloat() / 255f, g.toFloat() / 255f, b.toFloat() / 255f, a.toFloat() / 255f, this
+)
+
+fun NVGColor.fill(r: Float, g: Float, b: Float, a: Float) = RenderManager.fillNVGColorWithRGBA(r, g, b, a, this)
+
+
+fun Long.scale(x: Float, y: Float) = RenderManager.scale(this, x, y)
+fun VG.scale(x: Float, y: Float) = instance.scale(x, y)
+
+
+fun Long.setAlpha(alpha: Float) = RenderManager.setAlpha(this, alpha)
+fun VG.setAlpha(alpha: Float) = instance.setAlpha(alpha)
+
+
+fun Long.drawSVG(filePath: String, x: Number, y: Number, width: Number, height: Number) =
+ RenderManager.drawSvg(this, filePath, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat())
+
+fun VG.drawSVG(filePath: String, x: Number, y: Number, width: Number, height: Number) =
+ instance.drawSVG(filePath, x, y, width, height)
+
+fun Long.drawSVG(filePath: String, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ RenderManager.drawSvg(this, filePath, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color)
+
+fun VG.drawSVG(filePath: String, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ instance.drawSVG(filePath, x, y, width, height, color)
+
+fun Long.drawSVG(svg: SVGs, x: Number, y: Number, width: Number, height: Number) =
+ RenderManager.drawSvg(this, svg, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat())
+
+fun VG.drawSVG(svg: SVGs, x: Number, y: Number, width: Number, height: Number) =
+ instance.drawSVG(svg, x, y, width, height)
+
+fun Long.drawSVG(svg: SVGs, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ RenderManager.drawSvg(this, svg, x.toFloat(), y.toFloat(), width.toFloat(), height.toFloat(), color)
+
+fun VG.drawSVG(svg: SVGs, x: Number, y: Number, width: Number, height: Number, color: Int) =
+ instance.drawSVG(svg, x, y, width, height, color)
+
+
+fun Long.drawInfo(type: InfoType, x: Number, y: Number, size: Number) =
+ RenderManager.drawInfo(this, type, x.toFloat(), y.toFloat(), size.toFloat())
+
+fun VG.drawInfo(type: InfoType, x: Number, y: Number, size: Number) = instance.drawInfo(type, x, y, size) \ No newline at end of file
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TextUtilsDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TextUtilsDSL.kt
new file mode 100644
index 0000000..f764153
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TextUtilsDSL.kt
@@ -0,0 +1,25 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.lwjgl.font.Font
+import cc.polyfrost.oneconfig.utils.TextUtils
+
+/**
+ * Wraps the given [String] to the given [maxWidth].
+ * @see TextUtils.wrapText
+ */
+fun String.wrap(vg: Long, maxWidth: Float, fontSize: Number, font: Font) =
+ TextUtils.wrapText(vg, this, maxWidth, fontSize.toFloat(), font)
+
+/**
+ * Wraps the given [String] to the given [maxWidth].
+ * @see wrap
+ */
+fun Long.wrap(text: String, maxWidth: Float, fontSize: Number, font: Font) =
+ TextUtils.wrapText(this, text, maxWidth, fontSize.toFloat(), font)
+
+/**
+ * Wraps the given [String] to the given [maxWidth].
+ * @see wrap
+ */
+fun VG.wrap(text: String, maxWidth: Float, fontSize: Number, font: Font) =
+ TextUtils.wrapText(instance, text, maxWidth, fontSize.toFloat(), font)
diff --git a/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TickDelayDSL.kt b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TickDelayDSL.kt
new file mode 100644
index 0000000..ed18fd5
--- /dev/null
+++ b/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/TickDelayDSL.kt
@@ -0,0 +1,10 @@
+package cc.polyfrost.oneconfig.utils.dsl
+
+import cc.polyfrost.oneconfig.utils.TickDelay
+
+/**
+ * Schedules a Runnable to be called after a certain amount of ticks.
+ *
+ * @see TickDelay
+ */
+fun tick(ticks: Int, block: () -> Unit) = TickDelay(block, ticks) \ No newline at end of file