aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java')
-rw-r--r--src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java197
1 files changed, 197 insertions, 0 deletions
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 774d936..7a5c8f3 100644
--- a/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java
+++ b/src/main/java/io/polyfrost/oneconfig/gui/elements/OCBlock.java
@@ -1,4 +1,201 @@
package io.polyfrost.oneconfig.gui.elements;
+import io.polyfrost.oneconfig.renderer.Renderer;
+import io.polyfrost.oneconfig.themes.Theme;
+import io.polyfrost.oneconfig.themes.ThemeElement;
+import io.polyfrost.oneconfig.themes.Themes;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import org.jetbrains.annotations.NotNull;
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.input.Mouse;
+
+import java.awt.*;
+
+@SuppressWarnings("unused")
public class OCBlock {
+ private static final Theme theme = Themes.getActiveTheme();
+ private static final Minecraft mc = Minecraft.getMinecraft();
+ public static ScaledResolution resolution = new ScaledResolution(mc);
+ private Color color;
+ private String text;
+ private final boolean bold;
+ private int width, height;
+ private ThemeElement element;
+ private boolean clicked = false;
+ private boolean rightClicked = false;
+ private int mouseX, mouseY;
+ private boolean hovered;
+ private int x, y;
+
+ /**
+ * Create a new basic element.
+ * @param color color of the element
+ * @param width width of the element
+ * @param height height of the element
+ */
+ public OCBlock(int color, int width, int height) {
+ this(null, false, color, width, height);
+ }
+
+ /**
+ * 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
+ */
+ public OCBlock(@NotNull String text, boolean bold, int color) {
+ this(text, bold, color, theme.getFont().getWidth(text) + 6, theme.getFont().getHeight() + 4);
+ }
+
+ /**
+ * 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
+ */
+ public OCBlock(String text, boolean bold, int color, int width, int height) {
+ this.text = text;
+ this.bold = bold;
+ this.color = Renderer.getColorFromInt(color);
+ this.width = width;
+ this.height = height;
+ }
+
+ /**
+ * Create a new Element with the specified image.
+ * @param element element to use
+ * @param colorMask color mast to use (-1 for default)
+ */
+ public OCBlock(ThemeElement element, int colorMask, int width, int height) {
+ this.element = element;
+ this.color = Renderer.getColorFromInt(colorMask);
+ this.width = width;
+ this.height = height;
+ this.bold = false;
+ }
+
+ /**
+ * Draw the element at the specified coordinates.
+ */
+ public void draw(int x, int y) {
+ this.x = x;
+ this.y = y;
+ if(element != null) {
+ Gui.drawRect(x, y, x + width, y + height, color.getRGB());
+ 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());
+ }
+ else {
+ Gui.drawRect(x, y, x + width, y + height, color.getRGB());
+ if(bold) {
+ theme.getBoldFont().drawString(text, x + 3, y + 2, 1f, 1f, -1);
+ } else {
+ theme.getFont().drawString(text, x + 3, y + 2, 1.1f, 1f, -1);
+ }
+ }
+
+ }
+
+ /**
+ * Update this elements click, key and hover status. Call this method at the end of your 'draw' function, if overrided.
+ */
+ public void update() {
+ resolution = new ScaledResolution(mc);
+ 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) {
+ onHover();
+ if (Mouse.isButtonDown(0) && !clicked) {
+ onClick(0);
+ }
+ clicked = Mouse.isButtonDown(0);
+
+ if (Mouse.isButtonDown(1) && !rightClicked) {
+ onClick(1);
+ }
+ rightClicked = Mouse.isButtonDown(1);
+ onKeyPress(Keyboard.getEventKey());
+ }
+ }
+
+ /**
+ * Draw the element with the specified coordinates, width and height.
+ */
+ public void draw(int x, int y, int width, int height) {
+ this.width = width;
+ this.height = height;
+ draw(x, y);
+ }
+
+
+ /**
+ * 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) {
+
+ }
+
+ /**
+ * 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) {
+
+ }
+
+
+ /**
+ * Override this method to set a function when the element is hovered.
+ */
+ public void onHover() {
+
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public Color getColor() {
+ return color;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setColor(Color color) {
+ this.color = color;
+ }
+
+ public boolean isHovered() {
+ return hovered;
+ }
+
+ public boolean isClicked() {
+ return clicked;
+ }
}