Search in sources :

Example 16 with GeneralRegion

use of me.wiefferink.areashop.regions.GeneralRegion in project AreaShop by NLthijs48.

the class AddCommand method execute.

@Override
public void execute(final CommandSender sender, final String[] args) {
    if (!sender.hasPermission("areashop.createrent") && !sender.hasPermission("areashop.createrent.member") && !sender.hasPermission("areashop.createrent.owner") && !sender.hasPermission("areashop.createbuy") && !sender.hasPermission("areashop.createbuy.member") && !sender.hasPermission("areashop.createbuy.owner")) {
        plugin.message(sender, "add-noPermission");
        return;
    }
    if (args.length < 2 || args[1] == null || (!"rent".equals(args[1].toLowerCase()) && !"buy".equals(args[1].toLowerCase()))) {
        plugin.message(sender, "add-help");
        return;
    }
    Map<String, ProtectedRegion> regions = new HashMap<>();
    World world;
    Player player = null;
    if (sender instanceof Player) {
        player = (Player) sender;
    }
    if (args.length == 2) {
        if (player == null) {
            plugin.message(sender, "cmd-weOnlyByPlayer");
            return;
        }
        Selection selection = plugin.getWorldEdit().getSelection(player);
        if (selection == null) {
            plugin.message(player, "cmd-noSelection");
            return;
        }
        world = selection.getWorld();
        regions = Utils.getWorldEditRegionsInSelection(selection).stream().collect(Collectors.toMap(ProtectedRegion::getId, region -> region));
        if (regions.size() == 0) {
            plugin.message(player, "cmd-noWERegionsFound");
            return;
        }
    } else {
        if (player != null) {
            if (args.length == 4) {
                world = Bukkit.getWorld(args[3]);
                if (world == null) {
                    plugin.message(sender, "add-incorrectWorld", args[3]);
                    return;
                }
            } else {
                world = ((Player) sender).getWorld();
            }
        } else {
            if (args.length < 4) {
                plugin.message(sender, "add-specifyWorld");
                return;
            } else {
                world = Bukkit.getWorld(args[3]);
                if (world == null) {
                    plugin.message(sender, "add-incorrectWorld", args[3]);
                    return;
                }
            }
        }
        ProtectedRegion region = plugin.getWorldGuard().getRegionManager(world).getRegion(args[2]);
        if (region == null) {
            plugin.message(sender, "cmd-noRegion", args[2]);
            return;
        }
        regions.put(args[2], region);
    }
    final boolean isRent = "rent".equals(args[1].toLowerCase());
    final Map<String, ProtectedRegion> finalRegions = regions;
    final Player finalPlayer = player;
    final World finalWorld = world;
    AreaShop.debug("Starting add task with " + regions.size() + " regions");
    TreeSet<GeneralRegion> regionsSuccess = new TreeSet<>();
    TreeSet<GeneralRegion> regionsAlready = new TreeSet<>();
    TreeSet<String> namesBlacklisted = new TreeSet<>();
    TreeSet<String> namesNoPermission = new TreeSet<>();
    Do.forAll(plugin.getConfig().getInt("adding.regionsPerTick"), regions.entrySet(), regionEntry -> {
        String regionName = regionEntry.getKey();
        ProtectedRegion region = regionEntry.getValue();
        // Determine if the player is an owner or member of the region
        boolean isMember = finalPlayer != null && plugin.getWorldGuardHandler().containsMember(region, finalPlayer.getUniqueId());
        boolean isOwner = finalPlayer != null && plugin.getWorldGuardHandler().containsMember(region, finalPlayer.getUniqueId());
        String type;
        if (isRent) {
            type = "rent";
        } else {
            type = "buy";
        }
        FileManager.AddResult result = plugin.getFileManager().checkRegionAdd(sender, region, isRent ? GeneralRegion.RegionType.RENT : GeneralRegion.RegionType.BUY);
        if (result == FileManager.AddResult.ALREADYADDED) {
            regionsAlready.add(plugin.getFileManager().getRegion(regionName));
        } else if (result == FileManager.AddResult.BLACKLISTED) {
            namesBlacklisted.add(regionName);
        } else if (result == FileManager.AddResult.NOPERMISSION) {
            namesNoPermission.add(regionName);
        } else {
            // Check if the player should be landlord
            boolean landlord = (!sender.hasPermission("areashop.create" + type) && ((sender.hasPermission("areashop.create" + type + ".owner") && isOwner) || (sender.hasPermission("areashop.create" + type + ".member") && isMember)));
            List<UUID> existing = new ArrayList<>();
            existing.addAll(plugin.getWorldGuardHandler().getOwners(region).asUniqueIdList());
            existing.addAll(plugin.getWorldGuardHandler().getMembers(region).asUniqueIdList());
            if (isRent) {
                RentRegion rent = new RentRegion(regionName, finalWorld);
                // Set landlord
                if (landlord) {
                    rent.setLandlord(finalPlayer.getUniqueId(), finalPlayer.getName());
                }
                // Run commands
                rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
                plugin.getFileManager().addRent(rent);
                rent.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
                rent.update();
                // Run commands
                rent.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
                // Add existing owners/members if any
                if (!landlord && !existing.isEmpty()) {
                    // TODO also execute rent events to notify other plugins?
                    // Run commands
                    rent.runEventCommands(GeneralRegion.RegionEvent.RENTED, true);
                    // Add values to the rent and send it to FileManager
                    rent.setRentedUntil(Calendar.getInstance().getTimeInMillis() + rent.getDuration());
                    rent.setRenter(existing.remove(0));
                    rent.updateLastActiveTime();
                    // Add others as friends
                    for (UUID friend : existing) {
                        rent.getFriendsFeature().addFriend(friend, null);
                    }
                    // Fire schematic event and updated times extended
                    rent.handleSchematicEvent(GeneralRegion.RegionEvent.RENTED);
                    // Notify about updates
                    rent.update();
                    rent.runEventCommands(GeneralRegion.RegionEvent.RENTED, false);
                }
                regionsSuccess.add(rent);
            } else {
                BuyRegion buy = new BuyRegion(regionName, finalWorld);
                // Set landlord
                if (landlord) {
                    buy.setLandlord(finalPlayer.getUniqueId(), finalPlayer.getName());
                }
                // Run commands
                buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, true);
                plugin.getFileManager().addBuy(buy);
                buy.handleSchematicEvent(GeneralRegion.RegionEvent.CREATED);
                buy.update();
                // Run commands
                buy.runEventCommands(GeneralRegion.RegionEvent.CREATED, false);
                // Add existing owners/members if any
                if (!landlord && !existing.isEmpty()) {
                    // TODO also execute buy events to notify for other plugins?
                    // Run commands
                    buy.runEventCommands(GeneralRegion.RegionEvent.BOUGHT, true);
                    // Set the owner
                    buy.setBuyer(existing.remove(0));
                    buy.updateLastActiveTime();
                    // Add others as friends
                    for (UUID friend : existing) {
                        buy.getFriendsFeature().addFriend(friend, null);
                    }
                    // Notify about updates
                    buy.update();
                    // Update everything
                    buy.handleSchematicEvent(GeneralRegion.RegionEvent.BOUGHT);
                    // Run commands
                    buy.runEventCommands(GeneralRegion.RegionEvent.BOUGHT, false);
                }
                regionsSuccess.add(buy);
            }
        }
    }, () -> {
        if (!regionsSuccess.isEmpty()) {
            plugin.message(sender, "add-success", args[1], Utils.combinedMessage(regionsSuccess, "region"));
        }
        if (!regionsAlready.isEmpty()) {
            plugin.message(sender, "add-failed", Utils.combinedMessage(regionsAlready, "region"));
        }
        if (!namesBlacklisted.isEmpty()) {
            plugin.message(sender, "add-blacklisted", Utils.createCommaSeparatedList(namesBlacklisted));
        }
        if (!namesNoPermission.isEmpty()) {
            plugin.message(sender, "add-noPermissionRegions", Utils.createCommaSeparatedList(namesNoPermission));
            plugin.message(sender, "add-noPermissionOwnerMember");
        }
    });
}
Also used : Player(org.bukkit.entity.Player) HashMap(java.util.HashMap) Selection(com.sk89q.worldedit.bukkit.selections.Selection) ArrayList(java.util.ArrayList) RentRegion(me.wiefferink.areashop.regions.RentRegion) World(org.bukkit.World) FileManager(me.wiefferink.areashop.managers.FileManager) TreeSet(java.util.TreeSet) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) ProtectedRegion(com.sk89q.worldguard.protection.regions.ProtectedRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) UUID(java.util.UUID)

