diff --git a/.idea/misc.xml b/.idea/misc.xml
index 1cf85c6..9dbe40a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/libs/LWJGL-Patched-bf1d105853.jar b/libs/LWJGL-Patched-bf1d105853.jar
new file mode 100644
index 0000000..99b15f7
Binary files /dev/null and b/libs/LWJGL-Patched-bf1d105853.jar differ
diff --git a/libs/LegacyLauncher-ac106bbe00.jar b/libs/LegacyLauncher-ac106bbe00.jar
new file mode 100644
index 0000000..048cf04
Binary files /dev/null and b/libs/LegacyLauncher-ac106bbe00.jar differ
diff --git a/libs/lwjgl-nanovg-natives-macos-arm64.jar b/libs/lwjgl-nanovg-natives-macos-arm64.jar
new file mode 100644
index 0000000..4101b51
Binary files /dev/null and b/libs/lwjgl-nanovg-natives-macos-arm64.jar differ
diff --git a/libs/lwjgl-nanovg-natives-macos.jar b/libs/lwjgl-nanovg-natives-macos.jar
new file mode 100644
index 0000000..ef18e0a
Binary files /dev/null and b/libs/lwjgl-nanovg-natives-macos.jar differ
diff --git a/libs/lwjgl-nanovg-natives-windows-x86.jar b/libs/lwjgl-nanovg-natives-windows-x86.jar
new file mode 100644
index 0000000..d3a902f
Binary files /dev/null and b/libs/lwjgl-nanovg-natives-windows-x86.jar differ
diff --git a/libs/lwjgl-nanovg-natives-windows.jar b/libs/lwjgl-nanovg-natives-windows.jar
new file mode 100644
index 0000000..9d16c15
Binary files /dev/null and b/libs/lwjgl-nanovg-natives-windows.jar differ
diff --git a/libs/lwjgl-natives-macos-arm64.jar b/libs/lwjgl-natives-macos-arm64.jar
new file mode 100644
index 0000000..4734724
Binary files /dev/null and b/libs/lwjgl-natives-macos-arm64.jar differ
diff --git a/libs/lwjgl-natives-macos.jar b/libs/lwjgl-natives-macos.jar
new file mode 100644
index 0000000..9e66402
Binary files /dev/null and b/libs/lwjgl-natives-macos.jar differ
diff --git a/libs/lwjgl-natives-windows-x86.jar b/libs/lwjgl-natives-windows-x86.jar
new file mode 100644
index 0000000..0b3c670
Binary files /dev/null and b/libs/lwjgl-natives-windows-x86.jar differ
diff --git a/libs/lwjgl-natives-windows.jar b/libs/lwjgl-natives-windows.jar
new file mode 100644
index 0000000..b4d4691
Binary files /dev/null and b/libs/lwjgl-natives-windows.jar differ
diff --git a/libs/lwjgl-stb-natives-macos-arm64.jar b/libs/lwjgl-stb-natives-macos-arm64.jar
new file mode 100644
index 0000000..22015e8
Binary files /dev/null and b/libs/lwjgl-stb-natives-macos-arm64.jar differ
diff --git a/libs/lwjgl-stb-natives-macos.jar b/libs/lwjgl-stb-natives-macos.jar
new file mode 100644
index 0000000..eaffd91
Binary files /dev/null and b/libs/lwjgl-stb-natives-macos.jar differ
diff --git a/libs/lwjgl-stb-natives-windows-x86.jar b/libs/lwjgl-stb-natives-windows-x86.jar
new file mode 100644
index 0000000..be4d378
Binary files /dev/null and b/libs/lwjgl-stb-natives-windows-x86.jar differ
diff --git a/libs/lwjgl-stb-natives-windows.jar b/libs/lwjgl-stb-natives-windows.jar
new file mode 100644
index 0000000..6cd6512
Binary files /dev/null and b/libs/lwjgl-stb-natives-windows.jar differ
diff --git a/libs/lwjgl-tinyfd-natives-macos-arm64.jar b/libs/lwjgl-tinyfd-natives-macos-arm64.jar
new file mode 100644
index 0000000..ca263bd
Binary files /dev/null and b/libs/lwjgl-tinyfd-natives-macos-arm64.jar differ
diff --git a/libs/lwjgl-tinyfd-natives-macos.jar b/libs/lwjgl-tinyfd-natives-macos.jar
new file mode 100644
index 0000000..eb82127
Binary files /dev/null and b/libs/lwjgl-tinyfd-natives-macos.jar differ
diff --git a/libs/lwjgl-tinyfd-natives-windows-x86.jar b/libs/lwjgl-tinyfd-natives-windows-x86.jar
new file mode 100644
index 0000000..5617ab3
Binary files /dev/null and b/libs/lwjgl-tinyfd-natives-windows-x86.jar differ
diff --git a/libs/lwjgl-tinyfd-natives-windows.jar b/libs/lwjgl-tinyfd-natives-windows.jar
new file mode 100644
index 0000000..5b5ab96
Binary files /dev/null and b/libs/lwjgl-tinyfd-natives-windows.jar differ
diff --git a/src/main/java/me/djtheredstoner/lwjgl/Lwjgl2FunctionProvider.java b/src/main/java/me/djtheredstoner/lwjgl/Lwjgl2FunctionProvider.java
new file mode 100644
index 0000000..03da68a
--- /dev/null
+++ b/src/main/java/me/djtheredstoner/lwjgl/Lwjgl2FunctionProvider.java
@@ -0,0 +1,35 @@
+package me.djtheredstoner.lwjgl;
+
+import org.lwjgl.opengl.GLContext;
+import org.lwjgl.system.FunctionProvider;
+
+import java.lang.reflect.Method;
+import java.nio.ByteBuffer;
+
+public class Lwjgl2FunctionProvider implements FunctionProvider {
+
+ private final Method m_getFunctionAddress;
+
+ public Lwjgl2FunctionProvider() {
+ try {
+ m_getFunctionAddress = GLContext.class.getDeclaredMethod("getFunctionAddress", String.class);
+ m_getFunctionAddress.setAccessible(true);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public long getFunctionAddress(CharSequence functionName) {
+ try {
+ return (long) m_getFunctionAddress.invoke(null, functionName.toString());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public long getFunctionAddress(ByteBuffer byteBuffer) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/main/java/net/silentclient/client/Client.java b/src/main/java/net/silentclient/client/Client.java
index 2cecb30..27da48b 100644
--- a/src/main/java/net/silentclient/client/Client.java
+++ b/src/main/java/net/silentclient/client/Client.java
@@ -34,6 +34,7 @@ import net.silentclient.client.mods.settings.GeneralMod;
import net.silentclient.client.mods.util.PingSource;
import net.silentclient.client.mods.util.Server;
import net.silentclient.client.mods.util.Utils;
+import net.silentclient.client.nanovg.UI;
import net.silentclient.client.premium.PremiumCosmeticsGui;
import net.silentclient.client.premium.PremiumUtils;
import net.silentclient.client.skillissue.SkillIssue;
@@ -278,6 +279,8 @@ public class Client {
Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation(mod.getIcon()));
}
});
+ logger.info("STARTING > ui");
+ UI.init();
logger.info("STARTING > servers");
ArrayList servers = FeaturedServers.get();
featuredServers.clear();
diff --git a/src/main/java/net/silentclient/client/gui/elements/HSBPicker.java b/src/main/java/net/silentclient/client/gui/elements/HSBPicker.java
new file mode 100644
index 0000000..caa2615
--- /dev/null
+++ b/src/main/java/net/silentclient/client/gui/elements/HSBPicker.java
@@ -0,0 +1,276 @@
+package net.silentclient.client.gui.elements;
+
+import net.minecraft.client.gui.Gui;
+import net.silentclient.client.gui.animation.SimpleAnimation;
+import net.silentclient.client.gui.lite.clickgui.utils.RenderUtils;
+import net.silentclient.client.gui.util.RenderUtil;
+import org.lwjgl.opengl.GL11;
+
+import java.awt.*;
+
+public class HSBPicker extends Gui {
+ public float[] color;
+ private boolean pickingColor;
+ private boolean pickingHue;
+ private boolean pickingAlpha;
+ private int pickerX, pickerY, pickerWidth, pickerHeight;
+ private int hueSliderX, hueSliderY, hueSliderWidth, hueSliderHeight;
+ private int alphaSliderX, alphaSliderY, alphaSliderWidth, alphaSliderHeight;
+ private boolean rainbowState = false;
+ private final int x, y, width, height;
+ private int selectedColorFinal = -1;
+ private Color selectedColorFinalAsColor;
+ public int cursorX;
+ public int cursorY;
+ public boolean alphaSlider = true;
+
+ public String text;
+ public SimpleAnimation sx = new SimpleAnimation(0f);
+ public SimpleAnimation sy = new SimpleAnimation(0f);
+
+ public HSBPicker(int x, int y, int width, int height, boolean alphaSlider, String text) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ this.color = new float[]{0.4f, 1.0f, 1.0f, 1.0f};
+ this.pickingColor = false;
+ this.alphaSlider = alphaSlider;
+ this.text = text;
+ }
+
+ public void init() {
+ this.pickerWidth = width;
+ this.pickerHeight = height;
+ this.pickerX = x;
+ this.pickerY = y;
+ this.hueSliderX = pickerX;
+ this.hueSliderY = pickerY + pickerHeight + 6;
+ this.hueSliderWidth = pickerWidth;
+ this.hueSliderHeight = 6;
+ this.alphaSliderX = pickerX + pickerWidth + 6;
+ this.alphaSliderY = pickerY;
+ this.alphaSliderWidth = 6;
+ this.alphaSliderHeight = pickerHeight;
+ }
+
+ public void render(int mouseX, int mouseY) {
+ if (this.rainbowState) {
+ double rainbowState = Math.ceil((System.currentTimeMillis() + 200) / 20.0);
+ rainbowState %= 360.0;
+ this.color[0] = (float) (rainbowState / 360.0);
+ }
+ if (this.pickingHue) {
+ if (this.hueSliderWidth > this.hueSliderHeight) {
+ float restrictedX = (float) Math.min(Math.max(hueSliderX, mouseX), hueSliderX + hueSliderWidth);
+ this.color[0] = (restrictedX - (float) hueSliderX) / hueSliderWidth;
+ } else {
+ float restrictedY = (float) Math.min(Math.max(hueSliderY, mouseY), hueSliderY + hueSliderHeight);
+ this.color[0] = (restrictedY - (float) hueSliderY) / hueSliderHeight;
+ }
+ }
+ if (this.pickingAlpha) {
+ if (this.alphaSliderWidth > this.alphaSliderHeight) {
+ float restrictedX = (float) Math.min(Math.max(alphaSliderX, mouseX), alphaSliderX + alphaSliderWidth);
+ this.color[3] = 1 - (restrictedX - (float) alphaSliderX) / alphaSliderWidth;
+ } else {
+ float restrictedY = (float) Math.min(Math.max(alphaSliderY, mouseY), alphaSliderY + alphaSliderHeight);
+ this.color[3] = 1 - (restrictedY - (float) alphaSliderY) / alphaSliderHeight;
+ }
+ }
+ if (this.pickingColor) {
+ float restrictedX = (float) Math.min(Math.max(pickerX, mouseX), pickerX + pickerWidth);
+ float restrictedY = (float) Math.min(Math.max(pickerY, mouseY), pickerY + pickerHeight);
+ this.color[1] = (restrictedX - (float) pickerX) / pickerWidth;
+ this.color[2] = 1 - (restrictedY - (float) pickerY) / pickerHeight;
+ }
+ int selectedX = pickerX + pickerWidth + 6;
+ int selectedY = pickerY + pickerHeight + 6;
+ int selectedWidth = 6;
+ int selectedHeight = 6;
+ Gui.drawRect(pickerX - 1, pickerY - 1, pickerX + pickerWidth + 1, pickerY + pickerHeight + 1, new Color(0, 0, 0, 0).getRGB());
+ Gui.drawRect(hueSliderX - 1, hueSliderY - 1, hueSliderX + hueSliderWidth + 1, hueSliderY + hueSliderHeight + 1, new Color(0, 0, 0, 0).getRGB());
+ Gui.drawRect(alphaSliderX - 1, alphaSliderY - 1, alphaSliderX + alphaSliderWidth + 1, alphaSliderY + alphaSliderHeight + 1, new Color(0, 0, 0, 0).getRGB());
+ int selectedColor = Color.HSBtoRGB(this.color[0], 1.0f, 1.0f);
+ float selectedRed = (selectedColor >> 16 & 0xFF) / 255.0f;
+ float selectedGreen = (selectedColor >> 8 & 0xFF) / 255.0f;
+ float selectedBlue = (selectedColor & 0xFF) / 255.0f;
+
+ this.drawPickerBase(pickerX, pickerY, pickerWidth, pickerHeight, selectedRed, selectedGreen, selectedBlue, 255);
+ this.drawHueSlider(hueSliderX, hueSliderY, hueSliderWidth, hueSliderHeight, this.color[0]);
+ if (alphaSlider) {
+ this.drawAlphaSlider(alphaSliderX, alphaSliderY, alphaSliderWidth, alphaSliderHeight, selectedRed, selectedGreen, selectedBlue, this.color[3]);
+ }
+
+ selectedColorFinal = alpha(new Color(Color.HSBtoRGB(this.color[0], this.color[1], this.color[2])), this.color[3]);
+ selectedColorFinalAsColor = color(new Color(Color.HSBtoRGB(this.color[0], this.color[1], this.color[2])), this.color[3]);
+
+ Gui.drawRect(selectedX - 1, selectedY - 1, selectedX + selectedWidth + 1, selectedY + selectedHeight + 1, new Color(0, 0, 0, 0).getRGB());
+ Gui.drawRect(selectedX, selectedY, selectedX + selectedWidth, selectedY + selectedHeight, selectedColorFinal);
+
+ cursorX = (int) (pickerX + color[1] * pickerWidth);
+ cursorY = (int) ((pickerY + pickerHeight) - color[2] * pickerHeight);
+
+ sx.setAnimation(cursorX, 25f);
+ sy.setAnimation(cursorY, 25f);
+
+ RenderUtils.drawRect(sx.getValue() - 1, sy.getValue() - 1, 2, 2, Color.WHITE.getRGB());
+ }
+
+ final int alpha(Color color, float alpha) {
+ final float red = (float) color.getRed() / 255;
+ final float green = (float) color.getGreen() / 255;
+ final float blue = (float) color.getBlue() / 255;
+ return new Color(red, green, blue, alpha).getRGB();
+ }
+
+ final Color color(Color color, float alpha) {
+ final float red = (float) color.getRed() / 255;
+ final float green = (float) color.getGreen() / 255;
+ final float blue = (float) color.getBlue() / 255;
+ return new Color(red, green, blue, alpha);
+ }
+
+ public void mouseClicked(int mouseX, int mouseY, int mouseButton) {
+ this.pickingColor = check(pickerX, pickerY, pickerX + pickerWidth, pickerY + pickerHeight, mouseX, mouseY);
+ this.pickingHue = check(hueSliderX, hueSliderY, hueSliderX + hueSliderWidth, hueSliderY + hueSliderHeight, mouseX, mouseY);
+ if (alphaSlider) {
+ this.pickingAlpha = check(alphaSliderX, alphaSliderY, alphaSliderX + alphaSliderWidth, alphaSliderY + alphaSliderHeight, mouseX, mouseY);
+ }
+ }
+
+ public void mouseReleased(int mouseX, int mouseY, int state) {
+ this.pickingColor = this.pickingHue = this.pickingAlpha = false;
+ }
+
+ private void drawHueSlider(int x, int y, int width, int height, float hue) {
+ int step = 0;
+ if (height > width) {
+ Gui.drawRect(x, y, x + width, y + 4, 0xFFFF0000);
+ y += 4;
+ for (int colorIndex = 0; colorIndex < 6; colorIndex++) {
+ int previousStep = Color.HSBtoRGB((float) step / 6, 1.0f, 1.0f);
+ int nextStep = Color.HSBtoRGB((float) (step + 1) / 6, 1.0f, 1.0f);
+ this.drawGradientRect(x, y + step * (height / 6), x + width, y + (step + 1) * (height / 6), previousStep, nextStep);
+ step++;
+ }
+ final int sliderMinY = (int) (y + (height * hue)) - 4;
+ Gui.drawRect(x, sliderMinY - 1, x + width, sliderMinY + 1, -1);
+ } else {
+ for (int colorIndex = 0; colorIndex < 6; colorIndex++) {
+ int previousStep = Color.HSBtoRGB((float) step / 6, 1.0f, 1.0f);
+ int nextStep = Color.HSBtoRGB((float) (step + 1) / 6, 1.0f, 1.0f);
+ this.gradient(x + step * (width / 6), y, x + (step + 1) * (width / 6), y + height, previousStep, nextStep, true);
+ step++;
+ }
+ final int sliderMinX = (int) (x + (width * hue));
+ Gui.drawRect(sliderMinX - 1, y, sliderMinX, y + height, -1);
+ }
+ }
+
+ private void drawAlphaSlider(int x, int y, int width, int height, float red, float green, float blue, float alpha) {
+ boolean left = true;
+ int checkerBoardSquareSize = width / 2;
+ for (int squareIndex = -checkerBoardSquareSize; squareIndex < height; squareIndex += checkerBoardSquareSize) {
+ if (!left) {
+ Gui.drawRect(x, y + squareIndex, x + width, y + squareIndex + checkerBoardSquareSize, 0xFFFFFFFF);
+ Gui.drawRect(x + checkerBoardSquareSize, y + squareIndex, x + width, y + squareIndex + checkerBoardSquareSize, 0xFF909090);
+ if (squareIndex < height - checkerBoardSquareSize) {
+ int minY = y + squareIndex + checkerBoardSquareSize;
+ int maxY = Math.min(y + height, y + squareIndex + checkerBoardSquareSize * 2);
+ Gui.drawRect(x, minY, x + width, maxY, 0xFF909090);
+ Gui.drawRect(x + checkerBoardSquareSize, minY, x + width, maxY, 0xFFFFFFFF);
+ }
+ }
+ left = !left;
+ }
+ this.gradient(x, y, x + width, y + height, new Color((int)red, (int)green, (int)blue, 255).getRGB(), 0, false);
+ final int sliderMinY = (int) (y + height - (height * alpha));
+ Gui.drawRect(x, sliderMinY - 1, x + width, sliderMinY, -1);
+ }
+
+ private void drawPickerBase(int pickerX, int pickerY, int pickerWidth, int pickerHeight, float red, float green, float blue, float alpha) {
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glShadeModel(GL11.GL_SMOOTH);
+ GL11.glBegin(GL11.GL_POLYGON);
+ {
+ GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ GL11.glVertex2f(pickerX, pickerY);
+ GL11.glVertex2f(pickerX, pickerY + pickerHeight);
+ GL11.glColor4f(red, green, blue, alpha);
+ GL11.glVertex2f(pickerX + pickerWidth, pickerY + pickerHeight);
+ GL11.glVertex2f(pickerX + pickerWidth, pickerY);
+ }
+ GL11.glEnd();
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glBegin(GL11.GL_POLYGON);
+ {
+ GL11.glColor4f(0.0f, 0.0f, 0.0f, 0.0f);
+ GL11.glVertex2f(pickerX, pickerY);
+ GL11.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+ GL11.glVertex2f(pickerX, pickerY + pickerHeight);
+ GL11.glVertex2f(pickerX + pickerWidth, pickerY + pickerHeight);
+ GL11.glColor4f(0.0f, 0.0f, 0.0f, 0.0f);
+ GL11.glVertex2f(pickerX + pickerWidth, pickerY);
+ }
+ GL11.glEnd();
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+ GL11.glShadeModel(GL11.GL_FLAT);
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ GL11.glDisable(GL11.GL_BLEND);
+ }
+
+ protected void gradient(int minX, int minY, int maxX, int maxY, int startColor, int endColor, boolean left) {
+ if (left) {
+
+ final float startA = (startColor >> 24 & 0xFF) / 255.0f;
+ final float startR = (startColor >> 16 & 0xFF) / 255.0f;
+ final float startG = (startColor >> 8 & 0xFF) / 255.0f;
+ final float startB = (startColor & 0xFF) / 255.0f;
+
+ final float endA = (endColor >> 24 & 0xFF) / 255.0f;
+ final float endR = (endColor >> 16 & 0xFF) / 255.0f;
+ final float endG = (endColor >> 8 & 0xFF) / 255.0f;
+ final float endB = (endColor & 0xFF) / 255.0f;
+
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glShadeModel(GL11.GL_SMOOTH);
+ GL11.glBegin(GL11.GL_POLYGON);
+ {
+ GL11.glColor4f(startR, startG, startB, startA);
+ GL11.glVertex2f(minX, minY);
+ GL11.glVertex2f(minX, maxY);
+ GL11.glColor4f(endR, endG, endB, endA);
+ GL11.glVertex2f(maxX, maxY);
+ GL11.glVertex2f(maxX, minY);
+ }
+ GL11.glEnd();
+ GL11.glShadeModel(GL11.GL_FLAT);
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ GL11.glDisable(GL11.GL_BLEND);
+ } else drawGradientRect(minX, minY, maxX, maxY, startColor, endColor);
+ }
+
+ protected boolean check(int minX, int minY, int maxX, int maxY, int curX, int curY) {
+ return curX >= minX && curY >= minY && curX < maxX && curY < maxY;
+ }
+
+ public Color getSelectedColorFinal() {
+ return new Color(selectedColorFinal);
+ }
+
+ public void setFinalColor(Color color) {
+ float r = color.getRed() / 255.0F;
+ float g = color.getGreen() / 255.0F;
+ float b = color.getBlue() / 255.0F;
+ float a = color.getAlpha() / 255.0F;
+ this.color[0] = r;
+ this.color[1] = g;
+ this.color[2] = b;
+ this.color[3] = a;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/silentclient/client/gui/modmenu/CellGrid.java b/src/main/java/net/silentclient/client/gui/modmenu/CellGrid.java
index fce8217..ac0b81a 100644
--- a/src/main/java/net/silentclient/client/gui/modmenu/CellGrid.java
+++ b/src/main/java/net/silentclient/client/gui/modmenu/CellGrid.java
@@ -1,10 +1,12 @@
package net.silentclient.client.gui.modmenu;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+import net.silentclient.client.gui.elements.IconButton;
import net.silentclient.client.gui.lite.clickgui.utils.MouseUtils;
import net.silentclient.client.gui.lite.clickgui.utils.RenderUtils;
import net.silentclient.client.gui.util.RenderUtil;
import net.silentclient.client.mods.Setting;
-import org.lwjgl.input.Mouse;
import java.awt.*;
@@ -12,6 +14,11 @@ import java.awt.*;
* @author refactoring
*/
public class CellGrid {
+ private static IconButton trashBtn = new IconButton(0,0,0,new ResourceLocation("silentclient/icons/trash-icon.png"));
+
+ private static boolean rmb;
+ private static boolean lmb;
+
public static void render(float mouseX, float mouseY, float x, float y, Setting grid) {
for (int row = 0; row < 11; row++) {
for (int col = 0; col < 11; col++) {
@@ -25,14 +32,36 @@ public class CellGrid {
MouseUtils.isInside((int) mouseX, (int) mouseY, rx, ry, 11, 11) ? 0x20ffffff : 0x00ffffff
);
- if(MouseUtils.isInside((int) mouseX, (int) mouseY, rx, ry, 11, 11) && Mouse.isButtonDown(0)) {
+ if(MouseUtils.isInside((int) mouseX, (int) mouseY, rx, ry, 11, 11) && rmb) {
grid.getCells()[row][col] = true;
}
- if(MouseUtils.isInside((int) mouseX, (int) mouseY, rx, ry, 11, 11) && Mouse.isButtonDown(1)) {
+ if(MouseUtils.isInside((int) mouseX, (int) mouseY, rx, ry, 11, 11) && lmb) {
grid.getCells()[row][col] = false;
}
+
+ trashBtn.xPosition = (int)x;
+ trashBtn.yPosition = (int)y + 125;
+
+ trashBtn.drawButton(Minecraft.getMinecraft(), (int)mouseX, (int)mouseY);
}
}
}
+
+ public static void click(float mouseX, float mouseY, int btn, Setting setting) {
+ if(trashBtn.isMouseOver() && btn == 0) {
+ setting.setCells(new boolean[11][11]);
+ } else {
+ if(btn == 1) {
+ lmb = true;
+ } else if (btn == 0) {
+ rmb = true;
+ }
+ }
+ }
+
+ public static void release() {
+ lmb = false;
+ rmb = false;
+ }
}
diff --git a/src/main/java/net/silentclient/client/gui/modmenu/ColorPicker.java b/src/main/java/net/silentclient/client/gui/modmenu/ColorPicker.java
index ec78052..6e349e2 100644
--- a/src/main/java/net/silentclient/client/gui/modmenu/ColorPicker.java
+++ b/src/main/java/net/silentclient/client/gui/modmenu/ColorPicker.java
@@ -7,6 +7,7 @@ import net.silentclient.client.Client;
import net.silentclient.client.gui.SilentScreen;
import net.silentclient.client.gui.elements.Button;
import net.silentclient.client.gui.elements.Checkbox;
+import net.silentclient.client.gui.elements.HSBPicker;
import net.silentclient.client.gui.lite.clickgui.utils.MouseUtils;
import net.silentclient.client.gui.theme.button.DefaultButtonTheme;
import net.silentclient.client.gui.theme.button.SelectedButtonTheme;
@@ -14,6 +15,7 @@ import net.silentclient.client.gui.util.RenderUtil;
import net.silentclient.client.mods.Mod;
import net.silentclient.client.mods.ModCategory;
import net.silentclient.client.mods.Setting;
+import net.silentclient.client.mods.SettingsManager;
import net.silentclient.client.utils.MenuBlurUtils;
import net.silentclient.client.utils.MouseCursorHandler;
@@ -27,6 +29,7 @@ public class ColorPicker extends SilentScreen {
private final GuiScreen parentScreen;
private ArrayList colors = new ArrayList();
private final String value;
+ private HSBPicker hsb;
public ColorPicker(Mod mod, String value, GuiScreen parentScreen) {
if (mod == null) throw new IllegalArgumentException("Mod is null");
@@ -34,6 +37,10 @@ public class ColorPicker extends SilentScreen {
this.mod = mod;
this.parentScreen = parentScreen;
this.value = value;
+ float colorY = 80;
+ int colorX = 3;
+ hsb = new HSBPicker((int)colorX, (int)colorY, 120, 70, true, value);
+ hsb.init();
}
@Override
@@ -52,23 +59,6 @@ public class ColorPicker extends SilentScreen {
if(mod.getCategory() == ModCategory.MODS) {
this.buttonList.add(new Button(3, 76, this.height - 18, 70, 15, mod.isEnabled() ? "Enabled" : "Disabled", false, mod.isEnabled() ? new SelectedButtonTheme() : new DefaultButtonTheme()));
}
-
- colors.clear();
- colors.add(new Color(255, 255, 255));
- colors.add(new Color(156, 157, 151));
- colors.add(new Color(71,79,82));
- colors.add(new Color(0, 0, 0));
- colors.add(new Color(255,216,61));
- colors.add(new Color(249,128,29));
- colors.add(new Color(176,46,38));
- colors.add(new Color(130,84,50));
- colors.add(new Color(128,199,31));
- colors.add(new Color(58,179,218));
- colors.add(new Color(22,156,157));
- colors.add(new Color(60,68,169));
- colors.add(new Color(243,140,170));
- colors.add(new Color(198,79,189));
- colors.add(new Color(137,50,183));
}
@Override
@@ -80,39 +70,11 @@ public class ColorPicker extends SilentScreen {
ModMenu.drawOverlayListBase(height, "Choose a color");
ModMenu.trimContentStart(width, height);
+
float colorY = 66;
- int colorX = 3;
- int colorIndex = 0;
- for(Color color : colors) {
- RenderUtil.drawRoundedRect(colorX, colorY, 20, 20, 3, new Color(color.getRed(), color.getGreen(), color.getBlue(), setting.getOpacity()).getRGB());
- RenderUtil.drawRoundedOutline(colorX, colorY, 20, 20, 3, 2, new Color(0, 0, 0).getRGB());
- if(MouseUtils.isInside(mouseX, mouseY, colorX, colorY, 20, 20)) {
- cursorType = MouseCursorHandler.CursorType.POINTER;
- }
- colorX += 25;
- colorIndex += 1;
- if(colorIndex == 6) {
- colorIndex = 0;
- colorX = 3;
- colorY += 25;
- }
- }
+ hsb.render(mouseX, mouseY);
- int settingHeight = 15;
- colorY += settingHeight;
- if(setting.isCanChangeOpacity()) {
- colorY += settingHeight;
- RegularSlider.render(3, colorY, 144, "Opacity", 255, setting.getOpacity());
- if (RegularSlider.isDrag(mouseX, mouseY, 3, colorY, 144) && (System.currentTimeMillis() - initTime) > 500) {
- double diff = 255 - 0;
- double mouse = MathHelper.clamp_double((mouseX - 3) / 100D, 0, 1);
- double newVal = 0 + mouse * diff;
- setting.setOpacity((int) newVal);
- }
- colorY += settingHeight;
- }
-
- colorY += settingHeight;
+ Client.getInstance().getSettingsManager().getSettingByName(mod, this.value).setValColor(hsb.getSelectedColorFinal());
Checkbox.render(mouseX, mouseY, 3, colorY, "Chroma", setting.isChroma());
if(Checkbox.isHovered(mouseX, mouseY, 3, colorY)) {
@@ -153,21 +115,8 @@ public class ColorPicker extends SilentScreen {
super.mouseClicked(mouseX, mouseY, mouseButton);
Setting setting = Client.getInstance().getSettingsManager().getSettingByName(mod, this.value);
float colorY = 66;
- int colorX = 3;
- int colorIndex = 0;
- for(Color color : colors) {
- if(MouseUtils.isInside(mouseX, mouseY, colorX, colorY, 20, 20)) {
- setting.setValColor(color);
- mc.displayGuiScreen(parentScreen);
- }
- colorX += 25;
- colorIndex += 1;
- if(colorIndex == 6) {
- colorIndex = 0;
- colorX = 3;
- colorY += 25;
- }
- }
+
+ hsb.mouseClicked(mouseX, mouseY, mouseButton);
int settingHeight = 15;
colorY += settingHeight;
@@ -183,6 +132,12 @@ public class ColorPicker extends SilentScreen {
}
}
+ @Override
+ protected void mouseReleased(int mouseX, int mouseY, int state) {
+ hsb.mouseReleased(mouseX, mouseY, state);
+ super.mouseReleased(mouseX, mouseY, state);
+ }
+
@Override
public void onGuiClosed() {
super.onGuiClosed();
diff --git a/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java b/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java
index 90e709a..050c236 100644
--- a/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java
+++ b/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java
@@ -137,7 +137,7 @@ public class ModSettings extends SilentScreen {
}
if(setting.isCellGrid()) {
CellGrid.render(mouseX, mouseY, 3, settingY, setting);
- settingY += 120;
+ settingY += 135;
}
if(setting.isSlider()) {
RegularSlider.render(3, settingY, 144, setting.getName(), setting.getMax(), setting.getValDouble());
@@ -267,6 +267,10 @@ public class ModSettings extends SilentScreen {
}
}
+ if(setting.isCellGrid()) {
+ CellGrid.click(mouseX, mouseY, mouseButton, setting);
+ }
+
if(setting.isSlider()) {
settingY += 15;
}
@@ -384,6 +388,17 @@ public class ModSettings extends SilentScreen {
MenuBlurUtils.unloadBlur();
}
+ @Override
+ protected void mouseReleased(int mouseX, int mouseY, int state) {
+ super.mouseReleased(mouseX, mouseY, state);
+
+ for (Setting setting : Client.getInstance().getSettingsManager().getSettingByMod(mod)) {
+ if(setting.isCellGrid()) {
+ CellGrid.release();
+ }
+ }
+ }
+
@Override
public boolean doesGuiPauseGame() {
return !(this.mod instanceof TimeChangerMod);
diff --git a/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java b/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java
index 322d20d..a84bf28 100644
--- a/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java
+++ b/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java
@@ -4,6 +4,7 @@ import net.minecraft.launchwrapper.ITweaker;
import net.minecraft.launchwrapper.Launch;
import net.minecraft.launchwrapper.LaunchClassLoader;
import net.silentclient.client.Client;
+import net.silentclient.client.mixin.transformer.NVGClassTransformer;
import org.spongepowered.asm.launch.MixinBootstrap;
import org.spongepowered.asm.mixin.MixinEnvironment;
import org.spongepowered.asm.mixin.Mixins;
@@ -66,6 +67,19 @@ public class SilentClientTweaker implements ITweaker {
}
environment.setSide(MixinEnvironment.Side.CLIENT);
classLoader.registerTransformer("net.silentclient.client.mixin.SilentClientTransformer");
+ classLoader.registerTransformer(NVGClassTransformer.class.getName());
+ unlockLwjgl();
+ }
+
+ private void unlockLwjgl() {
+ try {
+ Field transformerExceptions = LaunchClassLoader.class.getDeclaredField("classLoaderExceptions");
+ transformerExceptions.setAccessible(true);
+ Object o = transformerExceptions.get(Launch.classLoader);
+ ((Set) o).remove("org.lwjgl.");
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ e.printStackTrace();
+ }
}
@Override
diff --git a/src/main/java/net/silentclient/client/mixin/transformer/NVGClassTransformer.java b/src/main/java/net/silentclient/client/mixin/transformer/NVGClassTransformer.java
new file mode 100644
index 0000000..b0ee589
--- /dev/null
+++ b/src/main/java/net/silentclient/client/mixin/transformer/NVGClassTransformer.java
@@ -0,0 +1,51 @@
+package net.silentclient.client.mixin.transformer;
+
+import net.minecraft.launchwrapper.IClassTransformer;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.*;
+
+public class NVGClassTransformer implements IClassTransformer {
+ @Override
+ public byte[] transform(String name, String transformedName, byte[] basicClass) {
+ if (name.equals("org.lwjgl.nanovg.NanoVGGLConfig")) {
+ ClassReader reader = new ClassReader(basicClass);
+ ClassNode node = new ClassNode();
+ reader.accept(node, ClassReader.EXPAND_FRAMES);
+
+ for (MethodNode method : node.methods) {
+ if (method.name.equals("configGL")) {
+ InsnList list = new InsnList();
+
+ list.add(new VarInsnNode(Opcodes.LLOAD, 0));
+ list.add(new TypeInsnNode(Opcodes.NEW, "me/djtheredstoner/lwjgl/Lwjgl2FunctionProvider"));
+ list.add(new InsnNode(Opcodes.DUP));
+ list.add(new MethodInsnNode(
+ Opcodes.INVOKESPECIAL,
+ "me/djtheredstoner/lwjgl/Lwjgl2FunctionProvider",
+ "",
+ "()V",
+ false
+ ));
+ list.add(new MethodInsnNode(
+ Opcodes.INVOKESTATIC,
+ "org/lwjgl/nanovg/NanoVGGLConfig",
+ "config",
+ "(JLorg/lwjgl/system/FunctionProvider;)V",
+ false
+ ));
+ list.add(new InsnNode(Opcodes.RETURN));
+
+ method.instructions.clear();
+ method.instructions.insert(list);
+ }
+ }
+
+ ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
+ node.accept(cw);
+ return cw.toByteArray();
+ }
+ return basicClass;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/silentclient/client/nanovg/NVGHelper.java b/src/main/java/net/silentclient/client/nanovg/NVGHelper.java
new file mode 100644
index 0000000..7453429
--- /dev/null
+++ b/src/main/java/net/silentclient/client/nanovg/NVGHelper.java
@@ -0,0 +1,68 @@
+package net.silentclient.client.nanovg;
+
+import net.minecraft.util.ResourceLocation;
+import net.silentclient.client.Client;
+import net.silentclient.client.utils.io.BufferUtil;
+import net.silentclient.client.utils.io.LinkedStorage;
+import org.lwjgl.nanovg.NVGColor;
+
+import java.awt.*;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+public class NVGHelper {
+ public static int DRAW_STROKE = 0;
+ public static int DRAW_FILL = 1;
+
+ public static NVGColor nvgcolor(Color color) {
+ return NVGColor.calloc().r(color.getRed()/255f).g(color.getGreen()/255f).b(color.getBlue()/255f).a(color.getAlpha()/255f);
+ }
+
+ public static int[] int_to_rgba(int color) {
+ int[] rgba = new int[4];
+ rgba[0] = color >> 24 & 0xFF;
+ rgba[1] = color >> 16 & 0xFF;
+ rgba[2] = color >> 8 & 0xFF;
+ rgba[3] = color & 0xFF;
+ return rgba;
+ }
+
+ public static void path(Runnable r, int mode) {
+ NVGWrapper.beginPath();
+ r.run();
+ if(mode == 0) NVGWrapper.stroke();
+ if(mode == 1) NVGWrapper.fill();
+ NVGWrapper.closePath();
+ }
+
+ public static void path(float x, float y, Runnable r, int mode) {
+ NVGWrapper.beginPath();
+ NVGWrapper.moveTo(x,y);
+ r.run();
+ if(mode == 0) NVGWrapper.stroke();
+ if(mode == 1) NVGWrapper.fill();
+ NVGWrapper.closePath();
+ }
+
+ public static void initFont(String fontName, String fileName) {
+ try {
+ ByteBuffer data = BufferUtil.get().getResourceBytes(new ResourceLocation("silentclient/fonts/"+fileName), 1024);
+ Client.logger.info(" LOADING > ui > font > " + fontName);
+ LinkedStorage.put(data);
+ NVGWrapper.createFontMem(fontName, data, 0);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ public static void initImage(String imgName, String fileName) {
+ try {
+ ByteBuffer data = BufferUtil.get().getResourceBytes(new ResourceLocation("silentclient/images/"+fileName), 1024);
+ LinkedStorage.put(data);
+ Client.logger.info("LOADING > ui > image > " + imgName);
+ int img = NVGWrapper.createImageMem(0, data);
+ UI.imagesmap.put(imgName,img);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/silentclient/client/nanovg/NVGWrapper.java b/src/main/java/net/silentclient/client/nanovg/NVGWrapper.java
new file mode 100644
index 0000000..64b4015
--- /dev/null
+++ b/src/main/java/net/silentclient/client/nanovg/NVGWrapper.java
@@ -0,0 +1,404 @@
+package net.silentclient.client.nanovg;
+
+import org.lwjgl.nanovg.*;
+
+import java.nio.ByteBuffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+
+public class NVGWrapper {
+ public static long cx;
+
+ public static void beginFrame(float width, float height, float dpi) {
+ NanoVG.nvgBeginFrame(cx, width, height, dpi);
+ }
+
+ public static void cancelFrame() {
+ NanoVG.nvgCancelFrame(cx);
+ }
+
+ public static void endFrame() {
+ NanoVG.nvgEndFrame(cx);
+ }
+
+ public static void globalCompositeOperation(int op) {
+ NanoVG.nvgGlobalCompositeOperation(cx, op);
+ }
+
+ public static void globalCompositeBlendFunc(int sfactor, int dfactor) {
+ NanoVG.nvgGlobalCompositeBlendFunc(cx, sfactor, dfactor);
+ }
+
+ public static void globalCompositeBlendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) {
+ NanoVG.nvgGlobalCompositeBlendFuncSeparate(cx, srcRGB, dstRGB, srcAlpha, dstAlpha);
+ }
+
+ public static NVGColor RGB(byte r, byte g, byte b, NVGColor __result) {
+ return NanoVG.nvgRGB(r, g, b, __result);
+ }
+
+ public static NVGColor RGBf(float r, float g, float b, NVGColor __result) {
+ return NanoVG.nvgRGBf(r, g, b, __result);
+ }
+
+ public static NVGColor RGBA(byte r, byte g, byte b, byte a, NVGColor __result) {
+ return NanoVG.nvgRGBA(r, g, b, a, __result);
+ }
+
+ public static NVGColor RGBAf(float r, float g, float b, float a, NVGColor __result) {
+ return NanoVG.nvgRGBAf(r, g, b, a, __result);
+ }
+
+ public static NVGColor lerpRGBA(NVGColor c0, NVGColor c1, float u, NVGColor __result) {
+ return NanoVG.nvgLerpRGBA(c0, c1, u, __result);
+ }
+
+ public static NVGColor transRGBA(NVGColor c0, byte a, NVGColor __result) {
+ return NanoVG.nvgTransRGBA(c0, a, __result);
+ }
+
+ public static NVGColor transRGBAf(NVGColor c0, float a, NVGColor __result) {
+ return NanoVG.nvgTransRGBAf(c0, a, __result);
+ }
+
+ public static NVGColor HSL(float h, float s, float l, NVGColor __result) {
+ return NanoVG.nvgHSL(h, s, l, __result);
+ }
+
+ public static NVGColor HSLA(float h, float s, float l, byte a, NVGColor __result) {
+ return NanoVG.nvgHSLA(h, s, l, a, __result);
+ }
+
+ public static void save() {
+ NanoVG.nvgSave(cx);
+ }
+
+ public static void restore() {
+ NanoVG.nvgRestore(cx);
+ }
+
+ public static void reset() {
+ NanoVG.nvgReset(cx);
+ }
+
+ public static void shapeAntiAlias(boolean enabled) {
+ NanoVG.nvgShapeAntiAlias(cx, enabled);
+ }
+
+ public static void strokeColor(NVGColor color) {
+ NanoVG.nvgStrokeColor(cx, color);
+ }
+
+ public static void strokePaint(NVGPaint paint) {
+ NanoVG.nvgStrokePaint(cx, paint);
+ }
+
+ public static void fillColor(NVGColor color) {
+ NanoVG.nvgFillColor(cx, color);
+ }
+
+ public static void fillPaint(NVGPaint paint) {
+ NanoVG.nvgFillPaint(cx, paint);
+ }
+
+ public static void miterLimit(float limit) {
+ NanoVG.nvgMiterLimit(cx, limit);
+ }
+
+ public static void strokeWidth(float width) {
+ NanoVG.nvgStrokeWidth(cx, width);
+ }
+
+ public static void lineCap(int cap) {
+ NanoVG.nvgLineCap(cx, cap);
+ }
+
+ public static void lineJoin(int join) {
+ NanoVG.nvgLineJoin(cx, join);
+ }
+
+ public static void globalAlpha(float alpha) {
+ NanoVG.nvgGlobalAlpha(cx, alpha);
+ }
+
+ public void resetTransformation() {
+ NanoVG.nvgResetTransform(cx);
+ }
+
+ public static void transform(float a, float b, float c, float d, float e, float f) {
+ NanoVG.nvgTransform(cx, a, b, c, d, e, f);
+ }
+
+ public static void translate(float x, float y) {
+ NanoVG.nvgTranslate(cx, x, y);
+ }
+
+ public static void rotate(float angle) {
+ NanoVG.nvgRotate(cx, angle);
+ }
+
+ public static void skewX(float angle) {
+ NanoVG.nvgSkewX(cx,angle);
+ }
+
+ public static void skewY(float angle) {
+ NanoVG.nvgSkewY(cx,angle);
+ }
+
+ public static void scale(float x, float y) {
+ NanoVG.nvgScale(cx,x,y);
+ }
+
+ public static void currentTransform(FloatBuffer xFrom) {
+ NanoVG.nvgCurrentTransform(cx,xFrom);
+ }
+
+ public static void transformIdentity(FloatBuffer dst) {
+ NanoVG.nvgTransformIdentity(dst);
+ }
+
+ public static void transformTranslate(FloatBuffer dst, float x, float y) {
+ NanoVG.nvgTransformTranslate(dst,x,y);
+ }
+
+ public static void transformScale(FloatBuffer dst, float x, float y) {
+ NanoVG.nvgTransformScale(dst,x,y);
+ }
+
+ public static void transformRotate(FloatBuffer dst, float angle) {
+ NanoVG.nvgTransformRotate(dst,angle);
+ }
+
+ public static void transformSkewX(FloatBuffer dst, float angle) {
+ NanoVG.nvgTransformSkewX(dst,angle);
+ }
+
+ public static void transformSkewY(FloatBuffer dst, float angle) {
+ NanoVG.nvgTransformSkewY(dst,angle);
+ }
+
+ public static void transformMultiply(FloatBuffer dst, FloatBuffer src) {
+ NanoVG.nvgTransformMultiply(dst,src);
+ }
+
+ public static void transfromPremultiply(FloatBuffer dst, FloatBuffer src) {
+ NanoVG.nvgTransformPremultiply(dst,src);
+ }
+
+ public static void transfromInverse(FloatBuffer dst, FloatBuffer src) {
+ NanoVG.nvgTransformInverse(dst,src);
+ }
+
+ public static void transfromPoint(FloatBuffer dstx, FloatBuffer dsty, FloatBuffer xfrom, float srcX, float srcY) {
+ NanoVG.nvgTransformPoint(dstx, dsty, xfrom, srcX, srcY);
+ }
+
+ public static float deg_rad(float val) {
+ return NanoVG.nvgDegToRad(val);
+ }
+
+ public static float rad_deg(float val) {
+ return NanoVG.nvgDegToRad(val);
+ }
+
+ public static int createImage(CharSequence filename, int imageFlags) {
+ return NanoVG.nvgCreateImage(cx,filename,imageFlags);
+ }
+
+ public static int createImageMem(int imageFlags, ByteBuffer data) {
+ return NanoVG.nvgCreateImageMem(cx,imageFlags,data);
+ }
+
+ public static int createImageRGBA(int w, int h, int imageFlags, ByteBuffer data) {
+ return NanoVG.nvgCreateImageRGBA(cx,w, h, imageFlags, data);
+ }
+
+
+ public static void updateImage(int image,ByteBuffer data) {
+ NanoVG.nvgUpdateImage(cx,image,data);
+ }
+
+ public static void imageSize(int image, IntBuffer w, IntBuffer h) {
+ NanoVG.nvgImageSize(cx,image,w,h);
+ }
+
+ public static void deleteImage(int image) {
+ NanoVG.nvgDeleteImage(cx,image);
+ }
+
+ public static NVGPaint linearGradient(float sx, float sy, float ex, float ey, NVGColor from, NVGColor to, NVGPaint __result) {
+ return NanoVG.nvgLinearGradient(cx,sx,sy,ex,ey,from,to,__result);
+ }
+
+ public static NVGPaint boxGradient(float x, float y, float w, float h, float r, float f, NVGColor from, NVGColor to, NVGPaint __result) {
+ return NanoVG.nvgBoxGradient(cx,x,y,w,h,r,f,from,to, __result);
+ }
+
+ public static NVGPaint imagePattern(float ox, float oy, float ex, float ey, float angle, int image, float alpha, NVGPaint __result) {
+ return NanoVG.nvgImagePattern(cx,ox,oy,ex,ey,angle,image,alpha,__result);
+ }
+
+ public static void scissor(float x, float y, float w, float h) {
+ NanoVG.nvgScissor(cx,x,y,w,h);
+ }
+
+ public static void intersectScissor(float x, float y, float w, float h) {
+ NanoVG.nvgIntersectScissor(cx,x,y,w,h);
+ }
+
+ public static void resetScissor() {
+ NanoVG.nvgResetScissor(cx);
+ }
+
+ public static void beginPath() {
+ NanoVG.nvgBeginPath(cx);
+ }
+
+ public static void moveTo(float x, float y) {
+ NanoVG.nvgMoveTo(cx,x,y);
+ }
+
+ public static void lineTo(float x, float y) {
+ NanoVG.nvgLineTo(cx,x,y);
+ }
+
+ public static void bezierTo(float cx1, float cy1, float cx2, float cy2, float x, float y) {
+ NanoVG.nvgBezierTo(cx,cx1,cy1,cx2,cy2, x,y);
+ }
+
+ public static void guadTo(float cx, float cy, float x, float y) {
+ NanoVG.nvgQuadTo(NVGWrapper.cx,cx,cy,x,y);
+ }
+
+ public static void arcTo(float x1, float y1, float x2, float y2, float radius) {
+ NanoVG.nvgArcTo(cx,x1,y1,x2,y2,radius);
+ }
+
+ public static void closePath() {
+ NanoVG.nvgClosePath(cx);
+ }
+
+ public static void pathWinding(int op) {
+ NanoVG.nvgPathWinding(cx,op);
+ }
+
+ public static void rect(float x, float y, float w, float h) {
+ NanoVG.nvgRect(cx,x,y,w,h);
+ }
+
+ public static void rrect(float x, float y, float w, float h, float rad) {
+ NanoVG.nvgRoundedRect(cx,x,y,w,h,rad);
+ }
+
+ public static void rrect(float x, float y, float w, float h, float rTL, float rTR, float rBL, float rBR) {
+ NanoVG.nvgRoundedRectVarying(cx,x,y,w,h,rTL,rTR,rBL,rBR);
+ }
+
+ public static void ellipse(float cx, float cy, float rx, float ry) {
+ NanoVG.nvgEllipse(NVGWrapper.cx,cx,cy,rx,ry);
+ }
+
+ public static void circle(float x, float y, float r) {
+ NanoVG.nvgCircle(cx,x,y,r);
+ }
+
+ public static void fill() {
+ NanoVG.nvgFill(cx);
+ }
+
+ public static void stroke() {
+ NanoVG.nvgStroke(cx);
+ }
+
+ public static int createFont(CharSequence name, CharSequence filename) {
+ return NanoVG.nvgCreateFont(cx,name,filename);
+ }
+
+ public static int createFontAtIndex(CharSequence name, CharSequence filename, int index) {
+ return NanoVG.nvgCreateFontAtIndex(cx,name,filename,index);
+ }
+
+ public static int createFontMem(CharSequence name, ByteBuffer data, int freeData) {
+ return NanoVG.nvgCreateFontMem(cx,name,data,freeData);
+ }
+
+ public static int createFontMemAtIndex(CharSequence name, ByteBuffer data, int freeData, int index) {
+ return NanoVG.nvgCreateFontMemAtIndex(cx,name,data,freeData,index);
+ }
+
+ public static int findFont(CharSequence name) {
+ return NanoVG.nvgFindFont(cx, name);
+ }
+
+ public static int addFallbackFontID(int baseFont, int fallbackFont) {
+ return NanoVG.nvgAddFallbackFontId(cx,baseFont,fallbackFont);
+ }
+
+ public static int addFallbackFont(CharSequence baseFont, CharSequence fallbackFont) {
+ return NanoVG.nvgAddFallbackFont(cx,baseFont, fallbackFont);
+ }
+
+ public static void resetFallbackFontsID(int baseFont) {
+ NanoVG.nvgResetFallbackFontsId(cx,baseFont);
+ }
+
+ public static void resetFallbackFonts(CharSequence baseFont) {
+ NanoVG.nvgResetFallbackFonts(cx,baseFont);
+ }
+
+ public static void fontSize(float size) {
+ NanoVG.nvgFontSize(cx,size);
+ }
+
+ public static void fontBlur(float blur) {
+ NanoVG.nvgFontBlur(cx,blur);
+ }
+
+ public static void textLetterSpacing(float spacing) {
+ NanoVG.nvgTextLetterSpacing(cx,spacing);
+ }
+
+ public static void textLineHeight(float lineHeight) {
+ NanoVG.nvgTextLineHeight(cx,lineHeight);
+ }
+
+ public static void textAlign(int align) {
+ NanoVG.nvgTextAlign(cx, align);
+ }
+
+ public static void fontFaceID(int font) {
+ NanoVG.nvgFontFaceId(cx, font);
+ }
+
+ public static void fontFace(CharSequence font) {
+ NanoVG.nvgFontFace(cx, font);
+ }
+
+ public static void text(CharSequence text, float x, float y) {
+ NanoVG.nvgText(cx,x,y,text);
+ }
+
+ public static void textBox(float x, float y, float breakLine, CharSequence text) {
+ NanoVG.nvgTextBox(cx,x,y,breakLine,text);
+ }
+
+ public static float textBounds(float x, float y, CharSequence text, FloatBuffer bounds) {
+ return NanoVG.nvgTextBounds(cx,x,y,text,bounds);
+ }
+
+ public static void textBoxBounds(float x, float y, float breakRowWidth, CharSequence text, FloatBuffer bounds) {
+ NanoVG.nvgTextBoxBounds(cx,x,y,breakRowWidth,text,bounds);
+ }
+
+ public static int textGlyphPositions(float x, float y, CharSequence text, NVGGlyphPosition.Buffer positions) {
+ return NanoVG.nvgTextGlyphPositions(cx,x,y,text,positions);
+ }
+
+ public static void textMetrics(FloatBuffer ascend, FloatBuffer descend, FloatBuffer lineh) {
+ NanoVG.nvgTextMetrics(cx,ascend,descend,lineh);
+ }
+
+ public static int textBreakLines(CharSequence text, float breakRowWidth, NVGTextRow.Buffer rows) {
+ return NanoVG.nvgTextBreakLines(cx,text,breakRowWidth,rows);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/silentclient/client/nanovg/UI.java b/src/main/java/net/silentclient/client/nanovg/UI.java
new file mode 100644
index 0000000..8d8116e
--- /dev/null
+++ b/src/main/java/net/silentclient/client/nanovg/UI.java
@@ -0,0 +1,248 @@
+package net.silentclient.client.nanovg;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import org.lwjgl.nanovg.NVGColor;
+import org.lwjgl.nanovg.NVGPaint;
+import org.lwjgl.nanovg.NanoVG;
+import org.lwjgl.nanovg.NanoVGGL2;
+import org.lwjgl.opengl.Display;
+import org.lwjgl.opengl.EXTFramebufferObject;
+import org.lwjgl.opengl.EXTPackedDepthStencil;
+import org.lwjgl.opengl.GL11;
+
+import java.awt.*;
+import java.util.HashMap;
+import java.util.function.Consumer;
+
+import static net.silentclient.client.nanovg.NVGWrapper.*;
+import static net.silentclient.client.nanovg.NVGHelper.*;
+
+public class UI {
+ private static UI instancce;
+ private static boolean initialized = false;
+ public static HashMap imagesmap = new HashMap<>();
+ private long context = -1;
+ ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft());
+
+ public static void init() {
+ if(!initialized) {
+ new UI();
+ initialized = true;
+ }
+ }
+
+ public static UI get() {
+ return instancce;
+ }
+
+ private UI() {
+ instancce = this;
+
+ context = NanoVGGL2.nvgCreate(NanoVGGL2.NVG_ANTIALIAS | NanoVGGL2.NVG_STENCIL_STROKES);
+ NVGWrapper.cx = context;
+
+ initFont("icon", "icon.ttf");
+ }
+
+
+ public void render(Consumer renderer, float width, float height, float dpi) {
+ GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
+ GlStateManager.disableAlpha();
+ fixDepthStencil();
+ NVGWrapper.beginFrame(width,height,dpi);
+ renderer.accept(this);
+ NVGWrapper.endFrame();
+ GlStateManager.enableAlpha();
+ GL11.glPopAttrib();
+ }
+
+ private void fixDepthStencil() {
+ if(Minecraft.getMinecraft().getFramebuffer().depthBuffer > -1) {
+ EXTFramebufferObject.glDeleteRenderbuffersEXT(Minecraft.getMinecraft().getFramebuffer().depthBuffer);
+ int id = EXTFramebufferObject.glGenRenderbuffersEXT();
+ EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, id);
+ EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, EXTPackedDepthStencil.GL_DEPTH_STENCIL_EXT, Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight);
+ EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, id);
+ EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, id);
+ Minecraft.getMinecraft().getFramebuffer().depthBuffer = -1;
+ }
+ }
+
+ public void rect(float x, float y, float width, float height, Color color) {
+ NVGColor col = nvgcolor(color);
+ path(() -> {
+ NVGWrapper.rect(x, y, width, height);
+ fillColor(col);
+ }, DRAW_FILL);
+ col.free();
+ }
+
+ public void rrect(float x, float y, float width, float height, float radius, Color color) {
+ NVGColor col = nvgcolor(color);
+ path(() -> {
+ NVGWrapper.rrect(x, y, width, height, radius);
+ fillColor(col);
+ }, DRAW_FILL);
+ col.free();
+ }
+
+ public void rrect(float x, float y, float width, float height, float rTL, float rTR, float rBL, float rBR, Color color) {
+ NVGColor col = nvgcolor(color);
+ path(() -> {
+ NVGWrapper.rrect(x, y, width, height, rTL,rTR,rBL,rBR);
+ fillColor(col);
+ }, DRAW_FILL);
+ col.free();
+ }
+
+ public void text(float x, float y, float size, String font, String string, Color color, float blur, Alignment alignment) {
+ render((vg) -> {
+ NVGColor col = nvgcolor(color);
+ path(() -> {
+ fontBlur(blur);
+ fontFace(font);
+ fontSize(size*res.getScaleFactor());
+ textAlign(alignment.alignment);
+ fillColor(col);
+ NVGWrapper.text(string,x*res.getScaleFactor(),y*res.getScaleFactor());
+ }, -1);
+ col.free();
+ }, Display.getWidth(), Display.getHeight(), 1f);
+ }
+
+ public void text(float x, float y, float size, String font, String string, Color color, Alignment alignment) {
+ text(x,y,size,font,string,color,0,alignment);
+ }
+ public void text(float x, float y, float size, String font, String string, Color color) {
+ text(x,y,size,font,string,color,0,Alignment.LEFT_TOP);
+ }
+
+ public void image(float x, float y, float w, float h, String id, float alpha, float rad) {
+ render((vg) -> {
+ NVGPaint paint = NVGPaint.calloc();
+ NanoVG.nvgImageSize(context, imagesmap.get(id), new int[]{(int)w},new int[]{(int)h});
+
+ path(() -> {
+ imagePattern(x,y,w,h,0,imagesmap.get(id), alpha, paint);
+ NVGWrapper.rrect(x,y,w,h,rad);
+ fillPaint(paint);
+ }, DRAW_FILL);
+
+ paint.free();
+ }, res.getScaledWidth(), res.getScaledHeight(), res.getScaleFactor());
+ }
+
+ public void line(float sx, float sy, float ex, float ey, float w, Color c1, Color c2) {
+ NVGColor nc1 = nvgcolor(c1);
+ NVGColor nc2 = nvgcolor(c2);
+ NVGPaint paint = NVGPaint.create();
+ linearGradient(sx,sy,ex,ey,nc1,nc2,paint);
+ path(sx,sy, ()->{
+ strokeWidth(w);
+ strokePaint(paint);
+ lineTo(ex,ey);
+ }, DRAW_STROKE);
+
+ nc1.free();
+ nc2.free();
+ }
+ public void line(float sx, float sy, float ex, float ey, float w, Color color) {
+ NVGColor nc1 = nvgcolor(color);
+ path(sx,sy, ()->{
+ strokeWidth(w);
+ strokeColor(nc1);
+ lineTo(ex,ey);
+ }, DRAW_STROKE);
+
+ nc1.free();
+ }
+
+ public void dropShadow(float x, float y, float w, float h, float radius, float spread, Color color) {
+ NVGColor nvg_color = nvgcolor(color);
+ NVGColor nvg_transparent = nvgcolor(new Color(0, 0, 0, 0));
+ NVGPaint shadowPaint = NVGPaint.calloc();
+
+ boxGradient(x,y,w,h,radius, spread, nvg_color,nvg_transparent,shadowPaint);
+ path(() -> {
+ NVGWrapper.rrect(x-spread,y-spread,w+spread*2,h+spread*2,radius*2);
+ NVGWrapper.rrect(x,y,w,h,radius);
+ NVGWrapper.pathWinding(2);
+ fillPaint(shadowPaint);
+ }, DRAW_FILL);
+
+ shadowPaint.free();
+ nvg_color.free();
+ nvg_transparent.free();
+ }
+
+ public void horizontalGrad(float x, float y, float w, float h, float radius, Color from, Color to) {
+ gradient(x,y,w,h,x,y,x+w,y,radius,from,to);
+ }
+ public void verticalGrad(float x, float y, float w, float h, float radius, Color from, Color to) {
+ gradient(x,y,w,h,x,y,x,y+h,radius,from,to);
+ }
+
+ public void gradient(float x, float y, float w, float h, float startX, float startY, float endX, float endY, float radius, Color from, Color to) {
+ NVGColor nc1 = nvgcolor(from);
+ NVGColor nc2 = nvgcolor(to);
+ NVGPaint paint = NVGPaint.calloc();
+
+ linearGradient(startX, startY, endX, endY, nc1, nc2, paint);
+ path(() -> {
+ NVGWrapper.rrect(x,y,w,h,radius);
+ fillPaint(paint);
+ }, DRAW_FILL);
+
+ nc1.free();
+ nc2.free();
+ paint.free();
+ }
+
+ public float textWidth(String text, String face, float size) {
+ float[] bounds = new float[4];
+
+ float f = 0;
+
+ save();
+ fontFace(face);
+ fontSize(size);
+ f = NanoVG.nvgTextBounds(cx, 0, 0, text, bounds);
+ restore();
+
+ return f;
+ }
+
+ public float textHeight(String face, float size) {
+ float[] ascender = new float[1];
+ float[] descender = new float[1];
+ float[] lineh = new float[1];
+
+ fontFace(face);
+ fontSize(size);
+ NanoVG.nvgTextMetrics(cx, ascender, descender, lineh);
+
+ return lineh[0];
+ }
+
+ public enum Alignment {
+ LEFT_TOP(NanoVG.NVG_ALIGN_LEFT | NanoVG.NVG_ALIGN_TOP),
+ CENTER_TOP(NanoVG.NVG_ALIGN_CENTER | NanoVG.NVG_ALIGN_TOP),
+ RIGHT_TOP(NanoVG.NVG_ALIGN_RIGHT | NanoVG.NVG_ALIGN_TOP),
+
+ LEFT_MIDDLE(NanoVG.NVG_ALIGN_LEFT | NanoVG.NVG_ALIGN_MIDDLE),
+ CENTER_MIDDLE(NanoVG.NVG_ALIGN_CENTER | NanoVG.NVG_ALIGN_MIDDLE),
+ RIGHT_MIDDLE(NanoVG.NVG_ALIGN_RIGHT | NanoVG.NVG_ALIGN_MIDDLE),
+
+ LEFT_BOTTOM(NanoVG.NVG_ALIGN_LEFT | NanoVG.NVG_ALIGN_BOTTOM),
+ CENTER_BOTTOM(NanoVG.NVG_ALIGN_CENTER | NanoVG.NVG_ALIGN_BOTTOM),
+ RIGHT_BOTTOM(NanoVG.NVG_ALIGN_RIGHT | NanoVG.NVG_ALIGN_BOTTOM);
+
+ private final int alignment;
+
+ Alignment(int alignment) {
+ this.alignment = alignment;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/silentclient/client/utils/IconHelper.java b/src/main/java/net/silentclient/client/utils/IconHelper.java
new file mode 100644
index 0000000..b86b97c
--- /dev/null
+++ b/src/main/java/net/silentclient/client/utils/IconHelper.java
@@ -0,0 +1,1398 @@
+package net.silentclient.client.utils;
+
+public class IconHelper {
+ public static final String px500 = "\uf26e";
+ public static final String accessible_icon = "\uf368";
+ public static final String accusoft = "\uf369";
+ public static final String acquisitions_incorporated = "\uf6af";
+ public static final String ad = "\uf641";
+ public static final String address_book = "\uf2b9";
+ public static final String address_card = "\uf2bb";
+ public static final String adjust = "\uf042";
+ public static final String adn = "\uf170";
+ public static final String adobe = "\uf778";
+ public static final String adversal = "\uf36a";
+ public static final String affiliatetheme = "\uf36b";
+ public static final String air_freshener = "\uf5d0";
+ public static final String airbnb = "\uf834";
+ public static final String algolia = "\uf36c";
+ public static final String align_center = "\uf037";
+ public static final String align_justify = "\uf039";
+ public static final String align_left = "\uf036";
+ public static final String align_right = "\uf038";
+ public static final String alipay = "\uf642";
+ public static final String allergies = "\uf461";
+ public static final String amazon = "\uf270";
+ public static final String amazon_pay = "\uf42c";
+ public static final String ambulance = "\uf0f9";
+ public static final String american_sign_language_interpreting = "\uf2a3";
+ public static final String amilia = "\uf36d";
+ public static final String anchor = "\uf13d";
+ public static final String android = "\uf17b";
+ public static final String angellist = "\uf209";
+ public static final String angle_double_down = "\uf103";
+ public static final String angle_double_left = "\uf100";
+ public static final String angle_double_right = "\uf101";
+ public static final String angle_double_up = "\uf102";
+ public static final String angle_down = "\uf107";
+ public static final String angle_left = "\uf104";
+ public static final String angle_right = "\uf105";
+ public static final String angle_up = "\uf106";
+ public static final String angry = "\uf556";
+ public static final String angrycreative = "\uf36e";
+ public static final String angular = "\uf420";
+ public static final String ankh = "\uf644";
+ public static final String app_store = "\uf36f";
+ public static final String app_store_ios = "\uf370";
+ public static final String apper = "\uf371";
+ public static final String apple = "\uf179";
+ public static final String apple_alt = "\uf5d1";
+ public static final String apple_pay = "\uf415";
+ public static final String archive = "\uf187";
+ public static final String archway = "\uf557";
+ public static final String arrow_alt_circle_down = "\uf358";
+ public static final String arrow_alt_circle_left = "\uf359";
+ public static final String arrow_alt_circle_right = "\uf35a";
+ public static final String arrow_alt_circle_up = "\uf35b";
+ public static final String arrow_circle_down = "\uf0ab";
+ public static final String arrow_circle_left = "\uf0a8";
+ public static final String arrow_circle_right = "\uf0a9";
+ public static final String arrow_circle_up = "\uf0aa";
+ public static final String arrow_down = "\uf063";
+ public static final String arrow_left = "\uf060";
+ public static final String arrow_right = "\uf061";
+ public static final String arrow_up = "\uf062";
+ public static final String arrows_alt = "\uf0b2";
+ public static final String arrows_alt_h = "\uf337";
+ public static final String arrows_alt_v = "\uf338";
+ public static final String artstation = "\uf77a";
+ public static final String assistive_listening_systems = "\uf2a2";
+ public static final String asterisk = "\uf069";
+ public static final String asymmetrik = "\uf372";
+ public static final String at = "\uf1fa";
+ public static final String atlas = "\uf558";
+ public static final String atlassian = "\uf77b";
+ public static final String atom = "\uf5d2";
+ public static final String audible = "\uf373";
+ public static final String audio_description = "\uf29e";
+ public static final String autoprefixer = "\uf41c";
+ public static final String avianex = "\uf374";
+ public static final String aviato = "\uf421";
+ public static final String award = "\uf559";
+ public static final String aws = "\uf375";
+ public static final String baby = "\uf77c";
+ public static final String baby_carriage = "\uf77d";
+ public static final String backspace = "\uf55a";
+ public static final String backward = "\uf04a";
+ public static final String bacon = "\uf7e5";
+ public static final String balance_scale = "\uf24e";
+ public static final String balance_scale_left = "\uf515";
+ public static final String balance_scale_right = "\uf516";
+ public static final String ban = "\uf05e";
+ public static final String band_aid = "\uf462";
+ public static final String bandcamp = "\uf2d5";
+ public static final String barcode = "\uf02a";
+ public static final String bars = "\uf0c9";
+ public static final String baseball_ball = "\uf433";
+ public static final String basketball_ball = "\uf434";
+ public static final String bath = "\uf2cd";
+ public static final String battery_empty = "\uf244";
+ public static final String battery_full = "\uf240";
+ public static final String battery_half = "\uf242";
+ public static final String battery_quarter = "\uf243";
+ public static final String battery_three_quarters = "\uf241";
+ public static final String battle_net = "\uf835";
+ public static final String bed = "\uf236";
+ public static final String beer = "\uf0fc";
+ public static final String behance = "\uf1b4";
+ public static final String behance_square = "\uf1b5";
+ public static final String bell = "\uf0f3";
+ public static final String bell_slash = "\uf1f6";
+ public static final String bezier_curve = "\uf55b";
+ public static final String bible = "\uf647";
+ public static final String bicycle = "\uf206";
+ public static final String biking = "\uf84a";
+ public static final String bimobject = "\uf378";
+ public static final String binoculars = "\uf1e5";
+ public static final String biohazard = "\uf780";
+ public static final String birthday_cake = "\uf1fd";
+ public static final String bitbucket = "\uf171";
+ public static final String bitcoin = "\uf379";
+ public static final String bity = "\uf37a";
+ public static final String black_tie = "\uf27e";
+ public static final String blackberry = "\uf37b";
+ public static final String blender = "\uf517";
+ public static final String blender_phone = "\uf6b6";
+ public static final String blind = "\uf29d";
+ public static final String blog = "\uf781";
+ public static final String blogger = "\uf37c";
+ public static final String blogger_b = "\uf37d";
+ public static final String bluetooth = "\uf293";
+ public static final String bluetooth_b = "\uf294";
+ public static final String bold = "\uf032";
+ public static final String bolt = "\uf0e7";
+ public static final String bomb = "\uf1e2";
+ public static final String bone = "\uf5d7";
+ public static final String bong = "\uf55c";
+ public static final String book = "\uf02d";
+ public static final String book_dead = "\uf6b7";
+ public static final String book_medical = "\uf7e6";
+ public static final String book_open = "\uf518";
+ public static final String book_reader = "\uf5da";
+ public static final String bookmark = "\uf02e";
+ public static final String bootstrap = "\uf836";
+ public static final String border_all = "\uf84c";
+ public static final String border_none = "\uf850";
+ public static final String border_style = "\uf853";
+ public static final String bowling_ball = "\uf436";
+ public static final String box = "\uf466";
+ public static final String box_open = "\uf49e";
+ public static final String boxes = "\uf468";
+ public static final String braille = "\uf2a1";
+ public static final String brain = "\uf5dc";
+ public static final String bread_slice = "\uf7ec";
+ public static final String briefcase = "\uf0b1";
+ public static final String briefcase_medical = "\uf469";
+ public static final String broadcast_tower = "\uf519";
+ public static final String broom = "\uf51a";
+ public static final String brush = "\uf55d";
+ public static final String btc = "\uf15a";
+ public static final String buffer = "\uf837";
+ public static final String bug = "\uf188";
+ public static final String building = "\uf1ad";
+ public static final String bullhorn = "\uf0a1";
+ public static final String bullseye = "\uf140";
+ public static final String burn = "\uf46a";
+ public static final String buromobelexperte = "\uf37f";
+ public static final String bus = "\uf207";
+ public static final String bus_alt = "\uf55e";
+ public static final String business_time = "\uf64a";
+ public static final String buy_n_large = "\uf8a6";
+ public static final String buysellads = "\uf20d";
+ public static final String calculator = "\uf1ec";
+ public static final String calendar = "\uf133";
+ public static final String calendar_alt = "\uf073";
+ public static final String calendar_check = "\uf274";
+ public static final String calendar_day = "\uf783";
+ public static final String calendar_minus = "\uf272";
+ public static final String calendar_plus = "\uf271";
+ public static final String calendar_times = "\uf273";
+ public static final String calendar_week = "\uf784";
+ public static final String camera = "\uf030";
+ public static final String camera_retro = "\uf083";
+ public static final String campground = "\uf6bb";
+ public static final String canadian_maple_leaf = "\uf785";
+ public static final String candy_cane = "\uf786";
+ public static final String cannabis = "\uf55f";
+ public static final String capsules = "\uf46b";
+ public static final String car = "\uf1b9";
+ public static final String car_alt = "\uf5de";
+ public static final String car_battery = "\uf5df";
+ public static final String car_crash = "\uf5e1";
+ public static final String car_side = "\uf5e4";
+ public static final String caret_down = "\uf0d7";
+ public static final String caret_left = "\uf0d9";
+ public static final String caret_right = "\uf0da";
+ public static final String caret_square_down = "\uf150";
+ public static final String caret_square_left = "\uf191";
+ public static final String caret_square_right = "\uf152";
+ public static final String caret_square_up = "\uf151";
+ public static final String caret_up = "\uf0d8";
+ public static final String carrot = "\uf787";
+ public static final String cart_arrow_down = "\uf218";
+ public static final String cart_plus = "\uf217";
+ public static final String cash_register = "\uf788";
+ public static final String cat = "\uf6be";
+ public static final String cc_amazon_pay = "\uf42d";
+ public static final String cc_amex = "\uf1f3";
+ public static final String cc_apple_pay = "\uf416";
+ public static final String cc_diners_club = "\uf24c";
+ public static final String cc_discover = "\uf1f2";
+ public static final String cc_jcb = "\uf24b";
+ public static final String cc_mastercard = "\uf1f1";
+ public static final String cc_paypal = "\uf1f4";
+ public static final String cc_stripe = "\uf1f5";
+ public static final String cc_visa = "\uf1f0";
+ public static final String centercode = "\uf380";
+ public static final String centos = "\uf789";
+ public static final String certificate = "\uf0a3";
+ public static final String chair = "\uf6c0";
+ public static final String chalkboard = "\uf51b";
+ public static final String chalkboard_teacher = "\uf51c";
+ public static final String charging_station = "\uf5e7";
+ public static final String chart_area = "\uf1fe";
+ public static final String chart_bar = "\uf080";
+ public static final String chart_line = "\uf201";
+ public static final String chart_pie = "\uf200";
+ public static final String check = "\uf00c";
+ public static final String check_circle = "\uf058";
+ public static final String check_double = "\uf560";
+ public static final String check_square = "\uf14a";
+ public static final String cheese = "\uf7ef";
+ public static final String chess = "\uf439";
+ public static final String chess_bishop = "\uf43a";
+ public static final String chess_board = "\uf43c";
+ public static final String chess_king = "\uf43f";
+ public static final String chess_knight = "\uf441";
+ public static final String chess_pawn = "\uf443";
+ public static final String chess_queen = "\uf445";
+ public static final String chess_rook = "\uf447";
+ public static final String chevron_circle_down = "\uf13a";
+ public static final String chevron_circle_left = "\uf137";
+ public static final String chevron_circle_right = "\uf138";
+ public static final String chevron_circle_up = "\uf139";
+ public static final String chevron_down = "\uf078";
+ public static final String chevron_left = "\uf053";
+ public static final String chevron_right = "\uf054";
+ public static final String chevron_up = "\uf077";
+ public static final String child = "\uf1ae";
+ public static final String chrome = "\uf268";
+ public static final String chromecast = "\uf838";
+ public static final String church = "\uf51d";
+ public static final String circle = "\uf111";
+ public static final String circle_notch = "\uf1ce";
+ public static final String city = "\uf64f";
+ public static final String clinic_medical = "\uf7f2";
+ public static final String clipboard = "\uf328";
+ public static final String clipboard_check = "\uf46c";
+ public static final String clipboard_list = "\uf46d";
+ public static final String clock = "\uf017";
+ public static final String clone = "\uf24d";
+ public static final String closed_captioning = "\uf20a";
+ public static final String cloud = "\uf0c2";
+ public static final String cloud_download_alt = "\uf381";
+ public static final String cloud_meatball = "\uf73b";
+ public static final String cloud_moon = "\uf6c3";
+ public static final String cloud_moon_rain = "\uf73c";
+ public static final String cloud_rain = "\uf73d";
+ public static final String cloud_showers_heavy = "\uf740";
+ public static final String cloud_sun = "\uf6c4";
+ public static final String cloud_sun_rain = "\uf743";
+ public static final String cloud_upload_alt = "\uf382";
+ public static final String cloudscale = "\uf383";
+ public static final String cloudsmith = "\uf384";
+ public static final String cloudversify = "\uf385";
+ public static final String cocktail = "\uf561";
+ public static final String code = "\uf121";
+ public static final String code_branch = "\uf126";
+ public static final String codepen = "\uf1cb";
+ public static final String codiepie = "\uf284";
+ public static final String coffee = "\uf0f4";
+ public static final String cog = "\uf013";
+ public static final String cogs = "\uf085";
+ public static final String coins = "\uf51e";
+ public static final String columns = "\uf0db";
+ public static final String comment = "\uf075";
+ public static final String comment_alt = "\uf27a";
+ public static final String comment_dollar = "\uf651";
+ public static final String comment_dots = "\uf4ad";
+ public static final String comment_medical = "\uf7f5";
+ public static final String comment_slash = "\uf4b3";
+ public static final String comments = "\uf086";
+ public static final String comments_dollar = "\uf653";
+ public static final String compact_disc = "\uf51f";
+ public static final String compass = "\uf14e";
+ public static final String compress = "\uf066";
+ public static final String compress_arrows_alt = "\uf78c";
+ public static final String concierge_bell = "\uf562";
+ public static final String confluence = "\uf78d";
+ public static final String connectdevelop = "\uf20e";
+ public static final String contao = "\uf26d";
+ public static final String cookie = "\uf563";
+ public static final String cookie_bite = "\uf564";
+ public static final String copy = "\uf0c5";
+ public static final String copyright = "\uf1f9";
+ public static final String cotton_bureau = "\uf89e";
+ public static final String couch = "\uf4b8";
+ public static final String cpanel = "\uf388";
+ public static final String creative_commons = "\uf25e";
+ public static final String creative_commons_by = "\uf4e7";
+ public static final String creative_commons_nc = "\uf4e8";
+ public static final String creative_commons_nc_eu = "\uf4e9";
+ public static final String creative_commons_nc_jp = "\uf4ea";
+ public static final String creative_commons_nd = "\uf4eb";
+ public static final String creative_commons_pd = "\uf4ec";
+ public static final String creative_commons_pd_alt = "\uf4ed";
+ public static final String creative_commons_remix = "\uf4ee";
+ public static final String creative_commons_sa = "\uf4ef";
+ public static final String creative_commons_sampling = "\uf4f0";
+ public static final String creative_commons_sampling_plus = "\uf4f1";
+ public static final String creative_commons_share = "\uf4f2";
+ public static final String creative_commons_zero = "\uf4f3";
+ public static final String credit_card = "\uf09d";
+ public static final String critical_role = "\uf6c9";
+ public static final String crop = "\uf125";
+ public static final String crop_alt = "\uf565";
+ public static final String cross = "\uf654";
+ public static final String crosshairs = "\uf05b";
+ public static final String crow = "\uf520";
+ public static final String crown = "\uf521";
+ public static final String crutch = "\uf7f7";
+ public static final String css3 = "\uf13c";
+ public static final String css3_alt = "\uf38b";
+ public static final String cube = "\uf1b2";
+ public static final String cubes = "\uf1b3";
+ public static final String cut = "\uf0c4";
+ public static final String cuttlefish = "\uf38c";
+ public static final String d_and_d = "\uf38d";
+ public static final String d_and_d_beyond = "\uf6ca";
+ public static final String dashcube = "\uf210";
+ public static final String database = "\uf1c0";
+ public static final String deaf = "\uf2a4";
+ public static final String delicious = "\uf1a5";
+ public static final String democrat = "\uf747";
+ public static final String deploydog = "\uf38e";
+ public static final String deskpro = "\uf38f";
+ public static final String desktop = "\uf108";
+ public static final String dev = "\uf6cc";
+ public static final String deviantart = "\uf1bd";
+ public static final String dharmachakra = "\uf655";
+ public static final String dhl = "\uf790";
+ public static final String diagnoses = "\uf470";
+ public static final String diaspora = "\uf791";
+ public static final String dice = "\uf522";
+ public static final String dice_d20 = "\uf6cf";
+ public static final String dice_d6 = "\uf6d1";
+ public static final String dice_five = "\uf523";
+ public static final String dice_four = "\uf524";
+ public static final String dice_one = "\uf525";
+ public static final String dice_six = "\uf526";
+ public static final String dice_three = "\uf527";
+ public static final String dice_two = "\uf528";
+ public static final String digg = "\uf1a6";
+ public static final String digital_ocean = "\uf391";
+ public static final String digital_tachograph = "\uf566";
+ public static final String directions = "\uf5eb";
+ public static final String discord = "\uf392";
+ public static final String discourse = "\uf393";
+ public static final String divide = "\uf529";
+ public static final String dizzy = "\uf567";
+ public static final String dna = "\uf471";
+ public static final String dochub = "\uf394";
+ public static final String docker = "\uf395";
+ public static final String dog = "\uf6d3";
+ public static final String dollar_sign = "\uf155";
+ public static final String dolly = "\uf472";
+ public static final String dolly_flatbed = "\uf474";
+ public static final String donate = "\uf4b9";
+ public static final String door_closed = "\uf52a";
+ public static final String door_open = "\uf52b";
+ public static final String dot_circle = "\uf192";
+ public static final String dove = "\uf4ba";
+ public static final String download = "\uf019";
+ public static final String draft2digital = "\uf396";
+ public static final String drafting_compass = "\uf568";
+ public static final String dragon = "\uf6d5";
+ public static final String draw_polygon = "\uf5ee";
+ public static final String dribbble = "\uf17d";
+ public static final String dribbble_square = "\uf397";
+ public static final String dropbox = "\uf16b";
+ public static final String drum = "\uf569";
+ public static final String drum_steelpan = "\uf56a";
+ public static final String drumstick_bite = "\uf6d7";
+ public static final String drupal = "\uf1a9";
+ public static final String dumbbell = "\uf44b";
+ public static final String dumpster = "\uf793";
+ public static final String dumpster_fire = "\uf794";
+ public static final String dungeon = "\uf6d9";
+ public static final String dyalog = "\uf399";
+ public static final String earlybirds = "\uf39a";
+ public static final String ebay = "\uf4f4";
+ public static final String edge = "\uf282";
+ public static final String edit = "\uf044";
+ public static final String egg = "\uf7fb";
+ public static final String eject = "\uf052";
+ public static final String elementor = "\uf430";
+ public static final String ellipsis_h = "\uf141";
+ public static final String ellipsis_v = "\uf142";
+ public static final String ello = "\uf5f1";
+ public static final String ember = "\uf423";
+ public static final String empire = "\uf1d1";
+ public static final String envelope = "\uf0e0";
+ public static final String envelope_open = "\uf2b6";
+ public static final String envelope_open_text = "\uf658";
+ public static final String envelope_square = "\uf199";
+ public static final String envira = "\uf299";
+ public static final String equals = "\uf52c";
+ public static final String eraser = "\uf12d";
+ public static final String erlang = "\uf39d";
+ public static final String ethereum = "\uf42e";
+ public static final String ethernet = "\uf796";
+ public static final String etsy = "\uf2d7";
+ public static final String euro_sign = "\uf153";
+ public static final String evernote = "\uf839";
+ public static final String exchange_alt = "\uf362";
+ public static final String exclamation = "\uf12a";
+ public static final String exclamation_circle = "\uf06a";
+ public static final String exclamation_triangle = "\uf071";
+ public static final String expand = "\uf065";
+ public static final String expand_arrows_alt = "\uf31e";
+ public static final String expeditedssl = "\uf23e";
+ public static final String external_link_alt = "\uf35d";
+ public static final String external_link_square_alt = "\uf360";
+ public static final String eye = "\uf06e";
+ public static final String eye_dropper = "\uf1fb";
+ public static final String eye_slash = "\uf070";
+ public static final String facebook = "\uf09a";
+ public static final String facebook_f = "\uf39e";
+ public static final String facebook_messenger = "\uf39f";
+ public static final String facebook_square = "\uf082";
+ public static final String fan = "\uf863";
+ public static final String fantasy_flight_games = "\uf6dc";
+ public static final String fast_backward = "\uf049";
+ public static final String fast_forward = "\uf050";
+ public static final String fax = "\uf1ac";
+ public static final String feather = "\uf52d";
+ public static final String feather_alt = "\uf56b";
+ public static final String fedex = "\uf797";
+ public static final String fedora = "\uf798";
+ public static final String female = "\uf182";
+ public static final String fighter_jet = "\uf0fb";
+ public static final String figma = "\uf799";
+ public static final String file = "\uf15b";
+ public static final String file_alt = "\uf15c";
+ public static final String file_archive = "\uf1c6";
+ public static final String file_audio = "\uf1c7";
+ public static final String file_code = "\uf1c9";
+ public static final String file_contract = "\uf56c";
+ public static final String file_csv = "\uf6dd";
+ public static final String file_download = "\uf56d";
+ public static final String file_excel = "\uf1c3";
+ public static final String file_export = "\uf56e";
+ public static final String file_image = "\uf1c5";
+ public static final String file_import = "\uf56f";
+ public static final String file_invoice = "\uf570";
+ public static final String file_invoice_dollar = "\uf571";
+ public static final String file_medical = "\uf477";
+ public static final String file_medical_alt = "\uf478";
+ public static final String file_pdf = "\uf1c1";
+ public static final String file_powerpoint = "\uf1c4";
+ public static final String file_prescription = "\uf572";
+ public static final String file_signature = "\uf573";
+ public static final String file_upload = "\uf574";
+ public static final String file_video = "\uf1c8";
+ public static final String file_word = "\uf1c2";
+ public static final String fill = "\uf575";
+ public static final String fill_drip = "\uf576";
+ public static final String film = "\uf008";
+ public static final String filter = "\uf0b0";
+ public static final String fingerprint = "\uf577";
+ public static final String fire = "\uf06d";
+ public static final String fire_alt = "\uf7e4";
+ public static final String fire_extinguisher = "\uf134";
+ public static final String firefox = "\uf269";
+ public static final String first_aid = "\uf479";
+ public static final String first_order = "\uf2b0";
+ public static final String first_order_alt = "\uf50a";
+ public static final String firstdraft = "\uf3a1";
+ public static final String fish = "\uf578";
+ public static final String fist_raised = "\uf6de";
+ public static final String flag = "\uf024";
+ public static final String flag_checkered = "\uf11e";
+ public static final String flag_usa = "\uf74d";
+ public static final String flask = "\uf0c3";
+ public static final String flickr = "\uf16e";
+ public static final String flipboard = "\uf44d";
+ public static final String flushed = "\uf579";
+ public static final String fly = "\uf417";
+ public static final String folder = "\uf07b";
+ public static final String folder_minus = "\uf65d";
+ public static final String folder_open = "\uf07c";
+ public static final String folder_plus = "\uf65e";
+ public static final String font = "\uf031";
+ public static final String font_awesome = "\uf2b4";
+ public static final String font_awesome_alt = "\uf35c";
+ public static final String font_awesome_flag = "\uf425";
+ public static final String font_awesome_logo_full = "\uf4e6";
+ public static final String fonticons = "\uf280";
+ public static final String fonticons_fi = "\uf3a2";
+ public static final String football_ball = "\uf44e";
+ public static final String fort_awesome = "\uf286";
+ public static final String fort_awesome_alt = "\uf3a3";
+ public static final String forumbee = "\uf211";
+ public static final String forward = "\uf04e";
+ public static final String foursquare = "\uf180";
+ public static final String free_code_camp = "\uf2c5";
+ public static final String freebsd = "\uf3a4";
+ public static final String frog = "\uf52e";
+ public static final String frown = "\uf119";
+ public static final String frown_open = "\uf57a";
+ public static final String fulcrum = "\uf50b";
+ public static final String funnel_dollar = "\uf662";
+ public static final String futbol = "\uf1e3";
+ public static final String galactic_republic = "\uf50c";
+ public static final String galactic_senate = "\uf50d";
+ public static final String gamepad = "\uf11b";
+ public static final String gas_pump = "\uf52f";
+ public static final String gavel = "\uf0e3";
+ public static final String gem = "\uf3a5";
+ public static final String genderless = "\uf22d";
+ public static final String get_pocket = "\uf265";
+ public static final String gg = "\uf260";
+ public static final String gg_circle = "\uf261";
+ public static final String ghost = "\uf6e2";
+ public static final String gift = "\uf06b";
+ public static final String gifts = "\uf79c";
+ public static final String git = "\uf1d3";
+ public static final String git_alt = "\uf841";
+ public static final String git_square = "\uf1d2";
+ public static final String github = "\uf09b";
+ public static final String github_alt = "\uf113";
+ public static final String github_square = "\uf092";
+ public static final String gitkraken = "\uf3a6";
+ public static final String gitlab = "\uf296";
+ public static final String gitter = "\uf426";
+ public static final String glass_cheers = "\uf79f";
+ public static final String glass_martini = "\uf000";
+ public static final String glass_martini_alt = "\uf57b";
+ public static final String glass_whiskey = "\uf7a0";
+ public static final String glasses = "\uf530";
+ public static final String glide = "\uf2a5";
+ public static final String glide_g = "\uf2a6";
+ public static final String globe = "\uf0ac";
+ public static final String globe_africa = "\uf57c";
+ public static final String globe_americas = "\uf57d";
+ public static final String globe_asia = "\uf57e";
+ public static final String globe_europe = "\uf7a2";
+ public static final String gofore = "\uf3a7";
+ public static final String golf_ball = "\uf450";
+ public static final String goodreads = "\uf3a8";
+ public static final String goodreads_g = "\uf3a9";
+ public static final String google = "\uf1a0";
+ public static final String google_drive = "\uf3aa";
+ public static final String google_play = "\uf3ab";
+ public static final String google_plus = "\uf2b3";
+ public static final String google_plus_g = "\uf0d5";
+ public static final String google_plus_square = "\uf0d4";
+ public static final String google_wallet = "\uf1ee";
+ public static final String gopuram = "\uf664";
+ public static final String graduation_cap = "\uf19d";
+ public static final String gratipay = "\uf184";
+ public static final String grav = "\uf2d6";
+ public static final String greater_than = "\uf531";
+ public static final String greater_than_equal = "\uf532";
+ public static final String grimace = "\uf57f";
+ public static final String grin = "\uf580";
+ public static final String grin_alt = "\uf581";
+ public static final String grin_beam = "\uf582";
+ public static final String grin_beam_sweat = "\uf583";
+ public static final String grin_hearts = "\uf584";
+ public static final String grin_squint = "\uf585";
+ public static final String grin_squint_tears = "\uf586";
+ public static final String grin_stars = "\uf587";
+ public static final String grin_tears = "\uf588";
+ public static final String grin_tongue = "\uf589";
+ public static final String grin_tongue_squint = "\uf58a";
+ public static final String grin_tongue_wink = "\uf58b";
+ public static final String grin_wink = "\uf58c";
+ public static final String grip_horizontal = "\uf58d";
+ public static final String grip_lines = "\uf7a4";
+ public static final String grip_lines_vertical = "\uf7a5";
+ public static final String grip_vertical = "\uf58e";
+ public static final String gripfire = "\uf3ac";
+ public static final String grunt = "\uf3ad";
+ public static final String guitar = "\uf7a6";
+ public static final String gulp = "\uf3ae";
+ public static final String h_square = "\uf0fd";
+ public static final String hacker_news = "\uf1d4";
+ public static final String hacker_news_square = "\uf3af";
+ public static final String hackerrank = "\uf5f7";
+ public static final String hamburger = "\uf805";
+ public static final String hammer = "\uf6e3";
+ public static final String hamsa = "\uf665";
+ public static final String hand_holding = "\uf4bd";
+ public static final String hand_holding_heart = "\uf4be";
+ public static final String hand_holding_usd = "\uf4c0";
+ public static final String hand_lizard = "\uf258";
+ public static final String hand_middle_finger = "\uf806";
+ public static final String hand_paper = "\uf256";
+ public static final String hand_peace = "\uf25b";
+ public static final String hand_point_down = "\uf0a7";
+ public static final String hand_point_left = "\uf0a5";
+ public static final String hand_point_right = "\uf0a4";
+ public static final String hand_point_up = "\uf0a6";
+ public static final String hand_pointer = "\uf25a";
+ public static final String hand_rock = "\uf255";
+ public static final String hand_scissors = "\uf257";
+ public static final String hand_spock = "\uf259";
+ public static final String hands = "\uf4c2";
+ public static final String hands_helping = "\uf4c4";
+ public static final String handshake = "\uf2b5";
+ public static final String hanukiah = "\uf6e6";
+ public static final String hard_hat = "\uf807";
+ public static final String hashtag = "\uf292";
+ public static final String hat_cowboy = "\uf8c0";
+ public static final String hat_cowboy_side = "\uf8c1";
+ public static final String hat_wizard = "\uf6e8";
+ public static final String haykal = "\uf666";
+ public static final String hdd = "\uf0a0";
+ public static final String heading = "\uf1dc";
+ public static final String headphones = "\uf025";
+ public static final String headphones_alt = "\uf58f";
+ public static final String headset = "\uf590";
+ public static final String heart = "\uf004";
+ public static final String heart_broken = "\uf7a9";
+ public static final String heartbeat = "\uf21e";
+ public static final String helicopter = "\uf533";
+ public static final String highlighter = "\uf591";
+ public static final String hiking = "\uf6ec";
+ public static final String hippo = "\uf6ed";
+ public static final String hips = "\uf452";
+ public static final String hire_a_helper = "\uf3b0";
+ public static final String history = "\uf1da";
+ public static final String hockey_puck = "\uf453";
+ public static final String holly_berry = "\uf7aa";
+ public static final String home = "\uf015";
+ public static final String hooli = "\uf427";
+ public static final String hornbill = "\uf592";
+ public static final String horse = "\uf6f0";
+ public static final String horse_head = "\uf7ab";
+ public static final String hospital = "\uf0f8";
+ public static final String hospital_alt = "\uf47d";
+ public static final String hospital_symbol = "\uf47e";
+ public static final String hot_tub = "\uf593";
+ public static final String hotdog = "\uf80f";
+ public static final String hotel = "\uf594";
+ public static final String hotjar = "\uf3b1";
+ public static final String hourglass = "\uf254";
+ public static final String hourglass_end = "\uf253";
+ public static final String hourglass_half = "\uf252";
+ public static final String hourglass_start = "\uf251";
+ public static final String house_damage = "\uf6f1";
+ public static final String houzz = "\uf27c";
+ public static final String hryvnia = "\uf6f2";
+ public static final String html5 = "\uf13b";
+ public static final String hubspot = "\uf3b2";
+ public static final String i_cursor = "\uf246";
+ public static final String ice_cream = "\uf810";
+ public static final String icicles = "\uf7ad";
+ public static final String icons = "\uf86d";
+ public static final String id_badge = "\uf2c1";
+ public static final String id_card = "\uf2c2";
+ public static final String id_card_alt = "\uf47f";
+ public static final String igloo = "\uf7ae";
+ public static final String image = "\uf03e";
+ public static final String images = "\uf302";
+ public static final String imdb = "\uf2d8";
+ public static final String inbox = "\uf01c";
+ public static final String indent = "\uf03c";
+ public static final String industry = "\uf275";
+ public static final String infinity = "\uf534";
+ public static final String info = "\uf129";
+ public static final String info_circle = "\uf05a";
+ public static final String instagram = "\uf16d";
+ public static final String intercom = "\uf7af";
+ public static final String internet_explorer = "\uf26b";
+ public static final String invision = "\uf7b0";
+ public static final String ioxhost = "\uf208";
+ public static final String italic = "\uf033";
+ public static final String itch_io = "\uf83a";
+ public static final String itunes = "\uf3b4";
+ public static final String itunes_note = "\uf3b5";
+ public static final String java = "\uf4e4";
+ public static final String jedi = "\uf669";
+ public static final String jedi_order = "\uf50e";
+ public static final String jenkins = "\uf3b6";
+ public static final String jira = "\uf7b1";
+ public static final String joget = "\uf3b7";
+ public static final String joint = "\uf595";
+ public static final String joomla = "\uf1aa";
+ public static final String journal_whills = "\uf66a";
+ public static final String js = "\uf3b8";
+ public static final String js_square = "\uf3b9";
+ public static final String jsfiddle = "\uf1cc";
+ public static final String kaaba = "\uf66b";
+ public static final String kaggle = "\uf5fa";
+ public static final String key = "\uf084";
+ public static final String keybase = "\uf4f5";
+ public static final String keyboard = "\uf11c";
+ public static final String keycdn = "\uf3ba";
+ public static final String khanda = "\uf66d";
+ public static final String kickstarter = "\uf3bb";
+ public static final String kickstarter_k = "\uf3bc";
+ public static final String kiss = "\uf596";
+ public static final String kiss_beam = "\uf597";
+ public static final String kiss_wink_heart = "\uf598";
+ public static final String kiwi_bird = "\uf535";
+ public static final String korvue = "\uf42f";
+ public static final String landmark = "\uf66f";
+ public static final String language = "\uf1ab";
+ public static final String laptop = "\uf109";
+ public static final String laptop_code = "\uf5fc";
+ public static final String laptop_medical = "\uf812";
+ public static final String laravel = "\uf3bd";
+ public static final String lastfm = "\uf202";
+ public static final String lastfm_square = "\uf203";
+ public static final String laugh = "\uf599";
+ public static final String laugh_beam = "\uf59a";
+ public static final String laugh_squint = "\uf59b";
+ public static final String laugh_wink = "\uf59c";
+ public static final String layer_group = "\uf5fd";
+ public static final String leaf = "\uf06c";
+ public static final String leanpub = "\uf212";
+ public static final String lemon = "\uf094";
+ public static final String less = "\uf41d";
+ public static final String less_than = "\uf536";
+ public static final String less_than_equal = "\uf537";
+ public static final String level_down_alt = "\uf3be";
+ public static final String level_up_alt = "\uf3bf";
+ public static final String life_ring = "\uf1cd";
+ public static final String lightbulb = "\uf0eb";
+ public static final String line = "\uf3c0";
+ public static final String link = "\uf0c1";
+ public static final String linkedin = "\uf08c";
+ public static final String linkedin_in = "\uf0e1";
+ public static final String linode = "\uf2b8";
+ public static final String linux = "\uf17c";
+ public static final String lira_sign = "\uf195";
+ public static final String list = "\uf03a";
+ public static final String list_alt = "\uf022";
+ public static final String list_ol = "\uf0cb";
+ public static final String list_ul = "\uf0ca";
+ public static final String location_arrow = "\uf124";
+ public static final String lock = "\uf023";
+ public static final String lock_open = "\uf3c1";
+ public static final String long_arrow_alt_down = "\uf309";
+ public static final String long_arrow_alt_left = "\uf30a";
+ public static final String long_arrow_alt_right = "\uf30b";
+ public static final String long_arrow_alt_up = "\uf30c";
+ public static final String low_vision = "\uf2a8";
+ public static final String luggage_cart = "\uf59d";
+ public static final String lyft = "\uf3c3";
+ public static final String magento = "\uf3c4";
+ public static final String magic = "\uf0d0";
+ public static final String magnet = "\uf076";
+ public static final String mail_bulk = "\uf674";
+ public static final String mailchimp = "\uf59e";
+ public static final String male = "\uf183";
+ public static final String mandalorian = "\uf50f";
+ public static final String map = "\uf279";
+ public static final String map_marked = "\uf59f";
+ public static final String map_marked_alt = "\uf5a0";
+ public static final String map_marker = "\uf041";
+ public static final String map_marker_alt = "\uf3c5";
+ public static final String map_pin = "\uf276";
+ public static final String map_signs = "\uf277";
+ public static final String markdown = "\uf60f";
+ public static final String marker = "\uf5a1";
+ public static final String mars = "\uf222";
+ public static final String mars_double = "\uf227";
+ public static final String mars_stroke = "\uf229";
+ public static final String mars_stroke_h = "\uf22b";
+ public static final String mars_stroke_v = "\uf22a";
+ public static final String mask = "\uf6fa";
+ public static final String mastodon = "\uf4f6";
+ public static final String maxcdn = "\uf136";
+ public static final String mdb = "\uf8ca";
+ public static final String medal = "\uf5a2";
+ public static final String medapps = "\uf3c6";
+ public static final String medium = "\uf23a";
+ public static final String medium_m = "\uf3c7";
+ public static final String medkit = "\uf0fa";
+ public static final String medrt = "\uf3c8";
+ public static final String meetup = "\uf2e0";
+ public static final String megaport = "\uf5a3";
+ public static final String meh = "\uf11a";
+ public static final String meh_blank = "\uf5a4";
+ public static final String meh_rolling_eyes = "\uf5a5";
+ public static final String memory = "\uf538";
+ public static final String mendeley = "\uf7b3";
+ public static final String menorah = "\uf676";
+ public static final String mercury = "\uf223";
+ public static final String meteor = "\uf753";
+ public static final String microchip = "\uf2db";
+ public static final String microphone = "\uf130";
+ public static final String microphone_alt = "\uf3c9";
+ public static final String microphone_alt_slash = "\uf539";
+ public static final String microphone_slash = "\uf131";
+ public static final String microscope = "\uf610";
+ public static final String microsoft = "\uf3ca";
+ public static final String minus = "\uf068";
+ public static final String minus_circle = "\uf056";
+ public static final String minus_square = "\uf146";
+ public static final String mitten = "\uf7b5";
+ public static final String mix = "\uf3cb";
+ public static final String mixcloud = "\uf289";
+ public static final String mizuni = "\uf3cc";
+ public static final String mobile = "\uf10b";
+ public static final String mobile_alt = "\uf3cd";
+ public static final String modx = "\uf285";
+ public static final String monero = "\uf3d0";
+ public static final String money_bill = "\uf0d6";
+ public static final String money_bill_alt = "\uf3d1";
+ public static final String money_bill_wave = "\uf53a";
+ public static final String money_bill_wave_alt = "\uf53b";
+ public static final String money_check = "\uf53c";
+ public static final String money_check_alt = "\uf53d";
+ public static final String monument = "\uf5a6";
+ public static final String moon = "\uf186";
+ public static final String mortar_pestle = "\uf5a7";
+ public static final String mosque = "\uf678";
+ public static final String motorcycle = "\uf21c";
+ public static final String mountain = "\uf6fc";
+ public static final String mouse = "\uf8cc";
+ public static final String mouse_pointer = "\uf245";
+ public static final String mug_hot = "\uf7b6";
+ public static final String music = "\uf001";
+ public static final String napster = "\uf3d2";
+ public static final String neos = "\uf612";
+ public static final String network_wired = "\uf6ff";
+ public static final String neuter = "\uf22c";
+ public static final String newspaper = "\uf1ea";
+ public static final String nimblr = "\uf5a8";
+ public static final String node = "\uf419";
+ public static final String node_js = "\uf3d3";
+ public static final String not_equal = "\uf53e";
+ public static final String notes_medical = "\uf481";
+ public static final String npm = "\uf3d4";
+ public static final String ns8 = "\uf3d5";
+ public static final String nutritionix = "\uf3d6";
+ public static final String object_group = "\uf247";
+ public static final String object_ungroup = "\uf248";
+ public static final String odnoklassniki = "\uf263";
+ public static final String odnoklassniki_square = "\uf264";
+ public static final String oil_can = "\uf613";
+ public static final String old_republic = "\uf510";
+ public static final String om = "\uf679";
+ public static final String opencart = "\uf23d";
+ public static final String openid = "\uf19b";
+ public static final String opera = "\uf26a";
+ public static final String optin_monster = "\uf23c";
+ public static final String orcid = "\uf8d2";
+ public static final String osi = "\uf41a";
+ public static final String otter = "\uf700";
+ public static final String outdent = "\uf03b";
+ public static final String page4 = "\uf3d7";
+ public static final String pagelines = "\uf18c";
+ public static final String pager = "\uf815";
+ public static final String paint_brush = "\uf1fc";
+ public static final String paint_roller = "\uf5aa";
+ public static final String palette = "\uf53f";
+ public static final String palfed = "\uf3d8";
+ public static final String pallet = "\uf482";
+ public static final String paper_plane = "\uf1d8";
+ public static final String paperclip = "\uf0c6";
+ public static final String parachute_box = "\uf4cd";
+ public static final String paragraph = "\uf1dd";
+ public static final String parking = "\uf540";
+ public static final String passport = "\uf5ab";
+ public static final String pastafarianism = "\uf67b";
+ public static final String paste = "\uf0ea";
+ public static final String patreon = "\uf3d9";
+ public static final String pause = "\uf04c";
+ public static final String pause_circle = "\uf28b";
+ public static final String paw = "\uf1b0";
+ public static final String paypal = "\uf1ed";
+ public static final String peace = "\uf67c";
+ public static final String pen = "\uf304";
+ public static final String pen_alt = "\uf305";
+ public static final String pen_fancy = "\uf5ac";
+ public static final String pen_nib = "\uf5ad";
+ public static final String pen_square = "\uf14b";
+ public static final String pencil_alt = "\uf303";
+ public static final String pencil_ruler = "\uf5ae";
+ public static final String penny_arcade = "\uf704";
+ public static final String people_carry = "\uf4ce";
+ public static final String pepper_hot = "\uf816";
+ public static final String percent = "\uf295";
+ public static final String percentage = "\uf541";
+ public static final String periscope = "\uf3da";
+ public static final String person_booth = "\uf756";
+ public static final String phabricator = "\uf3db";
+ public static final String phoenix_framework = "\uf3dc";
+ public static final String phoenix_squadron = "\uf511";
+ public static final String phone = "\uf095";
+ public static final String phone_alt = "\uf879";
+ public static final String phone_slash = "\uf3dd";
+ public static final String phone_square = "\uf098";
+ public static final String phone_square_alt = "\uf87b";
+ public static final String phone_volume = "\uf2a0";
+ public static final String photo_video = "\uf87c";
+ public static final String php = "\uf457";
+ public static final String pied_piper = "\uf2ae";
+ public static final String pied_piper_alt = "\uf1a8";
+ public static final String pied_piper_hat = "\uf4e5";
+ public static final String pied_piper_pp = "\uf1a7";
+ public static final String piggy_bank = "\uf4d3";
+ public static final String pills = "\uf484";
+ public static final String pinterest = "\uf0d2";
+ public static final String pinterest_p = "\uf231";
+ public static final String pinterest_square = "\uf0d3";
+ public static final String pizza_slice = "\uf818";
+ public static final String place_of_worship = "\uf67f";
+ public static final String plane = "\uf072";
+ public static final String plane_arrival = "\uf5af";
+ public static final String plane_departure = "\uf5b0";
+ public static final String play = "\uf04b";
+ public static final String play_circle = "\uf144";
+ public static final String playstation = "\uf3df";
+ public static final String plug = "\uf1e6";
+ public static final String plus = "\uf067";
+ public static final String plus_circle = "\uf055";
+ public static final String plus_square = "\uf0fe";
+ public static final String podcast = "\uf2ce";
+ public static final String poll = "\uf681";
+ public static final String poll_h = "\uf682";
+ public static final String poo = "\uf2fe";
+ public static final String poo_storm = "\uf75a";
+ public static final String poop = "\uf619";
+ public static final String portrait = "\uf3e0";
+ public static final String pound_sign = "\uf154";
+ public static final String power_off = "\uf011";
+ public static final String pray = "\uf683";
+ public static final String praying_hands = "\uf684";
+ public static final String prescription = "\uf5b1";
+ public static final String prescription_bottle = "\uf485";
+ public static final String prescription_bottle_alt = "\uf486";
+ public static final String print = "\uf02f";
+ public static final String procedures = "\uf487";
+ public static final String product_hunt = "\uf288";
+ public static final String project_diagram = "\uf542";
+ public static final String pushed = "\uf3e1";
+ public static final String puzzle_piece = "\uf12e";
+ public static final String python = "\uf3e2";
+ public static final String qq = "\uf1d6";
+ public static final String qrcode = "\uf029";
+ public static final String question = "\uf128";
+ public static final String question_circle = "\uf059";
+ public static final String quidditch = "\uf458";
+ public static final String quinscape = "\uf459";
+ public static final String quora = "\uf2c4";
+ public static final String quote_left = "\uf10d";
+ public static final String quote_right = "\uf10e";
+ public static final String quran = "\uf687";
+ public static final String r_project = "\uf4f7";
+ public static final String radiation = "\uf7b9";
+ public static final String radiation_alt = "\uf7ba";
+ public static final String rainbow = "\uf75b";
+ public static final String random = "\uf074";
+ public static final String raspberry_pi = "\uf7bb";
+ public static final String ravelry = "\uf2d9";
+ public static final String react = "\uf41b";
+ public static final String reacteurope = "\uf75d";
+ public static final String readme = "\uf4d5";
+ public static final String rebel = "\uf1d0";
+ public static final String receipt = "\uf543";
+ public static final String record_vinyl = "\uf8d9";
+ public static final String recycle = "\uf1b8";
+ public static final String red_river = "\uf3e3";
+ public static final String reddit = "\uf1a1";
+ public static final String reddit_alien = "\uf281";
+ public static final String reddit_square = "\uf1a2";
+ public static final String redhat = "\uf7bc";
+ public static final String redo = "\uf01e";
+ public static final String redo_alt = "\uf2f9";
+ public static final String registered = "\uf25d";
+ public static final String remove_format = "\uf87d";
+ public static final String renren = "\uf18b";
+ public static final String reply = "\uf3e5";
+ public static final String reply_all = "\uf122";
+ public static final String replyd = "\uf3e6";
+ public static final String republican = "\uf75e";
+ public static final String researchgate = "\uf4f8";
+ public static final String resolving = "\uf3e7";
+ public static final String restroom = "\uf7bd";
+ public static final String retweet = "\uf079";
+ public static final String rev = "\uf5b2";
+ public static final String ribbon = "\uf4d6";
+ public static final String ring = "\uf70b";
+ public static final String road = "\uf018";
+ public static final String robot = "\uf544";
+ public static final String rocket = "\uf135";
+ public static final String rocketchat = "\uf3e8";
+ public static final String rockrms = "\uf3e9";
+ public static final String route = "\uf4d7";
+ public static final String rss = "\uf09e";
+ public static final String rss_square = "\uf143";
+ public static final String ruble_sign = "\uf158";
+ public static final String ruler = "\uf545";
+ public static final String ruler_combined = "\uf546";
+ public static final String ruler_horizontal = "\uf547";
+ public static final String ruler_vertical = "\uf548";
+ public static final String running = "\uf70c";
+ public static final String rupee_sign = "\uf156";
+ public static final String sad_cry = "\uf5b3";
+ public static final String sad_tear = "\uf5b4";
+ public static final String safari = "\uf267";
+ public static final String salesforce = "\uf83b";
+ public static final String sass = "\uf41e";
+ public static final String satellite = "\uf7bf";
+ public static final String satellite_dish = "\uf7c0";
+ public static final String save = "\uf0c7";
+ public static final String schlix = "\uf3ea";
+ public static final String school = "\uf549";
+ public static final String screwdriver = "\uf54a";
+ public static final String scribd = "\uf28a";
+ public static final String scroll = "\uf70e";
+ public static final String sd_card = "\uf7c2";
+ public static final String search = "\uf002";
+ public static final String search_dollar = "\uf688";
+ public static final String search_location = "\uf689";
+ public static final String search_minus = "\uf010";
+ public static final String search_plus = "\uf00e";
+ public static final String searchengin = "\uf3eb";
+ public static final String seedling = "\uf4d8";
+ public static final String sellcast = "\uf2da";
+ public static final String sellsy = "\uf213";
+ public static final String server = "\uf233";
+ public static final String servicestack = "\uf3ec";
+ public static final String shapes = "\uf61f";
+ public static final String share = "\uf064";
+ public static final String share_alt = "\uf1e0";
+ public static final String share_alt_square = "\uf1e1";
+ public static final String share_square = "\uf14d";
+ public static final String shekel_sign = "\uf20b";
+ public static final String shield_alt = "\uf3ed";
+ public static final String ship = "\uf21a";
+ public static final String shipping_fast = "\uf48b";
+ public static final String shirtsinbulk = "\uf214";
+ public static final String shoe_prints = "\uf54b";
+ public static final String shopping_bag = "\uf290";
+ public static final String shopping_basket = "\uf291";
+ public static final String shopping_cart = "\uf07a";
+ public static final String shopware = "\uf5b5";
+ public static final String shower = "\uf2cc";
+ public static final String shuttle_van = "\uf5b6";
+ public static final String sign = "\uf4d9";
+ public static final String sign_in_alt = "\uf2f6";
+ public static final String sign_language = "\uf2a7";
+ public static final String sign_out_alt = "\uf2f5";
+ public static final String signal = "\uf012";
+ public static final String signature = "\uf5b7";
+ public static final String sim_card = "\uf7c4";
+ public static final String simplybuilt = "\uf215";
+ public static final String sistrix = "\uf3ee";
+ public static final String sitemap = "\uf0e8";
+ public static final String sith = "\uf512";
+ public static final String skating = "\uf7c5";
+ public static final String sketch = "\uf7c6";
+ public static final String skiing = "\uf7c9";
+ public static final String skiing_nordic = "\uf7ca";
+ public static final String skull = "\uf54c";
+ public static final String skull_crossbones = "\uf714";
+ public static final String skyatlas = "\uf216";
+ public static final String skype = "\uf17e";
+ public static final String slack = "\uf198";
+ public static final String slack_hash = "\uf3ef";
+ public static final String slash = "\uf715";
+ public static final String sleigh = "\uf7cc";
+ public static final String sliders_h = "\uf1de";
+ public static final String slideshare = "\uf1e7";
+ public static final String smile = "\uf118";
+ public static final String smile_beam = "\uf5b8";
+ public static final String smile_wink = "\uf4da";
+ public static final String smog = "\uf75f";
+ public static final String smoking = "\uf48d";
+ public static final String smoking_ban = "\uf54d";
+ public static final String sms = "\uf7cd";
+ public static final String snapchat = "\uf2ab";
+ public static final String snapchat_ghost = "\uf2ac";
+ public static final String snapchat_square = "\uf2ad";
+ public static final String snowboarding = "\uf7ce";
+ public static final String snowflake = "\uf2dc";
+ public static final String snowman = "\uf7d0";
+ public static final String snowplow = "\uf7d2";
+ public static final String socks = "\uf696";
+ public static final String solar_panel = "\uf5ba";
+ public static final String sort = "\uf0dc";
+ public static final String sort_alpha_down = "\uf15d";
+ public static final String sort_alpha_down_alt = "\uf881";
+ public static final String sort_alpha_up = "\uf15e";
+ public static final String sort_alpha_up_alt = "\uf882";
+ public static final String sort_amount_down = "\uf160";
+ public static final String sort_amount_down_alt = "\uf884";
+ public static final String sort_amount_up = "\uf161";
+ public static final String sort_amount_up_alt = "\uf885";
+ public static final String sort_down = "\uf0dd";
+ public static final String sort_numeric_down = "\uf162";
+ public static final String sort_numeric_down_alt = "\uf886";
+ public static final String sort_numeric_up = "\uf163";
+ public static final String sort_numeric_up_alt = "\uf887";
+ public static final String sort_up = "\uf0de";
+ public static final String soundcloud = "\uf1be";
+ public static final String sourcetree = "\uf7d3";
+ public static final String spa = "\uf5bb";
+ public static final String space_shuttle = "\uf197";
+ public static final String speakap = "\uf3f3";
+ public static final String speaker_deck = "\uf83c";
+ public static final String spell_check = "\uf891";
+ public static final String spider = "\uf717";
+ public static final String spinner = "\uf110";
+ public static final String splotch = "\uf5bc";
+ public static final String spotify = "\uf1bc";
+ public static final String spray_can = "\uf5bd";
+ public static final String square = "\uf0c8";
+ public static final String square_full = "\uf45c";
+ public static final String square_root_alt = "\uf698";
+ public static final String squarespace = "\uf5be";
+ public static final String stack_exchange = "\uf18d";
+ public static final String stack_overflow = "\uf16c";
+ public static final String stackpath = "\uf842";
+ public static final String stamp = "\uf5bf";
+ public static final String star = "\uf005";
+ public static final String star_and_crescent = "\uf699";
+ public static final String star_half = "\uf089";
+ public static final String star_half_alt = "\uf5c0";
+ public static final String star_of_david = "\uf69a";
+ public static final String star_of_life = "\uf621";
+ public static final String staylinked = "\uf3f5";
+ public static final String steam = "\uf1b6";
+ public static final String steam_square = "\uf1b7";
+ public static final String steam_symbol = "\uf3f6";
+ public static final String step_backward = "\uf048";
+ public static final String step_forward = "\uf051";
+ public static final String stethoscope = "\uf0f1";
+ public static final String sticker_mule = "\uf3f7";
+ public static final String sticky_note = "\uf249";
+ public static final String stop = "\uf04d";
+ public static final String stop_circle = "\uf28d";
+ public static final String stopwatch = "\uf2f2";
+ public static final String store = "\uf54e";
+ public static final String store_alt = "\uf54f";
+ public static final String strava = "\uf428";
+ public static final String stream = "\uf550";
+ public static final String street_view = "\uf21d";
+ public static final String strikethrough = "\uf0cc";
+ public static final String stripe = "\uf429";
+ public static final String stripe_s = "\uf42a";
+ public static final String stroopwafel = "\uf551";
+ public static final String studiovinari = "\uf3f8";
+ public static final String stumbleupon = "\uf1a4";
+ public static final String stumbleupon_circle = "\uf1a3";
+ public static final String subscript = "\uf12c";
+ public static final String subway = "\uf239";
+ public static final String suitcase = "\uf0f2";
+ public static final String suitcase_rolling = "\uf5c1";
+ public static final String sun = "\uf185";
+ public static final String superpowers = "\uf2dd";
+ public static final String superscript = "\uf12b";
+ public static final String supple = "\uf3f9";
+ public static final String surprise = "\uf5c2";
+ public static final String suse = "\uf7d6";
+ public static final String swatchbook = "\uf5c3";
+ public static final String swift = "\uf8e1";
+ public static final String swimmer = "\uf5c4";
+ public static final String swimming_pool = "\uf5c5";
+ public static final String symfony = "\uf83d";
+ public static final String synagogue = "\uf69b";
+ public static final String sync = "\uf021";
+ public static final String sync_alt = "\uf2f1";
+ public static final String syringe = "\uf48e";
+ public static final String table = "\uf0ce";
+ public static final String table_tennis = "\uf45d";
+ public static final String tablet = "\uf10a";
+ public static final String tablet_alt = "\uf3fa";
+ public static final String tablets = "\uf490";
+ public static final String tachometer_alt = "\uf3fd";
+ public static final String tag = "\uf02b";
+ public static final String tags = "\uf02c";
+ public static final String tape = "\uf4db";
+ public static final String tasks = "\uf0ae";
+ public static final String taxi = "\uf1ba";
+ public static final String teamspeak = "\uf4f9";
+ public static final String teeth = "\uf62e";
+ public static final String teeth_open = "\uf62f";
+ public static final String telegram = "\uf2c6";
+ public static final String telegram_plane = "\uf3fe";
+ public static final String temperature_high = "\uf769";
+ public static final String temperature_low = "\uf76b";
+ public static final String tencent_weibo = "\uf1d5";
+ public static final String tenge = "\uf7d7";
+ public static final String terminal = "\uf120";
+ public static final String text_height = "\uf034";
+ public static final String text_width = "\uf035";
+ public static final String th = "\uf00a";
+ public static final String th_large = "\uf009";
+ public static final String th_list = "\uf00b";
+ public static final String the_red_yeti = "\uf69d";
+ public static final String theater_masks = "\uf630";
+ public static final String themeco = "\uf5c6";
+ public static final String themeisle = "\uf2b2";
+ public static final String thermometer = "\uf491";
+ public static final String thermometer_empty = "\uf2cb";
+ public static final String thermometer_full = "\uf2c7";
+ public static final String thermometer_half = "\uf2c9";
+ public static final String thermometer_quarter = "\uf2ca";
+ public static final String thermometer_three_quarters = "\uf2c8";
+ public static final String think_peaks = "\uf731";
+ public static final String thumbs_down = "\uf165";
+ public static final String thumbs_up = "\uf164";
+ public static final String thumbtack = "\uf08d";
+ public static final String ticket_alt = "\uf3ff";
+ public static final String times = "\uf00d";
+ public static final String times_circle = "\uf057";
+ public static final String tint = "\uf043";
+ public static final String tint_slash = "\uf5c7";
+ public static final String tired = "\uf5c8";
+ public static final String toggle_off = "\uf204";
+ public static final String toggle_on = "\uf205";
+ public static final String toilet = "\uf7d8";
+ public static final String toilet_paper = "\uf71e";
+ public static final String toolbox = "\uf552";
+ public static final String tools = "\uf7d9";
+ public static final String tooth = "\uf5c9";
+ public static final String torah = "\uf6a0";
+ public static final String torii_gate = "\uf6a1";
+ public static final String tractor = "\uf722";
+ public static final String trade_federation = "\uf513";
+ public static final String trademark = "\uf25c";
+ public static final String traffic_light = "\uf637";
+ public static final String train = "\uf238";
+ public static final String tram = "\uf7da";
+ public static final String transgender = "\uf224";
+ public static final String transgender_alt = "\uf225";
+ public static final String trash = "\uf1f8";
+ public static final String trash_alt = "\uf2ed";
+ public static final String trash_restore = "\uf829";
+ public static final String trash_restore_alt = "\uf82a";
+ public static final String tree = "\uf1bb";
+ public static final String trello = "\uf181";
+ public static final String tripadvisor = "\uf262";
+ public static final String trophy = "\uf091";
+ public static final String truck = "\uf0d1";
+ public static final String truck_loading = "\uf4de";
+ public static final String truck_monster = "\uf63b";
+ public static final String truck_moving = "\uf4df";
+ public static final String truck_pickup = "\uf63c";
+ public static final String tshirt = "\uf553";
+ public static final String tty = "\uf1e4";
+ public static final String tumblr = "\uf173";
+ public static final String tumblr_square = "\uf174";
+ public static final String tv = "\uf26c";
+ public static final String twitch = "\uf1e8";
+ public static final String twitter = "\uf099";
+ public static final String twitter_square = "\uf081";
+ public static final String typo3 = "\uf42b";
+ public static final String uber = "\uf402";
+ public static final String ubuntu = "\uf7df";
+ public static final String uikit = "\uf403";
+ public static final String umbraco = "\uf8e8";
+ public static final String umbrella = "\uf0e9";
+ public static final String umbrella_beach = "\uf5ca";
+ public static final String underline = "\uf0cd";
+ public static final String undo = "\uf0e2";
+ public static final String undo_alt = "\uf2ea";
+ public static final String uniregistry = "\uf404";
+ public static final String universal_access = "\uf29a";
+ public static final String university = "\uf19c";
+ public static final String unlink = "\uf127";
+ public static final String unlock = "\uf09c";
+ public static final String unlock_alt = "\uf13e";
+ public static final String untappd = "\uf405";
+ public static final String upload = "\uf093";
+ public static final String ups = "\uf7e0";
+ public static final String usb = "\uf287";
+ public static final String user = "\uf007";
+ public static final String user_alt = "\uf406";
+ public static final String user_alt_slash = "\uf4fa";
+ public static final String user_astronaut = "\uf4fb";
+ public static final String user_check = "\uf4fc";
+ public static final String user_circle = "\uf2bd";
+ public static final String user_clock = "\uf4fd";
+ public static final String user_cog = "\uf4fe";
+ public static final String user_edit = "\uf4ff";
+ public static final String user_friends = "\uf500";
+ public static final String user_graduate = "\uf501";
+ public static final String user_injured = "\uf728";
+ public static final String user_lock = "\uf502";
+ public static final String user_md = "\uf0f0";
+ public static final String user_minus = "\uf503";
+ public static final String user_ninja = "\uf504";
+ public static final String user_nurse = "\uf82f";
+ public static final String user_plus = "\uf234";
+ public static final String user_secret = "\uf21b";
+ public static final String user_shield = "\uf505";
+ public static final String user_slash = "\uf506";
+ public static final String user_tag = "\uf507";
+ public static final String user_tie = "\uf508";
+ public static final String user_times = "\uf235";
+ public static final String users = "\uf0c0";
+ public static final String users_cog = "\uf509";
+ public static final String usps = "\uf7e1";
+ public static final String ussunnah = "\uf407";
+ public static final String utensil_spoon = "\uf2e5";
+ public static final String utensils = "\uf2e7";
+ public static final String vaadin = "\uf408";
+ public static final String vector_square = "\uf5cb";
+ public static final String venus = "\uf221";
+ public static final String venus_double = "\uf226";
+ public static final String venus_mars = "\uf228";
+ public static final String viacoin = "\uf237";
+ public static final String viadeo = "\uf2a9";
+ public static final String viadeo_square = "\uf2aa";
+ public static final String vial = "\uf492";
+ public static final String vials = "\uf493";
+ public static final String viber = "\uf409";
+ public static final String video = "\uf03d";
+ public static final String video_slash = "\uf4e2";
+ public static final String vihara = "\uf6a7";
+ public static final String vimeo = "\uf40a";
+ public static final String vimeo_square = "\uf194";
+ public static final String vimeo_v = "\uf27d";
+ public static final String vine = "\uf1ca";
+ public static final String vk = "\uf189";
+ public static final String vnv = "\uf40b";
+ public static final String voicemail = "\uf897";
+ public static final String volleyball_ball = "\uf45f";
+ public static final String volume_down = "\uf027";
+ public static final String volume_mute = "\uf6a9";
+ public static final String volume_off = "\uf026";
+ public static final String volume_up = "\uf028";
+ public static final String vote_yea = "\uf772";
+ public static final String vr_cardboard = "\uf729";
+ public static final String vuejs = "\uf41f";
+ public static final String walking = "\uf554";
+ public static final String wallet = "\uf555";
+ public static final String warehouse = "\uf494";
+ public static final String water = "\uf773";
+ public static final String wave_square = "\uf83e";
+ public static final String waze = "\uf83f";
+ public static final String weebly = "\uf5cc";
+ public static final String weibo = "\uf18a";
+ public static final String weight = "\uf496";
+ public static final String weight_hanging = "\uf5cd";
+ public static final String weixin = "\uf1d7";
+ public static final String whatsapp = "\uf232";
+ public static final String whatsapp_square = "\uf40c";
+ public static final String wheelchair = "\uf193";
+ public static final String whmcs = "\uf40d";
+ public static final String wifi = "\uf1eb";
+ public static final String wikipedia_w = "\uf266";
+ public static final String wind = "\uf72e";
+ public static final String window_close = "\uf410";
+ public static final String window_maximize = "\uf2d0";
+ public static final String window_minimize = "\uf2d1";
+ public static final String window_restore = "\uf2d2";
+ public static final String windows = "\uf17a";
+ public static final String wine_bottle = "\uf72f";
+ public static final String wine_glass = "\uf4e3";
+ public static final String wine_glass_alt = "\uf5ce";
+ public static final String wix = "\uf5cf";
+ public static final String wizards_of_the_coast = "\uf730";
+ public static final String wolf_pack_battalion = "\uf514";
+ public static final String won_sign = "\uf159";
+ public static final String wordpress = "\uf19a";
+ public static final String wordpress_simple = "\uf411";
+ public static final String wpbeginner = "\uf297";
+ public static final String wpexplorer = "\uf2de";
+ public static final String wpforms = "\uf298";
+ public static final String wpressr = "\uf3e4";
+ public static final String wrench = "\uf0ad";
+ public static final String x_ray = "\uf497";
+ public static final String xbox = "\uf412";
+ public static final String xing = "\uf168";
+ public static final String xing_square = "\uf169";
+ public static final String y_combinator = "\uf23b";
+ public static final String yahoo = "\uf19e";
+ public static final String yammer = "\uf840";
+ public static final String yandex = "\uf413";
+ public static final String yandex_international = "\uf414";
+ public static final String yarn = "\uf7e3";
+ public static final String yelp = "\uf1e9";
+ public static final String yen_sign = "\uf157";
+ public static final String yin_yang = "\uf6ad";
+ public static final String yoast = "\uf2b1";
+ public static final String youtube = "\uf167";
+ public static final String youtube_square = "\uf431";
+ public static final String zhihu = "\uf63f";
+}
\ No newline at end of file
diff --git a/src/main/java/net/silentclient/client/utils/io/BufferUtil.java b/src/main/java/net/silentclient/client/utils/io/BufferUtil.java
new file mode 100644
index 0000000..b7250d7
--- /dev/null
+++ b/src/main/java/net/silentclient/client/utils/io/BufferUtil.java
@@ -0,0 +1,45 @@
+package net.silentclient.client.utils.io;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+
+import static org.lwjgl.BufferUtils.createByteBuffer;
+import static org.lwjgl.system.MemoryUtil.memSlice;
+
+public class BufferUtil {
+ private static BufferUtil instance = new BufferUtil();
+ public static BufferUtil get() {
+ return instance;
+ }
+ public ByteBuffer getResourceBytes(ResourceLocation resource, int bufferSize) throws IOException {
+ ByteBuffer buffer;
+ InputStream source = Minecraft.getMinecraft().getResourceManager().getResource(resource).getInputStream();
+ ReadableByteChannel rbc = Channels.newChannel(source);
+
+ buffer = createByteBuffer(bufferSize);
+
+ while (true) {
+ int bytes = rbc.read(buffer);
+
+ if (bytes == -1) {
+ break;
+ }
+
+ if (buffer.remaining() == 0) {
+ ByteBuffer newBuffer = createByteBuffer(buffer.capacity() * 3 / 2);
+ buffer.flip();
+ newBuffer.put(buffer);
+ buffer = newBuffer;
+ }
+ }
+
+ buffer.flip();
+ return memSlice(buffer);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/silentclient/client/utils/io/LinkedStorage.java b/src/main/java/net/silentclient/client/utils/io/LinkedStorage.java
new file mode 100644
index 0000000..45404ce
--- /dev/null
+++ b/src/main/java/net/silentclient/client/utils/io/LinkedStorage.java
@@ -0,0 +1,42 @@
+package net.silentclient.client.utils.io;
+
+import org.lwjgl.system.MemoryUtil;
+
+import java.nio.Buffer;
+
+public class LinkedStorage {
+ private static OBJ head;
+
+ public static void put(Object val) {
+ OBJ newObj = new OBJ(val);
+ OBJ it = tail(head);
+ if(it == null) head = newObj;
+ else it.next = newObj;
+ }
+
+ private static OBJ tail(OBJ head) {
+ OBJ it;
+ for (it = head; it != null && it.next != null; it = it.next);
+ return it;
+ }
+
+ public static void free() {
+ if(head != null) {
+ OBJ it;
+ for (it = head; it.next != null; it = it.next) {
+ if(it.value instanceof Buffer) {
+ MemoryUtil.memFree((Buffer) it.value);
+ }
+ }
+ head = null;
+ }
+ }
+ private static class OBJ {
+ OBJ next;
+ Object value;
+
+ OBJ(Object v) {
+ value = v;
+ }
+ }
+}
\ No newline at end of file