Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
1bf4423
Bump version to 25w31a, some fixes.
Wide-Cat Jul 30, 2025
863eb6e
Update to 25w32a
Wide-Cat Aug 5, 2025
ccd0be1
update to 25w33a
Wide-Cat Aug 12, 2025
e608375
update to 25w34b
Wide-Cat Aug 20, 2025
7f7e57f
Update to 25w35a
Wide-Cat Aug 26, 2025
c8f2f9a
Update to 25w36a
Wide-Cat Sep 2, 2025
dc923d8
Update to 25w37a
Wide-Cat Sep 9, 2025
28b3c5e
Update to 1.21.9-pre.1
Wide-Cat Sep 17, 2025
2dcdae8
Update to 1.21.9-pre.2
Wide-Cat Sep 19, 2025
fe075ee
Update to 1.21.9-pre.4
Wide-Cat Sep 24, 2025
eb8aa53
Update to 1.21.9
MineGame159 Oct 3, 2025
9d6907e
Some small fixes
MineGame159 Oct 3, 2025
6444bd4
Fix SimpleBlockRenderer and WireframeEntityRenderer
MineGame159 Oct 3, 2025
710d470
More stuff from #5724
MineGame159 Oct 3, 2025
329081f
assorted code cleanup and bug fixes
Wide-Cat Oct 5, 2025
274aac0
more small bug fixes
Wide-Cat Oct 5, 2025
cc19351
Update to 1.21.10
Wide-Cat Oct 7, 2025
ee0fbdd
Update KeyEvent and MouseButtonEvent (now MouseClickEvent) to account…
Wide-Cat Oct 7, 2025
924be20
re-add 1.21.9 support, fix fapi dependency (#5755)
RacoonDog Oct 8, 2025
7a41475
Replace Shadow JAR with proper JiJ implementation (#5754)
Big-Iron-Cheems Oct 9, 2025
3ee1011
fix 1.21.10 support (#5757)
RacoonDog Oct 11, 2025
d71abb3
Update our screen system to ensure consistency with the new mouse and…
Wide-Cat Oct 11, 2025
55b16d3
Merge branch 'master' into mc-update
Wide-Cat Oct 11, 2025
422e37a
fixes
Wide-Cat Oct 11, 2025
23a6839
Fix WTextBox; update dependencies
Wide-Cat Oct 11, 2025
33af759
Update KeyEvent and MouseClickEvent with some helper methods
Wide-Cat Oct 11, 2025
e395631
Merge branch 'master' into mc-update
Wide-Cat Oct 11, 2025
6cd7b5b
redo
Wide-Cat Oct 11, 2025
f0c7a17
Fix Shader ESP and Chams
MineGame159 Oct 12, 2025
5e5e0b6
Fix Shader ESP and Chams 2
MineGame159 Oct 12, 2025
4d980a8
Merge branch 'master' into mc-update
Wide-Cat Oct 12, 2025
8e35731
fixes
Wide-Cat Oct 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 49 additions & 38 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
plugins {
id("fabric-loom") version "1.10-SNAPSHOT"
id("fabric-loom") version "1.11-SNAPSHOT"
id("maven-publish")
id("com.gradleup.shadow") version "9.0.0-beta11"
}

base {
Expand Down Expand Up @@ -50,7 +49,7 @@ repositories {
}

val modInclude: Configuration by configurations.creating
val library: Configuration by configurations.creating
val jij: Configuration by configurations.creating

configurations {
// include mods
Expand All @@ -61,12 +60,12 @@ configurations {
extendsFrom(modInclude)
}

// include libraries
// include libraries (jar-in-jar)
implementation.configure {
extendsFrom(library)
extendsFrom(jij)
}
shadow.configure {
extendsFrom(library)
include.configure {
extendsFrom(jij)
}
}

Expand All @@ -78,6 +77,7 @@ dependencies {

modInclude(fabricApi.module("fabric-api-base", properties["fapi_version"] as String))
modInclude(fabricApi.module("fabric-resource-loader-v0", properties["fapi_version"] as String))
modInclude(fabricApi.module("fabric-resource-loader-v1", properties["fapi_version"] as String))

// Compat fixes
modCompileOnly(fabricApi.module("fabric-renderer-indigo", properties["fapi_version"] as String))
Expand All @@ -93,16 +93,44 @@ dependencies {
modCompileOnly("com.terraformersmc:modmenu:${properties["modmenu_version"] as String}")

// Libraries
library("meteordevelopment:orbit:${properties["orbit_version"] as String}")
library("org.meteordev:starscript:${properties["starscript_version"] as String}")
library("meteordevelopment:discord-ipc:${properties["discordipc_version"] as String}")
library("org.reflections:reflections:${properties["reflections_version"] as String}")
library("io.netty:netty-handler-proxy:${properties["netty_version"] as String}") { isTransitive = false }
library("io.netty:netty-codec-socks:${properties["netty_version"] as String}") { isTransitive = false }
library("de.florianmichael:WaybackAuthLib:${properties["waybackauthlib_version"] as String}")

// Launch sub project
shadow(project(":launch"))
jij("meteordevelopment:orbit:${properties["orbit_version"] as String}")
jij("org.meteordev:starscript:${properties["starscript_version"] as String}")
jij("meteordevelopment:discord-ipc:${properties["discordipc_version"] as String}")
jij("org.reflections:reflections:${properties["reflections_version"] as String}")
jij("io.netty:netty-handler-proxy:${properties["netty_version"] as String}") { isTransitive = false }
jij("io.netty:netty-codec-socks:${properties["netty_version"] as String}") { isTransitive = false }
jij("de.florianmichael:WaybackAuthLib:${properties["waybackauthlib_version"] as String}")
}

// Handle transitive dependencies for jar-in-jar
// Based on implementation from BaseProject by FlorianMichael/EnZaXD
// Source: https://github.com/FlorianMichael/BaseProject/blob/main/src/main/kotlin/de/florianmichael/baseproject/Fabric.kt
// Licensed under Apache License 2.0
afterEvaluate {
val jijConfig = configurations.findByName("jij") ?: return@afterEvaluate

// Dependencies to exclude from jar-in-jar
val excluded = setOf(
"org.slf4j", // Logging provided by Minecraft
"jsr305" // Compile time annotations only
)


jijConfig.incoming.resolutionResult.allDependencies.forEach { dep ->
val requested = dep.requested.displayName

if (excluded.any { requested.contains(it) }) return@forEach

val compileOnlyDep = dependencies.create(requested) {
isTransitive = false
}

val implDep = dependencies.create(compileOnlyDep)

dependencies.add("compileOnlyApi", compileOnlyDep)
dependencies.add("implementation", implDep)
dependencies.add("include", compileOnlyDep)
}
}

loom {
Expand Down Expand Up @@ -141,6 +169,10 @@ tasks {
rename { "${it}_${inputs.properties["archivesName"]}" }
}

// Launch sub project
dependsOn(":launch:compileJava")
from(project(":launch").layout.buildDirectory.dir("classes/java/main"))

manifest {
attributes["Main-Class"] = "meteordevelopment.meteorclient.Main"
}
Expand All @@ -162,27 +194,6 @@ tasks {
options.compilerArgs.add("-Xlint:unchecked")
}

shadowJar {
configurations = listOf(project.configurations.shadow.get())

inputs.property("archivesName", project.base.archivesName.get())

from("LICENSE") {
rename { "${it}_${inputs.properties["archivesName"]}" }
}

dependencies {
exclude {
it.moduleGroup == "org.slf4j"
}
}
}

remapJar {
dependsOn(shadowJar)
inputFile.set(shadowJar.get().archiveFile)
}

javadoc {
with(options as StandardJavadocDocletOptions) {
addStringOption("Xdoclint:none", "-quiet")
Expand Down
18 changes: 9 additions & 9 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G
org.gradle.configuration-cache=true

# Fabric (https://fabricmc.net/develop)
minecraft_version=1.21.8
yarn_mappings=1.21.8+build.1
loader_version=0.16.14
fapi_version=0.129.0+1.21.8
minecraft_version=1.21.10
yarn_mappings=1.21.10+build.1
loader_version=0.17.2
fapi_version=0.135.0+1.21.10

# Mod Properties
maven_group=meteordevelopment
Expand All @@ -17,16 +17,16 @@ archives_base_name=meteor-client
baritone_version=1.21.5

# Sodium (https://github.com/CaffeineMC/sodium-fabric)
sodium_version=mc1.21.6-0.6.13-fabric
sodium_version=mc1.21.10-0.7.2-fabric

# Lithium (https://github.com/CaffeineMC/lithium-fabric)
lithium_version=mc1.21.6-0.17.0-fabric
lithium_version=mc1.21.10-0.20.0-fabric

# Iris (https://github.com/IrisShaders/Iris)
iris_version=1.9.0+1.21.6-fabric
iris_version=1.9.6+1.21.10-fabric

# ModMenu (https://github.com/TerraformersMC/ModMenu)
modmenu_version=15.0.0-beta.3
modmenu_version=15.0.0

# Orbit (https://github.com/MeteorDevelopment/orbit)
orbit_version=0.2.4
Expand All @@ -44,7 +44,7 @@ reflections_version=0.10.2
netty_version=4.1.118.Final

# ViaFabricPlus (https://github.com/ViaVersion/ViaFabricPlus)
viafabricplus_version=4.1.5
viafabricplus_version=4.3.1

# WaybackAuthLib (https://github.com/FlorianMichael/WaybackAuthLib)
waybackauthlib_version=1.0.1
10 changes: 5 additions & 5 deletions src/main/java/meteordevelopment/meteorclient/MeteorClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import meteordevelopment.meteorclient.addons.MeteorAddon;
import meteordevelopment.meteorclient.events.game.OpenScreenEvent;
import meteordevelopment.meteorclient.events.meteor.KeyEvent;
import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent;
import meteordevelopment.meteorclient.events.meteor.MouseClickEvent;
import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.gui.GuiThemes;
import meteordevelopment.meteorclient.gui.WidgetScreen;
Expand Down Expand Up @@ -150,20 +150,20 @@ public void onInitializeClient() {
@EventHandler
private void onTick(TickEvent.Post event) {
if (mc.currentScreen == null && mc.getOverlay() == null && KeyBinds.OPEN_COMMANDS.wasPressed()) {
mc.setScreen(new ChatScreen(Config.get().prefix.get()));
mc.setScreen(new ChatScreen(Config.get().prefix.get(), true));
}
}

@EventHandler
private void onKey(KeyEvent event) {
if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesKey(event.key, 0)) {
if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesKey(event.input)) {
toggleGui();
}
}

@EventHandler
private void onMouseButton(MouseButtonEvent event) {
if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesMouse(event.button)) {
private void onMouseClick(MouseClickEvent event) {
if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesMouse(event.click)) {
toggleGui();
}
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/meteordevelopment/meteorclient/asm/Asm.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@ public boolean transformClass(MixinEnvironment environment, String name, ClassNo
return delegate.transformClass(environment, name, classNode);
}

@Override
public boolean couldTransformClass(MixinEnvironment environment, String name) {
return delegate.couldTransformClass(environment, name);
}

@Override
public byte[] generateClass(MixinEnvironment environment, String name) {
return delegate.generateClass(environment, name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ public DefaultPosArgument(CoordinateArgument x, CoordinateArgument y, Coordinate

@Override
public <S> Vec3d getPosition(S source) {
Vec3d vec3 = mc.player.getPos();
Vec3d vec3 = mc.player.getEntityPos();
return new Vec3d(this.x.toAbsoluteCoordinate(vec3.x), this.y.toAbsoluteCoordinate(vec3.y), this.z.toAbsoluteCoordinate(vec3.z));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public PlayerListEntry parse(StringReader reader) throws CommandSyntaxException
PlayerListEntry playerListEntry = null;

for (PlayerListEntry p : mc.getNetworkHandler().getPlayerList()) {
if (p.getProfile().getName().equalsIgnoreCase(argument)) {
if (p.getProfile().name().equalsIgnoreCase(argument)) {
playerListEntry = p;
break;
}
Expand All @@ -56,7 +56,7 @@ public PlayerListEntry parse(StringReader reader) throws CommandSyntaxException

@Override
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
return CommandSource.suggestMatching(mc.getNetworkHandler().getPlayerList().stream().map(playerListEntry -> playerListEntry.getProfile().getName()), builder);
return CommandSource.suggestMatching(mc.getNetworkHandler().getPlayerList().stream().map(playerListEntry -> playerListEntry.getProfile().name()), builder);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ private void damagePlayer(int amount) {
boolean antiHunger = Modules.get().isActive(AntiHunger.class);
if (antiHunger) Modules.get().get(AntiHunger.class).toggle();

Vec3d pos = mc.player.getPos();
Vec3d pos = mc.player.getEntityPos();

for(int i = 0; i < 80; i++) {
sendPositionPacket(pos.x, pos.y + amount + 2.1, pos.z, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
.then(argument("player", PlayerListEntryArgumentType.create())
.executes(context -> {
GameProfile profile = PlayerListEntryArgumentType.get(context).getProfile();
Friend friend = new Friend(profile.getName(), profile.getId());
Friend friend = new Friend(profile.name(), profile.id());

if (Friends.get().add(friend)) {
ChatUtils.sendMsg(friend.hashCode(), Formatting.GRAY, "Added (highlight)%s (default)to friends.".formatted(friend.getName()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
}

for (KeyBinding keyBinding : mc.options.hotbarKeys) {
builder.then(literal(keyBinding.getTranslationKey().substring(4))
builder.then(literal(keyBinding.getId().substring(4))
.executes(context -> {
press(keyBinding);
return SINGLE_SUCCESS;
Expand All @@ -91,7 +91,7 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
info("Active keypress handlers: ");
for (int i = 0; i < activeHandlers.size(); i++) {
KeypressHandler handler = activeHandlers.get(i);
info("(highlight)%d(default) - (highlight)%s %d(default) ticks left out of (highlight)%d(default).", i, I18n.translate(handler.key.getTranslationKey()), handler.ticks, handler.totalTicks);
info("(highlight)%d(default) - (highlight)%s %d(default) ticks left out of (highlight)%d(default).", i, I18n.translate(handler.key.getId()), handler.ticks, handler.totalTicks);
}
}
return SINGLE_SUCCESS;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
builder.then(argument("player", PlayerListEntryArgumentType.create()).executes(context -> {
MeteorExecutor.execute(() -> {
PlayerListEntry lookUpTarget = PlayerListEntryArgumentType.get(context);
UUID uuid = lookUpTarget.getProfile().getId();
UUID uuid = lookUpTarget.getProfile().id();

NameHistory history = Http.get("https://laby.net/api/v2/user/" + uuid + "/get-profile")
.exceptionHandler(e -> error("There was an error fetching that users name history."))
Expand All @@ -47,7 +47,7 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
error("There was an error fetching that users name history.");
}

String name = lookUpTarget.getProfile().getName();
String name = lookUpTarget.getProfile().name();
MutableText initial = Text.literal(name);
initial.append(Text.literal(name.endsWith("s") ? "'" : "'s"));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import meteordevelopment.meteorclient.commands.Command;
import meteordevelopment.meteorclient.commands.arguments.PlayerArgumentType;
import meteordevelopment.meteorclient.events.meteor.KeyEvent;
import meteordevelopment.meteorclient.events.meteor.MouseClickEvent;
import meteordevelopment.meteorclient.utils.misc.input.Input;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.command.CommandSource;
import net.minecraft.text.Text;
Expand Down Expand Up @@ -40,7 +42,16 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
private static class StaticListener {
@EventHandler
private void onKey(KeyEvent event) {
if (mc.options.sneakKey.matchesKey(event.key, 0) || mc.options.sneakKey.matchesMouse(event.key)) {
if (Input.isPressed(mc.options.sneakKey)) {
mc.setCameraEntity(mc.player);
event.cancel();
MeteorClient.EVENT_BUS.unsubscribe(this);
}
}

@EventHandler
private void onMouse(MouseClickEvent event) {
if (Input.isPressed(mc.options.sneakKey)) {
mc.setCameraEntity(mc.player);
event.cancel();
MeteorClient.EVENT_BUS.unsubscribe(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* Getting the pose calls {@link meteordevelopment.meteorclient.mixin.EntityMixin#modifyGetPose(net.minecraft.entity.EntityPose)},
* which calls {@link PlayerEntity#canChangeIntoPose(net.minecraft.entity.EntityPose)}, which
* calculates whether there is enough space to fit your bounding box if you change into that pose. This method ends up
* calling {@link LivingEntity#canWalkOnFluid(net.minecraft.fluid.FluidState)}, causing this event to fire
* calling {@link LivingEntity#canWalkOnFluid(FluidState)}, causing this event to fire
* again and leading to a stack overflow crash. Introduced in
* <a href="https://github.com/MeteorDevelopment/meteor-client/pull/5449">this pull request</a>
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ public class SendMovementPacketsEvent {
public static class Pre {
private static final Pre INSTANCE = new Pre();

public static SendMovementPacketsEvent.Pre get() {
public static Pre get() {
return INSTANCE;
}
}

public static class Post {
private static final Post INSTANCE = new Post();

public static SendMovementPacketsEvent.Post get() {
public static Post get() {
return INSTANCE;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,26 @@

import meteordevelopment.meteorclient.events.Cancellable;
import meteordevelopment.meteorclient.utils.misc.input.KeyAction;
import net.minecraft.client.input.KeyInput;

public class KeyEvent extends Cancellable {
private static final KeyEvent INSTANCE = new KeyEvent();

public int key, modifiers;
public KeyInput input;
public KeyAction action;

public static KeyEvent get(int key, int modifiers, KeyAction action) {
public static KeyEvent get(KeyInput input, KeyAction action) {
INSTANCE.setCancelled(false);
INSTANCE.key = key;
INSTANCE.modifiers = modifiers;
INSTANCE.input = input;
INSTANCE.action = action;
return INSTANCE;
}

public int key() {
return INSTANCE.input.key();
}

public int modifiers() {
return INSTANCE.input.modifiers();
}
}
Loading