From 8ddcc5ca5b3d4a125ce5da8dcc28d0e60efa1157 Mon Sep 17 00:00:00 2001 From: VQ9 Date: Tue, 31 Aug 2021 15:13:47 +0100 Subject: [PATCH 01/10] First attempt at proper chunk claims! --- .../configuration/sections/ClaimSettings.java | 8 - .../me/glaremasters/guilds/guild/Guild.java | 51 ++- .../guilds/guild/GuildHandler.java | 17 +- .../glaremasters/guilds/guild/GuildTier.java | 16 +- .../guilds/listeners/ClaimSignListener.java | 32 +- .../guilds/listeners/EntityListener.java | 1 - .../glaremasters/guilds/claim/ClaimUtils.kt | 384 ++++++++++++++++++ .../glaremasters/guilds/claim/GuildClaim.kt | 105 +++++ .../admin/claims/CommandAdminClaim.kt | 34 +- .../admin/manage/CommandAdminRemove.kt | 7 +- .../admin/member/CommandAdminRemovePlayer.kt | 7 +- .../guilds/commands/claims/CommandClaim.kt | 33 +- .../guilds/commands/console/CommandConsole.kt | 6 +- .../commands/management/CommandDelete.kt | 7 +- .../guilds/commands/management/CommandKick.kt | 7 +- .../commands/management/CommandRename.kt | 10 +- .../guilds/commands/member/CommandAccept.kt | 7 +- .../guilds/commands/member/CommandLeave.kt | 12 +- .../glaremasters/guilds/utils/ClaimUtils.kt | 216 ---------- 19 files changed, 645 insertions(+), 315 deletions(-) create mode 100644 src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt create mode 100644 src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt delete mode 100644 src/main/kotlin/me/glaremasters/guilds/utils/ClaimUtils.kt diff --git a/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java b/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java index 886b9546d..7cbfc2178 100644 --- a/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java +++ b/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java @@ -41,14 +41,6 @@ */ public class ClaimSettings implements SettingsHolder { - @Comment({"This is the number of blocks around the player it will try to create the region.", - "Keep in mind this is the RADIUS, it will go this many blocks in both directions.", - "For example, if you take the default 15, it'll do 30 total as it will go 15 blocks in both directions.", - "This is a CUBOID region, not SPHERE." - }) - public static final Property RADIUS = - newProperty("claims.radius", 15); - @Comment({"Customize the entrance and exit message of joining claims.", "Supports {prefix} for guild prefix and {guild} for guild name.", "Also supports color codes!" diff --git a/src/main/java/me/glaremasters/guilds/guild/Guild.java b/src/main/java/me/glaremasters/guilds/guild/Guild.java index 55660ab86..20dd0cf46 100644 --- a/src/main/java/me/glaremasters/guilds/guild/Guild.java +++ b/src/main/java/me/glaremasters/guilds/guild/Guild.java @@ -28,6 +28,7 @@ import co.aikar.commands.ACFUtil; import co.aikar.commands.CommandManager; import me.glaremasters.guilds.Guilds; +import me.glaremasters.guilds.claim.GuildClaim; import me.glaremasters.guilds.configuration.sections.GuildListSettings; import me.glaremasters.guilds.exceptions.ExpectationNotMet; import me.glaremasters.guilds.messages.Messages; @@ -51,7 +52,7 @@ public Guild(UUID id) { this.id = id; } - public Guild(UUID id, String name, String prefix, String motd, GuildMember guildMaster, GuildHome home, GuildSkull guildSkull, Status status, GuildTier tier, GuildScore guildScore, double balance, List members, List invitedMembers, List allies, List pendingAllies, List codes, List vaults, long lastDefended) { + public Guild(UUID id, String name, String prefix, String motd, GuildMember guildMaster, GuildHome home, GuildSkull guildSkull, Status status, GuildTier tier, GuildScore guildScore, double balance, List members, List invitedMembers, List allies, List pendingAllies, List codes, List vaults, long lastDefended, List claimedLand) { this.id = id; this.name = name; this.prefix = prefix; @@ -70,6 +71,7 @@ public Guild(UUID id, String name, String prefix, String motd, GuildMember guild this.codes = codes; this.vaults = vaults; this.lastDefended = lastDefended; + this.claimedLand = claimedLand; } public static GuildBuilder builder() { @@ -132,9 +134,7 @@ public void setPendingAllies(List pendingAllies) { this.pendingAllies = pendingAllies; } - public void setCodes(List codes) { - this.codes = codes; - } + public void setCodes(List codes) {this.codes = codes;} public void setVaults(List vaults) { this.vaults = vaults; @@ -148,9 +148,11 @@ public long getCreationDate() { return creationDate; } - public void setCreationDate(long creationDate) { - this.creationDate = creationDate; - } + public void setCreationDate(long creationDate) {this.creationDate = creationDate; } + + public void setClaimedLand(List newClaimedLand) { this.claimedLand = newClaimedLand; } + + public List getClaimedLand() { return claimedLand; } public enum Status { Public("Public"), @@ -184,6 +186,7 @@ public enum Status { private long lastDefended; private long creationDate; + private List claimedLand; /** * Get a member in the guild * @param uuid the uuid of the member @@ -566,6 +569,30 @@ public boolean memberHasPermission(Player player, GuildRolePerm perm) { return role.hasPerm(perm); } + /** + * Add a guild claim to the list of claims + * @param claim the claim to add + */ + public void addGuildClaim(GuildClaim claim) { + claimedLand.add(claim); + } + + /** + * Remove a guild claim from the list of claims + * @param claim the claim to remove + */ + public void removeGuildClaim(GuildClaim claim) { + claimedLand.remove(claim); + } + + /** + * Clear all the guild claims in list + * @param claim the claims to clear + */ + public void clearGuildClaims(GuildClaim claim) { + claimedLand.clear(); + } + public void updateGuildSkull(Player player, SettingsManager settingsManager) { Guilds.newChain().async(() -> { try{ @@ -692,6 +719,7 @@ public static class GuildBuilder { private List codes; private List vaults; private long lastDefended; + private List claimedLand; GuildBuilder() { } @@ -786,12 +814,17 @@ public Guild.GuildBuilder lastDefended(long lastDefended) { return this; } + public Guild.GuildBuilder claimedLand(List claimedLand) { + this.claimedLand = claimedLand; + return this; + } + public Guild build() { - return new Guild(id, name, prefix, motd, guildMaster, home, guildSkull, status, tier, guildScore, balance, members, invitedMembers, allies, pendingAllies, codes, vaults, lastDefended); + return new Guild(id, name, prefix, motd, guildMaster, home, guildSkull, status, tier, guildScore, balance, members, invitedMembers, allies, pendingAllies, codes, vaults, lastDefended, claimedLand); } public String toString() { - return "Guild.GuildBuilder(id=" + this.id + ", name=" + this.name + ", prefix=" + this.prefix + ", motd=" + this.motd + ", guildMaster=" + this.guildMaster + ", home=" + this.home + ", guildSkull=" + this.guildSkull + ", status=" + this.status + ", tier=" + this.tier + ", guildScore=" + this.guildScore + ", balance=" + this.balance + ", members=" + this.members + ", invitedMembers=" + this.invitedMembers + ", allies=" + this.allies + ", pendingAllies=" + this.pendingAllies + ", codes=" + this.codes + ", vaults=" + this.vaults + ", lastDefended=" + this.lastDefended + ")"; + return "Guild.GuildBuilder(id=" + this.id + ", name=" + this.name + ", prefix=" + this.prefix + ", motd=" + this.motd + ", guildMaster=" + this.guildMaster + ", home=" + this.home + ", guildSkull=" + this.guildSkull + ", status=" + this.status + ", tier=" + this.tier + ", guildScore=" + this.guildScore + ", balance=" + this.balance + ", members=" + this.members + ", invitedMembers=" + this.invitedMembers + ", allies=" + this.allies + ", pendingAllies=" + this.pendingAllies + ", codes=" + this.codes + ", vaults=" + this.vaults + ", lastDefended=" + this.lastDefended + ", claimedLand=" + this.claimedLand.toString() + ")"; } } } diff --git a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java index 60b7ea9b7..dc926a807 100644 --- a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java +++ b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java @@ -27,16 +27,16 @@ import ch.jalu.configme.SettingsManager; import co.aikar.commands.ACFBukkitUtil; import co.aikar.commands.ACFUtil; -import co.aikar.commands.CommandManager; import co.aikar.commands.PaperCommandManager; import me.glaremasters.guilds.Guilds; +import me.glaremasters.guilds.claim.GuildClaim; import me.glaremasters.guilds.configuration.sections.GuildSettings; import me.glaremasters.guilds.configuration.sections.GuildVaultSettings; import me.glaremasters.guilds.configuration.sections.PluginSettings; import me.glaremasters.guilds.configuration.sections.TicketSettings; import me.glaremasters.guilds.exceptions.ExpectationNotMet; import me.glaremasters.guilds.messages.Messages; -import me.glaremasters.guilds.utils.ClaimUtils; +import me.glaremasters.guilds.claim.ClaimUtils; import me.glaremasters.guilds.utils.ItemBuilder; import me.glaremasters.guilds.utils.LoggingUtils; import me.glaremasters.guilds.utils.Serialization; @@ -53,16 +53,12 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.codemc.worldguardwrapper.WorldGuardWrapper; +import org.codemc.worldguardwrapper.region.IWrappedRegion; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -176,6 +172,7 @@ private void loadTiers() { .maxAllies(tierSec.getInt(key + ".max-allies", 10)) .useBuffs(tierSec.getBoolean(key + ".use-buffs", true)) .permissions(tierSec.getStringList(key + ".permissions")) + .claimableLand(tierSec.getInt(key + ".claimableLand", 5)) .build()); } } @@ -874,7 +871,9 @@ public void handleInvite(PaperCommandManager manager, Player player, Guild guild if (ClaimUtils.isEnable(settingsManager)) { WorldGuardWrapper wrapper = WorldGuardWrapper.getInstance(); - ClaimUtils.getGuildClaim(wrapper, player, guild).ifPresent(region -> ClaimUtils.addMember(region, player)); + for (GuildClaim claim : guild.getClaimedLand()) { + ClaimUtils.addMember(claim, player); + } } manager.getCommandIssuer(player).sendInfo(Messages.CODES__JOINED, "{guild}", guild.getName()); diff --git a/src/main/java/me/glaremasters/guilds/guild/GuildTier.java b/src/main/java/me/glaremasters/guilds/guild/GuildTier.java index 3595e1dcc..09e0c4d53 100644 --- a/src/main/java/me/glaremasters/guilds/guild/GuildTier.java +++ b/src/main/java/me/glaremasters/guilds/guild/GuildTier.java @@ -40,8 +40,9 @@ public class GuildTier { private final transient int maxAllies; private final transient boolean useBuffs; private final transient List permissions; + private final transient int claimableLand; - public GuildTier(int level, String name, double cost, int maxMembers, int vaultAmount, double mobXpMultiplier, double damageMultiplier, double maxBankBalance, int membersToRankup, int maxAllies, boolean useBuffs, List permissions) { + public GuildTier(int level, String name, double cost, int maxMembers, int vaultAmount, double mobXpMultiplier, double damageMultiplier, double maxBankBalance, int membersToRankup, int maxAllies, boolean useBuffs, List permissions, int claimableLand) { this.level = level; this.name = name; this.cost = cost; @@ -54,6 +55,7 @@ public GuildTier(int level, String name, double cost, int maxMembers, int vaultA this.maxAllies = maxAllies; this.useBuffs = useBuffs; this.permissions = permissions; + this.claimableLand = claimableLand; } public static GuildTierBuilder builder() { @@ -108,6 +110,8 @@ public List getPermissions() { return this.permissions; } + public int getClaimableLand() { return this.claimableLand; } + public String toString() { return "GuildTier(level=" + this.getLevel() + ", name=" + this.getName() + ", cost=" + this.getCost() + ", maxMembers=" + this.getMaxMembers() + ", vaultAmount=" + this.getVaultAmount() + ", mobXpMultiplier=" + this.getMobXpMultiplier() + ", damageMultiplier=" + this.getDamageMultiplier() + ", maxBankBalance=" + this.getMaxBankBalance() + ", membersToRankup=" + this.getMembersToRankup() + ", useBuffs=" + this.isUseBuffs() + ", permissions=" + this.getPermissions() + ")"; } @@ -125,6 +129,7 @@ public static class GuildTierBuilder { private int maxAllies; private boolean useBuffs; private List permissions; + private int claimableLand; GuildTierBuilder() { } @@ -189,12 +194,17 @@ public GuildTier.GuildTierBuilder permissions(List permissions) { return this; } + public GuildTier.GuildTierBuilder claimableLand(int claimable) { + this.claimableLand = claimable; + return this; + } + public GuildTier build() { - return new GuildTier(level, name, cost, maxMembers, vaultAmount, mobXpMultiplier, damageMultiplier, maxBankBalance, membersToRankup, maxAllies, useBuffs, permissions); + return new GuildTier(level, name, cost, maxMembers, vaultAmount, mobXpMultiplier, damageMultiplier, maxBankBalance, membersToRankup, maxAllies, useBuffs, permissions, claimableLand); } public String toString() { - return "GuildTier.GuildTierBuilder(level=" + this.level + ", name=" + this.name + ", cost=" + this.cost + ", maxMembers=" + this.maxMembers + ", vaultAmount=" + this.vaultAmount + ", mobXpMultiplier=" + this.mobXpMultiplier + ", damageMultiplier=" + this.damageMultiplier + ", maxBankBalance=" + this.maxBankBalance + ", membersToRankup=" + this.membersToRankup + ", useBuffs=" + this.useBuffs + ", permissions=" + this.permissions + ")"; + return "GuildTier.GuildTierBuilder(level=" + this.level + ", name=" + this.name + ", cost=" + this.cost + ", maxMembers=" + this.maxMembers + ", vaultAmount=" + this.vaultAmount + ", mobXpMultiplier=" + this.mobXpMultiplier + ", damageMultiplier=" + this.damageMultiplier + ", maxBankBalance=" + this.maxBankBalance + ", membersToRankup=" + this.membersToRankup + ", useBuffs=" + this.useBuffs + ", permissions=" + this.permissions + ", claimableLand=" + this.claimableLand + ")"; } } } diff --git a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java index 367f0d9f6..4ab5362eb 100644 --- a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java +++ b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java @@ -31,7 +31,7 @@ import me.glaremasters.guilds.guild.GuildHandler; import me.glaremasters.guilds.guild.GuildRolePerm; import me.glaremasters.guilds.messages.Messages; -import me.glaremasters.guilds.utils.ClaimUtils; +import me.glaremasters.guilds.claim.ClaimUtils; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; @@ -61,6 +61,8 @@ public ClaimSignListener(Guilds guilds, SettingsManager settingsManager, GuildHa this.guildHandler = guildHandler; } + //TODO Fix all of this because Claim Signs... + @EventHandler public void onSignChange(SignChangeEvent event) { Player player = event.getPlayer(); @@ -68,14 +70,14 @@ public void onSignChange(SignChangeEvent event) { if (!event.getLine(0).equalsIgnoreCase(settingsManager.getProperty(ClaimSettings.CLAIM_SIGN_TEXT))) return; - if (!player.hasPermission("guilds.claimsigns.place") && !player.hasPermission("worldguard.region.redefine.*")) { - guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_NO_PERMISSION); + if (!settingsManager.getProperty(ClaimSettings.CLAIM_SIGNS)) { + guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_NOT_ENABLED); event.setCancelled(true); return; } - if (!settingsManager.getProperty(ClaimSettings.CLAIM_SIGNS)) { - guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_NOT_ENABLED); + if (!player.hasPermission("guilds.claimsigns.place") && !player.hasPermission("worldguard.region.redefine.*")) { + guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_NO_PERMISSION); event.setCancelled(true); return; } @@ -132,32 +134,34 @@ public void onSignInteract(PlayerInteractEvent event) { return; } - if (ClaimUtils.checkAlreadyExist(wrapper, guild)) { + if (ClaimUtils.checkMaxAlreadyExist(wrapper, guild)) { guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__ALREADY_EXISTS); return; } - if (guild.getBalance() < Double.valueOf(sign.getLine(2))) { + if (guild.getBalance() < Double.parseDouble(sign.getLine(2))) { guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_NOT_ENOUGH); return; } - ClaimUtils.getClaim(wrapper, player, sign.getLine(1)).ifPresent(region -> { + ClaimUtils.getClaim(wrapper, player, sign.getLine(1), guild).ifPresent(region -> { ICuboidSelection selection = ClaimUtils.getSelection(wrapper, player, region.getId()); wrapper.removeRegion(player.getWorld(), region.getId()); ClaimUtils.createClaim(wrapper, guild, selection); }); - ClaimUtils.getGuildClaim(wrapper, player, guild).ifPresent(region -> { - ClaimUtils.addOwner(region, guild); - ClaimUtils.addMembers(region, guild); - ClaimUtils.setEnterMessage(wrapper, region, settingsManager, guild); - ClaimUtils.setExitMessage(wrapper, region, settingsManager, guild); + ClaimUtils.getGuildClaim(wrapper, player, guild).forEach(claim -> { + claim.ifPresent(region -> { + ClaimUtils.addOwner(region, guild); + ClaimUtils.addMembers(region, guild); + ClaimUtils.setEnterMessage(wrapper, region, settingsManager, guild); + ClaimUtils.setExitMessage(wrapper, region, settingsManager, guild); + }); }); player.getWorld().getBlockAt(block.getLocation()).breakNaturally(); - guild.setBalance(guild.getBalance() - Double.valueOf(sign.getLine(2))); + guild.setBalance(guild.getBalance() - Double.parseDouble(sign.getLine(2))); guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_BUY_SUCCESS); } diff --git a/src/main/java/me/glaremasters/guilds/listeners/EntityListener.java b/src/main/java/me/glaremasters/guilds/listeners/EntityListener.java index cbc199b3f..824add307 100644 --- a/src/main/java/me/glaremasters/guilds/listeners/EntityListener.java +++ b/src/main/java/me/glaremasters/guilds/listeners/EntityListener.java @@ -30,7 +30,6 @@ import me.glaremasters.guilds.guild.Guild; import me.glaremasters.guilds.guild.GuildChallenge; import me.glaremasters.guilds.guild.GuildHandler; -import me.glaremasters.guilds.utils.ClaimUtils; import org.bukkit.entity.Arrow; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt new file mode 100644 index 000000000..fc31a4d62 --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -0,0 +1,384 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.glaremasters.guilds.claim + +import ch.jalu.configme.SettingsManager +import java.util.Optional +import me.glaremasters.guilds.configuration.sections.ClaimSettings +import me.glaremasters.guilds.configuration.sections.HooksSettings +import me.glaremasters.guilds.guild.Guild +import me.glaremasters.guilds.utils.StringUtils +import org.bukkit.Bukkit +import org.bukkit.Location +import org.bukkit.OfflinePlayer +import org.bukkit.World +import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper +import org.codemc.worldguardwrapper.flag.WrappedState +import org.codemc.worldguardwrapper.region.IWrappedDomain +import org.codemc.worldguardwrapper.region.IWrappedRegion +import org.codemc.worldguardwrapper.selection.ICuboidSelection + +/** + * Created by Glare + * Date: 4/4/2019 + * Time: 9:44 PM + */ +object ClaimUtils { + + @JvmStatic + fun isEnable(settingsManager: SettingsManager): Boolean { + return settingsManager.getProperty(HooksSettings.WORLDGUARD) + } + + @JvmStatic + fun claimPointOne(player: Player): Location { + return player.location.chunk.getBlock(0, player.world.minHeight, 0).location + //return player.location.subtract(getRadius(settingsManager).toDouble(), player.location.y, getRadius(settingsManager).toDouble()) + } + + @JvmStatic + fun claimPointTwo(player: Player): Location { + return player.location.chunk.getBlock(15, player.world.maxHeight, 15).location + //return player.location.add(getRadius(settingsManager).toDouble(), player.world.maxHeight - player.location.y, getRadius(settingsManager).toDouble()) + } + + @JvmStatic + fun getNextAvailableClaimName(guild: Guild): String { + val num = getClaimAmount(guild) + 1 + return "${guild.id}-${num}" + //return guild.id.toString() + } + + @JvmStatic + fun getNumFromName(name: String): Int { + return name.substringAfterLast("-").toInt() + } + + @JvmStatic + fun getClaimNameFormat(guild: Guild, int: Int): String { + return "${guild.id}-${int}" + } + + @JvmStatic + fun getClaimNames(wrapper: WorldGuardWrapper, guild: Guild): List { + val claims = mutableListOf() + for (claim in guild.claimedLand) { + claims.add(claim.region.get().id.toString()) + } + return claims + } + + @JvmStatic + fun getClaimNumbers(guild: Guild): List { + val claims = mutableListOf() + for (claim in guild.claimedLand) { + claims.add(claim.num) + } + return claims + } + + @JvmStatic + fun getClaimAmount(guild: Guild): Int { + return guild.claimedLand.size + } + + @JvmStatic + fun getClaims(guild: Guild): List { + return guild.claimedLand + } + + @JvmStatic + fun findRegionClaims(wrapper: WorldGuardWrapper, world: World, guild: Guild): List> { + val claims = mutableListOf>() + for (claim in guild.claimedLand) { + val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.num)) + try { + tempRegion.get().id + claims.add(tempRegion) + } catch (ex: Exception) { + continue + } + } + return claims + } + + @JvmStatic + fun findRegionClaims(wrapper: WorldGuardWrapper, guild: Guild): List> { + val claims = mutableListOf>() + for (world in Bukkit.getWorlds()) { + for (claim in guild.claimedLand) { + val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.num)) + try { + tempRegion.get().id + claims.add(tempRegion) + } catch (ex: Exception) { + continue + } + } + } + return claims + } + + @JvmStatic + fun getGuildClaimFromRegion(region: Optional, guild: Guild): GuildClaim? { + for (claim in guild.claimedLand) { + if (claim.region.equals(region)) { + return claim + } + } + return null + } + + @JvmStatic + fun getGuildClaimFromRegion(region: IWrappedRegion, guild: Guild): GuildClaim? { + for (claim in guild.claimedLand) { + if (claim.region.equals(region)) { + return claim + } + } + return null + } + + @JvmStatic + fun checkIfHaveClaims(wrapper: WorldGuardWrapper, guild: Guild): Boolean { + val foundClaims = findRegionClaims(wrapper, guild) + return if (guild.claimedLand.size == 0) { + false + } else { + !foundClaims.isNullOrEmpty() + } +// for (world in Bukkit.getWorlds()) { +// guild.tier.claimableLand +// val tempRegion = wrapper.getRegion(world, getAvailableClaimName(guild)) +// try { +// tempRegion.get().id +// return true +// } catch (ex: Exception) { +// continue +// } +// } +// return false + } + + @JvmStatic + fun checkMaxAlreadyExist(wrapper: WorldGuardWrapper, guild: Guild): Boolean { + return guild.claimedLand.size >= 10 +// for (world in Bukkit.getWorlds()) { +// val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, guild.tier.claimableLand)) +// try { +// tempRegion.get().id +// return true +// } catch (ex: Exception) { +// continue +// } +// } +// return false + } + + @JvmStatic + fun regions(wrapper: WorldGuardWrapper, player: Player): Set { + return wrapper.getRegions(claimPointOne(player), claimPointTwo(player)) + } + + @JvmStatic + fun checkOverlap(wrapper: WorldGuardWrapper, player: Player): Boolean { + return regions(wrapper, player).isNotEmpty() + } + + @JvmStatic + fun isInDisabledWorld(player: Player, settingsManager: SettingsManager): Boolean { + return settingsManager.getProperty(ClaimSettings.DISABLED_WORLDS).contains(player.world.name) + } + + @JvmStatic + fun getStandingOnClaim(wrapper: WorldGuardWrapper, player: Player, guild: Guild): GuildClaim? { + for (claim in findRegionClaims(wrapper, guild)) { + if (regions(wrapper, player).contains(claim.get())) { + return getGuildClaimFromRegion(claim, guild) + } + } + return null + } + + + + + + + + + + + + + + + + @JvmStatic + fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, player: Player): GuildClaim { + getNextAvailableClaimName(guild).also { + wrapper.addCuboidRegion(it, claimPointOne(player), claimPointTwo(player)) + return GuildClaim.builder().guildID(guild.id).num(getNumFromName(it)).name(it).region(wrapper.getRegion(player.world, it)).build() + } + } + + @JvmStatic + fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, selection: ICuboidSelection): GuildClaim { + getNextAvailableClaimName(guild).also { + wrapper.addCuboidRegion(it, selection.minimumPoint, selection.maximumPoint) + return GuildClaim.builder().guildID(guild.id).num(getNumFromName(it)).name(it).region(wrapper.getRegion(selection.maximumPoint.world!!, it)).build() + } + } + + @JvmStatic + fun removeAllClaims(wrapper: WorldGuardWrapper, guild: Guild) { + for (world in Bukkit.getWorlds()) { + for (claim in guild.claimedLand) { + claim.region.get().id?.let { wrapper.removeRegion(world, it) } + } + } + } + + @JvmStatic + fun removeClaim(wrapper: WorldGuardWrapper, guild: Guild, num: Int) { + for (world in Bukkit.getWorlds()) { + for (claim in findRegionClaims(wrapper, guild)) { + if (getClaimNameFormat(guild, num) == claim.get().id) { + wrapper.removeRegion(world, getClaimNameFormat(guild, num)) + } + } + } + } + + @JvmStatic + fun removeClaim(wrapper: WorldGuardWrapper, guildClaim: GuildClaim, guild: Guild) { + for (world in Bukkit.getWorlds()) { + for (claim in findRegionClaims(wrapper, guild)) { + if (guildClaim.region.get().id == claim.get().id) { + guildClaim.region.get().id?.let { wrapper.removeRegion(world, it) } + } + } + } + } + + @JvmStatic + fun getClaim(wrapper: WorldGuardWrapper, player: Player, name: String, guild: Guild): GuildClaim { + return getGuildClaimFromRegion(wrapper.getRegion(player.world, name), guild)!! + } + + @JvmStatic + fun addOwner(claim: GuildClaim, guild: Guild) { + claim.region.get().owners.addPlayer(guild.guildMaster.uuid) + } + + @JvmStatic + fun removeOwner(claim: GuildClaim, player: Player) { + claim.region.get().owners.removePlayer(player.uniqueId) + } + + @JvmStatic + fun getMembers(claim: GuildClaim): IWrappedDomain { + return claim.region.get().members + } + + @JvmStatic + fun addMembers(claim: GuildClaim, guild: Guild) { + guild.members.forEach { + getMembers(claim).addPlayer(it.uuid) + } + } + + @JvmStatic + fun addMember(claim: GuildClaim, player: Player) { + getMembers(claim).addPlayer(player.uniqueId) + } + + @JvmStatic + fun removeMember(claim: GuildClaim, player: OfflinePlayer) { + getMembers(claim).removePlayer(player.uniqueId) + } + + @JvmStatic + fun kickMember(playerKicked: OfflinePlayer, playerExecuting: Player, guild: Guild) { + val wrapper = WorldGuardWrapper.getInstance() + for (claim in guild.claimedLand) { + removeMember(claim, playerKicked) + } + } + + @JvmStatic + fun setEnterMessage(wrapper: WorldGuardWrapper, claim: GuildClaim, settingsManager: SettingsManager, guild: Guild) { + claim.region.get().setFlag(wrapper.getFlag("greeting", String::class.java).orElse(null), + StringUtils.color( + settingsManager.getProperty(ClaimSettings.ENTER_MESSAGE).replace("{guild}", guild.name) + .replace("{prefix}", guild.prefix) + ) + ) + } + + @JvmStatic + fun setExitMessage(wrapper: WorldGuardWrapper, claim: GuildClaim, settingsManager: SettingsManager, guild: Guild) { + claim.region.get().setFlag(wrapper.getFlag("farewell", String::class.java).orElse(null), + StringUtils.color( + settingsManager.getProperty(ClaimSettings.EXIT_MESSAGE).replace("{guild}", guild.name) + .replace("{prefix}", guild.prefix) + ) + ) + } + + @JvmStatic + fun checkPvpDisabled(player: Player): Boolean { + val wrapper = WorldGuardWrapper.getInstance() + val flag = wrapper.getFlag("pvp", WrappedState::class.java) + var state = WrappedState.ALLOW + + if (!flag.isPresent) { + return false + } + + val check = flag.map { f -> wrapper.queryFlag(player, player.location, f) } + check.ifPresent { + state = try { + it.get() + } catch (ex: Exception) { + WrappedState.ALLOW + } + } + return state == WrappedState.DENY + } + + @JvmStatic + fun deleteWithGuild(guild: Guild) { + + val wrapper = WorldGuardWrapper.getInstance() + + if (!checkIfHaveClaims(wrapper, guild)) { + return + } + + removeAllClaims(wrapper, guild) + guild.claimedLand.clear() + } +} diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt new file mode 100644 index 000000000..05e101613 --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt @@ -0,0 +1,105 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.glaremasters.guilds.claim + +import me.glaremasters.guilds.guild.Guild +import org.codemc.worldguardwrapper.region.IWrappedRegion +import java.util.* + +class GuildClaim ( + @field:Transient var name: String?, + @field:Transient var num: Int, + @field:Transient var guildID: UUID, + @field:Transient var region: Optional) { + + fun changeName(name: String) { + this.name = name + return + } + + fun changeNumber(num: Int) { + this.num = num + return + } + + fun changeRegion(region: Optional) { + this.region = region + return + } + + fun changeGuildID(guildID: UUID) { + this.guildID = guildID + return + } + + override fun toString(): String { + return "GuildClaim(name=" + name + ", num=" + num + ", region=" + region?.get()?.id + ", guildID=" + guildID + ")" + } + + class GuildClaimBuilder internal constructor() { + private var name: String? = null + private var num = 0 + private lateinit var guildID: UUID + private lateinit var region: Optional + + fun name(name: String?): GuildClaimBuilder { + this.name = name + return this + } + + fun num(num: Int): GuildClaimBuilder { + this.num = num + return this + } + + fun region(region: Optional): GuildClaimBuilder { + this.region = region + return this + } + + fun guildID(guildID: UUID): GuildClaimBuilder { + this.guildID = guildID + return this + } + + fun build(): GuildClaim { + return GuildClaim( + name, + num, + guildID, + region + ) + } + + override fun toString(): String { + return "GuildClaim.GuildClaimBuilder(name=" + name + ", num=" + num + ", region=" + region.get().id + ", guildID=" + guildID + ")" + } + } + + companion object { + fun builder(): GuildClaimBuilder { + return GuildClaimBuilder() + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt index ac09d570c..8043c7ce7 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt @@ -41,7 +41,7 @@ import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper @@ -64,26 +64,26 @@ internal class CommandAdminClaim : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() - if (ClaimUtils.checkAlreadyExist(wrapper, guild)) { + if (ClaimUtils.checkMaxAlreadyExist(wrapper, guild)) { throw ExpectationNotMet(Messages.CLAIM__ALREADY_EXISTS) } - if (ClaimUtils.checkOverlap(wrapper, player, settingsManager)) { + if (ClaimUtils.checkOverlap(wrapper, player)) { throw ExpectationNotMet(Messages.CLAIM__OVERLAP) } - ClaimUtils.createClaim(wrapper, guild, player, settingsManager) + val claim = ClaimUtils.createClaim(wrapper, guild, player) + guild.addGuildClaim(claim) - ClaimUtils.getGuildClaim(wrapper, player, guild).ifPresent { region -> - ClaimUtils.addOwner(region, guild) - ClaimUtils.addMembers(region, guild) - ClaimUtils.setEnterMessage(wrapper, region, settingsManager, guild) - ClaimUtils.setExitMessage(wrapper, region, settingsManager, guild) - } + + ClaimUtils.addOwner(claim, guild) + ClaimUtils.addMembers(claim, guild) + ClaimUtils.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimUtils.setExitMessage(wrapper, claim, settingsManager, guild) currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, - "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player, settingsManager)), - "{loc2}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointTwo(player, settingsManager))) + "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), + "{loc2}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointTwo(player))) } @Subcommand("admin unclaim") @@ -98,11 +98,17 @@ internal class CommandAdminClaim : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() - if (!ClaimUtils.checkAlreadyExist(wrapper, guild)) { + if (!ClaimUtils.checkIfHaveClaims(wrapper, guild)) { throw (ExpectationNotMet(Messages.UNCLAIM__NOT_FOUND)) } - ClaimUtils.removeClaim(wrapper, guild) + if (ClaimUtils.checkOverlap(wrapper, player)) { + val claim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) + if (claim != null) { + ClaimUtils.removeClaim(wrapper, claim, guild) + guild.removeGuildClaim(claim) + } + } currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt index 061500a25..f87b63122 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt @@ -40,11 +40,10 @@ import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildRemoveEvent -import me.glaremasters.guilds.configuration.sections.PluginSettings import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit @@ -80,7 +79,9 @@ internal class CommandAdminRemove : BaseCommand() { guildHandler.removeGuildPermsFromAll(permission, guild) guildHandler.removeAlliesOnDelete(guild) guildHandler.notifyAllies(guild, guilds.commandManager) - ClaimUtils.deleteWithGuild(guild, settingsManager) + if (ClaimUtils.isEnable(settingsManager)) { + ClaimUtils.deleteWithGuild(guild) + } guild.sendMessage(currentCommandManager, Messages.LEAVE__GUILDMASTER_LEFT, "{player}", guild.guildMaster.name) guildHandler.removeGuild(guild) currentCommandIssuer.sendInfo(Messages.ADMIN__DELETE_SUCCESS, "{guild}", name) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt index 2b38ea1cd..b739cbbda 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt @@ -37,7 +37,7 @@ import me.glaremasters.guilds.api.events.GuildKickEvent import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import org.bukkit.Bukkit import org.bukkit.entity.Player @@ -63,7 +63,10 @@ internal class CommandAdminRemovePlayer : BaseCommand() { return } - ClaimUtils.kickMember(user, player, guild, settingsManager) + if (ClaimUtils.isEnable(settingsManager)) { + ClaimUtils.kickMember(user, player, guild) + } + guild.removeMember(user) if (user.isOnline) { diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt index 49d6dbc21..c189bfe1e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt @@ -40,7 +40,7 @@ import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper @@ -73,26 +73,25 @@ internal class CommandClaim : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() - if (ClaimUtils.checkAlreadyExist(wrapper, guild)) { + if (ClaimUtils.checkMaxAlreadyExist(wrapper, guild)) { throw ExpectationNotMet(Messages.CLAIM__ALREADY_EXISTS) } - if (ClaimUtils.checkOverlap(wrapper, player, settingsManager)) { + if (ClaimUtils.checkOverlap(wrapper, player)) { throw ExpectationNotMet(Messages.CLAIM__OVERLAP) } - ClaimUtils.createClaim(wrapper, guild, player, settingsManager) + val claim = ClaimUtils.createClaim(wrapper, guild, player) + guild.addGuildClaim(claim) - ClaimUtils.getGuildClaim(wrapper, player, guild).ifPresent { region -> - ClaimUtils.addOwner(region, guild) - ClaimUtils.addMembers(region, guild) - ClaimUtils.setEnterMessage(wrapper, region, settingsManager, guild) - ClaimUtils.setExitMessage(wrapper, region, settingsManager, guild) - } + ClaimUtils.addOwner(claim, guild) + ClaimUtils.addMembers(claim, guild) + ClaimUtils.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimUtils.setExitMessage(wrapper, claim, settingsManager, guild) currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, - "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player, settingsManager)), - "{loc2}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointTwo(player, settingsManager))) + "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), + "{loc2}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointTwo(player))) } @Subcommand("unclaim") @@ -114,11 +113,17 @@ internal class CommandClaim : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() - if (!ClaimUtils.checkAlreadyExist(wrapper, guild)) { + if (!ClaimUtils.checkIfHaveClaims(wrapper, guild)) { throw ExpectationNotMet(Messages.UNCLAIM__NOT_FOUND) } - ClaimUtils.removeClaim(wrapper, guild) + if (ClaimUtils.checkOverlap(wrapper, player)) { + val claim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) + if (claim != null) { + ClaimUtils.removeClaim(wrapper, claim, guild) + guild.removeGuildClaim(claim) + } + } currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt b/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt index f99c46589..da34bca1e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt @@ -46,7 +46,7 @@ import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.utils.BackupUtils -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import org.codemc.worldguardwrapper.WorldGuardWrapper @@ -158,8 +158,8 @@ internal class CommandConsole : BaseCommand() { override fun accept() { val wrapper = WorldGuardWrapper.getInstance() guildHandler.guilds.forEach { guild -> - if (ClaimUtils.checkAlreadyExist(wrapper, guild)) { - ClaimUtils.removeClaim(wrapper, guild) + for (claim in ClaimUtils.findRegionClaims(wrapper, guild)) { + ClaimUtils.removeAllClaims(wrapper, guild) } } currentCommandIssuer.sendInfo(Messages.UNCLAIM__ALL_SUCCESS) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt index 5dbb17c4c..3c9f2ee43 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt @@ -37,11 +37,10 @@ import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildRemoveEvent -import me.glaremasters.guilds.configuration.sections.PluginSettings import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit @@ -80,7 +79,9 @@ internal class CommandDelete : BaseCommand() { guildHandler.removeAlliesOnDelete(guild) guildHandler.notifyAllies(guild, guilds.commandManager) guild.sendMessage(currentCommandManager, Messages.LEAVE__GUILDMASTER_LEFT, "{player}", player.name) - ClaimUtils.deleteWithGuild(guild, settingsManager) + if (ClaimUtils.isEnable(settingsManager)) { + ClaimUtils.deleteWithGuild(guild) + } guildHandler.removeGuild(guild) currentCommandIssuer.sendInfo(Messages.DELETE__SUCCESSFUL, "{guild}", guild.name) actionHandler.removeAction(player) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt index c71b37c32..055a444c3 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt @@ -40,7 +40,6 @@ import java.util.concurrent.TimeUnit import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildKickEvent import me.glaremasters.guilds.configuration.sections.CooldownSettings -import me.glaremasters.guilds.configuration.sections.PluginSettings import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -48,7 +47,7 @@ import me.glaremasters.guilds.exceptions.InvalidPermissionException import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import me.glaremasters.guilds.utils.RoleUtils import net.milkbowl.vault.permission.Permission @@ -94,7 +93,9 @@ internal class CommandKick : BaseCommand() { guildHandler.removeGuildPerms(permission, user) cooldownHandler.addCooldown(user, Cooldown.Type.Join.name, settingsManager.getProperty(CooldownSettings.JOIN), TimeUnit.SECONDS) - ClaimUtils.kickMember(user, player, guild, settingsManager) + if (ClaimUtils.isEnable(settingsManager)) { + ClaimUtils.kickMember(user, player, guild) + } guild.removeMember(asMember) currentCommandIssuer.sendInfo(Messages.BOOT__SUCCESSFUL, "{player}", user.name) guild.sendMessage(currentCommandManager, Messages.BOOT__PLAYER_KICKED, "{player}", user.name, "{kicker}", player.name) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt index ef3b4393a..01a70894f 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt @@ -41,7 +41,7 @@ import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import me.glaremasters.guilds.utils.EconomyUtils import me.glaremasters.guilds.utils.StringUtils @@ -95,10 +95,10 @@ internal class CommandRename : BaseCommand() { if (ClaimUtils.isEnable(settingsManager)) { val wrapper = WorldGuardWrapper.getInstance() - if (ClaimUtils.checkAlreadyExist(wrapper, guild)) { - ClaimUtils.getGuildClaim(wrapper, player, guild).ifPresent { region -> - ClaimUtils.setEnterMessage(wrapper, region, settingsManager, guild) - ClaimUtils.setExitMessage(wrapper, region, settingsManager, guild) + if (ClaimUtils.checkIfHaveClaims(wrapper, guild)) { + for (claim in guild.claimedLand) { + ClaimUtils.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimUtils.setExitMessage(wrapper, claim, settingsManager, guild) } } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt index 131714c3b..1d7228050 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt @@ -37,14 +37,13 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildJoinEvent -import me.glaremasters.guilds.configuration.sections.PluginSettings import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit @@ -97,7 +96,9 @@ internal class CommandAccept : BaseCommand() { if (ClaimUtils.isEnable(settingsManager)) { val wrapper = WorldGuardWrapper.getInstance() - ClaimUtils.getGuildClaim(wrapper, player, guild).ifPresent { region -> ClaimUtils.addMember(region, player) } + for (claim in guild.claimedLand) { + ClaimUtils.addMember(claim, player) + } } currentCommandIssuer.sendInfo(Messages.ACCEPT__SUCCESSFUL, "{guild}", guild.name) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt index 29e2322bb..2d78aa2e2 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt @@ -40,13 +40,12 @@ import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildLeaveEvent import me.glaremasters.guilds.api.events.GuildRemoveEvent import me.glaremasters.guilds.configuration.sections.CooldownSettings -import me.glaremasters.guilds.configuration.sections.PluginSettings import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.utils.ClaimUtils +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit @@ -103,15 +102,18 @@ internal class CommandLeave : BaseCommand() { guildHandler.removeAlliesOnDelete(guild) guildHandler.notifyAllies(guild, guilds.commandManager) cooldownHandler.addCooldown(player, cooldownName, cooldownTime, TimeUnit.SECONDS) - ClaimUtils.deleteWithGuild(guild, settingsManager) + if (ClaimUtils.isEnable(settingsManager)) { + ClaimUtils.deleteWithGuild(guild) + } guildHandler.removeGuild(guild) } else { guildHandler.removeGuildPerms(permission, player) cooldownHandler.addCooldown(player, cooldownName, cooldownTime, TimeUnit.SECONDS) if (ClaimUtils.isEnable(settingsManager)) { - val wrapper = WorldGuardWrapper.getInstance() - ClaimUtils.getGuildClaim(wrapper, player, guild).ifPresent { region -> ClaimUtils.removeMember(region, player) } + for (claim in guild.claimedLand) { + ClaimUtils.removeMember(claim, player) + } } guild.removeMember(player) diff --git a/src/main/kotlin/me/glaremasters/guilds/utils/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/utils/ClaimUtils.kt deleted file mode 100644 index c123ecdfb..000000000 --- a/src/main/kotlin/me/glaremasters/guilds/utils/ClaimUtils.kt +++ /dev/null @@ -1,216 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Glare - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package me.glaremasters.guilds.utils - -import ch.jalu.configme.SettingsManager -import java.util.Optional -import me.glaremasters.guilds.configuration.sections.ClaimSettings -import me.glaremasters.guilds.configuration.sections.HooksSettings -import me.glaremasters.guilds.guild.Guild -import org.bukkit.Bukkit -import org.bukkit.Location -import org.bukkit.OfflinePlayer -import org.bukkit.entity.Player -import org.codemc.worldguardwrapper.WorldGuardWrapper -import org.codemc.worldguardwrapper.flag.WrappedState -import org.codemc.worldguardwrapper.region.IWrappedDomain -import org.codemc.worldguardwrapper.region.IWrappedRegion -import org.codemc.worldguardwrapper.selection.ICuboidSelection - -/** - * Created by Glare - * Date: 4/4/2019 - * Time: 9:44 PM - */ -object ClaimUtils { - - @JvmStatic - fun isEnable(settingsManager: SettingsManager): Boolean { - return settingsManager.getProperty(HooksSettings.WORLDGUARD) - } - - @JvmStatic - fun getRadius(settingsManager: SettingsManager): Int { - return settingsManager.getProperty(ClaimSettings.RADIUS) - } - - @JvmStatic - fun claimPointOne(player: Player, settingsManager: SettingsManager): Location { - return player.location.subtract(getRadius(settingsManager).toDouble(), player.location.y, getRadius(settingsManager).toDouble()) - } - - @JvmStatic - fun claimPointTwo(player: Player, settingsManager: SettingsManager): Location { - return player.location.add(getRadius(settingsManager).toDouble(), player.world.maxHeight - player.location.y, getRadius(settingsManager).toDouble()) - } - - @JvmStatic - fun getClaimName(guild: Guild): String { - return guild.id.toString() - } - - @JvmStatic - fun checkAlreadyExist(wrapper: WorldGuardWrapper, guild: Guild): Boolean { - for (world in Bukkit.getWorlds()) { - val tempRegion = wrapper.getRegion(world, getClaimName(guild)) - try { - tempRegion.get().id - return true - } catch (ex: Exception) { - continue - } - } - return false - } - - @JvmStatic - fun checkAlreadyExist(wrapper: WorldGuardWrapper, player: Player, name: String): Boolean { - return wrapper.getRegion(player.world, name).isPresent - } - - @JvmStatic - fun regions(wrapper: WorldGuardWrapper, player: Player, settingsManager: SettingsManager): Set { - return wrapper.getRegions(claimPointOne(player, settingsManager), claimPointTwo(player, settingsManager)) - } - - @JvmStatic - fun checkOverlap(wrapper: WorldGuardWrapper, player: Player, settingsManager: SettingsManager): Boolean { - return regions(wrapper, player, settingsManager).isNotEmpty() - } - - @JvmStatic - fun isInDisabledWorld(player: Player, settingsManager: SettingsManager): Boolean { - return settingsManager.getProperty(ClaimSettings.DISABLED_WORLDS).contains(player.world.name) - } - - @JvmStatic - fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, player: Player, settingsManager: SettingsManager) { - wrapper.addCuboidRegion(getClaimName(guild), claimPointOne(player, settingsManager), claimPointTwo(player, settingsManager)) - } - - @JvmStatic - fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, selection: ICuboidSelection) { - wrapper.addCuboidRegion(getClaimName(guild), selection.minimumPoint, selection.maximumPoint) - } - - @JvmStatic - fun removeClaim(wrapper: WorldGuardWrapper, guild: Guild) { - for (world in Bukkit.getWorlds()) { - wrapper.removeRegion(world, getClaimName(guild)) - } - } - - @JvmStatic - fun getGuildClaim(wrapper: WorldGuardWrapper, player: Player, guild: Guild): Optional { - return wrapper.getRegion(player.world, getClaimName(guild)) - } - - @JvmStatic - fun getClaim(wrapper: WorldGuardWrapper, player: Player, name: String): Optional { - return wrapper.getRegion(player.world, name) - } - - @JvmStatic - fun getSelection(wrapper: WorldGuardWrapper, player: Player, name: String): ICuboidSelection { - return wrapper.getRegion(player.world, name).get().selection as ICuboidSelection - } - - @JvmStatic - fun addOwner(claim: IWrappedRegion, guild: Guild) { - claim.owners.addPlayer(guild.guildMaster.uuid) - } - - @JvmStatic - fun getMembers(claim: IWrappedRegion): IWrappedDomain { - return claim.members - } - - @JvmStatic - fun addMembers(claim: IWrappedRegion, guild: Guild) { - guild.members.forEach { - getMembers(claim).addPlayer(it.uuid) - } - } - - @JvmStatic - fun addMember(claim: IWrappedRegion, player: Player) { - getMembers(claim).addPlayer(player.uniqueId) - } - - @JvmStatic - fun removeMember(claim: IWrappedRegion, player: OfflinePlayer) { - getMembers(claim).removePlayer(player.uniqueId) - } - - @JvmStatic - fun kickMember(playerKicked: OfflinePlayer, playerExecuting: Player, guild: Guild, settingsManager: SettingsManager) { - if (isEnable(settingsManager)) { - val wrapper = WorldGuardWrapper.getInstance() - getGuildClaim(wrapper, playerExecuting, guild).ifPresent { r -> removeMember(r, playerKicked) } - } - } - - @JvmStatic - fun setEnterMessage(wrapper: WorldGuardWrapper, claim: IWrappedRegion, settingsManager: SettingsManager, guild: Guild) { - claim.setFlag(wrapper.getFlag("greeting", String::class.java).orElse(null), StringUtils.color(settingsManager.getProperty(ClaimSettings.ENTER_MESSAGE).replace("{guild}", guild.name).replace("{prefix}", guild.prefix))) - } - - @JvmStatic - fun setExitMessage(wrapper: WorldGuardWrapper, claim: IWrappedRegion, settingsManager: SettingsManager, guild: Guild) { - claim.setFlag(wrapper.getFlag("farewell", String::class.java).orElse(null), StringUtils.color(settingsManager.getProperty(ClaimSettings.EXIT_MESSAGE).replace("{guild}", guild.name).replace("{prefix}", guild.prefix))) - } - - @JvmStatic - fun checkPvpDisabled(player: Player): Boolean { - val wrapper = WorldGuardWrapper.getInstance() - val flag = wrapper.getFlag("pvp", WrappedState::class.java) - var state = WrappedState.ALLOW - - if (!flag.isPresent) { - return false - } - - val check = flag.map { f -> wrapper.queryFlag(player, player.location, f) } - check.ifPresent { - state = try { - it.get() - } catch (ex: Exception) { - WrappedState.ALLOW - } - } - return state == WrappedState.DENY - } - - @JvmStatic - fun deleteWithGuild(guild: Guild, settingsManager: SettingsManager) { - if (!isEnable(settingsManager)) { - return - } - val wrapper = WorldGuardWrapper.getInstance() - if (!checkAlreadyExist(wrapper, guild)) { - return - } - removeClaim(wrapper, guild) - } -} From 3ce64116c57e6372399bb04d34b08eee6e821091 Mon Sep 17 00:00:00 2001 From: VQ9 Date: Tue, 31 Aug 2021 21:32:09 +0100 Subject: [PATCH 02/10] Second attempt at proper chunk claims! --- build.gradle | 1 - .../me/glaremasters/guilds/guild/Guild.java | 3 +- .../guilds/guild/GuildHandler.java | 3 +- .../guilds/listeners/ClaimSignListener.java | 39 ++- .../me/glaremasters/guilds/acf/ACFHandler.kt | 6 + .../guilds/claim/ClaimPermissions.kt | 202 ++++++++++++++ .../guilds/claim/ClaimRegionHandler.kt | 88 ++++++ .../glaremasters/guilds/claim/ClaimUtils.kt | 260 ++++-------------- .../glaremasters/guilds/claim/GuildClaim.kt | 56 ++-- .../admin/claims/CommandAdminClaim.kt | 47 ++-- .../admin/manage/CommandAdminRemove.kt | 9 +- .../admin/manage/CommandAdminTransfer.kt | 11 + .../admin/member/CommandAdminAddPlayer.kt | 13 + .../admin/member/CommandAdminRemovePlayer.kt | 8 +- .../guilds/commands/claims/CommandClaim.kt | 43 +-- .../guilds/commands/console/CommandConsole.kt | 7 +- .../commands/management/CommandDelete.kt | 6 +- .../guilds/commands/management/CommandKick.kt | 10 +- .../commands/management/CommandRename.kt | 6 +- .../commands/management/CommandTransfer.kt | 10 + .../guilds/commands/member/CommandAccept.kt | 4 +- .../guilds/commands/member/CommandLeave.kt | 12 +- .../guilds/placeholders/PlaceholderAPI.kt | 1 + 23 files changed, 531 insertions(+), 314 deletions(-) create mode 100644 src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt create mode 100644 src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt diff --git a/build.gradle b/build.gradle index 212325e8b..baca993d8 100644 --- a/build.gradle +++ b/build.gradle @@ -85,7 +85,6 @@ slimJar { dependencies { - // Slimjar implementation slimjar("1.2.6") diff --git a/src/main/java/me/glaremasters/guilds/guild/Guild.java b/src/main/java/me/glaremasters/guilds/guild/Guild.java index 20dd0cf46..361b18fad 100644 --- a/src/main/java/me/glaremasters/guilds/guild/Guild.java +++ b/src/main/java/me/glaremasters/guilds/guild/Guild.java @@ -587,9 +587,8 @@ public void removeGuildClaim(GuildClaim claim) { /** * Clear all the guild claims in list - * @param claim the claims to clear */ - public void clearGuildClaims(GuildClaim claim) { + public void clearGuildClaims() { claimedLand.clear(); } diff --git a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java index dc926a807..f2a5c2ba7 100644 --- a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java +++ b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java @@ -29,6 +29,7 @@ import co.aikar.commands.ACFUtil; import co.aikar.commands.PaperCommandManager; import me.glaremasters.guilds.Guilds; +import me.glaremasters.guilds.claim.ClaimPermissions; import me.glaremasters.guilds.claim.GuildClaim; import me.glaremasters.guilds.configuration.sections.GuildSettings; import me.glaremasters.guilds.configuration.sections.GuildVaultSettings; @@ -872,7 +873,7 @@ public void handleInvite(PaperCommandManager manager, Player player, Guild guild if (ClaimUtils.isEnable(settingsManager)) { WorldGuardWrapper wrapper = WorldGuardWrapper.getInstance(); for (GuildClaim claim : guild.getClaimedLand()) { - ClaimUtils.addMember(claim, player); + ClaimPermissions.addMember(wrapper, claim, player); } } diff --git a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java index 4ab5362eb..e3d44598f 100644 --- a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java +++ b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java @@ -26,6 +26,9 @@ import ch.jalu.configme.SettingsManager; import me.glaremasters.guilds.Guilds; +import me.glaremasters.guilds.claim.ClaimPermissions; +import me.glaremasters.guilds.claim.ClaimRegionHandler; +import me.glaremasters.guilds.claim.GuildClaim; import me.glaremasters.guilds.configuration.sections.ClaimSettings; import me.glaremasters.guilds.guild.Guild; import me.glaremasters.guilds.guild.GuildHandler; @@ -41,6 +44,7 @@ import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.codemc.worldguardwrapper.WorldGuardWrapper; +import org.codemc.worldguardwrapper.region.IWrappedRegion; import org.codemc.worldguardwrapper.selection.ICuboidSelection; /** @@ -88,11 +92,13 @@ public void onSignChange(SignChangeEvent event) { return; } - if (!ClaimUtils.checkAlreadyExist(wrapper, player, event.getLine(1))) { + + if (!ClaimUtils.checkOverlap(wrapper, player)) { guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_INVALID_REGION); event.setCancelled(true); return; } + guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_PLACED, "{region}", event.getLine(1), "{price}", event.getLine(2)); } @@ -144,20 +150,23 @@ public void onSignInteract(PlayerInteractEvent event) { return; } - ClaimUtils.getClaim(wrapper, player, sign.getLine(1), guild).ifPresent(region -> { - ICuboidSelection selection = ClaimUtils.getSelection(wrapper, player, region.getId()); - wrapper.removeRegion(player.getWorld(), region.getId()); - ClaimUtils.createClaim(wrapper, guild, selection); - }); - - ClaimUtils.getGuildClaim(wrapper, player, guild).forEach(claim -> { - claim.ifPresent(region -> { - ClaimUtils.addOwner(region, guild); - ClaimUtils.addMembers(region, guild); - ClaimUtils.setEnterMessage(wrapper, region, settingsManager, guild); - ClaimUtils.setExitMessage(wrapper, region, settingsManager, guild); - }); - }); + IWrappedRegion region = ClaimUtils.getRegionFromName(wrapper, sign.getLine(1)); + + if (region == null) { + guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_INVALID_REGION); + return; + } + + ICuboidSelection selection = ClaimUtils.getSelection(wrapper, player, region.getId()); + wrapper.removeRegion(player.getWorld(), region.getId()); + + GuildClaim claim = ClaimRegionHandler.createClaim(wrapper, guild, selection); + guild.addGuildClaim(claim); + + ClaimPermissions.addOwner(wrapper, claim, guild); + ClaimPermissions.addMembers(wrapper, claim, guild); + ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild); + ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild); player.getWorld().getBlockAt(block.getLocation()).breakNaturally(); diff --git a/src/main/kotlin/me/glaremasters/guilds/acf/ACFHandler.kt b/src/main/kotlin/me/glaremasters/guilds/acf/ACFHandler.kt index a37244826..f87a78064 100644 --- a/src/main/kotlin/me/glaremasters/guilds/acf/ACFHandler.kt +++ b/src/main/kotlin/me/glaremasters/guilds/acf/ACFHandler.kt @@ -146,6 +146,12 @@ class ACFHandler(private val plugin: Guilds, private val commandManager: PaperCo val guild = guildHandler.getGuild(c.player) ?: return@registerAsyncCompletion emptyList() guild.members.mapNotNull { guildHandler.lookupCache[it.uuid] ?: it.name } } + + commandManager.commandCompletions.registerCompletion("claimed") { c -> + val guild = guildHandler.getGuild(c.player) ?: return@registerCompletion emptyList() + return@registerCompletion mutableListOf("this", "all") + } + commandManager.commandCompletions.registerCompletion("members-admin") { c -> val guild = c.getContextValue(Guild::class.java, 1) ?: return@registerCompletion emptyList() guild.members.mapNotNull { guildHandler.lookupCache[it.uuid] ?: it.name } diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt new file mode 100644 index 000000000..6256daf65 --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt @@ -0,0 +1,202 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.glaremasters.guilds.claim + +import ch.jalu.configme.SettingsManager +import me.glaremasters.guilds.configuration.sections.ClaimSettings +import me.glaremasters.guilds.guild.Guild +import me.glaremasters.guilds.utils.StringUtils +import org.bukkit.OfflinePlayer +import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper +import org.codemc.worldguardwrapper.flag.WrappedState +import org.codemc.worldguardwrapper.region.IWrappedDomain +import java.util.* + +object ClaimPermissions { + + // Owner handlers + @JvmStatic + fun addOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, guild: Guild) { + val region = claim.getRegion(wrapper) + region.owners.addPlayer(guild.guildMaster.uuid) + } + + @JvmStatic + fun addOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, player: Player) { + val region = claim.getRegion(wrapper) + region.owners.addPlayer(player.uniqueId) + } + + @JvmStatic + fun addOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, uuid: UUID) { + val region = claim.getRegion(wrapper) + region.owners.addPlayer(uuid) + } + + @JvmStatic + fun removeOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, player: Player) { + val region = claim.getRegion(wrapper) + region.owners.removePlayer(player.uniqueId) + } + + @JvmStatic + fun removeOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, uuid: UUID) { + val region = claim.getRegion(wrapper) + region.owners.removePlayer(uuid) + } + + @JvmStatic + fun clearOwners(wrapper: WorldGuardWrapper, claim: GuildClaim) { + val region = claim.getRegion(wrapper) + region.owners.players.clear() + } + + @JvmStatic + fun transferOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, guild: Guild) { + clearOwners(wrapper, claim) + addOwner(wrapper, claim, guild) + } + + @JvmStatic + fun transferOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, player: Player) { + clearOwners(wrapper, claim) + addOwner(wrapper, claim, player) + } + + + + + + + + + + + // Member handling + @JvmStatic + fun getMembers(wrapper: WorldGuardWrapper, claim: GuildClaim): IWrappedDomain { + return claim.getRegion(wrapper).members + } + + @JvmStatic + fun addMembers(wrapper: WorldGuardWrapper, claim: GuildClaim, guild: Guild) { + guild.members.forEach { + getMembers(wrapper, claim).addPlayer(it.uuid) + } + } + + @JvmStatic + fun addMember(wrapper: WorldGuardWrapper, claim: GuildClaim, player: Player) { + getMembers(wrapper, claim).addPlayer(player.uniqueId) + } + + @JvmStatic + fun addMember(wrapper: WorldGuardWrapper, claim: GuildClaim, uuid: UUID) { + getMembers(wrapper, claim).addPlayer(uuid) + } + + @JvmStatic + fun removeMember(wrapper: WorldGuardWrapper, claim: GuildClaim, player: OfflinePlayer) { + getMembers(wrapper, claim).removePlayer(player.uniqueId) + } + + @JvmStatic + fun removeMember(wrapper: WorldGuardWrapper, claim: GuildClaim, uuid: UUID) { + getMembers(wrapper, claim).removePlayer(uuid) + } + + @JvmStatic + fun kickMember(wrapper: WorldGuardWrapper, claim: GuildClaim, playerKicked: OfflinePlayer) { + removeMember(wrapper, claim, playerKicked) + } + + @JvmStatic + fun kickMember(wrapper: WorldGuardWrapper, claim: GuildClaim, uuid: UUID) { + removeMember(wrapper, claim, uuid) + } + + + + + + + + + + + // Decoration Handler + @JvmStatic + fun setEnterMessage(wrapper: WorldGuardWrapper, claim: GuildClaim, settingsManager: SettingsManager, guild: Guild) { + val region = claim.getRegion(wrapper) + region.setFlag(wrapper.getFlag("greeting", String::class.java).orElse(null), + StringUtils.color( + settingsManager.getProperty(ClaimSettings.ENTER_MESSAGE).replace("{guild}", guild.name) + .replace("{prefix}", guild.prefix) + ) + ) + } + + @JvmStatic + fun setExitMessage(wrapper: WorldGuardWrapper, claim: GuildClaim, settingsManager: SettingsManager, guild: Guild) { + val region = claim.getRegion(wrapper) + region.setFlag(wrapper.getFlag("farewell", String::class.java).orElse(null), + StringUtils.color( + settingsManager.getProperty(ClaimSettings.EXIT_MESSAGE).replace("{guild}", guild.name) + .replace("{prefix}", guild.prefix) + ) + ) + } + + + + + + + + + + + // Misc + @JvmStatic + fun checkPvpDisabled(player: Player): Boolean { + val wrapper = WorldGuardWrapper.getInstance() + val flag = wrapper.getFlag("pvp", WrappedState::class.java) + var state = WrappedState.ALLOW + + if (!flag.isPresent) { + return false + } + + val check = flag.map { f -> wrapper.queryFlag(player, player.location, f) } + check.ifPresent { + state = try { + it.get() + } catch (ex: Exception) { + WrappedState.ALLOW + } + } + return state == WrappedState.DENY + } +} \ No newline at end of file diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt new file mode 100644 index 000000000..896c7a1ca --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt @@ -0,0 +1,88 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.glaremasters.guilds.claim + +import me.glaremasters.guilds.guild.Guild +import org.bukkit.Bukkit +import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper +import org.codemc.worldguardwrapper.selection.ICuboidSelection + +object ClaimRegionHandler { + + @JvmStatic + fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, player: Player): GuildClaim { + ClaimUtils.getNextAvailableClaimName(guild).also { + wrapper.addCuboidRegion(it, ClaimUtils.claimPointOne(player), ClaimUtils.claimPointTwo(player)) + return GuildClaim.builder().guildId(guild.id).number(ClaimUtils.getNumFromName(it)).name(it).build() + } + } + + @JvmStatic + fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, selection: ICuboidSelection): GuildClaim { + ClaimUtils.getNextAvailableClaimName(guild).also { + wrapper.addCuboidRegion(it, selection.minimumPoint, selection.maximumPoint) + return GuildClaim.builder().guildId(guild.id).number(ClaimUtils.getNumFromName(it)).name(it).build() + } + } + + @JvmStatic + fun removeClaim(wrapper: WorldGuardWrapper, num: Int, guild: Guild) { + for (world in Bukkit.getWorlds()) { + wrapper.removeRegion(world, ClaimUtils.getClaimNameFormat(guild, num)) + } + } + + @JvmStatic + fun removeClaim(wrapper: WorldGuardWrapper, name: String) { + for (world in Bukkit.getWorlds()) { + wrapper.removeRegion(world, name) + } + } + + @JvmStatic + fun removeClaim(wrapper: WorldGuardWrapper, claim: GuildClaim) { + for (world in Bukkit.getWorlds()) { + wrapper.removeRegion(world, claim.getRegion(wrapper).id) + } + } + + @JvmStatic + fun removeAllClaims(wrapper: WorldGuardWrapper, guild: Guild) { + for (world in Bukkit.getWorlds()) { + for (claim in guild.claimedLand) { + wrapper.removeRegion(world, claim.getRegion(wrapper).id) + } + } + } + + @JvmStatic + fun deleteWithGuild(wrapper: WorldGuardWrapper, guild: Guild) { + if (!ClaimUtils.checkIfHaveClaims(wrapper, guild)) { + return + } + removeAllClaims(wrapper, guild) + guild.claimedLand.clear() + } +} \ No newline at end of file diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index fc31a4d62..64fdab55a 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -28,15 +28,11 @@ import java.util.Optional import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.configuration.sections.HooksSettings import me.glaremasters.guilds.guild.Guild -import me.glaremasters.guilds.utils.StringUtils import org.bukkit.Bukkit import org.bukkit.Location -import org.bukkit.OfflinePlayer import org.bukkit.World import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper -import org.codemc.worldguardwrapper.flag.WrappedState -import org.codemc.worldguardwrapper.region.IWrappedDomain import org.codemc.worldguardwrapper.region.IWrappedRegion import org.codemc.worldguardwrapper.selection.ICuboidSelection @@ -82,38 +78,46 @@ object ClaimUtils { } @JvmStatic - fun getClaimNames(wrapper: WorldGuardWrapper, guild: Guild): List { - val claims = mutableListOf() - for (claim in guild.claimedLand) { - claims.add(claim.region.get().id.toString()) - } - return claims + fun getClaimAmount(guild: Guild): Int { + return guild.claimedLand.size } @JvmStatic - fun getClaimNumbers(guild: Guild): List { - val claims = mutableListOf() - for (claim in guild.claimedLand) { - claims.add(claim.num) - } - return claims + fun getSelection(wrapper: WorldGuardWrapper, player: Player, name: String): ICuboidSelection { + return wrapper.getRegion(player.world, name).get().selection as ICuboidSelection } @JvmStatic - fun getClaimAmount(guild: Guild): Int { - return guild.claimedLand.size + fun regions(wrapper: WorldGuardWrapper, player: Player): Set { + return wrapper.getRegions(claimPointOne(player), claimPointTwo(player)) + } + + @JvmStatic + fun checkOverlap(wrapper: WorldGuardWrapper, player: Player): Boolean { + return regions(wrapper, player).isNotEmpty() } @JvmStatic - fun getClaims(guild: Guild): List { - return guild.claimedLand + fun isInDisabledWorld(player: Player, settingsManager: SettingsManager): Boolean { + return settingsManager.getProperty(ClaimSettings.DISABLED_WORLDS).contains(player.world.name) } + @JvmStatic + fun getStandingOnClaim(wrapper: WorldGuardWrapper, player: Player, guild: Guild): GuildClaim? { + for (region in findRegionClaims(wrapper, guild)) { + if (regions(wrapper, player).contains(region.get())) { + return getGuildClaimFromRegion(wrapper, region, guild) + } + } + return null + } + + @JvmStatic fun findRegionClaims(wrapper: WorldGuardWrapper, world: World, guild: Guild): List> { val claims = mutableListOf>() for (claim in guild.claimedLand) { - val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.num)) + val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.number)) try { tempRegion.get().id claims.add(tempRegion) @@ -129,7 +133,7 @@ object ClaimUtils { val claims = mutableListOf>() for (world in Bukkit.getWorlds()) { for (claim in guild.claimedLand) { - val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.num)) + val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.number)) try { tempRegion.get().id claims.add(tempRegion) @@ -142,9 +146,9 @@ object ClaimUtils { } @JvmStatic - fun getGuildClaimFromRegion(region: Optional, guild: Guild): GuildClaim? { + fun getGuildClaimFromRegion(wrapper: WorldGuardWrapper, region: Optional, guild: Guild): GuildClaim? { for (claim in guild.claimedLand) { - if (claim.region.equals(region)) { + if (claim.getRegion(wrapper).equals(region.get())) { return claim } } @@ -152,15 +156,34 @@ object ClaimUtils { } @JvmStatic - fun getGuildClaimFromRegion(region: IWrappedRegion, guild: Guild): GuildClaim? { + fun getGuildClaimFromRegion(wrapper: WorldGuardWrapper, region: IWrappedRegion, guild: Guild): GuildClaim? { for (claim in guild.claimedLand) { - if (claim.region.equals(region)) { + if (claim.getRegion(wrapper).equals(region)) { return claim } } return null } + @JvmStatic + fun getRegionFromName(wrapper: WorldGuardWrapper, name: String): IWrappedRegion? { + for (world in Bukkit.getWorlds()) { + val tempRegion = wrapper.getRegion(world, name) + return try { + tempRegion.get().id + tempRegion.get() + } catch (ex: Exception) { + null + } + } + return null + } + + @JvmStatic + fun getClaimFromName(wrapper: WorldGuardWrapper, player: Player, name: String, guild: Guild): GuildClaim { + return getGuildClaimFromRegion(wrapper, wrapper.getRegion(player.world, name), guild)!! + } + @JvmStatic fun checkIfHaveClaims(wrapper: WorldGuardWrapper, guild: Guild): Boolean { val foundClaims = findRegionClaims(wrapper, guild) @@ -196,189 +219,4 @@ object ClaimUtils { // } // return false } - - @JvmStatic - fun regions(wrapper: WorldGuardWrapper, player: Player): Set { - return wrapper.getRegions(claimPointOne(player), claimPointTwo(player)) - } - - @JvmStatic - fun checkOverlap(wrapper: WorldGuardWrapper, player: Player): Boolean { - return regions(wrapper, player).isNotEmpty() - } - - @JvmStatic - fun isInDisabledWorld(player: Player, settingsManager: SettingsManager): Boolean { - return settingsManager.getProperty(ClaimSettings.DISABLED_WORLDS).contains(player.world.name) - } - - @JvmStatic - fun getStandingOnClaim(wrapper: WorldGuardWrapper, player: Player, guild: Guild): GuildClaim? { - for (claim in findRegionClaims(wrapper, guild)) { - if (regions(wrapper, player).contains(claim.get())) { - return getGuildClaimFromRegion(claim, guild) - } - } - return null - } - - - - - - - - - - - - - - - - @JvmStatic - fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, player: Player): GuildClaim { - getNextAvailableClaimName(guild).also { - wrapper.addCuboidRegion(it, claimPointOne(player), claimPointTwo(player)) - return GuildClaim.builder().guildID(guild.id).num(getNumFromName(it)).name(it).region(wrapper.getRegion(player.world, it)).build() - } - } - - @JvmStatic - fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, selection: ICuboidSelection): GuildClaim { - getNextAvailableClaimName(guild).also { - wrapper.addCuboidRegion(it, selection.minimumPoint, selection.maximumPoint) - return GuildClaim.builder().guildID(guild.id).num(getNumFromName(it)).name(it).region(wrapper.getRegion(selection.maximumPoint.world!!, it)).build() - } - } - - @JvmStatic - fun removeAllClaims(wrapper: WorldGuardWrapper, guild: Guild) { - for (world in Bukkit.getWorlds()) { - for (claim in guild.claimedLand) { - claim.region.get().id?.let { wrapper.removeRegion(world, it) } - } - } - } - - @JvmStatic - fun removeClaim(wrapper: WorldGuardWrapper, guild: Guild, num: Int) { - for (world in Bukkit.getWorlds()) { - for (claim in findRegionClaims(wrapper, guild)) { - if (getClaimNameFormat(guild, num) == claim.get().id) { - wrapper.removeRegion(world, getClaimNameFormat(guild, num)) - } - } - } - } - - @JvmStatic - fun removeClaim(wrapper: WorldGuardWrapper, guildClaim: GuildClaim, guild: Guild) { - for (world in Bukkit.getWorlds()) { - for (claim in findRegionClaims(wrapper, guild)) { - if (guildClaim.region.get().id == claim.get().id) { - guildClaim.region.get().id?.let { wrapper.removeRegion(world, it) } - } - } - } - } - - @JvmStatic - fun getClaim(wrapper: WorldGuardWrapper, player: Player, name: String, guild: Guild): GuildClaim { - return getGuildClaimFromRegion(wrapper.getRegion(player.world, name), guild)!! - } - - @JvmStatic - fun addOwner(claim: GuildClaim, guild: Guild) { - claim.region.get().owners.addPlayer(guild.guildMaster.uuid) - } - - @JvmStatic - fun removeOwner(claim: GuildClaim, player: Player) { - claim.region.get().owners.removePlayer(player.uniqueId) - } - - @JvmStatic - fun getMembers(claim: GuildClaim): IWrappedDomain { - return claim.region.get().members - } - - @JvmStatic - fun addMembers(claim: GuildClaim, guild: Guild) { - guild.members.forEach { - getMembers(claim).addPlayer(it.uuid) - } - } - - @JvmStatic - fun addMember(claim: GuildClaim, player: Player) { - getMembers(claim).addPlayer(player.uniqueId) - } - - @JvmStatic - fun removeMember(claim: GuildClaim, player: OfflinePlayer) { - getMembers(claim).removePlayer(player.uniqueId) - } - - @JvmStatic - fun kickMember(playerKicked: OfflinePlayer, playerExecuting: Player, guild: Guild) { - val wrapper = WorldGuardWrapper.getInstance() - for (claim in guild.claimedLand) { - removeMember(claim, playerKicked) - } - } - - @JvmStatic - fun setEnterMessage(wrapper: WorldGuardWrapper, claim: GuildClaim, settingsManager: SettingsManager, guild: Guild) { - claim.region.get().setFlag(wrapper.getFlag("greeting", String::class.java).orElse(null), - StringUtils.color( - settingsManager.getProperty(ClaimSettings.ENTER_MESSAGE).replace("{guild}", guild.name) - .replace("{prefix}", guild.prefix) - ) - ) - } - - @JvmStatic - fun setExitMessage(wrapper: WorldGuardWrapper, claim: GuildClaim, settingsManager: SettingsManager, guild: Guild) { - claim.region.get().setFlag(wrapper.getFlag("farewell", String::class.java).orElse(null), - StringUtils.color( - settingsManager.getProperty(ClaimSettings.EXIT_MESSAGE).replace("{guild}", guild.name) - .replace("{prefix}", guild.prefix) - ) - ) - } - - @JvmStatic - fun checkPvpDisabled(player: Player): Boolean { - val wrapper = WorldGuardWrapper.getInstance() - val flag = wrapper.getFlag("pvp", WrappedState::class.java) - var state = WrappedState.ALLOW - - if (!flag.isPresent) { - return false - } - - val check = flag.map { f -> wrapper.queryFlag(player, player.location, f) } - check.ifPresent { - state = try { - it.get() - } catch (ex: Exception) { - WrappedState.ALLOW - } - } - return state == WrappedState.DENY - } - - @JvmStatic - fun deleteWithGuild(guild: Guild) { - - val wrapper = WorldGuardWrapper.getInstance() - - if (!checkIfHaveClaims(wrapper, guild)) { - return - } - - removeAllClaims(wrapper, guild) - guild.claimedLand.clear() - } } diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt index 05e101613..583c3bbc2 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt @@ -24,14 +24,16 @@ package me.glaremasters.guilds.claim import me.glaremasters.guilds.guild.Guild +import me.glaremasters.guilds.guild.GuildHandler +import org.codemc.worldguardwrapper.WorldGuardWrapper import org.codemc.worldguardwrapper.region.IWrappedRegion import java.util.* +import kotlin.properties.Delegates class GuildClaim ( - @field:Transient var name: String?, - @field:Transient var num: Int, - @field:Transient var guildID: UUID, - @field:Transient var region: Optional) { + @field:Transient var name: String, + @field:Transient var number: Int, + @field:Transient var guildId: UUID) { fun changeName(name: String) { this.name = name @@ -39,61 +41,57 @@ class GuildClaim ( } fun changeNumber(num: Int) { - this.num = num + this.number = num return } - fun changeRegion(region: Optional) { - this.region = region + fun changeGuildId(guildID: UUID) { + this.guildId = guildID return } - fun changeGuildID(guildID: UUID) { - this.guildID = guildID - return + fun getRegion(wrapper: WorldGuardWrapper): IWrappedRegion { + return ClaimUtils.getRegionFromName(wrapper, name)!! + } + + fun getGuild(guildHandler: GuildHandler): Guild { + return guildHandler.getGuild(guildId) } override fun toString(): String { - return "GuildClaim(name=" + name + ", num=" + num + ", region=" + region?.get()?.id + ", guildID=" + guildID + ")" + return "GuildClaim(name=$name, number=$number, guildId=$guildId)" } class GuildClaimBuilder internal constructor() { - private var name: String? = null - private var num = 0 - private lateinit var guildID: UUID - private lateinit var region: Optional + private lateinit var name: String + private var number by Delegates.notNull() + private lateinit var guildId: UUID - fun name(name: String?): GuildClaimBuilder { + fun name(name: String): GuildClaimBuilder { this.name = name return this } - fun num(num: Int): GuildClaimBuilder { - this.num = num - return this - } - - fun region(region: Optional): GuildClaimBuilder { - this.region = region + fun number(number: Int): GuildClaimBuilder { + this.number = number return this } - fun guildID(guildID: UUID): GuildClaimBuilder { - this.guildID = guildID + fun guildId(guildId: UUID): GuildClaimBuilder { + this.guildId = guildId return this } fun build(): GuildClaim { return GuildClaim( name, - num, - guildID, - region + number, + guildId ) } override fun toString(): String { - return "GuildClaim.GuildClaimBuilder(name=" + name + ", num=" + num + ", region=" + region.get().id + ", guildID=" + guildID + ")" + return "GuildClaim.GuildClaimBuilder(name=$name, number=$number, guildId=$guildId)" } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt index 8043c7ce7..c6e4af623 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt @@ -27,16 +27,10 @@ package me.glaremasters.guilds.commands.admin.claims import ch.jalu.configme.SettingsManager import co.aikar.commands.ACFBukkitUtil import co.aikar.commands.BaseCommand -import co.aikar.commands.annotation.CommandAlias -import co.aikar.commands.annotation.CommandCompletion -import co.aikar.commands.annotation.CommandPermission -import co.aikar.commands.annotation.Dependency -import co.aikar.commands.annotation.Description -import co.aikar.commands.annotation.Flags -import co.aikar.commands.annotation.Subcommand -import co.aikar.commands.annotation.Syntax -import co.aikar.commands.annotation.Values +import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler @@ -72,14 +66,13 @@ internal class CommandAdminClaim : BaseCommand() { throw ExpectationNotMet(Messages.CLAIM__OVERLAP) } - val claim = ClaimUtils.createClaim(wrapper, guild, player) + val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) guild.addGuildClaim(claim) - - ClaimUtils.addOwner(claim, guild) - ClaimUtils.addMembers(claim, guild) - ClaimUtils.setEnterMessage(wrapper, claim, settingsManager, guild) - ClaimUtils.setExitMessage(wrapper, claim, settingsManager, guild) + ClaimPermissions.addOwner(wrapper, claim, guild) + ClaimPermissions.addMembers(wrapper, claim, guild) + ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), @@ -89,9 +82,9 @@ internal class CommandAdminClaim : BaseCommand() { @Subcommand("admin unclaim") @Description("{@@descriptions.admin-unclaim}") @CommandPermission(Constants.ADMIN_PERM) - @CommandCompletion("@guilds") - @Syntax("<%syntax>") - fun unclaim(player: Player, @Flags("other") @Values("@guilds") guild: Guild) { + @CommandCompletion("@guilds @claimed") + @Syntax("<%syntax> ") + fun unclaim(player: Player, @Flags("other") @Values("@guilds") guild: Guild, @Values("@claimed") @Single option: String) { if (!ClaimUtils.isEnable(settingsManager)) { throw ExpectationNotMet(Messages.CLAIM__HOOK_DISABLED) } @@ -102,11 +95,19 @@ internal class CommandAdminClaim : BaseCommand() { throw (ExpectationNotMet(Messages.UNCLAIM__NOT_FOUND)) } - if (ClaimUtils.checkOverlap(wrapper, player)) { - val claim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) - if (claim != null) { - ClaimUtils.removeClaim(wrapper, claim, guild) - guild.removeGuildClaim(claim) + when (option) { + "all" -> { + ClaimRegionHandler.removeAllClaims(wrapper, guild) + guild.clearGuildClaims() + } + "this" -> { + if (ClaimUtils.checkOverlap(wrapper, player)) { + val standingClaim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) + if (standingClaim != null) { + ClaimRegionHandler.removeClaim(wrapper, standingClaim) + guild.removeGuildClaim(standingClaim) + } + } } } currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt index f87b63122..f909afdd2 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt @@ -40,6 +40,7 @@ import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildRemoveEvent +import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages @@ -48,6 +49,7 @@ import me.glaremasters.guilds.utils.Constants import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper @CommandAlias("%guilds") internal class CommandAdminRemove : BaseCommand() { @@ -70,6 +72,7 @@ internal class CommandAdminRemove : BaseCommand() { actionHandler.addAction(player, object : ConfirmAction { override fun accept() { val event = GuildRemoveEvent(player, guild, GuildRemoveEvent.Cause.ADMIN_DELETED) + Bukkit.getPluginManager().callEvent(event) if (event.isCancelled) { @@ -79,9 +82,13 @@ internal class CommandAdminRemove : BaseCommand() { guildHandler.removeGuildPermsFromAll(permission, guild) guildHandler.removeAlliesOnDelete(guild) guildHandler.notifyAllies(guild, guilds.commandManager) + if (ClaimUtils.isEnable(settingsManager)) { - ClaimUtils.deleteWithGuild(guild) + val wrapper = WorldGuardWrapper.getInstance() + + ClaimRegionHandler.deleteWithGuild(wrapper, guild) } + guild.sendMessage(currentCommandManager, Messages.LEAVE__GUILDMASTER_LEFT, "{player}", guild.guildMaster.name) guildHandler.removeGuild(guild) currentCommandIssuer.sendInfo(Messages.ADMIN__DELETE_SUCCESS, "{guild}", name) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt index 44bdc2ebd..c3a59e76e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt @@ -37,6 +37,8 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler @@ -44,6 +46,7 @@ import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.utils.Constants import org.bukkit.Bukkit import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper @CommandAlias("%guilds") internal class CommandAdminTransfer : BaseCommand() { @@ -63,6 +66,14 @@ internal class CommandAdminTransfer : BaseCommand() { throw ExpectationNotMet(Messages.ERROR__TRANSFER_SAME_PERSON) } + if (ClaimUtils.isEnable(settingsManager)) { + val wrapper = WorldGuardWrapper.getInstance() + + for (claim in guild.claimedLand) { + ClaimPermissions.transferOwner(wrapper, claim, guild) + } + } + guild.transferGuildAdmin(transfer, guildHandler) currentCommandIssuer.sendInfo(Messages.TRANSFER__SUCCESS) } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt index 1d57c3dd0..560cb1801 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt @@ -24,6 +24,7 @@ package me.glaremasters.guilds.commands.admin.member +import ch.jalu.configme.SettingsManager import co.aikar.commands.BaseCommand import co.aikar.commands.CommandIssuer import co.aikar.commands.annotation.CommandAlias @@ -36,17 +37,21 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.utils.Constants import org.bukkit.Bukkit +import org.codemc.worldguardwrapper.WorldGuardWrapper @CommandAlias("%guilds") internal class CommandAdminAddPlayer : BaseCommand() { @Dependency lateinit var guilds: Guilds @Dependency lateinit var guildHandler: GuildHandler + @Dependency lateinit var settingsManager: SettingsManager @Subcommand("admin addplayer") @Description("{@@descriptions.admin-addplayer}") @@ -72,6 +77,14 @@ internal class CommandAdminAddPlayer : BaseCommand() { currentCommandManager.getCommandIssuer(user).sendInfo(Messages.ADMIN__PLAYER_ADDED, "{guild}", name) } + if (ClaimUtils.isEnable(settingsManager)) { + val wrapper = WorldGuardWrapper.getInstance() + + for (claim in guild.claimedLand) { + ClaimPermissions.addMember(wrapper, claim, user.uniqueId) + } + } + currentCommandIssuer.sendInfo(Messages.ADMIN__ADMIN_PLAYER_ADDED, "{player}", user.name, "{guild}", name) guild.sendMessage(currentCommandManager, Messages.ADMIN__ADMIN_GUILD_ADD, "{player}", user.name) } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt index b739cbbda..1382d479e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt @@ -34,6 +34,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildKickEvent +import me.glaremasters.guilds.claim.ClaimPermissions import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages @@ -41,6 +42,7 @@ import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import org.bukkit.Bukkit import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper // todo Fix the logic on this because what if you force remove the guild master? @CommandAlias("%guilds") @@ -64,7 +66,11 @@ internal class CommandAdminRemovePlayer : BaseCommand() { } if (ClaimUtils.isEnable(settingsManager)) { - ClaimUtils.kickMember(user, player, guild) + val wrapper = WorldGuardWrapper.getInstance() + + for (claim in guild.claimedLand) { + ClaimPermissions.kickMember(wrapper, claim, user) + } } guild.removeMember(user) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt index c189bfe1e..0c897dd6c 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt @@ -27,14 +27,10 @@ package me.glaremasters.guilds.commands.claims import ch.jalu.configme.SettingsManager import co.aikar.commands.ACFBukkitUtil import co.aikar.commands.BaseCommand -import co.aikar.commands.annotation.CommandAlias -import co.aikar.commands.annotation.CommandPermission -import co.aikar.commands.annotation.Conditions -import co.aikar.commands.annotation.Dependency -import co.aikar.commands.annotation.Description -import co.aikar.commands.annotation.Subcommand -import co.aikar.commands.annotation.Syntax +import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild @@ -81,13 +77,13 @@ internal class CommandClaim : BaseCommand() { throw ExpectationNotMet(Messages.CLAIM__OVERLAP) } - val claim = ClaimUtils.createClaim(wrapper, guild, player) + val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) guild.addGuildClaim(claim) - ClaimUtils.addOwner(claim, guild) - ClaimUtils.addMembers(claim, guild) - ClaimUtils.setEnterMessage(wrapper, claim, settingsManager, guild) - ClaimUtils.setExitMessage(wrapper, claim, settingsManager, guild) + ClaimPermissions.addOwner(wrapper, claim, guild) + ClaimPermissions.addMembers(wrapper, claim, guild) + ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), @@ -97,8 +93,9 @@ internal class CommandClaim : BaseCommand() { @Subcommand("unclaim") @Description("{@@descriptions.unclaim}") @CommandPermission(Constants.BASE_PERM + "unclaim") - @Syntax("") - fun unclaim(player: Player, @Conditions("perm:perm=UNCLAIM_LAND") guild: Guild) { + @CommandCompletion("@claimed") + @Syntax("") + fun unclaim(player: Player, @Conditions("perm:perm=UNCLAIM_LAND") guild: Guild, @Values("@claimed") @Single option: String) { if (!ClaimUtils.isEnable(settingsManager)) { throw ExpectationNotMet(Messages.CLAIM__HOOK_DISABLED) } @@ -117,11 +114,19 @@ internal class CommandClaim : BaseCommand() { throw ExpectationNotMet(Messages.UNCLAIM__NOT_FOUND) } - if (ClaimUtils.checkOverlap(wrapper, player)) { - val claim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) - if (claim != null) { - ClaimUtils.removeClaim(wrapper, claim, guild) - guild.removeGuildClaim(claim) + when (option) { + "all" -> { + ClaimRegionHandler.removeAllClaims(wrapper, guild) + guild.clearGuildClaims() + } + "this" -> { + if (ClaimUtils.checkOverlap(wrapper, player)) { + val standingClaim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) + if (standingClaim != null) { + ClaimRegionHandler.removeClaim(wrapper, standingClaim) + guild.removeGuildClaim(standingClaim) + } + } } } currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt b/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt index da34bca1e..c25da8373 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/console/CommandConsole.kt @@ -40,6 +40,7 @@ import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.arena.ArenaHandler import me.glaremasters.guilds.challenges.ChallengeHandler +import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.cooldowns.CooldownHandler import me.glaremasters.guilds.database.DatabaseBackend import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -157,10 +158,8 @@ internal class CommandConsole : BaseCommand() { actionHandler.addAction(issuer.getIssuer(), object : ConfirmAction { override fun accept() { val wrapper = WorldGuardWrapper.getInstance() - guildHandler.guilds.forEach { guild -> - for (claim in ClaimUtils.findRegionClaims(wrapper, guild)) { - ClaimUtils.removeAllClaims(wrapper, guild) - } + for (guild in guildHandler.guilds) { + ClaimRegionHandler.removeAllClaims(wrapper, guild) } currentCommandIssuer.sendInfo(Messages.UNCLAIM__ALL_SUCCESS) } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt index 3c9f2ee43..92d931589 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt @@ -37,6 +37,7 @@ import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildRemoveEvent +import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages @@ -45,6 +46,7 @@ import me.glaremasters.guilds.utils.Constants import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper @CommandAlias("%guilds") internal class CommandDelete : BaseCommand() { @@ -80,7 +82,9 @@ internal class CommandDelete : BaseCommand() { guildHandler.notifyAllies(guild, guilds.commandManager) guild.sendMessage(currentCommandManager, Messages.LEAVE__GUILDMASTER_LEFT, "{player}", player.name) if (ClaimUtils.isEnable(settingsManager)) { - ClaimUtils.deleteWithGuild(guild) + val wrapper = WorldGuardWrapper.getInstance() + + ClaimRegionHandler.deleteWithGuild(wrapper, guild) } guildHandler.removeGuild(guild) currentCommandIssuer.sendInfo(Messages.DELETE__SUCCESSFUL, "{guild}", guild.name) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt index 055a444c3..c3f7473bc 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt @@ -39,6 +39,7 @@ import co.aikar.commands.annotation.Values import java.util.concurrent.TimeUnit import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildKickEvent +import me.glaremasters.guilds.claim.ClaimPermissions import me.glaremasters.guilds.configuration.sections.CooldownSettings import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler @@ -53,6 +54,7 @@ import me.glaremasters.guilds.utils.RoleUtils import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper @CommandAlias("%guilds") internal class CommandKick : BaseCommand() { @@ -93,9 +95,15 @@ internal class CommandKick : BaseCommand() { guildHandler.removeGuildPerms(permission, user) cooldownHandler.addCooldown(user, Cooldown.Type.Join.name, settingsManager.getProperty(CooldownSettings.JOIN), TimeUnit.SECONDS) + if (ClaimUtils.isEnable(settingsManager)) { - ClaimUtils.kickMember(user, player, guild) + val wrapper = WorldGuardWrapper.getInstance() + + for (claim in guild.claimedLand) { + ClaimPermissions.kickMember(wrapper, claim, player) + } } + guild.removeMember(asMember) currentCommandIssuer.sendInfo(Messages.BOOT__SUCCESSFUL, "{player}", user.name) guild.sendMessage(currentCommandManager, Messages.BOOT__PLAYER_KICKED, "{player}", user.name, "{kicker}", player.name) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt index 01a70894f..92b05ce1c 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt @@ -35,6 +35,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildRenameEvent +import me.glaremasters.guilds.claim.ClaimPermissions import me.glaremasters.guilds.configuration.sections.CostSettings import me.glaremasters.guilds.configuration.sections.GuildSettings import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -95,10 +96,11 @@ internal class CommandRename : BaseCommand() { if (ClaimUtils.isEnable(settingsManager)) { val wrapper = WorldGuardWrapper.getInstance() + if (ClaimUtils.checkIfHaveClaims(wrapper, guild)) { for (claim in guild.claimedLand) { - ClaimUtils.setEnterMessage(wrapper, claim, settingsManager, guild) - ClaimUtils.setExitMessage(wrapper, claim, settingsManager, guild) + ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) } } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt index 5e5b23516..2263a0e57 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt @@ -38,6 +38,8 @@ import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildTransferEvent +import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler @@ -45,6 +47,7 @@ import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.utils.Constants import org.bukkit.Bukkit import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper @CommandAlias("%guilds") internal class CommandTransfer : BaseCommand() { @@ -62,6 +65,7 @@ internal class CommandTransfer : BaseCommand() { @Syntax("") fun transfer(player: Player, @Conditions("perm:perm=TRANSFER_GUILD") guild: Guild, @Values("@members") @Single target: String) { val user = Bukkit.getOfflinePlayer(target) + val wrapper = WorldGuardWrapper.getInstance(); if (guild.guildMaster.uuid == user.uniqueId) { throw ExpectationNotMet(Messages.ERROR__TRANSFER_SAME_PERSON) @@ -78,6 +82,12 @@ internal class CommandTransfer : BaseCommand() { return } + if (ClaimUtils.isEnable(settingsManager)) { + for (claim in guild.claimedLand) { + ClaimPermissions.transferOwner(wrapper, claim, guild) + } + } + guild.transferGuild(player, user) currentCommandIssuer.sendInfo(Messages.TRANSFER__SUCCESS) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt index 1d7228050..9ab97748a 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt @@ -37,6 +37,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildJoinEvent +import me.glaremasters.guilds.claim.ClaimPermissions import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -96,8 +97,9 @@ internal class CommandAccept : BaseCommand() { if (ClaimUtils.isEnable(settingsManager)) { val wrapper = WorldGuardWrapper.getInstance() + for (claim in guild.claimedLand) { - ClaimUtils.addMember(claim, player) + ClaimPermissions.addMember(wrapper, claim, player) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt index 2d78aa2e2..e35ddefa6 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt @@ -39,6 +39,8 @@ import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildLeaveEvent import me.glaremasters.guilds.api.events.GuildRemoveEvent +import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.configuration.sections.CooldownSettings import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler @@ -102,17 +104,23 @@ internal class CommandLeave : BaseCommand() { guildHandler.removeAlliesOnDelete(guild) guildHandler.notifyAllies(guild, guilds.commandManager) cooldownHandler.addCooldown(player, cooldownName, cooldownTime, TimeUnit.SECONDS) + if (ClaimUtils.isEnable(settingsManager)) { - ClaimUtils.deleteWithGuild(guild) + val wrapper = WorldGuardWrapper.getInstance() + + ClaimRegionHandler.deleteWithGuild(wrapper, guild) } + guildHandler.removeGuild(guild) } else { guildHandler.removeGuildPerms(permission, player) cooldownHandler.addCooldown(player, cooldownName, cooldownTime, TimeUnit.SECONDS) if (ClaimUtils.isEnable(settingsManager)) { + val wrapper = WorldGuardWrapper.getInstance() + for (claim in guild.claimedLand) { - ClaimUtils.removeMember(claim, player) + ClaimPermissions.removeMember(wrapper, claim, player) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/placeholders/PlaceholderAPI.kt b/src/main/kotlin/me/glaremasters/guilds/placeholders/PlaceholderAPI.kt index 1403cd93e..61d8fbe7a 100644 --- a/src/main/kotlin/me/glaremasters/guilds/placeholders/PlaceholderAPI.kt +++ b/src/main/kotlin/me/glaremasters/guilds/placeholders/PlaceholderAPI.kt @@ -71,6 +71,7 @@ class PlaceholderAPI(private val guildHandler: GuildHandler) : PlaceholderExpans "role" -> guild.getMember(player.uniqueId).role.name "tier" -> guild.tier.level.toString() "tier_name" -> guild.tier.name + "claimed_land_count" -> guild.claimedLand.size.toString() "balance" -> EconomyUtils.format(guild.balance) "balance_raw" -> guild.balance.toString() "code_amount" -> guild.codes.size.toString() From 16d1bd088a367e5a8987a58b4cb9d777f88c9b95 Mon Sep 17 00:00:00 2001 From: VQ9 Date: Tue, 31 Aug 2021 21:42:51 +0100 Subject: [PATCH 03/10] Oops --- .../glaremasters/guilds/commands/management/CommandTransfer.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt index 2263a0e57..9c2313a4e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt @@ -65,7 +65,6 @@ internal class CommandTransfer : BaseCommand() { @Syntax("") fun transfer(player: Player, @Conditions("perm:perm=TRANSFER_GUILD") guild: Guild, @Values("@members") @Single target: String) { val user = Bukkit.getOfflinePlayer(target) - val wrapper = WorldGuardWrapper.getInstance(); if (guild.guildMaster.uuid == user.uniqueId) { throw ExpectationNotMet(Messages.ERROR__TRANSFER_SAME_PERSON) @@ -83,6 +82,8 @@ internal class CommandTransfer : BaseCommand() { } if (ClaimUtils.isEnable(settingsManager)) { + val wrapper = WorldGuardWrapper.getInstance(); + for (claim in guild.claimedLand) { ClaimPermissions.transferOwner(wrapper, claim, guild) } From 8d65292a54dc6adb0f8d1e81687636fc92cae96a Mon Sep 17 00:00:00 2001 From: VQ9 Date: Wed, 1 Sep 2021 10:46:26 +0100 Subject: [PATCH 04/10] More Fixes --- .../me/glaremasters/guilds/guild/Guild.java | 10 ++- .../guilds/claim/ClaimRegionHandler.kt | 32 ++++---- .../glaremasters/guilds/claim/ClaimUtils.kt | 73 +++++++++++-------- .../glaremasters/guilds/claim/GuildClaim.kt | 32 ++------ .../guilds/commands/claims/CommandClaim.kt | 1 + 5 files changed, 72 insertions(+), 76 deletions(-) diff --git a/src/main/java/me/glaremasters/guilds/guild/Guild.java b/src/main/java/me/glaremasters/guilds/guild/Guild.java index 361b18fad..3fab316f9 100644 --- a/src/main/java/me/glaremasters/guilds/guild/Guild.java +++ b/src/main/java/me/glaremasters/guilds/guild/Guild.java @@ -152,8 +152,6 @@ public long getCreationDate() { public void setClaimedLand(List newClaimedLand) { this.claimedLand = newClaimedLand; } - public List getClaimedLand() { return claimedLand; } - public enum Status { Public("Public"), Private("Private"); @@ -574,6 +572,7 @@ public boolean memberHasPermission(Player player, GuildRolePerm perm) { * @param claim the claim to add */ public void addGuildClaim(GuildClaim claim) { + System.out.println(claim); claimedLand.add(claim); } @@ -699,6 +698,13 @@ public long getLastDefended() { return lastDefended; } + public List getClaimedLand() { + if (this.claimedLand == null) { + this.claimedLand = new ArrayList<>(); + } + return this.claimedLand; + } + public static class GuildBuilder { private UUID id; private String name; diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt index 896c7a1ca..a9abf3287 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt @@ -28,43 +28,39 @@ import org.bukkit.Bukkit import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper import org.codemc.worldguardwrapper.selection.ICuboidSelection +import java.util.* object ClaimRegionHandler { @JvmStatic fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, player: Player): GuildClaim { - ClaimUtils.getNextAvailableClaimName(guild).also { - wrapper.addCuboidRegion(it, ClaimUtils.claimPointOne(player), ClaimUtils.claimPointTwo(player)) - return GuildClaim.builder().guildId(guild.id).number(ClaimUtils.getNumFromName(it)).name(it).build() - } + val name = ClaimUtils.getNextAvailableClaimName() + wrapper.addCuboidRegion(name.toString(), ClaimUtils.claimPointOne(player), ClaimUtils.claimPointTwo(player)) + println(GuildClaim.builder().name(name).guildId(guild.id).build()) + return GuildClaim.builder().name(name).guildId(guild.id).build() } @JvmStatic fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, selection: ICuboidSelection): GuildClaim { - ClaimUtils.getNextAvailableClaimName(guild).also { - wrapper.addCuboidRegion(it, selection.minimumPoint, selection.maximumPoint) - return GuildClaim.builder().guildId(guild.id).number(ClaimUtils.getNumFromName(it)).name(it).build() - } - } + val name = ClaimUtils.getNextAvailableClaimName() + + wrapper.addCuboidRegion(name.toString(), selection.minimumPoint, selection.maximumPoint) + return GuildClaim.builder().name(name).guildId(guild.id).build() - @JvmStatic - fun removeClaim(wrapper: WorldGuardWrapper, num: Int, guild: Guild) { - for (world in Bukkit.getWorlds()) { - wrapper.removeRegion(world, ClaimUtils.getClaimNameFormat(guild, num)) - } } + @JvmStatic - fun removeClaim(wrapper: WorldGuardWrapper, name: String) { + fun removeClaim(wrapper: WorldGuardWrapper, name: UUID) { for (world in Bukkit.getWorlds()) { - wrapper.removeRegion(world, name) + wrapper.removeRegion(world, name.toString()) } } @JvmStatic fun removeClaim(wrapper: WorldGuardWrapper, claim: GuildClaim) { for (world in Bukkit.getWorlds()) { - wrapper.removeRegion(world, claim.getRegion(wrapper).id) + wrapper.removeRegion(world, claim.name.toString()) } } @@ -72,7 +68,7 @@ object ClaimRegionHandler { fun removeAllClaims(wrapper: WorldGuardWrapper, guild: Guild) { for (world in Bukkit.getWorlds()) { for (claim in guild.claimedLand) { - wrapper.removeRegion(world, claim.getRegion(wrapper).id) + wrapper.removeRegion(world, claim.name.toString()) } } } diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index 64fdab55a..cd8359537 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -24,7 +24,6 @@ package me.glaremasters.guilds.claim import ch.jalu.configme.SettingsManager -import java.util.Optional import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.configuration.sections.HooksSettings import me.glaremasters.guilds.guild.Guild @@ -35,6 +34,7 @@ import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper import org.codemc.worldguardwrapper.region.IWrappedRegion import org.codemc.worldguardwrapper.selection.ICuboidSelection +import java.util.* /** * Created by Glare @@ -61,25 +61,18 @@ object ClaimUtils { } @JvmStatic - fun getNextAvailableClaimName(guild: Guild): String { - val num = getClaimAmount(guild) + 1 - return "${guild.id}-${num}" + fun getNextAvailableClaimName(): UUID { + return UUID.randomUUID() //return guild.id.toString() } - @JvmStatic - fun getNumFromName(name: String): Int { - return name.substringAfterLast("-").toInt() - } - - @JvmStatic - fun getClaimNameFormat(guild: Guild, int: Int): String { - return "${guild.id}-${int}" - } - @JvmStatic fun getClaimAmount(guild: Guild): Int { - return guild.claimedLand.size + return if (!guild.claimedLand.isNullOrEmpty()) { + guild.claimedLand.size + } else { + 0 + } } @JvmStatic @@ -113,27 +106,27 @@ object ClaimUtils { } - @JvmStatic - fun findRegionClaims(wrapper: WorldGuardWrapper, world: World, guild: Guild): List> { - val claims = mutableListOf>() - for (claim in guild.claimedLand) { - val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.number)) - try { - tempRegion.get().id - claims.add(tempRegion) - } catch (ex: Exception) { - continue - } - } - return claims - } +// @JvmStatic +// fun findRegionClaims(wrapper: WorldGuardWrapper, world: World, guild: Guild): List> { +// val claims = mutableListOf>() +// for (claim in guild.claimedLand) { +// val tempRegion = wrapper.getRegion(world, claim.name.toString()) +// try { +// tempRegion.get().id +// claims.add(tempRegion) +// } catch (ex: Exception) { +// continue +// } +// } +// return claims +// } @JvmStatic fun findRegionClaims(wrapper: WorldGuardWrapper, guild: Guild): List> { val claims = mutableListOf>() for (world in Bukkit.getWorlds()) { for (claim in guild.claimedLand) { - val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, claim.number)) + val tempRegion = wrapper.getRegion(world, claim.name.toString()) try { tempRegion.get().id claims.add(tempRegion) @@ -165,6 +158,20 @@ object ClaimUtils { return null } + @JvmStatic + fun getRegionFromName(wrapper: WorldGuardWrapper, name: UUID): IWrappedRegion? { + for (world in Bukkit.getWorlds()) { + val tempRegion = wrapper.getRegion(world, name.toString()) + return try { + tempRegion.get().id + tempRegion.get() + } catch (ex: Exception) { + null + } + } + return null + } + @JvmStatic fun getRegionFromName(wrapper: WorldGuardWrapper, name: String): IWrappedRegion? { for (world in Bukkit.getWorlds()) { @@ -207,7 +214,11 @@ object ClaimUtils { @JvmStatic fun checkMaxAlreadyExist(wrapper: WorldGuardWrapper, guild: Guild): Boolean { - return guild.claimedLand.size >= 10 + return if (!guild.claimedLand.isNullOrEmpty()) { + guild.claimedLand.size >= 10 + } else { + false + } // for (world in Bukkit.getWorlds()) { // val tempRegion = wrapper.getRegion(world, getClaimNameFormat(guild, guild.tier.claimableLand)) // try { diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt index 583c3bbc2..5f69efb15 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt @@ -30,21 +30,13 @@ import org.codemc.worldguardwrapper.region.IWrappedRegion import java.util.* import kotlin.properties.Delegates -class GuildClaim ( - @field:Transient var name: String, - @field:Transient var number: Int, - @field:Transient var guildId: UUID) { +class GuildClaim (var name: UUID, var guildId: UUID) { - fun changeName(name: String) { + fun changeName(name: UUID) { this.name = name return } - fun changeNumber(num: Int) { - this.number = num - return - } - fun changeGuildId(guildID: UUID) { this.guildId = guildID return @@ -59,39 +51,29 @@ class GuildClaim ( } override fun toString(): String { - return "GuildClaim(name=$name, number=$number, guildId=$guildId)" + return "GuildClaim(name=$name, guildId=$guildId)" } class GuildClaimBuilder internal constructor() { - private lateinit var name: String - private var number by Delegates.notNull() + private lateinit var name: UUID private lateinit var guildId: UUID - fun name(name: String): GuildClaimBuilder { + fun name(name: UUID): GuildClaimBuilder { this.name = name return this } - fun number(number: Int): GuildClaimBuilder { - this.number = number - return this - } - fun guildId(guildId: UUID): GuildClaimBuilder { this.guildId = guildId return this } fun build(): GuildClaim { - return GuildClaim( - name, - number, - guildId - ) + return GuildClaim( name, guildId) } override fun toString(): String { - return "GuildClaim.GuildClaimBuilder(name=$name, number=$number, guildId=$guildId)" + return "GuildClaim.GuildClaimBuilder(name=$name, guildId=$guildId)" } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt index 0c897dd6c..c383f0c5d 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt @@ -78,6 +78,7 @@ internal class CommandClaim : BaseCommand() { } val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) + println(claim) guild.addGuildClaim(claim) ClaimPermissions.addOwner(wrapper, claim, guild) From f5566629f4124335e71e7f23768bdb8e51c9bbcc Mon Sep 17 00:00:00 2001 From: VQ9 Date: Wed, 1 Sep 2021 11:10:55 +0100 Subject: [PATCH 05/10] /g claim /g unclaim this /g unclaim all Now Function as intended! --- .../me/glaremasters/guilds/guild/Guild.java | 1 - .../guilds/claim/ClaimRegionHandler.kt | 1 - .../glaremasters/guilds/claim/ClaimUtils.kt | 8 +++++--- .../admin/claims/CommandAdminClaim.kt | 19 +++++++++++------- .../guilds/commands/claims/CommandClaim.kt | 20 +++++++++++-------- 5 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/main/java/me/glaremasters/guilds/guild/Guild.java b/src/main/java/me/glaremasters/guilds/guild/Guild.java index 3fab316f9..d96e1d4d1 100644 --- a/src/main/java/me/glaremasters/guilds/guild/Guild.java +++ b/src/main/java/me/glaremasters/guilds/guild/Guild.java @@ -572,7 +572,6 @@ public boolean memberHasPermission(Player player, GuildRolePerm perm) { * @param claim the claim to add */ public void addGuildClaim(GuildClaim claim) { - System.out.println(claim); claimedLand.add(claim); } diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt index a9abf3287..0fc9bb72d 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt @@ -36,7 +36,6 @@ object ClaimRegionHandler { fun createClaim(wrapper: WorldGuardWrapper, guild: Guild, player: Player): GuildClaim { val name = ClaimUtils.getNextAvailableClaimName() wrapper.addCuboidRegion(name.toString(), ClaimUtils.claimPointOne(player), ClaimUtils.claimPointTwo(player)) - println(GuildClaim.builder().name(name).guildId(guild.id).build()) return GuildClaim.builder().name(name).guildId(guild.id).build() } diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index cd8359537..d1d05b366 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -97,9 +97,11 @@ object ClaimUtils { @JvmStatic fun getStandingOnClaim(wrapper: WorldGuardWrapper, player: Player, guild: Guild): GuildClaim? { - for (region in findRegionClaims(wrapper, guild)) { - if (regions(wrapper, player).contains(region.get())) { - return getGuildClaimFromRegion(wrapper, region, guild) + for (claim in guild.claimedLand) { + for (region in regions(wrapper, player)) { + if (region.id.toString().equals(claim.getRegion(wrapper).id.toString())) { + return claim + } } } return null diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt index c6e4af623..577b61269 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt @@ -99,17 +99,22 @@ internal class CommandAdminClaim : BaseCommand() { "all" -> { ClaimRegionHandler.removeAllClaims(wrapper, guild) guild.clearGuildClaims() + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } "this" -> { - if (ClaimUtils.checkOverlap(wrapper, player)) { - val standingClaim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) - if (standingClaim != null) { - ClaimRegionHandler.removeClaim(wrapper, standingClaim) - guild.removeGuildClaim(standingClaim) - } + val standingClaim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) + if (standingClaim != null) { + ClaimRegionHandler.removeClaim(wrapper, standingClaim) + guild.removeGuildClaim(standingClaim) + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } + else { + currentCommandIssuer.sendInfo(Messages.UNCLAIM__NOT_FOUND) + } + } + else -> { + currentCommandIssuer.sendInfo(Messages.UNCLAIM__NOT_FOUND) } } - currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt index c383f0c5d..71051a574 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt @@ -78,7 +78,6 @@ internal class CommandClaim : BaseCommand() { } val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) - println(claim) guild.addGuildClaim(claim) ClaimPermissions.addOwner(wrapper, claim, guild) @@ -119,17 +118,22 @@ internal class CommandClaim : BaseCommand() { "all" -> { ClaimRegionHandler.removeAllClaims(wrapper, guild) guild.clearGuildClaims() + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } "this" -> { - if (ClaimUtils.checkOverlap(wrapper, player)) { - val standingClaim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) - if (standingClaim != null) { - ClaimRegionHandler.removeClaim(wrapper, standingClaim) - guild.removeGuildClaim(standingClaim) - } + val standingClaim = ClaimUtils.getStandingOnClaim(wrapper, player, guild) + if (standingClaim != null) { + ClaimRegionHandler.removeClaim(wrapper, standingClaim) + guild.removeGuildClaim(standingClaim) + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } + else { + currentCommandIssuer.sendInfo(Messages.UNCLAIM__NOT_FOUND) + } + } + else -> { + currentCommandIssuer.sendInfo(Messages.UNCLAIM__NOT_FOUND) } } - currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } } From 421d0994cc936a9c9b5f608c1678f31aeff051bc Mon Sep 17 00:00:00 2001 From: VQ9 Date: Thu, 2 Sep 2021 14:20:57 +0100 Subject: [PATCH 06/10] /g map Most commands I can think of work! --- build.gradle | 3 +- .../GuildConfigurationBuilder.java | 20 +- .../sections/GuildMapSettings.java | 92 +++++++++ .../configuration/sections/TierSettings.java | 12 ++ .../guilds/guild/GuildHandler.java | 2 +- .../guilds/utils/StringUtils.java | 8 +- .../guilds/claim/ClaimPermissions.kt | 17 +- .../guilds/claim/ClaimProximity.kt | 128 ++++++++++++ .../glaremasters/guilds/claim/ClaimUtils.kt | 2 +- .../admin/manage/CommandAdminTransfer.kt | 2 +- .../guilds/commands/gui/CommandGUI.kt | 21 ++ .../commands/management/CommandTransfer.kt | 2 +- .../me/glaremasters/guilds/guis/GUIHandler.kt | 1 + .../me/glaremasters/guilds/guis/MapGUI.kt | 192 ++++++++++++++++++ 14 files changed, 467 insertions(+), 35 deletions(-) create mode 100644 src/main/java/me/glaremasters/guilds/configuration/sections/GuildMapSettings.java create mode 100644 src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt create mode 100644 src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt diff --git a/build.gradle b/build.gradle index baca993d8..a98d85617 100644 --- a/build.gradle +++ b/build.gradle @@ -109,8 +109,9 @@ dependencies { // Cross-Version Support implementation("com.github.cryptomorin:XSeries:8.3.0") - // Adventure + // Adventure and MiniMessage implementation("net.kyori:adventure-platform-bukkit:4.0.0-SNAPSHOT") + //implementation("net.kyori:adventure-text-minimessage:4.2.0-SNAPSHOT") // GUI Lib implementation("dev.triumphteam:triumph-gui:3.0.3") diff --git a/src/main/java/me/glaremasters/guilds/configuration/GuildConfigurationBuilder.java b/src/main/java/me/glaremasters/guilds/configuration/GuildConfigurationBuilder.java index cddb9f327..f603348a3 100644 --- a/src/main/java/me/glaremasters/guilds/configuration/GuildConfigurationBuilder.java +++ b/src/main/java/me/glaremasters/guilds/configuration/GuildConfigurationBuilder.java @@ -27,23 +27,7 @@ import ch.jalu.configme.configurationdata.ConfigurationData; import ch.jalu.configme.configurationdata.ConfigurationDataBuilder; import me.glaremasters.guilds.conf.GuildBuffSettings; -import me.glaremasters.guilds.configuration.sections.ClaimSettings; -import me.glaremasters.guilds.configuration.sections.CodeSettings; -import me.glaremasters.guilds.configuration.sections.CooldownSettings; -import me.glaremasters.guilds.configuration.sections.CostSettings; -import me.glaremasters.guilds.configuration.sections.GuildInfoMemberSettings; -import me.glaremasters.guilds.configuration.sections.GuildInfoSettings; -import me.glaremasters.guilds.configuration.sections.GuildListSettings; -import me.glaremasters.guilds.configuration.sections.GuildSettings; -import me.glaremasters.guilds.configuration.sections.GuildVaultSettings; -import me.glaremasters.guilds.configuration.sections.HooksSettings; -import me.glaremasters.guilds.configuration.sections.PluginSettings; -import me.glaremasters.guilds.configuration.sections.RoleSettings; -import me.glaremasters.guilds.configuration.sections.StorageSettings; -import me.glaremasters.guilds.configuration.sections.TicketSettings; -import me.glaremasters.guilds.configuration.sections.TierSettings; -import me.glaremasters.guilds.configuration.sections.VaultPickerSettings; -import me.glaremasters.guilds.configuration.sections.WarSettings; +import me.glaremasters.guilds.configuration.sections.*; /** * Created by GlareMasters @@ -57,7 +41,7 @@ private GuildConfigurationBuilder() { public static ConfigurationData buildConfigurationData() { return ConfigurationDataBuilder.createConfiguration( - PluginSettings.class, StorageSettings.class, HooksSettings.class, GuildListSettings.class, + PluginSettings.class, StorageSettings.class, HooksSettings.class, GuildListSettings.class, GuildMapSettings.class, VaultPickerSettings.class, GuildVaultSettings.class, GuildInfoSettings.class, GuildInfoMemberSettings.class, GuildSettings.class, WarSettings.class, CooldownSettings.class, CostSettings.class, diff --git a/src/main/java/me/glaremasters/guilds/configuration/sections/GuildMapSettings.java b/src/main/java/me/glaremasters/guilds/configuration/sections/GuildMapSettings.java new file mode 100644 index 000000000..a7c22e440 --- /dev/null +++ b/src/main/java/me/glaremasters/guilds/configuration/sections/GuildMapSettings.java @@ -0,0 +1,92 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.glaremasters.guilds.configuration.sections; + +import ch.jalu.configme.Comment; +import ch.jalu.configme.SettingsHolder; +import ch.jalu.configme.configurationdata.CommentsConfiguration; +import ch.jalu.configme.properties.Property; + +import java.util.List; + +import static ch.jalu.configme.properties.PropertyInitializer.newListProperty; +import static ch.jalu.configme.properties.PropertyInitializer.newProperty; + +/** + * Created by Glare + * Date: 4/13/2019 + * Time: 8:24 PM + */ +public class GuildMapSettings implements SettingsHolder { + + private static final String LIST_PATH = "guis.guild-map."; + + @Comment("What should the name of the inventory be?") + public static final Property GUILD_MAP_NAME = + newProperty(LIST_PATH + "gui-name", "Area Map"); + + @Comment({"What should the name of the all the items be in the inventory?", + "Currently supports {player} and {guild}."}) + public static final Property GUILD_MAP_ITEM_NAME = + newProperty(LIST_PATH + "guilds-on-map-name", "&f{player}'s Guild"); + + @Comment({"What should the name of the all the items be in the inventory?", + "Currently supports {player} and {guild}."}) + public static final Property GUILD_MAP_CENTER_NAME = + newProperty(LIST_PATH + "center-item-name", "You"); + + @Comment("What should be the default texture url for textures that fail to load in? Refer to the Guild Manage settings to see how to change the texture!") + public static final Property GUILD_MAP_HEAD_DEFAULT_URL = + newProperty(LIST_PATH + "head-default-url", "7a2df315b43583b1896231b77bae1a507dbd7e43ad86c1cfbe3b2b8ef3430e9e"); + + @Comment("What should be the texture url for the point representing the person upon the map?") + public static final Property GUILD_MAP_CENTER_HEAD_DEFAULT_URL = + newProperty(LIST_PATH + "head-center-url", "7a2df315b43583b1896231b77bae1a507dbd7e43ad86c1cfbe3b2b8ef3430e9e"); + + @Comment("Do we want to try to use skull textures or just ignore them and use the one provided?") + public static final Property USE_DEFAULT_TEXTURE = + newProperty(LIST_PATH + "use-default-texture", false); + + @Comment({"You are free to design this to your liking", "This is just an example of all the available placeholders that you can use for the lore!", + "Note: With v3.6.7 and on, you can now use {guild-tier-name} for the name of the tier.", + "Also, from v3.6.7 and on, {guild-status} will now apply from what you set for the guild-info GUI for the status being public or private.", + "In version 3.5.2.2, {guild-challenge-wins} and {guild-challenge-loses} have been added.", + "In version 3.5.3.3, {creation} was added to display the creation date of the guild"}) + public static final Property> GUILD_MAP_ITEM_LORE = + newListProperty(LIST_PATH + "head-lore", "&cName&8: &a{guild-name}", "&cPrefix&8: &a{guild-prefix}", "&cMaster&8: &a{guild-master}", "&cStatus&8: &a{guild-status}", "&cTier&8: &a{guild-tier}", "&cBalance&8: &a{guild-balance}", "&cMember Count&8: &a{guild-member-count}", "&cCreation Date&8: &a{creation}"); + + + private GuildMapSettings() { + } + + @Override + public void registerComments(CommentsConfiguration conf) { + String[] pluginHeader = { + "Use the following website to get available materials: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html", + "This can work across all MC versions and will attempt to use the proper material based on what version of MC you are using." + }; + conf.setComment("guis", pluginHeader); + } +} diff --git a/src/main/java/me/glaremasters/guilds/configuration/sections/TierSettings.java b/src/main/java/me/glaremasters/guilds/configuration/sections/TierSettings.java index eddee5b8e..38c4c0e3f 100644 --- a/src/main/java/me/glaremasters/guilds/configuration/sections/TierSettings.java +++ b/src/main/java/me/glaremasters/guilds/configuration/sections/TierSettings.java @@ -90,6 +90,10 @@ public class TierSettings implements SettingsHolder { public static final Property ONE_BUFFS = newProperty(LIST_PATH + "1.use-buffs", true); + @Comment("How many claims would you like this tier to be able to use?") + public static final Property ONE_CLAIMABLE = + newProperty(LIST_PATH + "1.claimable-land", 1); + @Comment("If you wish to give this tier extra permissions, put them here.") public static final Property> ONE_PERMS = newListProperty(LIST_PATH + "1.permissions", "example.perm.here"); @@ -137,6 +141,10 @@ public class TierSettings implements SettingsHolder { public static final Property TWO_BUFFS = newProperty(LIST_PATH + "2.use-buffs", true); + @Comment("How many claims would you like this tier to be able to use?") + public static final Property TWO_CLAIMABLE = + newProperty(LIST_PATH + "2.claimable-land", 5); + @Comment("If you wish to give this tier extra permissions, put them here.") public static final Property> TWO_PERMS = newListProperty(LIST_PATH + "2.permissions", "example.perm.here"); @@ -184,6 +192,10 @@ public class TierSettings implements SettingsHolder { public static final Property THREE_BUFFS = newProperty(LIST_PATH + "3.use-buffs", true); + @Comment("How many claims would you like this tier to be able to use?") + public static final Property THREE_CLAIMABLE = + newProperty(LIST_PATH + "3.claimable-land", 10); + @Comment("If you wish to give this tier extra permissions, put them here.") public static final Property> THREE_PERMS = newListProperty(LIST_PATH + "3.permissions", "example.perm.here"); diff --git a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java index f2a5c2ba7..81e268f64 100644 --- a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java +++ b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java @@ -172,8 +172,8 @@ private void loadTiers() { .membersToRankup(tierSec.getInt(key + ".members-to-rankup", 5)) .maxAllies(tierSec.getInt(key + ".max-allies", 10)) .useBuffs(tierSec.getBoolean(key + ".use-buffs", true)) + .claimableLand(tierSec.getInt(key + ".claimable-land", 5)) .permissions(tierSec.getStringList(key + ".permissions")) - .claimableLand(tierSec.getInt(key + ".claimableLand", 5)) .build()); } } diff --git a/src/main/java/me/glaremasters/guilds/utils/StringUtils.java b/src/main/java/me/glaremasters/guilds/utils/StringUtils.java index f62c8b3be..b17d4f87c 100644 --- a/src/main/java/me/glaremasters/guilds/utils/StringUtils.java +++ b/src/main/java/me/glaremasters/guilds/utils/StringUtils.java @@ -24,6 +24,8 @@ package me.glaremasters.guilds.utils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.ChatColor; import org.bukkit.plugin.java.JavaPlugin; @@ -45,6 +47,10 @@ public static String color(String input) { return ChatColor.translateAlternateColorCodes('&', input); } + public static Component converter(String input) { + return LegacyComponentSerializer.legacySection().deserialize(input); + } + /** * Get the announcements for the plugin * @return announcements @@ -84,7 +90,7 @@ public static String convert_html(String html) { * here, where in the other one, it grows it. */ - StringBuffer newstr = new StringBuffer(html.length()); + StringBuilder newstr = new StringBuilder(html.length()); boolean saw_backslash = false; diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt index 6256daf65..e301327f7 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt @@ -67,22 +67,17 @@ object ClaimPermissions { region.owners.removePlayer(uuid) } - @JvmStatic - fun clearOwners(wrapper: WorldGuardWrapper, claim: GuildClaim) { - val region = claim.getRegion(wrapper) - region.owners.players.clear() - } @JvmStatic - fun transferOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, guild: Guild) { - clearOwners(wrapper, claim) - addOwner(wrapper, claim, guild) + fun transferOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, playerGive: Player, playerTake: Player) { + removeOwner(wrapper, claim, playerTake) + addOwner(wrapper, claim, playerGive) } @JvmStatic - fun transferOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, player: Player) { - clearOwners(wrapper, claim) - addOwner(wrapper, claim, player) + fun transferOwner(wrapper: WorldGuardWrapper, claim: GuildClaim, playerGive: UUID, playerTake: UUID) { + removeOwner(wrapper, claim, playerTake) + addOwner(wrapper, claim, playerGive) } diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt new file mode 100644 index 000000000..1da3ffa4b --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt @@ -0,0 +1,128 @@ +package me.glaremasters.guilds.claim + +import co.aikar.commands.ACFBukkitUtil +import com.cryptomorin.xseries.XBlock +import com.cryptomorin.xseries.XMaterial +import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.guild.Guild +import org.bukkit.Bukkit +import org.bukkit.Chunk +import org.bukkit.Location +import org.bukkit.Material +import org.bukkit.block.Block +import org.bukkit.block.data.BlockData +import org.bukkit.entity.Player +import org.codemc.worldguardwrapper.WorldGuardWrapper +import org.codemc.worldguardwrapper.region.IWrappedRegion + +object ClaimProximity { + + @JvmStatic + fun getMap(wrapper: WorldGuardWrapper, player: Player, guilds: Guilds): List> { + + val chunkArray = ArrayList>() + val bottomChunk = getBottomChunk(player) + + outer@for (i in 0..4) { + val row = ArrayList() + inner@for (j in 0..8) { + var haveAdded = false + val chunk = getChunkFromBottomCorner(player, bottomChunk, i, j) + + val locBoundOne = getBottomCorner(player, chunk) + val locBoundTwo = getTopCorner(player, chunk) + + val tempRegions = wrapper.getRegions(locBoundOne, locBoundTwo) + + for (tempRegion in tempRegions) { + val claim = ifIsAndGetGuildsRegion(guilds, tempRegion) + if (claim != null) { + row.add(claim) + haveAdded = true + } + } + if (!haveAdded) { + row.add(null) + } + } + chunkArray.add(row) + } + return chunkArray.reversed() + } + + + @JvmStatic + fun ifIsAndGetGuildsRegion(guilds: Guilds, iWrappedRegion: IWrappedRegion): GuildClaim? { + for (guild in guilds.guildHandler.guilds) { + for (claim in guild.claimedLand) { + if (claim.name.toString() == iWrappedRegion.id.toString()) { + return claim + } + } + } + return null + } + + @JvmStatic + fun getBottomChunk(player: Player): Chunk { + + val world = player.world + val chunk = player.location.chunk + val baseX = chunk.x + val baseZ = chunk.z + val rotation = (player.location.yaw + 225) + + return when { + rotation <= 90 -> { + world.getChunkAt(baseX - 4, baseZ + 2) + } + rotation <= 180 -> { + world.getChunkAt(baseX - 2, baseZ - 4) + } + rotation <= 270 -> { + world.getChunkAt(baseX + 4, baseZ - 2) + } + rotation <= 360 -> { + world.getChunkAt(baseX + 2, baseZ + 4) + } + else -> { + world.getChunkAt(baseX - 4, baseZ + 2) + } + } + } + + @JvmStatic + fun getChunkFromBottomCorner(player: Player, chunk: Chunk, x: Int, z: Int):Chunk { + + val rotation = (player.location.yaw + 225) + + return when { + rotation <= 90 -> { + player.world.getChunkAt(chunk.x+z, chunk.z-x) + } + rotation <= 180 -> { + player.world.getChunkAt(chunk.x+x, chunk.z+z) + } + rotation <= 270 -> { + player.world.getChunkAt(chunk.x-z, chunk.z+x) + } + rotation <= 360 -> { + player.world.getChunkAt(chunk.x-x, chunk.z-z) + + } + else -> { + player.world.getChunkAt(chunk.x+z, chunk.z-x) + } + } + } + + @JvmStatic + fun getBottomCorner(player: Player, chunk: Chunk): Location { + return chunk.getBlock(0, player.world.minHeight, 0).location + } + + @JvmStatic + fun getTopCorner(player: Player, chunk: Chunk): Location { + return chunk.getBlock(15, player.world.maxHeight, 15).location + } +} \ No newline at end of file diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index d1d05b366..a182a1c77 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -217,7 +217,7 @@ object ClaimUtils { @JvmStatic fun checkMaxAlreadyExist(wrapper: WorldGuardWrapper, guild: Guild): Boolean { return if (!guild.claimedLand.isNullOrEmpty()) { - guild.claimedLand.size >= 10 + guild.claimedLand.size >= guild.tier.claimableLand } else { false } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt index c3a59e76e..661c8496f 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt @@ -70,7 +70,7 @@ internal class CommandAdminTransfer : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() for (claim in guild.claimedLand) { - ClaimPermissions.transferOwner(wrapper, claim, guild) + ClaimPermissions.transferOwner(wrapper, claim, transfer.uniqueId, guild.guildMaster.uuid) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/gui/CommandGUI.kt b/src/main/kotlin/me/glaremasters/guilds/commands/gui/CommandGUI.kt index e8bcaffc2..4cc10140c 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/gui/CommandGUI.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/gui/CommandGUI.kt @@ -24,6 +24,7 @@ package me.glaremasters.guilds.commands.gui +import ch.jalu.configme.SettingsManager import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.CommandAlias import co.aikar.commands.annotation.CommandPermission @@ -34,8 +35,11 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import dev.triumphteam.gui.guis.PaginatedGui import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.claim.ClaimUtils +import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.exceptions.InvalidTierException import me.glaremasters.guilds.guild.Guild +import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.utils.Constants import org.bukkit.entity.Player @@ -43,6 +47,8 @@ import org.bukkit.entity.Player internal class CommandGUI : BaseCommand() { @Dependency lateinit var guilds: Guilds + @Dependency + lateinit var settingsManager: SettingsManager @Subcommand("buff") @Description("{@@descriptions.buff}") @@ -92,4 +98,19 @@ internal class CommandGUI : BaseCommand() { fun vault(player: Player, @Conditions("perm:perm=OPEN_VAULT") guild: Guild) { guilds.guiHandler.vaults.get(guild, player).open(player) } + + @Subcommand("map") + @Description("{@@descriptions.map}") + @Syntax("") + @CommandPermission(Constants.BASE_PERM + "map") fun map(player: Player) { + if (!ClaimUtils.isEnable(settingsManager)) { + throw ExpectationNotMet(Messages.CLAIM__HOOK_DISABLED) + } + + if (ClaimUtils.isInDisabledWorld(player, settingsManager)) { + throw ExpectationNotMet(Messages.CLAIM__HOOK_DISABLED) + } + + guilds.guiHandler.map.get(player).open(player) + } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt index 9c2313a4e..ea097f249 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt @@ -85,7 +85,7 @@ internal class CommandTransfer : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance(); for (claim in guild.claimedLand) { - ClaimPermissions.transferOwner(wrapper, claim, guild) + ClaimPermissions.transferOwner(wrapper, claim, user.uniqueId, guild.guildMaster.uuid) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/guis/GUIHandler.kt b/src/main/kotlin/me/glaremasters/guilds/guis/GUIHandler.kt index 9d5a655b3..6b59fab31 100644 --- a/src/main/kotlin/me/glaremasters/guilds/guis/GUIHandler.kt +++ b/src/main/kotlin/me/glaremasters/guilds/guis/GUIHandler.kt @@ -40,4 +40,5 @@ class GUIHandler(guilds: Guilds, settingsManager: SettingsManager, guildHandler: val info = InfoGUI(guilds, settingsManager, guildHandler, cooldownHandler, commandManager) val members = MembersGUI(guilds, settingsManager, guildHandler) val vaults = VaultGUI(guilds, settingsManager, guildHandler) + val map = MapGUI(guilds, settingsManager, guildHandler) } diff --git a/src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt b/src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt new file mode 100644 index 000000000..28cbd46e1 --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt @@ -0,0 +1,192 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.glaremasters.guilds.guis + +import ch.jalu.configme.SettingsManager +import com.cryptomorin.xseries.SkullUtils +import com.cryptomorin.xseries.XMaterial +import dev.triumphteam.gui.guis.Gui +import dev.triumphteam.gui.guis.GuiItem +import dev.triumphteam.gui.guis.PaginatedGui +import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.claim.ClaimProximity +import me.glaremasters.guilds.configuration.sections.GuildInfoSettings +import me.glaremasters.guilds.configuration.sections.GuildListSettings +import me.glaremasters.guilds.configuration.sections.GuildMapSettings + +import me.glaremasters.guilds.exte.addBackground +import me.glaremasters.guilds.exte.addBottom +import me.glaremasters.guilds.guild.Guild +import me.glaremasters.guilds.guild.GuildHandler +import me.glaremasters.guilds.guild.GuildSkull +import me.glaremasters.guilds.utils.EconomyUtils +import me.glaremasters.guilds.utils.GuiUtils +import me.glaremasters.guilds.utils.ItemBuilder +import me.glaremasters.guilds.utils.StringUtils +import org.bukkit.Material +import org.bukkit.entity.Player +import org.bukkit.inventory.ItemStack +import org.codemc.worldguardwrapper.WorldGuardWrapper +import java.text.SimpleDateFormat + +class MapGUI(private val guilds: Guilds, private val settingsManager: SettingsManager, private val guildHandler: GuildHandler) { + private val items: MutableList + + fun get(player: Player): Gui { + val name = settingsManager.getProperty(GuildMapSettings.GUILD_MAP_NAME) + + val gui = Gui(5, StringUtils.color(name)) + + gui.setDefaultClickAction { event -> + event.isCancelled = true + } + + populateMap(gui, player) + setYouPoint(gui, player) + addBackground(gui) + + return gui + } + + private fun setYouPoint(gui: Gui, player: Player) { + val guild = guildHandler.getGuild(player) + + val defaultUrl = settingsManager.getProperty(GuildMapSettings.GUILD_MAP_CENTER_HEAD_DEFAULT_URL) + val useDefaultUrl = settingsManager.getProperty(GuildMapSettings.USE_DEFAULT_TEXTURE) + val item = if (!useDefaultUrl) SkullUtils.getSkull(player.uniqueId) else GuildSkull(defaultUrl).itemStack + val meta = item.itemMeta + + var name = settingsManager.getProperty(GuildMapSettings.GUILD_MAP_CENTER_NAME) + + name = StringUtils.color(name) + name = name.replace("{player}", if (guild.guildMaster != null) guild.guildMaster.name.toString() else "Master") + name = name.replace("{guild}", guild.name) + + meta?.setDisplayName(name) + meta?.lore = updatedLore(guild, settingsManager.getProperty(GuildMapSettings.GUILD_MAP_ITEM_LORE)) + + item.itemMeta = meta + + val guiItem = GuiItem(item) + + guiItem.setAction { event -> + event.isCancelled = true + guilds.guiHandler.members.get(guild, player).open(event.whoClicked) + } + + gui.setItem(3, 5, guiItem) + } + + private fun populateMap(gui: Gui, player: Player) { + val wrapper = WorldGuardWrapper.getInstance() + + val claims = ClaimProximity.getMap(wrapper, player, guilds) + + + val defaultUrl = settingsManager.getProperty(GuildMapSettings.GUILD_MAP_HEAD_DEFAULT_URL) + val useDefaultUrl = settingsManager.getProperty(GuildMapSettings.USE_DEFAULT_TEXTURE) + + for (i in 0..4) { + for (j in 0..8) { + + val claim = claims[i][j] + + if (claim != null) { + val guild = claim.getGuild(guilds.guildHandler) + + val item = if (!useDefaultUrl) guild.skull else GuildSkull(defaultUrl).itemStack + val meta = item.itemMeta + + var name = settingsManager.getProperty(GuildMapSettings.GUILD_MAP_ITEM_NAME) + + name = StringUtils.color(name) + name = name.replace("{player}", if (guild.guildMaster != null) guild.guildMaster.name.toString() else "Master") + name = name.replace("{guild}", guild.name) + + meta?.setDisplayName(name) + meta?.lore = updatedLore(guild, settingsManager.getProperty(GuildMapSettings.GUILD_MAP_ITEM_LORE)) + + item.itemMeta = meta + + val guiItem = GuiItem(item) + + guiItem.setAction { event -> + event.isCancelled = true + guilds.guiHandler.members.get(guild, player).open(event.whoClicked) + } + + gui.setItem(i+1, j+1, guiItem) + } + else { + val builder = ItemBuilder(XMaterial.GRAY_STAINED_GLASS_PANE.parseItem() ?: ItemStack(Material.GLASS_PANE)) + builder.setName(StringUtils.color("&r")) + val item = GuiItem(builder.build()) + item.setAction { event -> + event.isCancelled = true + } + gui.setItem(i+1, j+1, item) + } + } + } + } + + /** + * Update lore with replacements + * + * @param guild the guild being edited + * @param lore the lore to change + * @return updated lore + */ + private fun updatedLore(guild: Guild, lore: List): List { + val sdf = SimpleDateFormat(settingsManager.getProperty(GuildListSettings.GUI_TIME_FORMAT)) + val status = if (guild.isPrivate) settingsManager.getProperty(GuildInfoSettings.STATUS_PRIVATE) else settingsManager.getProperty(GuildInfoSettings.STATUS_PUBLIC) + + val tier = if (guild.tier != null) guild.tier.level.toString() else "1" + val tierName = if (guild.tier != null) guild.tier.name else "Default" + + val updated: MutableList = ArrayList() + + lore.forEach { line -> + updated.add(StringUtils.color(line + .replace("{guild-name}", guild.name) + .replace("{guild-prefix}", guild.prefix) + .replace("{guild-master}", guild.guildMaster.asOfflinePlayer.name.toString()) + .replace("{guild-status}", status) + .replace("{guild-tier}", tier) + .replace("{guild-balance}", EconomyUtils.format(guild.balance)) + .replace("{guild-member-count}", guild.size.toString()) + .replace("{guild-challenge-wins}", guild.guildScore.wins.toString()) + .replace("{guild-challenge-loses}", guild.guildScore.loses.toString()) + .replace("{creation}", sdf.format(guild.creationDate)) + .replace("{guild-tier-name}", tierName))) + } + + return updated + } + + init { + items = ArrayList() + } +} From 9fe03ee2e79390fe2a33a4bada3bc8c5aa1ffa66 Mon Sep 17 00:00:00 2001 From: VQ9 Date: Thu, 2 Sep 2021 15:23:31 +0100 Subject: [PATCH 07/10] Proximity --- .../configuration/sections/ClaimSettings.java | 8 ++ .../guilds/claim/ClaimProximity.kt | 112 +++++++++++++++--- .../glaremasters/guilds/claim/ClaimUtils.kt | 13 ++ .../admin/claims/CommandAdminClaim.kt | 9 +- .../guilds/commands/claims/CommandClaim.kt | 11 +- .../glaremasters/guilds/messages/Messages.kt | 3 + src/main/resources/languages/en-US.yml | 5 +- 7 files changed, 132 insertions(+), 29 deletions(-) diff --git a/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java b/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java index 7cbfc2178..eb8bc8200 100644 --- a/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java +++ b/src/main/java/me/glaremasters/guilds/configuration/sections/ClaimSettings.java @@ -69,6 +69,14 @@ public class ClaimSettings implements SettingsHolder { public static final Property FORCE_CLAIM_SIGNS = newProperty("claims.force-claim-signs", false); + @Comment({"Would you like to require claims to be made next to other claimed land?"}) + public static final Property CLAIM_ADJACENT = + newProperty("claims.claim-adjacent", true); + + @Comment({"How far would you like claims from different guilds to be apart? e.g as a buffer."}) + public static final Property CLAIM_PROXIMITY = + newProperty("claims.claim-proximity", 5); + private ClaimSettings() { } diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt index 1da3ffa4b..4abbf632e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt @@ -1,16 +1,11 @@ package me.glaremasters.guilds.claim -import co.aikar.commands.ACFBukkitUtil -import com.cryptomorin.xseries.XBlock -import com.cryptomorin.xseries.XMaterial +import ch.jalu.configme.SettingsManager import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.guild.Guild -import org.bukkit.Bukkit import org.bukkit.Chunk import org.bukkit.Location -import org.bukkit.Material -import org.bukkit.block.Block -import org.bukkit.block.data.BlockData import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper import org.codemc.worldguardwrapper.region.IWrappedRegion @@ -35,7 +30,7 @@ object ClaimProximity { val tempRegions = wrapper.getRegions(locBoundOne, locBoundTwo) for (tempRegion in tempRegions) { - val claim = ifIsAndGetGuildsRegion(guilds, tempRegion) + val claim = ClaimUtils.getGuildsRegion(guilds, tempRegion) if (claim != null) { row.add(claim) haveAdded = true @@ -51,17 +46,7 @@ object ClaimProximity { } - @JvmStatic - fun ifIsAndGetGuildsRegion(guilds: Guilds, iWrappedRegion: IWrappedRegion): GuildClaim? { - for (guild in guilds.guildHandler.guilds) { - for (claim in guild.claimedLand) { - if (claim.name.toString() == iWrappedRegion.id.toString()) { - return claim - } - } - } - return null - } + @JvmStatic fun getBottomChunk(player: Player): Chunk { @@ -125,4 +110,93 @@ object ClaimProximity { fun getTopCorner(player: Player, chunk: Chunk): Location { return chunk.getBlock(15, player.world.maxHeight, 15).location } + + + + + + + + + + + @JvmStatic + fun isInProximity(wrapper: WorldGuardWrapper, player: Player, settingsManager: SettingsManager, guild: Guild, guilds: Guilds): Boolean { + + if (settingsManager.getProperty(ClaimSettings.CLAIM_PROXIMITY) <= 0) { + return false + } + else { + val chunk = player.location.chunk + val proximity = settingsManager.getProperty(ClaimSettings.CLAIM_PROXIMITY) + + val bottomChunk = player.world.getChunkAt(chunk.x-proximity, chunk.z-proximity) + val topChunk = player.world.getChunkAt(chunk.x+proximity, chunk.z+proximity) + + val bottomLocation = bottomChunk.getBlock(0, player.world.minHeight, 0).location + val topLocation = topChunk.getBlock(0, player.world.maxHeight, 0).location + + val regions = wrapper.getRegions(bottomLocation, topLocation) + + if (!guild.claimedLand.isNullOrEmpty()) { + return !setContainsOnlyGuildClaims(regions, guild, guilds) + } + else { + return !wrapper.getRegions(bottomLocation, topLocation).isNullOrEmpty() + } + } + } + + @JvmStatic + fun setContainsOnlyGuildClaims(regions: MutableSet, guild: Guild, guilds: Guilds): Boolean { + for (region in regions) { + val claim = ClaimUtils.getGuildsRegion(guilds, region) + if (claim != null) { + if (!claim.getGuild(guilds.guildHandler).equals(guild)) { + return false + } + } else { + return false + } + } + return true + } + + + + + + + + + + @JvmStatic + fun isAdjacent(wrapper: WorldGuardWrapper, player: Player, settingsManager: SettingsManager, guild: Guild): Boolean { + if (settingsManager.getProperty(ClaimSettings.CLAIM_ADJACENT)) { + val chunk = player.location.chunk + + val bottomChunk = player.world.getChunkAt(chunk.x-1, chunk.z-1) + val topChunk = player.world.getChunkAt(chunk.x+1, chunk.z+1) + + val bottomLocation = bottomChunk.getBlock(0, player.world.minHeight, 0).location + val topLocation = topChunk.getBlock(0, player.world.maxHeight, 0).location + + val regions = wrapper.getRegions(bottomLocation, topLocation) + + for (region in regions) { + for (claim in guild.claimedLand) { + if (claim.name.toString().equals(region.id.toString())) { + return true + } + } + } + if (guild.claimedLand.isNullOrEmpty()) { + return true + } + return false + } + else { + return true + } + } } \ No newline at end of file diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index a182a1c77..225ca8ff8 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -24,6 +24,7 @@ package me.glaremasters.guilds.claim import ch.jalu.configme.SettingsManager +import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.configuration.sections.HooksSettings import me.glaremasters.guilds.guild.Guild @@ -232,4 +233,16 @@ object ClaimUtils { // } // return false } + + @JvmStatic + fun getGuildsRegion(guilds: Guilds, iWrappedRegion: IWrappedRegion): GuildClaim? { + for (guild in guilds.guildHandler.guilds) { + for (claim in guild.claimedLand) { + if (claim.name.toString() == iWrappedRegion.id.toString()) { + return claim + } + } + } + return null + } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt index 577b61269..400308ccc 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt @@ -30,6 +30,7 @@ import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimProximity import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild @@ -58,14 +59,6 @@ internal class CommandAdminClaim : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() - if (ClaimUtils.checkMaxAlreadyExist(wrapper, guild)) { - throw ExpectationNotMet(Messages.CLAIM__ALREADY_EXISTS) - } - - if (ClaimUtils.checkOverlap(wrapper, player)) { - throw ExpectationNotMet(Messages.CLAIM__OVERLAP) - } - val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) guild.addGuildClaim(claim) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt index 71051a574..73ec93dac 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt @@ -30,6 +30,7 @@ import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimProximity import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -70,13 +71,21 @@ internal class CommandClaim : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() if (ClaimUtils.checkMaxAlreadyExist(wrapper, guild)) { - throw ExpectationNotMet(Messages.CLAIM__ALREADY_EXISTS) + throw ExpectationNotMet(Messages.CLAIM__TOO_MANY_CLAIMS) } if (ClaimUtils.checkOverlap(wrapper, player)) { throw ExpectationNotMet(Messages.CLAIM__OVERLAP) } + if (ClaimProximity.isInProximity(wrapper, player, settingsManager, guild, guilds)) { + throw ExpectationNotMet(Messages.CLAIM__IS_IN_PROXIMITY) + } + + if (!ClaimProximity.isAdjacent(wrapper, player, settingsManager, guild)) { + throw ExpectationNotMet(Messages.CLAIM__MUST_BE_ADJACENT) + } + val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) guild.addGuildClaim(claim) diff --git a/src/main/kotlin/me/glaremasters/guilds/messages/Messages.kt b/src/main/kotlin/me/glaremasters/guilds/messages/Messages.kt index 90a420542..9f9e7f15a 100644 --- a/src/main/kotlin/me/glaremasters/guilds/messages/Messages.kt +++ b/src/main/kotlin/me/glaremasters/guilds/messages/Messages.kt @@ -185,7 +185,10 @@ enum class Messages : MessageKeyProvider { REQUEST__COOLDOWN, CLAIM__ALREADY_EXISTS, + CLAIM__TOO_MANY_CLAIMS, CLAIM__OVERLAP, + CLAIM__MUST_BE_ADJACENT, + CLAIM__IS_IN_PROXIMITY, CLAIM__SUCCESS, CLAIM__HOOK_DISABLED, CLAIM__SIGN_NO_PERMISSION, diff --git a/src/main/resources/languages/en-US.yml b/src/main/resources/languages/en-US.yml index 138ba4449..4842759f3 100644 --- a/src/main/resources/languages/en-US.yml +++ b/src/main/resources/languages/en-US.yml @@ -244,8 +244,11 @@ accept: successful: "&aYou joined guild '{guild}&r&a' successfully" cooldown: "&cYou are currently on cooldown from joining a guild. Try again in {amount} seconds." claim: - already-exists: "&cYou already have a claim. Please remove your previous claim to create a new one" + already-exists: "&cYou already have a claim. Please remove your previous claim to create a new one." + too-many-claims: "&cYou already have used all your claims. Please remove your previous claims to create new ones." overlap: "&cYour claim could not be created because there is another claim nearby" + must-be-adjacent: "&cYour claim must be adjacent to another one of your claims!" + is-in-proximity: "&cYour claim must not be in proximity to another!" success: "&aNew claim created! It goes from {loc1} to {loc2}!" hook-disabled: "&cPlease enable claims in the config to utilize this feature" sign-not-enabled: "&cThis feature is not enabled. To use it, you must turn it on via the config." From a6e1a657c6735133f3aae1e989feaa526741ecc9 Mon Sep 17 00:00:00 2001 From: VQ9 Date: Thu, 2 Sep 2021 22:02:15 +0100 Subject: [PATCH 08/10] Claim Utils Fix + Reload --- .../java/me/glaremasters/guilds/Guilds.java | 5 +++++ .../glaremasters/guilds/claim/ClaimUtils.kt | 21 +++++++++++++++++++ .../guilds/commands/admin/CommandReload.kt | 5 +++++ 3 files changed, 31 insertions(+) diff --git a/src/main/java/me/glaremasters/guilds/Guilds.java b/src/main/java/me/glaremasters/guilds/Guilds.java index 888f28557..2731682d5 100644 --- a/src/main/java/me/glaremasters/guilds/Guilds.java +++ b/src/main/java/me/glaremasters/guilds/Guilds.java @@ -39,6 +39,7 @@ import me.glaremasters.guilds.api.GuildsAPI; import me.glaremasters.guilds.arena.ArenaHandler; import me.glaremasters.guilds.challenges.ChallengeHandler; +import me.glaremasters.guilds.claim.ClaimUtils; import me.glaremasters.guilds.conf.GuildBuffSettings; import me.glaremasters.guilds.configuration.SettingsHandler; import me.glaremasters.guilds.configuration.sections.HooksSettings; @@ -291,6 +292,10 @@ public void onEnable() { chatListener = new ChatListener(this); + if (ClaimUtils.isEnable(settingsHandler.getMainConf())) { + ClaimUtils.reload(this, settingsHandler.getMainConf()); + } + LoggingUtils.info("Ready to go! That only took " + (System.currentTimeMillis() - startingTime) + "ms"); getServer().getScheduler().scheduleAsyncRepeatingTask(this, () -> { try { diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index 225ca8ff8..e1654c102 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -245,4 +245,25 @@ object ClaimUtils { } return null } + + + + + + + + + + + @JvmStatic + fun reload(guilds: Guilds, settingsManager: SettingsManager) { + val wrapper = WorldGuardWrapper.getInstance() + + for (guild in guilds.guildHandler.guilds) { + for (claim in guild.claimedLand) { + ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) + } + } + } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/CommandReload.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/CommandReload.kt index 7ee8aa017..07402b396 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/CommandReload.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/CommandReload.kt @@ -33,6 +33,7 @@ import co.aikar.commands.annotation.Dependency import co.aikar.commands.annotation.Description import co.aikar.commands.annotation.Subcommand import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.utils.Constants @@ -51,5 +52,9 @@ internal class CommandReload : BaseCommand() { guilds.settingsHandler.buffConf.reload() guilds.acfHandler.loadLang() currentCommandIssuer.sendInfo(Messages.RELOAD__RELOADED) + + if (ClaimUtils.isEnable(settingsManager)) { + ClaimUtils.reload(guilds, settingsManager) + } } } From e42fa03f7cbd113fe9b75cc0f9719101c8fa00ee Mon Sep 17 00:00:00 2001 From: VQ9 Date: Sat, 4 Sep 2021 16:15:05 +0100 Subject: [PATCH 09/10] Better naming and fixing missing description --- .../glaremasters/guilds/guild/GuildHandler.java | 5 ++--- .../guilds/listeners/ClaimSignListener.java | 10 +++++----- .../{ClaimPermissions.kt => ClaimEditor.kt} | 2 +- .../{ClaimProximity.kt => ClaimRelations.kt} | 2 +- .../me/glaremasters/guilds/claim/ClaimUtils.kt | 5 ++--- .../commands/admin/claims/CommandAdminClaim.kt | 11 +++++------ .../admin/manage/CommandAdminTransfer.kt | 4 ++-- .../admin/member/CommandAdminAddPlayer.kt | 4 ++-- .../admin/member/CommandAdminRemovePlayer.kt | 4 ++-- .../guilds/commands/claims/CommandClaim.kt | 16 ++++++++-------- .../guilds/commands/management/CommandKick.kt | 4 ++-- .../guilds/commands/management/CommandRename.kt | 6 +++--- .../commands/management/CommandTransfer.kt | 4 ++-- .../guilds/commands/member/CommandAccept.kt | 4 ++-- .../guilds/commands/member/CommandLeave.kt | 4 ++-- .../kotlin/me/glaremasters/guilds/guis/MapGUI.kt | 7 ++----- src/main/resources/languages/en-US.yml | 1 + 17 files changed, 44 insertions(+), 49 deletions(-) rename src/main/kotlin/me/glaremasters/guilds/claim/{ClaimPermissions.kt => ClaimEditor.kt} (99%) rename src/main/kotlin/me/glaremasters/guilds/claim/{ClaimProximity.kt => ClaimRelations.kt} (99%) diff --git a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java index 81e268f64..e7945441f 100644 --- a/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java +++ b/src/main/java/me/glaremasters/guilds/guild/GuildHandler.java @@ -29,7 +29,7 @@ import co.aikar.commands.ACFUtil; import co.aikar.commands.PaperCommandManager; import me.glaremasters.guilds.Guilds; -import me.glaremasters.guilds.claim.ClaimPermissions; +import me.glaremasters.guilds.claim.ClaimEditor; import me.glaremasters.guilds.claim.GuildClaim; import me.glaremasters.guilds.configuration.sections.GuildSettings; import me.glaremasters.guilds.configuration.sections.GuildVaultSettings; @@ -54,7 +54,6 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.codemc.worldguardwrapper.WorldGuardWrapper; -import org.codemc.worldguardwrapper.region.IWrappedRegion; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -873,7 +872,7 @@ public void handleInvite(PaperCommandManager manager, Player player, Guild guild if (ClaimUtils.isEnable(settingsManager)) { WorldGuardWrapper wrapper = WorldGuardWrapper.getInstance(); for (GuildClaim claim : guild.getClaimedLand()) { - ClaimPermissions.addMember(wrapper, claim, player); + ClaimEditor.addMember(wrapper, claim, player); } } diff --git a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java index e3d44598f..658c504c5 100644 --- a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java +++ b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java @@ -26,7 +26,7 @@ import ch.jalu.configme.SettingsManager; import me.glaremasters.guilds.Guilds; -import me.glaremasters.guilds.claim.ClaimPermissions; +import me.glaremasters.guilds.claim.ClaimEditor; import me.glaremasters.guilds.claim.ClaimRegionHandler; import me.glaremasters.guilds.claim.GuildClaim; import me.glaremasters.guilds.configuration.sections.ClaimSettings; @@ -163,10 +163,10 @@ public void onSignInteract(PlayerInteractEvent event) { GuildClaim claim = ClaimRegionHandler.createClaim(wrapper, guild, selection); guild.addGuildClaim(claim); - ClaimPermissions.addOwner(wrapper, claim, guild); - ClaimPermissions.addMembers(wrapper, claim, guild); - ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild); - ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild); + ClaimEditor.addOwner(wrapper, claim, guild); + ClaimEditor.addMembers(wrapper, claim, guild); + ClaimEditor.setEnterMessage(wrapper, claim, settingsManager, guild); + ClaimEditor.setExitMessage(wrapper, claim, settingsManager, guild); player.getWorld().getBlockAt(block.getLocation()).breakNaturally(); diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimEditor.kt similarity index 99% rename from src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt rename to src/main/kotlin/me/glaremasters/guilds/claim/ClaimEditor.kt index e301327f7..f17bbce66 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimPermissions.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimEditor.kt @@ -34,7 +34,7 @@ import org.codemc.worldguardwrapper.flag.WrappedState import org.codemc.worldguardwrapper.region.IWrappedDomain import java.util.* -object ClaimPermissions { +object ClaimEditor { // Owner handlers @JvmStatic diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRelations.kt similarity index 99% rename from src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt rename to src/main/kotlin/me/glaremasters/guilds/claim/ClaimRelations.kt index 4abbf632e..ef2a208ae 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimProximity.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRelations.kt @@ -10,7 +10,7 @@ import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper import org.codemc.worldguardwrapper.region.IWrappedRegion -object ClaimProximity { +object ClaimRelations { @JvmStatic fun getMap(wrapper: WorldGuardWrapper, player: Player, guilds: Guilds): List> { diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index e1654c102..04d20d24a 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -30,7 +30,6 @@ import me.glaremasters.guilds.configuration.sections.HooksSettings import me.glaremasters.guilds.guild.Guild import org.bukkit.Bukkit import org.bukkit.Location -import org.bukkit.World import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper import org.codemc.worldguardwrapper.region.IWrappedRegion @@ -261,8 +260,8 @@ object ClaimUtils { for (guild in guilds.guildHandler.guilds) { for (claim in guild.claimedLand) { - ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) - ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.setExitMessage(wrapper, claim, settingsManager, guild) } } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt index 400308ccc..666b3f44e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt @@ -29,8 +29,7 @@ import co.aikar.commands.ACFBukkitUtil import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds -import me.glaremasters.guilds.claim.ClaimPermissions -import me.glaremasters.guilds.claim.ClaimProximity +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild @@ -62,10 +61,10 @@ internal class CommandAdminClaim : BaseCommand() { val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) guild.addGuildClaim(claim) - ClaimPermissions.addOwner(wrapper, claim, guild) - ClaimPermissions.addMembers(wrapper, claim, guild) - ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) - ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.addOwner(wrapper, claim, guild) + ClaimEditor.addMembers(wrapper, claim, guild) + ClaimEditor.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.setExitMessage(wrapper, claim, settingsManager, guild) currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt index 661c8496f..6a7392a2e 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminTransfer.kt @@ -37,7 +37,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild @@ -70,7 +70,7 @@ internal class CommandAdminTransfer : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() for (claim in guild.claimedLand) { - ClaimPermissions.transferOwner(wrapper, claim, transfer.uniqueId, guild.guildMaster.uuid) + ClaimEditor.transferOwner(wrapper, claim, transfer.uniqueId, guild.guildMaster.uuid) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt index 560cb1801..1fb29e3ca 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminAddPlayer.kt @@ -37,7 +37,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild @@ -81,7 +81,7 @@ internal class CommandAdminAddPlayer : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() for (claim in guild.claimedLand) { - ClaimPermissions.addMember(wrapper, claim, user.uniqueId) + ClaimEditor.addMember(wrapper, claim, user.uniqueId) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt index 1382d479e..c85660e42 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/member/CommandAdminRemovePlayer.kt @@ -34,7 +34,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildKickEvent -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages @@ -69,7 +69,7 @@ internal class CommandAdminRemovePlayer : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() for (claim in guild.claimedLand) { - ClaimPermissions.kickMember(wrapper, claim, user) + ClaimEditor.kickMember(wrapper, claim, user) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt index 73ec93dac..d15a6176c 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt @@ -29,8 +29,8 @@ import co.aikar.commands.ACFBukkitUtil import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds -import me.glaremasters.guilds.claim.ClaimPermissions -import me.glaremasters.guilds.claim.ClaimProximity +import me.glaremasters.guilds.claim.ClaimEditor +import me.glaremasters.guilds.claim.ClaimRelations import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -78,21 +78,21 @@ internal class CommandClaim : BaseCommand() { throw ExpectationNotMet(Messages.CLAIM__OVERLAP) } - if (ClaimProximity.isInProximity(wrapper, player, settingsManager, guild, guilds)) { + if (ClaimRelations.isInProximity(wrapper, player, settingsManager, guild, guilds)) { throw ExpectationNotMet(Messages.CLAIM__IS_IN_PROXIMITY) } - if (!ClaimProximity.isAdjacent(wrapper, player, settingsManager, guild)) { + if (!ClaimRelations.isAdjacent(wrapper, player, settingsManager, guild)) { throw ExpectationNotMet(Messages.CLAIM__MUST_BE_ADJACENT) } val claim = ClaimRegionHandler.createClaim(wrapper, guild, player) guild.addGuildClaim(claim) - ClaimPermissions.addOwner(wrapper, claim, guild) - ClaimPermissions.addMembers(wrapper, claim, guild) - ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) - ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.addOwner(wrapper, claim, guild) + ClaimEditor.addMembers(wrapper, claim, guild) + ClaimEditor.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.setExitMessage(wrapper, claim, settingsManager, guild) currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt index c3f7473bc..0cc513604 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandKick.kt @@ -39,7 +39,7 @@ import co.aikar.commands.annotation.Values import java.util.concurrent.TimeUnit import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildKickEvent -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.configuration.sections.CooldownSettings import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler @@ -100,7 +100,7 @@ internal class CommandKick : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() for (claim in guild.claimedLand) { - ClaimPermissions.kickMember(wrapper, claim, player) + ClaimEditor.kickMember(wrapper, claim, player) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt index 92b05ce1c..351fa9beb 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt @@ -35,7 +35,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildRenameEvent -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.configuration.sections.CostSettings import me.glaremasters.guilds.configuration.sections.GuildSettings import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -99,8 +99,8 @@ internal class CommandRename : BaseCommand() { if (ClaimUtils.checkIfHaveClaims(wrapper, guild)) { for (claim in guild.claimedLand) { - ClaimPermissions.setEnterMessage(wrapper, claim, settingsManager, guild) - ClaimPermissions.setExitMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.setEnterMessage(wrapper, claim, settingsManager, guild) + ClaimEditor.setExitMessage(wrapper, claim, settingsManager, guild) } } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt index ea097f249..a022d7e6a 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandTransfer.kt @@ -38,7 +38,7 @@ import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildTransferEvent -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild @@ -85,7 +85,7 @@ internal class CommandTransfer : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance(); for (claim in guild.claimedLand) { - ClaimPermissions.transferOwner(wrapper, claim, user.uniqueId, guild.guildMaster.uuid) + ClaimEditor.transferOwner(wrapper, claim, user.uniqueId, guild.guildMaster.uuid) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt index 9ab97748a..183cc584a 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandAccept.kt @@ -37,7 +37,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.api.events.GuildJoinEvent -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.cooldowns.Cooldown import me.glaremasters.guilds.cooldowns.CooldownHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -99,7 +99,7 @@ internal class CommandAccept : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() for (claim in guild.claimedLand) { - ClaimPermissions.addMember(wrapper, claim, player) + ClaimEditor.addMember(wrapper, claim, player) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt index e35ddefa6..253a462a0 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandLeave.kt @@ -39,7 +39,7 @@ import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction import me.glaremasters.guilds.api.events.GuildLeaveEvent import me.glaremasters.guilds.api.events.GuildRemoveEvent -import me.glaremasters.guilds.claim.ClaimPermissions +import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.configuration.sections.CooldownSettings import me.glaremasters.guilds.cooldowns.Cooldown @@ -120,7 +120,7 @@ internal class CommandLeave : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() for (claim in guild.claimedLand) { - ClaimPermissions.removeMember(wrapper, claim, player) + ClaimEditor.removeMember(wrapper, claim, player) } } diff --git a/src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt b/src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt index 28cbd46e1..0bde13cad 100644 --- a/src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt +++ b/src/main/kotlin/me/glaremasters/guilds/guis/MapGUI.kt @@ -29,20 +29,17 @@ import com.cryptomorin.xseries.SkullUtils import com.cryptomorin.xseries.XMaterial import dev.triumphteam.gui.guis.Gui import dev.triumphteam.gui.guis.GuiItem -import dev.triumphteam.gui.guis.PaginatedGui import me.glaremasters.guilds.Guilds -import me.glaremasters.guilds.claim.ClaimProximity +import me.glaremasters.guilds.claim.ClaimRelations import me.glaremasters.guilds.configuration.sections.GuildInfoSettings import me.glaremasters.guilds.configuration.sections.GuildListSettings import me.glaremasters.guilds.configuration.sections.GuildMapSettings import me.glaremasters.guilds.exte.addBackground -import me.glaremasters.guilds.exte.addBottom import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.guild.GuildSkull import me.glaremasters.guilds.utils.EconomyUtils -import me.glaremasters.guilds.utils.GuiUtils import me.glaremasters.guilds.utils.ItemBuilder import me.glaremasters.guilds.utils.StringUtils import org.bukkit.Material @@ -102,7 +99,7 @@ class MapGUI(private val guilds: Guilds, private val settingsManager: SettingsMa private fun populateMap(gui: Gui, player: Player) { val wrapper = WorldGuardWrapper.getInstance() - val claims = ClaimProximity.getMap(wrapper, player, guilds) + val claims = ClaimRelations.getMap(wrapper, player, guilds) val defaultUrl = settingsManager.getProperty(GuildMapSettings.GUILD_MAP_HEAD_DEFAULT_URL) diff --git a/src/main/resources/languages/en-US.yml b/src/main/resources/languages/en-US.yml index 4842759f3..380100c96 100644 --- a/src/main/resources/languages/en-US.yml +++ b/src/main/resources/languages/en-US.yml @@ -69,6 +69,7 @@ descriptions: language: "Change the language of the plugin messages for you" leave: "Leave your Guild" list: "List all Guilds" + map: "Map of claims around you" members: "Opens the Member List GUI" motd: "View your Guild's MOTD" motd-set: "Set your Guild's MOTD" From f2e5d338d29a004324b397fd523f84fbfb4c3cd9 Mon Sep 17 00:00:00 2001 From: VQ9 Date: Sat, 4 Sep 2021 19:32:50 +0100 Subject: [PATCH 10/10] Claim Events --- .../guilds/listeners/ClaimSignListener.java | 6 ++++ .../guilds/api/events/GuildClaimEvent.kt | 31 +++++++++++++++++++ .../guilds/api/events/GuildUnclaimAllEvent.kt | 31 +++++++++++++++++++ .../guilds/api/events/GuildUnclaimEvent.kt | 31 +++++++++++++++++++ .../guilds/claim/ClaimRegionHandler.kt | 4 +++ .../glaremasters/guilds/claim/ClaimUtils.kt | 11 +++++++ .../glaremasters/guilds/claim/GuildClaim.kt | 18 +++++++++++ .../admin/claims/CommandAdminClaim.kt | 17 ++++++++++ .../admin/manage/CommandAdminRemove.kt | 6 ++++ .../guilds/commands/claims/CommandClaim.kt | 20 +++++++++--- .../commands/management/CommandDelete.kt | 16 +++++----- .../guilds/commands/member/CommandPromote.kt | 1 + 12 files changed, 180 insertions(+), 12 deletions(-) create mode 100644 src/main/kotlin/me/glaremasters/guilds/api/events/GuildClaimEvent.kt create mode 100644 src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimAllEvent.kt create mode 100644 src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimEvent.kt diff --git a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java index 658c504c5..50aea10e8 100644 --- a/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java +++ b/src/main/java/me/glaremasters/guilds/listeners/ClaimSignListener.java @@ -26,6 +26,7 @@ import ch.jalu.configme.SettingsManager; import me.glaremasters.guilds.Guilds; +import me.glaremasters.guilds.api.events.GuildClaimEvent; import me.glaremasters.guilds.claim.ClaimEditor; import me.glaremasters.guilds.claim.ClaimRegionHandler; import me.glaremasters.guilds.claim.GuildClaim; @@ -35,10 +36,12 @@ import me.glaremasters.guilds.guild.GuildRolePerm; import me.glaremasters.guilds.messages.Messages; import me.glaremasters.guilds.claim.ClaimUtils; +import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; import org.bukkit.entity.Player; +import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.SignChangeEvent; @@ -172,6 +175,9 @@ public void onSignInteract(PlayerInteractEvent event) { guild.setBalance(guild.getBalance() - Double.parseDouble(sign.getLine(2))); + Event firedEvent = new GuildClaimEvent(player, guild, claim); + Bukkit.getPluginManager().callEvent(firedEvent); + guilds.getCommandManager().getCommandIssuer(player).sendInfo(Messages.CLAIM__SIGN_BUY_SUCCESS); } diff --git a/src/main/kotlin/me/glaremasters/guilds/api/events/GuildClaimEvent.kt b/src/main/kotlin/me/glaremasters/guilds/api/events/GuildClaimEvent.kt new file mode 100644 index 000000000..8736ae64f --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/api/events/GuildClaimEvent.kt @@ -0,0 +1,31 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.glaremasters.guilds.api.events + +import me.glaremasters.guilds.api.events.base.GuildEvent +import me.glaremasters.guilds.claim.GuildClaim +import me.glaremasters.guilds.guild.Guild +import org.bukkit.entity.Player + +class GuildClaimEvent(player: Player, guild: Guild, var claim: GuildClaim) : GuildEvent(player, guild) diff --git a/src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimAllEvent.kt b/src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimAllEvent.kt new file mode 100644 index 000000000..6587b60c2 --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimAllEvent.kt @@ -0,0 +1,31 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.glaremasters.guilds.api.events + +import me.glaremasters.guilds.api.events.base.GuildEvent +import me.glaremasters.guilds.claim.GuildClaim +import me.glaremasters.guilds.guild.Guild +import org.bukkit.entity.Player + +class GuildUnclaimAllEvent(player: Player, guild: Guild) : GuildEvent(player, guild) diff --git a/src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimEvent.kt b/src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimEvent.kt new file mode 100644 index 000000000..9e03ff45a --- /dev/null +++ b/src/main/kotlin/me/glaremasters/guilds/api/events/GuildUnclaimEvent.kt @@ -0,0 +1,31 @@ +/* + * MIT License + * + * Copyright (c) 2019 Glare + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package me.glaremasters.guilds.api.events + +import me.glaremasters.guilds.api.events.base.GuildEvent +import me.glaremasters.guilds.claim.GuildClaim +import me.glaremasters.guilds.guild.Guild +import org.bukkit.entity.Player + +class GuildUnclaimEvent(player: Player, guild: Guild, var claim: GuildClaim) : GuildEvent(player, guild) diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt index 0fc9bb72d..1c829e11d 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimRegionHandler.kt @@ -23,6 +23,8 @@ */ package me.glaremasters.guilds.claim +import me.glaremasters.guilds.api.events.GuildClaimEvent +import me.glaremasters.guilds.api.events.GuildUnclaimAllEvent import me.glaremasters.guilds.guild.Guild import org.bukkit.Bukkit import org.bukkit.entity.Player @@ -77,7 +79,9 @@ object ClaimRegionHandler { if (!ClaimUtils.checkIfHaveClaims(wrapper, guild)) { return } + removeAllClaims(wrapper, guild) + guild.claimedLand.clear() } } \ No newline at end of file diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt index 04d20d24a..39c8c8e0b 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/ClaimUtils.kt @@ -80,6 +80,17 @@ object ClaimUtils { return wrapper.getRegion(player.world, name).get().selection as ICuboidSelection } + @JvmStatic + fun getSelection(wrapper: WorldGuardWrapper, name: String): ICuboidSelection? { + for (world in Bukkit.getWorlds()) { + val tempSelection = wrapper.getRegion(world, name).get().selection as ICuboidSelection + if (tempSelection != null) { + return tempSelection + } + } + return null + } + @JvmStatic fun regions(wrapper: WorldGuardWrapper, player: Player): Set { return wrapper.getRegions(claimPointOne(player), claimPointTwo(player)) diff --git a/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt index 5f69efb15..575d168dc 100644 --- a/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/claim/GuildClaim.kt @@ -25,8 +25,10 @@ package me.glaremasters.guilds.claim import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler +import org.bukkit.Location import org.codemc.worldguardwrapper.WorldGuardWrapper import org.codemc.worldguardwrapper.region.IWrappedRegion +import org.codemc.worldguardwrapper.selection.ICuboidSelection import java.util.* import kotlin.properties.Delegates @@ -50,6 +52,22 @@ class GuildClaim (var name: UUID, var guildId: UUID) { return guildHandler.getGuild(guildId) } + fun getClaimFirstCorner(): Location { + val wrapper = WorldGuardWrapper.getInstance() + + val selection = ClaimUtils.getSelection(wrapper, name.toString()) + + return selection?.minimumPoint!! + } + + fun getClaimSecondCorner(): Location { + val wrapper = WorldGuardWrapper.getInstance() + + val selection = ClaimUtils.getSelection(wrapper, name.toString()) + + return selection?.maximumPoint!! + } + override fun toString(): String { return "GuildClaim(name=$name, guildId=$guildId)" } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt index 666b3f44e..d3f745687 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/claims/CommandAdminClaim.kt @@ -29,6 +29,10 @@ import co.aikar.commands.ACFBukkitUtil import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.api.events.GuildClaimEvent +import me.glaremasters.guilds.api.events.GuildKickEvent +import me.glaremasters.guilds.api.events.GuildUnclaimAllEvent +import me.glaremasters.guilds.api.events.GuildUnclaimEvent import me.glaremasters.guilds.claim.ClaimEditor import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.exceptions.ExpectationNotMet @@ -37,6 +41,7 @@ import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants +import org.bukkit.Bukkit import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper @@ -66,6 +71,10 @@ internal class CommandAdminClaim : BaseCommand() { ClaimEditor.setEnterMessage(wrapper, claim, settingsManager, guild) ClaimEditor.setExitMessage(wrapper, claim, settingsManager, guild) + val event = GuildClaimEvent(player, guild, claim) + Bukkit.getPluginManager().callEvent(event) + + currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), "{loc2}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointTwo(player))) @@ -91,6 +100,10 @@ internal class CommandAdminClaim : BaseCommand() { "all" -> { ClaimRegionHandler.removeAllClaims(wrapper, guild) guild.clearGuildClaims() + + val event = GuildUnclaimAllEvent(player, guild) + Bukkit.getPluginManager().callEvent(event) + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } "this" -> { @@ -98,6 +111,10 @@ internal class CommandAdminClaim : BaseCommand() { if (standingClaim != null) { ClaimRegionHandler.removeClaim(wrapper, standingClaim) guild.removeGuildClaim(standingClaim) + + val event = GuildUnclaimEvent(player, guild, standingClaim) + Bukkit.getPluginManager().callEvent(event) + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } else { diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt index f909afdd2..35b1b9211 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/admin/manage/CommandAdminRemove.kt @@ -39,7 +39,9 @@ import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction +import me.glaremasters.guilds.api.events.GuildClaimEvent import me.glaremasters.guilds.api.events.GuildRemoveEvent +import me.glaremasters.guilds.api.events.GuildUnclaimAllEvent import me.glaremasters.guilds.claim.ClaimRegionHandler import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler @@ -87,6 +89,10 @@ internal class CommandAdminRemove : BaseCommand() { val wrapper = WorldGuardWrapper.getInstance() ClaimRegionHandler.deleteWithGuild(wrapper, guild) + + val firedEvent = GuildUnclaimAllEvent(player, guild) + Bukkit.getPluginManager().callEvent(firedEvent) + } guild.sendMessage(currentCommandManager, Messages.LEAVE__GUILDMASTER_LEFT, "{player}", guild.guildMaster.name) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt index d15a6176c..024091bd6 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/claims/CommandClaim.kt @@ -29,16 +29,17 @@ import co.aikar.commands.ACFBukkitUtil import co.aikar.commands.BaseCommand import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds -import me.glaremasters.guilds.claim.ClaimEditor -import me.glaremasters.guilds.claim.ClaimRelations -import me.glaremasters.guilds.claim.ClaimRegionHandler +import me.glaremasters.guilds.api.events.GuildClaimEvent +import me.glaremasters.guilds.api.events.GuildUnclaimAllEvent +import me.glaremasters.guilds.api.events.GuildUnclaimEvent +import me.glaremasters.guilds.claim.* import me.glaremasters.guilds.configuration.sections.ClaimSettings import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants +import org.bukkit.Bukkit import org.bukkit.entity.Player import org.codemc.worldguardwrapper.WorldGuardWrapper @@ -94,6 +95,9 @@ internal class CommandClaim : BaseCommand() { ClaimEditor.setEnterMessage(wrapper, claim, settingsManager, guild) ClaimEditor.setExitMessage(wrapper, claim, settingsManager, guild) + val event = GuildClaimEvent(player, guild, claim) + Bukkit.getPluginManager().callEvent(event) + currentCommandIssuer.sendInfo(Messages.CLAIM__SUCCESS, "{loc1}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointOne(player)), "{loc2}", ACFBukkitUtil.formatLocation(ClaimUtils.claimPointTwo(player))) @@ -127,6 +131,10 @@ internal class CommandClaim : BaseCommand() { "all" -> { ClaimRegionHandler.removeAllClaims(wrapper, guild) guild.clearGuildClaims() + + val event = GuildUnclaimAllEvent(player, guild) + Bukkit.getPluginManager().callEvent(event) + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } "this" -> { @@ -134,6 +142,10 @@ internal class CommandClaim : BaseCommand() { if (standingClaim != null) { ClaimRegionHandler.removeClaim(wrapper, standingClaim) guild.removeGuildClaim(standingClaim) + + val event = GuildClaimEvent(player, guild, standingClaim) + Bukkit.getPluginManager().callEvent(event) + currentCommandIssuer.sendInfo(Messages.UNCLAIM__SUCCESS) } else { diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt index 92d931589..ab93f4787 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandDelete.kt @@ -26,26 +26,23 @@ package me.glaremasters.guilds.commands.management import ch.jalu.configme.SettingsManager import co.aikar.commands.BaseCommand -import co.aikar.commands.annotation.CommandAlias -import co.aikar.commands.annotation.CommandPermission -import co.aikar.commands.annotation.Conditions -import co.aikar.commands.annotation.Dependency -import co.aikar.commands.annotation.Description -import co.aikar.commands.annotation.Subcommand -import co.aikar.commands.annotation.Syntax +import co.aikar.commands.annotation.* import me.glaremasters.guilds.Guilds import me.glaremasters.guilds.actions.ActionHandler import me.glaremasters.guilds.actions.ConfirmAction +import me.glaremasters.guilds.api.events.GuildClaimEvent import me.glaremasters.guilds.api.events.GuildRemoveEvent +import me.glaremasters.guilds.api.events.GuildUnclaimAllEvent import me.glaremasters.guilds.claim.ClaimRegionHandler +import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler import me.glaremasters.guilds.messages.Messages -import me.glaremasters.guilds.claim.ClaimUtils import me.glaremasters.guilds.utils.Constants import net.milkbowl.vault.permission.Permission import org.bukkit.Bukkit import org.bukkit.entity.Player +import org.bukkit.event.Event import org.codemc.worldguardwrapper.WorldGuardWrapper @CommandAlias("%guilds") @@ -84,6 +81,9 @@ internal class CommandDelete : BaseCommand() { if (ClaimUtils.isEnable(settingsManager)) { val wrapper = WorldGuardWrapper.getInstance() + val firedEvent = GuildUnclaimAllEvent(player, guild) + Bukkit.getPluginManager().callEvent(firedEvent) + ClaimRegionHandler.deleteWithGuild(wrapper, guild) } guildHandler.removeGuild(guild) diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandPromote.kt b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandPromote.kt index 23a87fa5d..44383b6b3 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandPromote.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/member/CommandPromote.kt @@ -36,6 +36,7 @@ import co.aikar.commands.annotation.Subcommand import co.aikar.commands.annotation.Syntax import co.aikar.commands.annotation.Values import me.glaremasters.guilds.Guilds +import me.glaremasters.guilds.api.events.GuildClaimEvent import me.glaremasters.guilds.exceptions.ExpectationNotMet import me.glaremasters.guilds.guild.Guild import me.glaremasters.guilds.guild.GuildHandler