Example 17 with GeneralRegion

use of me.wiefferink.areashop.regions.GeneralRegion in project AreaShop by NLthijs48.

the class DelfriendCommand method execute.

@SuppressWarnings("deprecation")
@Override
public void execute(CommandSender sender, String[] args) {
    if (!sender.hasPermission("areashop.delfriend") && !sender.hasPermission("areashop.delfriendall")) {
        plugin.message(sender, "delfriend-noPermission");
        return;
    }
    if (args.length < 2) {
        plugin.message(sender, "delfriend-help");
        return;
    }
    GeneralRegion region;
    if (args.length <= 2) {
        if (sender instanceof Player) {
            // get the region by location
            List<GeneralRegion> regions = Utils.getImportantRegions(((Player) sender).getLocation());
            if (regions.isEmpty()) {
                plugin.message(sender, "cmd-noRegionsAtLocation");
                return;
            } else if (regions.size() > 1) {
                plugin.message(sender, "cmd-moreRegionsAtLocation");
                return;
            } else {
                region = regions.get(0);
            }
        } else {
            plugin.message(sender, "cmd-automaticRegionOnlyByPlayer");
            return;
        }
    } else {
        region = plugin.getFileManager().getRegion(args[2]);
        if (region == null) {
            plugin.message(sender, "cmd-notRegistered", args[2]);
            return;
        }
    }
    if (sender.hasPermission("areashop.delfriendall")) {
        if ((region instanceof RentRegion && !((RentRegion) region).isRented()) || (region instanceof BuyRegion && !((BuyRegion) region).isSold())) {
            plugin.message(sender, "delfriend-noOwner", region);
            return;
        }
        OfflinePlayer friend = Bukkit.getOfflinePlayer(args[1]);
        if (!region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
            plugin.message(sender, "delfriend-notAdded", friend.getName(), region);
            return;
        }
        if (region.getFriendsFeature().deleteFriend(friend.getUniqueId(), sender)) {
            region.update();
            plugin.message(sender, "delfriend-successOther", friend.getName(), region);
        }
    } else {
        if (sender.hasPermission("areashop.delfriend") && sender instanceof Player) {
            if (region.isOwner((Player) sender)) {
                OfflinePlayer friend = Bukkit.getOfflinePlayer(args[1]);
                if (!region.getFriendsFeature().getFriends().contains(friend.getUniqueId())) {
                    plugin.message(sender, "delfriend-notAdded", friend.getName(), region);
                    return;
                }
                if (region.getFriendsFeature().deleteFriend(friend.getUniqueId(), sender)) {
                    region.update();
                    plugin.message(sender, "delfriend-success", friend.getName(), region);
                }
            } else {
                plugin.message(sender, "delfriend-noPermissionOther", region);
            }
        } else {
            plugin.message(sender, "delfriend-noPermission", region);
        }
    }
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) OfflinePlayer(org.bukkit.OfflinePlayer) RentRegion(me.wiefferink.areashop.regions.RentRegion)

