diff --git a/src/main/java/com/songoda/epicheads/command/CommandManager.java b/src/main/java/com/songoda/epicheads/command/CommandManager.java index 3f9b1c1..acc9627 100644 --- a/src/main/java/com/songoda/epicheads/command/CommandManager.java +++ b/src/main/java/com/songoda/epicheads/command/CommandManager.java @@ -32,6 +32,7 @@ public class CommandManager implements CommandExecutor { addCommand(new CommandReload(commandEpicHeads)); addCommand(new CommandUrl(commandEpicHeads)); addCommand(new CommandBase64(commandEpicHeads)); + addCommand(new CommandGive(commandEpicHeads)); for (AbstractCommand abstractCommand : commands) { if (abstractCommand.getParent() != null) continue; diff --git a/src/main/java/com/songoda/epicheads/command/commands/CommandGive.java b/src/main/java/com/songoda/epicheads/command/commands/CommandGive.java new file mode 100644 index 0000000..c6f81d1 --- /dev/null +++ b/src/main/java/com/songoda/epicheads/command/commands/CommandGive.java @@ -0,0 +1,88 @@ +package com.songoda.epicheads.command.commands; + +import com.songoda.epicheads.EpicHeads; +import com.songoda.epicheads.command.AbstractCommand; +import com.songoda.epicheads.head.Head; +import com.songoda.epicheads.utils.Methods; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class CommandGive extends AbstractCommand { + + public CommandGive(AbstractCommand parent) { + super(parent, false, "give"); + } + + @Override + protected ReturnType runCommand(EpicHeads instance, CommandSender sender, String... args) { + + if (args.length != 4) return ReturnType.SYNTAX_ERROR; + + Player player = Bukkit.getPlayer(args[1]); + String archive = args[2]; + int headId = Integer.parseInt(args[3]); + + if (player == null) { + sender.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.give.notonline", args[1])); + return ReturnType.FAILURE; + } + + List heads; + + if (archive.equalsIgnoreCase("global")) + heads = instance.getHeadManager().getGlobalHeads(); + else if (archive.equalsIgnoreCase("local")) + heads = instance.getHeadManager().getLocalHeads(); + else { + return ReturnType.SYNTAX_ERROR; + } + + Optional head = heads.stream().filter(h -> h.getId() == headId).findFirst(); + + if (head.isPresent()) { + ItemStack item = head.get().asItemStack(); + + ItemMeta meta = item.getItemMeta(); + meta.setLore(new ArrayList<>()); + item.setItemMeta(meta); + + player.getInventory().addItem(item); + } else { + sender.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.give.notfound", head.get().getName())); + return ReturnType.FAILURE; + } + + sender.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.give.success", player.getName(), head.get().getName())); + player.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.give.receive", head.get().getName())); + + return ReturnType.SUCCESS; + } + + @Override + protected List onTab(EpicHeads instance, CommandSender sender, String... args) { + return null; + } + + @Override + public String getPermissionNode() { + return "epicheads.give"; + } + + @Override + public String getSyntax() { + return "/heads give "; + } + + @Override + public String getDescription() { + return "Gives the specified player the specified amount of heads."; + } +} diff --git a/src/main/java/com/songoda/epicheads/head/HeadManager.java b/src/main/java/com/songoda/epicheads/head/HeadManager.java index f54faee..bbcc363 100644 --- a/src/main/java/com/songoda/epicheads/head/HeadManager.java +++ b/src/main/java/com/songoda/epicheads/head/HeadManager.java @@ -72,6 +72,10 @@ public class HeadManager { return Collections.unmodifiableList(localRegisteredHeads); } + public List getGlobalHeads() { + return new ArrayList<>(registeredHeads); + } + public void removeLocalHead(Head head) { localRegisteredHeads.remove(head); } diff --git a/src/main/resources/en_US.lang b/src/main/resources/en_US.lang index f17e475..9a85011 100644 --- a/src/main/resources/en_US.lang +++ b/src/main/resources/en_US.lang @@ -27,4 +27,9 @@ gui.overview.discord = "&9&lDiscord" gui.overview.discordlore = "&8Add or request new heads|&8in our discord server." event.general.nopermission = "&cYou do not have permission to use that command." -event.buyhead.cannotafford = "&cYou cannot afford this head." \ No newline at end of file +event.buyhead.cannotafford = "&cYou cannot afford this head." + +command.give.notonline = "&cThe player &4%name% &ccould not be found." +command.give.notfound = "&cThe head &4%name%&c could not be found." +command.give.success = "&7You have been given &6%player% &7a head named &6%name%&7." +command.give.receive = "&7You have been given a head named &6%name%&7." \ No newline at end of file