From 63da778880cc522a23976c192ff0cce909fbf1f1 Mon Sep 17 00:00:00 2001 From: qingshu-ui Date: Tue, 15 Oct 2024 05:08:22 +0800 Subject: [PATCH] Change DSL to kotlin and fixed AutoEnchant --- build.gradle | 97 ------------- build.gradle.kts | 130 ++++++++++++++++++ gradle.properties | 7 +- settings.gradle | 9 -- settings.gradle.kts | 8 ++ .../anticope/rejects/modules/AutoEnchant.java | 66 +++++---- .../anticope/rejects/modules/CoordLogger.java | 4 +- src/main/resources/fabric.mod.json | 3 +- 8 files changed, 178 insertions(+), 146 deletions(-) delete mode 100644 build.gradle create mode 100644 build.gradle.kts delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 30d2476d..00000000 --- a/build.gradle +++ /dev/null @@ -1,97 +0,0 @@ -plugins { - id 'fabric-loom' version '1.7-SNAPSHOT' -} - -sourceCompatibility = targetCompatibility = JavaVersion.VERSION_21 - -archivesBaseName = project.archives_base_name -version = project.mod_version -group = project.maven_group - -repositories { - mavenCentral() - mavenLocal() - maven { url "https://maven.meteordev.org/releases"} - maven { url "https://maven.meteordev.org/snapshots" } - maven { url "https://maven.seedfinding.com/" } - maven { url "https://maven-snapshots.seedfinding.com/" } - maven { url 'https://jitpack.io' } - maven { url 'https://maven.duti.dev/releases' } -} -configurations { - // configuration that holds jars to include in the jar - extraLibs -} - -dependencies { - // This will make it work on most platforms. It automatically chooses the right dependencies at runtime. - extraLibs('dev.duti.acheong:cubiomes:1.22.3') { transitive = false } - extraLibs('dev.duti.acheong:cubiomes:1.22.3:linux64') { transitive = false } - extraLibs('dev.duti.acheong:cubiomes:1.22.3:osx') { transitive = false } - extraLibs('dev.duti.acheong:cubiomes:1.22.3:windows64') { transitive = false } - // To change the versions see the gradle.properties file - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_version}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - modImplementation("meteordevelopment:meteor-client:${project.meteor_version}-SNAPSHOT") - modCompileOnly "meteordevelopment:baritone:${project.baritone_version}-SNAPSHOT" - - // seed .locate and ore sim - extraLibs('com.seedfinding:mc_math:ffd2edcfcc0d18147549c88cc7d8ec6cf21b5b91') { transitive = false } - extraLibs('com.seedfinding:mc_seed:1ead6fcefe7e8de4b3d60cd6c4e993f1e8f33409') { transitive = false } - extraLibs('com.seedfinding:mc_core:d64d5f90be66300da41ef58f4f1736db2499784f') { transitive = false } - extraLibs('com.seedfinding:mc_noise:7e3ba65e181796c4a2a1c8881d840b2254b92962') { transitive = false } - extraLibs('com.seedfinding:mc_biome:41a42cb9019a552598f12089059538853e18ec78') { transitive = false } - extraLibs('com.seedfinding:mc_terrain:b4246cbd5880c4f8745ccb90e1b102bde3448126') { transitive = false } - extraLibs('com.seedfinding:mc_feature:919b7e513cc1e87e029a9cd703fc4e2dc8686229') { transitive = false } - - // seedcracker api - implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:2.10.1')) {transitive = false} -// implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:master-SNAPSHOT')) {transitive = false} - - configurations.implementation.extendsFrom(configurations.extraLibs) -} - -loom { - accessWidenerPath = file("src/main/resources/meteor-rejects.accesswidener") -} - -processResources { - inputs.property "version", project.version - - - filesMatching("fabric.mod.json") { - expand "version": project.version, - "mc_version": project.minecraft_version, - "gh_hash": (System.getenv("GITHUB_SHA") ?: "") - } -} - -jar { - from("LICENSE") { - rename { "${it}_${project.archivesBaseName}"} - } - from { - configurations.extraLibs.collect { it.isDirectory() ? it : zipTree(it) } - } -} -tasks.withType(Jar) { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE -} - -tasks.withType(JavaCompile).configureEach { - // ensure that the encoding is set to UTF-8, no matter what the system default is - // this fixes some edge cases with special characters not displaying correctly - // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html - // If Javadoc is generated, this must be specified in that task too. - it.options.encoding = "UTF-8" - - // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too - // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. - // We'll use that if it's available, but otherwise we'll use the older option. - def targetVersion = 21 - if (JavaVersion.current().isJava9Compatible()) { - it.options.release = targetVersion - } -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..4c269d1d --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,130 @@ +@file:Suppress("PropertyName") + +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +val minecraft_version: String by project +val yarn_version: String by project +val loader_version: String by project +val meteor_version: String by project +val baritone_version: String by project +val kotlin_loader_version: String by project + +plugins { + kotlin("jvm") version "2.0.21" + id("fabric-loom") version "1.7-SNAPSHOT" +} + +version = project.property("mod_version") as String +group = project.property("maven_group") as String + +base { + archivesName.set(project.property("archives_base_name") as String) +} + +val targetJavaVersion = 21 +java { + toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) + withSourcesJar() +} + +repositories { + mavenCentral() + mavenLocal() + maven { url = uri("https://maven.meteordev.org/releases") } + maven { url = uri("https://maven.meteordev.org/snapshots") } + maven { url = uri("https://maven.seedfinding.com/") } + maven { url = uri("https://maven-snapshots.seedfinding.com/") } + maven { url = uri("https://jitpack.io") } + maven { url = uri("https://maven.duti.dev/releases") } +} +configurations { + // configuration that holds jars to include in the jar + create("extraLibs") +} + +configurations { + named("implementation") { + extendsFrom(getByName("extraLibs")) + } +} + +dependencies { + // This will make it work on most platforms. It automatically chooses the right dependencies at runtime. + "extraLibs"("dev.duti.acheong:cubiomes:1.22.3") { isTransitive = false } + "extraLibs"("dev.duti.acheong:cubiomes:1.22.3:linux64") { isTransitive = false } + "extraLibs"("dev.duti.acheong:cubiomes:1.22.3:osx") { isTransitive = false } + "extraLibs"("dev.duti.acheong:cubiomes:1.22.3:windows64") { isTransitive = false } + // To change the versions see the gradle.properties file + minecraft("com.mojang:minecraft:$minecraft_version") + mappings("net.fabricmc:yarn:$yarn_version:v2") + modImplementation("net.fabricmc:fabric-loader:$loader_version") + modImplementation("net.fabricmc:fabric-language-kotlin:$kotlin_loader_version") + + modImplementation("meteordevelopment:meteor-client:$meteor_version-SNAPSHOT") + modCompileOnly("meteordevelopment:baritone:$baritone_version-SNAPSHOT") + + // seed .locate and ore sim + "extraLibs"("com.seedfinding:mc_math:ffd2edcfcc0d18147549c88cc7d8ec6cf21b5b91") { isTransitive = false } + "extraLibs"("com.seedfinding:mc_seed:1ead6fcefe7e8de4b3d60cd6c4e993f1e8f33409") { isTransitive = false } + "extraLibs"("com.seedfinding:mc_core:d64d5f90be66300da41ef58f4f1736db2499784f") { isTransitive = false } + "extraLibs"("com.seedfinding:mc_noise:7e3ba65e181796c4a2a1c8881d840b2254b92962") { isTransitive = false } + "extraLibs"("com.seedfinding:mc_biome:41a42cb9019a552598f12089059538853e18ec78") { isTransitive = false } + "extraLibs"("com.seedfinding:mc_terrain:b4246cbd5880c4f8745ccb90e1b102bde3448126") { isTransitive = false } + "extraLibs"("com.seedfinding:mc_feature:919b7e513cc1e87e029a9cd703fc4e2dc8686229") { isTransitive = false } + + // seedcracker api + implementation("com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:2.10.1") { isTransitive = false } +// implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:master-SNAPSHOT')) {transitive = false} +} + +loom { + accessWidenerPath = file("src/main/resources/meteor-rejects.accesswidener") +} + +tasks.processResources { + inputs.property("version", project.version) + inputs.property("minecraft_version", project.property("minecraft_version")) + inputs.property("loader_version", project.property("loader_version")) + filteringCharset = "UTF-8" + + + filesMatching("fabric.mod.json") { + expand( + "version" to project.version, + "mc_version" to project.property("minecraft_version"), + "gh_hash" to (System.getenv("GITHUB_SHA") ?: ""), + "kotlin_loader_version" to project.property("kotlin_loader_version"), + ) + } +} + +tasks.jar { + from("LICENSE") { + rename { "${it}_${project.base.archivesName}" } + } + from(configurations["extraLibs"].map { if (it.isDirectory) it else zipTree(it) }) +} + +tasks.withType() { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + +tasks.withType().configureEach { + compilerOptions.jvmTarget.set(JvmTarget.fromTarget(targetJavaVersion.toString())) +} + +tasks.withType().configureEach { + // ensure that the encoding is set to UTF-8, no matter what the system default is + // this fixes some edge cases with special characters not displaying correctly + // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html + // If Javadoc is generated, this must be specified in that task too. + options.encoding = "UTF-8" + + // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too + // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. + // We'll use that if it's available, but otherwise we'll use the older option. + if(JavaVersion.current().isJava9Compatible){ + options.release.set(targetJavaVersion) + } +} diff --git a/gradle.properties b/gradle.properties index 60b3865d..ecfc6106 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,10 +1,11 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx2G +org.gradle.jvmargs=-Xmx4G # Fabric Properties -minecraft_version=1.21 -yarn_version=1.21+build.2 +minecraft_version=1.21.1 +yarn_version=1.21.1+build.3 loader_version=0.15.11 +kotlin_loader_version=1.12.3+kotlin.2.0.21 # Mod Properties mod_version = 0.3 diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index f91a4fe7..00000000 --- a/settings.gradle +++ /dev/null @@ -1,9 +0,0 @@ -pluginManagement { - repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } - gradlePluginPortal() - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..05eb23d1 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + maven("https://maven.fabricmc.net/") { + name = "Fabric" + } + gradlePluginPortal() + } +} diff --git a/src/main/java/anticope/rejects/modules/AutoEnchant.java b/src/main/java/anticope/rejects/modules/AutoEnchant.java index a633bcce..f42f6eb9 100644 --- a/src/main/java/anticope/rejects/modules/AutoEnchant.java +++ b/src/main/java/anticope/rejects/modules/AutoEnchant.java @@ -1,7 +1,6 @@ package anticope.rejects.modules; import anticope.rejects.MeteorRejectsAddon; - import meteordevelopment.meteorclient.events.game.OpenScreenEvent; import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.utils.network.MeteorExecutor; @@ -17,6 +16,9 @@ import java.util.List; import java.util.Objects; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; public class AutoEnchant extends meteordevelopment.meteorclient.systems.modules.Module { @@ -66,47 +68,43 @@ private void onOpenScreen(OpenScreenEvent event) { MeteorExecutor.execute(this::autoEnchant); } - private void autoEnchant() { + private synchronized void autoEnchant() { if (!(Objects.requireNonNull(mc.player).currentScreenHandler instanceof EnchantmentScreenHandler handler)) return; if (mc.player.experienceLevel < 30) { info("You don't have enough experience levels"); return; } - while (getEmptySlotCount(handler) > 2 || drop.get()) { - if (!(mc.player.currentScreenHandler instanceof EnchantmentScreenHandler)) { - info("Enchanting table is closed."); - break; - } - if (handler.getLapisCount() < level.get() && !fillLapisItem()) { - info("Lapis lazuli is not found."); - break; - } - if (!fillCanEnchantItem()) { - info("No items found to enchant."); - break; - } - Objects.requireNonNull(mc.interactionManager).clickButton(handler.syncId, level.get() - 1); - if (getEmptySlotCount(handler) > 2) { - InvUtils.shiftClick().slotId(0); - } else if (drop.get() && handler.getSlot(0).hasStack()) { - // I don't know why an exception LegacyRandomSource is thrown here, - // so I used the main thread to drop items. - mc.execute(() -> InvUtils.drop().slotId(0)); - } - - /* - Although the description here indicates that the tick is the unit, - the actual delay is not the tick unit, - but it does not affect the normal operation in the game. - Perhaps we can ignore it - */ + ScheduledExecutorService executors = Executors.newSingleThreadScheduledExecutor(); + executors.scheduleAtFixedRate(() -> { try { - Thread.sleep(delay.get()); - } catch (InterruptedException e) { - throw new RuntimeException(e); + if (!(mc.player.currentScreenHandler instanceof EnchantmentScreenHandler)) { + info("Enchanting table is closed."); + executors.shutdown(); + return; + } + if (handler.getLapisCount() < level.get() && !fillLapisItem()) { + info("Lapis lazuli is not found."); + executors.shutdown(); + return; + } + if (!fillCanEnchantItem()) { + info("No items found to enchant."); + executors.shutdown(); + return; + } + + Objects.requireNonNull(mc.interactionManager).clickButton(handler.syncId, level.get() - 1); + if (getEmptySlotCount(handler) > 2) { + InvUtils.shiftClick().slotId(0); + } else if (drop.get() && handler.getSlot(0).hasStack()) { + mc.execute(() -> InvUtils.drop().slotId(0)); + } + }catch (Exception e) { + e.printStackTrace(); + executors.shutdown(); } - } + }, 0, delay.get(), TimeUnit.MILLISECONDS); } private boolean fillCanEnchantItem() { diff --git a/src/main/java/anticope/rejects/modules/CoordLogger.java b/src/main/java/anticope/rejects/modules/CoordLogger.java index b2d89cdc..0a05fb87 100644 --- a/src/main/java/anticope/rejects/modules/CoordLogger.java +++ b/src/main/java/anticope/rejects/modules/CoordLogger.java @@ -97,9 +97,9 @@ private void onPacketReceive(PacketEvent.Receive event) { // Teleports if (event.packet instanceof EntityPositionS2CPacket) { EntityPositionS2CPacket packet = (EntityPositionS2CPacket) event.packet; - + try { - Entity entity = mc.world.getEntityById(packet.getId()); + Entity entity = mc.world.getEntityById(packet.getEntityId()); // Player teleport if (entity.getType().equals(EntityType.PLAYER) && players.get()) { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 5b8ab2bb..91d3d5aa 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -38,6 +38,7 @@ "depends": { "java": ">=16", "minecraft": "~${mc_version}", - "meteor-client": "*" + "meteor-client": "*", + "fabric-language-kotlin": ">=${kotlin_loader_version}" } }