Skip to content

Commit 8a54a2d

Browse files
authored
Merge pull request #21 from SLNE-Development/fix/fix-colors
fix: Enhance hex color argument validation and suggestions
2 parents 1fd3996 + dfc4f66 commit 8a54a2d

File tree

5 files changed

+43
-50
lines changed

5 files changed

+43
-50
lines changed
Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,59 @@
11
package dev.slne.clan.paper.commands.arguments.color
22

3+
import dev.jorel.commandapi.arguments.ArgumentSuggestions
34
import dev.jorel.commandapi.arguments.CustomArgument
45
import dev.jorel.commandapi.arguments.TextArgument
56

67
abstract class BaseHexColorArgument<T>(
78
nodeName: String,
9+
private val requiredLength: Int,
810
private val factory: (String) -> T?
911
) : CustomArgument<T, String>(TextArgument(nodeName), { info ->
1012

11-
val normalized = HexColorParser.normalizeToRgba(info.currentInput())
12-
?: throw CustomArgumentException.fromMessageBuilder(
13+
val input = info.currentInput().trim()
14+
15+
val regex = Regex("^[0-9a-fA-F]{$requiredLength}$")
16+
17+
if (!regex.matches(input)) {
18+
throw CustomArgumentException.fromMessageBuilder(
1319
MessageBuilder()
14-
.append("Failed to parse hex color code: ")
20+
.append("Invalid hex color: ")
1521
.appendArgInput()
1622
)
23+
}
1724

18-
factory(normalized)
25+
factory(input)
1926
?: throw CustomArgumentException.fromMessageBuilder(
2027
MessageBuilder()
2128
.append("Invalid hex color: ")
2229
.appendArgInput()
2330
)
2431
}) {
2532
init {
26-
replaceSuggestions(HexColorSuggestions.create())
33+
replaceSuggestions(ArgumentSuggestions.stringCollection { _ ->
34+
if (requiredLength == 6) {
35+
listOf(
36+
"#FF6B6B",
37+
"#4ECDC4",
38+
"#1A1A2E",
39+
"#F7B801",
40+
"#6A4C93",
41+
"#00C2FF",
42+
"#2EC4B6",
43+
"#E71D36"
44+
)
45+
} else {
46+
listOf(
47+
"#FF6B6BCC",
48+
"#4ECDC480",
49+
"#1A1A2ECC",
50+
"#F7B80199",
51+
"#6A4C93B3",
52+
"#00C2FF66",
53+
"#2EC4B6AA",
54+
"#E71D3688"
55+
)
56+
}
57+
})
2758
}
2859
}

surf-clan-paper/src/main/kotlin/dev/slne/clan/paper/commands/arguments/color/ClanTagHexColorArgument.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ package dev.slne.clan.paper.commands.arguments.color
22

33
import net.kyori.adventure.text.format.TextColor
44

5-
class ClanTagHexColorArgument(nodeName: String) : BaseHexColorArgument<TextColor>(nodeName, TextColor::fromHexString)
5+
class ClanTagHexColorArgument(nodeName: String) :
6+
BaseHexColorArgument<TextColor>(nodeName, 6, {
7+
TextColor.fromHexString("#$it")
8+
})

surf-clan-paper/src/main/kotlin/dev/slne/clan/paper/commands/arguments/color/ClanTagShadowHexColorArgument.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ package dev.slne.clan.paper.commands.arguments.color
33
import net.kyori.adventure.text.format.ShadowColor
44

55
class ClanTagShadowHexColorArgument(nodeName: String) :
6-
BaseHexColorArgument<ShadowColor>(nodeName, ShadowColor::fromHexString)
6+
BaseHexColorArgument<ShadowColor>(nodeName, 8, {
7+
ShadowColor.fromHexString("#$it")
8+
})

surf-clan-paper/src/main/kotlin/dev/slne/clan/paper/commands/arguments/color/HexColorParser.kt

Lines changed: 0 additions & 14 deletions
This file was deleted.

surf-clan-paper/src/main/kotlin/dev/slne/clan/paper/commands/arguments/color/HexColorSuggestions.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)