Search in sources :

Example 1 with GroupsManager

use of pizzaaxx.bteconosur.serverPlayer.GroupsManager in project bteConoSurCore by BTEConoSur.

the class EventsCommand method onCommand.

@Override
public boolean onCommand(CommandSender p, org.bukkit.command.Command command, String label, final String[] args) {
    if (command.getName().equals("event")) {
        if (p instanceof Player) {
            Player player = (Player) p;
            if (args.length > 0) {
                if (args[0].equals("join")) {
                    OldCountry country = null;
                    if (args.length > 1) {
                        country = new OldCountry(args[1]);
                        if (country.getName() == null) {
                            p.sendMessage(eventsPrefix + "Introduce un país válido.");
                            return true;
                        }
                    } else {
                        RegionManager regionManager = getWorldGuard().getRegionManager(mainWorld);
                        boolean found = false;
                        for (ProtectedRegion region : regionManager.getApplicableRegions(player.getLocation()).getRegions()) {
                            if (region.getId().startsWith("evento_")) {
                                country = new OldCountry(region.getId().replace("evento_", ""));
                                found = true;
                                break;
                            }
                        }
                        if (!found) {
                            player.sendMessage(eventsPrefix + "No estás en la zona de ningún evento.");
                            return true;
                        }
                    }
                    ServerEvent event = new ServerEvent(country);
                    if (event.getStatus() != ServerEvent.Status.OFF) {
                        if (!event.getParticipants().contains(player)) {
                            ServerPlayer s = new ServerPlayer(player);
                            if (s.getPointsManager().getMaxPoints().getValue() >= event.getMinPoints()) {
                                event.addParticipant(player);
                                event.save();
                                player.sendMessage(eventsPrefix + "¡Te has unido al evento \"" + event.getName() + "\"! ¡Esperamos que te diviertas!");
                                if (event.getStatus() == ServerEvent.Status.ON) {
                                    for (OfflinePlayer offlinePlayer : event.getParticipants()) {
                                        if (offlinePlayer.isOnline() && offlinePlayer != player) {
                                            ((Player) offlinePlayer).sendMessage(eventsPrefix + "¡§a" + s.getChatManager().getDisplayName() + "§f se ha unido al evento §a" + event.getName() + "§f.");
                                        }
                                    }
                                    GroupsManager groupsManager = s.getGroupsManager();
                                    if (groupsManager.getPrimaryGroup() == GroupsManager.PrimaryGroup.DEFAULT) {
                                        groupsManager.addSecondaryGroup(GroupsManager.SecondaryGroup.EVENTO);
                                    }
                                } else {
                                    if (s.getDiscordManager().isLinked()) {
                                        player.sendMessage(eventsPrefix + "Recibirás una notificación por Discord cuando el evento comience.");
                                    } else {
                                        player.sendMessage(eventsPrefix + "Se te dejará una notificación en Minecraft cuando el evento comience.");
                                    }
                                }
                                DataManager data = s.getDataManager();
                                List<String> events = data.getStringList("events");
                                if (!events.contains(country.getName())) {
                                    events.add(country.getName());
                                    data.set("events", events);
                                    data.save();
                                }
                            } else {
                                player.sendMessage(eventsPrefix + "Necesitas al menos §a" + event.getMinPoints() + "§f puntos para unirte al evento.");
                            }
                        } else {
                            player.sendMessage(eventsPrefix + "Ya eres parte del evento.");
                        }
                    } else {
                        player.sendMessage(eventsPrefix + "No estás en la zona de ningún evento.");
                    }
                } else if (args[0].equals("leave")) {
                    OldCountry country = null;
                    if (args.length > 1) {
                        country = new OldCountry(args[1]);
                        if (country.getName() == null) {
                            p.sendMessage(eventsPrefix + "Introduce un país válido.");
                            return true;
                        }
                    } else {
                        RegionManager regionManager = getWorldGuard().getRegionManager(mainWorld);
                        boolean found = false;
                        for (ProtectedRegion region : regionManager.getApplicableRegions(player.getLocation()).getRegions()) {
                            if (region.getId().startsWith("evento_")) {
                                country = new OldCountry(region.getId().replace("evento_", ""));
                                found = true;
                                break;
                            }
                        }
                        if (!found) {
                            player.sendMessage(eventsPrefix + "No estás en la zona de ningún evento.");
                            return true;
                        }
                    }
                    ServerEvent event = new ServerEvent(country);
                    if (event.getStatus() != ServerEvent.Status.OFF) {
                        if (event.getParticipants().contains(player)) {
                            ServerPlayer s = new ServerPlayer(player);
                            DataManager data = s.getDataManager();
                            player.sendMessage(eventsPrefix + "Has abandonado el evento \"" + event.getName() + "\".");
                            if (event.getStatus() == ServerEvent.Status.ON) {
                                for (OfflinePlayer offlinePlayer : event.getParticipants()) {
                                    if (offlinePlayer.isOnline() && offlinePlayer != player) {
                                        ((Player) offlinePlayer).sendMessage(eventsPrefix + "§a" + s.getChatManager().getDisplayName() + "§f ha abandonado el evento §a" + event.getName() + "§f.");
                                    }
                                }
                                GroupsManager groupsManager = s.getGroupsManager();
                                if (groupsManager.getPrimaryGroup() == GroupsManager.PrimaryGroup.DEFAULT && s.getDataManager().getStringList("events").size() == 1) {
                                    groupsManager.removeSecondaryGroup(GroupsManager.SecondaryGroup.EVENTO);
                                }
                            }
                            data.set("events", data.getStringList("events").remove(country.getName()));
                            data.save();
                            event.removeParticipant(player);
                            event.save();
                        } else {
                            player.sendMessage(eventsPrefix + "No eres parte del evento.");
                        }
                    } else {
                        player.sendMessage(eventsPrefix + "No estás en la zona de ningún evento.");
                    }
                } else {
                    player.sendMessage(eventsPrefix + "Introduce un subcomando válido.");
                }
            } else {
                Inventory gui = Bukkit.createInventory(null, 27, "Elige un evento");
                for (int i = 0; i < 27; i++) {
                    gui.setItem(i, background);
                }
                gui.setItem(26, Misc.getCustomHead("§fSalir", null, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzdhZWU5YTc1YmYwZGY3ODk3MTgzMDE1Y2NhMGIyYTdkNzU1YzYzMzg4ZmYwMTc1MmQ1ZjQ0MTlmYzY0NSJ9fX0="));
                ServerEvent event = new ServerEvent(new OldCountry("argentina"));
                gui.setItem(10, Misc.getCustomHead("§a§lArgentina", (event.getStatus() == ServerEvent.Status.OFF ? "§aEstado: §c§lApagado" : "§aEstado: " + (event.getStatus() == ServerEvent.Status.ON ? "§2§lEn curso" : "§e§lPreparado") + "\n§aNombre: §f" + event.getName() + "\n§aFecha: §f" + event.getDate() + "\n§aPuntos mínimos: §f" + event.getMinPoints() + "\n§7§oHaz click para ir"), "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjZkMDMzZGM1ZjY3NWFkNTFiYzA2YzdhMTk0OWMzNWExZDM3ZTQ4YTJlMWMyNzg5YzJjZjdkMzBlYzU4ZjMyYyJ9fX0="));
                event = new ServerEvent(new OldCountry("bolivia"));
                gui.setItem(11, Misc.getCustomHead("§a§lBolivia", (event.getStatus() == ServerEvent.Status.OFF ? "§aEstado: §c§lApagado" : "§aEstado: " + (event.getStatus() == ServerEvent.Status.ON ? "§2§lEn curso" : "§e§lPreparado") + "\n§aNombre: §f" + event.getName() + "\n§aFecha: §f" + event.getDate() + "\n§aPuntos mínimos: §f" + event.getMinPoints() + "\n§7§oHaz click para ir"), "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmQyYzlmOTg2MThjZDVmN2RiZjBjMWE1NGVlMDk0NzQ2NjJiNzEzYjVhYTI2NWM4NWVmYmZjNDY0MThlOTE1In19fQ=="));
                event = new ServerEvent(new OldCountry("chile"));
                gui.setItem(12, Misc.getCustomHead("§a§lChile", (event.getStatus() == ServerEvent.Status.OFF ? "§aEstado: §c§lApagado" : "§aEstado: " + (event.getStatus() == ServerEvent.Status.ON ? "§2§lEn curso" : "§e§lPreparado") + "\n§aNombre: §f" + event.getName() + "\n§aFecha: §f" + event.getDate() + "\n§aPuntos mínimos: §f" + event.getMinPoints() + "\n§7§oHaz click para ir"), "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTAzNTk0YzBjMTE2YjA1ZDc1NjA2MGEyMjM5ODM3NzQ3ODg4NzMyMjY5MzVkOTYyNzExYmMzZTI1ODQ2ZGM2YiJ9fX0="));
                event = new ServerEvent(new OldCountry("paraguay"));
                gui.setItem(13, Misc.getCustomHead("§a§lParaguay", (event.getStatus() == ServerEvent.Status.OFF ? "§aEstado: §c§lApagado" : "§aEstado: " + (event.getStatus() == ServerEvent.Status.ON ? "§2§lEn curso" : "§e§lPreparado") + "\n§aNombre: §f" + event.getName() + "\n§aFecha: §f" + event.getDate() + "\n§aPuntos mínimos: §f" + event.getMinPoints() + "\n§7§oHaz click para ir"), "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODE3OGRlNjkxYjUwOGQ2MjQ5MTA5ZmM1NGFmNmZiYTQ5YmFhODM3N2FkMzcwNjEyZWQ2MTdkNzdkZDZhZDU4OCJ9fX0="));
                event = new ServerEvent(new OldCountry("peru"));
                gui.setItem(14, Misc.getCustomHead("§a§lPerú", (event.getStatus() == ServerEvent.Status.OFF ? "§aEstado: §c§lApagado" : "§aEstado: " + (event.getStatus() == ServerEvent.Status.ON ? "§2§lEn curso" : "§e§lPreparado") + "\n§aNombre: §f" + event.getName() + "\n§aFecha: §f" + event.getDate() + "\n§aPuntos mínimos: §f" + event.getMinPoints() + "\n§7§oHaz click para ir"), "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjRkMDNiZDQ0MTBiYWJkYzY4MjQ5M2IzYzJiYmEyNmU3MzBlNmJjNjU4ZDM4ODhlNzliZjcxMmY4NTMifX19"));
                event = new ServerEvent(new OldCountry("uruguay"));
                gui.setItem(15, Misc.getCustomHead("§a§lUruguay", (event.getStatus() == ServerEvent.Status.OFF ? "§aEstado: §c§lApagado" : "§aEstado: " + (event.getStatus() == ServerEvent.Status.ON ? "§2§lEn curso" : "§e§lPreparado") + "\n§aNombre: §f" + event.getName() + "\n§aFecha: §f" + event.getDate() + "\n§aPuntos mínimos: §f" + event.getMinPoints() + "\n§7§oHaz click para ir"), "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjg0NDA1OTdjNGJjMmFhZDYwMGE1NDYwNGRjN2IxZmI3NzEzNDNlMDIyZTZhMmUwMjJmOTBlNDBjYzI1ZjlmOCJ9fX0="));
                event = new ServerEvent(new OldCountry("global"));
                gui.setItem(16, Misc.getCustomHead("§a§lGlobal", (event.getStatus() == ServerEvent.Status.OFF ? "§aEstado: §c§lApagado" : "§aEstado: " + (event.getStatus() == ServerEvent.Status.ON ? "§2§lEn curso" : "§e§lPreparado") + "\n§aNombre: §f" + event.getName() + "\n§aFecha: §f" + event.getDate() + "\n§aPuntos mínimos: §f" + event.getMinPoints() + "\n§7§oHaz click para ir"), "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOThkYWExZTNlZDk0ZmYzZTMzZTFkNGM2ZTQzZjAyNGM0N2Q3OGE1N2JhNGQzOGU3NWU3YzkyNjQxMDYifX19"));
                player.openInventory(gui);
            }
        } else {
            p.sendMessage(eventsPrefix + "No puedes usar este comando desde la consola.");
        }
    }
    if (command.getName().equals("manageevent")) {
        if (args.length > 0) {
            if (countryAbbreviations.contains(args[0])) {
                OldCountry pais = new OldCountry(args[0]);
                final String country = pais.getName();
                if (args.length > 1) {
                    ServerEvent event = new ServerEvent(pais);
                    if (args[1].equals("name")) {
                        if (args.length > 2) {
                            String name = String.join(" ", Arrays.asList(args).subList(2, args.length));
                            if (name.matches("[ A-Za-z0-9/]{1,32}")) {
                                event.setName(name);
                                event.save();
                                p.sendMessage(eventsPrefix + "Has establecido el nombre del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f en §a" + name + "§f.");
                            } else {
                                p.sendMessage(eventsPrefix + "Introduce un nombre válido.");
                            }
                        } else {
                            p.sendMessage(eventsPrefix + "El nombre del evento del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f es §a" + event.getName() + "§f.");
                        }
                    } else if (args[1].equals("date")) {
                        if (args.length > 2) {
                            String date = String.join(" ", Arrays.asList(args).subList(2, args.length));
                            if (date.matches("[ -A-Za-z0-9/]{1,32}")) {
                                event.setDate(date);
                                event.save();
                                p.sendMessage(eventsPrefix + "Has establecido la fecha del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f en §a" + date + "§f.");
                            } else {
                                p.sendMessage(eventsPrefix + "Introduce un texto válido.");
                            }
                        } else {
                            p.sendMessage(eventsPrefix + "La fecha del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f es §a" + event.getDate() + "§f.");
                        }
                    } else if (args[1].equals("status")) {
                        if (args.length > 2) {
                            if (args[2].equals("stop") || args[2].equals("off") || args[2].equals("terminar")) {
                                if (event.getStatus() != ServerEvent.Status.OFF) {
                                    if (stopConfirm.contains(p)) {
                                        stopConfirm.remove(p);
                                        event.stop();
                                        p.sendMessage("Has terminado el evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f.");
                                    } else if (event.getStatus() == ServerEvent.Status.READY) {
                                        stopConfirm.add(p);
                                        p.sendMessage(eventsPrefix + "§cToda la configuración del evento se perderá.§f Usa el comando de nuevo para confirmar.");
                                    } else {
                                        stopConfirm.add(p);
                                        p.sendMessage(eventsPrefix + "§cNo puedes deshacer esta acción.§f Usa el comando de nuevo para confirmar.");
                                    }
                                }
                            } else if (args[2].equals("ready") || args[2].equals("listo") || args[2].equals("preparado")) {
                                if (event.getStatus() == ServerEvent.Status.OFF) {
                                    if (readyConfirm.contains(p)) {
                                        readyConfirm.remove(p);
                                        event.prepared();
                                        p.sendMessage("Has marcado el evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f como preparado.");
                                    } else {
                                        readyConfirm.add(p);
                                        p.sendMessage(eventsPrefix + "¿Estás seguro de que quieres marcar el evento como terminado? A continuación se hay una previsualización del evento. Usa el comando de nuevo para confirmar.");
                                        p.sendMessage(">+-----------+[-< §5EVENTO§f >-]+-----------+<");
                                        p.sendMessage("§aNombre: §f" + event.getName());
                                        p.sendMessage("§aFecha: §f" + event.getDate());
                                        p.sendMessage("§aPuntos mínimos: §f" + event.getMinPoints());
                                        p.sendMessage("§aImagen: §f" + event.getImage());
                                        p.sendMessage("§aCoordenadas: §f" + event.getTp().getBlockX() + ", " + event.getTp().getBlockY() + ", " + event.getTp().getBlockZ());
                                        p.sendMessage(">+-----------+[-< ====== >-]+-----------+<");
                                    }
                                } else {
                                    p.sendMessage(eventsPrefix + "Sólo puedes hacer esto cuando el proyecto está apagado.");
                                }
                            } else if (args[2].equals("start") || args[2].equals("on") || args[2].equals("empezar")) {
                                if (event.getStatus() == ServerEvent.Status.READY) {
                                    if (startConfirm.contains(p)) {
                                        startConfirm.remove(p);
                                        event.start();
                                        p.sendMessage("Has empezado el evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f.");
                                    } else {
                                        startConfirm.add(p);
                                        p.sendMessage(eventsPrefix + "¿Estás seguro de que quieres iniciar el evento? Usa el comando de nuevo para confirmar.");
                                    }
                                } else {
                                    p.sendMessage(eventsPrefix + "Solo puedes iniciar un evento cuando este está marcado como listo.");
                                }
                            }
                        } else {
                            p.sendMessage(eventsPrefix + "Introduce una acción.");
                        }
                    } else if (args[1].equals("tp")) {
                        if (args.length > 2) {
                            if (args[2].equals("here")) {
                                if (p instanceof Player) {
                                    Player player = (Player) p;
                                    event.setTp(player.getLocation());
                                    event.save();
                                    p.sendMessage(eventsPrefix + "Has establecido el teletransporte al evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f en tu posición actual.");
                                } else {
                                    p.sendMessage(eventsPrefix + "No puedes usar este comando desde la consola.");
                                }
                            } else if (args.length > 4 && args[2].matches("^-?[0-9]{1,16}(\\.[0-9]{1,16})?$") && args[3].matches("^-?[0-9]{1,16}(\\.[0-9]{1,16})?$") && args[4].matches("^-?[0-9]{1,16}(\\.[0-9]{1,16})?$")) {
                                double x = Double.parseDouble(args[2]);
                                double y = Double.parseDouble(args[3]);
                                double z = Double.parseDouble(args[4]);
                                event.setTp(new Location(mainWorld, x, y, z));
                                event.save();
                                p.sendMessage(eventsPrefix + "Has establecido el teletransporte al evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f en §a" + x + ", " + y + ", " + z + "§f.");
                            }
                        } else {
                            p.sendMessage(eventsPrefix + "El teletransporte del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f está en §a" + event.getTp().getBlockX() + ", " + event.getTp().getBlockY() + ", " + event.getTp().getBlockZ() + "§f.");
                        }
                    } else if (args[1].equals("redefine")) {
                        if (event.getStatus() != ServerEvent.Status.ON) {
                            if (p instanceof Player) {
                                Player player = (Player) p;
                                List<BlockVector2D> points = new ArrayList<>();
                                try {
                                    points = polyRegion(getSelection(player)).getPoints();
                                } catch (IllegalArgumentException e) {
                                    player.sendMessage(eventsPrefix + "Selecciona un área cúbica o poligonal.");
                                } catch (IncompleteRegionException e) {
                                    player.sendMessage(eventsPrefix + "Selecciona un área primero.");
                                }
                                event.setNewRegion(points);
                                event.save();
                                p.sendMessage(eventsPrefix + "Has redefinido la región del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f.");
                            } else {
                                p.sendMessage(eventsPrefix + "No se puede ejecutar este comando desde la consola.");
                            }
                        } else {
                            p.sendMessage(eventsPrefix + "No puedes hacer esto mientras el evento está activo.");
                        }
                    } else if (args[1].equals("minpoints")) {
                        if (args.length > 2) {
                            if (event.getStatus() == ServerEvent.Status.ON) {
                                p.sendMessage(eventsPrefix + "No puedes cambiar esto mientras un evento está activo.");
                                return true;
                            }
                            if (args[2].matches("[0-9]{1,10}") && Integer.parseInt(args[2]) >= 0) {
                                event.setMinPoints(Integer.parseInt(args[2]));
                                event.save();
                                p.sendMessage(eventsPrefix + "Has establecido el mínimo de puntos para el evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f en §a" + args[2] + "§f.");
                            } else {
                                p.sendMessage(eventsPrefix + "Introduce un valor válido.");
                            }
                        } else {
                            p.sendMessage(eventsPrefix + "El mínimo de puntos para el evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f es de §a" + event.getMinPoints() + "§f.");
                        }
                    } else if (args[1].equals("image")) {
                        if (args.length > 2) {
                            if (args[2].equals("delete")) {
                                event.setImage("notSet");
                                event.save();
                                p.sendMessage(eventsPrefix + "Has eliminado la imagen del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f.");
                            } else {
                                event.setImage(args[2]);
                                event.save();
                                p.sendMessage(eventsPrefix + "Has establecido la imagen del evento de §a" + country.replace("peru", "perú").toUpperCase() + "§f en\n§b" + args[2]);
                            }
                        } else {
                            p.sendMessage(eventsPrefix + "Introduce un enlace a una imagen.");
                        }
                    }
                } else {
                    p.sendMessage(eventsPrefix + "Introduce una acción.");
                }
            } else {
                p.sendMessage(eventsPrefix + "Introduce un país válido.");
            }
        } else {
            p.sendMessage(eventsPrefix + "Introduce un país para manejar.");
        }
    }
    return true;
}
Also used : OldCountry(pizzaaxx.bteconosur.country.OldCountry) Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) BlockVector2D(com.sk89q.worldedit.BlockVector2D) IncompleteRegionException(com.sk89q.worldedit.IncompleteRegionException) DataManager(pizzaaxx.bteconosur.serverPlayer.DataManager) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) RegionManager(com.sk89q.worldguard.protection.managers.RegionManager) OfflinePlayer(org.bukkit.OfflinePlayer) Inventory(org.bukkit.inventory.Inventory) GroupsManager(pizzaaxx.bteconosur.serverPlayer.GroupsManager) Location(org.bukkit.Location)

