diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..097f9f98
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,9 @@
+#
+# https://help.github.com/articles/dealing-with-line-endings/
+#
+# Linux start script should use lf
+/gradlew text eol=lf
+
+# These are Windows script files and should use crlf
+*.bat text eol=crlf
+
diff --git a/build.gradle b/build.gradle
index b09bc166..ac97a03b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -18,16 +18,6 @@ repositories {
// for more information about repositories.
}
-loom {
- splitEnvironmentSourceSets()
- mods {
- "aoba" {
- sourceSet sourceSets.main
- sourceSet sourceSets.client
- }
- }
-}
-
dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
diff --git a/gradle.bat b/gradle.bat
deleted file mode 100644
index 1cce1818..00000000
--- a/gradle.bat
+++ /dev/null
@@ -1,92 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%..
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.7.jar"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\lib\gradle-launcher-8.7.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.launcher.GradleMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/gradle.properties b/gradle.properties
index b660093f..35a32b54 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,5 +1,5 @@
# Done to increase the memory available to gradle.
-org.gradle.jvmargs=-Xmx2G
+org.gradle.jvmargs=-Xmx1G
org.gradle.parallel=true
# Fabric Properties
@@ -9,9 +9,9 @@ yarn_mappings=1.20.5+build.1
loader_version=0.15.11
# Mod Properties
-mod_version = 1.4.1
-maven_group = net.aoba
-archives_base_name = Aoba
+mod_version=1.4.1
+maven_group=net.aoba
+archives_base_name=Aoba
# Dependencies
-fabric_version=0.97.8+1.20.5
+fabric_version=0.97.8+1.20.5
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index b02216ba..75c4d726 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,10 +1,10 @@
pluginManagement {
- repositories {
- maven {
- name = 'Fabric'
- url = 'https://maven.fabricmc.net/'
- }
- mavenCentral()
- gradlePluginPortal()
- }
-}
+ repositories {
+ maven {
+ name = 'Fabric'
+ url = 'https://maven.fabricmc.net/'
+ }
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/aoba/gui/Color.java b/src/main/java/net/aoba/gui/Color.java
new file mode 100644
index 00000000..1f7ffbae
--- /dev/null
+++ b/src/main/java/net/aoba/gui/Color.java
@@ -0,0 +1,325 @@
+/*
+* Aoba Hacked Client
+* Copyright (C) 2019-2024 coltonk9043
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+*/
+
+/**
+ * A class to represent Colors and their respective functions.
+ */
+
+package net.aoba.gui;
+
+import org.apache.commons.lang3.StringUtils;
+import org.joml.Vector3f;
+
+public class Color {
+
+ public static Color WHITE = new Color(255, 255, 255);
+
+ public int r;
+ public int g;
+ public int b;
+ public int alpha = 255;
+
+ public float hue;
+ public float saturation;
+ public float luminance;
+
+ /**
+ * Color Constructor using RGB color space.
+ *
+ * @param r Red component of a Color.
+ * @param g Green component of a Color.
+ * @param b Blue component of a Color.
+ */
+ public Color(int r, int g, int b) {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+
+ HSVFromRGB(r, g, b);
+ }
+
+ public Color(int r, int g, int b, int alpha) {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+
+ HSVFromRGB(r, g, b);
+
+ this.alpha = alpha;
+ }
+
+ private void HSVFromRGB(int r, int g, int b) {
+ // Calculate HSV value
+ float rPrime = r / 255.0f;
+ float gPrime = g / 255.0f;
+ float bPrime = b / 255.0f;
+
+ float cMax = Math.max(rPrime, Math.max(gPrime, bPrime));
+ float cMin = Math.min(rPrime, Math.min(gPrime, bPrime));
+
+ float delta = cMax - cMin;
+
+ // Calculate Hue
+ if(delta == 0.0f) {
+ hue = 0.0f;
+ }else {
+ if (cMax == rPrime) {
+ hue = (60.0f * (((gPrime - bPrime) / delta) % 6));
+ } else if (cMax == gPrime) {
+ hue = (60.0f * (((bPrime - rPrime) / delta) + 2));
+ } else if (cMax == bPrime) {
+ hue = (60.0f * (((rPrime - gPrime) / delta) + 2));
+ }
+ }
+
+ // Calculate Saturation
+ if (cMax == 0.0f)
+ saturation = 0.0f;
+ else
+ saturation = delta / cMax;
+
+ // Calculate Luminance
+ luminance = cMax;
+ }
+
+ /**
+ * Color Constructor using HSV color space.
+ *
+ * @param hue
+ * @param saturation
+ * @param luminance
+ */
+ public Color(float hue, float saturation, float luminance) {
+ this.setHSV(hue, saturation, luminance);
+ }
+
+ /**
+ * Sets the RGB and HSV fields using inputs from an HSV color space.
+ *
+ * @param hue The hue of the HSV color space.
+ * @param saturation The saturation of the HSV color space.
+ * @param value
+ */
+ public void setHSV(float hue, float saturation, float luminance) {
+ this.hue = hue;
+ this.saturation = saturation;
+ this.luminance = luminance;
+ Color vec = hsv2rgb(hue, saturation, luminance);
+ if(vec != null) {
+ this.r = vec.r;
+ this.g = vec.g;
+ this.b = vec.b;
+ }
+ }
+
+ /**
+ * Sets the RGB fields using inputs from an RGB color space.
+ *
+ * @param r Red component of a Color.
+ * @param g Green component of a Color.
+ * @param b Blue component of a Color.
+ */
+ public void setRGB(int r, int g, int b) {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ }
+
+ public void setRGBA(int r, int g, int b, int alpha) {
+ this.r = r;
+ this.g = b;
+ this.b = b;
+ this.alpha = alpha;
+ }
+
+ public void setAlpha(int alpha) {
+ this.alpha = alpha;
+ }
+
+ /**
+ * Returns the Color as a string in format RRRGGGBBB.
+ *
+ * @return
+ */
+ public String getColorAsString() {
+ String rs = Integer.toString((int) (r));
+ String gs = Integer.toString((int) (g));
+ String bs = Integer.toString((int) (b));
+ return rs + gs + bs;
+ }
+
+ /**
+ * Returns the color as an Integer for Minecraft Rendering.
+ *
+ * @return The color as an integer.
+ */
+ public int getColorAsInt() {
+ // Perform shifts and Bitwise AND to get color value in integer format.
+ int Alpha = ((this.alpha) << 24) & 0xFF000000;
+ int R = ((this.r) << 16) & 0x00FF0000;
+ int G = ((this.g) << 8) & 0x0000FF00;
+ int B = (this.b) & 0x000000FF;
+ // Return the color as a combination of these values.
+ return Alpha | R | G | B;
+ }
+
+ /**
+ * Returns the color as a string in Hex format.
+ *
+ * @return The color represented as Hex.
+ */
+ public String getColorAsHex() {
+ return String.format("#%06X", this.getColorAsInt());
+ }
+
+ /**
+ * Gets the Red component as a float.
+ *
+ * @return Red component as a float.
+ */
+ public float getRedFloat() {
+ return ((float) this.r) / 255.0f;
+ }
+
+ /**
+ * Gets the Green component as a float.
+ *
+ * @return Green component as a float.
+ */
+ public float getGreenFloat() {
+ return ((float) this.g) / 255.0f;
+ }
+
+ /**
+ * Gets the Blue component as a float.
+ *
+ * @return Blue component as a float.
+ */
+ public float getBlueFloat() {
+ return ((float) this.b) / 255.0f;
+ }
+
+ public float getAlphaFloat() {
+ return ((float) this.alpha) / 255.0f;
+ }
+
+ /**
+ * Converts RGB codes to a String.
+ *
+ * @param r Red component.
+ * @param g Green component.
+ * @param b Blue component.
+ * @return Color as a String.
+ */
+ public static String rgbToString(int r, int g, int b) {
+ String rs = Integer.toString((int) (r));
+ String gs = Integer.toString((int) (g));
+ String bs = Integer.toString((int) (b));
+ return rs + gs + bs;
+ }
+
+ /**
+ * Converts RGB codes to an Integer.
+ *
+ * @param r Red component.
+ * @param g Green component.
+ * @param b Blue component.
+ * @return Color as an Integer.
+ */
+ public static int rgbToInt(int r, int g, int b) {
+ String rs = Integer.toString((int) (r));
+ String gs = Integer.toString((int) (g));
+ String bs = Integer.toString((int) (b));
+ return Integer.parseInt(rs + gs + bs);
+ }
+
+ /**
+ * Converts RGB codes to Hex.
+ *
+ * @param r Red component.
+ * @param g Green component.
+ * @param b Blue component.
+ * @return Color as Hex.
+ */
+ public static int convertRGBToHex(int r, int g, int b) {
+ String strr = StringUtils.leftPad(Integer.toHexString(r), 2, '0');
+ String strg = StringUtils.leftPad(Integer.toHexString(g), 2, '0');
+ String strb = StringUtils.leftPad(Integer.toHexString(b), 2, '0');
+ String string = strr + strg + strb;
+ return Integer.parseInt(string, 16);
+ }
+
+ /**
+ * Converts Hex codes to RGB.
+ *
+ * @param hex Color as Hex.
+ * @return Color from Hex Code.
+ */
+ public static Color convertHextoRGB(String hex) {
+ String RString = hex.charAt(1) + "" + hex.charAt(2);
+ String GString = hex.charAt(3) + "" + hex.charAt(4);
+ String BString = hex.charAt(5) + "" + hex.charAt(6);
+
+ float r = Integer.valueOf(RString, 16);
+ float g = Integer.valueOf(GString, 16);
+ float b = Integer.valueOf(BString, 16);
+ return new Color(r, g, b);
+ }
+
+ /**
+ * Converts HSV into RGB color space.
+ *
+ * @param hue The hue of the HSV color space.
+ * @param saturation The saturation of the HSV color space.
+ * @param luminance The luminance of the HSV color space.
+ * @return The color represented by HSV.
+ */
+ public static Color hsv2rgb(float hue, float saturation, float luminance) {
+ // Get the side that the colour is contained in.
+ float h = (hue / 60);
+ float chroma = luminance * saturation;
+ float x = chroma * (1 - Math.abs((h % 2) - 1));
+
+ // Depending on the side, set the Chroma component to the correct Color.
+ Vector3f rgbVec;
+ if (h >= 0 && h <= 1) {
+ rgbVec = new Vector3f(chroma, x, 0);
+ } else if (h >= 1 && h <= 2) {
+ rgbVec = new Vector3f(x, chroma, 0);
+ } else if (h >= 2 && h <= 3) {
+ rgbVec = new Vector3f(0, chroma, x);
+ } else if (h >= 3 && h <= 4) {
+ rgbVec = new Vector3f(0, x, chroma);
+ } else if (h >= 4 && h <= 5) {
+ rgbVec = new Vector3f(x, 0, chroma);
+ } else if (h >= 5 && h <= 6) {
+ rgbVec = new Vector3f(chroma, 0, x);
+ } else {
+ rgbVec = null;
+ }
+
+ // If the Color does exist, add luminance and convert to RGB.
+ if (rgbVec != null) {
+ float m = luminance - chroma;
+ return new Color((int) (255.0f * (rgbVec.x + m)), (int) (255.0f * (rgbVec.y + m)),
+ (int) (255.0f * (rgbVec.z + m)));
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/net/aoba/gui/tabs/HudsTab.java b/src/main/java/net/aoba/gui/tabs/HudsTab.java
new file mode 100644
index 00000000..ad7dfade
--- /dev/null
+++ b/src/main/java/net/aoba/gui/tabs/HudsTab.java
@@ -0,0 +1,112 @@
+/*
+* Aoba Hacked Client
+* Copyright (C) 2019-2024 coltonk9043
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+*/
+
+package net.aoba.gui.tabs;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import net.aoba.Aoba;
+import net.aoba.event.events.MouseScrollEvent;
+import net.aoba.event.listeners.MouseScrollListener;
+import net.aoba.gui.Color;
+import net.aoba.gui.GuiManager;
+import net.aoba.gui.font.FontManager;
+import net.aoba.gui.hud.AbstractHud;
+import net.aoba.gui.tabs.components.ColorPickerComponent;
+import net.aoba.gui.tabs.components.HudComponent;
+import net.aoba.gui.tabs.components.KeybindComponent;
+import net.aoba.gui.tabs.components.ListComponent;
+import net.aoba.gui.tabs.components.StackPanelComponent;
+import net.aoba.gui.tabs.components.StringComponent;
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.gui.DrawContext;
+import net.aoba.module.Module;
+import net.aoba.settings.types.StringSetting;
+
+public class HudsTab extends ClickGuiTab implements MouseScrollListener {
+
+ int visibleScrollElements;
+ int currentScroll;
+
+ public HudsTab(AbstractHud[] abstractHuds) {
+ super("Hud Options", 50, 50, false);
+
+ Aoba.getInstance().eventManager.AddListener(MouseScrollListener.class, this);
+ StackPanelComponent stackPanel = new StackPanelComponent(this);
+ stackPanel.setTop(30);
+
+ List test = new ArrayList();
+
+
+ HashMap fontRenderers = Aoba.getInstance().fontManager.fontRenderers;
+ Set set = fontRenderers.keySet();
+
+ for(String s : set) {
+ test.add(s);
+ }
+
+ stackPanel.addChild(new StringComponent("Toggle HUD", stackPanel, GuiManager.foregroundColor.getValue(), true));
+
+ for(AbstractHud hud : abstractHuds) {
+ HudComponent hudComponent = new HudComponent(hud.getID(), stackPanel, hud);
+ stackPanel.addChild(hudComponent);
+ }
+
+ // Keybinds Header
+ stackPanel.addChild(new StringComponent("Keybinds", stackPanel, GuiManager.foregroundColor.getValue(), true));
+
+ KeybindComponent clickGuiKeybindComponent = new KeybindComponent(stackPanel, Aoba.getInstance().hudManager.clickGuiButton);
+ clickGuiKeybindComponent.setHeight(30);
+ stackPanel.addChild(clickGuiKeybindComponent);
+
+ // Hud Font Header
+ stackPanel.addChild(new StringComponent("HUD Font", stackPanel, GuiManager.foregroundColor.getValue(), true));
+
+
+
+ ListComponent listComponent = new ListComponent(stackPanel, test, Aoba.getInstance().fontManager.fontSetting);
+ stackPanel.addChild(listComponent);
+
+ stackPanel.addChild(new StringComponent("HUD Colors", stackPanel, GuiManager.foregroundColor.getValue(), true));
+
+ stackPanel.addChild(new ColorPickerComponent(stackPanel, GuiManager.foregroundColor));
+ stackPanel.addChild(new ColorPickerComponent(stackPanel, GuiManager.backgroundColor));
+ stackPanel.addChild(new ColorPickerComponent(stackPanel, GuiManager.borderColor));
+
+ this.children.add(stackPanel);
+ this.setWidth(300);
+ }
+
+ @Override
+ public void OnMouseScroll(MouseScrollEvent event) {
+ ArrayList modules = Aoba.getInstance().moduleManager.modules;
+
+ if(event.GetVertical() > 0)
+ this.currentScroll = Math.min(currentScroll + 1, modules.size() - visibleScrollElements - 1);
+ else if(event.GetVertical() < 0)
+ this.currentScroll = Math.max(currentScroll - 1, 0);
+ }
+
+ @Override
+ public void draw(DrawContext drawContext, float partialTicks) {
+ super.draw(drawContext, partialTicks);
+ }
+}
diff --git a/src/main/java/net/aoba/misc/Colors.java b/src/main/java/net/aoba/misc/Colors.java
new file mode 100644
index 00000000..6f735b32
--- /dev/null
+++ b/src/main/java/net/aoba/misc/Colors.java
@@ -0,0 +1,36 @@
+/*
+* Aoba Hacked Client
+* Copyright (C) 2019-2024 coltonk9043
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+*/
+
+package net.aoba.misc;
+
+import net.aoba.gui.Color;
+
+public class Colors {
+ public static final Color Red = new Color(255, 0, 0);
+ public static final Color Orange = new Color(255, 165, 0);
+ public static final Color Yellow = new Color(255, 255, 0);
+ public static final Color Green = new Color(0, 255, 0);
+ public static final Color Cyan = new Color(0, 255, 255);
+ public static final Color Blue = new Color(0, 0, 255);
+ public static final Color Purple = new Color(255, 0, 255);
+ public static final Color Pink = new Color(255, 192, 203);
+ public static final Color Black = new Color(0, 0, 0);
+ public static final Color Charcoal = new Color(54, 69, 79);
+ public static final Color Gray = new Color(127, 127, 127);
+ public static final Color White = new Color(255, 255, 255);
+}
diff --git a/src/main/java/net/aoba/misc/RainbowColor.java b/src/main/java/net/aoba/misc/RainbowColor.java
new file mode 100644
index 00000000..290e0ed6
--- /dev/null
+++ b/src/main/java/net/aoba/misc/RainbowColor.java
@@ -0,0 +1,47 @@
+/*
+* Aoba Hacked Client
+* Copyright (C) 2019-2024 coltonk9043
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+*/
+
+/**
+ * A class to represent a Color that iterates.
+ */
+package net.aoba.misc;
+
+import net.aoba.gui.Color;
+
+public class RainbowColor {
+ private Color color;
+ private float timer = 0f;
+
+ public RainbowColor() {
+ this.color = new Color(255, 0, 0);
+ }
+
+ public void update(float timerIncrement) {
+ if (timer >= (20 - timerIncrement)) {
+ timer = 0f;
+ this.color.setHSV(((this.color.hue + 1f) % 361), 1f, 1f);
+ } else {
+ timer++;
+ }
+
+ }
+
+ public Color getColor() {
+ return this.color;
+ }
+}
diff --git a/src/main/java/net/aoba/mixin/ChatScreenMixin.java b/src/main/java/net/aoba/mixin/ChatScreenMixin.java
index 228b2140..5d39a850 100644
--- a/src/main/java/net/aoba/mixin/ChatScreenMixin.java
+++ b/src/main/java/net/aoba/mixin/ChatScreenMixin.java
@@ -108,7 +108,7 @@ protected void onRender(DrawContext context, int mouseX, int mouseY, float delta
}
@Inject(at = {
- @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;addToMessageHistory(Ljava/lang/String;)V", ordinal = 0, shift = At.Shift.AFTER) }, method = "sendMessage(Ljava/lang/String;Z)Z", cancellable = true)
+ @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;addToMessageHistory(Ljava/lang/String;)V", shift = At.Shift.AFTER) }, method = "sendMessage(Ljava/lang/String;Z)V", cancellable = true)
public void onSendMessage(String message, boolean addToHistory, CallbackInfo ci) {
if (message.startsWith(CommandManager.PREFIX.getValue())) {
Aoba.getInstance().commandManager.command(message.split(" "));
diff --git a/src/main/resources/aoba.mixins.json b/src/main/resources/aoba.mixins.json
index 223d30e8..f57800dd 100644
--- a/src/main/resources/aoba.mixins.json
+++ b/src/main/resources/aoba.mixins.json
@@ -1,52 +1,51 @@
{
- "required": true,
- "minVersion": "0.8",
- "package": "net.aoba.mixin",
- "compatibilityLevel": "JAVA_21",
- "mixins": [
- "interfaces.ILivingEntity",
- "interfaces.IMinecraftClient",
- "interfaces.IExplosionS2CPacket",
- "interfaces.IEntityVelocityUpdateS2CPacket",
- "interfaces.IPlayerInteractEntityC2SPacket"
- ],
- "client": [
- "AbstractBlockStateMixin",
- "AbstractClientPlayerEntityMixin",
- "AbstractSignEditScreenMixin",
- "BackgroundRendererMixin",
- "BlockMixin",
- "BlockModelRendererMixin",
- "CactusBlockMixin",
- "ChatHudMixin",
- "ChatInputSuggestorMixin",
- "ChatScreenMixin",
- "ChunkOcclusionDataBuilderMixin",
- "ClientConnectionMixin",
- "ClientPlayerEntityMixin",
- "ClientPlayerInteractionManagerMixin",
- "DeathScreenMixin",
- "EntityMixin",
- "EntityRendererMixin",
- "FluidBlockMixin",
- "GameRendererMixin",
- "HungerManagerMixin",
- "IngameHudMixin",
- "KeyboardMixin",
- "LightmapTextureManagerMixin",
- "LivingEntityMixin",
- "MinecraftClientMixin",
- "MouseMixin",
- "MultiplayerScreenMixin",
- "PlayerEntityMixin",
- "RenderTickCounterMixin",
- "ScreenMixin",
- "SimpleOptionMixin",
- "TitleScreenMixin",
- "WorldChunkMixin",
- "WorldRendererMixin"
- ],
- "injectors": {
- "defaultRequire": 1
- }
-}
+ "required": true,
+ "package": "net.aoba.mixin",
+ "compatibilityLevel": "JAVA_21",
+ "mixins": [
+ "interfaces.ILivingEntity",
+ "interfaces.IMinecraftClient",
+ "interfaces.IExplosionS2CPacket",
+ "interfaces.IEntityVelocityUpdateS2CPacket",
+ "interfaces.IPlayerInteractEntityC2SPacket"
+ ],
+ "client": [
+ "AbstractBlockStateMixin",
+ "AbstractClientPlayerEntityMixin",
+ "AbstractSignEditScreenMixin",
+ "BackgroundRendererMixin",
+ "BlockMixin",
+ "BlockModelRendererMixin",
+ "CactusBlockMixin",
+ "ChatHudMixin",
+ "ChatInputSuggestorMixin",
+ "ChatScreenMixin",
+ "ChunkOcclusionDataBuilderMixin",
+ "ClientConnectionMixin",
+ "ClientPlayerEntityMixin",
+ "ClientPlayerInteractionManagerMixin",
+ "DeathScreenMixin",
+ "EntityMixin",
+ "EntityRendererMixin",
+ "FluidBlockMixin",
+ "GameRendererMixin",
+ "HungerManagerMixin",
+ "IngameHudMixin",
+ "KeyboardMixin",
+ "LightmapTextureManagerMixin",
+ "LivingEntityMixin",
+ "MinecraftClientMixin",
+ "MouseMixin",
+ "MultiplayerScreenMixin",
+ "PlayerEntityMixin",
+ "RenderTickCounterMixin",
+ "ScreenMixin",
+ "SimpleOptionMixin",
+ "TitleScreenMixin",
+ "WorldChunkMixin",
+ "WorldRendererMixin"
+ ],
+ "injectors": {
+ "defaultRequire": 1
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/aoba/icon.png b/src/main/resources/assets/aoba/icon.png
new file mode 100644
index 00000000..b45d19a0
Binary files /dev/null and b/src/main/resources/assets/aoba/icon.png differ
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 046ee17a..f4c541b7 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -1,30 +1,30 @@
{
- "schemaVersion": 1,
- "id": "aoba",
- "version": "1.4.1",
- "name": "Aoba Hacked Client",
- "description": "Custom hacked client running on Fabric 1.20.5",
- "authors": [
- "Cocolots"
- ],
- "contact": {
- "sources": "https://github.com/coltonk9043/Aoba-MC-Hacked-Client"
- },
- "license": "CC0-1.0",
- "icon": "assets/modid/icon.png",
- "environment": "*",
- "entrypoints": {
- "main": [
- "net.aoba.Aoba"
- ]
- },
- "mixins": [
- "aoba.mixins.json"
- ],
- "depends": {
- "fabricloader": ">=0.15.10",
- "fabric-api": ">=0.97.7",
- "minecraft": "1.20.5",
- "java": ">=21"
- }
-}
+ "schemaVersion": 1,
+ "id": "aoba",
+ "version": "1.4.1",
+ "name": "Aoba Hacked Client",
+ "description": "Custom hacked client running on Fabric 1.20.5",
+ "authors": [
+ "Cocolots"
+ ],
+ "contact": {
+ "sources": "https://github.com/coltonk9043/Aoba-MC-Hacked-Client"
+ },
+ "license": "CC0-1.0",
+ "icon": "assets/aoba/icon.png",
+ "environment": "*",
+ "entrypoints": {
+ "main": [
+ "net.aoba.Aoba"
+ ]
+ },
+ "mixins": [
+ "aoba.mixins.json"
+ ],
+ "depends": {
+ "fabricloader": ">=0.15.11",
+ "minecraft": "~1.20.5",
+ "java": ">=21",
+ "fabric-api": "*"
+ }
+}
\ No newline at end of file