Example 18 with GeneralRegion

use of me.wiefferink.areashop.regions.GeneralRegion in project AreaShop by NLthijs48.

the class GroupdelCommand method execute.

@Override
public void execute(CommandSender sender, String[] args) {
    if (!sender.hasPermission("areashop.groupdel")) {
        plugin.message(sender, "groupdel-noPermission");
        return;
    }
    if (args.length < 2 || args[1] == null) {
        plugin.message(sender, "groupdel-help");
        return;
    }
    RegionGroup group = plugin.getFileManager().getGroup(args[1]);
    if (group == null) {
        plugin.message(sender, "groupdel-wrongGroup", args[1]);
        return;
    }
    if (args.length == 2) {
        if (!(sender instanceof Player)) {
            plugin.message(sender, "cmd-weOnlyByPlayer");
            return;
        }
        Player player = (Player) sender;
        Selection selection = plugin.getWorldEdit().getSelection(player);
        if (selection == null) {
            plugin.message(player, "cmd-noSelection");
            return;
        }
        List<GeneralRegion> regions = Utils.getRegionsInSelection(selection);
        if (regions.size() == 0) {
            plugin.message(player, "cmd-noRegionsFound");
            return;
        }
        TreeSet<GeneralRegion> regionsSuccess = new TreeSet<>();
        TreeSet<GeneralRegion> regionsFailed = new TreeSet<>();
        for (GeneralRegion region : regions) {
            if (group.removeMember(region)) {
                regionsSuccess.add(region);
            } else {
                regionsFailed.add(region);
            }
        }
        if (regionsSuccess.size() != 0) {
            plugin.message(player, "groupdel-weSuccess", group.getName(), Utils.combinedMessage(regionsSuccess, "region"));
        }
        if (regionsFailed.size() != 0) {
            plugin.message(player, "groupdel-weFailed", group.getName(), Utils.combinedMessage(regionsFailed, "region"));
        }
        // Update all regions, this does it in a task, updating them without lag
        plugin.getFileManager().updateRegions(new ArrayList<>(regionsSuccess), player);
        group.saveRequired();
    } else {
        GeneralRegion region = plugin.getFileManager().getRegion(args[2]);
        if (region == null) {
            plugin.message(sender, "cmd-notRegistered", args[2]);
            return;
        }
        if (group.removeMember(region)) {
            region.update();
            plugin.message(sender, "groupdel-success", group.getName(), group.getMembers().size(), region);
        } else {
            plugin.message(sender, "groupdel-failed", group.getName(), region);
        }
    }
}
Also used : Player(org.bukkit.entity.Player) Selection(com.sk89q.worldedit.bukkit.selections.Selection) TreeSet(java.util.TreeSet) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) RegionGroup(me.wiefferink.areashop.regions.RegionGroup)

