From f95c12e14dd836cf04581ce08314fc924bdc554f Mon Sep 17 00:00:00 2001 From: bab Date: Wed, 24 Dec 2025 15:59:36 -0600 Subject: [PATCH 1/5] chore!: it runs on Java 24 (Kotlin <2.3.0 doesn't support Java 25) --- .github/workflows/build.yml | 8 ++++---- build.gradle.kts | 4 ++-- gradle/libs.versions.toml | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d38c6aa24c6..c925996c01b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,7 +79,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'graalvm' - java-version: '21' + java-version: '25' cache: 'gradle' - name: Grant permissions to src-theme run: sudo chmod -R 777 src-theme @@ -123,7 +123,7 @@ jobs: -F "lb_version=$LB_VERSION" \ -F "mc_version=$MINECRAFT_VERSION" \ -F "subsystem=fabric" \ - -F "jre_version=21" \ + -F "jre_version=25" \ -F "fabric_loader_version=$LOADER_VERSION" \ -F "fabric_api_version=$FABRICAPI_VERSION" \ -F "kotlin_version=$KOTLIN_VERSION" \ @@ -139,11 +139,11 @@ jobs: uses: actions/checkout@v4 with: submodules: recursive - - name: Setting up JDK 21 + - name: Setting up JDK 25 uses: actions/setup-java@v4 with: distribution: 'graalvm' - java-version: '21' + java-version: '25' cache: 'gradle' - name: Grant permissions to src-theme run: sudo chmod -R 777 src-theme diff --git a/build.gradle.kts b/build.gradle.kts index 7b79387bccf..3da5b2deb24 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -125,8 +125,8 @@ dependencies { // Recommended mods (on IDE) modApi(libs.sodium) modApi(libs.lithium) - modRuntimeOnly(libs.immediatelyFast) - modRuntimeOnly(libs.iris) +// modRuntimeOnly(libs.immediatelyFast) +// modRuntimeOnly(libs.iris) // ViaFabricPlus modApi(libs.vfp.api) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b28b2186796..6e874930f53 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] # Minecraft 1.21.1 upwards uses Java 21 # 26.1 upwards uses Java 25 -jdk = "21" +jdk = "24" # Fabric Properties # Check these on https://fabricmc.net/versions.html From 415a3d3cbe4c2e9459bd1c8f77e495839b6b3515 Mon Sep 17 00:00:00 2001 From: bab Date: Wed, 24 Dec 2025 16:19:25 -0600 Subject: [PATCH 2/5] chore: I give up aaaaa --- build.gradle.kts | 35 +-- gradle/libs.versions.toml | 15 +- .../mixins/truffle/MixinHostClassDesc.java | 218 ------------------ .../mixins/truffle/MixinHostContext.java | 39 ---- .../net/ccbluex/liquidbounce/LiquidBounce.kt | 2 - .../serializer/minecraft/ScreenSerializer.kt | 3 +- .../module/modules/misc/ModulePacketLogger.kt | 11 +- .../bindings/api/ScriptReflectionUtil.kt | 16 +- .../utils/kotlin/ReflectionUtils.kt | 4 +- .../utils/mappings/EnvironmentRemapper.kt | 150 ------------ .../utils/mappings/NotationExtensions.kt} | 18 +- src/main/resources/liquidbounce.accesswidener | 2 +- 12 files changed, 37 insertions(+), 476 deletions(-) delete mode 100644 src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassDesc.java delete mode 100644 src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostContext.java delete mode 100644 src/main/kotlin/net/ccbluex/liquidbounce/utils/mappings/EnvironmentRemapper.kt rename src/main/{java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassLoader.java => kotlin/net/ccbluex/liquidbounce/utils/mappings/NotationExtensions.kt} (54%) diff --git a/build.gradle.kts b/build.gradle.kts index 3da5b2deb24..93a1224ffae 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -109,38 +109,34 @@ loom { dependencies { // Minecraft minecraft(libs.minecraft) - mappings(loom.layered { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-${libs.versions.minecraft.get()}:2025.12.20@zip") - }) // Fabric - modApi(libs.fabric.loader) - modApi(libs.fabric.api) - modApi(libs.fabric.kotlin) + api(libs.fabric.loader) + api(libs.fabric.api) + api(libs.fabric.kotlin) // Mod menu - modApi(libs.modmenu) + api(libs.modmenu) // Recommended mods (on IDE) - modApi(libs.sodium) - modApi(libs.lithium) +// api(libs.sodium) +// api(libs.lithium) // modRuntimeOnly(libs.immediatelyFast) // modRuntimeOnly(libs.iris) // ViaFabricPlus - modApi(libs.vfp.api) - modRuntimeOnly(libs.vfp) + api(libs.vfp.api) +// runtimeOnly(libs.vfp) // Exploit Preventer - modApi(libs.exploitPreventer.api) - modRuntimeOnly(libs.exploitPreventer) + api(libs.exploitPreventer.api) +// runtimeOnly(libs.exploitPreventer) // Minecraft Authlib includeDependency(libs.mcAuthlib) // JCEF Support - modApi(libs.mcef) + api(libs.mcef) include(libs.mcef) includeDependency(libs.httpServer) @@ -148,7 +144,6 @@ dependencies { includeDependency(libs.discordIpc) // ScriptAPI - includeDependency("net.fabricmc:tiny-mappings-parser:0.3.0+build.17") includeDependency(libs.polyglot) includeDependency(libs.polyglot.js) includeDependency(libs.polyglot.tools) @@ -376,14 +371,10 @@ tasks.jar { val archivesBaseName = providers.gradleProperty("archives_base_name") val modVersion = providers.gradleProperty("mod_version") val mavenGroup = providers.gradleProperty("maven_group") - val mappingFiles = provider { - rootProject.configurations.mappings.get().map(::zipTree) - } inputs.property("archives_base_name", archivesBaseName) inputs.property("mod_version", modVersion) inputs.property("maven_group", mavenGroup) - inputs.files(mappingFiles).withPropertyName("mappingFiles") manifest { attributes["Main-Class"] = "net.ccbluex.liquidbounce.LiquidInstruction" @@ -398,10 +389,6 @@ tasks.jar { "${it}_${archivesBaseName.get()}" } } - - from(files(mappingFiles.get())) { - include("mappings/mappings.tiny") - } } tasks.register("copyZipInclude") { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6e874930f53..3198b06ac87 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,14 +6,14 @@ jdk = "24" # Fabric Properties # Check these on https://fabricmc.net/versions.html # https://mods.upcraft.dev/dev/versions -minecraft = "1.21.11" +minecraft = "26.1-snapshot-1" fabric-loom = "1.14-SNAPSHOT" -fabric-loader = "0.18.3" +fabric-loader = "0.18.4" fabric-loaderMin = "0.16.14" -fabric-api = "0.140.0+1.21.11" +fabric-api = "0.140.2+26.1" # mcef -mcef = "3.1.6-1.21.11" +mcef = "0.0.0-26.1" # mc-authlib mc_authlib = "1.6.0" # Polyglot @@ -30,7 +30,7 @@ ahocorasick = "0.6.3" fastutil4k = "0.2.2" # Recommended mods -modmenu = "17.0.0-beta.1" +modmenu = "18.0.0-alpha.2" exploit_preventer_api = "0.0.1" exploit_preventer_mod = "0.1.7" sodium = "mc1.21.11-0.8.1-fabric" @@ -70,7 +70,8 @@ netty-handler-proxy = { group = "io.netty", name = "netty-handler-proxy", versio okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } okhttp-coroutines = { group = "com.squareup.okhttp3", name = "okhttp-coroutines", version.ref = "okhttp" } mcAuthlib = { group = "net.ccbluex", name = "mc-authlib", version.ref = "mc_authlib" } -mcef = { group = "com.github.CCBlueX", name = "mcef", version.ref = "mcef" } +# TODO(version/26.1): switch back to CCBlueX mcef +mcef = { group = "com.github.6x68", name = "mcef", version.ref = "mcef" } httpServer = { group = "net.ccbluex", name = "netty-httpserver", version.ref = "httpServer" } discordIpc = { group = "com.github.CCBlueX", name = "DiscordIPC", version.ref = "discordIpc" } semver4j = { group = "com.vdurmont", name = "semver4j", version.ref = "semver4j" } @@ -99,7 +100,7 @@ immediatelyFast = { group = "maven.modrinth", name = "ImmediatelyFast", version. iris = { group = "maven.modrinth", name = "iris", version.ref = "iris" } [plugins] -fabric-loom = { id = "fabric-loom", version.ref = "fabric-loom" } +fabric-loom = { id = "net.fabricmc.fabric-loom", version.ref = "fabric-loom" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } gradleGitProperties = { id = "com.gorylenko.gradle-git-properties", version.ref = "gradleGitProperties" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassDesc.java b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassDesc.java deleted file mode 100644 index fcd393da591..00000000000 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassDesc.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) - * - * Copyright (c) 2015 - 2025 CCBlueX - * - * LiquidBounce 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. - * - * LiquidBounce 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 LiquidBounce. If not, see . - */ - -package net.ccbluex.liquidbounce.injection.mixins.truffle; - -import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; -import kotlin.Lazy; -import kotlin.LazyKt; -import net.ccbluex.liquidbounce.interfaces.MemberRetriever; -import net.ccbluex.liquidbounce.utils.client.ClientUtilsKt; -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.lang.reflect.Executable; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Member; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.function.BiFunction; - -@Pseudo -@Mixin(targets = "com/oracle/truffle/host/HostClassDesc$Members") -public abstract class MixinHostClassDesc { - - @Unique - @SuppressWarnings("unchecked") - private static final Lazy> mergeMethod = LazyKt.lazy(() -> { - try { - var clazz = Class.forName("com.oracle.truffle.host.HostClassDesc$Members"); - var field = clazz.getDeclaredField("MERGE"); - return (BiFunction) field.get(null); - } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - }); - - @Shadow(remap = false) - @Final - Map methods; - - @Shadow(remap = false) - @Final - Map fields; - - @Shadow(remap = false) - @Final - Map staticFields; - - @Shadow(remap = false) - @Final - Map staticMethods; - - @Inject(method = "", at = @At("RETURN"), remap = false) - private void remapClassDesc(CallbackInfo ci) { - remapFieldEntries(fields, MixinHostClassDesc::getField); - remapFieldEntries(staticFields, MixinHostClassDesc::getField); - - remapMethodEntries(methods); - remapMethodEntries(staticMethods); - } - - @Unique - private static Object[] getOverloadsFromHostMethodDesc(Object value) throws - IllegalAccessException, InvocationTargetException, NoSuchMethodException { - var clazz = value.getClass(); - var getOverloads = clazz.getMethod("getOverloads"); - getOverloads.setAccessible(true); - return (Object[]) getOverloads.invoke(value); - } - - @Unique - private static @Nullable Executable getReflectionMethodFromSingleMethod(Object value) - throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { - var clazz = value.getClass(); - if (NOT_MAPPED.contains(clazz.getName())) { - return null; - } - var descMethod = clazz.getDeclaredMethod("getReflectionMethod"); - descMethod.setAccessible(true); - return (Executable) descMethod.invoke(value); - } - - @Unique - private static void remapMethodEntries(Map map) { - if (map.isEmpty()) { - return; - } - - var iterator = Object2ObjectMaps.fastIterator(new Object2ObjectArrayMap<>(map)); - - while (iterator.hasNext()) { - var entry = iterator.next(); - var key = entry.getKey(); - var value = entry.getValue(); - try { - // Get all overload methods - for (var overload : getOverloadsFromHostMethodDesc(value)) { - var method = getReflectionMethodFromSingleMethod(overload); - var remappedName = remapDescriptor(method); - - if (remappedName == null) { - continue; - } - - map.remove(key); - map.compute( - remappedName, - (remappedName1, oldValue) -> oldValue == null ? value : mergeMethod.getValue().apply(oldValue, value) - ); - } - } catch (Exception e) { - ClientUtilsKt.getLogger().error("Failed to remap method: {}", key, e); - } - } - } - - @Unique - private static void remapFieldEntries(Map map, MemberRetriever retriever) { - if (map.isEmpty()) { - return; - } - - var remappedEntries = new HashMap(); - var iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - var entry = iterator.next(); - var key = entry.getKey(); - var value = entry.getValue(); - try { - var member = retriever.getMember(value); - var remapped = remapDescriptor(member); - if (remapped != null) { - iterator.remove(); - remappedEntries.put(remapped, value); - } - } catch (ReflectiveOperationException e) { - ClientUtilsKt.getLogger().error("Failed to remap field: {}", key, e); - } - } - map.putAll(remappedEntries); - } - - /** - * Skip synthetic array field/method with singleton check - */ - @Unique - private static final Set NOT_MAPPED = Set.of( - "com.oracle.truffle.host.HostFieldDesc$SyntheticArrayLengthField", - "com.oracle.truffle.host.HostMethodDesc$SingleMethod$SyntheticArrayCloneMethod" - ); - - @Unique - private static @Nullable Member getField(Object o) throws IllegalAccessException, NoSuchFieldException { - var clazz = o.getClass(); - if (NOT_MAPPED.contains(clazz.getName())) { - return null; - } - var descField = clazz.getDeclaredField("field"); - descField.setAccessible(true); - return (Member) descField.get(o); - } - - @Unique - private static @Nullable String remapDescriptor(@Nullable Member member) { - if (member == null) { - return null; - } - - var name = member.getName(); - var owner = member.getDeclaringClass(); - var remapped = switch (member) { - case Method ignored -> EnvironmentRemapper.INSTANCE.remapMethod(owner, name); - case Field ignored -> EnvironmentRemapper.INSTANCE.remapField(owner, name); - default -> null; - }; - - if (remapped == null) { - ClientUtilsKt.getLogger().error("Unknown member type {} of class {}", member.getClass().getName(), owner.getName()); - } - - // If the name is the same, return the original field - if (name.equals(remapped)) { - return null; - } - -// ClientUtilsKt.getLogger().debug("Remapped descriptor: {} in {} to {}", name, member.getDeclaringClass().getName(), remapped); - return remapped; - } - -} diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostContext.java b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostContext.java deleted file mode 100644 index 5e45442c739..00000000000 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostContext.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) - * - * Copyright (c) 2015 - 2025 CCBlueX - * - * LiquidBounce 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. - * - * LiquidBounce 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 LiquidBounce. If not, see . - * - * - */ - -package net.ccbluex.liquidbounce.injection.mixins.truffle; - -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Pseudo -@Mixin(targets = "com/oracle/truffle/host/HostContext", remap = false) -public class MixinHostContext { - - @ModifyVariable(method = "findClassImpl", at = @At("HEAD"), argsOnly = true, remap = false) - private String remapClassName(String value) { - return EnvironmentRemapper.INSTANCE.remapClassName(value); - } - -} diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/LiquidBounce.kt b/src/main/kotlin/net/ccbluex/liquidbounce/LiquidBounce.kt index 28e5c58d4c9..5bab94c5a13 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/LiquidBounce.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/LiquidBounce.kt @@ -89,7 +89,6 @@ import net.ccbluex.liquidbounce.utils.inventory.EnderChestInventoryTracker import net.ccbluex.liquidbounce.utils.inventory.InventoryManager import net.ccbluex.liquidbounce.utils.kotlin.EventPriorityConvention.FIRST_PRIORITY import net.ccbluex.liquidbounce.utils.kotlin.Minecraft -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper import net.ccbluex.liquidbounce.utils.render.WorldToScreen import net.minecraft.server.packs.resources.ReloadableResourceManager import net.minecraft.server.packs.resources.PreparableReloadListener @@ -252,7 +251,6 @@ object LiquidBounce : EventListener { ) = withContext(renderThreadDispatcher) { // Script system val scriptEngineJob = launch(workerDispatcher) { - EnvironmentRemapper runCatching(ScriptManager::initializeEngine).onFailure { error -> logger.error("[ScriptAPI] Failed to initialize script engine.", error) } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/config/gson/serializer/minecraft/ScreenSerializer.kt b/src/main/kotlin/net/ccbluex/liquidbounce/config/gson/serializer/minecraft/ScreenSerializer.kt index fcdfdf3e551..89e3564115f 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/config/gson/serializer/minecraft/ScreenSerializer.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/config/gson/serializer/minecraft/ScreenSerializer.kt @@ -22,14 +22,13 @@ package net.ccbluex.liquidbounce.config.gson.serializer.minecraft import com.google.gson.JsonObject import com.google.gson.JsonSerializationContext import com.google.gson.JsonSerializer -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper import net.minecraft.client.gui.screens.Screen import java.lang.reflect.Type object ScreenSerializer : JsonSerializer { override fun serialize(src: Screen?, typeOfSrc: Type, context: JsonSerializationContext) = src?.let { JsonObject().apply { - addProperty("class", EnvironmentRemapper.remapClass(it::class.java)) + addProperty("class", it::class.java.name) addProperty("title", it.title.string) } } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModulePacketLogger.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModulePacketLogger.kt index 2ab7cbfe0eb..7378b1e777f 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModulePacketLogger.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModulePacketLogger.kt @@ -44,7 +44,7 @@ import net.ccbluex.liquidbounce.utils.collection.Filter import net.ccbluex.liquidbounce.utils.kotlin.EventPriorityConvention import net.ccbluex.liquidbounce.utils.kotlin.isNotRoot import net.ccbluex.liquidbounce.utils.kotlin.toFullString -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper +import net.ccbluex.liquidbounce.utils.mappings.toDotNotation import net.minecraft.network.protocol.Packet import net.minecraft.network.chat.MutableComponent import net.minecraft.ChatFormatting @@ -133,8 +133,7 @@ object ModulePacketLogger : ClientModule("PacketLogger", Category.MISC) { override fun handle(origin: TransferOrigin, packet: Packet<*>, canceled: Boolean, packetId: Identifier) { val clazz = packet.javaClass - val packetClassName = classNames.computeIfAbsent(clazz, EnvironmentRemapper::remapClass) - .substringAfterLast('.') + val packetClassName = clazz.name.substringAfterLast('.') val text = "".asText() if (origin == TransferOrigin.INCOMING) { @@ -175,7 +174,7 @@ object ModulePacketLogger : ClientModule("PacketLogger", Category.MISC) { val clazz = packet.javaClass - val packetClassName = classNames.computeIfAbsent(clazz, EnvironmentRemapper::remapClass) + val packetClassName = clazz.name .substringAfterLast('.') file.appendingSink().buffer().use { @@ -224,9 +223,7 @@ object ModulePacketLogger : ClientModule("PacketLogger", Category.MISC) { field.isAccessible = true - val name = fieldNames.computeIfAbsent(field) { - EnvironmentRemapper.remapField(currentClass!!.name, field.name) - } + val name = field.name val value = try { field.get(packet)?.toString() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/ScriptReflectionUtil.kt b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/ScriptReflectionUtil.kt index 4529513a682..5fd19e7c850 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/ScriptReflectionUtil.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/ScriptReflectionUtil.kt @@ -19,7 +19,7 @@ package net.ccbluex.liquidbounce.script.bindings.api import net.ccbluex.fastutil.mapToArray -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper +import net.ccbluex.liquidbounce.utils.mappings.toDotNotation import java.lang.reflect.Field import java.lang.reflect.Method import java.util.concurrent.ConcurrentHashMap @@ -44,9 +44,7 @@ class ScriptReflectionUtil { @JvmName("classByName") - fun classByName(name: String): Class<*> = Class.forName( - EnvironmentRemapper.remapClassName(name).replace('/', '.') - ) + fun classByName(name: String): Class<*> = Class.forName(name.toDotNotation()) @JvmName("newInstance") fun newInstance(clazz: Class<*>, vararg args: Any?): Any? = @@ -56,7 +54,7 @@ class ScriptReflectionUtil { @JvmName("newInstanceByName") fun newInstanceByName(name: String, vararg args: Any?): Any? = - Class.forName(EnvironmentRemapper.remapClassName(name).replace('/', '.')) + Class.forName(name.toDotNotation()) .getDeclaredConstructor(*args.mapToArray { it!!::class.java }).apply { isAccessible = true }.newInstance(*args) @@ -80,7 +78,7 @@ class ScriptReflectionUtil { return fieldCache.computeIfAbsent(Pair(obj::class.java, name)) { obj::class.java.fields .find { field -> - name == EnvironmentRemapper.remapField(obj::class.java, field.name) + name == field.name }?.apply { isAccessible = true } ?: throw NoSuchFieldException("Field '$name' not found in ${obj::class.java.name}") @@ -100,7 +98,7 @@ class ScriptReflectionUtil { return fieldCache.computeIfAbsent(Pair(clazz, name)) { clazz.declaredFields .find { field -> - name == EnvironmentRemapper.remapField(clazz, field.name) + name == field.name }?.apply { isAccessible = true } ?: throw NoSuchFieldException("Field '$name' not found in ${clazz.name}") @@ -175,7 +173,7 @@ class ScriptReflectionUtil { if (args.any { it == null }) { throw IllegalArgumentException( "Null argument is not support by this api, please use " + - "reflection api with EnvironmentRemapper manually" + "reflection API" ) } @@ -198,7 +196,7 @@ class ScriptReflectionUtil { // Find and return the matching method potentialMatches.find { method -> - EnvironmentRemapper.remapMethod(clazz, method.name) == name + method.name == name }?.apply { isAccessible = true } ?: throw NoSuchMethodException("Could not find method $name with matching argument types") diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/kotlin/ReflectionUtils.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/kotlin/ReflectionUtils.kt index df2809a1278..04685f85391 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/kotlin/ReflectionUtils.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/kotlin/ReflectionUtils.kt @@ -19,7 +19,7 @@ package net.ccbluex.liquidbounce.utils.kotlin -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper +import net.ccbluex.liquidbounce.utils.mappings.toDotNotation import java.lang.reflect.AnnotatedType import java.lang.reflect.GenericArrayType import java.lang.reflect.ParameterizedType @@ -67,6 +67,6 @@ fun Type.toFullString(): String = } is GenericArrayType -> "${genericComponentType.toFullString()}[]" - is Class<*> -> EnvironmentRemapper.remapClass(this).substringAfterLast('.') + is Class<*> -> this.name.toDotNotation().substringAfterLast('.') else -> this.toString() } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/mappings/EnvironmentRemapper.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/mappings/EnvironmentRemapper.kt deleted file mode 100644 index e2870ee8812..00000000000 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/mappings/EnvironmentRemapper.kt +++ /dev/null @@ -1,150 +0,0 @@ -/* - * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) - * - * Copyright (c) 2015 - 2025 CCBlueX - * - * LiquidBounce 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. - * - * LiquidBounce 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 LiquidBounce. If not, see . - * - */ - -package net.ccbluex.liquidbounce.utils.mappings - -import net.ccbluex.liquidbounce.utils.client.logger -import net.ccbluex.liquidbounce.utils.io.resource -import net.fabricmc.mappings.model.V2MappingsProvider - -@Deprecated( - "Since Minecraft 26.1 the source of game will no longer be obfuscated. This remapper is no longer needed." -) -object EnvironmentRemapper { - - private val mappings = runCatching { - resource("/mappings/mappings.tiny").bufferedReader().use { - V2MappingsProvider.readTinyMappings(it) - } - }.onFailure { - logger.error("Unable to load mappings. Ignore this if you are using a development environment.", it) - }.getOrNull() - - private val environment = runCatching { - probeEnvironment() - }.onFailure { - logger.error("Unable to probe environment. Please make sure you are using a valid environment.", it) - }.getOrNull() - - private fun probeEnvironment(): String? { - val mappings = mappings ?: return null - - val minecraftClassEntry = mappings.classEntries?.find { entry -> - entry?.get("named") == "net/minecraft/client/Minecraft" - } - - if (minecraftClassEntry == null) { - logger.error("Unable to probe environment. Please make sure you are using a valid environment.") - return null - } - - logger.info("Probing environment...") - return when { - isClassPresent(minecraftClassEntry.get("intermediary")?.toDotNotation()) -> { - logger.info("Intermediary environment detected.") - "intermediary" - } - else -> { - logger.error("No matching environment detected. Please make sure you are using a valid environment.") - null - } - } - } - - private fun isClassPresent(className: String?): Boolean { - return try { - Class.forName(className) - true - } catch (_: ClassNotFoundException) { - false - } - } - - fun remapClassName(clazz: String): String { - environment ?: return clazz - - val className = clazz.toSlashNotation() - return mappings?.classEntries?.find { - it?.get("named") == className - }?.get(environment)?.toDotNotation() ?: clazz - } - - fun remapClass(clazz: Class<*>): String { - environment ?: return clazz.name - - val className = clazz.name.toSlashNotation() - return mappings?.classEntries?.find { - it?.get(environment) == className - }?.get("named")?.toDotNotation() ?: clazz.name - } - - fun remapField(clazz: Class<*>, name: String): String { - environment ?: return name - - val clazzNames = getClassHierarchyNames(clazz) - - return mappings?.fieldEntries?.find { entry -> - val intern = entry.get(environment) - clazzNames.contains(intern.owner) && intern.name == name - }?.get("named")?.name ?: name - } - - fun remapField(clazz: String, name: String): String { - environment ?: return name - - val className = clazz.toSlashNotation() - return mappings?.fieldEntries?.find { entry -> - val intern = entry.get(environment) - className == intern.owner && intern.name == name - }?.get("named")?.name ?: name - } - - fun remapMethod(clazz: Class<*>, name: String): String { - environment ?: return name - - val clazzNames = getClassHierarchyNames(clazz) - - return mappings?.methodEntries?.find { entry -> - val intern = entry.get(environment) - clazzNames.contains(intern.owner) && intern.name == name - }?.get("named")?.name ?: name - } - - private fun getClassHierarchyNames(clazz: Class<*>): Set { - val clazzNames = mutableSetOf(clazz.name.toSlashNotation()) - var current = clazz - - current.interfaces.forEach { interfaceClazz -> - clazzNames.addAll(getClassHierarchyNames(interfaceClazz)) - } - - while (current.name != "java.lang.Object") { - current = current.superclass ?: break - clazzNames.addAll(getClassHierarchyNames(current)) - } - - return clazzNames - } - - private fun String.toDotNotation(): String = replace('/', '.') - - private fun String.toSlashNotation(): String = replace('.', '/') - -} diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassLoader.java b/src/main/kotlin/net/ccbluex/liquidbounce/utils/mappings/NotationExtensions.kt similarity index 54% rename from src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassLoader.java rename to src/main/kotlin/net/ccbluex/liquidbounce/utils/mappings/NotationExtensions.kt index b3f9b678b69..e5578f720e3 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/truffle/MixinHostClassLoader.java +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/mappings/NotationExtensions.kt @@ -17,21 +17,9 @@ * along with LiquidBounce. If not, see . */ -package net.ccbluex.liquidbounce.injection.mixins.truffle; +package net.ccbluex.liquidbounce.utils.mappings -import net.ccbluex.liquidbounce.utils.mappings.EnvironmentRemapper; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -@Pseudo -@Mixin(targets = "com/oracle/truffle/host/HostClassLoader", remap = false) -public class MixinHostClassLoader { +fun String.toDotNotation(): String = replace('/', '.') - @ModifyVariable(method = "findClass", at = @At("HEAD"), argsOnly = true, remap = false) - private String remapClassName(String value) { - return EnvironmentRemapper.INSTANCE.remapClassName(value); - } - -} +fun String.toSlashNotation(): String = replace('.', '/') diff --git a/src/main/resources/liquidbounce.accesswidener b/src/main/resources/liquidbounce.accesswidener index d00784e17a9..52567677b6f 100644 --- a/src/main/resources/liquidbounce.accesswidener +++ b/src/main/resources/liquidbounce.accesswidener @@ -1,4 +1,4 @@ -accessWidener v1 named +accessWidener v1 official accessible field net/minecraft/world/entity/AreaEffectCloud potionContents Lnet/minecraft/world/item/alchemy/PotionContents; accessible field net/minecraft/client/Minecraft user Lnet/minecraft/client/User; From a545a41f00e2fe4ec066b2b4f0e12ce6a754eeb0 Mon Sep 17 00:00:00 2001 From: bab Date: Wed, 24 Dec 2025 17:08:16 -0600 Subject: [PATCH 3/5] chore: catgpt cooked but now idk cat --- build.gradle.kts | 12 ++++-------- gradle/libs.versions.toml | 6 +++--- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 93a1224ffae..2613996e709 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,7 +39,7 @@ base { } /** Includes non-mod dependency recursively in the JAR file */ -val includeDependency: Configuration by configurations.creating +val includeDependency: Configuration by configurations.creating(Configuration::excludeProvidedLibs) /** Includes native-only dependency in the JAR file */ val includeNative: Configuration by configurations.creating @@ -174,14 +174,10 @@ dependencies { // testImplementation(libs.fabric.loader.junit) testRuntimeOnly("org.junit.platform:junit-platform-launcher") - afterEvaluate { - includeDependency.incoming.resolutionResult.allDependencies.forEach { - val apiDependency = dependencies.api(it.requested.toString()) { - isTransitive = false - } + includeDependency.dependencies.forEach { dep -> + include(dep) - dependencies.include(apiDependency) - } + dependencies.api(dep.toString()) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3198b06ac87..7279979b4c5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] # Minecraft 1.21.1 upwards uses Java 21 # 26.1 upwards uses Java 25 -jdk = "24" +jdk = "25" # Fabric Properties # Check these on https://fabricmc.net/versions.html @@ -42,11 +42,11 @@ iris = "1.10.3+1.21.11-fabric" # Kotlin # https://kotlinlang.org/releases.html -kotlin = "2.2.10" +kotlin = "2.3.0" # https://central.sonatype.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-test/overview kotlinx-coroutines = "1.10.2" # https://maven.fabricmc.net/net/fabricmc/fabric-language-kotlin/ -fabric-kotlin = "1.13.5+kotlin.2.2.10" +fabric-kotlin = "1.13.8+kotlin.2.3.0" # Netty, should be sync with game version # https://mvnrepository.com/artifact/io.netty/netty-all From b0c218f70322a5a9cb0e688b069535ac43670eba Mon Sep 17 00:00:00 2001 From: bab Date: Wed, 24 Dec 2025 17:09:16 -0600 Subject: [PATCH 4/5] idk anymore --- build.gradle.kts | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2613996e709..37797f4a9b6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -44,8 +44,6 @@ val includeDependency: Configuration by configurations.creating(Configuration::e /** Includes native-only dependency in the JAR file */ val includeNative: Configuration by configurations.creating -includeDependency.excludeProvidedLibs() - configurations { include.configure { extendsFrom(includeNative) From fac39059b274ff46d73bc52d7c9739aacf030d40 Mon Sep 17 00:00:00 2001 From: bab Date: Wed, 24 Dec 2025 18:24:16 -0600 Subject: [PATCH 5/5] ok now I have to wait for kotlin to fix the jspecify issue and then update --- build.gradle.kts | 22 +++++++++++-------- gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- .../gui/MixinAbstractContainerScreen.java | 8 +++---- .../combat/backtrack/ModuleBacktrack.kt | 8 +++---- .../exploits/PaperWindow1201Exploit.kt | 4 ++-- .../module/modules/misc/ModuleItemScroller.kt | 6 ++--- .../reporthelper/ReportHelperAutoConfirm.kt | 10 ++++----- .../modules/player/autoshop/ModuleAutoShop.kt | 14 ++++++------ .../utils/entity/SimulatedPlayer.kt | 2 +- .../utils/inventory/InventoryAction.kt | 18 +++++++-------- .../utils/inventory/InventoryManager.kt | 4 ++-- src/main/resources/liquidbounce.accesswidener | 2 +- 13 files changed, 53 insertions(+), 49 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 37797f4a9b6..59fdfe38a24 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -107,34 +107,38 @@ loom { dependencies { // Minecraft minecraft(libs.minecraft) + loom.noIntermediateMappings() + mappings(loom.layered { + parchment("org.parchmentmc.data:parchment-1.21.11:BLEEDING-20251220.145140-1@zip") + }) // Fabric - api(libs.fabric.loader) - api(libs.fabric.api) - api(libs.fabric.kotlin) + modApi(libs.fabric.loader) + modApi(libs.fabric.api) + modApi(libs.fabric.kotlin) // Mod menu - api(libs.modmenu) + modApi(libs.modmenu) // Recommended mods (on IDE) -// api(libs.sodium) -// api(libs.lithium) +// modApi(libs.sodium) +// modApi(libs.lithium) // modRuntimeOnly(libs.immediatelyFast) // modRuntimeOnly(libs.iris) // ViaFabricPlus - api(libs.vfp.api) + modApi(libs.vfp.api) // runtimeOnly(libs.vfp) // Exploit Preventer - api(libs.exploitPreventer.api) + modApi(libs.exploitPreventer.api) // runtimeOnly(libs.exploitPreventer) // Minecraft Authlib includeDependency(libs.mcAuthlib) // JCEF Support - api(libs.mcef) + modApi(libs.mcef) include(libs.mcef) includeDependency(libs.httpServer) diff --git a/gradle.properties b/gradle.properties index ebb24c19ecf..7b5931197fc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,7 +28,7 @@ org.gradle.caching=true org.gradle.configureondemand=true #org.gradle.configuration-cache=true # ZGC from JDK 21 -org.gradle.jvmargs=-Xms1024m -Xmx4096m -XX:+UseZGC -XX:+ZGenerational +org.gradle.jvmargs=-Xms1024m -Xmx4096m -XX:+UseZGC -XX:+ZGenerational --add-modules java.base --add-modules jdk.zipfs --add-opens java.base/java.nio.file=ALL-UNNAMED org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7279979b4c5..22b27f9cbf6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -100,7 +100,7 @@ immediatelyFast = { group = "maven.modrinth", name = "ImmediatelyFast", version. iris = { group = "maven.modrinth", name = "iris", version.ref = "iris" } [plugins] -fabric-loom = { id = "net.fabricmc.fabric-loom", version.ref = "fabric-loom" } +fabric-loom = { id = "net.fabricmc.fabric-loom-remap", version.ref = "fabric-loom" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } gradleGitProperties = { id = "com.gorylenko.gradle-git-properties", version.ref = "gradleGitProperties" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/gui/MixinAbstractContainerScreen.java b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/gui/MixinAbstractContainerScreen.java index 4f26033aa66..c39598f9ad9 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/gui/MixinAbstractContainerScreen.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/gui/MixinAbstractContainerScreen.java @@ -34,7 +34,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.Slot; -import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.ContainerInput; import net.minecraft.util.Util; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; @@ -62,7 +62,7 @@ public abstract class MixinAbstractContainerScreen) (Object) this instanceof InventoryScreen && inventoryMove.getRunning() && inventoryMove.getDoNotAllowClicking()) { ci.cancel(); diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/backtrack/ModuleBacktrack.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/backtrack/ModuleBacktrack.kt index 5017f50024c..870365ccccf 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/backtrack/ModuleBacktrack.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/backtrack/ModuleBacktrack.kt @@ -45,7 +45,6 @@ import net.ccbluex.liquidbounce.utils.entity.boxedDistanceTo import net.ccbluex.liquidbounce.utils.entity.squareBoxedDistanceTo import net.ccbluex.liquidbounce.utils.entity.squaredBoxedDistanceTo import net.ccbluex.liquidbounce.utils.render.WireframePlayer -import net.minecraft.client.renderer.LightTexture import net.minecraft.world.entity.Entity import net.minecraft.world.entity.LivingEntity import net.minecraft.network.protocol.game.VecDeltaCodec @@ -61,6 +60,7 @@ import net.minecraft.network.protocol.game.ClientboundSetHealthPacket import net.minecraft.network.protocol.game.ClientboundSoundPacket import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket import net.minecraft.sounds.SoundEvents +import net.minecraft.util.LightCoordsUtil import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 @@ -222,9 +222,9 @@ object ModuleBacktrack : ClientModule("Backtrack", Category.COMBAT) { val rs = entityRenderer.createRenderState(entity, event.partialTicks) - val originalBlockLight = LightTexture.block(rs.lightCoords) - val originalSkyLight = LightTexture.sky(rs.lightCoords) - rs.lightCoords = LightTexture.pack( + val originalBlockLight = LightCoordsUtil.block(rs.lightCoords) + val originalSkyLight = LightCoordsUtil.sky(rs.lightCoords) + rs.lightCoords = LightCoordsUtil.pack( (originalBlockLight * lightAmount).floorToInt(), (originalSkyLight * lightAmount).floorToInt(), ) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/exploit/servercrasher/exploits/PaperWindow1201Exploit.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/exploit/servercrasher/exploits/PaperWindow1201Exploit.kt index ee815e86008..cb02ca3a7d8 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/exploit/servercrasher/exploits/PaperWindow1201Exploit.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/exploit/servercrasher/exploits/PaperWindow1201Exploit.kt @@ -9,7 +9,7 @@ import net.ccbluex.liquidbounce.features.module.modules.exploit.servercrasher.Mo import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.network.protocol.game.ServerboundContainerClickPacket -import net.minecraft.world.inventory.ClickType +import net.minecraft.world.inventory.ContainerInput import net.minecraft.network.HashedStack /** @@ -43,7 +43,7 @@ object PaperWindow1201Exploit : Choice("PaperWindow-1.20.1") { handler.stateId, 36, -1, - ClickType.SWAP, + ContainerInput.SWAP, Int2ObjectMaps.singleton( 0, Items.GOLDEN_CARROT.defaultInstance.toHash(), diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleItemScroller.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleItemScroller.kt index 23d8ac44f99..c1b8110fa3e 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleItemScroller.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/ModuleItemScroller.kt @@ -28,11 +28,11 @@ import com.mojang.blaze3d.platform.InputConstants import com.mojang.blaze3d.platform.Window import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.Slot -import net.minecraft.world.inventory.ClickType +import net.minecraft.world.inventory.ContainerInput import org.lwjgl.glfw.GLFW fun interface MouseClick { - operator fun invoke(callbackSlot: Slot?, slotId: Int, mouseButton: Int, actionType: ClickType) + operator fun invoke(callbackSlot: Slot?, slotId: Int, mouseButton: Int, actionType: ContainerInput) } fun interface ClickAction { @@ -71,6 +71,6 @@ enum class ClickMode( val action: ClickAction ) : NamedChoice { QUICK_MOVE("QuickMove", { _, slot, callback -> - callback(slot, slot.index, GLFW.GLFW_MOUSE_BUTTON_LEFT, ClickType.QUICK_MOVE) + callback(slot, slot.index, GLFW.GLFW_MOUSE_BUTTON_LEFT, ContainerInput.QUICK_MOVE) }) } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/reporthelper/ReportHelperAutoConfirm.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/reporthelper/ReportHelperAutoConfirm.kt index 664825ad5ce..f1b1e7fa20d 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/reporthelper/ReportHelperAutoConfirm.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/misc/reporthelper/ReportHelperAutoConfirm.kt @@ -29,7 +29,7 @@ import net.ccbluex.liquidbounce.utils.inventory.getSlotsInContainer import net.ccbluex.liquidbounce.utils.inventory.syncId import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.world.item.Items -import net.minecraft.world.inventory.ClickType +import net.minecraft.world.inventory.ContainerInput internal object ReportHelperAutoConfirm : ToggleableConfigurable(ModuleReportHelper, "AutoConfirm", false) { @@ -86,11 +86,11 @@ internal object ReportHelperAutoConfirm : ToggleableConfigurable(ModuleReportHel return } - interaction.handleInventoryMouseClick( + interaction.handleContainerInput( screen.syncId, 11, 0, - ClickType.PICKUP, + ContainerInput.PICKUP, player, ) @@ -112,11 +112,11 @@ internal object ReportHelperAutoConfirm : ToggleableConfigurable(ModuleReportHel val diamondSwordId = slots.firstOrNull { it.itemStack.`is`(Items.DIAMOND_SWORD) } ?: return - interaction.handleInventoryMouseClick( + interaction.handleContainerInput( screen.syncId, diamondSwordId.slotInContainer, 0, - ClickType.PICKUP, + ContainerInput.PICKUP, player, ) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoshop/ModuleAutoShop.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoshop/ModuleAutoShop.kt index 86ed09efaf6..5370cef12d1 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoshop/ModuleAutoShop.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/autoshop/ModuleAutoShop.kt @@ -48,7 +48,7 @@ import net.ccbluex.liquidbounce.utils.client.stripMinecraftColorCodes import net.ccbluex.liquidbounce.utils.kotlin.Minecraft import net.ccbluex.liquidbounce.utils.kotlin.subList import net.minecraft.client.gui.screens.inventory.ContainerScreen -import net.minecraft.world.inventory.ClickType +import net.minecraft.world.inventory.ContainerInput import kotlin.math.ceil import kotlin.math.min @@ -164,11 +164,11 @@ object ModuleAutoShop : ClientModule("AutoShop", Category.PLAYER) { } val prevShopStacks = (mc.screen as ContainerScreen).stacks() - interaction.handleInventoryMouseClick( + interaction.handleContainerInput( (mc.screen as ContainerScreen).menu.containerId, nextCategorySlot, 0, - ClickType.PICKUP, + ContainerInput.PICKUP, mc.player!! ) @@ -184,11 +184,11 @@ object ModuleAutoShop : ClientModule("AutoShop", Category.PLAYER) { private suspend fun buyItem(itemSlot: Int, shopElement: ShopElement) { val currentInventory = AutoShopInventoryManager.getInventoryItems() - interaction.handleInventoryMouseClick( + interaction.handleContainerInput( (mc.screen as ContainerScreen).menu.containerId, itemSlot, 0, - ClickType.PICKUP, + ContainerInput.PICKUP, mc.player!! ) @@ -231,11 +231,11 @@ object ModuleAutoShop : ClientModule("AutoShop", Category.PLAYER) { delay(QuickPurchaseMode.delay.random().toLong()) - interaction.handleInventoryMouseClick( + interaction.handleContainerInput( (mc.screen as ContainerScreen).menu.containerId, slot, 0, - ClickType.PICKUP, + ContainerInput.PICKUP, mc.player!! ) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/SimulatedPlayer.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/SimulatedPlayer.kt index d48792a63cf..92dba181e29 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/SimulatedPlayer.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/SimulatedPlayer.kt @@ -755,7 +755,7 @@ class SimulatedPlayer( val fluidState: FluidState = this.player.level().getFluidState(blockPos) val e = (blockPos.y.toFloat() + fluidState.getHeight(this.player.level(), blockPos)).toDouble() if (e > d) { - fluidState.tags.forEach { + fluidState.tags().forEach { submergedFluidTag.add(it) } } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryAction.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryAction.kt index 10164951ce6..e87b5f2d0c9 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryAction.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryAction.kt @@ -25,7 +25,7 @@ import net.ccbluex.liquidbounce.utils.client.player import net.ccbluex.liquidbounce.utils.kotlin.Priority import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen import net.minecraft.world.item.ItemStack -import net.minecraft.world.inventory.ClickType +import net.minecraft.world.inventory.ContainerInput sealed interface InventoryAction { @@ -40,7 +40,7 @@ sealed interface InventoryAction { val screen: AbstractContainerScreen<*>? = null, val slot: ItemSlot, val button: Int, - val actionType: ClickType, + val actionType: ContainerInput, ) : InventoryAction { companion object { @@ -53,7 +53,7 @@ sealed interface InventoryAction { screen, slot = slot, button = 1, - actionType = ClickType.THROW + actionType = ContainerInput.THROW ) @JvmStatic @@ -64,7 +64,7 @@ sealed interface InventoryAction { screen, slot = slot, button = 0, - actionType = ClickType.QUICK_MOVE + actionType = ContainerInput.QUICK_MOVE ) @JvmStatic @@ -76,7 +76,7 @@ sealed interface InventoryAction { screen, slot = from, button = to.hotbarSlotForServer, - actionType = ClickType.SWAP + actionType = ContainerInput.SWAP ) @JvmStatic @@ -87,7 +87,7 @@ sealed interface InventoryAction { screen, slot = slot, button = 0, - actionType = ClickType.PICKUP_ALL + actionType = ContainerInput.PICKUP_ALL ) @JvmStatic @@ -98,7 +98,7 @@ sealed interface InventoryAction { screen, slot = slot, button = 0, - actionType = ClickType.PICKUP + actionType = ContainerInput.PICKUP ) /** @@ -136,7 +136,7 @@ sealed interface InventoryAction { override fun performAction(): Boolean { val slotId = slot.getIdForServer(screen) ?: return false - interaction.handleInventoryMouseClick(screen?.syncId ?: 0, slotId, button, actionType, player) + interaction.handleContainerInput(screen?.syncId ?: 0, slotId, button, actionType, player) InventoryManager.lastClickedSlot = slotId return true @@ -154,7 +154,7 @@ sealed interface InventoryAction { .minByOrNull { slot.distance(it) } ?: return false val slotId = closestEmptySlot.getIdForServer(screen) - interaction.handleInventoryMouseClick(screen.syncId, slotId, 0, ClickType.PICKUP, player) + interaction.handleContainerInput(screen.syncId, slotId, 0, ContainerInput.PICKUP, player) InventoryManager.lastClickedSlot = slotId return true } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryManager.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryManager.kt index a455ffee393..f0b748ba914 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryManager.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/inventory/InventoryManager.kt @@ -46,7 +46,7 @@ import net.minecraft.network.protocol.game.ServerboundContainerClosePacket import net.minecraft.network.protocol.game.ClientboundContainerClosePacket import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket import net.minecraft.core.registries.BuiltInRegistries -import net.minecraft.world.inventory.ClickType +import net.minecraft.world.inventory.ContainerInput import kotlin.math.max import kotlin.random.Random @@ -185,7 +185,7 @@ object InventoryManager : EventListener { // the action is a throw action (you cannot miss-click really when throwing) if (index == 0 && action is InventoryAction.Click && constraints.missChance.random() > Random.nextInt(100) - && action.actionType != ClickType.THROW) { + && action.actionType != ContainerInput.THROW) { // Simulate a miss click (this is only possible for container-type slots) // TODO: Add support for inventory slots if (action.performMissClick()) { diff --git a/src/main/resources/liquidbounce.accesswidener b/src/main/resources/liquidbounce.accesswidener index 52567677b6f..d00784e17a9 100644 --- a/src/main/resources/liquidbounce.accesswidener +++ b/src/main/resources/liquidbounce.accesswidener @@ -1,4 +1,4 @@ -accessWidener v1 official +accessWidener v1 named accessible field net/minecraft/world/entity/AreaEffectCloud potionContents Lnet/minecraft/world/item/alchemy/PotionContents; accessible field net/minecraft/client/Minecraft user Lnet/minecraft/client/User;