Search in sources :

Example 6 with Core

use of com.griefdefender.api.Core in project BanFromClaim by Baktus79.

the class BfclistCommandGD method onCommand.

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player)) {
        MessageHandler.sendConsole("&cThis command can only be used in-game.");
        return true;
    }
    final Player player = (Player) sender;
    final Location loc = player.getLocation();
    final Vector3i vector = Vector3i.from(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
    final Core gd = GriefDefender.getCore();
    final Claim claim = gd.getClaimManager(loc.getWorld().getUID()).getClaimAt(vector);
    final ClaimData claimData = new ClaimData();
    if (args.length != 0) {
        if (isInt(args[0])) {
            this.number = Integer.parseInt(args[0]);
            this.countTo = 5 * number;
            this.countFrom = 5 * number - 5;
        } else {
            MessageHandler.sendMessage(player, Messages.UNVALID_NUMBER);
            return true;
        }
    }
    if (claim.isWilderness()) {
        MessageHandler.sendMessage(player, Messages.OUTSIDE_CLAIM);
        return true;
    }
    final boolean isManager = claim.getUserTrusts(TrustTypes.MANAGER).contains(player.getUniqueId());
    final boolean isOwner = claim.getOwnerUniqueId().equals(player.getUniqueId());
    boolean allowBan = false;
    if (isOwner || isManager) {
        allowBan = true;
    } else if (player.hasPermission("bfc.admin")) {
        allowBan = true;
    }
    int totalPage = 1;
    if (!allowBan) {
        MessageHandler.sendMessage(player, Messages.NO_ACCESS);
        return true;
    } else {
        MessageHandler.sendMessage(player, Messages.placeholders(Messages.LIST_HEADER, null, player.getDisplayName(), claim.getOwnerName()));
        if (claimData.isAllBanned(claim.getUniqueId().toString())) {
            MessageHandler.sendMessage(player, Messages.LIST_BAN_ALL);
            return true;
        }
        if (listPlayers(claim.getUniqueId().toString()) == null) {
            MessageHandler.sendMessage(player, Messages.placeholders(Messages.LIST_EMPTY, null, player.getDisplayName(), claim.getOwnerName()));
            return true;
        } else {
            totalPage = listPlayers(claim.getUniqueId().toString()).size() / 5 + 1;
            for (int i = 0; i < listPlayers(claim.getUniqueId().toString()).toArray().length; i++) {
                if (this.number > totalPage || this.number == 0) {
                    this.countTo = 5 * totalPage;
                    this.countFrom = 5 * totalPage - 5;
                    this.number = totalPage;
                }
                if (i >= this.countFrom) {
                    final String bp = (String) listPlayers(claim.getUniqueId().toString()).toArray()[i];
                    final OfflinePlayer bannedPlayer = Bukkit.getOfflinePlayer(UUID.fromString(bp));
                    MessageHandler.sendMessage(player, "&6" + bannedPlayer.getName());
                    if (i == this.countTo) {
                        MessageHandler.sendMessage(player, "");
                        MessageHandler.sendMessage(player, "&e<--- [&6" + this.number + "\\" + totalPage + "&e] --->");
                        break;
                    }
                    continue;
                }
            }
            if (this.number == totalPage) {
                MessageHandler.sendMessage(player, "");
                MessageHandler.sendMessage(player, "&e<--- [&6" + totalPage + "\\" + totalPage + "&e] --->");
            }
        }
    }
    return true;
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) ClaimData(no.vestlandetmc.BanFromClaim.config.ClaimData) Vector3i(com.griefdefender.lib.flowpowered.math.vector.Vector3i) OfflinePlayer(org.bukkit.OfflinePlayer) Claim(com.griefdefender.api.claim.Claim) Location(org.bukkit.Location) Core(com.griefdefender.api.Core)

Example 7 with Core

use of com.griefdefender.api.Core in project BanFromClaim by Baktus79.

