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;
}
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;
}
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);
}
}
}
}
}
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));
}
Aggregations