Example 19 with GeneralRegion

use of me.wiefferink.areashop.regions.GeneralRegion in project AreaShop by NLthijs48.

the class InfoCommand method execute.

@Override
public void execute(CommandSender sender, String[] args) {
    if (!sender.hasPermission("areashop.info")) {
        plugin.message(sender, "info-noPermission");
        return;
    }
    if (args.length > 1 && args[1] != null) {
        // Get filter group (only used by some commands)
        RegionGroup filterGroup = null;
        Set<String> groupFilters = new HashSet<>(Arrays.asList("all", "rented", "forrent", "sold", "forsale", "reselling"));
        if (groupFilters.contains(args[1].toLowerCase()) && args.length > 2) {
            if (!Utils.isNumeric(args[2])) {
                filterGroup = plugin.getFileManager().getGroup(args[2]);
                if (filterGroup == null) {
                    plugin.message(sender, "info-noFiltergroup", args[2]);
                    return;
                }
                // Pass page number to args[2] if available
                if (args.length > 3) {
                    args[2] = args[3];
                }
            }
        }
        // All regions
        if (args[1].equalsIgnoreCase("all")) {
            showSortedPagedList(sender, plugin.getFileManager().getRegions(), filterGroup, "info-allHeader", (args.length > 2 ? args[2] : null), "info all");
        } else // Rented regions
        if (args[1].equalsIgnoreCase("rented")) {
            List<RentRegion> regions = plugin.getFileManager().getRents();
            regions.removeIf(RentRegion::isAvailable);
            showSortedPagedList(sender, regions, filterGroup, "info-rentedHeader", (args.length > 2 ? args[2] : null), "info rented");
        } else // Forrent regions
        if (args[1].equalsIgnoreCase("forrent")) {
            List<RentRegion> regions = plugin.getFileManager().getRents();
            regions.removeIf(RentRegion::isRented);
            showSortedPagedList(sender, regions, filterGroup, "info-forrentHeader", (args.length > 2 ? args[2] : null), "info forrent");
        } else // Sold regions
        if (args[1].equalsIgnoreCase("sold")) {
            List<BuyRegion> regions = plugin.getFileManager().getBuys();
            regions.removeIf(BuyRegion::isAvailable);
            showSortedPagedList(sender, regions, filterGroup, "info-soldHeader", (args.length > 2 ? args[2] : null), "info sold");
        } else // Forsale regions
        if (args[1].equalsIgnoreCase("forsale")) {
            List<BuyRegion> regions = plugin.getFileManager().getBuys();
            regions.removeIf(BuyRegion::isSold);
            showSortedPagedList(sender, regions, filterGroup, "info-forsaleHeader", (args.length > 2 ? args[2] : null), "info forsale");
        } else // Reselling regions
        if (args[1].equalsIgnoreCase("reselling")) {
            List<BuyRegion> regions = plugin.getFileManager().getBuys();
            regions.removeIf(region -> !region.isInResellingMode());
            showSortedPagedList(sender, regions, filterGroup, "info-resellingHeader", (args.length > 2 ? args[2] : null), "info reselling");
        } else // List of regions without a group
        if (args[1].equalsIgnoreCase("nogroup")) {
            List<GeneralRegion> regions = plugin.getFileManager().getRegions();
            for (RegionGroup group : plugin.getFileManager().getGroups()) {
                regions.removeAll(group.getMemberRegions());
            }
            if (regions.isEmpty()) {
                plugin.message(sender, "info-nogroupNone");
            } else {
                showSortedPagedList(sender, regions, filterGroup, "info-nogroupHeader", (args.length > 2 ? args[2] : null), "info nogroup");
            }
        } else // Region info
        if (args[1].equalsIgnoreCase("region")) {
            if (args.length > 1) {
                RentRegion rent = null;
                BuyRegion buy = null;
                if (args.length > 2) {
                    rent = plugin.getFileManager().getRent(args[2]);
                    buy = plugin.getFileManager().getBuy(args[2]);
                } else {
                    if (sender instanceof Player) {
                        // get the region by location
                        List<GeneralRegion> regions = Utils.getImportantRegions(((Player) sender).getLocation());
                        if (regions.isEmpty()) {
                            plugin.message(sender, "cmd-noRegionsAtLocation");
                            return;
                        } else if (regions.size() > 1) {
                            plugin.message(sender, "cmd-moreRegionsAtLocation");
                            return;
                        } else {
                            if (regions.get(0) instanceof RentRegion) {
                                rent = (RentRegion) regions.get(0);
                            } else if (regions.get(0) instanceof BuyRegion) {
                                buy = (BuyRegion) regions.get(0);
                            }
                        }
                    } else {
                        plugin.message(sender, "cmd-automaticRegionOnlyByPlayer");
                        return;
                    }
                }
                if (rent == null && buy == null) {
                    plugin.message(sender, "info-regionNotExisting", args[2]);
                    return;
                }
                if (rent != null) {
                    plugin.message(sender, "info-regionHeaderRent", rent);
                    if (rent.isRented()) {
                        plugin.messageNoPrefix(sender, "info-regionRented", rent);
                        plugin.messageNoPrefix(sender, "info-regionExtending", rent);
                        // Money back
                        if (UnrentCommand.canUse(sender, rent)) {
                            plugin.messageNoPrefix(sender, "info-regionMoneyBackRentClick", rent);
                        } else {
                            plugin.messageNoPrefix(sender, "info-regionMoneyBackRent", rent);
                        }
                        // Friends
                        if (!rent.getFriendsFeature().getFriendNames().isEmpty()) {
                            String messagePart = "info-friend";
                            if (DelfriendCommand.canUse(sender, rent)) {
                                messagePart = "info-friendRemove";
                            }
                            plugin.messageNoPrefix(sender, "info-regionFriends", rent, Utils.combinedMessage(rent.getFriendsFeature().getFriendNames(), messagePart));
                        }
                    } else {
                        plugin.messageNoPrefix(sender, "info-regionCanBeRented", rent);
                    }
                    if (rent.getLandlordName() != null) {
                        plugin.messageNoPrefix(sender, "info-regionLandlord", rent);
                    }
                    // Maximum extends
                    if (rent.getMaxExtends() != -1) {
                        if (rent.getMaxExtends() == 0) {
                            plugin.messageNoPrefix(sender, "info-regionNoExtending", rent);
                        } else if (rent.isRented()) {
                            plugin.messageNoPrefix(sender, "info-regionExtendsLeft", rent);
                        } else {
                            plugin.messageNoPrefix(sender, "info-regionMaxExtends", rent);
                        }
                    }
                    // If maxExtends is zero it does not make sense to show this message
                    if (rent.getMaxRentTime() != -1 && rent.getMaxExtends() != 0) {
                        plugin.messageNoPrefix(sender, "info-regionMaxRentTime", rent);
                    }
                    if (rent.getInactiveTimeUntilUnrent() != -1) {
                        plugin.messageNoPrefix(sender, "info-regionInactiveUnrent", rent);
                    }
                    // Teleport
                    Message tp = Message.fromKey("info-prefix");
                    boolean foundSomething = false;
                    if (TeleportCommand.canUse(sender, rent)) {
                        foundSomething = true;
                        tp.append(Message.fromKey("info-regionTeleport").replacements(rent));
                    }
                    if (SetteleportCommand.canUse(sender, rent)) {
                        if (foundSomething) {
                            tp.append(", ");
                        }
                        foundSomething = true;
                        tp.append(Message.fromKey("info-setRegionTeleport").replacements(rent));
                    }
                    if (foundSomething) {
                        tp.append(".");
                        tp.send(sender);
                    }
                    // Signs
                    List<String> signLocations = new ArrayList<>();
                    for (Location location : rent.getSignsFeature().getSignLocations()) {
                        signLocations.add(Message.fromKey("info-regionSignLocation").replacements(location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ()).getPlain());
                    }
                    if (!signLocations.isEmpty()) {
                        plugin.messageNoPrefix(sender, "info-regionSigns", Utils.createCommaSeparatedList(signLocations));
                    }
                    // Groups
                    if (sender.hasPermission("areashop.groupinfo") && !rent.getGroupNames().isEmpty()) {
                        plugin.messageNoPrefix(sender, "info-regionGroups", Utils.createCommaSeparatedList(rent.getGroupNames()));
                    }
                    // Restoring
                    if (rent.isRestoreEnabled()) {
                        plugin.messageNoPrefix(sender, "info-regionRestoringRent", rent);
                    }
                    // Restrictions
                    if (!rent.isRented()) {
                        if (rent.restrictedToRegion()) {
                            plugin.messageNoPrefix(sender, "info-regionRestrictedRegionRent", rent);
                        } else if (rent.restrictedToWorld()) {
                            plugin.messageNoPrefix(sender, "info-regionRestrictedWorldRent", rent);
                        }
                    }
                    plugin.messageNoPrefix(sender, "info-regionFooterRent", rent);
                } else if (buy != null) {
                    plugin.message(sender, "info-regionHeaderBuy", buy);
                    if (buy.isSold()) {
                        if (buy.isInResellingMode()) {
                            plugin.messageNoPrefix(sender, "info-regionReselling", buy);
                            plugin.messageNoPrefix(sender, "info-regionReselPrice", buy);
                        } else {
                            plugin.messageNoPrefix(sender, "info-regionBought", buy);
                        }
                        // Money back
                        if (SellCommand.canUse(sender, buy)) {
                            plugin.messageNoPrefix(sender, "info-regionMoneyBackBuyClick", buy);
                        } else {
                            plugin.messageNoPrefix(sender, "info-regionMoneyBackBuy", buy);
                        }
                        // Friends
                        if (!buy.getFriendsFeature().getFriendNames().isEmpty()) {
                            String messagePart = "info-friend";
                            if (DelfriendCommand.canUse(sender, buy)) {
                                messagePart = "info-friendRemove";
                            }
                            plugin.messageNoPrefix(sender, "info-regionFriends", buy, Utils.combinedMessage(buy.getFriendsFeature().getFriendNames(), messagePart));
                        }
                    } else {
                        plugin.messageNoPrefix(sender, "info-regionCanBeBought", buy);
                    }
                    if (buy.getLandlord() != null) {
                        plugin.messageNoPrefix(sender, "info-regionLandlord", buy);
                    }
                    if (buy.getInactiveTimeUntilSell() != -1) {
                        plugin.messageNoPrefix(sender, "info-regionInactiveSell", buy);
                    }
                    // Teleport
                    Message tp = Message.fromKey("info-prefix");
                    boolean foundSomething = false;
                    if (TeleportCommand.canUse(sender, buy)) {
                        foundSomething = true;
                        tp.append(Message.fromKey("info-regionTeleport").replacements(buy));
                    }
                    if (SetteleportCommand.canUse(sender, buy)) {
                        if (foundSomething) {
                            tp.append(", ");
                        }
                        foundSomething = true;
                        tp.append(Message.fromKey("info-setRegionTeleport").replacements(buy));
                    }
                    if (foundSomething) {
                        tp.append(".");
                        tp.send(sender);
                    }
                    // Signs
                    List<String> signLocations = new ArrayList<>();
                    for (Location location : buy.getSignsFeature().getSignLocations()) {
                        signLocations.add(Message.fromKey("info-regionSignLocation").replacements(location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ()).getPlain());
                    }
                    if (!signLocations.isEmpty()) {
                        plugin.messageNoPrefix(sender, "info-regionSigns", Utils.createCommaSeparatedList(signLocations));
                    }
                    // Groups
                    if (sender.hasPermission("areashop.groupinfo") && !buy.getGroupNames().isEmpty()) {
                        plugin.messageNoPrefix(sender, "info-regionGroups", Utils.createCommaSeparatedList(buy.getGroupNames()));
                    }
                    // Restoring
                    if (buy.isRestoreEnabled()) {
                        plugin.messageNoPrefix(sender, "info-regionRestoringBuy", buy);
                    }
                    // Restrictions
                    if (!buy.isSold()) {
                        if (buy.restrictedToRegion()) {
                            plugin.messageNoPrefix(sender, "info-regionRestrictedRegionBuy", buy);
                        } else if (buy.restrictedToWorld()) {
                            plugin.messageNoPrefix(sender, "info-regionRestrictedWorldBuy", buy);
                        }
                    }
                    plugin.messageNoPrefix(sender, "info-regionFooterBuy", buy);
                }
            } else {
                plugin.message(sender, "info-regionHelp");
            }
        } else {
            plugin.message(sender, "info-help");
        }
    } else {
        plugin.message(sender, "info-help");
    }
}
Also used : GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) CommandSender(org.bukkit.command.CommandSender) Arrays(java.util.Arrays) Message(me.wiefferink.interactivemessenger.processing.Message) Set(java.util.Set) Player(org.bukkit.entity.Player) Utils(me.wiefferink.areashop.tools.Utils) ArrayList(java.util.ArrayList) RentRegion(me.wiefferink.areashop.regions.RentRegion) HashSet(java.util.HashSet) List(java.util.List) Location(org.bukkit.Location) RegionGroup(me.wiefferink.areashop.regions.RegionGroup) Nonnull(javax.annotation.Nonnull) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) Nullable(javax.annotation.Nullable) Player(org.bukkit.entity.Player) Message(me.wiefferink.interactivemessenger.processing.Message) ArrayList(java.util.ArrayList) RentRegion(me.wiefferink.areashop.regions.RentRegion) RegionGroup(me.wiefferink.areashop.regions.RegionGroup) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) ArrayList(java.util.ArrayList) List(java.util.List) HashSet(java.util.HashSet) Location(org.bukkit.Location)

