1+ package dev.slne.surf.essentials.command
2+
3+ import com.destroystokyo.paper.profile.ProfileProperty
4+ import com.github.shynixn.mccoroutine.folia.entityDispatcher
5+ import com.github.shynixn.mccoroutine.folia.launch
6+ import dev.jorel.commandapi.kotlindsl.*
7+ import dev.slne.surf.essentials.plugin
8+ import dev.slne.surf.essentials.util.permission.EssentialsPermissionRegistry
9+ import dev.slne.surf.essentials.util.skin.SkinData
10+ import dev.slne.surf.essentials.util.skin.retrieveSkin
11+ import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
12+ import kotlinx.coroutines.withContext
13+ import org.bukkit.entity.Player
14+
15+ fun skinChangeCommand () = commandTree(" skin" ) {
16+ withPermission(EssentialsPermissionRegistry .SKIN_CHANGE_COMMAND )
17+ stringArgument(" targetName" ) {
18+ playerExecutor { player, args ->
19+ val targetName: String by args
20+
21+ player.sendText {
22+ appendPrefix()
23+ info(" Die Skin-Daten werden geladen..." )
24+ }
25+
26+ plugin.launch {
27+ val skinData = retrieveSkin(targetName) ? : run {
28+ player.sendText {
29+ appendPrefix()
30+ error(" Der Skin konnte nicht gefunden werden." )
31+ }
32+ return @launch
33+ }
34+
35+ assignSkin(player, skinData)
36+
37+ player.sendText {
38+ appendPrefix()
39+ success(" Dein Skin wurde erfolgreich zu " )
40+ variableValue(targetName)
41+ success(" geändert." )
42+ }
43+ }
44+ }
45+
46+ entitySelectorArgumentOnePlayer(" target" ) {
47+ withPermission(EssentialsPermissionRegistry .SKIN_CHANGE_COMMAND_OTHERS )
48+ anyExecutor { executor, args ->
49+ val targetName: String by args
50+ val target: Player by args
51+
52+ executor.sendText {
53+ appendPrefix()
54+ info(" Die Skin-Daten von " )
55+ variableValue(targetName)
56+ info(" werden geladen..." )
57+ }
58+
59+ plugin.launch {
60+ val skinData = retrieveSkin(targetName) ? : run {
61+ executor.sendText {
62+ appendPrefix()
63+ error(" Der Skin von " )
64+ variableValue(targetName)
65+ error(" konnte nicht gefunden werden." )
66+ }
67+ return @launch
68+ }
69+
70+ assignSkin(target, skinData)
71+
72+ executor.sendText {
73+ appendPrefix()
74+ success(" Der Skin von " )
75+ variableValue(targetName)
76+ success(" wurde geändert." )
77+ }
78+
79+ target.sendText {
80+ appendPrefix()
81+ info(" Dein Skin wurde zu " )
82+ variableValue(targetName)
83+ info(" geändert." )
84+ }
85+ }
86+ }
87+ }
88+ }
89+
90+ literalArgument(" reset" ) {
91+ playerExecutor { player, _ ->
92+ player.sendText {
93+ appendPrefix()
94+ info(" Deine Skin-Daten werden zurückgesetzt..." )
95+ }
96+
97+ plugin.launch {
98+ val skinData = retrieveSkin(player.name) ? : run {
99+ player.sendText {
100+ appendPrefix()
101+ error(" Deine Skin-Daten konnten nicht zurückgesetzt werden." )
102+ }
103+ return @launch
104+ }
105+
106+ assignSkin(player, skinData)
107+
108+ player.sendText {
109+ appendPrefix()
110+ success(" Deine Skin-Daten wurden erfolgreich zurückgesetzt." )
111+ }
112+ }
113+ }
114+
115+ entitySelectorArgumentOnePlayer(" target" ) {
116+ withPermission(EssentialsPermissionRegistry .SKIN_CHANGE_COMMAND_OTHERS )
117+ anyExecutor { executor, args ->
118+ val target: Player by args
119+
120+ executor.sendText {
121+ appendPrefix()
122+ info(" Die Skin-Daten von " )
123+ variableValue(target.name)
124+ info(" werden zurückgesetzt..." )
125+ }
126+
127+ plugin.launch {
128+ val skinData = retrieveSkin(target.name) ? : run {
129+ executor.sendText {
130+ appendPrefix()
131+ error(" Die Skin-Daten von " )
132+ variableValue(target.name)
133+ error(" konnten nicht zurückgesetzt werden." )
134+ }
135+ return @launch
136+ }
137+
138+ assignSkin(target, skinData)
139+
140+ executor.sendText {
141+ appendPrefix()
142+ success(" Die Skin-Daten von " )
143+ variableValue(target.name)
144+ success(" wurden zurückgesetzt." )
145+ }
146+
147+ target.sendText {
148+ appendPrefix()
149+ info(" Deine Skin-Daten wurden zurückgesetzt." )
150+ }
151+ }
152+ }
153+ }
154+ }
155+ }
156+
157+ private suspend fun assignSkin (player : Player , skin : SkinData ) =
158+ withContext(plugin.entityDispatcher(player)) {
159+ val profile = player.playerProfile.apply {
160+ setProperty(
161+ ProfileProperty (
162+ " textures" ,
163+ skin.value,
164+ skin.signature
165+ )
166+ )
167+ }
168+ player.playerProfile = profile
169+ }
0 commit comments