the class KfcCommandGD method onCommand.

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player)) {
        MessageHandler.sendConsole("&cThis command can only be used in-game.");
        return true;
    }
    final Player player = (Player) sender;
    final Location loc = player.getLocation();
    final Vector3i vector = Vector3i.from(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
    final Core gd = GriefDefender.getCore();
    final Claim claim = gd.getClaimManager(loc.getWorld().getUID()).getClaimAt(vector);
    if (args.length == 0) {
        MessageHandler.sendMessage(player, Messages.NO_ARGUMENTS);
        return true;
    }
    if (claim.isWilderness()) {
        MessageHandler.sendMessage(player, Messages.OUTSIDE_CLAIM);
        return true;
    }
    final Player kickedPlayer = Bukkit.getPlayer(args[0]);
    final boolean isManager = claim.getUserTrusts(TrustTypes.MANAGER).contains(player.getUniqueId());
    final boolean isOwner = claim.getOwnerUniqueId().equals(player.getUniqueId());
    boolean allowKick = false;
    if (isOwner || isManager) {
        allowKick = true;
    } else if (player.hasPermission("bfc.admin")) {
        allowKick = true;
    }
    if (kickedPlayer == null) {
        MessageHandler.sendMessage(player, Messages.placeholders(Messages.UNVALID_PLAYERNAME, args[0], player.getDisplayName(), null));
        return true;
    } else if (kickedPlayer == player) {
        MessageHandler.sendMessage(player, Messages.KICK_SELF);
        return true;
    } else if (kickedPlayer.getName().equals(claim.getOwnerName())) {
        MessageHandler.sendMessage(player, Messages.KICK_OWNER);
        return true;
    }
    if (kickedPlayer.hasPermission("bfc.bypass")) {
        MessageHandler.sendMessage(player, Messages.placeholders(Messages.PROTECTED, kickedPlayer.getDisplayName(), null, null));
        return true;
    }
    if (!allowKick) {
        MessageHandler.sendMessage(player, Messages.NO_ACCESS);
        return true;
    } else {
        final int sizeRadius = Math.max(claim.getLength(), claim.getWidth());
        final Location greaterCorner = new Location(Bukkit.getWorld(claim.getWorldUniqueId()), claim.getGreaterBoundaryCorner().getX(), 64D, claim.getGreaterBoundaryCorner().getZ());
        final Location lesserCorner = new Location(Bukkit.getWorld(claim.getWorldUniqueId()), claim.getLesserBoundaryCorner().getX(), 64D, claim.getLesserBoundaryCorner().getZ());
        final String claimOwner = claim.getOwnerName();
        final Location kickedLoc = kickedPlayer.getLocation();
        final Vector3i kickedVec = Vector3i.from(kickedLoc.getBlockX(), kickedLoc.getBlockY(), kickedLoc.getBlockZ());
        if (claim.contains(kickedVec)) {
            final LocationFinder lf = new LocationFinder(greaterCorner, lesserCorner, claim.getWorldUniqueId(), sizeRadius);
            Bukkit.getScheduler().runTaskAsynchronously(BfcPlugin.getInstance(), () -> lf.IterateCircumferencesGD(randomCircumferenceRadiusLoc -> {
                if (randomCircumferenceRadiusLoc == null) {
                    if (Config.SAFE_LOCATION == null) {
                        kickedPlayer.teleport(kickedLoc.getWorld().getSpawnLocation());
                    } else {
                        kickedPlayer.teleport(Config.SAFE_LOCATION);
                    }
                } else {
                    kickedPlayer.teleport(randomCircumferenceRadiusLoc);
                }
                MessageHandler.sendMessage(kickedPlayer, Messages.placeholders(Messages.KICKED_TARGET, kickedPlayer.getName(), player.getDisplayName(), claimOwner));
            }));
        }
    }
    MessageHandler.sendMessage(player, Messages.placeholders(Messages.KICKED, kickedPlayer.getName(), null, null));
    return true;
}
Also used : MessageHandler(no.vestlandetmc.BanFromClaim.handler.MessageHandler) CommandSender(org.bukkit.command.CommandSender) BfcPlugin(no.vestlandetmc.BanFromClaim.BfcPlugin) Messages(no.vestlandetmc.BanFromClaim.config.Messages) Config(no.vestlandetmc.BanFromClaim.config.Config) Claim(com.griefdefender.api.claim.Claim) LocationFinder(no.vestlandetmc.BanFromClaim.handler.LocationFinder) Player(org.bukkit.entity.Player) GriefDefender(com.griefdefender.api.GriefDefender) CommandExecutor(org.bukkit.command.CommandExecutor) Vector3i(com.griefdefender.lib.flowpowered.math.vector.Vector3i) TrustTypes(com.griefdefender.api.claim.TrustTypes) Location(org.bukkit.Location) Command(org.bukkit.command.Command) Core(com.griefdefender.api.Core) Bukkit(org.bukkit.Bukkit) Player(org.bukkit.entity.Player) LocationFinder(no.vestlandetmc.BanFromClaim.handler.LocationFinder) Vector3i(com.griefdefender.lib.flowpowered.math.vector.Vector3i) Claim(com.griefdefender.api.claim.Claim) Location(org.bukkit.Location) Core(com.griefdefender.api.Core)

Example 8 with Core

