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 0000000..4caaad7 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mouse/edit_text.png differ 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 0000000..969af90 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mouse/move.png differ 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 0000000..7075534 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mouse/nesw_resize.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mouse/nwse_resize.png b/src/main/resources/assets/minecraft/silentclient/mouse/nwse_resize.png new file mode 100644 index 0000000..edf2a48 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mouse/nwse_resize.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mouse/pointer.png b/src/main/resources/assets/minecraft/silentclient/mouse/pointer.png new file mode 100644 index 0000000..c7900ad Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mouse/pointer.png differ