Skip to content

Commit 3918cf9

Browse files
authored
Merge pull request #27 from SLNE-Development/fix/fix-broken-commands
Fix/fix broken commands
2 parents 124021d + 1f5c6fe commit 3918cf9

File tree

11 files changed

+195
-139
lines changed

11 files changed

+195
-139
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
kotlin.code.style=official
22
kotlin.stdlib.default.dependency=false
33
org.gradle.parallel=true
4-
version=1.21.11-2.0.11-SNAPSHOT
4+
version=1.21.11-2.0.12-SNAPSHOT

src/main/kotlin/dev/slne/surf/essentials/PaperListenerManager.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,5 @@ object PaperListenerManager {
1212
UnknownCommandListener.register()
1313
WorldListener.register()
1414
SpecialItemListener.register()
15-
CommandExecutionListener.register()
1615
}
1716
}

src/main/kotlin/dev/slne/surf/essentials/command/argument/GameModeArgument.kt

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,54 @@ import dev.jorel.commandapi.arguments.Argument
55
import dev.jorel.commandapi.arguments.ArgumentSuggestions
66
import dev.jorel.commandapi.arguments.CustomArgument
77
import dev.jorel.commandapi.arguments.StringArgument
8+
import dev.slne.surf.essentials.util.permission.EssentialsPermissionRegistry
89
import dev.slne.surf.surfapi.core.api.messages.adventure.buildText
910
import org.bukkit.GameMode
1011
import org.bukkit.command.CommandSender
1112