Example 2 with GroupsManager

use of pizzaaxx.bteconosur.serverPlayer.GroupsManager in project bteConoSurCore by BTEConoSur.

the class ServerEvent method stop.

public void stop() {
    List<String> names = new ArrayList<>();
    for (OfflinePlayer player : participants) {
        ServerPlayer serverPlayer = new ServerPlayer(player);
        DataManager data = serverPlayer.getDataManager();
        GroupsManager groups = serverPlayer.getGroupsManager();
        names.add(serverPlayer.getName());
        if (groups.getSecondaryGroups().contains(GroupsManager.SecondaryGroup.EVENTO)) {
            if (data.getStringList("events").size() == 1) {
                groups.removeSecondaryGroup(GroupsManager.SecondaryGroup.EVENTO);
            }
        }
        data.set("events", data.getStringList("events").remove(this.country.getName()));
        data.save();
        if (!player.isOnline()) {
            serverPlayer.sendNotification(eventsPrefix + "El evento §a**" + this.name + "**§f de §a" + StringUtils.capitalize(country.getName().replace("peru", "perú")) + "§f acaba de terminar. ¡Gracias por participar!");
        }
    }
    for (Player player : Bukkit.getOnlinePlayers()) {
        player.sendMessage(">+-----------+[-< §5EVENTO§f >-]+-----------+<");
        player.sendMessage("¡El evento §a" + name + "§f de §a" + StringUtils.capitalize(country.getName().replace("peru", "perú")) + "§f acaba de terminar!");
        player.sendMessage(">+-----------+[-< ====== >-]+-----------+<");
    }
    EmbedBuilder embed = new EmbedBuilder();
    embed.setColor(new Color(255, 0, 0));
    embed.setThumbnail(country.getIcon());
    embed.setTitle("¡El evento \"" + name + "\" de " + StringUtils.capitalize(country.getName().replace("peru", "perú")) + " acaba de terminar!");
    if (names.size() > 0) {
        embed.addField(":busts_in_silhouette: Participantes finales:", String.join(", ", names), false);
    } else {
        embed.addField(":busts_in_silhouette: Participantes finales:", "No hay.", false);
    }
    gateway.sendMessageEmbeds(embed.build()).queue();
    embed.setTitle("Evento \"" + name + "\"");
    country.getLogs().sendMessageEmbeds(embed.build()).queue();
    this.reset();
    this.save();
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) OfflinePlayer(org.bukkit.OfflinePlayer) DataManager(pizzaaxx.bteconosur.serverPlayer.DataManager) GroupsManager(pizzaaxx.bteconosur.serverPlayer.GroupsManager)

