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