1+ package trplugins.menu.module.internal.command.impl
2+
3+ import org.bukkit.command.CommandSender
4+ import org.bukkit.entity.Player
5+ import taboolib.common.platform.ProxyCommandSender
6+ import taboolib.common.platform.ProxyPlayer
7+ import taboolib.common.platform.command.player
8+ import taboolib.common.platform.command.subCommand
9+ import taboolib.common.platform.command.suggest
10+ import taboolib.common.platform.command.suggestUncheck
11+ import taboolib.common.platform.function.onlinePlayers
12+ import taboolib.common.util.asList
13+ import taboolib.platform.util.sendLang
14+ import trplugins.menu.module.internal.command.CommandExpression
15+ import trplugins.menu.module.internal.data.Metadata
16+
17+ /* *
18+ * @author 嘿鹰
19+ * @date 2025/8/19 17:39
20+ */
21+ object CommandData : CommandExpression {
22+
23+ // trm data [modify] [dataType] [dataName] [value] [player]
24+ override val command = subCommand {
25+ dynamic (" modify" ) {
26+ suggest { listOf (" add" , " remove" , " set" , " get" ) }
27+ dynamic (" dataType" ) {
28+ suggest {
29+ listOf (" data" , " meta" , " global" )
30+ }
31+ dynamic (" dataName" ) {
32+ suggestUncheck {
33+ val dataType = Metadata .DataType .valueOf(ctx[" dataType" ].uppercase())
34+ getSuggestions(sender, dataType)
35+ }
36+ exec<Player > {
37+ val modifyType = Metadata .ModifyType .valueOf(ctx[" modify" ].uppercase())
38+ if (modifyType == Metadata .ModifyType .ADD || modifyType == Metadata .ModifyType .SET ) {
39+ sender.sendLang(" Command-Data-Invalid-Modify" )
40+ return @exec
41+ }
42+ val dataType = Metadata .DataType .valueOf(ctx[" dataType" ].uppercase())
43+ val dataName = ctx[" dataName" ]
44+ Metadata .modifyData(sender, modifyType, dataType, dataName, " " , sender)
45+ }
46+ dynamic (" value" ) {
47+ suggestUncheck {
48+ val modifyType = Metadata .ModifyType .valueOf(ctx[" modify" ].uppercase())
49+ if (modifyType == Metadata .ModifyType .GET || modifyType == Metadata .ModifyType .REMOVE ) {
50+ onlinePlayers().map { it.name }
51+ } else emptyList()
52+ }
53+ exec<CommandSender > {
54+ val modifyType = Metadata .ModifyType .valueOf(ctx[" modify" ].uppercase())
55+ val dataType = Metadata .DataType .valueOf(ctx[" dataType" ].uppercase())
56+ val dataName = ctx[" dataName" ]
57+ if (modifyType == Metadata .ModifyType .GET || modifyType == Metadata .ModifyType .REMOVE ) {
58+ val player = ctx.player(" value" ).cast<Player >()
59+ Metadata .modifyData(player, modifyType, dataType, dataName, " " , sender)
60+ } else {
61+ if (sender is Player ) {
62+ val value = ctx[" value" ]
63+ Metadata .modifyData(sender as Player , modifyType, dataType, dataName, value, sender)
64+ }
65+ }
66+ }
67+ player(" player" , optional = true ) {
68+ exec<CommandSender > {
69+ val player = ctx.player(" player" ).cast<Player >()
70+ val modifyType = Metadata .ModifyType .valueOf(ctx[" modify" ].uppercase())
71+ val dataType = Metadata .DataType .valueOf(ctx[" dataType" ].uppercase())
72+ val dataName = ctx[" dataName" ]
73+ val value = ctx[" value" ]
74+ Metadata .modifyData(player, modifyType, dataType, dataName, value, sender)
75+ }
76+ }
77+ }
78+ }
79+ }
80+ }
81+ }
82+
83+ private fun getSuggestions (sender : ProxyCommandSender , dataType : Metadata .DataType ): List <String > {
84+ return if (dataType == Metadata .DataType .GLOBAL ) {
85+ Metadata .getGlobalDataKeys().asList()
86+ } else {
87+ if (sender is ProxyPlayer ) {
88+ if (dataType == Metadata .DataType .DATA ) {
89+ Metadata .getData(sender).data.keys.asList()
90+ } else {
91+ Metadata .getMeta(sender).data.keys.asList()
92+ }
93+ } else emptyList()
94+ }
95+ }
96+
97+
98+ }
0 commit comments