Skip to content

Commit 07874e7

Browse files
authored
GH-1214 Allow for more comfort Material argument parsing (#1215)
* Create MaterialArgument and create noMaterial argument message (was present earlier in impl) * Material.valueOf -> Material.matchMaterial * Adjust to @Rollczi's suggestions
1 parent 8fdd334 commit 07874e7

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.eternalcode.core.litecommand.argument;
2+
3+
import com.eternalcode.core.injector.annotations.Inject;
4+
import com.eternalcode.core.injector.annotations.lite.LiteArgument;
5+
import com.eternalcode.core.translation.Translation;
6+
import com.eternalcode.core.translation.TranslationManager;
7+
import dev.rollczi.litecommands.argument.Argument;
8+
import dev.rollczi.litecommands.argument.parser.ParseResult;
9+
import dev.rollczi.litecommands.invocation.Invocation;
10+
import dev.rollczi.litecommands.suggestion.SuggestionContext;
11+
import dev.rollczi.litecommands.suggestion.SuggestionResult;
12+
import java.util.Arrays;
13+
import org.bukkit.Material;
14+
import org.bukkit.command.CommandSender;
15+
16+
@LiteArgument(type = Material.class)
17+
public class MaterialArgument extends AbstractViewerArgument<Material> {
18+
19+
private static final SuggestionResult CACHED_SUGGESTIONS = Arrays.stream(Material.values())
20+
.map(Material::name)
21+
.map(String::toLowerCase)
22+
.collect(SuggestionResult.collector());
23+
24+
@Inject
25+
MaterialArgument(TranslationManager translationManager) {
26+
super(translationManager);
27+
}
28+
29+
@Override
30+
public ParseResult<Material> parse(Invocation<CommandSender> invocation, String argument, Translation translation) {
31+
Material material = Material.matchMaterial(argument);
32+
if (material == null) {
33+
return ParseResult.failure(translation.argument().noMaterial());
34+
}
35+
return ParseResult.success(material);
36+
}
37+
38+
@Override
39+
public SuggestionResult suggest(
40+
Invocation<CommandSender> invocation,
41+
Argument<Material> argument,
42+
SuggestionContext context
43+
) {
44+
return CACHED_SUGGESTIONS;
45+
}
46+
}

eternalcore-core/src/main/java/com/eternalcode/core/litecommand/argument/messages/ArgumentMessages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public interface ArgumentMessages {
1313
Notice numberBiggerThanZero();
1414
Notice numberBiggerThanOrEqualZero();
1515
Notice noItem();
16+
Notice noMaterial();
1617
Notice noArgument();
1718
Notice worldDoesntExist();
1819
Notice incorrectLocation();

0 commit comments

Comments
 (0)