Search in sources :

Example 11 with RentRegion

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

the class PlayerLoginLogoutListener method onPlayerLogin.

/**
 * Called when a sign is changed.
 * @param event The event
 */
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerLogin(PlayerLoginEvent event) {
    if (event.getResult() != Result.ALLOWED) {
        return;
    }
    final Player player = event.getPlayer();
    // Schedule task to check for notifications, prevents a lag spike at login
    Do.syncTimerLater(25, 25, () -> {
        // Delay until all regions are loaded
        if (!plugin.isReady()) {
            return true;
        }
        if (!player.isOnline()) {
            return false;
        }
        // Notify for rents that almost run out
        for (RentRegion region : plugin.getFileManager().getRents()) {
            if (region.isRenter(player)) {
                String warningSetting = region.getStringSetting("rent.warningOnLoginTime");
                if (warningSetting == null || warningSetting.isEmpty()) {
                    continue;
                }
                long warningTime = Utils.durationStringToLong(warningSetting);
                if (region.getTimeLeft() < warningTime) {
                    // Send the warning message later to let it appear after general MOTD messages
                    AreaShop.getInstance().message(player, "rent-expireWarning", region);
                }
            }
        }
        // Notify admins for plugin updates
        AreaShop.getInstance().notifyUpdate(player);
        return false;
    });
    // Check if the player has regions that use an old name of him and update them
    Do.syncTimerLater(22, 10, () -> {
        if (!plugin.isReady()) {
            return true;
        }
        List<GeneralRegion> regions = new ArrayList<>();
        for (GeneralRegion region : plugin.getFileManager().getRegions()) {
            if (region.isOwner(player)) {
                regions.add(region);
            }
        }
        Do.forAll(plugin.getConfig().getInt("nameupdate.regionsPerTick"), regions, region -> {
            if (region instanceof BuyRegion) {
                if (!player.getName().equals(region.getStringSetting("buy.buyerName"))) {
                    region.setSetting("buy.buyerName", player.getName());
                    region.update();
                }
            } else if (region instanceof RentRegion) {
                if (!player.getName().equals(region.getStringSetting("rent.renterName"))) {
                    region.setSetting("rent.renterName", player.getName());
                    region.update();
                }
            }
        });
        return false;
    });
}
Also used : Player(org.bukkit.entity.Player) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) GeneralRegion(me.wiefferink.areashop.regions.GeneralRegion) ArrayList(java.util.ArrayList) RentRegion(me.wiefferink.areashop.regions.RentRegion) EventHandler(org.bukkit.event.EventHandler)

Example 12 with RentRegion

use of me.wiefferink.areashop.regions.RentRegion 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 13 with RentRegion

use of me.wiefferink.areashop.regions.RentRegion 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 14 with RentRegion

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

the class FindCommand method execute.

