Skip to content

Commit 3860cdb

Browse files
Merge v7.50.3 into 1.21.4
2 parents b894cc7 + 25c1bfb commit 3860cdb

File tree

12 files changed

+106
-21
lines changed

12 files changed

+106
-21
lines changed

.github/workflows/auto_snapshot_update.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
run: chmod +x gradlew
5252

5353
- name: Setup Gradle
54-
uses: gradle/actions/setup-gradle@v4
54+
uses: gradle/actions/setup-gradle@v5
5555
with:
5656
build-scan-publish: true
5757
build-scan-terms-of-use-url: "https://gradle.com/help/legal-terms-of-use"

.github/workflows/dependency_graph.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
run: chmod +x gradlew
3535

3636
- name: Generate and submit dependency graph
37-
uses: gradle/actions/dependency-submission@v4
37+
uses: gradle/actions/dependency-submission@v5
3838
with:
3939
build-scan-publish: true
4040
build-scan-terms-of-use-url: "https://gradle.com/help/legal-terms-of-use"

.github/workflows/gradle.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
run: chmod +x gradlew
4848

4949
- name: Setup Gradle
50-
uses: gradle/actions/setup-gradle@v4
50+
uses: gradle/actions/setup-gradle@v5
5151
with:
5252
build-scan-publish: true
5353
build-scan-terms-of-use-url: "https://gradle.com/help/legal-terms-of-use"

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ jobs:
5757
run: chmod +x gradlew
5858

5959
- name: Setup Gradle
60-
uses: gradle/actions/setup-gradle@v4
60+
uses: gradle/actions/setup-gradle@v5
6161
with:
6262
build-scan-publish: true
6363
build-scan-terms-of-use-url: "https://gradle.com/help/legal-terms-of-use"

build.gradle

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,22 @@ repositories {
2929
// Override vulnerable dependencies until Minecraft updates to newer versions
3030
configurations.all {
3131
resolutionStrategy {
32-
// v2.5.1, used by Minecraft 1.21.4 - 1.21.8, is vulnerable to CVE-2024-57699
32+
// v2.5.1, used by Minecraft 1.21.4 - 1.21.10, is vulnerable to CVE-2024-57699
3333
force "net.minidev:json-smart:2.5.2"
34-
// v2.13.4, used by Minecraft 1.21.4 - 1.21.8, is vulnerable to CVE-2025-52999
34+
// v2.13.4, used by Minecraft 1.21.4 - 1.21.10, is vulnerable to CVE-2025-52999
3535
force "com.fasterxml.jackson.core:jackson-core:2.15.0"
36-
// v3.17.0, used by Minecraft 1.21.4 - 1.21.8, is vulnerable to CVE-2025-48924
36+
// v3.17.0, used by Minecraft 1.21.4 - 1.21.10, is vulnerable to CVE-2025-48924
3737
force "org.apache.commons:commons-lang3:3.18.0"
38-
// v9.40, used by Minecraft 1.21.4 - 1.21.8, is vulnerable to CVE-2025-53864
38+
// v9.40, used by Minecraft 1.21.4 - 1.21.10, is vulnerable to CVE-2025-53864
3939
force "com.nimbusds:nimbus-jose-jwt:10.0.2"
4040
// v4.1.115.Final, used by Minecraft 1.21.4, is vulnerable to CVE-2025-25193
4141
force "io.netty:netty-common:4.1.118.Final"
4242
// v4.1.115.Final, used by Minecraft 1.21.4, is vulnerable to CVE-2025-24970
4343
force "io.netty:netty-handler:4.1.118.Final"
4444
// v4.1.115.Final, used by Minecraft 1.21.4, is vulnerable to CVE-2025-58057
4545
force "io.netty:netty-codec:4.1.125.Final"
46+
// v4.1.115.Final, used by Minecraft 1.21.4, is vulnerable to CVE-2025-58056
47+
force "io.netty:netty-codec-http:4.1.125.Final"
4648
}
4749
}
4850

@@ -143,7 +145,7 @@ jar {
143145
inputs.property("archivesName", archivesName)
144146

145147
from("LICENSE.txt") {
146-
rename { "LICENSE-${archivesName}.txt" }
148+
rename { "LICENSE-${archivesName.get()}.txt" }
147149
}
148150

149151
exclude("intentionally_untranslated.json")

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ org.gradle.configuration-cache=true
88
# https://modrinth.com/mod/fabric-api/versions
99
minecraft_version=1.21.4
1010
yarn_mappings=1.21.4+build.8
11-
loader_version=0.17.2
12-
loom_version=1.11-SNAPSHOT
11+
loader_version=0.17.3
12+
loom_version=1.11-SNAPSHOT
1313

1414
# Fabric API
1515
fabric_version=0.119.4+1.21.4
1616

1717
# Mod Properties
18-
mod_version=v7.50.2-MC1.21.4
18+
mod_version=v7.50.3-MC1.21.4
1919
maven_group=net.wurstclient
2020
archives_base_name=Wurst-Client
2121
mod_loader=Fabric

src/main/java/net/wurstclient/WurstClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public enum WurstClient
5050
public static MinecraftClient MC;
5151
public static IMinecraftClient IMC;
5252

53-
public static final String VERSION = "7.50.2";
53+
public static final String VERSION = "7.50.3";
5454
public static final String MC_VERSION = "1.21.4";
5555

5656
private PlausibleAnalytics plausible;

src/main/java/net/wurstclient/hacks/NoLevitationHack.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ public NoLevitationHack()
2020
setCategory(Category.MOVEMENT);
2121
}
2222

23-
// See ClientPlayerEntityMixin.hasStatusEffect()
23+
// See ClientPlayerEntityMixin.hasStatusEffect() and
24+
// ClientPlayerEntityMixin.getStatusEffect()
2425
}