use of com.griefdefender.api.Core in project BanFromClaim by Baktus79.

the class GDListener method onPlayerEnterClaim.

@EventHandler(ignoreCancelled = true)
public void onPlayerEnterClaim(PlayerMoveEvent e) {
    final ClaimData claimData = new ClaimData();
    final Location locFrom = e.getFrom();
    final Location locTo = e.getTo();
    if (locFrom.getBlock().equals(locTo.getBlock())) {
        return;
    }
    final Player player = e.getPlayer();
    final Core gd = GriefDefender.getCore();
    final Vector3i vectorTo = Vector3i.from(locTo.getBlockX(), locTo.getBlockY(), locTo.getBlockZ());
    final Vector3i vectorFrom = Vector3i.from(locFrom.getBlockX(), locFrom.getBlockY(), locFrom.getBlockZ());
    final Claim claimTo = gd.getClaimManager(locTo.getWorld().getUID()).getClaimAt(vectorTo);
    final Claim claimFrom = gd.getClaimManager(locFrom.getWorld().getUID()).getClaimAt(vectorFrom);
    final ParticleHandler ph = new ParticleHandler(e.getTo());
    if (locFrom.getBlockX() != locTo.getBlockX() || locFrom.getBlockZ() != locTo.getBlockZ()) {
        if (player.hasPermission("bfc.bypass") || player.getGameMode().equals(GameMode.SPECTATOR)) {
            return;
        }
        if (!claimTo.isWilderness()) {
            final UUID ownerUUID = claimTo.getOwnerUniqueId();
            boolean hasAttacked = false;
            if (CombatMode.ATTACKER.containsKey(player.getUniqueId()))
                hasAttacked = CombatMode.ATTACKER.get(player.getUniqueId()).equals(ownerUUID);
            if ((claimData.isAllBanned(claimTo.getUniqueId().toString()) || playerBanned(player, claimTo)) && !hasAttacked && !hasTrust(player.getUniqueId(), claimTo)) {
                if (!claimFrom.isWilderness()) {
                    if (playerBanned(player, claimFrom)) {
                        final World world = Bukkit.getWorld(claimFrom.getWorldUniqueId());
                        final int x = claimFrom.getGreaterBoundaryCorner().getX();
                        final int z = claimFrom.getGreaterBoundaryCorner().getZ();
                        final int y = world.getHighestBlockAt(x, z).getY();
                        final Location tpLoc = new Location(world, x, y, z).add(0D, 1D, 0D);
                        if (tpLoc.getBlock().getType().equals(Material.AIR)) {
                            if (Config.SAFE_LOCATION != null) {
                                player.teleport(Config.SAFE_LOCATION);
                            } else {
                                player.teleport(tpLoc.add(0D, 1D, 0D));
                            }
                        } else {
                            player.teleport(tpLoc.add(0D, 1D, 0D));
                        }
                    } else {
                        final Location tpLoc = player.getLocation().add(e.getFrom().toVector().subtract(e.getTo().toVector()).normalize().multiply(3));
                        if (tpLoc.getBlock().getType().equals(Material.AIR)) {
                            player.teleport(tpLoc);
                        } else {
                            final Location safeLoc = tpLoc.getWorld().getHighestBlockAt(tpLoc).getLocation().add(0D, 1D, 0D);
                            player.teleport(safeLoc);
                        }
                        if (e.getTo().getBlockX() == e.getFrom().getBlockX()) {
                            ph.drawCircle(1, true);
                        } else {
                            ph.drawCircle(1, false);
                        }
                    }
                } else {
                    final Location tpLoc = player.getLocation().add(e.getFrom().toVector().subtract(e.getTo().toVector()).normalize().multiply(3));
                    if (tpLoc.getBlock().getType().equals(Material.AIR)) {
                        player.teleport(tpLoc);
                    } else {
                        final Location safeLoc = tpLoc.getWorld().getHighestBlockAt(tpLoc).getLocation().add(0D, 1D, 0D);
                        player.teleport(safeLoc);
                    }
                    if (e.getTo().getBlockX() == e.getFrom().getBlockX()) {
                        ph.drawCircle(1, true);
                    } else {
                        ph.drawCircle(1, false);
                    }
                }
                if (!MessageHandler.spamMessageClaim.contains(player.getUniqueId().toString())) {
                    MessageHandler.sendTitle(player, Messages.TITLE_MESSAGE, Messages.SUBTITLE_MESSAGE);
                    MessageHandler.spamMessageClaim.add(player.getUniqueId().toString());
                    Bukkit.getScheduler().runTaskLater(BfcPlugin.getInstance(), () -> {
                        MessageHandler.spamMessageClaim.remove(player.getUniqueId().toString());
                    }, 5L * 20L);
                }
            }
        }
    }
}
Also used : Player(org.bukkit.entity.Player) ClaimData(no.vestlandetmc.BanFromClaim.config.ClaimData) Vector3i(com.griefdefender.lib.flowpowered.math.vector.Vector3i) ParticleHandler(no.vestlandetmc.BanFromClaim.handler.ParticleHandler) UUID(java.util.UUID) World(org.bukkit.World) Claim(com.griefdefender.api.claim.Claim) Location(org.bukkit.Location) Core(com.griefdefender.api.Core) EventHandler(org.bukkit.event.EventHandler)

