From 4df8a87c044a1194bff4409974944c81ba191430 Mon Sep 17 00:00:00 2001 From: Appability Date: Sun, 13 Nov 2022 02:53:02 -0800 Subject: fml i almost made idkman reroll ANOTHER handle also significant improvements to salvage list editing, cleanup chat formatting, and fix config description --- .../com/ambientaddons/commands/AutoBuyCommand.kt | 10 ++- .../com/ambientaddons/commands/SalvageCommand.kt | 99 +++++++++++++++------- 2 files changed, 76 insertions(+), 33 deletions(-) (limited to 'src/main/kotlin/com/ambientaddons/commands') diff --git a/src/main/kotlin/com/ambientaddons/commands/AutoBuyCommand.kt b/src/main/kotlin/com/ambientaddons/commands/AutoBuyCommand.kt index 1cead71..9899d40 100644 --- a/src/main/kotlin/com/ambientaddons/commands/AutoBuyCommand.kt +++ b/src/main/kotlin/com/ambientaddons/commands/AutoBuyCommand.kt @@ -13,7 +13,7 @@ object AutoBuyCommand { val newPrice = args.getOrNull(2)?.toIntOrNull() persistentData.autoBuyItems[item] = newPrice persistentData.save() - UChat.chat("§aAdded item §a§l$item §awith ${if (newPrice == null) "no minimum price." else " minimum price §a§l$newPrice"}".withModPrefix()) + UChat.chat("§aAdded item §a§l$item §awith ${if (newPrice == null) "no maximum price." else "maximum price §a§l$newPrice"}".withModPrefix()) } "remove" -> { val item = args[1] @@ -24,14 +24,16 @@ object AutoBuyCommand { } else UChat.chat("§cItem §c§l$item §cdoes not exist!".withModPrefix()) } "list" -> { - UChat.chat("§2§lItems".withModPrefix()) + UChat.chat(Chat.getChatBreak()) + UChat.chat("§b§lAutobuy List") persistentData.autoBuyItems.forEach { if (it.value == null) { - UChat.chat(" §b${it.key}") + UChat.chat(" §a${it.key}") } else { - UChat.chat(" §b${it.key} §7(max price §a${it.value} §7coins)") + UChat.chat(" §a${it.key} §e(maximum price §a§l${it.value} §ecoins)") } } + UChat.chat(Chat.getChatBreak()) } else -> { UChat.chat(""" diff --git a/src/main/kotlin/com/ambientaddons/commands/SalvageCommand.kt b/src/main/kotlin/com/ambientaddons/commands/SalvageCommand.kt index 5e86757..bc8d442 100644 --- a/src/main/kotlin/com/ambientaddons/commands/SalvageCommand.kt +++ b/src/main/kotlin/com/ambientaddons/commands/SalvageCommand.kt @@ -1,64 +1,105 @@ package com.ambientaddons.commands import AmbientAddons.Companion.persistentData +import com.ambientaddons.features.misc.Salvage import com.ambientaddons.utils.Chat import com.ambientaddons.utils.Extensions.withModPrefix import com.ambientaddons.utils.SalvageStrategy import gg.essential.universal.UChat object SalvageCommand { + + private val armorSuffixes = listOf("_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS") + fun processCommand(args: List) { when (args.getOrNull(0)) { "auto" -> { - val item = args[1] - val added = persistentData.salvageMap.put(item, SalvageStrategy.Always) != SalvageStrategy.Always - persistentData.save() - UChat.chat((if (added) "§aAdded item §a§l${item}." else "§cItem already added.").withModPrefix()) + val item = args[1].uppercase() + addItem(item, SalvageStrategy.Always) } "allow" -> { - val item = args[1] - val allowed = persistentData.salvageMap.put(item, SalvageStrategy.Allow) != SalvageStrategy.Allow - persistentData.save() - UChat.chat((if (allowed) "§aAllowing item §a§l${item}." else "§cItem already allowed.").withModPrefix()) + val item = args[1].uppercase() + addItem(item, SalvageStrategy.Allow) } "block" -> { - val item = args[1] - val blocked = persistentData.salvageMap.put(item, SalvageStrategy.Block) != SalvageStrategy.Block - persistentData.save() - UChat.chat((if (blocked) "§aBlocking item §a§l${item}." else "§cItem already blocked.").withModPrefix()) + val item = args[1].uppercase() + addItem(item, SalvageStrategy.Block) } "remove" -> { - val item = args[1] - val removed = persistentData.salvageMap.remove(item) != null - persistentData.save() - UChat.chat((if (removed) "§aRemoved item §a§l${item}." else "§cItem not in list.").withModPrefix()) + val item = args[1].uppercase() + if (item.endsWith("_ARMOR")) { + val itemWithoutSuffix = item.substringBeforeLast("_") + val removedAny = armorSuffixes.map { + persistentData.salvageMap.remove(itemWithoutSuffix + it) + }.any { it != null } + persistentData.save() + UChat.chat((if (removedAny) "§aRemoved armor set §a§l${item}." else "§cSet not in list.").withModPrefix()) + } else { + val removed = persistentData.salvageMap.remove(item) != null + UChat.chat((if (removed) "§aRemoved item §a§l${item}." else "§cItem not in list.").withModPrefix()) + } } "list" -> { - UChat.chat("§2§lItems §7(§aalways salvage, §eallow salvaging, §cblock salvaging§7)".withModPrefix()) - persistentData.salvageMap.forEach { - when (it.value) { - SalvageStrategy.Always -> UChat.chat(" §a${it.key}") - SalvageStrategy.Allow -> UChat.chat(" §e${it.key}") - else -> UChat.chat(" §c${it.key}") - } + val sortedMap = persistentData.salvageMap.let { salvageMap -> + val armorSets = salvageMap.filter { entry -> + if (entry.key.endsWith(armorSuffixes.first())) { + val itemWithoutSuffix = entry.key.substringBeforeLast("_") + armorSuffixes.all { salvageMap[itemWithoutSuffix + it] == entry.value } + } else false + }.map { (it.key.substringBeforeLast("_") + "_ARMOR") to it.value }.toMap() + (salvageMap.filter { + !armorSets.contains(it.key.substringBeforeLast("_") + "_ARMOR") + } + armorSets).toSortedMap() } + UChat.chat(Chat.getChatBreak()) + UChat.chat("§b§lAlways salvage") + UChat.chat(sortedMap.entries.filter { + it.value == SalvageStrategy.Always + }.joinToString("\n") { " §a${it.key}" }) + UChat.chat("§b§lAllow salvaging") + UChat.chat(sortedMap.entries.filter { + it.value == SalvageStrategy.Allow + }.joinToString("\n") { " §e${it.key}" }) + UChat.chat("§b§lBlock salvaging") + UChat.chat(sortedMap.entries.filter { + it.value == SalvageStrategy.Block + }.joinToString("\n") { " §c${it.key}" }) + UChat.chat(Chat.getChatBreak()) } else -> { - UChat.chat(""" + UChat.chat( + """ ${Chat.getChatBreak()} §b§lUsage: - §a/ambient salvage auto §eto always salvage item. - §a/ambient salvage allow §eto allow salvaging item. - §a/ambient salvage block §eto block salvaging item. - §a/ambient salvage remove §eto removet item. + §a/ambient salvage auto §eto always salvage. + §a/ambient salvage allow §eto allow salvaging. + §a/ambient salvage block §eto block salvaging. + §a/ambient salvage remove §eto remove item. §a/ambient salvage list §eto view current salvage list. §b§lNotes: §eSome items are explicitly blocked due to past item quality bugs. §eIf not blocked in list, this will salvage all dungeon mob drops unless starred. + §eArmor set ids can be combined into a single name ending with _ARMOR. ${Chat.getChatBreak()} - """.trimIndent()) + """.trimIndent() + ) } } } + + private fun addItem(item: String, strategy: SalvageStrategy) { + if (item.endsWith("_ARMOR")) { + val itemWithoutSuffix = item.substringBeforeLast("_") + val addedAny = armorSuffixes.map { + persistentData.salvageMap.put(itemWithoutSuffix + it, strategy) + }.any { it != strategy } + persistentData.save() + UChat.chat((if (addedAny) "§aAdded armor set §a§l${item}." else "§cSet already added.").withModPrefix()) + } else { + val added = persistentData.salvageMap.put(item, strategy) != strategy + persistentData.save() + UChat.chat((if (added) "§aAdded item §a§l${item}." else "§cItem already added.").withModPrefix()) + } + } } \ No newline at end of file -- cgit