Example 3 with GroupsManager

use of pizzaaxx.bteconosur.serverPlayer.GroupsManager in project bteConoSurCore by BTEConoSur.

the class ServerEvent method start.

public void start() {
    this.setStatus(Status.ON);
    this.save();
    List<String> names = new ArrayList<>();
    for (OfflinePlayer player : participants) {
        ServerPlayer serverPlayer = new ServerPlayer(player);
        GroupsManager groupsManager = serverPlayer.getGroupsManager();
        if (groupsManager.getPrimaryGroup() == GroupsManager.PrimaryGroup.DEFAULT && !(groupsManager.getSecondaryGroups().contains(GroupsManager.SecondaryGroup.EVENTO))) {
            groupsManager.addSecondaryGroup(GroupsManager.SecondaryGroup.EVENTO);
        }
        names.add(serverPlayer.getName());
        if (!player.isOnline()) {
            serverPlayer.sendNotification(eventsPrefix + "¡El evento §a**" + this.name + " (" + StringUtils.capitalize(country.getName().replace("peru", "perú")) + ")**§f acaba de empezar! Usa §a`/event`§f para ir.");
        }
    }
    for (Player player : Bukkit.getOnlinePlayers()) {
        player.sendMessage(">+-----------+[-< §5EVENTO§f >-]+-----------+<");
        player.sendMessage("§d¡El evento de " + StringUtils.capitalize(country.getName().replace("peru", "perú")) + " acaba de iniciar!");
        player.sendMessage("§aNombre: §f" + this.getName());
        player.sendMessage("§aFecha: §f" + this.getDate());
        player.sendMessage("§aPuntos mínimos: §f" + this.getMinPoints());
        player.sendMessage("§aCoordenadas: §f" + this.getTp().getBlockX() + ", " + this.getTp().getBlockY() + ", " + this.getTp().getBlockZ());
        player.sendMessage("§7¡Usa §f/event§7 para ir" + (participants.contains(player) ? "!" : " y §f/event join§7 para unirte!"));
        player.sendMessage(">+-----------+[-< ====== >-]+-----------+<");
    }
    EmbedBuilder embed = new EmbedBuilder();
    embed.setDescription("Usa `/event` en el servidor para ir al evento y `/event join` para unirte.");
    embed.setColor(new Color(0, 255, 43));
    embed.setThumbnail(country.getIcon());
    embed.setTitle("¡El evento \"" + name + "\" de " + StringUtils.capitalize(country.getName().replace("peru", "perú")) + " acaba de empezar!");
    embed.addField(":calendar: Fecha:", this.date, false);
    embed.addField(":round_pushpin: Coordenadas:", tp.getBlockX() + " " + tp.getBlockY() + " " + tp.getBlockZ(), false);
    embed.addField(":chart_with_upwards_trend: Puntos mínimos para participar:", minPoints.toString(), false);
    if (names.size() > 0) {
        embed.addField(":busts_in_silhouette: Participantes actuales:", String.join(", ", names), false);
    }
    if (image.equals("notSet")) {
        try {
            embed.setImage("attachment://map.png");
            gateway.sendFile(new URL(getMapURL(new Pair<>(region.getPoints(), "7434eb"))).openStream(), "map.png").setEmbeds(embed.build()).queue();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        embed.setImage(image);
        gateway.sendMessageEmbeds(embed.build()).queue();
    }
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) OfflinePlayer(org.bukkit.OfflinePlayer) IOException(java.io.IOException) URL(java.net.URL) Misc.getMapURL(pizzaaxx.bteconosur.misc.Misc.getMapURL) GroupsManager(pizzaaxx.bteconosur.serverPlayer.GroupsManager) Pair(pizzaaxx.bteconosur.helper.Pair)

Example 4 with GroupsManager

use of pizzaaxx.bteconosur.serverPlayer.GroupsManager in project bteConoSurCore by BTEConoSur.

the class Events method onChat.

@EventHandler
public void onChat(AsyncPlayerChatEvent e) {
    e.setCancelled(true);
    Player p = e.getPlayer();
    ServerPlayer s = new ServerPlayer(p);
    ChatManager manager = s.getChatManager();
    if (!(manager.isHidden())) {
        List<Chat> targetChats = new ArrayList<>();
        List<Player> pingedPlayers = new ArrayList<>();
        targetChats.add(manager.getChat());
        String message = ChatColor.stripColor(e.getMessage());
        for (String word : e.getMessage().split(" ")) {
            if (word.startsWith("@")) {
                if (Bukkit.getOfflinePlayer(word.replace("@", "")).isOnline()) {
                    Player target = Bukkit.getPlayer(word.replace("@", ""));
                    if (!(pingedPlayers.contains(target))) {
                        pingedPlayers.add(target);
                    }
                    ServerPlayer sTarget = new ServerPlayer(target);
                    if (!(targetChats.contains(sTarget.getChatManager().getChat()))) {
                        targetChats.add(sTarget.getChatManager().getChat());
                    }
                    message = message.replace(word, "§a~" + s.getChatManager().getDisplayName() + "~");
                }
            }
        }
        for (Chat chat : targetChats) {
            if (chat.getName().equals("global")) {
                List<String> strings = new ArrayList<>();
                strings.add(":speech_balloon: **");
                GroupsManager groupsManager = s.getGroupsManager();
                Configuration emojis = new Configuration(Bukkit.getPluginManager().getPlugin("bteConoSur"), "discord/groupEmojis.yml");
                strings.add("[" + emojis.getString(groupsManager.getPrimaryGroup().toString()) + "] ");
                for (GroupsManager.SecondaryGroup group : groupsManager.getSecondaryGroups()) {
                    strings.add("[" + emojis.getString(group.toString()) + "] ");
                }
                strings.add(s.getName() + ":** " + ChatColor.stripColor(message.replace("~", "**")));
                gateway.sendMessage(String.join("", strings)).queue();
            }
            chat.sendMessage(message, s);
        }
        for (Player player : pingedPlayers) {
            ServerPlayer sPlayer = new ServerPlayer(player);
            if (sPlayer.getChatManager().isHidden()) {
                p.sendMessage(BookUtil.TextBuilder.of(ChatCommand.CHAT_PREFIX + "§a" + sPlayer.getName() + "tiene el chat oculto. ").build(), BookUtil.TextBuilder.of("§a[ENVIAR POR PRIVADO]").onHover(BookUtil.HoverAction.showText("Haz click para enviar el menaje por privado.")).onClick(BookUtil.ClickAction.runCommand("/msg " + new ServerPlayer(player).getName() + ChatColor.stripColor(e.getMessage()))).build());
                continue;
            }
            player.playSound(player.getLocation(), Sound.BLOCK_NOTE_XYLOPHONE, 1, 1);
        }
    } else {
        p.sendMessage(ChatCommand.CHAT_PREFIX + "No puedes hablar mientras tienes el chat oculto.");
    }
}
Also used : Player(org.bukkit.entity.Player) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) Configuration(pizzaaxx.bteconosur.yaml.Configuration) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) ArrayList(java.util.ArrayList) ChatManager(pizzaaxx.bteconosur.serverPlayer.ChatManager) GroupsManager(pizzaaxx.bteconosur.serverPlayer.GroupsManager) EventHandler(org.bukkit.event.EventHandler)

