Skip to content

Commit 3b85a00

Browse files
committed
chore: Use components instead of legacy colors
1 parent eb6a171 commit 3b85a00

File tree

8 files changed

+107
-61
lines changed

8 files changed

+107
-61
lines changed

mimic-bukkit/src/main/kotlin/command/ClassSystemSubcommand.kt

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ import dev.jorel.commandapi.executors.PlayerCommandExecutor
2323
import dev.jorel.commandapi.kotlindsl.greedyStringArgument
2424
import dev.jorel.commandapi.kotlindsl.playerArgument
2525
import dev.jorel.commandapi.kotlindsl.subcommand
26+
import net.kyori.adventure.text.TextComponent
27+
import net.kyori.adventure.text.format.NamedTextColor
2628
import ru.endlesscode.mimic.Mimic
29+
import ru.endlesscode.mimic.internal.append
30+
import ru.endlesscode.mimic.internal.appendLine
31+
import ru.endlesscode.mimic.internal.text
2732

2833
/**
2934
* Commands to deal with class systems.
@@ -51,11 +56,15 @@ private fun infoCommandExecutor(mimic: Mimic) = PlayerCommandExecutor { player,
5156
val target = args.getOrDefaultUnchecked(TARGET, player)
5257
val provider = mimic.getClassSystemProvider()
5358
val system = provider.getSystem(target)
54-
player.send(
55-
"&3System: &7${provider.id}",
56-
"&3Classes: &7${system.classes}",
57-
"&3Primary: &7${system.primaryClass}",
58-
)
59+
60+
val message = text {
61+
appendStats(
62+
"System" to provider.id,
63+
"Classes" to system.classes.toString(),
64+
"Primary" to system.primaryClass.toString(),
65+
)
66+
}
67+
player.sendMessage(message)
5968
}
6069

6170
private fun checkCommandExecutor(mimic: Mimic) = PlayerCommandExecutor { player, args ->
@@ -65,14 +74,26 @@ private fun checkCommandExecutor(mimic: Mimic) = PlayerCommandExecutor { player,
6574
val system = mimic.getClassSystem(target)
6675
val hasAllClasses = system.hasAllClasses(classes)
6776
val hasAnyOfClasses = system.hasAnyOfClasses(classes)
68-
target.send(
69-
"&6Player '${target.name}':",
70-
"&6- has any of: ${hasAnyOfClasses.toChatMessage()}",
71-
"&6- has all: ${hasAllClasses.toChatMessage()}",
72-
)
77+
78+
val message = text {
79+
color(NamedTextColor.GOLD)
80+
appendLine("Player '${target.name}':")
81+
append("- has any of: ")
82+
appendStatus(hasAnyOfClasses)
83+
appendLine()
84+
append("- has all: ")
85+
appendStatus(hasAllClasses)
86+
}
87+
target.sendMessage(message)
7388
}
7489

75-
private fun Boolean.toChatMessage(): String = if (this) "&ayes" else "&cno"
90+
private fun TextComponent.Builder.appendStatus(status: Boolean) {
91+
if (status) {
92+
append("yes", NamedTextColor.GREEN)
93+
} else {
94+
append("no", NamedTextColor.RED)
95+
}
96+
}
7697

7798
private const val TARGET = "target"
7899
private const val CLASSES = "classes"

mimic-bukkit/src/main/kotlin/command/InventorySubcommand.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import dev.jorel.commandapi.kotlindsl.playerExecutor
66
import dev.jorel.commandapi.kotlindsl.subcommand
77
import ru.endlesscode.mimic.ExperimentalMimicApi
88
import ru.endlesscode.mimic.Mimic
9+
import ru.endlesscode.mimic.internal.text
910

1011
/**
1112
* Commands to deal with inventory provider.
@@ -24,12 +25,16 @@ internal fun CommandAPICommand.inventorySubcommand(mimic: Mimic) = subcommand("i
2425
val target = args.getOrDefaultUnchecked(TARGET, sender)
2526
val provider = mimic.getPlayerInventoryProvider()
2627
val inventory = provider.getSystem(target)
27-
sender.send(
28-
"&3Inventory provider: &7${provider.id}",
29-
"&3Count of Equipped: &7%d".format(inventory.equippedItems.size),
30-
"&3Count of Stored: &7%d".format(inventory.storedItems.size),
31-
"&3Total Count: &7%d".format(inventory.items.size),
32-
)
28+
29+
val message = text {
30+
appendStats(
31+
"Inventory provider" to provider.id,
32+
"Count of Equipped" to inventory.equippedItems.size.toString(),
33+
"Count of Stored" to inventory.storedItems.size.toString(),
34+
"Total Count" to inventory.items.size.toString(),
35+
)
36+
}
37+
sender.sendMessage(message)
3338
}
3439
}
3540
}

mimic-bukkit/src/main/kotlin/command/ItemsSubcommand.kt

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,14 @@ import dev.jorel.commandapi.CommandAPICommand
2323
import dev.jorel.commandapi.arguments.ArgumentSuggestions
2424
import dev.jorel.commandapi.executors.CommandExecutor
2525
import dev.jorel.commandapi.kotlindsl.*
26+
import net.kyori.adventure.text.format.NamedTextColor
2627
import org.bukkit.entity.Player
2728
import ru.endlesscode.mimic.impl.mimic.MimicItemsRegistry
29+
import ru.endlesscode.mimic.internal.append
30+
import ru.endlesscode.mimic.internal.appendLine
31+
import ru.endlesscode.mimic.internal.text
2832
import ru.endlesscode.mimic.items.BukkitItemsRegistry
33+
import ru.endlesscode.mimic.items.unwrap
2934

3035
/**
3136
* Commands to deal with items registries
@@ -59,15 +64,15 @@ internal fun CommandAPICommand.itemsSubcommand(itemsRegistry: BukkitItemsRegistr
5964
playerExecutor { sender, args ->
6065
val item: String by args
6166
val isSame = itemsRegistry.isSameItem(sender.inventory.itemInMainHand, item)
62-
sender.send("&6Item in hand and '$item' %s same.".format(if (isSame) "are" else "aren't"))
67+
sender.sendMessage(successText("Item in hand and '$item' %s same.".format(if (isSame) "are" else "aren't")))
6368
}
6469
}
6570

6671
subcommand("id") {
6772
withShortDescription("Prints ID of item in hand")
6873
playerExecutor { sender, _ ->
6974
val id = itemsRegistry.getItemId(sender.inventory.itemInMainHand)
70-
sender.send("&6Id of item in hand is '$id'")
75+
sender.sendMessage(successText("Id of item in hand is '$id'"))
7176
}
7277
}
7378

@@ -77,48 +82,51 @@ internal fun CommandAPICommand.itemsSubcommand(itemsRegistry: BukkitItemsRegistr
7782
anyExecutor { sender, args ->
7883
val item: String by args
7984
val itemExists = itemsRegistry.isItemExists(item)
80-
sender.send("&6Item with id '$item'%s exists".format(if (itemExists) "" else " isn't"))
85+
sender.sendMessage(successText("Item with id '$item'%s exists".format(if (itemExists) "" else " isn't")))
8186
}
8287
}
8388
}
8489

8590
// We can use only greedy string if we need to allow colons because it requires quoting in non-greedy strings.
8691
// https://github.com/Mojang/brigadier/blob/cf754c4ef654160dca946889c11941634c5db3d5/src/main/java/com/mojang/brigadier/StringReader.java#L169
87-
private fun CommandAPICommand.itemArgument(itemsRegistry: BukkitItemsRegistry) = greedyStringArgument(ITEM) {
88-
replaceSuggestions(ArgumentSuggestions.stringCollection { itemsRegistry.knownIds })
92+
private fun CommandAPICommand.itemArgument(itemRegistry: BukkitItemsRegistry) = greedyStringArgument(ITEM) {
93+
replaceSuggestions(ArgumentSuggestions.stringCollection { itemRegistry.knownIds })
8994
}
9095

91-
private fun infoExecutor(itemsRegistry: BukkitItemsRegistry) = CommandExecutor { sender, _ ->
92-
val registries = (itemsRegistry as? MimicItemsRegistry)?.providers
93-
.orEmpty()
94-
.map { it.provider }
95-
.map { " &f${it.id}: &7${it.knownIds.size}" }
96+
private fun infoExecutor(itemRegistry: BukkitItemsRegistry) = CommandExecutor { sender, _ ->
97+
val providers = (itemRegistry.unwrap() as? MimicItemsRegistry)?.providers.orEmpty().map { it.provider }
9698

97-
sender.send(
98-
"&3Items Service: &7${itemsRegistry.id}",
99-
"&3Known IDs amount: &7${itemsRegistry.knownIds.size}"
100-
)
101-
sender.send(registries)
99+
val message = text {
100+
appendStats(
101+
"Item Registry" to itemRegistry.id,
102+
"Known IDs amount" to itemRegistry.knownIds.size.toString(),
103+
)
104+
105+
for (provider in providers) {
106+
append(" ${provider.id}: ", NamedTextColor.WHITE)
107+
appendLine(provider.knownIds.size.toString(), NamedTextColor.GRAY)
108+
}
109+
}
110+
sender.sendMessage(message)
102111
}
103112

104-
private fun giveExecutor(itemsRegistry: BukkitItemsRegistry) = CommandExecutor { sender, args ->
113+
private fun giveExecutor(itemRegistry: BukkitItemsRegistry) = CommandExecutor { sender, args ->
105114
val target: Player by args
106115
val amount = args.getOrDefaultUnchecked(AMOUNT, 1)
107116
// We can use only one greedy string at the end, so we read item and its payload from the same argument
108117
val itemParts = args.getRaw(ITEM).orEmpty().split(" ", limit = 2)
109118
val item = itemParts.first()
110119
val payload = itemParts.getOrNull(1)
111120

112-
val itemStack = itemsRegistry.getItem(item, payload, amount)
121+
val itemStack = itemRegistry.getItem(item, payload, amount)
113122
if (itemStack != null) {
114123
target.inventory.addItem(itemStack)
115-
sender.send("&6Gave ${itemStack.amount} [$item] to ${target.name}.")
124+
sender.sendMessage(successText("Gave ${itemStack.amount} [$item] to ${target.name}."))
116125
} else {
117-
sender.send("&cUnknown item '$item'.")
126+
sender.sendMessage(errorText("Unknown item '$item'"))
118127
}
119128
}
120129

121130
private const val TARGET = "target"
122131
private const val ITEM = "item"
123132
private const val AMOUNT = "amount"
124-
private const val PAYLOAD = "payload"

mimic-bukkit/src/main/kotlin/command/LevelSystemSubcommand.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import dev.jorel.commandapi.CommandAPICommand
2424
import dev.jorel.commandapi.arguments.ArgumentSuggestions
2525
import dev.jorel.commandapi.executors.PlayerCommandExecutor
2626
import dev.jorel.commandapi.kotlindsl.*
27+
import net.kyori.adventure.text.TextComponent
2728
import org.bukkit.command.CommandSender
2829
import ru.endlesscode.mimic.Mimic
2930
import ru.endlesscode.mimic.internal.Log
31+
import ru.endlesscode.mimic.internal.text
3032
import ru.endlesscode.mimic.level.BukkitLevelSystem
3133
import kotlin.math.roundToInt
3234

@@ -97,12 +99,17 @@ private fun infoCommandExecutor(mimic: Mimic) = PlayerCommandExecutor { sender,
9799
val target = args.getOrDefaultUnchecked(TARGET, sender)
98100
val provider = mimic.getLevelSystemProvider()
99101
val system = provider.getSystem(target)
100-
sender.send(
101-
"&3System: &7${provider.id}",
102-
"&3Level: &7%.2f".format(system.level + system.fractionalExp),
103-
"&3Exp: &7%.1f &8| &3To next level: &7%.1f".format(system.exp, system.expToNextLevel),
104-
"&3Total exp: &7%.1f".format(system.totalExp)
105-
)
102+
103+
val message = text {
104+
appendStats(
105+
"System" to provider.id,
106+
"Level" to "%.2f".format(system.level + system.fractionalExp),
107+
"Exp" to "%.1f".format(system.exp),
108+
"Exp to next level" to "%.1f".format(system.expToNextLevel),
109+
"Total exp" to "%.1f".format(system.totalExp)
110+
)
111+
}
112+
target.sendMessage(message)
106113
}
107114

108115
private fun setCommandExecutor(mimic: Mimic) = PlayerCommandExecutor { sender, args ->
@@ -159,17 +166,17 @@ private inline fun catchUnsupported(block: () -> Unit) {
159166
}
160167

161168
private fun BukkitLevelSystem.printNewStats(sender: CommandSender) {
162-
sender.send("&6New ${player.name}'s stats: $level LVL, %.1f XP".format(exp))
169+
sender.sendMessage(successText("New ${player.name}'s stats: $level LVL, %.1f XP".format(exp)))
163170
}
164171

165172
private fun hasCommandExecutor(mimic: Mimic) = PlayerCommandExecutor { sender, args ->
166173
val amount: Double by args
167174
val type = args.getOrDefaultRaw(TYPE, TYPE_LVL)
168175
val target = args.getOrDefaultUnchecked(TARGET, sender)
169176

170-
fun buildMessage(has: Boolean, valueType: String): String {
177+
fun buildMessage(has: Boolean, valueType: String): TextComponent {
171178
val hasOrNot = if (has) "has" else "has not"
172-
return "&6${target.name} $hasOrNot $amount $valueType."
179+
return successText("${target.name} $hasOrNot $amount $valueType.")
173180
}
174181

175182
val system = mimic.getLevelSystem(target)
@@ -179,7 +186,7 @@ private fun hasCommandExecutor(mimic: Mimic) = PlayerCommandExecutor { sender, a
179186
TYPE_TOTAL -> buildMessage(system.hasExpTotal(amount), "total experience")
180187
else -> error("Unexpected type: $type")
181188
}
182-
sender.send(message)
189+
sender.sendMessage(message)
183190
}
184191

185192
private const val TARGET = "target"

mimic-bukkit/src/main/kotlin/command/commandUtils.kt renamed to mimic-bukkit/src/main/kotlin/command/textUserInterface.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,19 @@
1818
*/
1919
package ru.endlesscode.mimic.command
2020

