Skip to content

Commit 8e03365

Browse files
authored
Merge pull request #19 from SLNE-Development/fix/18-whitelist-command-classcastexeption
feat: update whitelist command to use asynchronous player profile arg…
2 parents 2d01a5e + eda48e6 commit 8e03365

File tree

1 file changed

+70
-27
lines changed

1 file changed

+70
-27
lines changed

src/main/kotlin/dev/slne/surf/essentials/command/minecraft/WhitelistCommand.kt

Lines changed: 70 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package dev.slne.surf.essentials.command.minecraft
22

3+
import com.destroystokyo.paper.profile.PlayerProfile
34
import com.github.shynixn.mccoroutine.folia.launch
4-
import dev.jorel.commandapi.arguments.PlayerProfileArgument
5+
import dev.jorel.commandapi.arguments.AsyncPlayerProfileArgument
56
import dev.jorel.commandapi.kotlindsl.*
67
import dev.slne.surf.essentials.plugin
78
import dev.slne.surf.essentials.util.permission.EssentialsPermissionRegistry
@@ -10,9 +11,11 @@ import dev.slne.surf.surfapi.core.api.messages.CommonComponents
1011
import dev.slne.surf.surfapi.core.api.messages.adventure.buildText
1112
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
1213
import dev.slne.surf.surfapi.core.api.messages.pagination.Pagination
14+
import kotlinx.coroutines.future.await
1315
import net.kyori.adventure.text.format.TextDecoration
1416
import org.bukkit.Bukkit
1517
import org.bukkit.OfflinePlayer
18+
import java.util.concurrent.CompletableFuture
1619

1720
fun whitelistCommand() = commandTree("whitelist") {
1821
withPermission(EssentialsPermissionRegistry.WHITELIST_COMMAND)
@@ -96,48 +99,88 @@ fun whitelistCommand() = commandTree("whitelist") {
9699

97100
literalArgument("player") {
98101
literalArgument("add") {
99-
argument(PlayerProfileArgument("offlinePlayer")) {
102+
argument(AsyncPlayerProfileArgument("offlinePlayer")) {
100103
anyExecutor { executor, args ->
101-
val offlinePlayer: OfflinePlayer by args
104+
val offlinePlayers: CompletableFuture<List<PlayerProfile>> by args
102105

103-
if (offlinePlayer.isWhitelisted) {
104-
executor.sendText {
105-
appendPrefix()
106-
error("Der Spieler ist bereits auf der Whitelist.")
106+
plugin.launch {
107+
val profile = offlinePlayers.await().firstOrNull() ?: run {
108+
executor.sendText {
109+
appendPrefix()
110+
error("Der Spieler wurde nicht gefunden.")
111+
}
112+
return@launch
107113
}
108-
return@anyExecutor
109-
}
110114

111-
offlinePlayer.isWhitelisted = true
115+
val id = profile.id ?: run {
116+
executor.sendText {
117+
appendPrefix()
118+
error("Der Spieler hat keine gültige UUID.")
119+
}
120+
return@launch
121+
}
122+
val offlinePlayer = Bukkit.getOfflinePlayer(id)
112123

113-
executor.sendText {
114-
appendPrefix()
115-
variableValue(offlinePlayer.name ?: offlinePlayer.uniqueId.toString())
116-
success(" wurde zur Whitelist hinzugefügt.")
124+
if (offlinePlayer.isWhitelisted) {
125+
executor.sendText {
126+
appendPrefix()
127+
error("Der Spieler ist bereits auf der Whitelist.")
128+
}
129+
return@launch
130+
}
131+
132+
offlinePlayer.isWhitelisted = true
133+
134+
executor.sendText {
135+
appendPrefix()
136+
success("Der Spieler ")
137+
variableValue(offlinePlayer.name ?: offlinePlayer.uniqueId.toString())
138+
success(" wurde zur Whitelist hinzugefügt.")
139+
}
117140
}
118141
}
119142
}
120143
}
121144

122145
literalArgument("remove") {
123-
argument(PlayerProfileArgument("offlinePlayer")) {
146+
argument(AsyncPlayerProfileArgument("offlinePlayer")) {
124147
anyExecutor { executor, args ->
125-
val offlinePlayer: OfflinePlayer by args
148+
val offlinePlayers: CompletableFuture<List<PlayerProfile>> by args
126149

127-
if (!offlinePlayer.isWhitelisted) {
128-
executor.sendText {
129-
appendPrefix()
130-
error("Der Spieler ist nicht auf der Whitelist.")
150+
plugin.launch {
151+
val profile = offlinePlayers.await().firstOrNull() ?: run {
152+
executor.sendText {
153+
appendPrefix()
154+
error("Der Spieler wurde nicht gefunden.")
155+
}
156+
return@launch
131157
}
132-
return@anyExecutor
133-
}
134158

135-
offlinePlayer.isWhitelisted = false
159+
val id = profile.id ?: run {
160+
executor.sendText {
161+
appendPrefix()
162+
error("Der Spieler hat keine gültige UUID.")
163+
}
164+
return@launch
165+
}
166+
val offlinePlayer = Bukkit.getOfflinePlayer(id)
136167

137-
executor.sendText {
138-
appendPrefix()
139-
variableValue(offlinePlayer.name ?: offlinePlayer.uniqueId.toString())
140-
success(" wurde von der Whitelist entfernt.")
168+
if (!offlinePlayer.isWhitelisted) {
169+
executor.sendText {
170+
appendPrefix()
171+
error("Der Spieler ist nicht auf der Whitelist.")
172+
}
173+
return@launch
174+
}
175+
176+
offlinePlayer.isWhitelisted = false
177+
178+
executor.sendText {
179+
appendPrefix()
180+
success("Der Spieler ")
181+
variableValue(offlinePlayer.name ?: offlinePlayer.uniqueId.toString())
182+
success(" wurde von der Whitelist entfernt.")
183+
}
141184
}
142185
}
143186
}

0 commit comments

Comments
 (0)