Example 9 with Core

use of com.griefdefender.api.Core in project BanFromClaim by Baktus79.

the class LocationFinder method IterateCircumferencesGD.

/**
 *[Run asynchronously] Callback returns "safe" location outside a claim if found, if not found returns null (Uses expanding iterating circumferences method)
 */
public void IterateCircumferencesGD(CallbackReturnLocation callback) {
    final World circumferenceWorld = Bukkit.getWorld(this.circumferenceWorldUUID);
    final BfcPlugin plugin = BfcPlugin.getInstance();
    final Core griefDefenderCore = GriefDefender.getCore();
    Location randomCircumferenceRadiusLoc = null;
    final int maxCircleIterations = 10;
    final int checkLocationsPerCircumference = 4;
    final int maxSafeLocationFailures = 5;
    int safeLocationChecks = 0;
    outer: for (int i = 0; i < maxCircleIterations; i++) {
        // Circle radius iteration
        circumferenceRadius *= 2;
        for (int j = 0; j < checkLocationsPerCircumference; j++) {
            // Circumference position + check within claim
            randomCircumferenceRadiusLoc = GetRandomCircumferenceLoc(this.circumferenceCenter, circumferenceRadius, circumferenceWorld);
            if (griefDefenderCore.getClaimAt(randomCircumferenceRadiusLoc).isWilderness()) {
                safeLocationChecks++;
                final Block highestBlock = circumferenceWorld.getHighestBlockAt(randomCircumferenceRadiusLoc);
                if (SafeLocationCheck.BlockSafetyCheck(highestBlock)) {
                    randomCircumferenceRadiusLoc = new Location(circumferenceWorld, highestBlock.getX() + 0.5, highestBlock.getY() + 1, highestBlock.getZ() + 0.5);
                    break outer;
                } else // Reset circumference position search unless it's the last safe check
                if (!(safeLocationChecks >= maxSafeLocationFailures))
                    j = 0;
            }
        }
        // Last iteration and no appropriate position found
        if (i == maxCircleIterations - 1)
            randomCircumferenceRadiusLoc = null;
    }
    final Location finalRandomCircumferenceRadiusLoc = randomCircumferenceRadiusLoc;
    Bukkit.getScheduler().runTask(plugin, (Runnable) () -> callback.onDone(finalRandomCircumferenceRadiusLoc));
}
Also used : BfcPlugin(no.vestlandetmc.BanFromClaim.BfcPlugin) Block(org.bukkit.block.Block) World(org.bukkit.World) Core(com.griefdefender.api.Core) Location(org.bukkit.Location)

Aggregations

Core (com.griefdefender.api.Core)9 Claim (com.griefdefender.api.claim.Claim)7 Location (org.bukkit.Location)7 Vector3i (com.griefdefender.lib.flowpowered.math.vector.Vector3i)6 Player (org.bukkit.entity.Player)6 ClaimData (no.vestlandetmc.BanFromClaim.config.ClaimData)4 UUID (java.util.UUID)3 BfcPlugin (no.vestlandetmc.BanFromClaim.BfcPlugin)3 OfflinePlayer (org.bukkit.OfflinePlayer)3 World (org.bukkit.World)3 GriefDefender (com.griefdefender.api.GriefDefender)2 TrustTypes (com.griefdefender.api.claim.TrustTypes)2 Config (no.vestlandetmc.BanFromClaim.config.Config)2 Messages (no.vestlandetmc.BanFromClaim.config.Messages)2 LocationFinder (no.vestlandetmc.BanFromClaim.handler.LocationFinder)2 MessageHandler (no.vestlandetmc.BanFromClaim.handler.MessageHandler)2 Bukkit (org.bukkit.Bukkit)2 Command (org.bukkit.command.Command)2 CommandExecutor (org.bukkit.command.CommandExecutor)2 CommandSender (org.bukkit.command.CommandSender)2