21-
import org.bukkit.ChatColor
22-
import org.bukkit.command.CommandSender
21+
import net.kyori.adventure.text.Component
22+
import net.kyori.adventure.text.TextComponent
23+
import net.kyori.adventure.text.format.NamedTextColor
24+
import ru.endlesscode.mimic.internal.append
25+
import ru.endlesscode.mimic.internal.appendLine
2326

24-
internal fun CommandSender.send(vararg messages: String) {
25-
for (message in messages) {
26-
sendMessage(message.colored())
27-
}
28-
}
27+
internal fun successText(text: String) = Component.text(text, NamedTextColor.GOLD)
28+
internal fun errorText(text: String) = Component.text(text, NamedTextColor.RED)
2929

30-
internal fun CommandSender.send(messages: Collection<String>) {
31-
for (message in messages) {
32-
sendMessage(message.colored())
30+
internal fun TextComponent.Builder.appendStats(vararg stats: Pair<String, String>) {
31+
for ((key, value) in stats) {
32+
append("$key: ", NamedTextColor.DARK_AQUA)
33+
append(value, NamedTextColor.GRAY)
34+
appendLine()
3335
}
3436
}
35-
36-
private fun String.colored(): String = ChatColor.translateAlternateColorCodes('&', this)

mimic-bukkit/src/main/kotlin/internal/Colors.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
* along with BukkitMimic. If not, see <http://www.gnu.org/licenses/>.
1818
*/
1919

20+
// Keep it for now
21+
@file:Suppress("DEPRECATION")
22+
2023
package ru.endlesscode.mimic.internal
2124

2225
import org.bukkit.ChatColor

mimic-bukkit/src/main/kotlin/internal/TextComponent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal fun TextComponent.Builder.appendLine(
1717
vararg decorations: TextDecoration,
1818
): TextComponent.Builder = append(text, color, *decorations).appendLine()
1919

20-
internal fun TextComponent.Builder.appendLine(): TextComponent.Builder = append("\n")
20+
internal fun TextComponent.Builder.appendLine(): TextComponent.Builder = append(Component.newline())
2121

2222
internal fun TextComponent.Builder.append(
2323
text: String,

mimic-bukkit/src/main/kotlin/items/WrappedItemsRegistry.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import ru.endlesscode.mimic.WrappedMimicService
77
import ru.endlesscode.mimic.config.MimicConfig
88

99
internal class WrappedItemsRegistry(
10-
private val delegate: BukkitItemsRegistry,
10+
internal val delegate: BukkitItemsRegistry,
1111
private val config: MimicConfig,
1212
pluginName: String,
1313
pluginManager: PluginManager,
@@ -27,3 +27,5 @@ internal class WrappedItemsRegistry(
2727

2828
override fun getItem(itemId: String, payload: Any?, amount: Int) = delegate.getItem(itemId, payload, amount)
2929
}
30+
31+
internal fun BukkitItemsRegistry.unwrap() = if (this is WrappedItemsRegistry) delegate else this

0 commit comments

Comments
 (0)