Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.

Commit 9d3fb43

Browse files
authored
3.1.5 (#172)
**Changelog**: - fix a few bugs (#154, #155, #168) - add Bedwars StatsOverlay (#145) - Fix various hypixel issues (#167) - add Inventory HUD (#152) - big internal refactors (#143) - add Config Profiles (#161)
2 parents 6c3f32c + 87473a2 commit 9d3fb43

File tree

913 files changed

+28325
-35959
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

913 files changed

+28325
-35959
lines changed

.editorconfig

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,5 @@ trim_trailing_whitespace = true
99
indent_style = tab
1010
max_line_length = 120
1111

12-
[*.json]
13-
indent_size = 2
14-
15-
[quilt.mod.json]
16-
tab_width = 2
17-
1812
[*.properties]
1913
indent_size = 2

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: Setup Gradle
1818
uses: gradle/actions/setup-gradle@v4
1919
with:
20-
cache-read-only: ${{ github.ref != 'refs/heads/multiversion' }}
20+
cache-read-only: ${{ github.ref != 'refs/heads/multiversion' || github.ref != 'refs/heads/dev' }}
2121

2222
- name: Build
2323
run: ./gradlew build collectBuilds

1.16_combat-6/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,11 @@ dependencies {
4747

4848
implementation(include(project(path = ":common", configuration = "shadow"))!!)
4949

50-
include("org.apache.logging.log4j:log4j-slf4j-impl:2.0-beta9") {
50+
include("org.apache.logging.log4j:log4j-slf4j-impl:2.19.0") {
5151
exclude(group = "org.apache.logging.log4j", module = "log4j-api")
5252
exclude(group = "org.apache.logging.log4j", module = "log4j-core")
5353
}
54+
include("org.apache.logging.log4j:log4j-core:2.19.0")
5455
implementation(include("org.slf4j:slf4j-api:1.7.36")!!)
5556
localRuntime("org.slf4j:slf4j-jdk14:1.7.36")
5657

1.16_combat-6/src/main/java/io/github/axolotlclient/AxolotlClient.java

Lines changed: 39 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,12 @@
2222

2323
package io.github.axolotlclient;
2424

25-
import java.util.ArrayList;
2625
import java.util.HashMap;
27-
import java.util.List;
28-
import java.util.Locale;
2926

30-
import com.google.gson.JsonObject;
31-
import io.github.axolotlclient.AxolotlClientConfig.api.manager.ConfigManager;
32-
import io.github.axolotlclient.AxolotlClientConfig.api.options.OptionCategory;
33-
import io.github.axolotlclient.AxolotlClientConfig.impl.managers.VersionedJsonConfigManager;
34-
import io.github.axolotlclient.AxolotlClientConfig.impl.options.BooleanOption;
3527
import io.github.axolotlclient.api.API;
3628
import io.github.axolotlclient.api.APIOptions;
3729
import io.github.axolotlclient.api.StatusUpdateProviderImpl;
38-
import io.github.axolotlclient.config.AxolotlClientConfig;
39-
import io.github.axolotlclient.modules.Module;
30+
import io.github.axolotlclient.bridge.impl.Bridge;
4031
import io.github.axolotlclient.modules.ModuleLoader;
4132
import io.github.axolotlclient.modules.auth.Auth;
4233
import io.github.axolotlclient.modules.blur.MenuBlur;
@@ -58,131 +49,64 @@
5849
import io.github.axolotlclient.util.LoggerImpl;
5950
import io.github.axolotlclient.util.notifications.Notifications;
6051
import net.fabricmc.api.ClientModInitializer;
61-
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
62-
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
63-
import net.fabricmc.loader.api.FabricLoader;
64-
import net.minecraft.client.resource.language.I18n;
6552
import net.minecraft.resource.Resource;
6653
import net.minecraft.util.Identifier;
6754

68-
public class AxolotlClient implements ClientModInitializer {
55+
public class AxolotlClient extends AxolotlClientCommon implements ClientModInitializer {
6956

70-
public static final String MODID = "axolotlclient";
7157
public static final HashMap<Identifier, Resource> runtimeResources = new HashMap<>();
72-
public static final Identifier badgeIcon = new Identifier(MODID, "textures/badge.png");
73-
public static final OptionCategory config = OptionCategory.create("storedOptions");
74-
public static final BooleanOption someNiceBackground = new BooleanOption("defNoSecret", false);
75-
public static final List<Module> modules = new ArrayList<>();
58+
public static final Identifier badgeIcon = new Identifier("axolotlclient", "textures/badge.png");
7659
public static final Logger LOGGER = new LoggerImpl();
77-
public static String VERSION;
78-
public static AxolotlClientConfig CONFIG;
79-
public static ConfigManager configManager;
8060

81-
public static void getModules() {
82-
modules.add(SkyResourceManager.getInstance());
83-
modules.add(Zoom.getInstance());
84-
modules.add(HudManager.getInstance());
85-
modules.add(HypixelMods.getInstance());
86-
modules.add(MotionBlur.getInstance());
87-
modules.add(MenuBlur.getInstance());
88-
modules.add(ScrollableTooltips.getInstance());
89-
modules.add(DiscordRPC.getInstance());
90-
modules.add(Freelook.getInstance());
91-
modules.add(TntTime.getInstance());
92-
modules.add(Particles.getInstance());
93-
modules.add(ScreenshotUtils.getInstance());
94-
modules.add(BeaconBeam.getInstance());
95-
modules.add(Tablist.getInstance());
96-
modules.add(Auth.getInstance());
97-
modules.add(APIOptions.getInstance());
61+
private void addBuiltinModules() {
62+
registerModule(SkyResourceManager.getInstance());
63+
registerModule(Zoom.getInstance());
64+
registerModule(HudManager.getInstance());
65+
registerModule(HypixelMods.getInstance());
66+
registerModule(MotionBlur.getInstance());
67+
registerModule(MenuBlur.getInstance());
68+
registerModule(ScrollableTooltips.getInstance());
69+
registerModule(DiscordRPC.getInstance());
70+
registerModule(Freelook.getInstance());
71+
registerModule(TntTime.getInstance());
72+
registerModule(Particles.getInstance());
73+
registerModule(ScreenshotUtils.getInstance());
74+
registerModule(BeaconBeam.getInstance());
75+
registerModule(Tablist.getInstance());
76+
registerModule(Auth.getInstance());
77+
registerModule(APIOptions.getInstance());
9878
}
9979

100-
private static void addExternalModules() {
101-
modules.addAll(ModuleLoader.loadExternalModules());
80+
private void addExternalModules() {
81+
ModuleLoader.loadExternalModules().forEach(this::registerModule);
10282
}
10383

10484
@Override
10585
public void onInitializeClient() {
86+
Bridge.init();
10687

107-
VERSION = FabricLoader.getInstance().getModContainer(MODID).orElseThrow(IllegalStateException::new)
108-
.getMetadata().getVersion().getFriendlyString();
109-
110-
CONFIG = new AxolotlClientConfig();
111-
config.add(someNiceBackground);
112-
113-
getModules();
88+
addBuiltinModules();
11489
addExternalModules();
115-
CONFIG.init();
116-
117-
new AxolotlClientCommon(LOGGER, Notifications.getInstance(), () -> configManager);
118-
new API(LOGGER, I18n::translate, new StatusUpdateProviderImpl(), APIOptions.getInstance());
119-
ClientLifecycleEvents.CLIENT_STOPPING.register(c -> API.getInstance().shutdown());
120-
121-
modules.forEach(Module::init);
122-
123-
CONFIG.config.add(config);
124-
125-
io.github.axolotlclient.AxolotlClientConfig.api.AxolotlClientConfig.getInstance()
126-
.register(configManager = new VersionedJsonConfigManager(AxolotlClientCommon.getInstance().getMainConfigFile(),
127-
CONFIG.config, 4, (oldVersion, newVersion, config, json) -> {
128-
if (oldVersion.getMajor() <= 1) {
129-
if (json.has("hud")) {
130-
var hud = json.get("hud").getAsJsonObject();
131-
if (hud.has("keystrokehud")) {
132-
var keystrokes = hud.get("keystrokehud")
133-
.getAsJsonObject();
134-
var mousemovement = new JsonObject();
135-
mousemovement.addProperty("enabled", keystrokes.get("enabled").getAsBoolean() && keystrokes.get("mousemovement").getAsBoolean());
136-
mousemovement.addProperty("mouseMovementIndicator", keystrokes.get("mouseMovementIndicator").getAsString());
137-
mousemovement.addProperty("mouseMovementIndicatorOuter", keystrokes.get("mouseMovementIndicatorOuter").getAsString());
138-
hud.add("mousemovementhud", mousemovement);
139-
}
140-
}
141-
}
142-
if (oldVersion.getMajor() <= 2) {
143-
if (json.has("hud")) {
144-
var hud = json.get("hud").getAsJsonObject();
145-
if (hud.has("armorhud")) {
146-
var armorhud = hud.get("armorhud").getAsJsonObject();
147-
if (armorhud.has("armorhud.main_hand_item_top")) {
148-
var mainItemTop = armorhud.get("armorhud.main_hand_item_top").getAsBoolean();
149-
if (mainItemTop) {
150-
armorhud.addProperty("armorhud.main_hand_item_position", "armorhud.main_hand_item_position.top");
151-
}
152-
}
153-
}
154-
}
155-
}
156-
if (oldVersion.getMajor() <= 3) {
157-
if (json.has("storedOptions")) {
158-
var hiddenOptions = json.get("storedOptions").getAsJsonObject();
159-
160-
JsonObject apiOptions;
161-
if (json.has("api.category")) {
162-
apiOptions = json.get("api.category").getAsJsonObject();
163-
} else {
164-
apiOptions = new JsonObject();
165-
json.add("api.category", apiOptions);
166-
}
167-
168-
apiOptions.addProperty("api.privacy_policy_accepted", "privacy_policy_state."+hiddenOptions.get("privacyPolicyAccepted").getAsString().toLowerCase(Locale.ROOT));
169-
}
170-
}
171-
return json;
172-
}));
173-
configManager.load();
174-
configManager.suppressName("x");
175-
configManager.suppressName("y");
176-
configManager.suppressName(config.getName());
17790

178-
modules.forEach(Module::lateInit);
91+
init(LOGGER, Notifications.getInstance());
92+
new API(new StatusUpdateProviderImpl(), APIOptions.getInstance());
17993

180-
ClientTickEvents.END_CLIENT_TICK.register(client -> modules.forEach(Module::tick));
94+
LOGGER.debug("Debug Output enabled, Logs will be quite verbose!");
95+
LOGGER.info("AxolotlClient Initialized");
96+
Bridge.postInit();
97+
}
18198

99+
@Override
100+
protected void initFeatureDisabler() {
182101
FeatureDisabler.init();
102+
}
183103

184-
LOGGER.debug("Debug Output activated, Logs will be more verbose!");
104+
@Override
105+
protected AxolotlClientConfigCommon createConfig() {
106+
return new io.github.axolotlclient.config.AxolotlClientConfig();
107+
}
185108

186-
LOGGER.info("AxolotlClient Initialized");
109+
public static io.github.axolotlclient.config.AxolotlClientConfig config() {
110+
return (io.github.axolotlclient.config.AxolotlClientConfig) getInstance().getConfig();
187111
}
188112
}

1.16_combat-6/src/main/java/io/github/axolotlclient/api/APIOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void init() {
119119
}
120120
};
121121
if (Constants.ENABLED) {
122-
AxolotlClient.CONFIG.addCategory(category);
122+
AxolotlClient.config().addCategory(category);
123123
}
124124
}
125125
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright © 2025 moehreag <[email protected]> & Contributors
3+
*
4+
* This file is part of AxolotlClient.
5+
*
6+
* This program is free software; you can redistribute it and/or
7+
* modify it under the terms of the GNU Lesser General Public
8+
* License as published by the Free Software Foundation; either
9+
* version 3 of the License, or (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
* Lesser General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Lesser General Public License
17+
* along with this program; if not, write to the Free Software Foundation,
18+
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19+
*
20+
* For more information, see the LICENSE file.
21+
*/
22+
23+
package io.github.axolotlclient.bridge.impl;
24+
25+
import com.mojang.blaze3d.systems.RenderSystem;
26+
import io.github.axolotlclient.AxolotlClientConfig.impl.options.GraphicsOption;
27+
import io.github.axolotlclient.bridge.render.AxoSprite;
28+
import io.github.axolotlclient.util.Util;
29+
import net.minecraft.client.MinecraftClient;
30+
import net.minecraft.client.gui.DrawableHelper;
31+
import net.minecraft.client.texture.Sprite;
32+
import net.minecraft.client.util.math.MatrixStack;
33+
import net.minecraft.util.Identifier;
34+
35+
public interface AxoSpriteImpl extends AxoSprite {
36+
void draw(MinecraftClient client, MatrixStack stack, int sX, int sY, int sW, int sH);
37+
38+
record Simple(Identifier id, int x, int y, int width, int height) implements AxoSpriteImpl {
39+
@Override
40+
public void draw(MinecraftClient client, MatrixStack stack, int sX, int sY, int sW, int sH) {
41+
client.getTextureManager().bindTexture(id);
42+
DrawableHelper.drawTexture(stack, sX, sY, x, y, sW, sH, width, height);
43+
}
44+
}
45+
46+
record Vanilla(Sprite sprite) implements AxoSpriteImpl {
47+
@Override
48+
public void draw(MinecraftClient client, MatrixStack stack, int sX, int sY, int sW, int sH) {
49+
MinecraftClient.getInstance().getTextureManager().bindTexture(sprite.getAtlas().getId());
50+
RenderSystem.color4f(1, 1, 1, 1);
51+
DrawableHelper.drawSprite(stack, sX, sY, 0, sW, sH, sprite);
52+
}
53+
}
54+
55+
record Config(GraphicsOption option) implements AxoSpriteImpl {
56+
@Override
57+
public void draw(MinecraftClient client, MatrixStack stack, int sX, int sY, int sW, int sH) {
58+
Util.bindTexture(option);
59+
DrawableHelper.drawTexture(stack, sX, sY, 0, 0, sW, sH, option.get().getWidth(), option.get().getHeight());
60+
}
61+
}
62+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright © 2025 moehreag <[email protected]> & Contributors
3+
*
4+
* This file is part of AxolotlClient.
5+
*
6+
* This program is free software; you can redistribute it and/or
7+
* modify it under the terms of the GNU Lesser General Public
8+
* License as published by the Free Software Foundation; either
9+
* version 3 of the License, or (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
* Lesser General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Lesser General Public License
17+
* along with this program; if not, write to the Free Software Foundation,
18+
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19+
*
20+
* For more information, see the LICENSE file.
21+
*/
22+
23+
package io.github.axolotlclient.bridge.impl;
24+
25+
import com.mojang.brigadier.CommandDispatcher;
26+
import io.github.axolotlclient.bridge.events.Events;
27+
import net.fabricmc.fabric.api.client.command.v1.ClientCommandManager;
28+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
29+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
30+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
31+
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
32+
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
33+
import net.minecraft.resource.ResourceManager;
34+
import net.minecraft.resource.ResourceType;
35+
import net.minecraft.util.Identifier;
36+
37+
public class Bridge {
38+
public static void init() {
39+
ClientLifecycleEvents.CLIENT_STARTED.register(minecraft -> Events.CLIENT_START.invoker().run());
40+
ClientLifecycleEvents.CLIENT_STOPPING.register(minecraft -> Events.CLIENT_STOP.invoker().run());
41+
ClientTickEvents.END_CLIENT_TICK.register(minecraft -> Events.TICK.invoker().run());
42+
ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
43+
44+
@Override
45+
public void apply(ResourceManager manager) {
46+
Events.END_RESOURCE_RELOAD.invoker().run();
47+
}
48+
49+
@Override
50+
public Identifier getFabricId() {
51+
return new Identifier("axolotlclient", "bridge/resource_listener");
52+
}
53+
});
54+
ClientPlayConnectionEvents.INIT.register((clientPlayNetworkHandler, minecraftClient) -> Events.CONNECTION_PLAY_READY.invoker().run());
55+
ClientPlayConnectionEvents.DISCONNECT.register((clientPlayNetworkHandler, minecraftClient) -> Events.DISCONNECT.invoker().run());
56+
}
57+
58+
@SuppressWarnings({"unchecked", "rawtypes"})
59+
public static void postInit() {
60+
Events.COMMAND_REGISTER.invoker().accept(
61+
() -> (CommandDispatcher) ClientCommandManager.DISPATCHER
62+
);
63+
}
64+
}

0 commit comments

Comments
 (0)