src/main/java/net/wurstclient/mixin/ClientPlayerEntityMixin.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import net.minecraft.client.world.ClientWorld;
2929
import net.minecraft.entity.MovementType;
3030
import net.minecraft.entity.effect.StatusEffect;
31+
import net.minecraft.entity.effect.StatusEffectInstance;
3132
import net.minecraft.entity.effect.StatusEffects;
3233
import net.minecraft.registry.entry.RegistryEntry;
3334
import net.minecraft.util.math.Vec3d;
@@ -281,6 +282,19 @@ public boolean hasStatusEffect(RegistryEntry<StatusEffect> effect)
281282
return super.hasStatusEffect(effect);
282283
}
283284

285+
@Override
286+
public StatusEffectInstance getStatusEffect(
287+
RegistryEntry<StatusEffect> effect)
288+
{
289+
HackList hax = WurstClient.INSTANCE.getHax();
290+
291+
if(effect == StatusEffects.LEVITATION
292+
&& hax.noLevitationHack.isEnabled())
293+
return null;
294+
295+
return super.getStatusEffect(effect);
296+
}
297+
284298
@Override
285299
public float getStepHeight()
286300
{
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright (c) 2014-2025 Wurst-Imperium and contributors.
3+
*
4+
* This source code is subject to the terms of the GNU General Public
5+
* License, version 3. If a copy of the GPL was not distributed with this
6+
* file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt
7+
*/
8+
package net.wurstclient.mixin;
9+
10+
import java.nio.file.Path;
11+
import java.util.UUID;
12+
13+
import org.spongepowered.asm.mixin.Final;
14+
import org.spongepowered.asm.mixin.Mixin;
15+
import org.spongepowered.asm.mixin.Shadow;
16+
import org.spongepowered.asm.mixin.injection.At;
17+
18+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
19+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
20+
21+
import net.minecraft.client.session.Session;
22+
import net.minecraft.util.Downloader;
23+
import net.minecraft.util.Uuids;
24+
import net.wurstclient.WurstClient;
25+
26+
@Mixin(Downloader.class)
27+
public abstract class DownloaderMixin implements AutoCloseable
28+
{
29+
@Shadow
30+
@Final
31+
private Path directory;
32+
33+
/**
34+
* Patches a fingerprinting vulnerability by creating a separate cache
35+
* folder for each Minecraft account.
36+
*
37+
* <p>
38+
* This mixin targets the <code>entries.forEach()</code> lambda in
39+
* <code>download(Config, Map)</code>.
40+
*
41+
* @see https://github.com/Wurst-Imperium/Wurst7/issues/1226
42+
*/
43+
@WrapOperation(at = @At(value = "INVOKE",
44+
target = "Ljava/nio/file/Path;resolve(Ljava/lang/String;)Ljava/nio/file/Path;",
45+
ordinal = 0,
46+
remap = false), method = "method_55485")
47+
private Path wrapResolve(Path instance, String filename,
48+
Operation<Path> original)
49+
{
50+
Path result = original.call(instance, filename);
51+
52+
// If the path has already been modified by another mod (likely trying
53+
// to patch the same exploit), don't modify it further.
54+
if(result == null || !result.getParent().equals(directory))
55+
return result;
56+
57+
// "getUuidOrNull" seems to be an outdated Yarn name, as Minecraft
58+
// 1.21.10 treats this like a non-null method. Just in case, we manually
59+
// fallback to the offline UUID if it ever does return null.
60+
Session session = WurstClient.MC.getSession();
61+
UUID uuid = session.getUuidOrNull();
62+
if(uuid == null)
63+
uuid = Uuids.getOfflinePlayerUuid(session.getUsername());
64+
65+
return result.getParent().resolve(uuid.toString())
66+
.resolve(result.getFileName());
67+
}
68+
}

0 commit comments

Comments
 (0)