diff --git a/build.gradle.kts b/build.gradle.kts index 523d6b7..8c89e0a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.15-SNAPSHOT" + id("net.fabricmc.fabric-loom") version "1.16-SNAPSHOT" id("com.gradleup.shadow") version "9.3.1" } @@ -24,7 +24,6 @@ loom { repositories { mavenCentral() maven("https://maven.isxander.dev/releases") - maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") exclusiveContent { forRepository { maven { @@ -41,21 +40,18 @@ repositories { dependencies { // To change the versions see the gradle.properties file minecraft("com.mojang:minecraft:${project.property("minecraft_version")}") - mappings(loom.officialMojangMappings()) - modImplementation("net.fabricmc:fabric-loader:${project.property("loader_version")}") + implementation("net.fabricmc:fabric-loader:${project.property("loader_version")}") - modImplementation("net.fabricmc.fabric-api:fabric-api:${project.property("fabric_version")}") + implementation("net.fabricmc.fabric-api:fabric-api:${project.property("fabric_version")}") shadow(implementation("org.mongodb:mongodb-driver-sync:5.6.3")!!) shadow(implementation("net.dv8tion:JDA:6.3.0") { exclude("opus-java") }) - shadow(modImplementation("maven.modrinth:fabric-yaml-configuration:1.0.1")!!) - shadow(implementation("dev.vankka:mcdiscordreserializer:4.3.0")!!) - shadow(modImplementation("net.kyori:adventure-platform-mod-shared-fabric-repack:6.8.0")!!) + shadow(implementation("net.kyori:adventure-platform-mod-shared:6.9.0")!!) shadow(implementation("com.sparkjava:spark-core:2.9.4")!!) - modRuntimeOnly("me.djtheredstoner:DevAuth-fabric:1.2.2") + runtimeOnly("net.litetex.mcm:dev-auth-neo:1.1.0") } tasks.processResources { @@ -80,15 +76,9 @@ tasks { from(sourceSets["main"].output) from(sourceSets["client"].output) configurations = listOf(project.configurations.shadow.get()) - archiveClassifier = "shadowed-only" - // minimize() - } - remapJar { - dependsOn(shadowJar) - mustRunAfter(shadowJar) - inputFile = file(shadowJar.get().archiveFile) archiveClassifier = "" + // minimize() } } -java { toolchain.languageVersion = JavaLanguageVersion.of(21) } +java { toolchain.languageVersion = JavaLanguageVersion.of(25) } diff --git a/gradle.properties b/gradle.properties index 9490e21..46cd0ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx1G org.gradle.configuration-cache=false # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.21.11 -loader_version=0.18.4 +minecraft_version=26.1.2 +loader_version=0.19.2 # Mod Properties -mod_version=2.19.2 +mod_version=2.20.0 maven_group=net.legitimoose archives_base_name=Legitimoose-Bot # Dependencies # check this on https://modmuss50.me/fabric.html -fabric_version=0.141.3+1.21.11 +fabric_version=0.149.1+26.1.2 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 8bdaf60..61285a6 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 19a6bde..5dd3c01 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index ef07e01..adff685 100755 --- a/gradlew +++ b/gradlew @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee..e509b2d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/client/java/net/legitimoose/bot/LegitimooseBotClient.java b/src/client/java/net/legitimoose/bot/LegitimooseBotClient.java index f0c53a9..88c44f4 100644 --- a/src/client/java/net/legitimoose/bot/LegitimooseBotClient.java +++ b/src/client/java/net/legitimoose/bot/LegitimooseBotClient.java @@ -2,8 +2,8 @@ import com.mojang.brigadier.context.CommandContext; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.ClientCommands; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.loader.api.FabricLoader; @@ -97,17 +97,17 @@ private void schedulePeriodicalMessage() { private void registerCommands() { ClientCommandRegistrationCallback.EVENT.register((dispatcher, context) -> { dispatcher.register( - ClientCommandManager.literal("scraper") - .then(ClientCommandManager.literal("reload") + ClientCommands.literal("scraper") + .then(ClientCommands.literal("reload") .executes(LegitimooseBotClient::reloadConfig) ) - .then(ClientCommandManager.literal("on") + .then(ClientCommands.literal("on") .executes((source)->{ Scraper.getInstance().override(false); return 0; }) ) - .then(ClientCommandManager.literal("off") + .then(ClientCommands.literal("off") .executes((source)->{ Scraper.getInstance().override(true); return 0; @@ -119,7 +119,7 @@ private void registerCommands() { private static int reloadConfig(CommandContext context) { try { - CONFIG.reloadConfiguration(); + CONFIG.reload(); } catch (Exception e) { LOGGER.error(e.getMessage()); return 1; @@ -166,7 +166,7 @@ private static void message(String message) { LocalPlayer player = Minecraft.getInstance().player; if (player != null) { - player.displayClientMessage(Component.literal(message), false); + player.sendSystemMessage(Component.literal(message)); } } diff --git a/src/client/java/net/legitimoose/bot/chat/GameChatHandler.java b/src/client/java/net/legitimoose/bot/chat/GameChatHandler.java index 28b3f8a..58cf3a6 100644 --- a/src/client/java/net/legitimoose/bot/chat/GameChatHandler.java +++ b/src/client/java/net/legitimoose/bot/chat/GameChatHandler.java @@ -73,7 +73,7 @@ public void handleChat(Component component) { lastMessages.add(message); if (handleChat) { - DiscordWebhook webhook = new DiscordWebhook(CONFIG.getString("webhook")); + DiscordWebhook webhook = new DiscordWebhook(CONFIG.webhook); handleChat(component, message, webhook); } } @@ -139,7 +139,7 @@ public void handleMsgMessage(MsgMatcher msg) { User user; if (discordReceiverName != null) { String finalUsername = discordReceiverName.replace("@", ""); - user = DiscordBot.jda.getGuildById(CONFIG.getString("guildId")) + user = DiscordBot.jda.getGuildById(CONFIG.guildId) .findMembers(s -> s.getUser().getName().equals(finalUsername)) .get().getFirst().getUser(); } else { @@ -272,7 +272,7 @@ private boolean shouldLogMessage(String senderName, String message) { Minecraft.getInstance().player.getPlainTextName().equals(senderName))) return false; - return !message.startsWith(CONFIG.getString("secretPrefix")); + return !message.startsWith(CONFIG.secretPrefix); } public static GameChatHandler getInstance() { diff --git a/src/client/java/net/legitimoose/bot/discord/DiscordBot.java b/src/client/java/net/legitimoose/bot/discord/DiscordBot.java index ede28b0..9266c0b 100644 --- a/src/client/java/net/legitimoose/bot/discord/DiscordBot.java +++ b/src/client/java/net/legitimoose/bot/discord/DiscordBot.java @@ -44,7 +44,7 @@ public static void run() { new Rejoin(), new Send() ); - jda = JDABuilder.createDefault(CONFIG.getString("token")) + jda = JDABuilder.createDefault(CONFIG.token) .enableIntents(GatewayIntent.MESSAGE_CONTENT, GatewayIntent.GUILD_MEMBERS) .build(); @@ -98,7 +98,7 @@ public static void run() { @Override public void onGuildReady(GuildReadyEvent event) { - if (!event.getGuild().getId().equals(CONFIG.getString("guildId"))) return; + if (!event.getGuild().getId().equals(CONFIG.guildId)) return; event.getGuild() .updateCommands() .addCommands( @@ -119,7 +119,7 @@ public void onGuildReady(GuildReadyEvent event) { public void onMessageReceived(MessageReceivedEvent event) { String discordNick; if (event.isWebhookMessage()) { - if (!event.getAuthor().getId().equals(CONFIG.getString("bridgeWebhookId"))) return; + if (!event.getAuthor().getId().equals(CONFIG.bridgeWebhookId)) return; discordNick = event.getAuthor().getEffectiveName(); } else { discordNick = event.getMember().getEffectiveName(); @@ -131,9 +131,9 @@ public void onMessageReceived(MessageReceivedEvent event) { if (!event.getMessage().getAttachments().isEmpty()) { message += " [Attachment Included]"; } - if (CONFIG.getString("channelId").isEmpty()) + if (CONFIG.channelId.isEmpty()) LOGGER.error("Discord channel ID is not set in config!"); - if (event.getChannel().getId().equals(CONFIG.getString("channelId"))) { + if (event.getChannel().getId().equals(CONFIG.channelId)) { Minecraft.getInstance().player.connection.sendChat(McUtil.sanitizeString(message)); } } diff --git a/src/client/java/net/legitimoose/bot/discord/command/ShoutCommand.java b/src/client/java/net/legitimoose/bot/discord/command/ShoutCommand.java index 0c6355b..d001a60 100644 --- a/src/client/java/net/legitimoose/bot/discord/command/ShoutCommand.java +++ b/src/client/java/net/legitimoose/bot/discord/command/ShoutCommand.java @@ -29,7 +29,7 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { bypassCooldown = false; username = event.getUser().getEffectiveName(); } else { - bypassCooldown = event.getMember().getPermissions().contains(Permission.MANAGE_SERVER) && event.getGuild().getId().equals(CONFIG.getString("guildId")); + bypassCooldown = event.getMember().getPermissions().contains(Permission.MANAGE_SERVER) && event.getGuild().getId().equals(CONFIG.guildId); username = event.getMember().getEffectiveName(); } diff --git a/src/client/java/net/legitimoose/bot/scraper/Database.java b/src/client/java/net/legitimoose/bot/scraper/Database.java index 18473f7..1c0a352 100644 --- a/src/client/java/net/legitimoose/bot/scraper/Database.java +++ b/src/client/java/net/legitimoose/bot/scraper/Database.java @@ -14,7 +14,7 @@ public class Database { private static final String DATABASE_NAME = "legitimooseapi"; private static final MongoClient mongoClient = - MongoClients.create(CONFIG.getString("mongoUri")); + MongoClients.create(CONFIG.mongoUri); private final MongoDatabase database = mongoClient.getDatabase(DATABASE_NAME); diff --git a/src/client/java/net/legitimoose/bot/scraper/Scraper.java b/src/client/java/net/legitimoose/bot/scraper/Scraper.java index d27c09f..133e33d 100644 --- a/src/client/java/net/legitimoose/bot/scraper/Scraper.java +++ b/src/client/java/net/legitimoose/bot/scraper/Scraper.java @@ -16,7 +16,7 @@ import net.minecraft.nbt.Tag; import net.minecraft.network.chat.ComponentSerialization; import net.minecraft.world.Container; -import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.ContainerInput; import net.minecraft.world.item.ItemStack; import org.bson.BsonArray; import org.bson.BsonDateTime; @@ -43,7 +43,7 @@ public class Scraper { private volatile boolean scrapeOverride = false; - private final DiscordWebhook errorWebhook = new DiscordWebhook(CONFIG.getString("errorWebhook")); + private final DiscordWebhook errorWebhook = new DiscordWebhook(CONFIG.errorWebhook); private final Pattern jamScorePattern = Pattern.compile("^CategoryScore\\(rank=(.*), score=(.*)\\)"); private final Pattern ownerNamePattern = Pattern.compile("^by (?:[^|]+\\|\\s*)?(.+)"); @@ -89,7 +89,7 @@ private void error(String message, Exception exception) throws IOException, URIS } public void scrape() { - if (!CONFIG.getBoolean("scrape", true)) return; + if (!CONFIG.scrape) return; Minecraft client = Minecraft.getInstance(); MongoCollection stats = Database.getStats(); stats.createIndex(Indexes.descending("timestamp")); @@ -262,8 +262,8 @@ public void scrape() { LOGGER.info("Scraped page #{}", i); Minecraft.getInstance() .gameMode - .handleInventoryMouseClick( - client.player.containerMenu.containerId, 32, 0, ClickType.PICKUP, client.player + .handleContainerInput( + client.player.containerMenu.containerId, 32, 0, ContainerInput.PICKUP, client.player ); waitSeconds(1); // wait a sec to give legmos time to load } diff --git a/src/main/java/net/legitimoose/bot/Config.java b/src/main/java/net/legitimoose/bot/Config.java new file mode 100644 index 0000000..e96d2f4 --- /dev/null +++ b/src/main/java/net/legitimoose/bot/Config.java @@ -0,0 +1,45 @@ +package net.legitimoose.bot; + +import com.google.gson.Gson; + +import java.io.*; +import java.nio.file.Files; + +public class Config { + public static final Gson gson = new Gson(); + + private transient File file; + + public String token; + public String webhook; + public String errorWebhook; + public boolean scrape; + public String bridgeWebhookId; + public String mongoUri; + public String secretPrefix; + public String channelId; + public String guildId; + + public static Config create(File file, InputStream defaultFile) throws IOException { + if (!file.exists()) { + Files.copy(defaultFile, file.toPath()); + } + Config config = gson.fromJson(new FileReader(file), Config.class); + config.file = file; + return config; + } + + public void reload() throws FileNotFoundException { + Config temp = gson.fromJson(new FileReader(file), Config.class); + + this.token = temp.token; + this.webhook = temp.webhook; + this.errorWebhook = temp.errorWebhook; + this.scrape = temp.scrape; + this.bridgeWebhookId = temp.bridgeWebhookId; + this.mongoUri = temp.mongoUri; + this.secretPrefix = temp.secretPrefix; + this.channelId = temp.channelId; + this.guildId = temp.guildId; + } +} diff --git a/src/main/java/net/legitimoose/bot/LegitimooseBot.java b/src/main/java/net/legitimoose/bot/LegitimooseBot.java index 80f3f2b..e038108 100644 --- a/src/main/java/net/legitimoose/bot/LegitimooseBot.java +++ b/src/main/java/net/legitimoose/bot/LegitimooseBot.java @@ -3,29 +3,22 @@ import net.fabricmc.api.ModInitializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ru.mountcode.libraries.yaml.InvalidConfigurationException; -import ru.mountcode.mods.fabricyamlconfiguration.yaml.FabricConfiguration; +import java.io.File; import java.io.IOException; import java.io.InputStream; public class LegitimooseBot implements ModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger("legitimoose-bot"); - public static final FabricConfiguration CONFIG = new FabricConfiguration(); + public static Config CONFIG; @Override public void onInitialize() { InputStream defaultConfigFile = LegitimooseBot.class.getResourceAsStream("/assets/legitimoose-bot/config/legitimoosebot.yml"); - - CONFIG.setDefault(defaultConfigFile); - CONFIG.setFile("config/legitimoosebot.yml"); - try { - CONFIG.initialize(); + CONFIG = Config.create(new File("config/legitimoosebot.json"), defaultConfigFile); } catch (IOException e) { - LOGGER.error("Configuration file cannot be generated", e); - } catch (InvalidConfigurationException e) { - LOGGER.error("Configuration file cannot be loaded", e); + LOGGER.error("failed to initialize config", e); } } } diff --git a/src/main/resources/assets/legitimoose-bot/config/legitimoosebot.json b/src/main/resources/assets/legitimoose-bot/config/legitimoosebot.json new file mode 100644 index 0000000..b149177 --- /dev/null +++ b/src/main/resources/assets/legitimoose-bot/config/legitimoosebot.json @@ -0,0 +1,11 @@ +{ + "token": "", + "webhook": "", + "errorWebhook": "", + "scrape": true, + "bridgeWebhookId": "1473335695299837992", + "mongoUri": "mongodb://127.0.0.1:27017/", + "secretPrefix": "::", + "channelId": "", + "guildId": "1311574348989071440" +} \ No newline at end of file diff --git a/src/main/resources/assets/legitimoose-bot/config/legitimoosebot.yml b/src/main/resources/assets/legitimoose-bot/config/legitimoosebot.yml deleted file mode 100644 index e7653d5..0000000 --- a/src/main/resources/assets/legitimoose-bot/config/legitimoosebot.yml +++ /dev/null @@ -1,9 +0,0 @@ -token: '' -webhook: '' -errorWebhook: '' -scrape: true -bridgeWebhookId: '1473335695299837992' -mongoUri: 'mongodb://127.0.0.1:27017/' -secretPrefix: '::' -channelId: '' -guildId: '1311574348989071440'