Example 20 with GeneralRegion

use of me.wiefferink.areashop.regions.GeneralRegion in project AreaShop by NLthijs48.

the class MeCommand method execute.

@Override
public void execute(CommandSender sender, String[] args) {
    if (!sender.hasPermission("areashop.me")) {
        plugin.message(sender, "me-noPermission");
        return;
    }
    OfflinePlayer player = null;
    if (!(sender instanceof Player)) {
        if (args.length <= 1) {
            plugin.message(sender, "me-notAPlayer");
            return;
        }
    } else {
        player = (OfflinePlayer) sender;
    }
    if (args.length > 1) {
        player = Bukkit.getOfflinePlayer(args[1]);
        if (player == null) {
            plugin.message(sender, "me-noPlayer", args[1]);
            return;
        }
    }
    if (player == null) {
        return;
    }
    // Get the regions owned by the player
    Set<RentRegion> rentRegions = new HashSet<>();
    for (RentRegion region : plugin.getFileManager().getRents()) {
        if (region.isOwner(player)) {
            rentRegions.add(region);
        }
    }
    Set<BuyRegion> buyRegions = new HashSet<>();
    for (BuyRegion region : plugin.getFileManager().getBuys()) {
        if (region.isOwner(player)) {
            buyRegions.add(region);
        }
    }
    // Get the regions the player is added as friend
    Set<GeneralRegion> friendRegions = new HashSet<>();
    for (GeneralRegion region : plugin.getFileManager().getRegions()) {
        if (region.getFriendsFeature().getFriends().contains(player.getUniqueId())) {
            friendRegions.add(region);
        }
    }
    // Send messages
    boolean foundSome = !rentRegions.isEmpty() || !buyRegions.isEmpty() || !friendRegions.isEmpty();
    if (foundSome) {
        plugin.message(sender, "me-header", player.getName());
    }
    if (!rentRegions.isEmpty()) {
        for (RentRegion region : rentRegions) {
            plugin.messageNoPrefix(sender, "me-rentLine", region);
        }
    }
    if (!buyRegions.isEmpty()) {
        for (BuyRegion region : buyRegions) {
            plugin.messageNoPrefix(sender, "me-buyLine", region);
        }
    }
    if (!friendRegions.isEmpty()) {
        for (GeneralRegion region : friendRegions) {
            plugin.messageNoPrefix(sender, "me-friendLine", region);
        }
    }
    if (!foundSome) {
        plugin.message(sender, "me-nothing", player.getName());
    } else {
        plugin.messageNoPrefix(sender, "me-clickHint");
    }
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) OfflinePlayer(org.bukkit.OfflinePlayer) RentRegion(me.wiefferink.areashop.regions.RentRegion) HashSet(java.util.HashSet)

Aggregations

GeneralRegion (me.wiefferink.areashop.regions.GeneralRegion)25 Player (org.bukkit.entity.Player)18 BuyRegion (me.wiefferink.areashop.regions.BuyRegion)15 RentRegion (me.wiefferink.areashop.regions.RentRegion)14 ArrayList (java.util.ArrayList)8 OfflinePlayer (org.bukkit.OfflinePlayer)7 ProtectedRegion (com.sk89q.worldguard.protection.regions.ProtectedRegion)5 Selection (com.sk89q.worldedit.bukkit.selections.Selection)4 TreeSet (java.util.TreeSet)4 RegionGroup (me.wiefferink.areashop.regions.RegionGroup)4 HashSet (java.util.HashSet)3 Set (java.util.Set)3 UUID (java.util.UUID)3 EventHandler (org.bukkit.event.EventHandler)3 CuboidSelection (com.sk89q.worldedit.bukkit.selections.CuboidSelection)2 RegionManager (com.sk89q.worldguard.protection.managers.RegionManager)2 File (java.io.File)2 RegionSign (me.wiefferink.areashop.features.signs.RegionSign)2 FileManager (me.wiefferink.areashop.managers.FileManager)2 Message (me.wiefferink.interactivemessenger.processing.Message)2