From 104454503eb8f3f61a576bf4157f94805fceafd1 Mon Sep 17 00:00:00 2001 From: kirillsaint Date: Wed, 5 Jul 2023 15:27:33 +0600 Subject: [PATCH] Cursors --- .../java/net/silentclient/client/Client.java | 29 ++--- .../silentclient/client/gui/SilentScreen.java | 23 ++++ .../client/gui/clickgui/ClickGUI.java | 6 +- .../client/gui/elements/Input.java | 10 +- .../client/gui/hud/HUDConfigScreen.java | 9 ++ .../client/mixin/SilentClientTweaker.java | 8 ++ .../client/utils/MouseCursorHandler.java | 120 ++++++++++++++++++ .../client/utils/types/UserData.java | 4 + .../silentclient/mouse/edit_text.png | Bin 0 -> 499 bytes .../minecraft/silentclient/mouse/move.png | Bin 0 -> 287 bytes .../silentclient/mouse/nesw_resize.png | Bin 0 -> 354 bytes .../silentclient/mouse/nwse_resize.png | Bin 0 -> 239 bytes .../minecraft/silentclient/mouse/pointer.png | Bin 0 -> 653 bytes 13 files changed, 184 insertions(+), 25 deletions(-) create mode 100644 src/main/java/net/silentclient/client/utils/MouseCursorHandler.java create mode 100644 src/main/resources/assets/minecraft/silentclient/mouse/edit_text.png create mode 100644 src/main/resources/assets/minecraft/silentclient/mouse/move.png create mode 100644 src/main/resources/assets/minecraft/silentclient/mouse/nesw_resize.png create mode 100644 src/main/resources/assets/minecraft/silentclient/mouse/nwse_resize.png create mode 100644 src/main/resources/assets/minecraft/silentclient/mouse/pointer.png diff --git a/src/main/java/net/silentclient/client/Client.java b/src/main/java/net/silentclient/client/Client.java index 094a753..717e3b9 100644 --- a/src/main/java/net/silentclient/client/Client.java +++ b/src/main/java/net/silentclient/client/Client.java @@ -20,6 +20,7 @@ import net.silentclient.client.gui.clickgui.ClickGUI; import net.silentclient.client.gui.font.SilentFontRenderer; import net.silentclient.client.gui.util.BackgroundPanorama; import net.silentclient.client.keybinds.KeyBindManager; +import net.silentclient.client.mixin.SilentClientTweaker; import net.silentclient.client.mods.ModInstances; import net.silentclient.client.mods.SettingsManager; import net.silentclient.client.mods.settings.FPSBoostMod; @@ -55,7 +56,7 @@ public class Client { } private BuildData buildData = new BuildData(); - private UserData userData = new UserData(); + private UserData userData = new UserData(SilentClientTweaker.TOKEN); public File dir; private SettingsManager settingsManager; public ConfigManager configManager; @@ -81,6 +82,7 @@ public class Client { public static BackgroundPanorama backgroundPanorama; private KeyBindManager keyBindManager; private IMetadataSerializer iMetadataSerializer; + private MouseCursorHandler mouseCursorHandler; public static void memoryDebug(String paramString) { LogManager.getLogger().info("-- Start Memory Debug -- " + paramString); @@ -109,22 +111,6 @@ public class Client { in.close(); } catch (Exception e1) { Client.logger.catching(e1); - } - try { - InputStream in = new FileInputStream(new File(Minecraft.getMinecraft().mcDataDir, "silent_account.json")); - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - StringBuffer content = new StringBuffer(); - String inputLine; - while ((inputLine = reader.readLine()) != null) { - content.append(inputLine); - } - GsonBuilder builder = new GsonBuilder(); - Gson gson = builder.create(); - - userData = gson.fromJson(content.toString(), UserData.class); - in.close(); - } catch (Exception err) { - } logger.info("---------[ Silent Client Initialising ]---------"); logger.info("MC Version: 1.8.9"); @@ -264,9 +250,8 @@ public class Client { } } - if(account.getCustomSkin()) { - logger.info("STARTING > custom-skin"); - } + logger.info("STARTING > mouse-cursor-handler"); + this.mouseCursorHandler = new MouseCursorHandler(); } catch(Exception err) { logger.info("STARTING > ERROR: " + err.getMessage()); throw err; @@ -558,4 +543,8 @@ public class Client { public void setiMetadataSerializer(IMetadataSerializer iMetadataSerializer) { this.iMetadataSerializer = iMetadataSerializer; } + + public MouseCursorHandler getMouseCursorHandler() { + return mouseCursorHandler; + } } diff --git a/src/main/java/net/silentclient/client/gui/SilentScreen.java b/src/main/java/net/silentclient/client/gui/SilentScreen.java index 41f0bc1..aeb3fc1 100644 --- a/src/main/java/net/silentclient/client/gui/SilentScreen.java +++ b/src/main/java/net/silentclient/client/gui/SilentScreen.java @@ -1,10 +1,33 @@ package net.silentclient.client.gui; import net.minecraft.client.gui.GuiScreen; +import net.silentclient.client.Client; import net.silentclient.client.gui.elements.Input; +import net.silentclient.client.utils.MouseCursorHandler; +import java.io.IOException; import java.util.ArrayList; public class SilentScreen extends GuiScreen { protected ArrayList silentInputs = new ArrayList<>(); + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + super.drawScreen(mouseX, mouseY, partialTicks); + MouseCursorHandler.CursorType cursorType = MouseCursorHandler.CursorType.NORMAL; + + for(Input input : silentInputs) { + if(input.isHovered()) { + cursorType = MouseCursorHandler.CursorType.EDIT_TEXT; + } + } + + Client.getInstance().getMouseCursorHandler().enableCursor(cursorType); + } + + @Override + public void onGuiClosed() { + super.onGuiClosed(); + Client.getInstance().getMouseCursorHandler().disableCursor(); + } } diff --git a/src/main/java/net/silentclient/client/gui/clickgui/ClickGUI.java b/src/main/java/net/silentclient/client/gui/clickgui/ClickGUI.java index 1c824ae..fa71f69 100644 --- a/src/main/java/net/silentclient/client/gui/clickgui/ClickGUI.java +++ b/src/main/java/net/silentclient/client/gui/clickgui/ClickGUI.java @@ -205,10 +205,7 @@ public class ClickGUI extends SilentScreen { PremiumGui.drawScreen(x, y, width, height, mouseX, mouseY, partialTicks, nametagMessageInput); } - for (int i = 0; i < this.buttonList.size(); ++i) - { - ((GuiButton)this.buttonList.get(i)).drawButton(this.mc, mouseX, mouseY); - } + super.drawScreen(mouseX, mouseY, partialTicks); scrollAnimation.setAnimation((float) scrollY, 16); @@ -442,6 +439,7 @@ public class ClickGUI extends SilentScreen { @Override public void onGuiClosed() { + super.onGuiClosed(); Client.getInstance().configManager.save(); MenuBlurUtils.unloadBlur(); } diff --git a/src/main/java/net/silentclient/client/gui/elements/Input.java b/src/main/java/net/silentclient/client/gui/elements/Input.java index 7c02346..f76e86b 100644 --- a/src/main/java/net/silentclient/client/gui/elements/Input.java +++ b/src/main/java/net/silentclient/client/gui/elements/Input.java @@ -23,6 +23,7 @@ public class Input { private int maxLength; private boolean keyValue; private int key; + private boolean hovered = false; public Input(String name, String value, int key, Pattern pattern, int maxLength, boolean keyValue) { this.name = name; @@ -63,6 +64,9 @@ public class Input { int borderColor = new Color(255, 255, 255, 41).getRGB(); if(MouseUtils.isInside(mouseX, mouseY, x, y, width, 20)) { borderColor = new Color(255, 255, 255, 61).getRGB(); + this.hovered = true; + } else { + this.hovered = false; } if(isFocused) { @@ -88,7 +92,11 @@ public class Input { } Client.getInstance().getSilentFontRenderer().drawString(EnumChatFormatting.getTextWithoutFormattingCodes(renderText), x + 2, y + (small ? 1 : 3), small ? 12 : 14, SilentFontRenderer.FontType.TITLE); } - + + public boolean isHovered() { + return hovered; + } + public boolean isFocused() { return isFocused; } diff --git a/src/main/java/net/silentclient/client/gui/hud/HUDConfigScreen.java b/src/main/java/net/silentclient/client/gui/hud/HUDConfigScreen.java index 79282f6..0492f7c 100644 --- a/src/main/java/net/silentclient/client/gui/hud/HUDConfigScreen.java +++ b/src/main/java/net/silentclient/client/gui/hud/HUDConfigScreen.java @@ -6,6 +6,7 @@ import java.text.DecimalFormat; import net.silentclient.client.gui.elements.Button; import net.silentclient.client.utils.MenuBlurUtils; +import net.silentclient.client.utils.MouseCursorHandler; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; @@ -88,8 +89,13 @@ public class HUDConfigScreen extends GuiScreen { Client.getInstance().getSilentFontRenderer().drawString(0, 36, "selectedMod: " + (this.mod != null ? this.mod.getClass().getName() : "null"), 6, FontType.TITLE); } + MouseCursorHandler.CursorType cursorType = MouseCursorHandler.CursorType.NORMAL; + for(Mod m : Client.getInstance().getModInstances().getMods()) { if(m.isEnabled() && m instanceof ModDraggable) { + if(((ModDraggable) m).isHovered(mouseX, mouseY, scaledresolution) || ((ModDraggable) m).isDragging()) { + cursorType = MouseCursorHandler.CursorType.MOVE; + } ((ModDraggable) m).renderEditing(mouseX, mouseY, scaledresolution, debug, this); if(((ModDraggable) m).isDragging()) { @@ -97,6 +103,8 @@ public class HUDConfigScreen extends GuiScreen { } } } + + Client.getInstance().getMouseCursorHandler().enableCursor(cursorType); if (this.buttonList != null && this.buttonList.size() != 0) { @@ -199,6 +207,7 @@ public class HUDConfigScreen extends GuiScreen { ((ModDraggable) m).setDragging(false); } } + Client.getInstance().getMouseCursorHandler().disableCursor(); } @Override diff --git a/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java b/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java index 2894b8e..aafaf0d 100644 --- a/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java +++ b/src/main/java/net/silentclient/client/mixin/SilentClientTweaker.java @@ -13,11 +13,19 @@ import java.util.List; public class SilentClientTweaker implements ITweaker { private List launchArgs = new ArrayList<>(); public static boolean hasOptifine = false; + public static String TOKEN = ""; @Override public final void acceptOptions(List args, File gameDir, File assetsDir, String profile) { Client.logger.info("Silent Client Tweak Loader: Options"); + if (args.contains("--sctoken")) { + final int index = args.indexOf("--sctoken"); + try { + SilentClientTweaker.TOKEN = (String)args.get(index + 1); + } + catch (final Exception ex) {} + } try { Class.forName("optifine.OptiFineTweaker"); hasOptifine = true; diff --git a/src/main/java/net/silentclient/client/utils/MouseCursorHandler.java b/src/main/java/net/silentclient/client/utils/MouseCursorHandler.java new file mode 100644 index 0000000..260757e --- /dev/null +++ b/src/main/java/net/silentclient/client/utils/MouseCursorHandler.java @@ -0,0 +1,120 @@ +package net.silentclient.client.utils; + +import org.apache.logging.log4j.LogManager; +import org.lwjgl.BufferUtils; +import org.lwjgl.LWJGLException; +import org.lwjgl.input.Cursor; +import org.lwjgl.input.Mouse; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.nio.IntBuffer; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +public class MouseCursorHandler { + private Map cursors; + private CursorType currentCursor; + private boolean customCursorDisabled; + + public MouseCursorHandler() { + this.cursors = new HashMap(); + this.currentCursor = CursorType.NORMAL; + this.customCursorDisabled = false; + final int minCursorSize = Cursor.getMinCursorSize(); + final int maxCursorSize = Cursor.getMaxCursorSize(); + LogManager.getLogger().info("Min Cursor Size: " + minCursorSize + " max: " + maxCursorSize); + if (maxCursorSize < 24) { + this.customCursorDisabled = true; + return; + } + this.loadCursorType(CursorType.MOVE); + this.loadCursorType(CursorType.NWSE_RESIZE); + this.loadCursorType(CursorType.NESW_RESIZE); + this.loadCursorType(CursorType.EDIT_TEXT); + this.loadCursorType(CursorType.POINTER); + } + + public void loadCursorType(final CursorType cursorType) { + try { + this.cursors.put(cursorType, this.loadCursor(ImageIO.read(this.getClass().getResourceAsStream("/assets/minecraft/silentclient/mouse/" + cursorType.name().toLowerCase(Locale.US) + ".png")))); + } + catch (final Exception ex) { + LogManager.getLogger().catching((Throwable)ex); + } + } + + public Cursor loadCursor(final BufferedImage bufferedImage) throws LWJGLException { + final int width = bufferedImage.getWidth(); + final int height = bufferedImage.getHeight(); + final int min = Math.min(Math.max(width, Cursor.getMinCursorSize()), Cursor.getMaxCursorSize()); + final int[] src = new int[min * min]; + int n = 0; + for (int i = 0; i < min; ++i) { + for (int j = 0; j < min; ++j) { + int rgb = 0; + try { + rgb = bufferedImage.getRGB(i, j); + } + catch (final Exception ex) {} + src[n++] = rgb; + } + } + final IntBuffer intBuffer = BufferUtils.createIntBuffer(min * min); + intBuffer.put(src); + intBuffer.rewind(); + LogManager.getLogger().info("Loading cursor: w: " + width + " h: " + height); + return new Cursor(min, min, width / 2, height / 2, 1, intBuffer, (IntBuffer)null); + } + + public boolean enableCursor(final CursorType cursorType) { + if (this.customCursorDisabled) { + return false; + } + if (this.currentCursor.equals(cursorType)) { + return true; + } + if (cursorType.equals(CursorType.NORMAL)) { + this.disableCursor(); + return true; + } + try { + final Cursor nativeCursor = this.cursors.get(cursorType); + if (nativeCursor != null) { + Mouse.setNativeCursor(nativeCursor); + this.currentCursor = cursorType; + return true; + } + } + catch (final Exception ex) { + LogManager.getLogger().catching((Throwable)ex); + } + return false; + } + + public void disableCursor() { + if (this.customCursorDisabled) { + return; + } + if (this.currentCursor != CursorType.NORMAL) { + try { + Mouse.setNativeCursor((Cursor)null); + this.currentCursor = CursorType.NORMAL; + } + catch (final Exception ex) { + LogManager.getLogger().catching((Throwable)ex); + } + } + } + + public enum CursorType + { + NORMAL, + NESW_RESIZE, + NWSE_RESIZE, + MOVE, + EDIT_TEXT, + POINTER; + } +} diff --git a/src/main/java/net/silentclient/client/utils/types/UserData.java b/src/main/java/net/silentclient/client/utils/types/UserData.java index d9f10d4..193188f 100644 --- a/src/main/java/net/silentclient/client/utils/types/UserData.java +++ b/src/main/java/net/silentclient/client/utils/types/UserData.java @@ -7,6 +7,10 @@ public class UserData { this.access_token = ""; } + public UserData(String token) { + this.access_token = token; + } + public String getAccessToken() { return access_token; } diff --git a/src/main/resources/assets/minecraft/silentclient/mouse/edit_text.png b/src/main/resources/assets/minecraft/silentclient/mouse/edit_text.png new file mode 100644 index 0000000000000000000000000000000000000000..4caaad790dc1656582882a54c39046903d84309e GIT binary patch literal 499 zcmVVULh0;g+ig&!D_YY=XoxJAaIDNv`=gphE|qka=BbS zh@xQQk9xgMuImOUz}WV~cJx~u?1v~kE0@c}U$KLOUCua;Ut6t~7z_q^nxSnfTm23X(~ZWbl!$>x9det|#-Y*=*+H=*Topp1_SL%6vY5>2x||+qREHx0^nk zeIJ`8Q4~FH$KiA?N28I~Znp_{){R;9*rNV>CL{V^q?=bQR pV}25Qg4p|YtSuA@g+lS4`2-tYQ4^E(R`&n^002ovPDHLkV1m{=-{JrO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/silentclient/mouse/move.png b/src/main/resources/assets/minecraft/silentclient/mouse/move.png new file mode 100644 index 0000000000000000000000000000000000000000..969af90a6391277ba3b36ebd2d20fb0f1c677761 GIT binary patch literal 287 zcmV+)0pR|LP)KP!ylG-I}p4Yu|!dH{i+gU40)cDrYTL+5K`G2Qr9&~DMSPj zA&z6pvJA(jo-CQ6muzEzuBvJVvgs$rJF1R|BTeGspk{002ovPDHLkV1ncsc~k%Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/silentclient/mouse/nesw_resize.png b/src/main/resources/assets/minecraft/silentclient/mouse/nesw_resize.png new file mode 100644 index 0000000000000000000000000000000000000000..7075534f369d3dc0259b6cff4f9092588a98722b GIT binary patch literal 354 zcmV-o0iFJdP)c=oeKPHvnb253W5MhxUNeWhV5Si9-5G%D5~*zj3fqw0h`UHHnTjA<5nmG zhL^~0x2qe%--4{%q#kdg0002CNkl{6NnwMJd1xqbDRhYBG$hI zA(IX%i43_&+T214N6Yu{Dq)S}YcU6j6v^ zWH)hkHVj!&an>2<=3En-C9Kh%-D*BK!=3v&=bp#C0165U3WpPNyWO9CKHoQ+&6bC| z#AGr(3x~tZa5yA9&l5D_6z&MO%jNn|DwVkTd`>7V%My>r^X1AsBZ>uN<{`TLwAbrN z=Y>L#NE$j7~ghHX4hsJKVzeBfwZ8RD@*?}ZUWH1w?8% zxx{;+jlT@YiNRoqV-m8c?Ap`QONo{s?8*II6R-;2cDr3G>e-xnxm<4g^?E(DS}o9M zG@w$cXs%FW?}6MHjm8U1IHp>yUT_@uPY>kt`2|+X33}=!+yakL9%;4Or&wa&JDrYn z)c{(i_%?ik1K1e?16!zpdnbM#KOl<4M00000NkvXXu0mjfqH7?< literal 0 HcmV?d00001