diff options
Diffstat (limited to 'src/main/java/io')
5 files changed, 150 insertions, 52 deletions
diff --git a/src/main/java/io/polyfrost/oneconfig/OneConfig.java b/src/main/java/io/polyfrost/oneconfig/OneConfig.java index 6f58f52..1816427 100644 --- a/src/main/java/io/polyfrost/oneconfig/OneConfig.java +++ b/src/main/java/io/polyfrost/oneconfig/OneConfig.java @@ -1,6 +1,7 @@ package io.polyfrost.oneconfig; import io.polyfrost.oneconfig.command.OneConfigCommand; +import io.polyfrost.oneconfig.themes.Themes; import net.minecraft.client.Minecraft; import net.minecraftforge.client.ClientCommandHandler; import net.minecraftforge.common.MinecraftForge; @@ -29,5 +30,6 @@ public class OneConfig { public void onFMLInitialization(FMLInitializationEvent event) { ClientCommandHandler.instance.registerCommand(new OneConfigCommand()); MinecraftForge.EVENT_BUS.register(this); + Themes.openTheme(new File("C:\\Users\\Harry\\Documents\\Coding\\Minecraft\\Forge1.8.9\\OneConfig\\run\\OneConfig\\Themes\\one.zip")); } } diff --git a/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java b/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java index 3433c56..d462c5e 100644 --- a/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java +++ b/src/main/java/io/polyfrost/oneconfig/command/OneConfigCommand.java @@ -1,14 +1,17 @@ package io.polyfrost.oneconfig.command; import io.polyfrost.oneconfig.gui.Window; +import io.polyfrost.oneconfig.themes.Themes; import io.polyfrost.oneconfig.utils.TickDelay; import net.minecraft.client.Minecraft; import net.minecraft.command.CommandException; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; import net.minecraft.util.BlockPos; +import net.minecraft.util.ChatComponentText; import org.jetbrains.annotations.NotNull; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -41,6 +44,10 @@ public class OneConfigCommand implements ICommand { @Override public void processCommand(ICommandSender sender, String[] args) throws CommandException { new TickDelay(() -> mc.displayGuiScreen(new Window()), 1); + if(args != null) { + mc.thePlayer.addChatMessage(new ChatComponentText("hi")); + Themes.openTheme(new File("C:\\Users\\Harry\\Documents\\Coding\\Minecraft\\Forge1.8.9\\OneConfig\\run\\OneConfig\\Themes\\one.zip")); + } } @Override diff --git a/src/main/java/io/polyfrost/oneconfig/gui/Window.java b/src/main/java/io/polyfrost/oneconfig/gui/Window.java index ed4e0cd..c15356c 100644 --- a/src/main/java/io/polyfrost/oneconfig/gui/Window.java +++ b/src/main/java/io/polyfrost/oneconfig/gui/Window.java @@ -1,19 +1,20 @@ package io.polyfrost.oneconfig.gui; import io.polyfrost.oneconfig.renderer.Renderer; +import io.polyfrost.oneconfig.themes.Theme; +import io.polyfrost.oneconfig.themes.Themes; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ResourceLocation; import java.awt.*; +import static io.polyfrost.oneconfig.renderer.Renderer.clamp; import static io.polyfrost.oneconfig.renderer.Renderer.easeOut; public class Window extends GuiScreen { - private static ResourceLocation location = new ResourceLocation("oneconfig", "textures/hudsettings128.png"); private float currentProgress = 0f; public static Window currentWindow; + private final Theme t = Themes.getActiveTheme(); public Window() { super.initGui(); @@ -26,15 +27,30 @@ public class Window extends GuiScreen { public void drawScreen(int mouseX, int mouseY, float partialTicks) { super.drawScreen(mouseX, mouseY, partialTicks); - currentProgress = easeOut(currentProgress, 1f); + currentProgress = clamp(easeOut(currentProgress, 1f)); int alphaVal = (int) (50 * currentProgress); - //drawGradientRect(0, 0, super.width, super.height, new Color(80, 80, 80, alphaVal).getRGB(), new Color(80, 80, 80, alphaVal + 10).getRGB()); + drawGradientRect(0, 0, super.width, super.height, new Color(80, 80, 80, alphaVal).getRGB(), new Color(80, 80, 80, alphaVal + 10).getRGB()); drawWindow(); } public void drawWindow() { - + Color testingColor = new Color(127, 144, 155, 255); + //System.out.println(testingColor.getRGB()); + int middleX = this.width / 2; + int middleY = this.height / 2; + int left = middleX - 600; + int right = (int) (left + 1200 * currentProgress); + int top = middleY - 350; + int bottom = (int) (top + 700 * currentProgress); + Gui.drawRect(left -1, top - 1, right + 1, bottom + 1, testingColor.getRGB()); + Gui.drawRect(left,top,right,bottom,t.getBaseColor().getRGB()); + + Gui.drawRect(left, top, right, top + 100, t.getTitleBarColor().getRGB()); + Gui.drawRect(left, top + 100, right, top + 101, testingColor.getRGB()); + + //ResourceLocation location = mc.getRenderManager().renderEngine.getDynamicTextureLocation("oneconfig",new DynamicTexture(ImageIO.read(t.getResource("assets/textures/icons/hudsettings128.png")))); + Renderer.drawScaledImage(t.getIcons(), left + 10, top + 10, 128, 1152); } public static Window getWindow() { diff --git a/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java b/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java index 19d8710..f8612b7 100644 --- a/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java +++ b/src/main/java/io/polyfrost/oneconfig/renderer/Renderer.java @@ -3,6 +3,7 @@ package io.polyfrost.oneconfig.renderer; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; import java.awt.*; @@ -15,12 +16,16 @@ public class Renderer extends Gui { Gui.drawRect(left, top, right, bottom, color); } - public static void drawString(String text, int x, int y, int color, boolean shadow) { - fr.drawString(text, x, y, color, shadow); + public static void drawTextScale(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); + GlStateManager.popMatrix(); } public static void drawScaledImage(ResourceLocation location, int x, int y, int targetX, int targetY) { - //GlStateManager.color(1f, 1f, 1f, 1f); + GlStateManager.enableBlend(); + GlStateManager.color(1f, 1f, 1f, 1f); mc.getTextureManager().bindTexture(location); Gui.drawScaledCustomSizeModalRect(x, y, 0, 0, targetX, targetY, targetX, targetY, targetX, targetY); } @@ -29,6 +34,9 @@ public class Renderer extends Gui { } + public static float clamp(float number) { + return number < (float) 0.0 ? (float) 0.0 : Math.min(number, (float) 1.0); + } public static float easeOut(float current, float goal) { if (Math.floor(Math.abs(goal - current) / (float) 0.01) > 0) { diff --git a/src/main/java/io/polyfrost/oneconfig/themes/Theme.java b/src/main/java/io/polyfrost/oneconfig/themes/Theme.java index 59b5767..a9b31a9 100644 --- a/src/main/java/io/polyfrost/oneconfig/themes/Theme.java +++ b/src/main/java/io/polyfrost/oneconfig/themes/Theme.java @@ -4,11 +4,16 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import io.polyfrost.oneconfig.renderer.Renderer; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.resources.FileResourcePack; +import net.minecraft.util.ResourceLocation; +import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.util.ArrayList; +import java.util.List; @SuppressWarnings("unused") public class Theme extends FileResourcePack { @@ -17,6 +22,20 @@ public class Theme extends FileResourcePack { private static final Minecraft mc = Minecraft.getMinecraft(); private final JsonObject packMetadata; private final JsonObject packConfig; + private final Color accentColor; + private final Color elementColor; + private final Color titleBarColor; + private final Color baseColor; + private final Color hoverColor; + private final Color clickColor; + private final Color closeColor; + private final Color titleColor; + private final Color subTitleColor; + private final boolean roundCorners; + private final String description; + private final String title; + private final int version; + private final ResourceLocation iconsLoc; /** * Create a new theme instance for the window. @@ -35,6 +54,34 @@ public class Theme extends FileResourcePack { unpackConfig(); } packConfig = new JsonParser().parse(new FileReader(themeConfigFile)).getAsJsonObject(); + JsonObject colors = packConfig.getAsJsonObject("colors"); + accentColor = Renderer.getColorFromInt(colors.get("accent_color").getAsInt()); + baseColor = Renderer.getColorFromInt(colors.get("base_color").getAsInt()); + titleBarColor = Renderer.getColorFromInt(colors.get("title_bar").getAsInt()); + elementColor = Renderer.getColorFromInt(colors.get("element_color").getAsInt()); + clickColor = Renderer.getColorFromInt(colors.get("click_color").getAsInt()); + closeColor = Renderer.getColorFromInt(colors.get("close_color").getAsInt()); + titleColor = Renderer.getColorFromInt(colors.get("title_color").getAsInt()); + hoverColor = Renderer.getColorFromInt(colors.get("hover_color").getAsInt()); + subTitleColor = Renderer.getColorFromInt(colors.get("subtitle_color").getAsInt()); + roundCorners = packConfig.get("round_corners").getAsBoolean(); + String title, description; + int version; + try { + title = packMetadata.get("name").getAsString(); + description = packMetadata.get("description").getAsString(); + version = packMetadata.get("version").getAsInt(); + } catch (Exception e) { + title = "null"; + description = "no valid pack.json found!"; + version = -1; + Themes.themeLog.error("pack has invalid metadata! Using default values."); + } + this.title = title; + this.description = description; + this.version = version; + + iconsLoc = createIconAtlas(); } /** @@ -55,75 +102,101 @@ public class Theme extends FileResourcePack { } + // TIME CALC + // long start = System.nanoTime(); + // System.out.println(((float) (System.nanoTime() - start)) / 1000000f + "ms"); + + /** + * Create the large icon atlas from this theme. + */ + private ResourceLocation createIconAtlas() { // TODO finish for all atlases + try { + List<BufferedImage> icons = new ArrayList<>(); + BufferedImage out = new BufferedImage(128, 1152, BufferedImage.TYPE_INT_ARGB); + Graphics2D graphics2D = out.createGraphics(); + int i = 0; + icons.add(ImageIO.read(getResource("textures/icons/discord.png"))); + icons.add(ImageIO.read(getResource("textures/icons/docs.png"))); + icons.add(ImageIO.read(getResource("textures/icons/feedback.png"))); + icons.add(ImageIO.read(getResource("textures/icons/guide.png"))); + icons.add(ImageIO.read(getResource("textures/icons/hudsettings.png"))); + icons.add(ImageIO.read(getResource("textures/icons/modsettings.png"))); + icons.add(ImageIO.read(getResource("textures/icons/store.png"))); + icons.add(ImageIO.read(getResource("textures/icons/themes.png"))); + icons.add(ImageIO.read(getResource("textures/icons/update.png"))); + for (BufferedImage img : icons) { + graphics2D.drawImage(img, null, 0, i); + i += 128; + } + graphics2D.dispose(); + return mc.getTextureManager().getDynamicTextureLocation("OneConfigIconAtlas", new DynamicTexture(out)); + } catch (Exception e) { + Themes.themeLog.error("Failed to create large icon atlas", e); + return null; + } + } + + + /** * Get the accent color for the window, used on separators, lines, etc. */ public Color getAccentColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("accent_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return accentColor; } /** * Get the base color for the window, used for the main background. */ public Color getBaseColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("base_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return baseColor; + } + /** + * Get the color used for the title bar. + */ + public Color getTitleBarColor() { + return titleBarColor; } /** * Get the base color for the buttons, items, and most elements. */ public Color getElementColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("element_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return elementColor; } /** * Get the accent color for elements when they are hovered. */ public Color getHoverColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("hover_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return hoverColor; } /** * Get the accent color for elements when they are clicked. */ public Color getClickColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("click_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return clickColor; } /** * Get the color for the close/destroy buttons. */ public Color getCloseColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("base_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return closeColor; } /** * Get the color for the main text, like titles, config element items, etc. */ public Color getTextColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("title_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return titleColor; } /** * Get the accent color for the text, used for subtitles, etc. */ public Color getAccentTextColor() { - JsonObject colors = packConfig.getAsJsonObject("colors"); - int accentColor = colors.get("subtitle_color").getAsInt(); - return Renderer.getColorFromInt(accentColor); + return subTitleColor; } /** * Weather or not to round off the corners of pretty much every element. */ public boolean shouldRoundCorners() { - return packConfig.get("round_corners").getAsBoolean(); + return roundCorners; } @@ -154,24 +227,14 @@ public class Theme extends FileResourcePack { * Get the pack's description. */ public String getDescription() { - try { - return packMetadata.get("description").getAsString(); - } catch (Exception e) { - Themes.themeLog.error("Failed to get pack name. Defaulting to 'error occurred', is pack invalid??"); - } - return "Couldn't get description!"; + return description; } /** * Get the friendly name of the pack. */ public String getName() { - try { - return packMetadata.get("name").getAsString(); - } catch (Exception e) { - Themes.themeLog.error("Failed to get pack name. Defaulting to 'null', is pack invalid??"); - } - return "null"; + return title; } @@ -189,15 +252,17 @@ public class Theme extends FileResourcePack { } /** + * Get the large icon atlas. + */ + public ResourceLocation getIcons() { + return iconsLoc; + } + + /** * Get the pack's version. Not used yet, but will be when more features are added for theme compatability. */ public int getVersion() { - try { - return packMetadata.get("version").getAsInt(); - } catch (Exception e) { - Themes.themeLog.error("Failed to get pack version. Is pack invalid?"); - } - return 0; + return version; } /** |