aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-06-29 20:47:50 +0800
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-07-17 12:55:24 +0800
commit931ea3749ba94d1b7de4577722246df1a4e9cced (patch)
treed73306cb406cd76732d5c48b80372e17f9208d51 /src
parent57328808e6cd8c2140f5a71b4c2605ac71e1b553 (diff)
downloadSkyblocker-931ea3749ba94d1b7de4577722246df1a4e9cced.tar.gz
Skyblocker-931ea3749ba94d1b7de4577722246df1a4e9cced.tar.bz2
Skyblocker-931ea3749ba94d1b7de4577722246df1a4e9cced.zip
Add shortcuts loading and saving
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java143
1 files changed, 100 insertions, 43 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java
index dcd98e79..f6483e52 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java
@@ -1,24 +1,60 @@
package me.xmrvizzy.skyblocker.skyblock.shortcut;
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
import com.mojang.brigadier.Command;
+import com.mojang.brigadier.CommandDispatcher;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.command.CommandRegistryAccess;
import net.minecraft.text.Text;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.io.*;
+import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.CompletableFuture;
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
public class Shortcuts {
+ private static final Logger LOGGER = LoggerFactory.getLogger(Shortcuts.class);
+ private static final File SHORTCUTS_FILE = SkyblockerMod.CONFIG_DIR.resolve("shortcuts.json").toFile();
+ private static CompletableFuture<Void> shortcutsLoaded;
public static final Map<String, String> commands = new HashMap<>();
public static final Map<String, String> commandArgs = new HashMap<>();
public static void init() {
+ shortcutsLoaded = CompletableFuture.runAsync(Shortcuts::loadShortcuts);
+ ClientLifecycleEvents.CLIENT_STOPPING.register(Shortcuts::saveShortcuts);
+ ClientCommandRegistrationCallback.EVENT.register(Shortcuts::registerCommands);
+ ClientSendMessageEvents.MODIFY_COMMAND.register(Shortcuts::modifyCommand);
+ }
+
+ private static void loadShortcuts() {
+ try (BufferedReader reader = new BufferedReader(new FileReader(SHORTCUTS_FILE))) {
+ Type shortcutsType = new TypeToken<Map<String, Map<String, String>>>() {}.getType();
+ Map<String, Map<String, String>> shortcuts = SkyblockerMod.GSON.fromJson(reader, shortcutsType);
+ commands.putAll(shortcuts.get("commands"));
+ commandArgs.putAll(shortcuts.get("commandArgs"));
+ LOGGER.info("[Skyblocker] Loaded {} command shortcuts and {} command argument shortcuts", commands.size(), commandArgs.size());
+ } catch (FileNotFoundException e) {
+ registerDefaultShortcuts();
+ LOGGER.warn("[Skyblocker] Shortcuts file not found, using default shortcuts. This is normal when using for the first time.", e);
+ } catch (IOException e) {
+ LOGGER.error("[Skyblocker] Failed to load shortcuts file", e);
+ }
+ }
+
+ private static void registerDefaultShortcuts() {
commands.put("/s", "/skyblock");
commands.put("/sk", "/skyblock");
commands.put("/sky", "/skyblock");
@@ -114,53 +150,74 @@ public class Shortcuts {
commandArgs.put("/v", "/visit");
commands.put("/vp", "/visit portalhub");
commands.put("/visit p", "/visit portalhub");
+ }
- ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> {
- for (String key : commands.keySet()) {
- if (key.startsWith("/")) {
- dispatcher.register(literal(key.substring(1)));
- }
+ private static void saveShortcuts(MinecraftClient client) {
+ JsonObject shortcutsJson = new JsonObject();
+ shortcutsJson.add("commands", SkyblockerMod.GSON.toJsonTree(commands));
+ shortcutsJson.add("commandArgs", SkyblockerMod.GSON.toJsonTree(commandArgs));
+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(SHORTCUTS_FILE))) {
+ SkyblockerMod.GSON.toJson(shortcutsJson, writer);
+ LOGGER.info("[Skyblocker] Saved {} command shortcuts and {} command argument shortcuts", commands.size(), commandArgs.size());
+ } catch (IOException e) {
+ LOGGER.error("[Skyblocker] Failed to save shortcuts file", e);
+ }
+ }
+
+ private static void registerCommands(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess registryAccess) {
+ for (String key : commands.keySet()) {
+ if (key.startsWith("/")) {
+ dispatcher.register(literal(key.substring(1)));
}
- for (String key : commandArgs.keySet()) {
- if (key.startsWith("/")) {
- dispatcher.register(literal(key.substring(1)));
- }
+ }
+ for (String key : commandArgs.keySet()) {
+ if (key.startsWith("/")) {
+ dispatcher.register(literal(key.substring(1)));
}
- dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> {
- FabricClientCommandSource source = context.getSource();
- String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
- source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status));
- for (Map.Entry<String, String> command : commands.entrySet()) {
- source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue()));
- }
- status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
- source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status));
- for (Map.Entry<String, String> commandArg : commandArgs.entrySet()) {
- source.sendFeedback(Text.of("§7" + commandArg.getKey() + " §f→ §7" + commandArg.getValue()));
- }
- source.sendFeedback(Text.of("§e§lSkyblocker §fCommands"));
- for (String command : dispatcher.getSmartUsage(dispatcher.getRoot().getChild(SkyblockerMod.NAMESPACE), source).values()) {
- source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command));
- }
- return Command.SINGLE_SUCCESS;
- })));
- });
- ClientSendMessageEvents.MODIFY_COMMAND.register(command -> {
- if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) {
- command = '/' + command;
- if (SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts) {
- command = commands.getOrDefault(command, command);
- }
- if (SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts) {
- String[] messageArgs = command.split(" ");
- for (int i = 0; i < messageArgs.length; i++) {
- messageArgs[i] = commandArgs.getOrDefault(messageArgs[i], messageArgs[i]);
- }
- command = String.join(" ", messageArgs);
+ }
+ dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> {
+ FabricClientCommandSource source = context.getSource();
+ String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
+ source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status));
+ if (!shortcutsLoaded.isDone()) {
+ source.sendFeedback(Text.of("§c§lShortcuts not loaded yet"));
+ } else for (Map.Entry<String, String> command : commands.entrySet()) {
+ source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue()));
+ }
+ status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
+ source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status));
+ if (!shortcutsLoaded.isDone()) {
+ source.sendFeedback(Text.of("§c§lShortcuts not loaded yet"));
+ } else for (Map.Entry<String, String> commandArg : commandArgs.entrySet()) {
+ source.sendFeedback(Text.of("§7" + commandArg.getKey() + " §f→ §7" + commandArg.getValue()));
+ }
+ source.sendFeedback(Text.of("§e§lSkyblocker §fCommands"));
+ for (String command : dispatcher.getSmartUsage(dispatcher.getRoot().getChild(SkyblockerMod.NAMESPACE), source).values()) {
+ source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command));
+ }
+ return Command.SINGLE_SUCCESS;
+ })));
+ }
+
+ private static String modifyCommand(String command) {
+ if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) {
+ if (!shortcutsLoaded.isDone()) {
+ LOGGER.warn("[Skyblocker] Shortcuts not loaded yet, skipping shortcut for command: {}", command);
+ return command;
+ }
+ command = '/' + command;
+ if (SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts) {
+ command = commands.getOrDefault(command, command);
+ }
+ if (SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts) {
+ String[] messageArgs = command.split(" ");
+ for (int i = 0; i < messageArgs.length; i++) {
+ messageArgs[i] = commandArgs.getOrDefault(messageArgs[i], messageArgs[i]);
}
- return command.substring(1);
+ command = String.join(" ", messageArgs);
}
- return command;
- });
+ return command.substring(1);
+ }
+ return command;
}
}