mirror of https://github.com/kami-blue/client
[cleanup] Cleaned up Macro (#1753)
This commit is contained in:
parent
2149ab7c4d
commit
f98cca9b85
|
@ -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)
|
||||
|
|
|
@ -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<out String?>) {
|
||||
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<String?>? = 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'")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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<Int, ArrayList<String>>()
|
||||
|
||||
/**
|
||||
* 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()
|
||||
}
|
||||
}
|
|
@ -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<Int, ArrayList<String>>()
|
||||
val isEmpty get() = macroMap.isEmpty()
|
||||
val macros: Map<Int, List<String>> get() = macroMap
|
||||
|
||||
private val gson = GsonBuilder().setPrettyPrinting().create()
|
||||
private val type = object : TypeToken<LinkedHashMap<Int, List<String>>>() {}.type
|
||||
private const val configName = "KAMIBlueMacros.json"
|
||||
private val file get() = File(configName)
|
||||
|
||||
init {
|
||||
listener<InputEvent.KeyInputEvent> {
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
|
@ -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<LinkedHashMap<Int?, List<String?>?>?>() {}.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<String?>? {
|
||||
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<String?>) {
|
||||
for (s in messages) MessageSendHelper.sendRawChatMessage("[$s]")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue