feat: lore 相关指令
This commit is contained in:
@@ -4,6 +4,7 @@ import cn.hamster3.mc.plugin.core.bukkit.api.CoreBukkitAPI;
|
|||||||
import cn.hamster3.mc.plugin.core.bukkit.command.ParentCommand;
|
import cn.hamster3.mc.plugin.core.bukkit.command.ParentCommand;
|
||||||
import cn.hamster3.mc.plugin.core.bukkit.command.debug.BlockInfoCommand;
|
import cn.hamster3.mc.plugin.core.bukkit.command.debug.BlockInfoCommand;
|
||||||
import cn.hamster3.mc.plugin.core.bukkit.command.debug.YamlCommand;
|
import cn.hamster3.mc.plugin.core.bukkit.command.debug.YamlCommand;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.command.lore.ParentLoreCommand;
|
||||||
import cn.hamster3.mc.plugin.core.bukkit.hook.PointAPI;
|
import cn.hamster3.mc.plugin.core.bukkit.hook.PointAPI;
|
||||||
import cn.hamster3.mc.plugin.core.bukkit.hook.VaultAPI;
|
import cn.hamster3.mc.plugin.core.bukkit.hook.VaultAPI;
|
||||||
import cn.hamster3.mc.plugin.core.bukkit.listener.CallbackListener;
|
import cn.hamster3.mc.plugin.core.bukkit.listener.CallbackListener;
|
||||||
@@ -19,7 +20,7 @@ import java.util.List;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class HamsterCorePlugin extends JavaPlugin {
|
public class HamsterCorePlugin extends JavaPlugin {
|
||||||
private static final ParentCommand COMMAND_EXECUTOR = new ParentCommand("core");
|
public static final ParentCommand COMMAND_EXECUTOR = new ParentCommand("core");
|
||||||
private static HamsterCorePlugin instance;
|
private static HamsterCorePlugin instance;
|
||||||
|
|
||||||
public static HamsterCorePlugin getInstance() {
|
public static HamsterCorePlugin getInstance() {
|
||||||
@@ -56,6 +57,9 @@ public class HamsterCorePlugin extends JavaPlugin {
|
|||||||
logger.info("已添加指令: " + BlockInfoCommand.INSTANCE.getName() + " .");
|
logger.info("已添加指令: " + BlockInfoCommand.INSTANCE.getName() + " .");
|
||||||
COMMAND_EXECUTOR.addChildCommand(YamlCommand.INSTANCE);
|
COMMAND_EXECUTOR.addChildCommand(YamlCommand.INSTANCE);
|
||||||
logger.info("已添加指令: " + YamlCommand.INSTANCE.getName() + " .");
|
logger.info("已添加指令: " + YamlCommand.INSTANCE.getName() + " .");
|
||||||
|
COMMAND_EXECUTOR.addChildCommand(ParentLoreCommand.INSTANCE);
|
||||||
|
logger.info("已添加指令: " + ParentLoreCommand.INSTANCE.getName() + " .");
|
||||||
|
|
||||||
long time = System.currentTimeMillis() - start;
|
long time = System.currentTimeMillis() - start;
|
||||||
logger.info("仓鼠核心已启动,总计耗时 " + time + " ms.");
|
logger.info("仓鼠核心已启动,总计耗时 " + time + " ms.");
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
package cn.hamster3.mc.plugin.core.bukkit.command;
|
package cn.hamster3.mc.plugin.core.bukkit.command;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.TabExecutor;
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public abstract class ChildCommand implements TabExecutor {
|
public abstract class ChildCommand implements TabExecutor {
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -11,8 +11,7 @@ public abstract class ChildCommand implements TabExecutor {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public abstract String getUsage();
|
public abstract String getUsage();
|
||||||
|
|
||||||
@Nullable
|
public abstract boolean hasPermission(@NotNull CommandSender sender);
|
||||||
public abstract String getPermission();
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public abstract String getDescription();
|
public abstract String getDescription();
|
||||||
|
@@ -3,17 +3,14 @@ package cn.hamster3.mc.plugin.core.bukkit.command;
|
|||||||
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
|
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.TabExecutor;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class ParentCommand implements TabExecutor {
|
public class ParentCommand extends ChildCommand {
|
||||||
@NotNull
|
@NotNull
|
||||||
private final String name;
|
private final String name;
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -33,6 +30,11 @@ public class ParentCommand implements TabExecutor {
|
|||||||
childCommands = new ArrayList<>();
|
childCommands = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public String getUsage() {
|
public String getUsage() {
|
||||||
if (parent == null) {
|
if (parent == null) {
|
||||||
@@ -41,30 +43,67 @@ public class ParentCommand implements TabExecutor {
|
|||||||
return parent.getUsage() + " " + name;
|
return parent.getUsage() + " " + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getDescription() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<ChildCommand> getChildCommands() {
|
public List<ChildCommand> getChildCommands() {
|
||||||
return childCommands;
|
return childCommands;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public List<ChildCommand> getEndChildCommands() {
|
||||||
|
ArrayList<ChildCommand> list = new ArrayList<>();
|
||||||
|
for (ChildCommand command : childCommands) {
|
||||||
|
if (command instanceof ParentCommand) {
|
||||||
|
list.addAll(((ParentCommand) command).getEndChildCommands());
|
||||||
|
} else {
|
||||||
|
list.add(command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
public void addChildCommand(@NotNull ChildCommand command) {
|
public void addChildCommand(@NotNull ChildCommand command) {
|
||||||
childCommands.add(command);
|
childCommands.add(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getCommandHelp(CommandSender sender) {
|
||||||
|
HashMap<String, String> map = new HashMap<>();
|
||||||
|
for (ChildCommand child : childCommands) {
|
||||||
|
if (!child.hasPermission(sender)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (child instanceof ParentCommand) {
|
||||||
|
Map<String, String> childMap = ((ParentCommand) child).getCommandHelp(sender);
|
||||||
|
map.putAll(childMap);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
map.put(getUsage() + " " + child.getUsage(), child.getDescription());
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
sender.sendMessage("§e==================== [" + name + "使用帮助] ====================");
|
sender.sendMessage("§e==================== [" + name + "使用帮助] ====================");
|
||||||
int maxLength = childCommands.stream()
|
Map<String, String> helpMap = getCommandHelp(sender);
|
||||||
.filter(o -> o.getPermission() == null || sender.hasPermission(o.getPermission()))
|
int maxLength = helpMap.keySet().stream()
|
||||||
.map(o -> o.getUsage().length())
|
.map(String::length)
|
||||||
.max(Integer::compareTo)
|
.max(Integer::compareTo)
|
||||||
.orElse(-1);
|
.orElse(-1);
|
||||||
for (ChildCommand child : childCommands) {
|
ArrayList<Map.Entry<String, String>> list = new ArrayList<>(helpMap.entrySet());
|
||||||
String permission = child.getPermission();
|
list.sort(Map.Entry.comparingByKey());
|
||||||
if (permission != null && !sender.hasPermission(permission)) {
|
for (Map.Entry<String, String> entry : list) {
|
||||||
continue;
|
sender.sendMessage(String.format("§a%-" + maxLength + "s - %s", entry.getKey(), entry.getValue()));
|
||||||
}
|
|
||||||
sender.sendMessage(String.format("§a%s %-" + maxLength + "s - %s", getUsage(), child.getUsage(), child.getDescription()));
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -79,6 +118,11 @@ public class ParentCommand implements TabExecutor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
if (args.length == 0) {
|
||||||
|
return childCommands.stream()
|
||||||
|
.map(ChildCommand::getName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
for (ChildCommand child : childCommands) {
|
for (ChildCommand child : childCommands) {
|
||||||
if (args[0].equalsIgnoreCase(child.getName())) {
|
if (args[0].equalsIgnoreCase(child.getName())) {
|
||||||
return child.onTabComplete(sender, command, alias, Arrays.copyOfRange(args, 1, args.length));
|
return child.onTabComplete(sender, command, alias, Arrays.copyOfRange(args, 1, args.length));
|
||||||
|
@@ -7,7 +7,6 @@ import org.bukkit.command.Command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -30,8 +29,8 @@ public class BlockInfoCommand extends ChildCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable String getPermission() {
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
return null;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -14,7 +14,6 @@ import org.bukkit.inventory.ItemFlag;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -39,8 +38,8 @@ public class YamlCommand extends ChildCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable String getPermission() {
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
return null;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -0,0 +1,77 @@
|
|||||||
|
package cn.hamster3.mc.plugin.core.bukkit.command.lore;
|
||||||
|
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitUtils;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class LoreAddCommand extends ChildCommand {
|
||||||
|
public static final LoreAddCommand INSTANCE = new LoreAddCommand();
|
||||||
|
|
||||||
|
private LoreAddCommand() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getName() {
|
||||||
|
return "add";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getUsage() {
|
||||||
|
return "add <lore>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getDescription() {
|
||||||
|
return "为手持物品添加一条 lore";
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (args.length < 1) {
|
||||||
|
CoreMessage.COMMAND_LORE_EMPTY_INPUT.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
ItemStack stack = player.getItemInHand();
|
||||||
|
if (BukkitUtils.isEmptyItemStack(stack)) {
|
||||||
|
CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
ItemMeta meta = stack.getItemMeta();
|
||||||
|
if (meta != null) {
|
||||||
|
List<String> lore = meta.getLore();
|
||||||
|
if (lore == null) {
|
||||||
|
lore = new ArrayList<>();
|
||||||
|
}
|
||||||
|
lore.add(String.join(" ", args));
|
||||||
|
meta.setLore(lore);
|
||||||
|
}
|
||||||
|
stack.setItemMeta(meta);
|
||||||
|
CoreMessage.COMMAND_LORE_ADD_SUCCESS.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,73 @@
|
|||||||
|
package cn.hamster3.mc.plugin.core.bukkit.command.lore;
|
||||||
|
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitUtils;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class LoreClearCommand extends ChildCommand {
|
||||||
|
public static final LoreClearCommand INSTANCE = new LoreClearCommand();
|
||||||
|
|
||||||
|
private LoreClearCommand() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getName() {
|
||||||
|
return "clear";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getUsage() {
|
||||||
|
return "clear";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getDescription() {
|
||||||
|
return "清除手持物品的所有 lore";
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
ItemStack stack = player.getItemInHand();
|
||||||
|
if (BukkitUtils.isEmptyItemStack(stack)) {
|
||||||
|
CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
ItemMeta meta = stack.getItemMeta();
|
||||||
|
if (meta != null) {
|
||||||
|
List<String> lore = meta.getLore();
|
||||||
|
if (lore == null || lore.isEmpty()) {
|
||||||
|
CoreMessage.COMMAND_LORE_CLEAR_NOTHING.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
meta.setLore(new ArrayList<>());
|
||||||
|
}
|
||||||
|
stack.setItemMeta(meta);
|
||||||
|
CoreMessage.COMMAND_LORE_CLEAR_SUCCESS.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,71 @@
|
|||||||
|
package cn.hamster3.mc.plugin.core.bukkit.command.lore;
|
||||||
|
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitUtils;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class LoreNameCommand extends ChildCommand {
|
||||||
|
public static final LoreNameCommand INSTANCE = new LoreNameCommand();
|
||||||
|
|
||||||
|
private LoreNameCommand() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getName() {
|
||||||
|
return "name";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getUsage() {
|
||||||
|
return "name <name>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getDescription() {
|
||||||
|
return "更改手持物品的显示名称";
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (args.length < 1) {
|
||||||
|
CoreMessage.COMMAND_LORE_EMPTY_INPUT.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
ItemStack stack = player.getItemInHand();
|
||||||
|
if (BukkitUtils.isEmptyItemStack(stack)) {
|
||||||
|
CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
ItemMeta meta = stack.getItemMeta();
|
||||||
|
if (meta != null) {
|
||||||
|
meta.setDisplayName(String.join(" ", args));
|
||||||
|
}
|
||||||
|
stack.setItemMeta(meta);
|
||||||
|
CoreMessage.COMMAND_LORE_NAME_SUCCESS.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,86 @@
|
|||||||
|
package cn.hamster3.mc.plugin.core.bukkit.command.lore;
|
||||||
|
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitUtils;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class LoreRemoveCommand extends ChildCommand {
|
||||||
|
public static final LoreRemoveCommand INSTANCE = new LoreRemoveCommand();
|
||||||
|
|
||||||
|
private LoreRemoveCommand() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getName() {
|
||||||
|
return "remove";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getUsage() {
|
||||||
|
return "remove <line>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getDescription() {
|
||||||
|
return "为手持物品删除一条 lore";
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (args.length < 1) {
|
||||||
|
CoreMessage.COMMAND_LORE_REMOVE_NOT_INPUT_NUMBER.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int i = Integer.parseInt(args[0]);
|
||||||
|
if (i <= 0) {
|
||||||
|
CoreMessage.COMMAND_LORE_REMOVE_NOT_INPUT_NUMBER_ERROR.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
ItemStack stack = player.getItemInHand();
|
||||||
|
if (BukkitUtils.isEmptyItemStack(stack)) {
|
||||||
|
CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
ItemMeta meta = stack.getItemMeta();
|
||||||
|
if (meta != null) {
|
||||||
|
List<String> lore = meta.getLore();
|
||||||
|
if (lore == null) {
|
||||||
|
lore = new ArrayList<>();
|
||||||
|
}
|
||||||
|
if (lore.size() < i) {
|
||||||
|
CoreMessage.COMMAND_LORE_REMOVE_INDEX_OUT_OF_RANGE.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
lore.remove(i - 1);
|
||||||
|
meta.setLore(lore);
|
||||||
|
}
|
||||||
|
stack.setItemMeta(meta);
|
||||||
|
CoreMessage.COMMAND_LORE_REMOVE_SUCCESS.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,92 @@
|
|||||||
|
package cn.hamster3.mc.plugin.core.bukkit.command.lore;
|
||||||
|
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitUtils;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class LoreSetCommand extends ChildCommand {
|
||||||
|
public static final LoreSetCommand INSTANCE = new LoreSetCommand();
|
||||||
|
|
||||||
|
private LoreSetCommand() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getName() {
|
||||||
|
return "set";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getUsage() {
|
||||||
|
return "set <line> <lore>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull CommandSender sender) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getDescription() {
|
||||||
|
return "设置指定行数的 lore";
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (args.length < 1) {
|
||||||
|
CoreMessage.COMMAND_LORE_SET_NOT_INPUT_NUMBER.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (args.length < 2) {
|
||||||
|
CoreMessage.COMMAND_LORE_SET_NOT_INPUT_TEXT.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int i = Integer.parseInt(args[0]);
|
||||||
|
if (i <= 0) {
|
||||||
|
CoreMessage.COMMAND_LORE_SET_NOT_INPUT_NUMBER_ERROR.show(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
ItemStack stack = player.getItemInHand();
|
||||||
|
if (BukkitUtils.isEmptyItemStack(stack)) {
|
||||||
|
CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
ItemMeta meta = stack.getItemMeta();
|
||||||
|
if (meta != null) {
|
||||||
|
List<String> lore = meta.getLore();
|
||||||
|
if (lore == null) {
|
||||||
|
lore = new ArrayList<>();
|
||||||
|
}
|
||||||
|
if (lore.size() < i) {
|
||||||
|
CoreMessage.COMMAND_LORE_SET_INDEX_OUT_OF_RANGE.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
args = Arrays.copyOfRange(args, 1, args.length);
|
||||||
|
lore.set(i - 1, String.join(" ", args));
|
||||||
|
meta.setLore(lore);
|
||||||
|
}
|
||||||
|
stack.setItemMeta(meta);
|
||||||
|
CoreMessage.COMMAND_LORE_SET_SUCCESS.show(player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,28 @@
|
|||||||
|
package cn.hamster3.mc.plugin.core.bukkit.command.lore;
|
||||||
|
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
|
||||||
|
import cn.hamster3.mc.plugin.core.bukkit.command.ParentCommand;
|
||||||
|
import cn.hamster3.mc.plugin.core.common.util.CommonUtils;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
public class ParentLoreCommand extends ParentCommand {
|
||||||
|
public static final ParentLoreCommand INSTANCE = new ParentLoreCommand("lore", HamsterCorePlugin.COMMAND_EXECUTOR);
|
||||||
|
|
||||||
|
private ParentLoreCommand(@NotNull String name, @Nullable ParentCommand parent) {
|
||||||
|
super(name, parent);
|
||||||
|
addChildCommand(LoreAddCommand.INSTANCE);
|
||||||
|
addChildCommand(LoreRemoveCommand.INSTANCE);
|
||||||
|
addChildCommand(LoreSetCommand.INSTANCE);
|
||||||
|
addChildCommand(LoreClearCommand.INSTANCE);
|
||||||
|
addChildCommand(LoreNameCommand.INSTANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
CommonUtils.replaceColorCode(args);
|
||||||
|
return super.onCommand(sender, command, label, args);
|
||||||
|
}
|
||||||
|
}
|
@@ -8,7 +8,23 @@ public enum CoreMessage {
|
|||||||
COMMAND_MUST_USED_BY_PLAYER,
|
COMMAND_MUST_USED_BY_PLAYER,
|
||||||
|
|
||||||
COMMAND_DEBUG_BLOCK_INFO_ON,
|
COMMAND_DEBUG_BLOCK_INFO_ON,
|
||||||
COMMAND_DEBUG_BLOCK_INFO_OFF;
|
COMMAND_DEBUG_BLOCK_INFO_OFF,
|
||||||
|
|
||||||
|
COMMAND_LORE_HAND_EMPTY,
|
||||||
|
COMMAND_LORE_EMPTY_INPUT,
|
||||||
|
COMMAND_LORE_ADD_SUCCESS,
|
||||||
|
COMMAND_LORE_CLEAR_NOTHING,
|
||||||
|
COMMAND_LORE_CLEAR_SUCCESS,
|
||||||
|
COMMAND_LORE_NAME_SUCCESS,
|
||||||
|
COMMAND_LORE_REMOVE_NOT_INPUT_NUMBER,
|
||||||
|
COMMAND_LORE_REMOVE_NOT_INPUT_NUMBER_ERROR,
|
||||||
|
COMMAND_LORE_REMOVE_INDEX_OUT_OF_RANGE,
|
||||||
|
COMMAND_LORE_REMOVE_SUCCESS,
|
||||||
|
COMMAND_LORE_SET_NOT_INPUT_NUMBER,
|
||||||
|
COMMAND_LORE_SET_NOT_INPUT_NUMBER_ERROR,
|
||||||
|
COMMAND_LORE_SET_NOT_INPUT_TEXT,
|
||||||
|
COMMAND_LORE_SET_INDEX_OUT_OF_RANGE,
|
||||||
|
COMMAND_LORE_SET_SUCCESS;
|
||||||
|
|
||||||
public void show(CommandSender sender) {
|
public void show(CommandSender sender) {
|
||||||
sender.sendMessage(name());
|
sender.sendMessage(name());
|
||||||
|
@@ -90,16 +90,11 @@ public final class CommonUtils {
|
|||||||
* 替换颜色代码
|
* 替换颜色代码
|
||||||
*
|
*
|
||||||
* @param strings 要替换的字符串
|
* @param strings 要替换的字符串
|
||||||
* @return 替换后的字符串
|
|
||||||
*/
|
*/
|
||||||
@NotNull
|
public static void replaceColorCode(@NotNull String[] strings) {
|
||||||
public static ArrayList<String> replaceColorCode(@Nullable String[] strings) {
|
for (int i = 0; i < strings.length; i++) {
|
||||||
ArrayList<String> list = new ArrayList<>();
|
strings[i] = strings[i].replace("&", "§");
|
||||||
if (strings == null) return list;
|
|
||||||
for (String s : strings) {
|
|
||||||
list.add(replaceColorCode(s));
|
|
||||||
}
|
}
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
Reference in New Issue
Block a user