Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/dev/lotus/studio/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public boolean initialize() {
new PlayerBar(this,itemManager);


new MainCommand("lotus", itemManager, SafeZoneManager.getInstance());
new MainCommand("frostandfallout", itemManager, SafeZoneManager.getInstance());

SafeZoneManager.getInstance().initialize(safeZoneDataService);
} catch (Exception e) {
Expand Down
8 changes: 6 additions & 2 deletions src/main/java/dev/lotus/studio/command/MainCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,11 @@ public boolean execute(CommandSender sender, String label, String[] args) {
}

if (args.length == 0) {
player.sendMessage("§aИспользуйте /" + label + " help");
SubCommand help = subCommands.get("help");
if (help != null) {
return help.execute(player, new String[0]);
}
player.sendMessage("§cПомилка: команда допомоги не знайдена!");
return true;
}

Expand All @@ -63,7 +67,7 @@ public boolean execute(CommandSender sender, String label, String[] args) {
return true;
}

// делегуємо вниз, напр. в ItemCommand
// делегуємо
return sub.execute(player, Arrays.copyOfRange(args, 1, args.length));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dev.lotus.studio.command.subcommand;


import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.entity.Player;

import java.util.Arrays;
Expand Down Expand Up @@ -28,24 +30,44 @@ public GenericCommand(String name, String usage, Collection<T> subCommands) {
public String getUsage() {
String children = subCommands.stream()
.map(SubCommand::getName)
.reduce((a, b) -> a + "|" + b)
.reduce((a, b) -> a + " | " + b)
.orElse("");
return "/" + name + " <" + children + ">";
return "/" + name + " [ " + children + " ]";
}

public String getFullUsage(String parentChain) {
@Override
public Component getFullUsage(String parentChain) {
// Формуємо повний ланцюжок команд
String full = (parentChain == null || parentChain.isEmpty())
? name
: parentChain + " " + name;
? "/" + name
: "/" + parentChain + " " + name;

return "/" + full + " ..."; // для опису групи
// Формуємо список підкоманд
String children = subCommands.stream()
.map(SubCommand::getName)
.reduce((a, b) -> a + " | " + b)
.orElse("...");

return Component.text("Invalid command usage.", NamedTextColor.RED)
.append(Component.newline())
.append(Component.text("Correct: ", NamedTextColor.GRAY))
.append(Component.text(full + " ", NamedTextColor.AQUA))
.append(Component.text("[ " + children + " ]", NamedTextColor.GRAY));
}





@Override
public boolean execute(Player player, String[] args) {
if (!player.hasPermission(Permission.USE.getNode())){
player.sendMessage("you don't have permission");
return true;
}

if (args.length == 0) {
player.sendMessage(getUsage());
player.sendMessage(getFullUsage("faf"));
return true;
}

Expand All @@ -56,7 +78,7 @@ public boolean execute(Player player, String[] args) {
}
}

player.sendMessage("§cНеизвестная подкоманда. " + getUsage());
player.sendMessage(getFullUsage("faf"));
return true;
}

Expand Down
86 changes: 81 additions & 5 deletions src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package dev.lotus.studio.command.subcommand;

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextColor;
import org.bukkit.entity.Player;

import java.util.List;
Expand All @@ -10,17 +15,88 @@ public class HelpCommand implements SubCommand {


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

@Override
public boolean execute(Player player, String[] args) {
player.sendMessage("§aДоступні команди:");
player.sendMessage(" §e/item <armor|view|eat>");
player.sendMessage(" §e/savezone <pos1|pos2|save|list|remove>");
player.sendMessage(" §e/help");
player.sendMessage(Component.text("=== Frost-And-Fallout Commands ===")
.color(TextColor.color(0x46D56B)));
player.sendMessage(" ");

// Item commands
player.sendMessage(Component.text()
.append(Component.text("/faf item armor", NamedTextColor.WHITE)
.hoverEvent(HoverEvent.showText(Component.text("Equip or modify armor pieces", NamedTextColor.AQUA)))
.clickEvent(ClickEvent.suggestCommand("/item armor")))
.append(Component.text(" - Armor management", NamedTextColor.GRAY))
);

player.sendMessage(Component.text()
.append(Component.text("/faf item view", NamedTextColor.WHITE)
.hoverEvent(HoverEvent.showText(Component.text("Inspect item details", NamedTextColor.AQUA)))
.clickEvent(ClickEvent.suggestCommand("/item view")))
.append(Component.text(" - View custom items", NamedTextColor.GRAY))
);

player.sendMessage(Component.text()
.append(Component.text("/faf item eat", NamedTextColor.WHITE)
.hoverEvent(HoverEvent.showText(Component.text("Consume custom food items", NamedTextColor.AQUA)))
.clickEvent(ClickEvent.suggestCommand("/item eat")))
.append(Component.text(" - Eat special food", NamedTextColor.GRAY))
);

// SafeZone commands
player.sendMessage(Component.text()
.append(Component.text("/faf savezone pos1", NamedTextColor.DARK_AQUA)
.hoverEvent(HoverEvent.showText(Component.text("Set the first corner of the SafeZone", NamedTextColor.WHITE)))
.clickEvent(ClickEvent.suggestCommand("/savezone pos1")))
.append(Component.text(" - Set first point", NamedTextColor.GRAY))
);

player.sendMessage(Component.text()
.append(Component.text("/faf savezone pos2", NamedTextColor.DARK_AQUA)
.hoverEvent(HoverEvent.showText(Component.text("Set the second corner of the SafeZone", NamedTextColor.WHITE)))
.clickEvent(ClickEvent.suggestCommand("/savezone pos2")))
.append(Component.text(" - Set second point", NamedTextColor.GRAY))
);

player.sendMessage(Component.text()
.append(Component.text("/faf savezone save <name>", NamedTextColor.DARK_AQUA)
.hoverEvent(HoverEvent.showText(Component.text("Save a SafeZone with the given name", NamedTextColor.WHITE)))
.clickEvent(ClickEvent.suggestCommand("/savezone save ")))
.append(Component.text(" - Save zone", NamedTextColor.GRAY))
);

player.sendMessage(Component.text()
.append(Component.text("/faf savezone list", NamedTextColor.DARK_AQUA)
.hoverEvent(HoverEvent.showText(Component.text("List all saved SafeZones", NamedTextColor.WHITE)))
.clickEvent(ClickEvent.suggestCommand("/savezone list")))
.append(Component.text(" - List zones", NamedTextColor.GRAY))
);

player.sendMessage(Component.text()
.append(Component.text("/faf savezone remove <ID>", NamedTextColor.DARK_AQUA)
.hoverEvent(HoverEvent.showText(Component.text("Remove a SafeZone by its ID", NamedTextColor.WHITE)))
.clickEvent(ClickEvent.suggestCommand("/savezone remove ")))
.append(Component.text(" - Remove zone", NamedTextColor.GRAY))
);

// Help command
player.sendMessage(Component.text()
.append(Component.text("/faf help", NamedTextColor.BLUE)
.hoverEvent(HoverEvent.showText(Component.text("Show this help message", NamedTextColor.WHITE)))
.clickEvent(ClickEvent.suggestCommand("/help")))
.append(Component.text(" - Show commands", NamedTextColor.GRAY))
);
player.sendMessage(" ");
player.sendMessage(Component.text("===============================").color(TextColor.color(0x46D56B)));
player.sendMessage(" ");
player.sendMessage(Component.text(" ⓁⓄⓉⓊⓈ ⓈⓉⓊⒹⒾⓄ").color(TextColor.color(0xFFB340)));

return true;
}


@Override
public List<String> tabComplete(Player player, String[] args) {
return List.of();
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/dev/lotus/studio/command/subcommand/Permission.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dev.lotus.studio.command.subcommand;

public enum Permission {
ITEM("frostandfallout.item"),
RELOAD("frostandfallout.reload"),
SAFE_ZONE("frostandfallout.safezone"),
USE("frostandfallout.use");

private final String node;

Permission(String node) {
this.node = node;
}

public String getNode() {
return node;
}
}
26 changes: 22 additions & 4 deletions src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dev.lotus.studio.command.subcommand;


import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.entity.Player;

import java.util.List;
Expand All @@ -11,12 +13,28 @@ public interface SubCommand {
boolean execute(Player player, String[] args);
List<String> tabComplete(Player player, String[] args);

default String getFullUsage(String parentChain) {
default Component getFullUsage(String parentChain) {
Component base = Component.text("Invalid command usage.", NamedTextColor.RED)
.append(Component.newline())
.append(Component.text("Correct: ", NamedTextColor.GRAY));

if (parentChain == null || parentChain.isEmpty()) {
return "/" + getName() + " " + getUsage();
return base.append(Component.text("/", NamedTextColor.AQUA)
.append(Component.text(getName(), NamedTextColor.AQUA))
.append(Component.space())
.append(Component.text(getUsage(), NamedTextColor.GRAY))
);
}
return "/" + parentChain + " " + getName() +
(getUsage().isEmpty() ? "" : " " + getUsage());

return base.append(Component.text("/", NamedTextColor.AQUA)
.append(Component.text(parentChain + " " + getName(), NamedTextColor.AQUA))
.append(getUsage().isEmpty()
? Component.empty()
: Component.space().append(Component.text(getUsage(), NamedTextColor.GRAY))
)
);
}


}

Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package dev.lotus.studio.command.subcommand.item.factory;

import dev.lotus.studio.command.subcommand.Permission;
import dev.lotus.studio.command.subcommand.SubCommand;
import dev.lotus.studio.item.CustomItemManager;
import org.bukkit.entity.Player;

public abstract class AbstractItemSubCommand implements SubCommand {
protected final CustomItemManager itemManager;
Expand All @@ -10,4 +12,15 @@ public AbstractItemSubCommand(CustomItemManager itemManager) {
this.itemManager = itemManager;
}

@Override
public final boolean execute(Player player, String[] args) {
if (!player.hasPermission(Permission.ITEM.getNode())) {
player.sendMessage("§cYou don't have permission to use this command.");
return true;
}
return perform(player, args);
}

protected abstract boolean perform(Player player, String[] args);

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,20 @@ public String getName() {

@Override
public String getUsage() {
return "<give|list|help>";
return "[give | list | help]";
}

@Override
public boolean execute(Player player, String[] args) {
public boolean perform(Player player, String[] args) {
if (args.length == 0) {
player.sendMessage("§7Использование: " + getFullUsage("lotus item"));
player.sendMessage(getFullUsage("faf item"));
return true;
}

switch (args[0].toLowerCase()) {
case "give" -> {
if (args.length != 2) {
player.sendMessage("§7Использование: /lotus item armor give <itemKey>");
player.sendMessage("§7Использование: /faf item armor give <itemKey>");
return true;
}
var customItem = itemManager.getItem(args[1]);
Expand All @@ -56,7 +56,7 @@ public boolean execute(Player player, String[] args) {
player.sendMessage("/main item armor list");
player.sendMessage("/main item armor help");
}
default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item"));
default -> player.sendMessage(getFullUsage("faf item"));
}

return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,20 @@ public String getName() {

@Override
public String getUsage() {
return "<give|list|help>";
return "[give | list | help]";
}

@Override
public boolean execute(Player player, String[] args) {
public boolean perform(Player player, String[] args) {
if (args.length == 0) {
player.sendMessage("§7Использование: " + getFullUsage("lotus item"));
player.sendMessage(getFullUsage("faf item"));
return true;
}

switch (args[0].toLowerCase()) {
case "give" -> {
if (args.length != 2) {
player.sendMessage("§7Использование: /lotus item eat give <itemKey>");
player.sendMessage("§7Использование: /faf item eat give <itemKey>");
return true;
}
var eatItem = itemManager.getEatItem(args[1]);
Expand All @@ -60,7 +60,7 @@ public boolean execute(Player player, String[] args) {
player.sendMessage("/main item eat list");
player.sendMessage("/main item eat help");
}
default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item"));
default -> player.sendMessage(getFullUsage("faf item"));
}

return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,20 @@ public String getName() {

@Override
public String getUsage() {
return "<give|list|help>";
return "[give | list | help]";
}

@Override
public boolean execute(Player player, String[] args) {
public boolean perform(Player player, String[] args) {
if (args.length == 0) {
player.sendMessage("§7Использование: " + getFullUsage("lotus item"));
player.sendMessage(getFullUsage("faf item"));
return true;
}

switch (args[0].toLowerCase()) {
case "give" -> {
if (args.length != 2) {
player.sendMessage("§7Использование: /lotus item view give <itemKey>");
player.sendMessage("§7Использование: /faf item view give <itemKey>");
return true;
}
var viewItem = itemManager.getViewItem(args[1]);
Expand All @@ -60,7 +60,7 @@ public boolean execute(Player player, String[] args) {
player.sendMessage("/main item view list");
player.sendMessage("/main item view help");
}
default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item"));
default -> player.sendMessage(getFullUsage("faf item"));
}

return true;
Expand Down
Loading