package net.t7seven7t.craftfx.command; import com.google.common.base.Joiner; import com.sk89q.intake.Command; import com.sk89q.intake.Require; import com.sk89q.intake.parametric.annotation.Optional; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import net.t7seven7t.craftfx.CraftFX; import net.t7seven7t.craftfx.item.ItemDefinition; import net.t7seven7t.util.intake.module.annotation.Sender; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; import static net.t7seven7t.craftfx.util.MessageUtil.message; /** * */ public class AdminCommands { @Command( aliases = {"give", "g"}, desc = "command-give-desc", usage = "command-give-usage" ) @Require("craftfx.command.give") public void give(List<Player> players, ItemDefinition item, @Optional("1") int amount) { final ItemStack i = item.getItem(); i.setAmount(amount); for (Player p : players) { p.getInventory().addItem(i); } } @Command( aliases = {"item", "i"}, desc = "command-item-desc", usage = "command-item-usage" ) @Require("craftfx.command.item") public void item(@Sender Player sender, ItemDefinition item, @Optional("1") int amount) { final ItemStack i = item.getItem(); i.setAmount(amount); sender.getInventory().addItem(i); } @Command( aliases = {"list", "li"}, desc = "command-list-desc", usage = "command-list-usage" ) @Require("craftfx.command.list") public void list(CraftFX fx, CommandSender sender) { final List<ItemDefinition> items = fx.getItemRegistry().getItemDefinitions(); if (sender instanceof Player) { final List<BaseComponent> components = new ArrayList<>(); final TextComponent c = new TextComponent(""); components.add(c); final Iterator<ItemDefinition> it = items.iterator(); while (it.hasNext()) { final ItemDefinition item = it.next(); final TextComponent component = new TextComponent(item.getName()); final HoverEvent hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_ITEM, new BaseComponent[]{ new TextComponent(fx.getNmsInterface().itemToJson(item.getItem())) }); component.setHoverEvent(hoverEvent); if (sender.hasPermission("craftfx.command.item")) { final ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/fx item " + item.getName() + " "); component.setClickEvent(clickEvent); } component.setColor(ChatColor.YELLOW); components.add(component); if (it.hasNext()) { components.add(new TextComponent(", ")); } } ((Player) sender).spigot().sendMessage(components.toArray(new BaseComponent[0])); } else { message(sender, "&e%s", Joiner.on(", ").join(items.stream() .map(ItemDefinition::getName) .collect(Collectors.toList()))); } } @Command( aliases = {"reload"}, desc = "command-reload-desc", usage = "command-reload-usage" ) @Require("craftfx.command.reload") public void reload(CraftFX fx, CommandSender sender) { fx.reload(); message(sender, "&a%s reloaded!", fx.plugin().getDescription().getFullName()); } }