1
mirror of https://github.com/CarmJos/ScriptItems synced 2026-06-04 20:37:33 +08:00
Files
ScriptItems/src/main/java/cc/carm/plugin/scriptitems/command/ScriptItemsCommand.java
T
2022-03-13 17:43:36 +08:00

167 lines
6.1 KiB
Java

package cc.carm.plugin.scriptitems.command;
import cc.carm.plugin.scriptitems.ScriptItemsAPI;
import cc.carm.plugin.scriptitems.configuration.PluginMessages;
import cc.carm.plugin.scriptitems.item.ItemSettings;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
public class ScriptItemsCommand implements CommandExecutor, TabCompleter {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
if (args.length >= 1) {
String aim = args[0];
if (aim.equalsIgnoreCase("reload")) {
try {
ScriptItemsAPI.getConfigManager().reload();
sender.sendMessage("配置文件重载完成!");
} catch (Exception e) {
sender.sendMessage("配置文件重载失败!");
e.printStackTrace();
}
return true;
} else if (aim.equalsIgnoreCase("apply")) {
if (args.length < 2) {
PluginMessages.USAGE.send(sender);
return true;
}
if (!(sender instanceof Player)) {
PluginMessages.ONLY_PLAYER.send(sender);
return true;
}
ItemSettings settings = ScriptItemsAPI.getItemsManager().getItemSettings(args[1]);
if (settings == null) {
PluginMessages.NOT_EXISTS.send(sender, args[1]);
return true;
}
Player player = (Player) sender;
ItemStack item = player.getInventory().getItemInMainHand();
if (item.getType() == Material.AIR) {
PluginMessages.USE_ITEM.send(sender);
return true;
}
ItemStack after = settings.applyItem(item);
player.getInventory().setItemInMainHand(after);
PluginMessages.APPLIED.send(sender, item.getType().name(), settings.getName());
return true;
} else if (aim.equalsIgnoreCase("give")) {
if (args.length < 3) {
PluginMessages.USAGE.send(sender);
return true;
}
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
PluginMessages.NOT_ONLINE.send(sender, args[1]);
return true;
}
ItemSettings settings = ScriptItemsAPI.getItemsManager().getItemSettings(args[2]);
if (settings == null) {
PluginMessages.NOT_EXISTS.send(sender, args[2]);
return true;
}
int amount = 1;
if (args.length >= 4) {
try {
amount = Integer.parseInt(args[3]);
} catch (Exception ignored) {
amount = -1;
}
}
if (amount < 1) {
PluginMessages.WRONG_AMOUNT.send(sender);
return true;
}
ItemStack item = settings.generateItem(amount);
if (item == null) {
PluginMessages.WRONG_ITEM.send(sender);
return true;
}
HashMap<Integer, ItemStack> remain = player.getInventory().addItem(item);
if (remain.isEmpty()) {
PluginMessages.GIVEN_ALL.send(sender, player.getName(), item.getAmount(), settings.getName());
} else {
int remainAmount = remain.values().stream().mapToInt(ItemStack::getAmount).sum();
PluginMessages.GIVEN_SOME.send(sender, player.getName(), item.getAmount() - remainAmount, settings.getName(), remainAmount);
}
return true;
} else {
PluginMessages.USAGE.send(sender);
return true;
}
} else {
PluginMessages.USAGE.send(sender);
return true;
}
}
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
List<String> allCompletes = new ArrayList<>();
switch (args.length) {
case 1: {
allCompletes.add("help");
allCompletes.add("give");
if (sender instanceof Player) allCompletes.add("apply");
allCompletes.add("reload");
break;
}
case 2: {
String aim = args[0];
if (aim.equalsIgnoreCase("give")) {
allCompletes = Bukkit.getOnlinePlayers().stream().map(HumanEntity::getName).collect(Collectors.toList());
} else if (aim.equalsIgnoreCase("apply")) {
allCompletes = new ArrayList<>(ScriptItemsAPI.getItemsManager().listItemSettings().keySet());
}
break;
}
case 3: {
String aim = args[0];
if (aim.equalsIgnoreCase("give")) {
allCompletes = new ArrayList<>(ScriptItemsAPI.getItemsManager().listItemSettings().keySet());
}
break;
}
}
return allCompletes.stream()
.filter(s -> StringUtil.startsWithIgnoreCase(s, args[args.length - 1]))
.limit(10).collect(Collectors.toList());
}
}