Example 5 with GroupsManager

use of pizzaaxx.bteconosur.serverPlayer.GroupsManager in project bteConoSurCore by BTEConoSur.

the class ProjectsCommand method onCommand.

@Override
public boolean onCommand(CommandSender sender, org.bukkit.command.Command cmd, String label, String[] args) {
    if (!(sender instanceof Player)) {
        sender.sendMessage(projectsPrefix + "Este comando solo puede ser usado por jugadores.");
    }
    Player p = (Player) sender;
    ServerPlayer s = new ServerPlayer(p);
    ProjectsManager projectsManager = s.getProjectsManager();
    if (args.length == 0) {
        sender.sendMessage(projectsPrefix + "Debes introducir un subcomando.");
        return true;
    }
    if (args[0].equals("create") || args[0].equals("crear")) {
        // GET POINTS
        List<BlockVector2D> points;
        try {
            points = polyRegion(getSelection(p)).getPoints();
        } catch (IncompleteRegionException e) {
            p.sendMessage(projectsPrefix + "Selecciona un área primero.");
            return true;
        } catch (IllegalArgumentException e) {
            p.sendMessage(projectsPrefix + "Debes seleccionar una region cúbica o poligonal.");
            return true;
        }
        if (points.size() > maxProjectPoints) {
            p.sendMessage(projectsPrefix + "La selección no puede tener más de " + maxProjectPoints + " puntos.");
            return true;
        }
        OldCountry country = new OldCountry(points.get(0));
        if (country.getName().equals("global")) {
            p.sendMessage(projectsPrefix + "Los proyectos no funcionan aquí.");
            return true;
        }
        if (p.hasPermission("bteconosur.projects.manage.create")) {
            if (!s.getPermissionCountries().contains(country)) {
                p.sendMessage(projectsPrefix + "No puedes hacer esto aquí.");
                return true;
            }
            if (args.length < 2) {
                p.sendMessage(projectsPrefix + "Introduce una dificultad, puede ser §afacil§f, §aintermedio§f o §adificil§f.");
                return true;
            }
            if ((!(args[1].equals("facil"))) && (!(args[1].equals("intermedio"))) && (!(args[1].equals("dificil")))) {
                p.sendMessage(projectsPrefix + "Introduce una dificultad válida, puede ser §afacil§f, §aintermedio§f o §adificil§f.");
                return true;
            }
            Project project = new Project(new OldCountry(new Location(mainWorld, points.get(0).getX(), 100, points.get(0).getZ())), Project.Difficulty.valueOf(args[1]), points);
            project.save();
            // SEND MESSAGES
            p.sendMessage(projectsPrefix + "Proyecto con la ID §a" + project.getId() + "§f creado con la dificultad §a" + project.getDifficulty().toString().toUpperCase() + "§f.");
            StringBuilder dscMessage = new StringBuilder(":clipboard: **" + p.getName() + "** ha creado el proyecto `" + project.getId() + "` con dificultad `" + args[1].toUpperCase() + "` en las coordenadas: \n");
            for (BlockVector2D point : project.getPoints()) {
                dscMessage.append("> ").append(Math.floor(point.getX())).append(" ").append(Math.floor(p.getWorld().getHighestBlockAt(point.getBlockX(), point.getBlockZ()).getY())).append(" ").append(Math.floor(point.getZ())).append("\n");
            }
            dscMessage = new StringBuilder(dscMessage.toString().replace(".0", ""));
            project.getCountry().getLogs().sendMessage(dscMessage.toString()).queue();
            return true;
        } else if (p.hasPermission("bteconosur.projects.create")) {
            if (projectsManager.getProjects(country).size() < maxProjectsPerPlayer) {
                Project project = new Project(getCountryAtLocation(new Location(mainWorld, points.get(0).getX(), 100, points.get(0).getZ())), Project.Difficulty.FACIL, points);
                EmbedBuilder request = new EmbedBuilder();
                request.setColor(new Color(0, 255, 42));
                request.setTitle(new ServerPlayer(p).getName() + " quiere crear un proyecto.");
                List<String> coords = new ArrayList<>();
                for (BlockVector2D point : project.getPoints()) {
                    coords.add(("> " + point.getX() + " " + new Coords2D(point).getHighestY() + " " + point.getZ()).replace(".0", ""));
                }
                request.addField(":round_pushpin: Coordenadas:", String.join("\n", coords), false);
                // GMAPS
                BlockVector2D average = project.getAverageCoordinate();
                Coords2D geoCoord = new Coords2D(average);
                request.addField(":map: Google Maps:", "https://www.google.com/maps/@" + geoCoord.getLat() + "," + geoCoord.getLon() + ",19z", false);
                // IMAGE
                request.setImage(project.getImageUrl());
                ActionRow actionRow = ActionRow.of(Button.of(ButtonStyle.SECONDARY, "facil", "Fácil", Emoji.fromMarkdown("\uD83D\uDFE2")), Button.of(ButtonStyle.SECONDARY, "intermedio", "Intermedio", Emoji.fromMarkdown("\uD83D\uDFE1")), Button.of(ButtonStyle.SECONDARY, "dificil", "Difícil", Emoji.fromMarkdown("\uD83D\uDD34")), Button.of(ButtonStyle.DANGER, "rechazar", "Rechazar", Emoji.fromMarkdown("✖️")));
                MessageBuilder message = new MessageBuilder();
                message.setEmbeds(request.build());
                message.setActionRows(actionRow);
                country.getRequests().sendMessage(message.build()).queue();
                p.sendMessage(projectsPrefix + "Se ha enviado una solicitud para crear tu proyecto.");
            } else {
                p.sendMessage(projectsPrefix + "No puedes ser líder de más de 10 proyectos.");
            }
        } else {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
        }
    }
    if (args[0].equals("claim") || args[0].equals("reclamar")) {
        if (!(p.hasPermission("bteconosur.projects.claim"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            if (project.getOwner() != null) {
                if (project.getOwner() == p) {
                    p.sendMessage(projectsPrefix + "Ya eres dueñ@ de este proyecto.");
                } else if (project.getMembers().contains(p)) {
                    p.sendMessage("Alguien más ya es dueñ@ de este proyecto. Usa §a/p request §fpara solicitar unirte.");
                }
            } else if (projectsManager.getOwnedProjects().get(project.getCountry()).size() >= maxProjectsPerPlayer) {
                p.sendMessage(projectsPrefix + "No puedes ser líder de más de 10 proyectos al mismo tiempo.");
            } else {
                GroupsManager manager = s.getGroupsManager();
                if ((manager.getPrimaryGroup() == GroupsManager.PrimaryGroup.POSTULANTE || manager.getPrimaryGroup() == GroupsManager.PrimaryGroup.DEFAULT) && project.getDifficulty() != Project.Difficulty.FACIL) {
                    p.sendMessage(projectsPrefix + "En tu rango solo puedes reclamar proyectos fáciles.");
                    return true;
                }
                project.setOwner(p);
                project.save();
                p.sendMessage(projectsPrefix + "Ahora eres dueñ@ de este proyecto.");
                project.getCountry().getLogs().sendMessage(":inbox_tray: **" + s.getName() + "** ha reclamado el proyecto `" + project.getId() + "`.").queue();
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
            return true;
        }
        return true;
    }
    if (args[0].equals("delete") || args[0].equals("eliminar")) {
        if (p.hasPermission("bteconosur.projects.manage.delete")) {
            if (!(deleteConfirmation.contains(p))) {
                deleteConfirmation.add(p);
                p.sendMessage(projectsPrefix + "§cNo puedes deshacer esta acción. §fUsa el comando de nuevo para confirmar.");
                return true;
            }
            deleteConfirmation.remove(p);
            if (args.length >= 2) {
                try {
                    Project project = new Project(args[1]);
                    project.delete();
                    p.sendMessage(projectsPrefix + "Has eliminado el proyecto §a" + project.getId() + "§f.");
                    for (OfflinePlayer member : project.getAllMembers()) {
                        new ServerPlayer(member).sendNotification(projectsPrefix + "Tu proyecto **§a" + project.getName(true) + "§f** ha sido eliminado.");
                    }
                    project.getCountry().getLogs().sendMessage(":wastebasket: **" + s.getName() + "** ha eliminado el proyecto `" + project.getId() + "`.").queue();
                } catch (Exception e) {
                    p.sendMessage(projectsPrefix + "Este proyecto no existe.");
                    return true;
                }
            } else {
                try {
                    Project project = new Project(p.getLocation());
                    project.delete();
                    p.sendMessage(projectsPrefix + "Has eliminado el proyecto §a" + project.getId() + "§f.");
                    project.getCountry().getLogs().sendMessage(":wastebasket: **" + s.getName() + "** ha eliminado el proyecto `" + project.getId() + "`.").queue();
                } catch (Exception e) {
                    p.sendMessage(projectsPrefix + "No estás dentro de ningun proyecto.");
                }
            }
        } else {
            p.sendMessage(projectsPrefix + "§cNo puedes hacer esto.");
        }
        return true;
    }
    if (args[0].equals("add") || args[0].equals("agregar")) {
        if (!(p.hasPermission("bteconosur.projects.add"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        Project project;
        try {
            project = new Project(p.getLocation());
            if (project.getOwner() == p) {
                if (project.isPending()) {
                    p.sendMessage("No puedes hacer esto mientras el proyecto está pendiente de revisión.");
                    return true;
                }
                if (project.getAllMembers().size() < maxProjectMembers) {
                    if (args.length >= 2) {
                        if (Bukkit.getOfflinePlayer(args[1]).isOnline()) {
                            Player target = Bukkit.getPlayer(args[1]);
                            project.addMember(target);
                            project.save();
                            ServerPlayer sTarget = new ServerPlayer(target);
                            p.sendMessage(projectsPrefix + "Has agregado a §a" + sTarget.getName() + "§f al proyecto §a" + project.getName() + "§f.");
                            target.sendMessage(projectsPrefix + "Has sido añadido al proyecto §a" + project.getName() + "§f.");
                            project.getCountry().getLogs().sendMessage(":pencil: **" + s.getName() + "** ha agregado a **" + sTarget.getName() + "** al proyecto `" + project.getId() + "`.").queue();
                        } else {
                            p.sendMessage(projectsPrefix + "El jugador introducido no existe o no se encuentra online.");
                        }
                    } else {
                        p.sendMessage(projectsPrefix + "Introduce un jugador.");
                    }
                } else {
                    p.sendMessage(projectsPrefix + "El proyecto ya alcanzó la capacidad máxima de miembros.");
                }
            } else {
                p.sendMessage(projectsPrefix + "No eres el líder de este proyecto.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
        return true;
    }
    if (args[0].equals("remove") || args[0].equals("remover") || args[0].equals("quitar")) {
        if (!(p.hasPermission("bteconosur.projects.remove"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        Project project;
        try {
            project = new Project(p.getLocation());
            if (project.getOwner() == p) {
                if (project.isPending()) {
                    p.sendMessage("No puedes hacer esto mientras el proyecto está pendiente de revisión.");
                    return true;
                }
                if (!project.getMembers().isEmpty()) {
                    if (args.length >= 2) {
                        OfflinePlayer target = Bukkit.getOfflinePlayer(args[1]);
                        ServerPlayer sTarget = new ServerPlayer(target);
                        if (project.getMembers().contains(target)) {
                            project.removeMember(target);
                            project.save();
                            p.sendMessage(projectsPrefix + "Has removido a §a" + sTarget.getName() + "§f del proyecto §a" + project.getName() + "§f.");
                            sTarget.sendNotification(projectsPrefix + "Has sido removido del proyecto **§a" + project.getName(true) + "§f**.");
                            project.getCountry().getLogs().sendMessage(":pencil: **" + s.getName() + "** ha removido a **" + sTarget.getName() + "** del proyecto `" + project.getId() + "`.").queue();
                        } else {
                            p.sendMessage(projectsPrefix + "El jugador introducido no es parte del proyecto.");
                        }
                    } else {
                        p.sendMessage(projectsPrefix + "Introduce un jugador.");
                    }
                } else {
                    p.sendMessage(projectsPrefix + "El proyecto no tiene miembros.");
                }
            } else {
                p.sendMessage(projectsPrefix + "No eres el líder de este proyecto.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
        return true;
    }
    if (args[0].equals("transfer") || args[0].equals("transferir")) {
        if (!(p.hasPermission("bteconosur.projects.transfer"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            if (project.getOwner() == p) {
                if (project.isPending()) {
                    p.sendMessage("No puedes hacer esto mientras el proyecto está pendiente de revisión.");
                    return true;
                }
                if (args.length >= 2) {
                    if (project.getMembers().contains(Bukkit.getOfflinePlayer(args[1]))) {
                        if (Bukkit.getOfflinePlayer(args[1]).isOnline()) {
                            if (transferConfirmation.contains(p)) {
                                transferConfirmation.remove(p);
                                Player target = Bukkit.getPlayer(args[1]);
                                if (new ServerPlayer(target).getProjectsManager().getOwnedProjects().get(project.getCountry()).size() > maxProjectsPerPlayer) {
                                    p.sendMessage(projectsPrefix + "El jugador introducido ya alcanzó su límite de proyectos en este país.");
                                    return true;
                                }
                                project.transfer(target);
                                project.save();
                                p.sendMessage(projectsPrefix + "Has transferido el proyecto §a" + project.getName() + " §fa §a" + target.getName() + "§f.");
                                target.sendMessage(projectsPrefix + "§a" + p.getName() + " §fte ha transferido el proyecto §a" + project.getName() + "§f.");
                            } else {
                                transferConfirmation.add(p);
                                p.sendMessage(projectsPrefix + "§cNo puedes deshacer esta acción. §fUsa el comando de nuevo para confirmar.");
                            }
                        } else {
                            p.sendMessage(projectsPrefix + "El jugador no se encuentra online.");
                        }
                    } else {
                        p.sendMessage(projectsPrefix + "El jugador no es un miembro de tu proyecto.");
                    }
                } else {
                    p.sendMessage(projectsPrefix + "Introduce un jugador.");
                }
            } else {
                p.sendMessage(projectsPrefix + "No eres el líder de este proyecto.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
    }
    if (args[0].equals("leave") || args[0].equals("abandonar")) {
        if (!(p.hasPermission("bteconosur.projects.leave"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            TextChannel logs = project.getCountry().getLogs();
            if (project.isPending()) {
                p.sendMessage("No puedes hacer esto mientras el proyecto está pendiente de revisión.");
                return true;
            }
            if (project.getOwner() == p) {
                if (leaveConfirmation.contains(p)) {
                    leaveConfirmation.remove(p);
                    p.sendMessage(projectsPrefix + "Has abandonado el proyecto §a" + project.getName(true) + "§f.");
                    logs.sendMessage(":outbox_tray: **" + s.getName() + "** ha abandonado el proyecto `" + project.getId() + "`.").queue();
                    for (OfflinePlayer member : project.getMembers()) {
                        ServerPlayer sMember = new ServerPlayer(member);
                        sMember.sendNotification("El líder de tu proyecto **§a" + project.getName(true) + "§f** ha abandonado el proyecto, por lo que tú también has salido.");
                        logs.sendMessage(":outbox_tray: **" + sMember.getName() + "** ha abandonado el proyecto `" + project.getId() + "`.").queue();
                    }
                    logs.sendMessage(":flag_white: El proyecto `" + project.getId() + "` está disponible de nuevo.").queue();
                    project.empty();
                    project.setName(null);
                    project.save();
                } else {
                    leaveConfirmation.add(p);
                    p.sendMessage(projectsPrefix + "§cEl proyecto quedará vacío si el líder abandonda el proyecto. Esta acción no se puede deshacer. §fUsa el comando de nuevo para confirmar.");
                }
            } else if (project.getMembers().contains(p)) {
                project.removeMember(p);
                project.save();
                p.sendMessage(projectsPrefix + "Has abandonado el proyecto §a" + project.getName() + "§f.");
                new ServerPlayer(project.getOwner()).sendNotification(projectsPrefix + "**§a" + new ServerPlayer(p).getName() + "§f** ha abandonado tu proyecto **§a" + project.getName(true) + "§f**.");
                logs.sendMessage(":outbox_tray: **" + s.getName() + "** ha abandonado el proyecto `" + project.getId() + "`.").queue();
            } else {
                p.sendMessage(projectsPrefix + "No eres miembro de este proyecto.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
            e.printStackTrace();
        }
    }
    if (args[0].equals("borders") || args[0].equals("bordes")) {
        if (!(p.hasPermission("bteconosur.projects.showborder"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            int maxY = p.getLocation().getBlockY() + 10;
            int minY = p.getLocation().getBlockY() - 10;
            Polygonal2DRegionSelector selector = new Polygonal2DRegionSelector((World) new BukkitWorld(mainWorld), project.getPoints(), minY, maxY);
            Methods.setSelection(p, selector);
            p.sendMessage(BookUtil.TextBuilder.of(projectsPrefix + "Mostrando los bordes del proyecto §a" + project.getName() + "§f. §eRequiere ").build(), BookUtil.TextBuilder.of("§e§nWorldEdit CUI").onClick(BookUtil.ClickAction.openUrl("https://www.curseforge.com/minecraft/mc-mods/worldeditcui-forge-edition-2/download/2629418")).build(), BookUtil.TextBuilder.of(".").color(ChatColor.YELLOW).build());
        } catch (Exception e) {
            e.printStackTrace();
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
    }
    if (args[0].equals("review") || args[0].equals("revisar")) {
        if (!(p.hasPermission("bteconosur.projects.manage.review"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            OldCountry country = project.getCountry();
            if (s.getPermissionCountries().contains(project.getCountry())) {
                if (project.isPending()) {
                    if (args.length > 1) {
                        if (args[1].equals("accept") || args[1].equals("aceptar")) {
                            // ADD POINTS
                            int amount = project.getDifficulty().getPoints();
                            country.getLogs().sendMessage(":mag: **" + s.getName() + "** ha aprobado el proyecto `" + project.getId() + "`.").queue();
                            p.sendMessage(projectsPrefix + "Has aceptado el proyecto §a" + project.getId() + "§f.");
                            ServerPlayer owner = new ServerPlayer(project.getOwner());
                            ProjectsManager ownerProjectsManager = owner.getProjectsManager();
                            PointsManager ownerPointsManager = owner.getPointsManager();
                            owner.getPointsManager().addPoints(country, amount);
                            ownerProjectsManager.addFinishedProject(country);
                            owner.sendNotification(projectsPrefix + "Tu proyecto **§a" + project.getName(true) + "§f** ha sido aceptado.");
                            owner.sendNotification(pointsPrefix + "Has conseguido **§a" + amount + "§f** puntos. §7Total: " + ownerPointsManager.getPoints(country));
                            for (OfflinePlayer member : project.getMembers()) {
                                ServerPlayer m = new ServerPlayer(member);
                                PointsManager mPointsManager = m.getPointsManager();
                                mPointsManager.addPoints(country, amount);
                                projectsManager.addFinishedProject(country);
                                m.sendNotification(projectsPrefix + "Tu proyecto **§a" + project.getName(true) + "§f** ha sido aceptado.");
                                m.sendNotification(pointsPrefix + "Has conseguido **§a" + amount + "§f** puntos. §7Total: " + mPointsManager.getPoints(country));
                            }
                            project.delete();
                        }
                        if (args[1].equals("continue") || args[1].equals("continuar")) {
                            project.setPending(false);
                            project.save();
                            p.sendMessage(projectsPrefix + "Has continuado el proyecto §a" + project.getId() + "§f.");
                            for (OfflinePlayer member : project.getAllMembers()) {
                                new ServerPlayer(member).sendNotification(projectsPrefix + "Tu proyecto **§a" + project.getName() + "§f** ha sido continuado.");
                            }
                            country.getLogs().sendMessage(":mag: **" + s.getName() + "** ha continuado el proyecto `" + project.getId() + "`.").queue();
                        }
                        if (args[1].equals("deny") || args[1].equals("denegar") || args[1].equals("rechazar")) {
                            project.setPending(false);
                            project.empty();
                            project.setName(null);
                            project.save();
                            p.sendMessage(projectsPrefix + "Has rechazado el proyecto §a" + project.getId() + "§f.");
                            for (OfflinePlayer member : project.getAllMembers()) {
                                new ServerPlayer(member).sendNotification(projectsPrefix + "Tu proyecto **§a" + project.getName(true) + "§f** ha sido rechazado.");
                            }
                            country.getLogs().sendMessage(":mag: **" + s.getName() + "** ha rechazado el proyecto `" + project.getId() + "`.").queue();
                        }
                    } else {
                        p.sendMessage(projectsPrefix + "Introduce una acción.");
                    }
                } else {
                    p.sendMessage(projectsPrefix + "Este proyecto no esta pendiente de revisión.");
                }
            } else {
                p.sendMessage(projectsPrefix + "No puedes hacer esto.");
            }
        } catch (Exception e) {
            e.printStackTrace();
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
    }
    if (args[0].equals("name") || args[0].equals("nombre")) {
        if (!(p.hasPermission("bteconosur.projects.name"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            if (project.getOwner() == p) {
                if (!(project.isPending())) {
                    if (args.length > 1 && args[1].matches("[a-zA-Z0-9_-]{1,32}")) {
                        project.setName(args[1]);
                        project.save();
                        p.sendMessage(projectsPrefix + "Has cambiado el nombre del proyecto a §a" + project.getName() + "§f.");
                    } else {
                        p.sendMessage(projectsPrefix + "Introduce un nombre válido.");
                    }
                } else {
                    p.sendMessage(projectsPrefix + "No puedes administrar tu proyecto mientras está pendiente.");
                }
            } else {
                p.sendMessage(projectsPrefix + "No eres el líder de este proyecto.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de nigún proyecto.");
        }
    }
    if (args[0].equals("pending") || args[0].equals("pendientes")) {
        if (!(p.hasPermission("bteconosur.projects.manage.pending"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        Configuration pendingConfig = new Configuration(Bukkit.getPluginManager().getPlugin("bteConoSur"), "pending_projects/pending");
        List<String> pending = pendingConfig.getStringList(new OldCountry(p.getLocation()).getName());
        if (!pending.isEmpty()) {
            BookUtil.BookBuilder book = BookUtil.writtenBook();
            List<BaseComponent[]> pages = new ArrayList<>();
            List<List<String>> subLists = Lists.partition(pending, 12);
            for (List<String> subList : subLists) {
                BookUtil.PageBuilder page = new BookUtil.PageBuilder();
                page.add("§7---[ §rPENDIENTES §7]---");
                page.newLine();
                for (String str : subList) {
                    try {
                        Project project = new Project(str);
                        String coord = project.getAverageCoordinate().getBlockX() + " " + new Coords2D(project.getAverageCoordinate()).getHighestY() + " " + project.getAverageCoordinate().getBlockZ();
                        page.add("- ");
                        page.add(BookUtil.TextBuilder.of(str).onHover(BookUtil.HoverAction.showText("Click para ir")).onClick(BookUtil.ClickAction.runCommand("/tp " + coord)).build());
                        page.newLine();
                    } catch (Exception exception) {
                        exception.printStackTrace();
                    }
                }
                pages.add(page.build());
            }
            book.pages(pages);
            BookUtil.openPlayer(p, book.build());
        } else {
            p.sendMessage(projectsPrefix + "No hay proyectos pendientes de revisión en este país.");
        }
    }
    if (args[0].equals("finish") || args[0].equals("terminar") || args[0].equals("finalizar")) {
        if (!(p.hasPermission("bteconosur.projects.finish"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            if (project.getOwner() == p) {
                if (!(project.isPending())) {
                    if (finishConfirmation.contains(p)) {
                        finishConfirmation.remove(p);
                        project.setPending(true);
                        project.save();
                        p.sendMessage(projectsPrefix + "Has marcado el proyecto §a" + project.getName() + "§f como terminado.");
                        for (OfflinePlayer member : project.getMembers()) {
                            new ServerPlayer(member).sendNotification(projectsPrefix + "**§a" + new ServerPlayer(project.getOwner()).getName() + "§f** ha marcado el proyecto **§a" + project.getName(true) + "§f** como terminado.");
                        }
                        project.getCountry().getLogs().sendMessage(":lock: **" + s.getName() + "** ha marcado el proyecto `" + project.getId() + "` como terminado.").queue();
                    } else {
                        finishConfirmation.add(p);
                        p.sendMessage(projectsPrefix + "§cNo podrás construir ni administrar tu proyecto mientras está en revisión. §fUsa el comando de nuevo para confirmar.");
                    }
                } else {
                    p.sendMessage("Este proyecto ya está marcado como terminado.");
                }
            } else {
                p.sendMessage(projectsPrefix + " No eres el líder de este proyecto.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
    }
    if (args[0].equals("info") || args[0].equals("informacion")) {
        if (!(p.hasPermission("bteconosur.projects.info"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            // --------------------------------
            BookUtil.BookBuilder builder = BookUtil.writtenBook();
            BookUtil.PageBuilder page = new BookUtil.PageBuilder();
            page.add("----[ PROYECTO ]----");
            page.newLine();
            if (!Objects.equals(project.getName(), project.getId())) {
                page.add(BookUtil.TextBuilder.of("Nombre: ").color(ChatColor.GREEN).style(ChatColor.BOLD).build());
                page.add(project.getName());
                page.newLine();
            }
            page.add(BookUtil.TextBuilder.of("ID: ").color(ChatColor.GREEN).style(ChatColor.BOLD).build());
            page.add(project.getId());
            page.newLine();
            page.add(BookUtil.TextBuilder.of("Dificultad: ").color(ChatColor.GREEN).style(ChatColor.BOLD).build());
            page.add(project.getDifficulty().toString().toLowerCase().replace("facil", "Fácil").replace("intermedio", "Intermedio").replace("dificil", "Difícil"));
            page.newLine();
            page.add(BookUtil.TextBuilder.of("País: ").color(ChatColor.GREEN).style(ChatColor.BOLD).build());
            page.add(StringUtils.capitalize(project.getCountry().getName().replace("peru", "perú")));
            page.newLine();
            if (project.getTag() != null) {
                page.add(BookUtil.TextBuilder.of("Tipo: ").color(ChatColor.GREEN).style(ChatColor.BOLD).build());
                page.add(StringUtils.capitalize(project.getTag().toString().toLowerCase().replace("_", " ")));
                page.newLine();
            }
            // GMAPS
            Coords2D gMaps = new Coords2D(project.getAverageCoordinate());
            page.add(BookUtil.TextBuilder.of("GoogleMaps: ").color(ChatColor.GREEN).style(ChatColor.BOLD).build());
            page.add(BookUtil.TextBuilder.of("ENLACE").color(ChatColor.BLACK).style(ChatColor.UNDERLINE).onHover(BookUtil.HoverAction.showText("Haz click para abrir el enlace.")).onClick(BookUtil.ClickAction.openUrl("https://www.google.com/maps/@" + gMaps.getLat() + "," + gMaps.getLon() + ",19z")).build());
            page.newLine();
            if (project.getOwner() != null) {
                page.add(BookUtil.TextBuilder.of("Líder: ").color(ChatColor.GREEN).style(ChatColor.BOLD).build());
                page.add(BookUtil.TextBuilder.of(new ServerPlayer(project.getOwner()).getName()).onHover(BookUtil.HoverAction.showText(new ServerPlayer(project.getOwner()).getLore())).build());
                page.newLine();
            }
            int i = 1;
            if (!project.getMembers().isEmpty()) {
                page.add("§a§lMiembro(s): §r");
                for (OfflinePlayer member : project.getMembers()) {
                    page.add(BookUtil.TextBuilder.of(new ServerPlayer(member).getName()).onHover(BookUtil.HoverAction.showText(new ServerPlayer(member).getLore())).build());
                    if (i < project.getMembers().size()) {
                        page.add(", ");
                    }
                    i++;
                }
            }
            builder.pages(page.build());
            BookUtil.openPlayer(p, builder.build());
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
    }
    if (args[0].equals("list") || args[0].equals("lista")) {
        if (!(p.hasPermission("bteconosur.projects.list"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        if (projectsManager.getAllProjects().size() != 0) {
            BookUtil.BookBuilder book = BookUtil.writtenBook();
            List<BaseComponent[]> pages = new ArrayList<>();
            for (String id : projectsManager.getAllProjects()) {
                Project project = new Project(id);
                BookUtil.PageBuilder page = new BookUtil.PageBuilder();
                if (!Objects.equals(project.getName(), project.getId())) {
                    page.add("§a§lNombre: §r" + project.getName());
                    page.newLine();
                }
                page.add("§a§lID: §r" + project.getId());
                page.newLine();
                page.add("§a§lDificultad: §r" + project.getDifficulty().toString().toUpperCase());
                page.newLine();
                page.add("§a§lPaís: §r" + StringUtils.capitalize(project.getCountry().getName().replace("peru", "perú")));
                page.newLine();
                page.add("§a§lCoordenadas: §r\n");
                page.add(BookUtil.TextBuilder.of(project.getAverageCoordinate().getBlockX() + " " + new Coords2D(project.getAverageCoordinate()).getHighestY() + " " + project.getAverageCoordinate().getBlockZ()).onHover(BookUtil.HoverAction.showText("Click para ir")).onClick(BookUtil.ClickAction.runCommand("/tp " + project.getAverageCoordinate().getBlockX() + " " + new Coords2D(project.getAverageCoordinate()).getHighestY() + " " + project.getAverageCoordinate().getBlockZ())).build());
                page.newLine();
                page.add("§a§lLíder: §r");
                ServerPlayer sOwner = new ServerPlayer(project.getOwner());
                page.add(BookUtil.TextBuilder.of(sOwner.getName()).onHover(BookUtil.HoverAction.showText(sOwner.getLore())).build());
                page.newLine();
                int i = 1;
                List<OfflinePlayer> members = project.getMembers();
                if (!members.isEmpty()) {
                    page.add("§a§lMiembro(s): §r");
                    for (OfflinePlayer member : members) {
                        ServerPlayer sMember = new ServerPlayer(member);
                        page.add(BookUtil.TextBuilder.of(sMember.getName()).onHover(BookUtil.HoverAction.showText(sMember.getLore())).build());
                        if (i < members.size()) {
                            page.add(", ");
                        }
                        i++;
                    }
                }
                pages.add(page.build());
            }
            book.pages(pages);
            BookUtil.openPlayer(p, book.build());
        } else {
            p.sendMessage(projectsPrefix + "No tienes proyectos activos.");
        }
    }
    if (args[0].equals("manage") || args[0].equals("manejar")) {
        if (!(p.hasPermission("bteconosur.projects.members"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            if (project.getOwner() == p) {
                Inventory gui = Bukkit.createInventory(null, 53, "Proyecto " + project.getName(true));
                List<Integer> membersSlots = Arrays.asList(28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43);
                for (int i = 0; i < 53; i++) {
                    if (!membersSlots.contains(i)) {
                        gui.setItem(i, background);
                    }
                }
                p.openInventory(gui);
            } else {
                p.sendMessage(projectsPrefix + "No eres el líder de este proyecto.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
    }
    if (args[0].equals("request") || args[0].equals("solicitar")) {
        if (!(p.hasPermission("bteconosur.projects.request"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            if (project.getOwner() != null) {
                if (!(project.getAllMembers().contains(p))) {
                    new ServerPlayer(project.getOwner()).sendNotification(projectsPrefix + "**§a" + s.getName() + "§f** ha solicitado unirse a tu proyecto **§a" + project.getName(true) + "§f**.");
                } else {
                    p.sendMessage(projectsPrefix + "Ya eres parte de este proyecto.");
                }
            } else {
                p.sendMessage(projectsPrefix + "Este proyecto no está reclamado aún.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningun proyecto.");
        }
    }
    if (args[0].equals("tutorial")) {
        if (!(p.hasPermission("bteconosur.projects.tutorial"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
    }
    if (args[0].equals("redefine") || args[0].equals("redefinir")) {
        if (!(p.hasPermission("bteconosur.projects.redefine"))) {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            return true;
        }
        try {
            Project project = new Project(p.getLocation());
            // GET POINTS
            List<BlockVector2D> points;
            try {
                points = polyRegion(getSelection(p)).getPoints();
            } catch (IncompleteRegionException e) {
                p.sendMessage(projectsPrefix + "Selecciona un área primero.");
                return true;
            } catch (IllegalArgumentException e) {
                p.sendMessage(projectsPrefix + "Debes seleccionar una region cúbica o poligonal.");
                return true;
            }
            if (points.size() > maxProjectPoints) {
                p.sendMessage(projectsPrefix + "La selección no puede tener más de " + maxProjectPoints + " puntos.");
                return true;
            }
            if (p.hasPermission("bteconosur.projects.manage.redefine")) {
                if (!s.getPermissionCountries().contains(project.getCountry())) {
                    p.sendMessage(projectsPrefix + "No puedes hacer esto aquí.");
                    return true;
                }
                if (project.isPending()) {
                    p.sendMessage("No puedes hacer esto mientras el proyecto está pendiente de revisión.");
                    return true;
                }
                if (args.length < 2) {
                    p.sendMessage(projectsPrefix + "Introduce una dificultad, puede ser §afacil§f, §aintermedio§f o §adificil§f.");
                    return true;
                }
                if ((!(args[1].equals("facil"))) && (!(args[1].equals("intermedio"))) && (!(args[1].equals("dificil")))) {
                    p.sendMessage(projectsPrefix + "Introduce una dificultad válida, puede ser §afacil§f, §aintermedio§f o §adificil§f.");
                    return true;
                }
                project.setDifficulty(Project.Difficulty.valueOf(args[1]));
                project.setPoints(points);
                project.save();
                // SEND MESSAGES
                p.sendMessage(projectsPrefix + "Proyecto con la ID §a" + project.getId() + "§f redefinido con dificultad §a" + project.getDifficulty().toString().toUpperCase() + "§f.");
                StringBuilder dscMessage = new StringBuilder(":clipboard: **" + p.getName() + "** ha redefinido el proyecto `" + project.getId() + "` con dificultad `" + args[1].toUpperCase() + "` en las coordenadas: \n");
                for (BlockVector2D point : project.getPoints()) {
                    dscMessage.append("> ").append(Math.floor(point.getX())).append(" ").append(Math.floor(p.getWorld().getHighestBlockAt(point.getBlockX(), point.getBlockZ()).getY())).append(" ").append(Math.floor(point.getZ())).append("\n");
                }
                dscMessage = new StringBuilder(dscMessage.toString().replace(".0", ""));
                StringBuilder notif = new StringBuilder("Tu proyecto **§a" + project.getName(true) + "§f** ha sido redefinido con dificultad **§a" + project.getDifficulty().toString().toUpperCase() + "§f** en las coordenadas: \n");
                for (BlockVector2D point : project.getPoints()) {
                    notif.append("> ").append(Math.floor(point.getX())).append(" ").append(Math.floor(p.getWorld().getHighestBlockAt(point.getBlockX(), point.getBlockZ()).getY())).append(" ").append(Math.floor(point.getZ())).append("\n");
                }
                if (project.getOwner() != null) {
                    new ServerPlayer(project.getOwner()).sendNotification(notif.toString());
                }
                project.getCountry().getLogs().sendMessage(dscMessage.toString()).queue();
                return true;
            } else if (p.hasPermission("bteconosur.projects.redefine")) {
                if (project.getOwner() != p) {
                    p.sendMessage(projectsPrefix + "No eres el líder de este proyecto.");
                    return true;
                }
                if (project.isPending()) {
                    p.sendMessage("No puedes hacer esto mientras el proyecto está pendiente de revisión.");
                    return true;
                }
                EmbedBuilder request = new EmbedBuilder();
                request.setColor(new Color(0, 255, 42));
                request.setTitle(new ServerPlayer(p).getName() + " quiere redefinir el proyecto " + project.getId().toUpperCase() + ".");
                List<String> oldCoords = new ArrayList<>();
                for (BlockVector2D point : project.getPoints()) {
                    oldCoords.add(("> " + point.getX() + " " + new Coords2D(point).getHighestY() + " " + point.getZ()).replace(".0", ""));
                }
                request.addField(":blue_circle: Coordenadas antiguas:", String.join("\n", oldCoords), false);
                List<String> newCoords = new ArrayList<>();
                for (BlockVector2D point : points) {
                    newCoords.add(("> " + point.getX() + " " + new Coords2D(point).getHighestY() + " " + point.getZ()).replace(".0", ""));
                }
                request.addField(":red_circle: Coordenadas nuevas:", String.join("\n", newCoords), false);
                // GMAPS
                BlockVector2D average = project.getAverageCoordinate();
                Coords2D geoCoord = new Coords2D(average);
                request.addField(":map: Google Maps:", "https://www.google.com/maps/@" + geoCoord.getLat() + "," + geoCoord.getLon() + ",19z", false);
                // IMAGE
                String url;
                List<String> coordsOld = new ArrayList<>();
                for (BlockVector2D point : project.getPoints()) {
                    coordsOld.add(new Coords2D(point).getLat() + "," + new Coords2D(point).getLon());
                }
                coordsOld.add(new Coords2D(project.getPoints().get(0)).getLat() + "," + new Coords2D(project.getPoints().get(0)).getLon());
                List<String> coordsNew = new ArrayList<>();
                for (BlockVector2D point : points) {
                    coordsNew.add(new Coords2D(point).getLat() + "," + new Coords2D(point).getLon());
                }
                coordsNew.add(new Coords2D(points.get(0)).getLat() + "," + new Coords2D(points.get(0)).getLon());
                url = "https://open.mapquestapi.com/staticmap/v5/map?key=" + key + "&type=sat&shape=" + String.join("|", coordsOld) + "|fill:6382DC50&shape=" + String.join("|", coordsNew) + "|fill:ff000050|border:ff0000&size=1280,720&imagetype=png";
                request.setImage(url);
                ActionRow actionRow = ActionRow.of(Button.of(ButtonStyle.SECONDARY, "facil", "Fácil", Emoji.fromMarkdown("\uD83D\uDFE2")), Button.of(ButtonStyle.SECONDARY, "intermedio", "Intermedio", Emoji.fromMarkdown("\uD83D\uDFE1")), Button.of(ButtonStyle.SECONDARY, "dificil", "Difícil", Emoji.fromMarkdown("\uD83D\uDD34")), Button.of(ButtonStyle.DANGER, "rechazar", "Rechazar", Emoji.fromMarkdown("✖️")));
                MessageBuilder message = new MessageBuilder();
                message.setEmbeds(request.build());
                message.setActionRows(actionRow);
                project.getCountry().getRequests().sendMessage(message.build()).queue();
                p.sendMessage(projectsPrefix + "Se ha enviado una solicitud para redefinir tu proyecto.");
            } else {
                p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
            }
        } catch (Exception e) {
            p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
        }
    }
    if (args[0].equals("tag") || args[0].equals("etiqueta")) {
        if (p.hasPermission("bteconosur.projects.manage.tag")) {
            try {
                Project project = new Project(p.getLocation());
                if (!(s.getPermissionCountries().contains(project.getCountry()))) {
                    p.sendMessage(projectsPrefix + "No puedes hacer esto aquí.");
                }
                if (args.length > 1) {
                    if (args[1].equals("edificios") || args[1].equals("departamentos") || args[1].equals("casas") || args[1].equals("parques") || args[1].equals("establecimientos") || args[1].equals("carreteras") || args[1].equals("centros_comerciales")) {
                        project.setTag(Project.Tag.valueOf(args[1]));
                        project.save();
                        project.getCountry().getLogs().sendMessage(":label: **" + s.getName() + "** ha establecido la etiqueta del proyecto `" + project.getId() + "` en **" + args[1].replace("_", " ").toUpperCase() + "**.").queue();
                        p.sendMessage(projectsPrefix + "Has establecido la etiquteda del proyecto §a" + project.getId() + "§f en §a" + args[1].replace("_", " ").toUpperCase() + "§f.");
                    } else if (args[1].equals("delete")) {
                        project.setTag(null);
                        project.save();
                        project.getCountry().getLogs().sendMessage(":label: **" + s.getName() + "** ha eliminado la etiqueta del proyecto `" + project.getId() + "`.").queue();
                        p.sendMessage(projectsPrefix + "Has eliminado la etiqueta del proyecto §a" + project.getId() + "§f.");
                    } else {
                        p.sendMessage(projectsPrefix + "Introduce una etiqueta válida.");
                    }
                } else {
                    p.sendMessage(projectsPrefix + "Introduce una etiqueta.");
                }
            } catch (Exception e) {
                e.printStackTrace();
                p.sendMessage(projectsPrefix + "No estás dentro de ningún proyecto.");
            }
        } else {
            p.sendMessage(projectsPrefix + "§cNo tienes permiso para hacer eso.");
        }
    }
    if (args[0].equals("find") || args[0].equals("encontrar")) {
        Inventory pRandomGui = Bukkit.createInventory(null, 27, "1. Elige una dificultad");
        ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
        ItemMeta gMeta = glass.getItemMeta();
        gMeta.setDisplayName(" ");
        glass.setItemMeta(gMeta);
        for (int i = 0; i < 27; i++) {
            pRandomGui.setItem(i, background);
        }
        pRandomGui.setItem(11, getCustomHead("§aFácil §f- 15 puntos", "§fProyectos de un área pequeña, con construcciones simples y rápidas.", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmFlMTE5YTIzODJlZGE4NjRiMjQ0ZmE4YzUzYWMzZTU0NDE2MzEwM2VlNjY3OTVmMGNkNmM2NGY3YWJiOGNmMSJ9fX0="));
        pRandomGui.setItem(13, getCustomHead("§eIntermedio §f- 50 puntos", "§fProyectos con una dificultad intermedia, que requieren un cierto nivel de planeación y dedicación.", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjIxOTk5NDM3YjFkZTJjNDcyMGFhZDQzMmIyZWE1MzgyZTE1NDgyNzc1MjNmMjViMGY1NWMzOWEwMWMyYTljMCJ9fX0="));
        pRandomGui.setItem(15, getCustomHead("§cDifícil §f- 100 puntos", "§fProyectos de gran tamaño y/o dificultad, que requieren gran detalle y planificación previa.", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQ1ZTg1ZWRkYTFhODFkMjI0YWRiNzEzYjEzYjcwMzhkNWNjNmJlY2Q5OGE3MTZiOGEzZGVjN2UzYTBmOTgxNyJ9fX0="));
        p.openInventory(pRandomGui);
    }
    return true;
}
Also used : OldCountry(pizzaaxx.bteconosur.country.OldCountry) Configuration(pizzaaxx.bteconosur.yaml.Configuration) Polygonal2DRegionSelector(com.sk89q.worldedit.regions.selector.Polygonal2DRegionSelector) BlockVector2D(com.sk89q.worldedit.BlockVector2D) IncompleteRegionException(com.sk89q.worldedit.IncompleteRegionException) ProjectsManager(pizzaaxx.bteconosur.serverPlayer.ProjectsManager) TextChannel(net.dv8tion.jda.api.entities.TextChannel) MessageBuilder(net.dv8tion.jda.api.MessageBuilder) PointsManager(pizzaaxx.bteconosur.serverPlayer.PointsManager) List(java.util.List) ItemMeta(org.bukkit.inventory.meta.ItemMeta) GroupsManager(pizzaaxx.bteconosur.serverPlayer.GroupsManager) Player(org.bukkit.entity.Player) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) Color(java.awt.Color) ActionRow(net.dv8tion.jda.api.interactions.components.ActionRow) BukkitWorld(com.sk89q.worldedit.bukkit.BukkitWorld) IncompleteRegionException(com.sk89q.worldedit.IncompleteRegionException) Coords2D(pizzaaxx.bteconosur.coords.Coords2D) EmbedBuilder(net.dv8tion.jda.api.EmbedBuilder) ServerPlayer(pizzaaxx.bteconosur.serverPlayer.ServerPlayer) BookUtil(xyz.upperlevel.spigot.book.BookUtil) ItemStack(org.bukkit.inventory.ItemStack) Inventory(org.bukkit.inventory.Inventory) Misc.getCountryAtLocation(pizzaaxx.bteconosur.misc.Misc.getCountryAtLocation)

Aggregations

Player (org.bukkit.entity.Player)6 GroupsManager (pizzaaxx.bteconosur.serverPlayer.GroupsManager)6 ServerPlayer (pizzaaxx.bteconosur.serverPlayer.ServerPlayer)6 OfflinePlayer (org.bukkit.OfflinePlayer)4 EmbedBuilder (net.dv8tion.jda.api.EmbedBuilder)3 BlockVector2D (com.sk89q.worldedit.BlockVector2D)2 IncompleteRegionException (com.sk89q.worldedit.IncompleteRegionException)2 Inventory (org.bukkit.inventory.Inventory)2 OldCountry (pizzaaxx.bteconosur.country.OldCountry)2 DataManager (pizzaaxx.bteconosur.serverPlayer.DataManager)2 Configuration (pizzaaxx.bteconosur.yaml.Configuration)2 BukkitWorld (com.sk89q.worldedit.bukkit.BukkitWorld)1 Polygonal2DRegionSelector (com.sk89q.worldedit.regions.selector.Polygonal2DRegionSelector)1 RegionManager (com.sk89q.worldguard.protection.managers.RegionManager)1 ProtectedRegion (com.sk89q.worldguard.protection.regions.ProtectedRegion)1 Color (java.awt.Color)1 IOException (java.io.IOException)1 URL (java.net.URL)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1