Skip to content

Commit 73b8e66

Browse files
committed
feat: finish work system command, all work a generic(remove duplicate code), easy to integrate api,
1 parent 76c45ca commit 73b8e66

21 files changed

+134
-121
lines changed

src/main/java/dev/lotus/studio/command/MainCommand.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,20 @@ public MainCommand(String command, CustomItemManager itemManager, SafeZoneManage
2222
// тут реєструєш усі "верхньорівневі" команди тобто усі реалізації SubCommand
2323
register(new GenericCommand<>(
2424
"item",
25-
"Управление предметами",
2625
"/main item <armor|view|eat>",
2726
ItemSubCommandFactory.createAll(itemManager)
2827
));
2928

3029
register(new GenericCommand<>(
3130
"safezone",
32-
"Управление SafeZone зонами",
3331
"/main safezone <pos1|pos2|save|list|remove>",
3432
SafeZoneSubCommandFactory.createAll(safeZoneManager)
3533
));
3634

3735
register(new GenericCommand<>(
3836
"reload",
39-
"Reload commands",
4037
"main",
41-
ReloadSubCommandFactory.createAll(safeZoneManager, itemManager)));
38+
ReloadSubCommandFactory.createAll(itemManager)));
4239

4340
register(new HelpCommand());
4441

src/main/java/dev/lotus/studio/command/subcommand/GenericCommand.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,36 @@
1111
public class GenericCommand<T extends SubCommand> implements SubCommand {
1212

1313
private final String name;
14-
private final String description;
1514
private final String usage;
1615
private final Collection<T> subCommands;
1716

18-
public GenericCommand(String name, String description, String usage, Collection<T> subCommands) {
17+
public GenericCommand(String name, String usage, Collection<T> subCommands) {
1918
this.name = name;
20-
this.description = description;
2119
this.usage = usage;
2220
this.subCommands = subCommands;
2321
}
2422

2523
@Override
2624
public String getName() { return name; }
2725

28-
@Override
29-
public String getDescription() { return description; }
3026

3127
@Override
32-
public String getUsage() { return usage; }
28+
public String getUsage() {
29+
String children = subCommands.stream()
30+
.map(SubCommand::getName)
31+
.reduce((a, b) -> a + "|" + b)
32+
.orElse("");
33+
return "/" + name + " <" + children + ">";
34+
}
35+
36+
public String getFullUsage(String parentChain) {
37+
String full = (parentChain == null || parentChain.isEmpty())
38+
? name
39+
: parentChain + " " + name;
40+
41+
return "/" + full + " ..."; // для опису групи
42+
}
43+
3344

3445
@Override
3546
public boolean execute(Player player, String[] args) {

src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ public class HelpCommand implements SubCommand {
88
@Override
99
public String getName() { return "help"; }
1010

11-
@Override
12-
public String getDescription() { return "Показує список доступних команд"; }
1311

1412
@Override
1513
public String getUsage() { return "/main help"; }

src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,16 @@
77

88
public interface SubCommand {
99
String getName();
10-
String getDescription();
1110
String getUsage();
1211
boolean execute(Player player, String[] args);
1312
List<String> tabComplete(Player player, String[] args);
13+
14+
default String getFullUsage(String parentChain) {
15+
if (parentChain == null || parentChain.isEmpty()) {
16+
return "/" + getName() + " " + getUsage();
17+
}
18+
return "/" + parentChain + " " + getName() +
19+
(getUsage().isEmpty() ? "" : " " + getUsage());
20+
}
1421
}
1522

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package dev.lotus.studio.command.subcommand;
2+
3+
4+
import java.util.Arrays;
5+
import java.util.Collection;
6+
import java.util.function.Function;
7+
8+
public class SubCommandFactory {
9+
public static <E extends Enum<E>, C> Collection<C> createAll(
10+
Class<E> enumClass,
11+
Function<E, C> creator
12+
) {
13+
return Arrays.stream(enumClass.getEnumConstants())
14+
.map(creator)
15+
.toList();
16+
}
17+
}
18+
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package dev.lotus.studio.command.subcommand.item.factory;
22

3+
import dev.lotus.studio.command.subcommand.SubCommandFactory;
34
import dev.lotus.studio.item.CustomItemManager;
45

5-
import java.util.Arrays;
66
import java.util.Collection;
77

88
public class ItemSubCommandFactory {
99
public static Collection<AbstractItemSubCommand> createAll(CustomItemManager itemManager) {
10-
return Arrays.stream(ItemSubCommandType.values())
11-
.map(type -> type.create(itemManager))
12-
.toList();
10+
return SubCommandFactory.createAll(ItemSubCommandType.class,
11+
type -> type.create(itemManager));
1312
}
1413
}
1514

15+

src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ArmorCommand.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,23 @@ public String getName() {
1919
return "armor";
2020
}
2121

22-
@Override
23-
public String getDescription() {
24-
return "Управление предметами брони";
25-
}
2622

2723
@Override
2824
public String getUsage() {
29-
return "/main item armor <give|list|help>";
25+
return "<give|list|help>";
3026
}
3127

3228
@Override
3329
public boolean execute(Player player, String[] args) {
3430
if (args.length == 0) {
35-
player.sendMessage("§7Использование: " + getUsage());
31+
player.sendMessage("§7Использование: " + getFullUsage("lotus item"));
3632
return true;
3733
}
3834

3935
switch (args[0].toLowerCase()) {
4036
case "give" -> {
41-
if (args.length < 2) {
42-
player.sendMessage("§7Использование: /main item armor give <itemKey>");
37+
if (args.length != 2) {
38+
player.sendMessage("§7Использование: /lotus item armor give <itemKey>");
4339
return true;
4440
}
4541
var customItem = itemManager.getItem(args[1]);
@@ -60,7 +56,7 @@ public boolean execute(Player player, String[] args) {
6056
player.sendMessage("/main item armor list");
6157
player.sendMessage("/main item armor help");
6258
}
63-
default -> player.sendMessage("§cНеизвестная команда. " + getUsage());
59+
default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item"));
6460
}
6561

6662
return true;

src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/EatCommand.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,23 @@ public String getName() {
1919
return "eat";
2020
}
2121

22-
@Override
23-
public String getDescription() {
24-
return "Управление съедобными предметами";
25-
}
2622

2723
@Override
2824
public String getUsage() {
29-
return "/main item eat <give|list|help>";
25+
return "<give|list|help>";
3026
}
3127

3228
@Override
3329
public boolean execute(Player player, String[] args) {
3430
if (args.length == 0) {
35-
player.sendMessage("§7Использование: " + getUsage());
31+
player.sendMessage("§7Использование: " + getFullUsage("lotus item"));
3632
return true;
3733
}
3834

3935
switch (args[0].toLowerCase()) {
4036
case "give" -> {
41-
if (args.length < 2) {
42-
player.sendMessage("§7Использование: /main item eat give <itemKey>");
37+
if (args.length != 2) {
38+
player.sendMessage("§7Использование: /lotus item eat give <itemKey>");
4339
return true;
4440
}
4541
var eatItem = itemManager.getEatItem(args[1]);
@@ -64,7 +60,7 @@ public boolean execute(Player player, String[] args) {
6460
player.sendMessage("/main item eat list");
6561
player.sendMessage("/main item eat help");
6662
}
67-
default -> player.sendMessage("§cНеизвестная команда. " + getUsage());
63+
default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item"));
6864
}
6965

7066
return true;

src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ViewCommand.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,23 @@ public String getName() {
1919
return "view";
2020
}
2121

22-
@Override
23-
public String getDescription() {
24-
return "Управление view предметами";
25-
}
2622

2723
@Override
2824
public String getUsage() {
29-
return "/main item view <give|list|help>";
25+
return "<give|list|help>";
3026
}
3127

3228
@Override
3329
public boolean execute(Player player, String[] args) {
3430
if (args.length == 0) {
35-
player.sendMessage("§7Использование: " + getUsage());
31+
player.sendMessage("§7Использование: " + getFullUsage("lotus item"));
3632
return true;
3733
}
3834

3935
switch (args[0].toLowerCase()) {
4036
case "give" -> {
41-
if (args.length < 2) {
42-
player.sendMessage("§7Использование: /main item view give <itemKey>");
37+
if (args.length != 2) {
38+
player.sendMessage("§7Использование: /lotus item view give <itemKey>");
4339
return true;
4440
}
4541
var viewItem = itemManager.getViewItem(args[1]);
@@ -64,7 +60,7 @@ public boolean execute(Player player, String[] args) {
6460
player.sendMessage("/main item view list");
6561
player.sendMessage("/main item view help");
6662
}
67-
default -> player.sendMessage("§cНеизвестная команда. " + getUsage());
63+
default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item"));
6864
}
6965

7066
return true;

src/main/java/dev/lotus/studio/command/subcommand/reload/factory/AbstractReloadCommand.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
import dev.lotus.studio.command.subcommand.SubCommand;
44
import dev.lotus.studio.item.CustomItemManager;
5-
import dev.lotus.studio.safezone.SafeZoneManager;
65

76
public abstract class AbstractReloadCommand implements SubCommand {
87
protected final CustomItemManager itemManager;
9-
protected final SafeZoneManager safeZoneManager;
108

11-
protected AbstractReloadCommand(CustomItemManager itemManager , SafeZoneManager safeZoneManager) {
9+
protected AbstractReloadCommand(CustomItemManager itemManager) {
1210
this.itemManager = itemManager;
13-
this.safeZoneManager = safeZoneManager;
1411
}
1512
}

0 commit comments

Comments
 (0)