From 72118423d214b964ea9bd3d2a1411c72941c5f90 Mon Sep 17 00:00:00 2001 From: nextdaydelivery <12willettsh@gmail.com> Date: Sun, 20 Mar 2022 11:37:24 +0000 Subject: a few small things and a couple GUI starting things --- .../java/io/polyfrost/oneconfig/gui/Window.java | 16 ++--- .../polyfrost/oneconfig/gui/elements/OCBlock.java | 69 ++++++++++++++++++---- .../polyfrost/oneconfig/gui/elements/OCButton.java | 2 +- .../oneconfig/hud/interfaces/TextHud.java | 2 +- .../io/polyfrost/oneconfig/renderer/Renderer.java | 36 +++++++++-- .../polyfrost/oneconfig/renderer/TrueTypeFont.java | 2 +- .../java/io/polyfrost/oneconfig/test/TestHud.java | 2 +- .../oneconfig/themes/textures/TextureManager.java | 12 +++- .../oneconfig/themes/textures/TickableTexture.java | 2 +- 9 files changed, 113 insertions(+), 30 deletions(-) diff --git a/src/main/java/io/polyfrost/oneconfig/gui/Window.java b/src/main/java/io/polyfrost/oneconfig/gui/Window.java index 62576a9..fa672d5 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/Window.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/Window.java @@ -1,10 +1,8 @@ package io.polyfrost.oneconfig.gui; import io.polyfrost.oneconfig.gui.elements.OCBlock; -import io.polyfrost.oneconfig.gui.elements.OCButton; import io.polyfrost.oneconfig.gui.elements.OCStoreBlock; import io.polyfrost.oneconfig.themes.Theme; -import io.polyfrost.oneconfig.themes.textures.ThemeElement; import io.polyfrost.oneconfig.themes.Themes; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; @@ -24,10 +22,11 @@ public class Window extends GuiScreen { long secondCounter = System.currentTimeMillis(); long prevTime = System.currentTimeMillis(); int frames = 0; - OCBlock block = new OCBlock(-1, 100, 200); + OCBlock block = new OCBlock(() -> { + t.getFont().drawString("hi", 10, 10, 1f, 1f, -1); + },750, 144); ResourceLocation example = new ResourceLocation("oneconfig", "textures/hudsettings.png"); OCStoreBlock storeBlock = new OCStoreBlock("OneConfig Theme", "OneConfig default theme with the default look you love.", example, new Color(27,27,27,255).getRGB()); - OCButton button = new OCButton("Mod Settings","Configure all supported mods",ThemeElement.MOD_SETTINGS,false,758, 144); public static ScaledResolution resolution = new ScaledResolution(Minecraft.getMinecraft()); public Window() { @@ -74,15 +73,16 @@ public class Window extends GuiScreen { int bottom = (int) (1024 * currentProgress); //Gui.drawRect(left - 1, top - 1, right + 1, bottom + 1, testingColor.getRGB()); //new Color(16, 17, 19, 255).getRGB() - t.getTextureManager().draw(ThemeElement.BACKGROUND, left, top, right, bottom); + //t.getTextureManager().draw(ThemeElement.BACKGROUND, left, top, right, bottom); //t.getTextureManager().draw(ThemeElement.BUTTON_OFF, left + 480, top + 40, 640, 48); - t.getTextureManager().draw(ThemeElement.SEARCH, left + 504, top + 48, 32, 32); - t.getFont().drawString("Search all of OneConfig", left + 548, top + 48, 1.1f, 1f, new Color(242,242,242,255).getRGB()); + //t.getTextureManager().draw(ThemeElement.SEARCH, left + 504, top + 48, 32, 32); + //t.getFont().drawString("Search all of OneConfig", left + 548, top + 48, 1.1f, 1f, new Color(242,242,242,255).getRGB()); + //t.getTextureManager().draw(ThemeElement.BUTTON_OFF, left + 1504, top + 32, 64, 64); //t.getTextureManager().draw(ThemeElement.BUTTON_OFF, left + 1424, top + 32, 64, 64); //t.getTextureManager().draw(ThemeElement.BUTTON_OFF, left + 1344, top + 32, 64, 64); //block.draw(200, 300); - button.draw(500,300); + block.draw(100,200); //t.getTextureManager().draw(ThemeElement.CLOSE, left + 1504, top + 32, 64, 64); //t.getTextureManager().draw(ThemeElement.BUTTON_OFF, left + 100, top + 100, 296, 64); //t.getTextureManager().draw(ThemeElement.CLOSE); diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java index 180215c..7b4fd99 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java @@ -5,7 +5,6 @@ import io.polyfrost.oneconfig.themes.Theme; import io.polyfrost.oneconfig.themes.Themes; import io.polyfrost.oneconfig.themes.textures.ThemeElement; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.GlStateManager; import org.jetbrains.annotations.NotNull; import org.lwjgl.input.Keyboard; @@ -38,12 +37,19 @@ public class OCBlock { private boolean rightClicked = false; private int mouseX, mouseY; private boolean hovered; + private float percentHoveredRed = 0f; + private float percentHoveredGreen = 0f; + private float percentHoveredBlue = 0f; + private float percentHoveredAlpha = 0f; + private final Color elementColor = theme.getElementColor(); + private final Color hoverColor = theme.getHoverColor(); + private final Runnable draw; /** - * Create a basic element with nothing. Used for extended classes. + * Create a basic element. */ public OCBlock(int width, int height) { - this(null, false, -1, width, height); + this(null, false, theme.getElementColor().getRGB(), width, height); } /** @@ -51,7 +57,10 @@ public class OCBlock { * @param color color of the element * @param width width of the element * @param height height of the element + * @deprecated + * This method DOES NOT respect the theme colors for the element. Use of {@link #OCBlock(int, int)} is recommended instead. */ + @Deprecated() public OCBlock(int color, int width, int height) { this(null, false, color, width, height); } @@ -60,7 +69,7 @@ public class OCBlock { * Create a new element with the specified text, and automatic width/height + padding. * @param text text to use * @param bold weather or not to use bold text - * @param color color of the background to use + * @param color color for the text */ public OCBlock(@NotNull String text, boolean bold, int color) { this(text, bold, color, theme.getFont().getWidth(text) + 6, theme.getFont().getHeight() + 4); @@ -70,9 +79,10 @@ public class OCBlock { * Create a new element with the specified text, and custom width/height. * @param text text to use * @param bold weather or not to use bold text - * @param color color of the background to use + * @param color color for the text (use {@link Theme#getTextColor()} or {@link Theme#getAccentTextColor()} for default colors) */ public OCBlock(String text, boolean bold, int color, int width, int height) { + this.draw = null; this.text = text; this.bold = bold; this.color = Renderer.getColorFromInt(color); @@ -86,6 +96,7 @@ public class OCBlock { * @param colorMask color mast to use (-1 for default) */ public OCBlock(ThemeElement element, int colorMask, int width, int height) { + this.draw = null; this.element = element; this.color = Renderer.getColorFromInt(colorMask); this.width = width; @@ -93,27 +104,49 @@ public class OCBlock { this.bold = false; } + /** + * Create a new Element with a custom render script. The {@link Runnable} should ONLY contain #draw() calls or equivalent. + * @param whatToDraw a {@link Runnable}, containing draw scripts for elements. You will need to instantiate the objects first, if they are sub-elements. + */ + public OCBlock(Runnable whatToDraw, int width, int height) { + this.draw = whatToDraw; + this.bold = false; + this.width = width; + this.height = height; + } + /** * Draw the element at the specified coordinates. */ public void draw(int x, int y) { + GlStateManager.enableBlend(); + percentHoveredRed = smooth(percentHoveredRed, elementColor.getRed() / 255f, hoverColor.getRed() / 255f); + percentHoveredGreen = smooth(percentHoveredGreen, elementColor.getGreen() / 255f, hoverColor.getGreen() / 255f); + percentHoveredBlue = smooth(percentHoveredBlue, elementColor.getBlue() / 255f, hoverColor.getBlue() / 255f); + percentHoveredAlpha = smooth(percentHoveredAlpha, elementColor.getAlpha() / 255f, hoverColor.getAlpha() / 255f); + GlStateManager.color(percentHoveredRed, percentHoveredGreen, percentHoveredBlue, percentHoveredAlpha); update(x, y); + if(draw != null) { + draw.run(); + } if(element != null) { - Gui.drawRect(x, y, x + width, y + height, color.getRGB()); + theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); GlStateManager.color(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); theme.getTextureManager().draw(element, x, y, width, height); } if(text == null) { - Gui.drawRect(x, y, x + width, y + height, color.getRGB()); + theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); } else { - Gui.drawRect(x, y, x + width, y + height, color.getRGB()); + theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); if(bold) { - theme.getBoldFont().drawString(text, x + 3, y + 2, 1f, 1f, -1); + theme.getBoldFont().drawString(text, x + 3, y + 2, 1f, 1f, color.getRGB()); } else { - theme.getFont().drawString(text, x + 3, y + 2, 1.1f, 1f, -1); + theme.getFont().drawString(text, x + 3, y + 2, 1.1f, 1f, color.getRGB()); } } + GlStateManager.disableBlend(); + } @@ -137,6 +170,9 @@ public class OCBlock { rightClicked = Mouse.isButtonDown(1); onKeyPress(Keyboard.getEventKey()); } + if(clicked) { + Renderer.color(theme.getClickColor()); + } if(!hovered && clicked) clicked = false; } @@ -174,6 +210,19 @@ public class OCBlock { } + + private float smooth(float current, float min, float max) { + current = Renderer.easeOut(current, isHovered() ? 1f : 0f); + if(current <= min) { + current = min; + } + + if(current >= max) { + current = max; + } + return current; + } + public void setText(String text) { this.text = text; } diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java index 2ffeaf7..298690f 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java @@ -63,7 +63,7 @@ public class OCButton extends OCBlock { } GlStateManager.color(percentHoveredRed, percentHoveredGreen, percentHoveredBlue, percentHoveredAlpha); if(isClicked()) { - Renderer.setGlColor(theme.getClickColor()); + //Renderer.setGlColor(theme.getClickColor()); } theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); diff --git a/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java b/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java index 33bbd79..77f5880 100644 --- a/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java +++ b/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java @@ -72,7 +72,7 @@ public class TextHud extends BasicHud { private void drawText(List lines, int x, int y, float scale) { for (int i = 0; i < lines.size(); i++) { - Renderer.drawTextScale(lines.get(i), x, y + i * 12, 0xffffff, shadow, scale); + Renderer.drawScaledString(lines.get(i), x, y + i * 12, 0xffffff, shadow, scale); } } diff --git a/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java b/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java index 44e1b34..86c63f6 100644 --- a/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java +++ b/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java @@ -1,5 +1,7 @@ package io.polyfrost.oneconfig.renderer; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParser; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; @@ -22,11 +24,33 @@ public class Renderer extends Gui { private static final WorldRenderer worldRenderer = tessellator.getWorldRenderer(); - public static void drawRectangle(int left, int top, int right, int bottom, int color) { - Gui.drawRect(left, top, right, bottom, color); + + /** + * Draw a basic rectangle. Please note that this is to be used WITH a {@link net.minecraft.client.renderer.GlStateManager#color(float, float, float)} before to color it. + */ + public static void drawRectangle(int x, int y, int width, int height) { + int right = x + width; + int bottom = y + height; + if (x < right) { + x = right; + } + if (y < bottom) { + y = bottom; + } + GlStateManager.enableBlend(); + GlStateManager.disableTexture2D(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + worldRenderer.begin(7, DefaultVertexFormats.POSITION); + worldRenderer.pos(x, bottom, 0.0D).endVertex(); + worldRenderer.pos(right, bottom, 0.0D).endVertex(); + worldRenderer.pos(right, y, 0.0D).endVertex(); + worldRenderer.pos(x, y, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); } - public static void drawTextScale(String text, float x, float y, int color, boolean shadow, float scale) { + public static void drawScaledString(String text, float x, float y, int color, boolean shadow, float scale) { GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); mc.fontRendererObj.drawString(text, x * (1 / scale), y * (1 / scale), color, shadow); @@ -42,7 +66,7 @@ public class Renderer extends Gui { public static void drawRegularPolygon(double x, double y, int radius, int sides, int color, double lowerAngle, double upperAngle) { GL11.glDisable(GL11.GL_TEXTURE_2D); - setGlColor(color); + color(color); GlStateManager.enableBlend(); GlStateManager.disableAlpha(); worldRenderer.begin(GL11.GL_POLYGON, DefaultVertexFormats.POSITION); @@ -120,14 +144,14 @@ public class Renderer extends Gui { /** * Set GL color from the given Color variable. */ - public static void setGlColor(Color color) { + public static void color(Color color) { GlStateManager.color(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); } /** * Set GL color from the given color as an Integer. */ - public static void setGlColor(int color) { + public static void color(int color) { float f1 = (float) (color >> 8 & 255) / 255.0F; float f = (float) (color >> 16 & 255) / 255.0F; float f2 = (float) (color & 255) / 255.0F; diff --git a/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java b/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java index 9a51e68..544a7d2 100644 --- a/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java +++ b/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java @@ -356,7 +356,7 @@ public class TrueTypeFont { GlStateManager.enableAlpha(); GlStateManager.enableBlend(); - Renderer.setGlColor(color); + Renderer.color(color); while (i >= startIndex && i <= endIndex) { charCurrent = text.charAt(i); if (charCurrent < 256) { diff --git a/src/main/java/io/polyfrost/oneconfig/test/TestHud.java b/src/main/java/io/polyfrost/oneconfig/test/TestHud.java index 0ce2984..67f0610 100644 --- a/src/main/java/io/polyfrost/oneconfig/test/TestHud.java +++ b/src/main/java/io/polyfrost/oneconfig/test/TestHud.java @@ -18,6 +18,6 @@ public class TestHud extends BasicHud { @Override public void draw(int x, int y, float scale) { - Renderer.drawTextScale("FPS: " + Minecraft.getDebugFPS(), x, y, 0xffffff, false, scale); + Renderer.drawScaledString("FPS: " + Minecraft.getDebugFPS(), x, y, 0xffffff, false, scale); } } diff --git a/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java b/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java index 9b583ef..4729d6c 100644 --- a/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java +++ b/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java @@ -67,7 +67,7 @@ public class TextureManager { } /** - * Draw the specified icon at the coordinates, scaled to the width and height. + * Draw the specified {@link ThemeElement} at the coordinates, scaled to the width and height. * * @param element element to draw * @param x x coordinate (top left) @@ -99,4 +99,14 @@ public class TextureManager { } } } + + /** + * Draw the specified {@link ThemeElement} at the coordinates, using its recommended width and height. + * @param element element to draw + * @param x x coordinate (top left) + * @param y y coordinate (top left) + */ + public void draw(@NotNull ThemeElement element, int x, int y) { + this.draw(element, x, y, element.size, element.size); + } } diff --git a/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java b/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java index b9882d0..e825be9 100644 --- a/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java +++ b/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java @@ -42,7 +42,7 @@ public class TickableTexture { frametime = jsonObject.get("frametime").getAsInt(); if (frametime == 0) { frametime = 1; - themeLog.warn("You cannot have a frame tick time of 0. This will mean there is no animation as it will happen way too fast. Defaulting to 1, as we assume you wanted it fast."); + themeLog.warn("You cannot have a frame tick time of 0. This will mean there is no animation as it will happen impossibly fast. Defaulting to 1, as we assume you wanted it fast."); } } catch (Exception e) { themeLog.error("failed to load metadata for tickable texture (" + element.location + "). Setting default (5)"); -- cgit From 2696141f9790fd6c8d3df1148f46d298512c4902 Mon Sep 17 00:00:00 2001 From: Wyvest <45589059+Wyvest@users.noreply.github.com> Date: Mon, 21 Mar 2022 14:48:22 +0700 Subject: stuff (#1) * new: use archloom instead of forgegradle * misc: reformat code * update archloom --- build.gradle | 113 +++++---- gradle.properties | 6 + gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 26 +- .../java/io/polyfrost/oneconfig/OneConfig.java | 2 +- .../oneconfig/command/OneConfigCommand.java | 3 +- .../oneconfig/config/OneConfigConfig.java | 10 +- .../oneconfig/config/core/ConfigCore.java | 4 +- .../oneconfig/config/interfaces/Config.java | 12 +- .../oneconfig/config/interfaces/Option.java | 3 +- .../oneconfig/config/profiles/Profiles.java | 8 +- .../polyfrost/oneconfig/gui/elements/OCBlock.java | 79 +++--- .../polyfrost/oneconfig/gui/elements/OCButton.java | 22 +- .../oneconfig/gui/elements/OCStoreBlock.java | 11 +- .../io/polyfrost/oneconfig/hud/gui/HudGui.java | 33 +-- .../oneconfig/hud/interfaces/BasicHud.java | 4 +- .../oneconfig/hud/interfaces/TextHud.java | 14 +- .../io/polyfrost/oneconfig/renderer/Renderer.java | 5 +- .../polyfrost/oneconfig/renderer/TrueTypeFont.java | 267 +++++++++------------ .../oneconfig/themes/textures/TextureManager.java | 11 +- .../oneconfig/themes/textures/TickableTexture.java | 7 +- src/main/resources/mcmod.info | 6 +- 22 files changed, 292 insertions(+), 356 deletions(-) create mode 100644 gradle.properties diff --git a/build.gradle b/build.gradle index e320d14..7efe09c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,79 +1,98 @@ +//file:noinspection UnnecessaryQualifiedReference +//file:noinspection GroovyAssignabilityCheck + plugins { + id "dev.architectury.architectury-pack200" version "0.1.3" + id "com.github.johnrengelman.shadow" version "7.1.0" + id "cc.woverflow.loom" version "0.10.6" + id "net.kyori.blossom" version "1.3.0" id "java" - id "com.github.johnrengelman.shadow" version "6.1.0" - id "net.minecraftforge.gradle.forge" version "6f53277" } -group "io.polyfrost" -version "1.0-SNAPSHOT" -archivesBaseName = "OneConfig" +version = mod_version +group = "io.polyfrost" +archivesBaseName = mod_name + +blossom { + String className = "src/main/java/io/polyfrost/oneconfig/OneConfig.java" + replaceToken("@VER@", project.version, className) + replaceToken("@NAME@", mod_name, className) + replaceToken("@ID@", mod_id, className) +} -sourceCompatibility = targetCompatibility = 1.8 +sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 compileJava.options.encoding = 'UTF-8' -minecraft { - version = "1.8.9-11.15.1.2318-1.8.9" - runDir = "run" - mappings = "stable_22" - makeObfSourceJar = false +loom { + launchConfigs { + client { + + } + } + runConfigs { + client { + ideConfigGenerated = true + } + } + forge { + pack200Provider = new dev.architectury.pack200.java.Pack200Adapter() + } } configurations { - shade - implementation.extendsFrom(shade) + include + implementation.extendsFrom(include) } repositories { -mavenCentral() + maven { url 'https://repo.woverflow.cc/' } } dependencies { -implementation 'org.jetbrains:annotations:22.0.0' + minecraft("com.mojang:minecraft:1.8.9") + mappings("de.oceanlabs.mcp:mcp_stable:22-1.8.9") + forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9") } -/** - * This task simply replaces the `${version}` and `${mcversion}` properties in the mcmod.info with the data from Gradle - */ processResources { // this will ensure that this task is redone when the versions change. - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version + inputs.property "version", version + inputs.property "name", mod_name + inputs.property "id", mod_id - // replace stuff in mcmod.info, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'mcmod.info' - - // replace version and mcversion - expand 'version': project.version, 'mcversion': project.minecraft.version + filesMatching("mcmod.info") { + expand( + "id": mod_id, + "name": mod_name, + "version": version + ) } - // copy everything else, thats not the mcmod.info - from(sourceSets.main.resources.srcDirs) { - exclude 'mcmod.info' - } + rename '(.+_at.cfg)', 'META-INF/$1' } -/** - * This task simply moves resources so they can be accessed at runtime, Forge is quite weird isn't it - */ -task moveResources { - doLast { - ant.move file: "${buildDir}/resources/main", - todir: "${buildDir}/classes/java" +sourceSets { + main { + output.resourcesDir = java.classesDirectory } } -moveResources.dependsOn processResources -classes.dependsOn moveResources +remapJar { + archiveClassifier = "nodeps" +} + +jar { + manifest.attributes( + 'ModSide': 'CLIENT', + 'ForceLoadAsMod': true, + "TweakOrder": "0" + ) +} shadowJar { - archiveClassifier.set('dep') - configurations = [project.configurations.shade] + archiveClassifier.set('') + from(remapJar.archiveFile) + configurations = [project.configurations.include] duplicatesStrategy DuplicatesStrategy.EXCLUDE } - -reobf { shadowJar { mappingType = "SEARGE" } } -tasks.reobfShadowJar.mustRunAfter shadowJar -afterEvaluate { - build.dependsOn reobfShadowJar -} \ No newline at end of file +assemble.dependsOn shadowJar \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..527e3ee --- /dev/null +++ b/gradle.properties @@ -0,0 +1,6 @@ +org.gradle.jvmargs=-Xmx2G +mod_name = OneConfig +mod_id = oneconfig +mod_version = 1.0.0 + +loom.platform = forge \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 442d913..b1159fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index 9c76f81..4f8d00d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,30 +1,8 @@ pluginManagement { repositories { - mavenCentral() gradlePluginPortal() - - // Add the Forge Repository (ForgeGradle fetches most of its stuff from here) - maven { - name = "Forge" - url = "https://maven.minecraftforge.net" - } - - // Add the Jitpack Repository (We fetch ForgeGradle from this) - maven { - name = "Jitpack" - url = "https://jitpack.io/" - } - } - resolutionStrategy { - eachPlugin { - // If the "net.minecraftforge.gradle.forge" plugin is requested we redirect it to asbyth's ForgeGradle fork - if (requested.id.id == "net.minecraftforge.gradle.forge") { - useModule("com.github.asbyth:ForgeGradle:${requested.version}") - } - } + maven { url = "https://repo.woverflow.cc" } } } - -rootProject.name = 'oneConfig' - +rootProject.name = mod_name \ No newline at end of file diff --git a/src/main/java/io/polyfrost/oneconfig/OneConfig.java b/src/main/java/io/polyfrost/oneconfig/OneConfig.java index da4a604..7f29c39 100644 --- a/src/main/java/io/polyfrost/oneconfig/OneConfig.java +++ b/src/main/java/io/polyfrost/oneconfig/OneConfig.java @@ -14,7 +14,7 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import java.io.File; -@Mod(modid = "oneconfig", name = "OneConfig", version = "${version}") +@Mod(modid = "@ID@", name = "@NAME@", version = "@VER@") public class OneConfig { private static final Minecraft mc = Minecraft.getMinecraft(); public static File jarFile; diff --git a/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java b/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java index 575fc3f..df727a0 100644 --- a/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java +++ b/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java @@ -39,8 +39,7 @@ public class OneConfigCommand implements ICommand { @Override public void processCommand(ICommandSender sender, String[] args) { - if (args.length == 0) - new TickDelay(() -> mc.displayGuiScreen(new Window()), 1); + if (args.length == 0) new TickDelay(() -> mc.displayGuiScreen(new Window()), 1); else { switch (args[0]) { case "hud": diff --git a/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java b/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java index a518633..b46c65d 100644 --- a/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java +++ b/src/main/java/io/polyfrost/oneconfig/config/OneConfigConfig.java @@ -8,16 +8,16 @@ import java.io.*; import java.nio.charset.StandardCharsets; public class OneConfigConfig extends Config { + public static String currentProfile = "Default Profile"; + public OneConfigConfig() { super(null, "OneConfig.json"); } @Override public void init(ModData modData) { - if (new File("OneConfig/" + configFile).exists()) - load(); - else - save(); + if (new File("OneConfig/" + configFile).exists()) load(); + else save(); } @Override @@ -37,6 +37,4 @@ public class OneConfigConfig extends Config { e.printStackTrace(); } } - - public static String currentProfile = "Default Profile"; } diff --git a/src/main/java/io/polyfrost/oneconfig/config/core/ConfigCore.java b/src/main/java/io/polyfrost/oneconfig/config/core/ConfigCore.java index a66a8a0..9bb2e85 100644 --- a/src/main/java/io/polyfrost/oneconfig/config/core/ConfigCore.java +++ b/src/main/java/io/polyfrost/oneconfig/config/core/ConfigCore.java @@ -10,13 +10,13 @@ import java.util.HashMap; public class ConfigCore { public static HashMap> settings = new HashMap<>(); - public static void saveAll () { + public static void saveAll() { for (ModData modData : settings.keySet()) { modData.config.save(); } } - public static void reInitAll () { + public static void reInitAll() { ArrayList data = new ArrayList<>(settings.keySet()); settings.clear(); HudCore.huds.clear(); diff --git a/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java index 2e3e92d..73dbbe7 100644 --- a/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java +++ b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Config.java @@ -20,8 +20,7 @@ import java.util.Optional; public class Config { protected final String configFile; - protected final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting() - .registerTypeAdapterFactory(OneConfigTypeAdapterFactory.getStaticTypeAdapterFactory()).create(); + protected final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting().registerTypeAdapterFactory(OneConfigTypeAdapterFactory.getStaticTypeAdapterFactory()).create(); /** * @param modData information about the mod @@ -33,10 +32,8 @@ public class Config { } public void init(ModData modData) { - if (Profiles.getProfileFile(configFile).exists()) - load(); - else - save(); + if (Profiles.getProfileFile(configFile).exists()) load(); + else save(); modData.config = this; ConfigCore.settings.put(modData, generateOptionList(this.getClass())); } @@ -109,8 +106,7 @@ public class Config { } } else { Option customOption = processCustomOption(field); - if (customOption != null) - options.add(customOption); + if (customOption != null) options.add(customOption); } } return options; diff --git a/src/main/java/io/polyfrost/oneconfig/config/interfaces/Option.java b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Option.java index 5980a63..99cf656 100644 --- a/src/main/java/io/polyfrost/oneconfig/config/interfaces/Option.java +++ b/src/main/java/io/polyfrost/oneconfig/config/interfaces/Option.java @@ -19,8 +19,7 @@ public abstract class Option { this.field = field; this.name = name; this.description = description; - if (field != null) - field.setAccessible(true); + if (field != null) field.setAccessible(true); } /** diff --git a/src/main/java/io/polyfrost/oneconfig/config/profiles/Profiles.java b/src/main/java/io/polyfrost/oneconfig/config/profiles/Profiles.java index db9fce2..45d448d 100644 --- a/src/main/java/io/polyfrost/oneconfig/config/profiles/Profiles.java +++ b/src/main/java/io/polyfrost/oneconfig/config/profiles/Profiles.java @@ -11,8 +11,8 @@ import java.util.ArrayList; import java.util.Arrays; public class Profiles { - public static ArrayList profiles; private static final File profileDir = new File("OneConfig/profiles"); + public static ArrayList profiles; public static String getCurrentProfile() { if (!profileDir.exists() && !profileDir.mkdir()) { @@ -21,8 +21,7 @@ public class Profiles { } if (profiles == null) { String[] profilesArray = new File("OneConfig/profiles").list((file, s) -> file.isDirectory()); - if (profilesArray != null) - profiles = new ArrayList<>(Arrays.asList(profilesArray)); + if (profilesArray != null) profiles = new ArrayList<>(Arrays.asList(profilesArray)); } if (!getProfileDir(OneConfigConfig.currentProfile).exists()) { createProfile(OneConfigConfig.currentProfile); @@ -62,8 +61,7 @@ public class Profiles { try { File newFile = new File(new File("OneConfig/profiles"), newName); FileUtils.moveDirectory(getProfileDir(name), newFile); - if (OneConfigConfig.currentProfile.equals(name)) - OneConfigConfig.currentProfile = newName; + if (OneConfigConfig.currentProfile.equals(name)) OneConfigConfig.currentProfile = newName; profiles.remove(name); profiles.add(newName); } catch (IOException e) { diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java index 7b4fd99..abcd5ca 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java @@ -21,9 +21,10 @@ import static io.polyfrost.oneconfig.gui.Window.resolution; public class OCBlock { public static final Theme theme = Themes.getActiveTheme(); private static final Minecraft mc = Minecraft.getMinecraft(); - private Color color; - private String text; private final boolean bold; + private final Color elementColor = theme.getElementColor(); + private final Color hoverColor = theme.getHoverColor(); + private final Runnable draw; /** * Width of the element in pixels. */ @@ -32,6 +33,8 @@ public class OCBlock { * Height of the element in pixels. */ public int height; + private Color color; + private String text; private ThemeElement element; private boolean clicked = false; private boolean rightClicked = false; @@ -41,9 +44,6 @@ public class OCBlock { private float percentHoveredGreen = 0f; private float percentHoveredBlue = 0f; private float percentHoveredAlpha = 0f; - private final Color elementColor = theme.getElementColor(); - private final Color hoverColor = theme.getHoverColor(); - private final Runnable draw; /** * Create a basic element. @@ -54,11 +54,11 @@ public class OCBlock { /** * Create a new basic element. - * @param color color of the element - * @param width width of the element + * + * @param color color of the element + * @param width width of the element * @param height height of the element - * @deprecated - * This method DOES NOT respect the theme colors for the element. Use of {@link #OCBlock(int, int)} is recommended instead. + * @deprecated This method DOES NOT respect the theme colors for the element. Use of {@link #OCBlock(int, int)} is recommended instead. */ @Deprecated() public OCBlock(int color, int width, int height) { @@ -67,8 +67,9 @@ public class OCBlock { /** * Create a new element with the specified text, and automatic width/height + padding. - * @param text text to use - * @param bold weather or not to use bold text + * + * @param text text to use + * @param bold weather or not to use bold text * @param color color for the text */ public OCBlock(@NotNull String text, boolean bold, int color) { @@ -77,8 +78,9 @@ public class OCBlock { /** * Create a new element with the specified text, and custom width/height. - * @param text text to use - * @param bold weather or not to use bold text + * + * @param text text to use + * @param bold weather or not to use bold text * @param color color for the text (use {@link Theme#getTextColor()} or {@link Theme#getAccentTextColor()} for default colors) */ public OCBlock(String text, boolean bold, int color, int width, int height) { @@ -92,7 +94,8 @@ public class OCBlock { /** * Create a new Element with the specified image. - * @param element element to use + * + * @param element element to use * @param colorMask color mast to use (-1 for default) */ public OCBlock(ThemeElement element, int colorMask, int width, int height) { @@ -106,6 +109,7 @@ public class OCBlock { /** * Create a new Element with a custom render script. The {@link Runnable} should ONLY contain #draw() calls or equivalent. + * * @param whatToDraw a {@link Runnable}, containing draw scripts for elements. You will need to instantiate the objects first, if they are sub-elements. */ public OCBlock(Runnable whatToDraw, int width, int height) { @@ -126,20 +130,19 @@ public class OCBlock { percentHoveredAlpha = smooth(percentHoveredAlpha, elementColor.getAlpha() / 255f, hoverColor.getAlpha() / 255f); GlStateManager.color(percentHoveredRed, percentHoveredGreen, percentHoveredBlue, percentHoveredAlpha); update(x, y); - if(draw != null) { + if (draw != null) { draw.run(); } - if(element != null) { + if (element != null) { theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); GlStateManager.color(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); theme.getTextureManager().draw(element, x, y, width, height); } - if(text == null) { + if (text == null) { theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); - } - else { + } else { theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); - if(bold) { + if (bold) { theme.getBoldFont().drawString(text, x + 3, y + 2, 1f, 1f, color.getRGB()); } else { theme.getFont().drawString(text, x + 3, y + 2, 1.1f, 1f, color.getRGB()); @@ -157,7 +160,7 @@ public class OCBlock { int mouseX = Mouse.getX() / resolution.getScaleFactor(); int mouseY = Math.abs((Mouse.getY() / resolution.getScaleFactor()) - resolution.getScaledHeight()); hovered = mouseX > x && mouseY > y && mouseX < x + width && mouseY < y + height; - if(hovered) { + if (hovered) { onHover(); if (Mouse.isButtonDown(0) && !clicked) { onClick(0); @@ -170,10 +173,10 @@ public class OCBlock { rightClicked = Mouse.isButtonDown(1); onKeyPress(Keyboard.getEventKey()); } - if(clicked) { + if (clicked) { Renderer.color(theme.getClickColor()); } - if(!hovered && clicked) clicked = false; + if (!hovered && clicked) clicked = false; } /** @@ -188,6 +191,7 @@ public class OCBlock { /** * Override this method to set a function when a key is pressed while this element is hovered. + * * @param keyCode key code that was pressed (check org.lwjgl.Keyboard for keymap) */ public void onKeyPress(int keyCode) { @@ -196,6 +200,7 @@ public class OCBlock { /** * Override this method to set a function when the element is hovered. + * * @param button the button that was pressed (0 is left, 1 is right) */ public void onClick(int button) { @@ -213,46 +218,46 @@ public class OCBlock { private float smooth(float current, float min, float max) { current = Renderer.easeOut(current, isHovered() ? 1f : 0f); - if(current <= min) { + if (current <= min) { current = min; } - if(current >= max) { + if (current >= max) { current = max; } return current; } - public void setText(String text) { - this.text = text; - } - - public void setWidth(int width) { - this.width = width; + public int getHeight() { + return height; } public void setHeight(int height) { this.height = height; } - public int getHeight() { - return height; - } - public Color getColor() { return color; } + public void setColor(Color color) { + this.color = color; + } + public int getWidth() { return width; } + public void setWidth(int width) { + this.width = width; + } + public String getText() { return text; } - public void setColor(Color color) { - this.color = color; + public void setText(String text) { + this.text = text; } public boolean isHovered() { diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java index 298690f..5f78baa 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCButton.java @@ -8,13 +8,13 @@ import org.jetbrains.annotations.NotNull; import java.awt.*; public class OCButton extends OCBlock { + private final Color elementColor = theme.getElementColor(); + private final Color hoverColor = theme.getHoverColor(); private float percentHoveredRed = 0f; private float percentHoveredGreen = 0f; private float percentHoveredBlue = 0f; private float percentHoveredAlpha = 0f; private float percentDescription = 0f; - private final Color elementColor = theme.getElementColor(); - private final Color hoverColor = theme.getHoverColor(); private ThemeElement element; private boolean alwaysShowDesc = true; private String title, description; @@ -58,27 +58,27 @@ public class OCButton extends OCBlock { percentHoveredGreen = smooth(percentHoveredGreen, elementColor.getGreen() / 255f, hoverColor.getGreen() / 255f); percentHoveredBlue = smooth(percentHoveredBlue, elementColor.getBlue() / 255f, hoverColor.getBlue() / 255f); percentHoveredAlpha = smooth(percentHoveredAlpha, elementColor.getAlpha() / 255f, hoverColor.getAlpha() / 255f); - if(!alwaysShowDesc) { + if (!alwaysShowDesc) { percentDescription = Renderer.clamp(Renderer.easeOut(percentDescription, isHovered() ? 1f : 0f)); } GlStateManager.color(percentHoveredRed, percentHoveredGreen, percentHoveredBlue, percentHoveredAlpha); - if(isClicked()) { + if (isClicked()) { //Renderer.setGlColor(theme.getClickColor()); } theme.getTextureManager().draw(ThemeElement.BUTTON, x, y, width, height); - if(element != null) { - GlStateManager.color(1f,1f,1f, isClicked() ? 0.6f : 1f); + if (element != null) { + GlStateManager.color(1f, 1f, 1f, isClicked() ? 0.6f : 1f); theme.getTextureManager().draw(element, x + 19, y + 8, element.size, element.size); - if(title != null) { - if(alwaysShowDesc) { + if (title != null) { + if (alwaysShowDesc) { theme.getBoldFont().drawString(title, x + element.size + 25, y + 30, 1.2f, 1.2f, isClicked() ? theme.getTextColor().darker().getRGB() : theme.getTextColor().getRGB()); theme.getFont().drawString(description, x + element.size + 25, y + theme.getBoldFont().getHeight() + 37, 1.2f, 1.2f, isClicked() ? theme.getAccentTextColor().darker().getRGB() : theme.getAccentTextColor().getRGB()); } else { int titleY = y + 48; titleY -= (int) (percentDescription * 18); Color targetColor = theme.getAccentTextColor(); - Color currentColor = isClicked() ? targetColor.darker() : new Color(targetColor.getRed(), targetColor.getGreen(), targetColor.getBlue(), (int) (targetColor.getAlpha() * percentDescription)); + Color currentColor = isClicked() ? targetColor.darker() : new Color(targetColor.getRed(), targetColor.getGreen(), targetColor.getBlue(), (int) (targetColor.getAlpha() * percentDescription)); theme.getFont().drawString(description, x + element.size + 25, y + theme.getBoldFont().getHeight() + 37, 1.2f, 1.2f, currentColor.getRGB()); theme.getBoldFont().drawString(title, x + element.size + 25, titleY, 1.2f, 1.2f, isClicked() ? theme.getTextColor().darker().getRGB() : theme.getTextColor().getRGB()); } @@ -89,11 +89,11 @@ public class OCButton extends OCBlock { private float smooth(float current, float min, float max) { current = Renderer.easeOut(current, isHovered() ? 1f : 0f); - if(current <= min) { + if (current <= min) { current = min; } - if(current >= max) { + if (current >= max) { current = max; } return current; diff --git a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCStoreBlock.java b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCStoreBlock.java index 3d23b2f..d7fa7e9 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCStoreBlock.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCStoreBlock.java @@ -1,16 +1,15 @@ package io.polyfrost.oneconfig.gui.elements; import io.polyfrost.oneconfig.renderer.Renderer; -import io.polyfrost.oneconfig.themes.textures.ThemeElement; -import net.minecraft.client.gui.Gui; import net.minecraft.util.ResourceLocation; import java.awt.*; public class OCStoreBlock extends OCBlock { - private ResourceLocation image; - private String description, title; - private Color color; + private final ResourceLocation image; + private final String description; + private final String title; + private final Color color; public OCStoreBlock(String title, String description, ResourceLocation image, int color) { super(color, 300, 400); @@ -31,6 +30,6 @@ public class OCStoreBlock extends OCBlock { } public void draw(int x, int y, int width, int height) { - draw(x,y); + draw(x, y); } } diff --git a/src/main/java/io/polyfrost/oneconfig/hud/gui/HudGui.java b/src/main/java/io/polyfrost/oneconfig/hud/gui/HudGui.java index 262e36d..cc55e59 100644 --- a/src/main/java/io/polyfrost/oneconfig/hud/gui/HudGui.java +++ b/src/main/java/io/polyfrost/oneconfig/hud/gui/HudGui.java @@ -44,10 +44,8 @@ public class HudGui extends GuiScreen { float pos = getXSnapping(mouseX, true); float newWidth = pos - xFloat; float newScale = newWidth / ((hud.getWidth(hud.scale) + hud.paddingX * hud.scale) / hud.scale); - if (newScale > 20) - newScale = 20; - else if (newScale < 0.3) - newScale = 0.3f; + if (newScale > 20) newScale = 20; + else if (newScale < 0.3) newScale = 0.3f; hud.scale = newScale; if (xFloat / this.width > 0.5) @@ -65,8 +63,7 @@ public class HudGui extends GuiScreen { int color = new Color(215, 224, 235).getRGB(); if (editingHud == hud) { color = new Color(43, 159, 235).getRGB(); - if (isDragging) - Gui.drawRect(x, y, x + width, y + height, new Color(108, 176, 255, 60).getRGB()); + if (isDragging) Gui.drawRect(x, y, x + width, y + height, new Color(108, 176, 255, 60).getRGB()); } Renderer.drawLine(x - 2 / 4f, y, x + width + 2 / 4f, y, 2, color); Renderer.drawLine(x, y, x, y + height, 2, color); @@ -84,28 +81,20 @@ public class HudGui extends GuiScreen { float width = editingHud.getWidth(editingHud.scale) + editingHud.paddingX * editingHud.scale; float height = editingHud.getHeight(editingHud.scale) + editingHud.paddingY * editingHud.scale; - if (newX < 0) - newX = 0; - else if (newX + width > this.width) - newX = this.width - width; - if (newY < 0) - newY = 0; - else if (newY + height > this.height) - newY = this.height - height; + if (newX < 0) newX = 0; + else if (newX + width > this.width) newX = this.width - width; + if (newY < 0) newY = 0; + else if (newY + height > this.height) newY = this.height - height; if (snap) { newX = getXSnapping(newX, false); newY = getYSnapping(newY); } - if (newX / this.width <= 0.5) - editingHud.xUnscaled = newX / (double) this.width; - else - editingHud.xUnscaled = (newX + width) / (double) this.width; - if (newY / this.height <= 0.5) - editingHud.yUnscaled = newY / (double) this.height; - else - editingHud.yUnscaled = (newY + height) / (double) this.height; + if (newX / this.width <= 0.5) editingHud.xUnscaled = newX / (double) this.width; + else editingHud.xUnscaled = (newX + width) / (double) this.width; + if (newY / this.height <= 0.5) editingHud.yUnscaled = newY / (double) this.height; + else editingHud.yUnscaled = (newY + height) / (double) this.height; } private float getXSnapping(float pos, boolean rightOnly) { diff --git a/src/main/java/io/polyfrost/oneconfig/hud/interfaces/BasicHud.java b/src/main/java/io/polyfrost/oneconfig/hud/interfaces/BasicHud.java index ebc5459..419bccf 100644 --- a/src/main/java/io/polyfrost/oneconfig/hud/interfaces/BasicHud.java +++ b/src/main/java/io/polyfrost/oneconfig/hud/interfaces/BasicHud.java @@ -42,9 +42,7 @@ public abstract class BasicHud { } private void drawBackground(float x, float y, float scale) { - Renderer.drawRoundRect((int) x, (int) y, - (int) (getWidth(scale) + paddingX * scale), (int) (getHeight(scale) + paddingY * scale), - (int) (2 * scale), new Color(0, 0, 0, 120).getRGB()); + Renderer.drawRoundRect((int) x, (int) y, (int) (getWidth(scale) + paddingX * scale), (int) (getHeight(scale) + paddingY * scale), (int) (2 * scale), new Color(0, 0, 0, 120).getRGB()); } public float getXScaled(int screenWidth) { diff --git a/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java b/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java index 77f5880..3c9cf4c 100644 --- a/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java +++ b/src/main/java/io/polyfrost/oneconfig/hud/interfaces/TextHud.java @@ -14,10 +14,10 @@ public class TextHud extends BasicHud { */ private final FontRenderer fb = Minecraft.getMinecraft().fontRendererObj; boolean shadow = false; + boolean doExample = false; private List cachedLines; private int cachedWidth; private int cachedHeight; - boolean doExample = false; private List cachedExampleLines; private int cachedExampleWidth; private int cachedExampleHeight; @@ -35,8 +35,7 @@ public class TextHud extends BasicHud { cachedWidth = 0; for (String line : cachedLines) { int width = fb.getStringWidth(line); - if (width > cachedWidth) - cachedWidth = width; + if (width > cachedWidth) cachedWidth = width; } } if (doExample) { @@ -46,8 +45,7 @@ public class TextHud extends BasicHud { cachedExampleWidth = 0; for (String line : cachedExampleLines) { int width = fb.getStringWidth(line); - if (width > cachedExampleWidth) - cachedExampleWidth = width; + if (width > cachedExampleWidth) cachedExampleWidth = width; } } } @@ -59,15 +57,13 @@ public class TextHud extends BasicHud { @Override public void draw(int x, int y, float scale) { - if (cachedLines != null) - drawText(cachedLines, x, y, scale); + if (cachedLines != null) drawText(cachedLines, x, y, scale); } @Override public void drawExample(int x, int y, float scale) { doExample = true; - if (cachedExampleLines != null) - drawText(cachedExampleLines, x, y, scale); + if (cachedExampleLines != null) drawText(cachedExampleLines, x, y, scale); } private void drawText(List lines, int x, int y, float scale) { diff --git a/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java b/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java index 86c63f6..b77b8cd 100644 --- a/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java +++ b/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java @@ -1,7 +1,5 @@ package io.polyfrost.oneconfig.renderer; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParser; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; @@ -12,7 +10,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.ResourceLocation; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.lwjgl.opengl.*; +import org.lwjgl.opengl.GL11; import java.awt.*; @@ -24,7 +22,6 @@ public class Renderer extends Gui { private static final WorldRenderer worldRenderer = tessellator.getWorldRenderer(); - /** * Draw a basic rectangle. Please note that this is to be used WITH a {@link net.minecraft.client.renderer.GlStateManager#color(float, float, float)} before to color it. */ diff --git a/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java b/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java index 544a7d2..d26b953 100644 --- a/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java +++ b/src/main/java/io/polyfrost/oneconfig/renderer/TrueTypeFont.java @@ -29,10 +29,7 @@ import java.util.Map; * @author version edited by David Aaron Muhar (bobjob) (modified in Bobjob's Engine) */ public class TrueTypeFont { - public final static int - ALIGN_LEFT = 0, - ALIGN_RIGHT = 1, - ALIGN_CENTER = 2; + public final static int ALIGN_LEFT = 0, ALIGN_RIGHT = 1, ALIGN_CENTER = 2; /** * Array that holds necessary information about the font characters */ @@ -52,54 +49,26 @@ public class TrueTypeFont { * Font's size */ private final int fontSize; - - /** - * Font's height - */ - private int fontHeight = 0; - - /** - * Texture used to cache the font 0-255 characters - */ - private int fontTextureID; - /** * Default font texture width */ private final int textureWidth = 512; - /** * Default font texture height */ private final int textureHeight = 512; - /** * A reference to Java's AWT Font that we create our font texture from */ private final Font font; - - - private static class IntObject { - /** - * Character's width - */ - public int width; - - /** - * Character's height - */ - public int height; - - /** - * Character's stored x position - */ - public int storedX; - - /** - * Character's stored y position - */ - public int storedY; - } + /** + * Font's height + */ + private int fontHeight = 0; + /** + * Texture used to cache the font 0-255 characters + */ + private int fontTextureID; public TrueTypeFont(Font font, boolean antiAlias, char[] additionalChars) { @@ -113,18 +82,86 @@ public class TrueTypeFont { if (fontHeight <= 0) fontHeight = 1; } + public TrueTypeFont(Font font, boolean antiAlias) { this(font, antiAlias, null); } + public static int loadImage(BufferedImage bufferedImage) { + try { + short width = (short) bufferedImage.getWidth(); + short height = (short) bufferedImage.getHeight(); + //textureLoader.bpp = bufferedImage.getColorModel().hasAlpha() ? (byte)32 : (byte)24; + int bpp = (byte) bufferedImage.getColorModel().getPixelSize(); + ByteBuffer byteBuffer; + DataBuffer db = bufferedImage.getData().getDataBuffer(); + if (db instanceof DataBufferInt) { + int[] intI = ((DataBufferInt) (bufferedImage.getData().getDataBuffer())).getData(); + byte[] newI = new byte[intI.length * 4]; + for (int i = 0; i < intI.length; i++) { + byte[] b = intToByteArray(intI[i]); + int newIndex = i * 4; + + newI[newIndex] = b[1]; + newI[newIndex + 1] = b[2]; + newI[newIndex + 2] = b[3]; + newI[newIndex + 3] = b[0]; + } + + byteBuffer = ByteBuffer.allocateDirect(width * height * (bpp / 8)).order(ByteOrder.nativeOrder()).put(newI); + } else { + byteBuffer = ByteBuffer.allocateDirect(width * height * (bpp / 8)).order(ByteOrder.nativeOrder()).put(((DataBufferByte) (bufferedImage.getData().getDataBuffer())).getData()); + } + byteBuffer.flip(); + + + int internalFormat = GL11.GL_RGBA8, format = GL11.GL_RGBA; + IntBuffer textureId = BufferUtils.createIntBuffer(1); + + GL11.glGenTextures(textureId); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId.get(0)); + + + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); + + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + + GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE); + + + GLU.gluBuild2DMipmaps(GL11.GL_TEXTURE_2D, internalFormat, width, height, format, GL11.GL_UNSIGNED_BYTE, byteBuffer); + return textureId.get(0); + + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + public static boolean isSupported(String fontname) { + Font[] font = getFonts(); + for (int i = font.length - 1; i >= 0; i--) { + if (font[i].getName().equalsIgnoreCase(fontname)) return true; + } + return false; + } + + public static Font[] getFonts() { + return GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); + } + + public static byte[] intToByteArray(int value) { + return new byte[]{(byte) (value >>> 24), (byte) (value >>> 16), (byte) (value >>> 8), (byte) value}; + } + private BufferedImage getFontImage(char ch) { // Create a temporary image to extract the character's size - BufferedImage tempfontImage = new BufferedImage(1, 1, - BufferedImage.TYPE_INT_ARGB); + BufferedImage tempfontImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) tempfontImage.getGraphics(); if (antiAlias) { - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } g.setFont(font); FontMetrics fontMetrics = g.getFontMetrics(); @@ -140,20 +177,17 @@ public class TrueTypeFont { // Create another image holding the character we are creating BufferedImage fontImage; - fontImage = new BufferedImage(charwidth, charheight, - BufferedImage.TYPE_INT_ARGB); + fontImage = new BufferedImage(charwidth, charheight, BufferedImage.TYPE_INT_ARGB); Graphics2D gt = (Graphics2D) fontImage.getGraphics(); if (antiAlias) { - gt.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + gt.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } gt.setFont(font); gt.setColor(Color.WHITE); int charx = 3; int chary = 1; - gt.drawString(String.valueOf(ch), (charx), (chary) - + fontMetrics.getAscent()); + gt.drawString(String.valueOf(ch), (charx), (chary) + fontMetrics.getAscent()); return fontImage; @@ -223,8 +257,7 @@ public class TrueTypeFont { } } - private void drawQuad(float drawX, float drawY, float drawX2, float drawY2, - float srcX, float srcY, float srcX2, float srcY2) { + private void drawQuad(float drawX, float drawY, float drawX2, float drawY2, float srcX, float srcY, float srcX2, float srcY2) { float DrawWidth = drawX2 - drawX; float DrawHeight = drawY2 - drawY; float TextureSrcX = srcX / textureWidth; @@ -260,8 +293,7 @@ public class TrueTypeFont { intObject = customChars.get((char) currentChar); } - if (intObject != null) - totalWidth += intObject.width; + if (intObject != null) totalWidth += intObject.width; } return totalWidth; } @@ -281,18 +313,18 @@ public class TrueTypeFont { String[] words = text.split("\\W+"); int totalWidth = 0; String line = ""; - for(String word : words) { + for (String word : words) { int width = getWidth(word); word += " "; // add the space totalWidth += width; line += word; - if(totalWidth >= wrapWidth) { // wrap line if it is too long + if (totalWidth >= wrapWidth) { // wrap line if it is too long splitString.add(line); totalWidth = 0; line = ""; } } - if(!line.equals("")) { // add extra if there is any (last line) + if (!line.equals("")) { // add extra if there is any (last line) splitString.add(line); } int i1 = 0; @@ -305,10 +337,6 @@ public class TrueTypeFont { } } - - - - public void drawString(String text, float x, float y, float scaleX, float scaleY, int format, int color) { int startIndex = 0; int endIndex = text.length() - 1; @@ -367,11 +395,7 @@ public class TrueTypeFont { if (intObject != null) { if (d < 0) totalWidth += (intObject.width - c) * d; - drawQuad((totalWidth + intObject.width) * scaleX + x, startY * scaleY + y, - totalWidth * scaleX + x, - (startY + intObject.height) * scaleY + y, intObject.storedX + intObject.width, - intObject.storedY + intObject.height, intObject.storedX, - intObject.storedY); + drawQuad((totalWidth + intObject.width) * scaleX + x, startY * scaleY + y, totalWidth * scaleX + x, (startY + intObject.height) * scaleY + y, intObject.storedX + intObject.width, intObject.storedY + intObject.height, intObject.storedX, intObject.storedY); if (d > 0) totalWidth += (intObject.width - c) * d; } else if (charCurrent == '\n') { startY += fontHeight * d; @@ -393,94 +417,7 @@ public class TrueTypeFont { i += d; } GlStateManager.disableBlend(); - GlStateManager.color(1f,1f,1f,1f); - } - - public static int loadImage(BufferedImage bufferedImage) { - try { - short width = (short) bufferedImage.getWidth(); - short height = (short) bufferedImage.getHeight(); - //textureLoader.bpp = bufferedImage.getColorModel().hasAlpha() ? (byte)32 : (byte)24; - int bpp = (byte) bufferedImage.getColorModel().getPixelSize(); - ByteBuffer byteBuffer; - DataBuffer db = bufferedImage.getData().getDataBuffer(); - if (db instanceof DataBufferInt) { - int[] intI = ((DataBufferInt) (bufferedImage.getData().getDataBuffer())).getData(); - byte[] newI = new byte[intI.length * 4]; - for (int i = 0; i < intI.length; i++) { - byte[] b = intToByteArray(intI[i]); - int newIndex = i * 4; - - newI[newIndex] = b[1]; - newI[newIndex + 1] = b[2]; - newI[newIndex + 2] = b[3]; - newI[newIndex + 3] = b[0]; - } - - byteBuffer = ByteBuffer.allocateDirect( - width * height * (bpp / 8)) - .order(ByteOrder.nativeOrder()) - .put(newI); - } else { - byteBuffer = ByteBuffer.allocateDirect( - width * height * (bpp / 8)) - .order(ByteOrder.nativeOrder()) - .put(((DataBufferByte) (bufferedImage.getData().getDataBuffer())).getData()); - } - byteBuffer.flip(); - - - int internalFormat = GL11.GL_RGBA8, - format = GL11.GL_RGBA; - IntBuffer textureId = BufferUtils.createIntBuffer(1); - - GL11.glGenTextures(textureId); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId.get(0)); - - - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); - - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); - - GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE); - - - GLU.gluBuild2DMipmaps(GL11.GL_TEXTURE_2D, - internalFormat, - width, - height, - format, - GL11.GL_UNSIGNED_BYTE, - byteBuffer); - return textureId.get(0); - - } catch (Exception e) { - e.printStackTrace(); - } - return -1; - } - - public static boolean isSupported(String fontname) { - Font[] font = getFonts(); - for (int i = font.length - 1; i >= 0; i--) { - if (font[i].getName().equalsIgnoreCase(fontname)) - return true; - } - return false; - } - - public static Font[] getFonts() { - return GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); - } - - public static byte[] intToByteArray(int value) { - return new byte[]{ - (byte) (value >>> 24), - (byte) (value >>> 16), - (byte) (value >>> 8), - (byte) value}; + GlStateManager.color(1f, 1f, 1f, 1f); } public void destroy() { @@ -489,4 +426,26 @@ public class TrueTypeFont { GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); GL11.glDeleteTextures(scratch); } + + private static class IntObject { + /** + * Character's width + */ + public int width; + + /** + * Character's height + */ + public int height; + + /** + * Character's stored x position + */ + public int storedX; + + /** + * Character's stored y position + */ + public int storedY; + } } diff --git a/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java b/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java index 4729d6c..a2e96d4 100644 --- a/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java +++ b/src/main/java/io/polyfrost/oneconfig/themes/textures/TextureManager.java @@ -46,7 +46,7 @@ public class TextureManager { if (img.getWidth() != element.size) { themeLog.warn("Theme element " + element.name() + " with size " + img.getWidth() + "px is not recommended, expected " + element.size + "px. Continuing anyway."); } - if(element.ordinal() < 26) { + if (element.ordinal() < 26) { if (img.getWidth() != img.getHeight()) { themeLog.info("found tickable animated texture (" + element.name() + "). Loading texture"); try { @@ -57,8 +57,8 @@ public class TextureManager { } } } else { - if(element.ordinal() < 29) { - if(img.getHeight() != 144 || img.getWidth() != 758) { + if (element.ordinal() < 29) { + if (img.getHeight() != 144 || img.getWidth() != 758) { themeLog.warn("found badly sized button texture " + element.location); } } @@ -102,9 +102,10 @@ public class TextureManager { /** * Draw the specified {@link ThemeElement} at the coordinates, using its recommended width and height. + * * @param element element to draw - * @param x x coordinate (top left) - * @param y y coordinate (top left) + * @param x x coordinate (top left) + * @param y y coordinate (top left) */ public void draw(@NotNull ThemeElement element, int x, int y) { this.draw(element, x, y, element.size, element.size); diff --git a/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java b/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java index e825be9..5fe1242 100644 --- a/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java +++ b/src/main/java/io/polyfrost/oneconfig/themes/textures/TickableTexture.java @@ -2,7 +2,6 @@ package io.polyfrost.oneconfig.themes.textures; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import io.polyfrost.oneconfig.themes.textures.ThemeElement; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.GlStateManager; @@ -23,10 +22,10 @@ public class TickableTexture { private final int framesToSkip; private final BufferedImage image; private final int sizeX, sizeY, frames; - private int tick; - private int tick2; private final ThemeElement thisElement; private final ResourceLocation location; + private int tick; + private int tick2; public TickableTexture(ThemeElement element) throws IOException { thisElement = element; @@ -53,7 +52,7 @@ public class TickableTexture { public void draw(int x, int y) { GlStateManager.enableBlend(); - GlStateManager.color(1f,1f,1f,1f); + GlStateManager.color(1f, 1f, 1f, 1f); Minecraft.getMinecraft().getTextureManager().bindTexture(location); if (tick < frames) { Gui.drawModalRectWithCustomSizedTexture(x, y, 0, (tick * sizeX), sizeX, sizeX, sizeX, sizeX); diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 6853723..08837c9 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -1,10 +1,10 @@ [ { - "modid": "oneconfig", - "name": "OneConfig", + "modid": "${id}", + "name": "${name}", "description": "OneConfig", "version": "${version}", - "mcversion": "${mcversion}", + "mcversion": "1.8.9", "url": "", "updateUrl": "", "authorList": [ -- cgit