@Override
public void execute(CommandSender sender, String[] args) {
    if (!sender.hasPermission("areashop.find")) {
        plugin.message(sender, "find-noPermission");
        return;
    }
    if (!(sender instanceof Player)) {
        plugin.message(sender, "cmd-onlyByPlayer");
        return;
    }
    if (args.length <= 1 || args[1] == null || (!args[1].equalsIgnoreCase("buy") && !args[1].equalsIgnoreCase("rent"))) {
        plugin.message(sender, "find-help");
        return;
    }
    Player player = (Player) sender;
    double balance = 0.0;
    if (plugin.getEconomy() != null) {
        balance = plugin.getEconomy().getBalance(player);
    }
    double maxPrice = 0;
    boolean maxPriceSet = false;
    RegionGroup group = null;
    // Parse optional price argument
    if (args.length >= 3) {
        try {
            maxPrice = Double.parseDouble(args[2]);
            maxPriceSet = true;
        } catch (NumberFormatException e) {
            plugin.message(sender, "find-wrongMaxPrice", args[2]);
            return;
        }
    }
    // Parse optional group argument
    if (args.length >= 4) {
        group = plugin.getFileManager().getGroup(args[3]);
        if (group == null) {
            plugin.message(sender, "find-wrongGroup", args[3]);
            return;
        }
    }
    // Find buy regions
    if (args[1].equalsIgnoreCase("buy")) {
        List<BuyRegion> regions = plugin.getFileManager().getBuys();
        List<BuyRegion> results = new ArrayList<>();
        for (BuyRegion region : regions) {
            if (!region.isSold() && ((region.getPrice() <= balance && !maxPriceSet) || (region.getPrice() <= maxPrice && maxPriceSet)) && (group == null || group.isMember(region)) && (region.getBooleanSetting("general.findCrossWorld") || player.getWorld().equals(region.getWorld()))) {
                results.add(region);
            }
        }
        if (!results.isEmpty()) {
            // Draw a random one
            BuyRegion region = results.get(new Random().nextInt(results.size()));
            Message onlyInGroup = Message.empty();
            if (group != null) {
                onlyInGroup = Message.fromKey("find-onlyInGroup").replacements(args[3]);
            }
            // Teleport
            if (maxPriceSet) {
                plugin.message(player, "find-successMax", "buy", Utils.formatCurrency(maxPrice), onlyInGroup, region);
            } else {
                plugin.message(player, "find-success", "buy", Utils.formatCurrency(balance), onlyInGroup, region);
            }
            region.getTeleportFeature().teleportPlayer(player, region.getBooleanSetting("general.findTeleportToSign"), false);
        } else {
            Message onlyInGroup = Message.empty();
            if (group != null) {
                onlyInGroup = Message.fromKey("find-onlyInGroup").replacements(args[3]);
            }
            if (maxPriceSet) {
                plugin.message(player, "find-noneFoundMax", "buy", Utils.formatCurrency(maxPrice), onlyInGroup);
            } else {
                plugin.message(player, "find-noneFound", "buy", Utils.formatCurrency(balance), onlyInGroup);
            }
        }
    } else // Find rental regions
    {
        List<RentRegion> regions = plugin.getFileManager().getRents();
        List<RentRegion> results = new ArrayList<>();
        for (RentRegion region : regions) {
            if (!region.isRented() && ((region.getPrice() <= balance && !maxPriceSet) || (region.getPrice() <= maxPrice && maxPriceSet)) && (group == null || group.isMember(region)) && (region.getBooleanSetting("general.findCrossWorld") || player.getWorld().equals(region.getWorld()))) {
                results.add(region);
            }
        }
        if (!results.isEmpty()) {
            // Draw a random one
            RentRegion region = results.get(new Random().nextInt(results.size()));
            Message onlyInGroup = Message.empty();
            if (group != null) {
                onlyInGroup = Message.fromKey("find-onlyInGroup").replacements(args[3]);
            }
            // Teleport
            if (maxPriceSet) {
                plugin.message(player, "find-successMax", "rent", Utils.formatCurrency(maxPrice), onlyInGroup, region);
            } else {
                plugin.message(player, "find-success", "rent", Utils.formatCurrency(balance), onlyInGroup, region);
            }
            region.getTeleportFeature().teleportPlayer(player, region.getBooleanSetting("general.findTeleportToSign"), false);
        } else {
            Message onlyInGroup = Message.empty();
            if (group != null) {
                onlyInGroup = Message.fromKey("find-onlyInGroup").replacements(args[3]);
            }
            if (maxPriceSet) {
                plugin.message(player, "find-noneFoundMax", "rent", Utils.formatCurrency(maxPrice), onlyInGroup);
            } else {
                plugin.message(player, "find-noneFound", "rent", Utils.formatCurrency(balance), onlyInGroup);
            }
        }
    }
}
Also used : Player(org.bukkit.entity.Player) Random(java.util.Random) Message(me.wiefferink.interactivemessenger.processing.Message) BuyRegion(me.wiefferink.areashop.regions.BuyRegion) ArrayList(java.util.ArrayList) RentRegion(me.wiefferink.areashop.regions.RentRegion) RegionGroup(me.wiefferink.areashop.regions.RegionGroup)

Example 15 with RentRegion

use of me.wiefferink.areashop.regions.RentRegion 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)

Aggregations

RentRegion (me.wiefferink.areashop.regions.RentRegion)19 BuyRegion (me.wiefferink.areashop.regions.BuyRegion)16 Player (org.bukkit.entity.Player)15 GeneralRegion (me.wiefferink.areashop.regions.GeneralRegion)14 ArrayList (java.util.ArrayList)8 ProtectedRegion (com.sk89q.worldguard.protection.regions.ProtectedRegion)5 OfflinePlayer (org.bukkit.OfflinePlayer)5 RegionGroup (me.wiefferink.areashop.regions.RegionGroup)4 Selection (com.sk89q.worldedit.bukkit.selections.Selection)3 RegionManager (com.sk89q.worldguard.protection.managers.RegionManager)3 UUID (java.util.UUID)3 Message (me.wiefferink.interactivemessenger.processing.Message)3 File (java.io.File)2 HashSet (java.util.HashSet)2 Set (java.util.Set)2 TreeSet (java.util.TreeSet)2 FileManager (me.wiefferink.areashop.managers.FileManager)2 Location (org.bukkit.Location)2 World (org.bukkit.World)2 YamlConfiguration (org.bukkit.configuration.file.YamlConfiguration)2