From f98cca9b85e6e9bd7ab25bb70f29991f68fbf20a Mon Sep 17 00:00:00 2001 From: Xiaro <62033805+Xiaro@users.noreply.github.com> Date: Tue, 15 Dec 2020 13:02:42 -0500 Subject: [PATCH] [cleanup] Cleaned up Macro (#1753) --- .../java/me/zeroeightsix/kami/KamiMod.java | 2 - .../kami/command/commands/MacroCommand.kt | 59 ++++++++-------- .../kami/manager/ManagerLoader.kt | 9 +-- .../manager/managers/FileInstanceManager.kt | 35 ---------- .../kami/manager/managers/MacroManager.kt | 64 ++++++++++++++--- .../java/me/zeroeightsix/kami/util/Macro.kt | 70 ------------------- 6 files changed, 84 insertions(+), 155 deletions(-) delete mode 100644 src/main/java/me/zeroeightsix/kami/manager/managers/FileInstanceManager.kt delete mode 100644 src/main/java/me/zeroeightsix/kami/util/Macro.kt diff --git a/src/main/java/me/zeroeightsix/kami/KamiMod.java b/src/main/java/me/zeroeightsix/kami/KamiMod.java index 878f71a40..63f397df0 100644 --- a/src/main/java/me/zeroeightsix/kami/KamiMod.java +++ b/src/main/java/me/zeroeightsix/kami/KamiMod.java @@ -8,7 +8,6 @@ import me.zeroeightsix.kami.event.KamiEventBus; import me.zeroeightsix.kami.gui.kami.KamiGUI; import me.zeroeightsix.kami.gui.mc.KamiGuiUpdateNotification; import me.zeroeightsix.kami.manager.ManagerLoader; -import me.zeroeightsix.kami.manager.managers.FileInstanceManager; import me.zeroeightsix.kami.module.Module; import me.zeroeightsix.kami.module.ModuleManager; import me.zeroeightsix.kami.setting.Setting; @@ -95,7 +94,6 @@ public class KamiMod { guiManager.initializeGUI(); commandManager = new CommandManager(); - FileInstanceManager.fixEmptyFiles(); ConfigUtils.INSTANCE.loadAll(); // After settings loaded, we want to let the enabled modules know they've been enabled (since the setting is done through reflection) diff --git a/src/main/java/me/zeroeightsix/kami/command/commands/MacroCommand.kt b/src/main/java/me/zeroeightsix/kami/command/commands/MacroCommand.kt index 1dcd5ba15..6629413aa 100644 --- a/src/main/java/me/zeroeightsix/kami/command/commands/MacroCommand.kt +++ b/src/main/java/me/zeroeightsix/kami/command/commands/MacroCommand.kt @@ -3,67 +3,64 @@ package me.zeroeightsix.kami.command.commands import me.zeroeightsix.kami.command.Command import me.zeroeightsix.kami.command.syntax.ChunkBuilder import me.zeroeightsix.kami.command.syntax.parsers.EnumParser -import me.zeroeightsix.kami.manager.managers.FileInstanceManager import me.zeroeightsix.kami.manager.managers.MacroManager -import me.zeroeightsix.kami.util.Macro import me.zeroeightsix.kami.util.Wrapper -import me.zeroeightsix.kami.util.text.MessageSendHelper.sendChatMessage -import me.zeroeightsix.kami.util.text.MessageSendHelper.sendErrorMessage -import me.zeroeightsix.kami.util.text.MessageSendHelper.sendRawChatMessage -import me.zeroeightsix.kami.util.text.MessageSendHelper.sendWarningMessage +import me.zeroeightsix.kami.util.text.MessageSendHelper -/** - * @author l1ving - * Created by l1ving on 04/05/20 - */ class MacroCommand : Command("macro", ChunkBuilder().append("command", true, EnumParser(arrayOf("key", "list"))).append("setting", false, EnumParser(arrayOf("clear", "message|command"))).build(), "m") { override fun call(args: Array) { val rKey = args[0] ?: return - val macro = args[1] - val key = Wrapper.getKey(rKey) + val keycode = Wrapper.getKey(rKey) - if (key == 0 && !rKey.equals("list", true)) { - sendErrorMessage("Unknown key '&7$rKey&f'! Left alt is &7lmenu&f, left Control is &7lcontrol&f and ` is &7grave&f. You cannot bind the &7meta&f key.") + if (keycode == 0 && !rKey.equals("list", true)) { + MessageSendHelper.sendErrorMessage("Unknown key '&7$rKey&f'! Left alt is &7lmenu&f, left Control is &7lcontrol&f and ` is &7grave&f. You cannot bind the &7meta&f key.") return } - val keyList: List? = Macro.getMacrosForKey(key) - when { args[0] == null -> { /* key, error message is caught by the command handler but you don't want to continue the rest */ return } + args[0].equals("list", ignoreCase = true) -> { - if (FileInstanceManager.macros.isEmpty()) { - sendChatMessage("You have no macros") - return - } - sendChatMessage("You have the following macros: ") - for ((key1, value) in FileInstanceManager.macros) { - sendRawChatMessage(Wrapper.getKeyName(key1) + ": $value") + if (MacroManager.isEmpty) { + MessageSendHelper.sendChatMessage("You have no macros") + } else { + MessageSendHelper.sendChatMessage("You have the following macros: ") + for ((key, value) in MacroManager.macros) { + MessageSendHelper.sendRawChatMessage(Wrapper.getKeyName(key) + ": $value") + } } } + args[1] == null -> { /* message */ + val keyList = MacroManager.getMacros(keycode) if (keyList == null || keyList.isEmpty()) { - sendChatMessage("'&7$rKey&f' has no macros") + MessageSendHelper.sendChatMessage("'&7$rKey&f' has no macros") return } - sendChatMessage("'&7$rKey&f' has the following macros: ") - Macro.sendMacrosToChat(keyList.toTypedArray()) + val message = "'&7$rKey&f' has the following macros:\n" + + keyList.joinToString("\n") + MessageSendHelper.sendChatMessage(message) } + args[1].equals("clear", ignoreCase = true) -> { - Macro.removeMacro(key) + MacroManager.removeMacro(keycode) MacroManager.saveMacros() MacroManager.loadMacros() - sendChatMessage("Cleared macros for '&7$rKey&f'") + MessageSendHelper.sendChatMessage("Cleared macros for '&7$rKey&f'") } + args[2] != null -> { /* some random 3rd argument which shouldn't exist */ - sendWarningMessage("$chatLabel Your macro / command must be inside quotes, as 1 argument in the command. Example: &7" + getCommandPrefix() + label + " R \";set AutoSpawner debug toggle\"") + MessageSendHelper.sendWarningMessage("$chatLabel Your macro / command must be inside quotes, as 1 argument in the command. Example: &7" + + getCommandPrefix() + label + " R \";set AutoSpawner debug toggle\"") } + else -> { - Macro.addMacroToKey(key, macro) + val macro = args[1]!! + MacroManager.addMacroToKey(keycode, macro) MacroManager.saveMacros() - sendChatMessage("Added macro '&7$macro&f' for key '&7$rKey&f'") + MessageSendHelper.sendChatMessage("Added macro '&7$macro&f' for key '&7$rKey&f'") } } } diff --git a/src/main/java/me/zeroeightsix/kami/manager/ManagerLoader.kt b/src/main/java/me/zeroeightsix/kami/manager/ManagerLoader.kt index d25dd5af9..7801713a7 100644 --- a/src/main/java/me/zeroeightsix/kami/manager/ManagerLoader.kt +++ b/src/main/java/me/zeroeightsix/kami/manager/ManagerLoader.kt @@ -2,16 +2,9 @@ package me.zeroeightsix.kami.manager import me.zeroeightsix.kami.KamiMod import me.zeroeightsix.kami.event.KamiEventBus -import me.zeroeightsix.kami.manager.managers.FileInstanceManager import me.zeroeightsix.kami.util.TimerUtils import org.kamiblue.commons.utils.ClassUtils -/** - * @author Xiaro - * - * Created by Xiaro on 08/18/20 - * Updated by Xiaro on 06/09/20 - */ object ManagerLoader { /** Thread for scanning managers during Forge pre-init */ @@ -24,7 +17,7 @@ object ManagerLoader { fun preLoad() { preLoadingThread = Thread { val stopTimer = TimerUtils.StopTimer() - managerClassList = ClassUtils.findClasses(FileInstanceManager::class.java.getPackage().name, Manager::class.java) + managerClassList = ClassUtils.findClasses("me.zeroeightsix.kami.manager.managers", Manager::class.java) val time = stopTimer.stop() KamiMod.LOG.info("${managerClassList!!.size} manager(s) found, took ${time}ms") } diff --git a/src/main/java/me/zeroeightsix/kami/manager/managers/FileInstanceManager.kt b/src/main/java/me/zeroeightsix/kami/manager/managers/FileInstanceManager.kt deleted file mode 100644 index 793fc6baf..000000000 --- a/src/main/java/me/zeroeightsix/kami/manager/managers/FileInstanceManager.kt +++ /dev/null @@ -1,35 +0,0 @@ -package me.zeroeightsix.kami.manager.managers - -import me.zeroeightsix.kami.manager.Manager -import me.zeroeightsix.kami.util.Macro -import java.io.FileWriter -import java.io.IOException -import java.util.* - -object FileInstanceManager : Manager { - /** - * Map of all the macros. - * KeyCode, Actions - */ - var macros = LinkedHashMap>() - - /** - * Super lazy fix for Windows users sometimes saving empty files - */ - @JvmStatic - fun fixEmptyFiles() { - if (!Macro.file.exists()) { - try { - val w = FileWriter(Macro.file) - w.write("{}") - w.close() - } catch (e: IOException) { - e.printStackTrace() - } - } - } - - init { - fixEmptyFiles() - } -} \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/manager/managers/MacroManager.kt b/src/main/java/me/zeroeightsix/kami/manager/managers/MacroManager.kt index d0b368683..cc72672ba 100644 --- a/src/main/java/me/zeroeightsix/kami/manager/managers/MacroManager.kt +++ b/src/main/java/me/zeroeightsix/kami/manager/managers/MacroManager.kt @@ -1,14 +1,28 @@ package me.zeroeightsix.kami.manager.managers +import com.google.gson.GsonBuilder +import com.google.gson.reflect.TypeToken +import me.zeroeightsix.kami.KamiMod import me.zeroeightsix.kami.command.Command import me.zeroeightsix.kami.manager.Manager -import me.zeroeightsix.kami.util.Macro import me.zeroeightsix.kami.util.text.MessageSendHelper import net.minecraftforge.fml.common.gameevent.InputEvent import org.kamiblue.event.listener.listener import org.lwjgl.input.Keyboard +import java.io.File +import java.io.FileNotFoundException +import java.io.FileReader +import java.io.FileWriter object MacroManager : Manager { + private var macroMap = LinkedHashMap>() + val isEmpty get() = macroMap.isEmpty() + val macros: Map> get() = macroMap + + private val gson = GsonBuilder().setPrettyPrinting().create() + private val type = object : TypeToken>>() {}.type + private const val configName = "KAMIBlueMacros.json" + private val file get() = File(configName) init { listener { @@ -20,28 +34,60 @@ object MacroManager : Manager { * Reads macros from KAMIBlueMacros.json into the macros Map */ fun loadMacros(): Boolean { - return Macro.readFileToMemory() + return try { + FileReader(file).buffered().use { + macroMap = gson.fromJson(it, type) + KamiMod.LOG.info("Macro loaded") + } + true + } catch (e: FileNotFoundException) { + KamiMod.LOG.warn("Could not find file $configName") + false + } catch (e: Exception) { + KamiMod.LOG.warn("Failed loading macro", e) + false + } } /** * Saves macros from the macros Map into KAMIBlueMacros.json */ fun saveMacros(): Boolean { - return Macro.writeMemoryToFile() + return try { + FileWriter(file, false).buffered().use { + gson.toJson(macroMap, it) + KamiMod.LOG.info("Macro saved") + } + true + } catch (e: Exception) { + KamiMod.LOG.warn("Failed saving macro", e) + false + } } /** * Sends the message or command, depending on which one it is * @param keyCode int keycode of the key the was pressed */ - fun sendMacro(keyCode: Int) { - val macrosForThisKey = Macro.getMacrosForKey(keyCode) ?: return - for (currentMacro in macrosForThisKey) { - if (currentMacro!!.startsWith(Command.getCommandPrefix())) { // this is done instead of just sending a chat packet so it doesn't add to the chat history - MessageSendHelper.sendKamiCommand(currentMacro, false) // ie, the false here + private fun sendMacro(keyCode: Int) { + val macros = getMacros(keyCode) ?: return + for (macro in macros) { + if (macro.startsWith(Command.getCommandPrefix())) { // this is done instead of just sending a chat packet so it doesn't add to the chat history + MessageSendHelper.sendKamiCommand(macro) // ie, the false here } else { - MessageSendHelper.sendServerMessage(currentMacro) + MessageSendHelper.sendServerMessage(macro) } } } + + fun getMacros(keycode: Int) = macroMap[keycode] + + fun addMacroToKey(keycode: Int, macro: String) { + macroMap.getOrPut(keycode, ::ArrayList).add(macro) + } + + fun removeMacro(keycode: Int) { + macroMap.remove(keycode) + } + } \ No newline at end of file diff --git a/src/main/java/me/zeroeightsix/kami/util/Macro.kt b/src/main/java/me/zeroeightsix/kami/util/Macro.kt deleted file mode 100644 index c08f64568..000000000 --- a/src/main/java/me/zeroeightsix/kami/util/Macro.kt +++ /dev/null @@ -1,70 +0,0 @@ -package me.zeroeightsix.kami.util - -import com.google.gson.GsonBuilder -import com.google.gson.reflect.TypeToken -import me.zeroeightsix.kami.KamiMod -import me.zeroeightsix.kami.manager.managers.FileInstanceManager -import me.zeroeightsix.kami.util.text.MessageSendHelper -import java.io.* -import java.util.* - -/** - * @author l1ving - * Created by l1ving on 04/05/20 - */ -object Macro { - private val gson = GsonBuilder().setPrettyPrinting().create() - private const val configName = "KAMIBlueMacros.json" - val file = File(configName) - - fun writeMemoryToFile(): Boolean { - return try { - val fw = FileWriter(file, false) - gson.toJson(FileInstanceManager.macros, fw) - fw.flush() - fw.close() - KamiMod.LOG.info("Macro saved") - true - } catch (e: IOException) { - KamiMod.LOG.info("Failed saving macro") - e.printStackTrace() - false - } - } - - fun readFileToMemory(): Boolean { - var success = false - try { - try { - FileInstanceManager.macros = gson.fromJson(FileReader(file), object : TypeToken?>?>() {}.type)!! - KamiMod.LOG.info("Macro loaded") - success = true - } catch (e: FileNotFoundException) { - KamiMod.LOG.warn("Could not find file $configName, clearing the macros list") - FileInstanceManager.macros.clear() - } - } catch (e: IllegalStateException) { - KamiMod.LOG.warn("$configName is empty!") - FileInstanceManager.macros.clear() - } - return success - } - - fun getMacrosForKey(keycode: Int): List? { - val entry = FileInstanceManager.macros.entries.find { it.key == keycode } ?: return null - return entry.value - } - - fun addMacroToKey(keycode: Int?, macro: String?) { - if (keycode == null || macro.isNullOrBlank()) return // prevent trying to add a null macro - FileInstanceManager.macros.getOrPut(keycode, ::arrayListOf).add(macro) - } - - fun removeMacro(keycode: Int) { - FileInstanceManager.macros.keys.removeIf { it == keycode } - } - - fun sendMacrosToChat(messages: Array) { - for (s in messages) MessageSendHelper.sendRawChatMessage("[$s]") - } -} \ No newline at end of file