1213
class GameModeArgument(nodeName: String) :
1314
CustomArgument<GameMode, String>(StringArgument(nodeName), { info ->
14-
val gameMode = getGameMode(info.input.lowercase())
15+
val input = info.input.lowercase()
16+
val gameMode = getGameMode(input)
1517
?: throw CustomArgumentException.fromAdventureComponent {
1618
buildText {
1719
appendErrorPrefix()
1820
error("Der Spielmodus wurde nicht gefunden.")
1921
}
2022
}
2123

22-
val permission = "surf.essentials.gameMode.${gameMode.name.lowercase()}"
2324
val sender = info.sender
25+
if (sender != null) {
26+
val base = EssentialsPermissionRegistry.GAME_MODE_COMMAND
27+
val specific = "$base.${gameMode.name.lowercase()}"
28+
val wildcard = "$base.*"
2429

25-
if (!sender.hasPermission(permission)) {
26-
throw CustomArgumentException.fromAdventureComponent {
27-
buildText {
28-
appendErrorPrefix()
29-
error("Dazu hast du keine Berechtigung.")
30+
if (!sender.hasPermission(specific) &&
31+
!sender.hasPermission(wildcard)
32+
) {
33+
throw CustomArgumentException.fromAdventureComponent {
34+
buildText {
35+
appendErrorPrefix()
36+
error("Du hast keine Berechtigung für diesen Spielmodus.")
37+
}
3038
}
3139
}
3240
}
3341

3442
gameMode
3543
}) {
44+
3645
init {
37-
this.replaceSuggestions(
46+
replaceSuggestions(
3847
ArgumentSuggestions.stringCollection<CommandSender> { sender ->
48+
val base = EssentialsPermissionRegistry.GAME_MODE_COMMAND
49+
val wildcard = "$base.*"
50+
3951
GameMode.entries
40-
.filter { sender.sender.hasPermission("surf.essentials.gameMode.${it.name.lowercase()}") }
52+
.filter {
53+
sender.sender.hasPermission(wildcard) ||
54+
sender.sender.hasPermission("$base.${it.name.lowercase()}")
55+
}
4156
.map { it.name.lowercase() }
4257
}
4358
)

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

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dev.slne.surf.essentials.command.minecraft
22

33
import dev.jorel.commandapi.kotlindsl.*
44
import dev.slne.surf.essentials.util.permission.EssentialsPermissionRegistry
5+
import dev.slne.surf.essentials.util.util.translatable
56
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
67
import org.bukkit.entity.Player
78
import org.bukkit.inventory.ItemStack
@@ -19,9 +20,7 @@ fun giveCommand() = commandTree("give") {
1920
executor.sendText {
2021
appendSuccessPrefix()
2122
success("Du hast ")
22-
variableValue(itemStack.amount.toString())
23-
success("x ")
24-
variableValue(itemStack.type.name)
23+
translatable(itemStack.type.translationKey())
2524
success(" an ")
2625
variableValue(players.size.toString())
2726
success(" Spieler vergeben.")
@@ -31,13 +30,44 @@ fun giveCommand() = commandTree("give") {
3130
player.sendText {
3231
appendSuccessPrefix()
3332
success("Du hast ")
34-
variableValue(itemStack.amount.toString())
35-
success("x ")
36-
variableValue(itemStack.type.name)
33+
translatable(itemStack.type.translationKey())
3734
success(" erhalten.")
3835
}
3936
}
4037
}
38+
39+
integerArgument("amount") {
40+
anyExecutor { executor, args ->
41+
val itemStack: ItemStack by args
42+
val amount: Int by args
43+
val players: Collection<Player> by args
44+
45+
itemStack.amount = amount
46+
players.forEach { it.inventory.addItem(itemStack) }
47+
48+
executor.sendText {
49+
appendSuccessPrefix()
50+
success("Du hast ")
51+
variableValue(amount.toString())
52+
success("x ")
53+
translatable(itemStack.type.translationKey())
54+
success(" an ")
55+
variableValue(players.size.toString())
56+
success(" Spieler vergeben.")
57+
}
58+
59+
players.forEach { player ->
60+
player.sendText {
61+
appendSuccessPrefix()
62+
success("Du hast ")
63+
variableValue(amount.toString())
64+
success("x ")
65+
translatable(itemStack.type.translationKey())
66+
success(" erhalten.")
67+
}
68+
}
69+
}
70+
}
4171
}
4272
}
4373
}

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

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@ package dev.slne.surf.essentials.command.minecraft
33
import dev.jorel.commandapi.kotlindsl.*
44
import dev.slne.surf.essentials.util.permission.EssentialsPermissionRegistry
55
import dev.slne.surf.essentials.util.util.translatable
6+
import dev.slne.surf.surfapi.bukkit.api.command.args.adventureCompoundBinaryTagArgument
7+
import dev.slne.surf.surfapi.bukkit.api.nms.NmsUseWithCaution
8+
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.entityBridge
69
import dev.slne.surf.surfapi.core.api.messages.Colors
710
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
11+
import net.kyori.adventure.nbt.CompoundBinaryTag
812
import org.bukkit.Location
913
import org.bukkit.entity.EntityType
1014

15+
@Suppress("UnstableApiUsage")
16+
@NmsUseWithCaution
1117
fun summonCommand() = commandTree("summon") {
1218
withPermission(EssentialsPermissionRegistry.SUMMON_COMMAND)
1319
entityTypeArgument("entityType") {
@@ -23,30 +29,64 @@ fun summonCommand() = commandTree("summon") {
2329
}
2430
}
2531

26-
integerArgument("amount") {
32+
locationArgument("location") {
2733
playerExecutor { player, args ->
2834
val entityType: EntityType by args
29-
val amount: Int by args
35+
val location: Location by args
3036

31-
repeat(amount) {
32-
player.location.world.spawnEntity(player.location, entityType)
33-
}
37+
location.world.spawnEntity(location, entityType)
3438

3539
player.sendText {
3640
appendSuccessPrefix()
3741
success("Du hast ")
38-
variableValue(amount)
39-
success(" ")
4042
translatable(entityType.translationKey()).color(Colors.VARIABLE_VALUE)
4143
success(" beschworen.")
4244
}
4345
}
4446

45-
locationArgument("location") {
47+
adventureCompoundBinaryTagArgument("nbt") {
48+
playerExecutor { player, args ->
49+
val entityType: EntityType by args
50+
val location: Location by args
51+
val nbt: CompoundBinaryTag by args
52+
53+
entityBridge.createEntityByNbt(player.world, entityType, location, nbt)
54+
55+
player.sendText {
56+
appendSuccessPrefix()
57+
success("Du hast ")
58+
translatable(entityType.translationKey()).color(Colors.VARIABLE_VALUE)
59+
success(" beschworen.")
60+
}
61+
}
62+
63+
integerArgument("amount") {
64+
playerExecutor { player, args ->
65+
val entityType: EntityType by args
66+
val location: Location by args
67+
val nbt: CompoundBinaryTag by args
68+
val amount: Int by args
69+
70+
repeat(amount) {
71+
entityBridge.createEntityByNbt(player.world, entityType, location, nbt)
72+
}
73+
74+
player.sendText {
75+
appendSuccessPrefix()
76+
success("Du hast ")
77+
success("$amount ")
78+
translatable(entityType.translationKey()).color(Colors.VARIABLE_VALUE)
79+
success(" beschworen.")
80+
}
81+
}
82+
}
83+
}
84+
85+
integerArgument("amount") {
4686
playerExecutor { player, args ->
4787
val entityType: EntityType by args
48-
val amount: Int by args
4988
val location: Location by args
89+
val amount: Int by args
5090

5191
repeat(amount) {
5292
location.world.spawnEntity(location, entityType)
@@ -55,13 +95,12 @@ fun summonCommand() = commandTree("summon") {
5595
player.sendText {
5696
appendSuccessPrefix()
5797
success("Du hast ")
58-
variableValue(amount)
59-
success(" ")
98+
success("$amount ")
6099
translatable(entityType.translationKey()).color(Colors.VARIABLE_VALUE)
61100
success(" beschworen.")
62101
}
63102
}
64103
}
65104
}
66-
}//TODO: add NBT Support
105+
}
67106
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import dev.jorel.commandapi.kotlindsl.*
44
import dev.slne.surf.essentials.util.permission.EssentialsPermissionRegistry
55
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
66
import org.bukkit.Location
7+
import org.bukkit.entity.Entity
78
import org.bukkit.entity.Player
89

910
fun teleportCommand() = commandTree("teleport") {
1011
withPermission(EssentialsPermissionRegistry.TELEPORT_COMMAND)
1112
withAliases("tp")
12-
entitySelectorArgumentOnePlayer("target") {
13+
entitySelectorArgumentOneEntity("target") {
1314
playerExecutor { player, args ->
14-
val target: Player by args
15+
val target: Entity by args
1516

1617
player.teleportAsync(target.location)
1718

@@ -39,10 +40,10 @@ fun teleportCommand() = commandTree("teleport") {
3940
}
4041
entitySelectorArgumentManyPlayers("players") {
4142
withPermission(EssentialsPermissionRegistry.TELEPORT_COMMAND_OTHERS)
42-
entitySelectorArgumentOnePlayer("target") {
43+
entitySelectorArgumentOneEntity("target") {
4344
anyExecutor { executor, args ->
4445
val players: Collection<Player> by args
45-
val target: Player by args
46+
val target: Entity by args
4647

4748
players.forEach { it.teleportAsync(target.location) }
4849

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

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

3+
import com.github.shynixn.mccoroutine.folia.globalRegionDispatcher
34
import com.github.shynixn.mccoroutine.folia.launch
45
import dev.jorel.commandapi.kotlindsl.*
56
import dev.slne.surf.essentials.command.argument.namedTimeArgument
@@ -102,7 +103,9 @@ fun timeCommand() = commandTree("time") {
102103
val time: Int by args
103104

104105
Bukkit.getWorlds().forEach {
105-
it.fullTime = time.toLong()
106+
plugin.launch(plugin.globalRegionDispatcher) {
107+
it.fullTime = time.toLong()
108+
}
106109
}
107110

108111
executor.sendText {
@@ -130,7 +133,9 @@ fun timeCommand() = commandTree("time") {
130133
(24000 - current) + target
131134
}
132135

133-
world.fullTime += diff
136+
plugin.launch(plugin.globalRegionDispatcher) {
137+
world.fullTime += diff
138+
}
134139
}
135140

136141

@@ -152,10 +157,10 @@ fun timeCommand() = commandTree("time") {
152157
val time: Int by args
153158

154159
Bukkit.getWorlds().forEach {
155-
if (time !in 100..24000) {
156-
it.fullTime += time
157-
} else {
158-
plugin.launch {
160+
plugin.launch(plugin.globalRegionDispatcher) {
161+
if (time !in 100..24000) {
162+
it.fullTime += time
163+
} else {
159164
surfBukkitApi.skipTimeSmoothly(it, time.toLong())
160165
}
161166
}

0 commit comments

Comments
 (0)