diff --git a/bukkit/build.gradle b/bukkit/build.gradle index 92ab2f1..0a6d25e 100644 --- a/bukkit/build.gradle +++ b/bukkit/build.gradle @@ -104,6 +104,7 @@ sourceSets { dependencies { compileOnly(project(path: ":GriefDefenderAPI")) + compileOnly fileTree(dir: 'libs', include: ['*.jar']) compile project (':common') compileOnly "com.griefdefender:adapter:$adapterVersion" compileOnly "com.griefdefender:reflect-helper:1.0" @@ -118,9 +119,9 @@ dependencies { compileOnly "net.ess3:EssentialsX:2.17.1" compileOnly "net.milkbowl.vault:VaultAPI:1.7" compileOnly "us.dynmap:dynmap-api:3.0-SNAPSHOT" - compileOnly "com.github.lucko:luckperms:master-SNAPSHOT" - compileOnly "com.github.slimefun:slimefun4:master-SNAPSHOT" - compileOnly "com.github.thebusybiscuit:cs-corelib:master-SNAPSHOT" + compileOnly "com.github.lucko:luckperms:v5.2" + //compileOnly "com.github.slimefun:slimefun4:master-SNAPSHOT" + //compileOnly "com.github.thebusybiscuit:cs-corelib:master-SNAPSHOT" // Libs compileOnly "aopalliance:aopalliance:1.0" compileOnly "co.aikar:acf-core:0.5.0-SNAPSHOT" @@ -145,10 +146,10 @@ dependencies { compileOnly "org.jetbrains:annotations:17.0.0" compileOnly "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" compileOnly "org.ow2.asm:asm-debug-all:5.2" - compileOnly "org.spongepowered:configurate-core:3.7-SNAPSHOT" - compileOnly "org.spongepowered:configurate-gson:3.7-SNAPSHOT" - compileOnly "org.spongepowered:configurate-hocon:3.7-SNAPSHOT" - compileOnly "org.spongepowered:configurate-yaml:3.7-SNAPSHOT" + compileOnly "org.spongepowered:configurate-core:3.7.2" + compileOnly "org.spongepowered:configurate-gson:3.7.2" + compileOnly "org.spongepowered:configurate-hocon:3.7.2" + compileOnly "org.spongepowered:configurate-yaml:3.7.2" compileOnly "net.kyori:event-api:3.0.0" compileOnly "net.kyori:event-method:3.0.0" compileOnly "net.kyori:event-method-asm:3.0.0" diff --git a/bukkit/src/main/java/com/griefdefender/GDPlayerData.java b/bukkit/src/main/java/com/griefdefender/GDPlayerData.java index 3d2eb93..7d65658 100644 --- a/bukkit/src/main/java/com/griefdefender/GDPlayerData.java +++ b/bukkit/src/main/java/com/griefdefender/GDPlayerData.java @@ -114,6 +114,7 @@ public class GDPlayerData implements PlayerData { public boolean townChat = false; public boolean lockPlayerDeathDrops = false; public boolean trappedRequest = false; + public boolean runningPlayerCommands = false; public List chatLines = new ArrayList<>(); public Instant recordChatTimestamp; public Instant commandInputTimestamp; diff --git a/bukkit/src/main/java/com/griefdefender/command/ClaimOptionBase.java b/bukkit/src/main/java/com/griefdefender/command/ClaimOptionBase.java index 568f969..32efdd7 100644 --- a/bukkit/src/main/java/com/griefdefender/command/ClaimOptionBase.java +++ b/bukkit/src/main/java/com/griefdefender/command/ClaimOptionBase.java @@ -278,7 +278,7 @@ public abstract class ClaimOptionBase extends BaseCommand { boolean isAdmin = false; final Player player = src.getOnlinePlayer(); final GDPlayerData playerData = src.getInternalPlayerData(); - final boolean isTaxEnabled = GriefDefenderPlugin.getActiveConfig(player.getWorld()).getConfig().economy.taxSystem; + final boolean isTaxEnabled = GriefDefenderPlugin.getGlobalConfig().getConfig().economy.taxSystem; if (player.hasPermission(GDPermissions.DELETE_CLAIM_ADMIN)) { isAdmin = true; } @@ -385,7 +385,7 @@ public abstract class ClaimOptionBase extends BaseCommand { overrideContexts.add(claim.getOverrideClaimContext()); Map filteredContextMap = new HashMap<>(); - for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) { + for (Map.Entry, Map>> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) { final Set contextSet = mapEntry.getKey(); if (contextSet.contains(claim.getDefaultTypeContext()) || (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT)))) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); @@ -422,7 +422,7 @@ public abstract class ClaimOptionBase extends BaseCommand { } } - for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { + for (Map.Entry, Map>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { final Set contextSet = mapEntry.getKey(); if (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT))) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); @@ -431,11 +431,11 @@ public abstract class ClaimOptionBase extends BaseCommand { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); } if (displayType != MenuType.DEFAULT) { - if (claim.isTown() || isAdmin) { + //if (claim.isTown() || isAdmin) { if (contextSet.contains(claim.getContext())) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.CLAIM, mapEntry.getValue()); } - } + //} if (contextSet.contains(ClaimContexts.GLOBAL_OVERRIDE_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_OVERRIDE_CONTEXT))) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.OVERRIDE, mapEntry.getValue()); } @@ -453,7 +453,7 @@ public abstract class ClaimOptionBase extends BaseCommand { Collections.reverse(inheritParents); for (Claim current : inheritParents) { GDClaim currentClaim = (GDClaim) current; - for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { + for (Map.Entry, Map>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { final Set contextSet = mapEntry.getKey(); if (contextSet.contains(currentClaim.getContext())) { inheritPermissionMap.put(mapEntry.getKey(), new ClaimClickData(currentClaim, mapEntry.getValue())); @@ -519,10 +519,10 @@ public abstract class ClaimOptionBase extends BaseCommand { paginationList.sendTo(player, activePage); } - private void addFilteredContexts(GDPermissionUser src, Map filteredContextMap, Set contexts, MenuType type, Map permissions) { + private void addFilteredContexts(GDPermissionUser src, Map filteredContextMap, Set contexts, MenuType type, Map> permissions) { final Player player = src.getOnlinePlayer(); final GDPlayerData playerData = src.getInternalPlayerData(); - for (Map.Entry permissionEntry : permissions.entrySet()) { + for (Map.Entry> permissionEntry : permissions.entrySet()) { final Option option = OptionRegistryModule.getInstance().getById(permissionEntry.getKey()).orElse(null); if (option == null) { continue; @@ -545,10 +545,21 @@ public abstract class ClaimOptionBase extends BaseCommand { } } final OptionData optionData = filteredContextMap.get(permissionEntry.getKey()); + String optionValue = permissionEntry.getValue().get(0); + if (option.multiValued()) { + optionValue = ""; + for (String entry : permissionEntry.getValue()) { + if (optionValue.isEmpty()) { + optionValue += entry; + } else { + optionValue = optionValue + "\\|" + entry; + } + } + } if (optionData != null) { - optionData.addContexts(option, permissionEntry.getValue(), type, contexts); + optionData.addContexts(option, optionValue, type, contexts); } else { - filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, permissionEntry.getValue(), type, contexts)); + filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, optionValue, type, contexts)); } } } diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java index 89155e2..5c69eed 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimCreate.java @@ -89,6 +89,13 @@ public class CommandClaimCreate extends BaseCommand { return; } + final int radiusLimit = GriefDefenderPlugin.getGlobalConfig().getConfig().claim.claimCreateRadiusLimit; + if (radius > radiusLimit) { + GriefDefenderPlugin.sendMessage(player, GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_FAILED_RESULT, + ImmutableMap.of("reason", "Radius exceeds limit of " + radiusLimit + "."))); + return; + } + final Vector3i lesserBoundary = new Vector3i( location.getBlockX() - radius, minClaimLevel, diff --git a/bukkit/src/main/java/com/griefdefender/command/CommandClaimTax.java b/bukkit/src/main/java/com/griefdefender/command/CommandClaimTax.java index 1e30802..3e6b9cc 100644 --- a/bukkit/src/main/java/com/griefdefender/command/CommandClaimTax.java +++ b/bukkit/src/main/java/com/griefdefender/command/CommandClaimTax.java @@ -46,6 +46,7 @@ import com.griefdefender.claim.GDClaim; import com.griefdefender.configuration.MessageStorage; import com.griefdefender.economy.GDPaymentTransaction; import com.griefdefender.permission.GDPermissions; +import com.griefdefender.task.TaxApplyTask; import com.griefdefender.util.EconomyUtil; import java.time.Instant; @@ -104,6 +105,10 @@ public class CommandClaimTax extends BaseCommand { message = MessageCache.getInstance().TAX_NO_BALANCE; } GriefDefenderPlugin.sendMessage(player, message); + } else if (command.equalsIgnoreCase("force")) { + if (playerData.ignoreClaims || player.hasPermission(GDPermissions.COMMAND_CLAIM_TAX_FORCE)) { + TaxApplyTask.handleClaimTax(claim, playerData, claim.isInTown()); + } } else if (command.equalsIgnoreCase("pay")) { final double taxBalance = claim.getEconomyData().getTaxBalance(); if (taxBalance <= 0 || amount <= 0) { diff --git a/bukkit/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java b/bukkit/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java index becad87..a02bc68 100644 --- a/bukkit/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java +++ b/bukkit/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java @@ -45,14 +45,12 @@ import com.griefdefender.configuration.MessageStorage; import com.griefdefender.permission.GDPermissionManager; import com.griefdefender.permission.GDPermissions; import com.griefdefender.permission.option.GDOptions; -import com.griefdefender.util.SafeTeleportHelper; +import com.griefdefender.util.PlayerUtil; import java.time.Duration; import java.time.Instant; -import java.util.concurrent.ThreadLocalRandom; import org.bukkit.GameMode; -import org.bukkit.Location; import org.bukkit.entity.Player; @CommandAlias("%griefdefender") @@ -108,34 +106,7 @@ public class CommandTrapped extends BaseCommand { return; } - final int minClaimLevel = claim.getOwnerMinClaimLevel(); - double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65); - if (claim.isCuboid()) { - claimY = claim.lesserBoundaryCorner.getY(); - } - - final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1); - final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1); - Location claimCorner = null; - switch (randomCorner) { - case 1: // SW - claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random); - case 2: // NW - claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random); - case 3: // SE - claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random); - case 4: // NE - claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random); - } - - final Location safeLocation = SafeTeleportHelper.getInstance().getSafeLocation(claimCorner, 64, 16, 2).orElse(null); - if (safeLocation != null) { - playerData.teleportLocation = safeLocation; - } else { - // If no safe location was found, fall back to corner - playerData.teleportLocation = claimCorner; - } - + playerData.teleportLocation = PlayerUtil.getInstance().getSafeClaimLocation(claim); int teleportDelay = 0; if (GDOptions.PLAYER_TELEPORT_DELAY) { teleportDelay = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.PLAYER_TELEPORT_DELAY, claim); diff --git a/bukkit/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java b/bukkit/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java index 6412efb..43d6c02 100644 --- a/bukkit/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java +++ b/bukkit/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java @@ -50,6 +50,8 @@ public class ClaimCategory extends ConfigCategory { + "\nNote: If in economy-mode, use setting 'use-claim-block-task' under economy category." + "\nNote: To configure amount accrued, see 'blocks-accrued-per-hour' option at https://github.com/bloodmc/GriefDefender/wiki/Options-(Meta)#global-options") public boolean claimBlockTask = true; + @Setting(value = "claim-create-radius-limit", comment = "The radius limit for the /claimcreate command. (Default: 256)") + public int claimCreateRadiusLimit = 256; @Setting(value = "piston-protection-in-claims", comment = "Whether piston protection should be enabled within claims. Note: This does not affect pistons crossing into another claim, that is always protected. This only determines whether or not GD should process pistons if it doesn't cross into another claim.") public boolean pistonProtectionInClaims = false; @Setting(value = "auto-chest-claim-block-radius", comment = "Radius used (in blocks) for auto-created claim when a chest is placed. Set to -1 to disable chest claim creation.") diff --git a/bukkit/src/main/java/com/griefdefender/configuration/category/ModCategory.java b/bukkit/src/main/java/com/griefdefender/configuration/category/ModCategory.java index f11e14d..ebf60ec 100644 --- a/bukkit/src/main/java/com/griefdefender/configuration/category/ModCategory.java +++ b/bukkit/src/main/java/com/griefdefender/configuration/category/ModCategory.java @@ -55,8 +55,12 @@ public class ModCategory { @Setting(value = "block-id-convert-list", comment = "Used to override generic block id's to their actual id during TE and item usage if available. Add the target block id to list if you want to force a conversion when detected." + "\nNote: This is useful for mods such as IC2 which uses the generic id 'ic2:te' for its multi-block.") public List blockIdConvertList = new ArrayList<>(); + @Setting(value = "tile-id-nbt-map", comment = "Used to override generic tileentity id's to their actual id during TE usage. Add the target TE id as key and NBT key where ID is stored as value." + + "\nNote: This is useful for mods such as Gregtech which uses the generic id 'gregtech:machine' for its TE and NBT key 'MetaId' to store the actual ID.") + public Map tileIdNbtMap = new HashMap<>(); public ModCategory() { + this.blockIdConvertList.add("gregtech:machine"); this.blockIdConvertList.add("ic2:te"); this.fakePlayerIdentifiers.add("41C82C87-7AfB-4024-BA57-13D2C99CAE77"); // Forge FakePlayer this.fakePlayerIdentifiers.add("BFC3377F-C3C9-3382-9DA6-79B50A9AFE57"); // OpenMods @@ -67,6 +71,7 @@ public class ModCategory { this.modIdMap.put("net.minecraftforge.*", "forge"); this.modIdMap.put("openblocks.*", "openblocks"); this.modIdMap.put("openmods.*", "openmods"); + this.tileIdNbtMap.put("gregtech:machine", "MetaId"); } public boolean isFakePlayer(Player player) { @@ -98,4 +103,8 @@ public class ModCategory { } return null; } + + public String getNbtKey(String tileId) { + return this.tileIdNbtMap.get(tileId); + } } diff --git a/bukkit/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java b/bukkit/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java index aef6d4b..04d4c0c 100644 --- a/bukkit/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java +++ b/bukkit/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java @@ -86,8 +86,8 @@ public class FlagDefinitionSerializer implements TypeSerializer Set flagContexts = new HashSet<>(); for (String part : parts) { String[] split = part.split("="); - String key = split[0]; - String value = split[1]; + String key = split[0].toLowerCase(); + String value = split[1].toLowerCase(); // Handle linked Flag if (key.equalsIgnoreCase("flag")) { final String flagName = value; @@ -108,11 +108,6 @@ public class FlagDefinitionSerializer implements TypeSerializer } flagContexts.add(new Context(key, value)); break; - case "used_item": - case "item_name": - case ContextKeys.STATE: - flagContexts.add(new Context(key, value)); - break; case "server": case "world": case ContextKeys.CLAIM_DEFAULT: @@ -120,7 +115,8 @@ public class FlagDefinitionSerializer implements TypeSerializer // gd_claim contexts should always be set at the definition level throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'.\nContext '" + key + "' can only be used for the definition."); default: - throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'."); + flagContexts.add(new Context(key, value)); + break; } } } diff --git a/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java b/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java index 3f44065..fec1bf0 100644 --- a/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java +++ b/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java @@ -41,6 +41,7 @@ import org.bukkit.entity.Player; import org.bukkit.entity.Vehicle; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; import com.flowpowered.math.vector.Vector3i; @@ -68,6 +69,7 @@ import com.griefdefender.command.CommandHelper; import com.griefdefender.configuration.MessageStorage; import com.griefdefender.event.GDBorderClaimEvent; import com.griefdefender.internal.registry.ItemTypeRegistryModule; +import com.griefdefender.internal.util.NMSUtil; import com.griefdefender.internal.util.VecHelper; import com.griefdefender.permission.GDPermissionManager; import com.griefdefender.permission.GDPermissionUser; @@ -109,11 +111,12 @@ public class CommonEntityEventHandler { final Vector3i fromPos = VecHelper.toVector3i(fromLocation); final Vector3i toPos = VecHelper.toVector3i(toLocation); - final Player player = targetEntity instanceof Player ? (Player) targetEntity : null; - final GDPermissionUser user = player != null ? PermissionHolderCache.getInstance().getOrCreateUser(player) : null; if (fromPos.equals(toPos)) { return true; } + + final Player player = targetEntity instanceof Player ? (Player) targetEntity : null; + final GDPermissionUser user = player != null ? PermissionHolderCache.getInstance().getOrCreateUser(player) : null; if (user != null) { if (user.getOnlinePlayer() == null) { // Most likely NPC, ignore @@ -188,6 +191,10 @@ public class CommonEntityEventHandler { if (player != null && cancelMessage != null) { TextAdapter.sendComponent(player, cancelMessage); } + if (event instanceof PlayerRespawnEvent) { + ((PlayerRespawnEvent) event).setRespawnLocation(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim)); + } + GDTimings.ENTITY_MOVE_EVENT.stopTiming(); return false; } else { final boolean showGpPrefix = GriefDefenderPlugin.getGlobalConfig().getConfig().message.enterExitShowGdPrefix; @@ -232,15 +239,21 @@ public class CommonEntityEventHandler { } else { playerData.inTown = false; } - if (player != null) { + if (player != null && user.getOnlinePlayer() != null) { this.checkPlayerFlight(user, fromClaim, toClaim); this.checkPlayerFlySpeed(user, fromClaim, toClaim); this.checkPlayerGameMode(user, fromClaim, toClaim); this.checkPlayerGodMode(user, fromClaim, toClaim); this.checkPlayerWalkSpeed(user, fromClaim, toClaim); this.checkPlayerWeather(user, fromClaim, toClaim, false); - this.runPlayerCommands(fromClaim, user, false); - this.runPlayerCommands(toClaim, user, true); + // Exit command - Don't run if to claim is child of from claim + if (!toClaim.isParent(fromClaim)) { + this.runPlayerCommands(fromClaim, user, false); + } + // Enter command - Don't run if to claim is parent of from claim + if (!fromClaim.isParent(toClaim)) { + this.runPlayerCommands(toClaim, user, true); + } } } @@ -291,6 +304,9 @@ public class CommonEntityEventHandler { if (event instanceof Cancellable) { ((Cancellable) event).setCancelled(true); } + if (event instanceof PlayerRespawnEvent) { + ((PlayerRespawnEvent) event).setRespawnLocation(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim)); + } GDTimings.ENTITY_MOVE_EVENT.stopTiming(); return false; } @@ -340,15 +356,21 @@ public class CommonEntityEventHandler { playerData.inTown = false; } - if (player != null) { + if (player != null && user.getOnlinePlayer() != null) { this.checkPlayerFlight(user, fromClaim, toClaim); this.checkPlayerFlySpeed(user, fromClaim, toClaim); this.checkPlayerGameMode(user, fromClaim, toClaim); this.checkPlayerGodMode(user, fromClaim, toClaim); this.checkPlayerWalkSpeed(user, fromClaim, toClaim); this.checkPlayerWeather(user, fromClaim, toClaim, false); - this.runPlayerCommands(fromClaim, user, false); - this.runPlayerCommands(toClaim, user, true); + // Exit command - Don't run if to claim is child of from claim + if (!toClaim.isParent(fromClaim)) { + this.runPlayerCommands(fromClaim, user, false); + } + // Enter command - Don't run if to claim is parent of from claim + if (!fromClaim.isParent(toClaim)) { + this.runPlayerCommands(toClaim, user, true); + } } } } @@ -371,7 +393,11 @@ public class CommonEntityEventHandler { if (!GDOptions.PLAYER_COMMAND_ENTER && !GDOptions.PLAYER_COMMAND_EXIT) { return; } + if (user.getInternalPlayerData().runningPlayerCommands) { + return; + } + user.getInternalPlayerData().runningPlayerCommands = true; List rawCommandList = new ArrayList<>(); Set contexts = new HashSet<>(); if (player.getUniqueId().equals(claim.getOwnerUniqueId())) { @@ -404,6 +430,7 @@ public class CommonEntityEventHandler { if (rawCommandList != null) { runCommand(claim, player, rawCommandList, false); } + user.getInternalPlayerData().runningPlayerCommands = false; } private void runCommand(GDClaim claim, Player player, List rawCommandList, boolean runAsConsole) { @@ -418,6 +445,10 @@ public class CommonEntityEventHandler { String args = command.replace(baseCommand + " ", ""); baseCommand = baseCommand.replace("\\", "").replace("/", ""); args = args.replace("%player%", player.getName()); + // Handle WorldEdit commands + if (command.startsWith("//") && !baseCommand.startsWith("/")) { + baseCommand = "/" + baseCommand; + } if (runAsConsole) { CommandHelper.executeCommand(Bukkit.getConsoleSender(), baseCommand, args); } else { @@ -504,7 +535,7 @@ public class CommonEntityEventHandler { return; } final Player player = user.getOnlinePlayer(); - if (player == null || !player.isInvulnerable()) { + if (player == null || !NMSUtil.getInstance().isInvulnerable(player)) { // Most likely Citizens NPC return; } diff --git a/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java b/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java index 7cdcb2b..805397d 100644 --- a/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java +++ b/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java @@ -217,6 +217,9 @@ public class PlayerEventHandler implements Listener { if (claim.isInTown()) { playerData.inTown = true; } + if (GDFlags.ENTER_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, player.getLocation(), claim, Flags.ENTER_CLAIM, player, player, player, true) == Tristate.FALSE) { + player.teleport(PlayerUtil.getInstance().getSafeClaimLocation(claim)); + } GDTimings.PLAYER_JOIN_EVENT.stopTiming(); } @@ -258,6 +261,14 @@ public class PlayerEventHandler implements Listener { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); playerData.lastPvpTimestamp = null; + if (playerData.ignoreClaims || player.hasPermission(GDPermissions.COMMAND_DELETE_ADMIN_CLAIMS)) { + return; + } + + final Location sourceLocation = player.getLocation(); + final Location destination = event.getRespawnLocation(); + // Handle BorderClaimEvent + CommonEntityEventHandler.getInstance().onEntityMove(event, sourceLocation, destination, player); } @EventHandler(priority = EventPriority.LOWEST) diff --git a/bukkit/src/main/java/com/griefdefender/permission/GDPermissionManager.java b/bukkit/src/main/java/com/griefdefender/permission/GDPermissionManager.java index 5c9baf5..54b4b7c 100644 --- a/bukkit/src/main/java/com/griefdefender/permission/GDPermissionManager.java +++ b/bukkit/src/main/java/com/griefdefender/permission/GDPermissionManager.java @@ -206,10 +206,18 @@ public class GDPermissionManager implements PermissionManager { if (source instanceof Player && flag != Flags.COLLIDE_BLOCK && flag != Flags.COLLIDE_ENTITY) { this.addPlayerContexts((Player) source, contexts, flag); } - if (!(source instanceof Player) && target instanceof Player && user != null && user.getOnlinePlayer() != null && !user.getUniqueId().equals(((Player) target).getUniqueId())) { - // add source player context - // this allows users to block all pvp actions when direct source isn't a player - contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer()))); + if (!(source instanceof Player) && user != null && user.getOnlinePlayer() != null) { + boolean addPlayerContext = false; + if (!(target instanceof Player)) { + addPlayerContext = true; + } else if (!user.getUniqueId().equals(((Player) target).getUniqueId())) { + addPlayerContext = true; + } + if (addPlayerContext) { + // add source player context + // this allows users to block all pvp actions when direct source isn't a player + contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer()))); + } } if (source instanceof Block && event instanceof EntityChangeBlockEvent && flag == Flags.BLOCK_MODIFY) { final EntityChangeBlockEvent entityChangeBlockEvent = (EntityChangeBlockEvent) event; @@ -727,7 +735,7 @@ public class GDPermissionManager implements PermissionManager { } String id = BlockTypeRegistryModule.getInstance().getNMSKey(block); if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) { - final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block); + final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block.getLocation()); if (tileType != null) { id = tileType.getId(); } @@ -752,7 +760,7 @@ public class GDPermissionManager implements PermissionManager { } String id = BlockTypeRegistryModule.getInstance().getNMSKey(blockstate); if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) { - final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block); + final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block.getLocation()); if (tileType != null) { id = tileType.getId(); } @@ -851,9 +859,15 @@ public class GDPermissionManager implements PermissionManager { String id = ItemTypeRegistryModule.getInstance().getNMSKey(itemstack); if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) { - final String itemName = NMSUtil.getInstance().getItemName(itemstack); + final String itemName = NMSUtil.getInstance().getItemName(itemstack, id); if (itemName != null) { - id = itemName; + if (!itemName.contains(":")) { + final int index = id.indexOf(":"); + final String modId = id.substring(0, index); + id = modId + ":" + itemName; + } else { + id = itemName; + } } } if (this.isObjectIdBanned(claim, id, BanType.ITEM)) { diff --git a/bukkit/src/main/java/com/griefdefender/permission/GDPermissions.java b/bukkit/src/main/java/com/griefdefender/permission/GDPermissions.java index beda132..304a8bb 100644 --- a/bukkit/src/main/java/com/griefdefender/permission/GDPermissions.java +++ b/bukkit/src/main/java/com/griefdefender/permission/GDPermissions.java @@ -160,6 +160,7 @@ public class GDPermissions { public static final String COMMAND_CLAIM_PERMISSION_PLAYER = "griefdefender.admin.claim.command.permission-player"; public static final String COMMAND_CLAIM_RESERVE = "griefdefender.admin.claim.command.reserve-name"; public static final String COMMAND_CLAIM_SCHEMATIC = "griefdefender.admin.claim.command.schematic"; + public static final String COMMAND_CLAIM_TAX_FORCE = "griefdefender.admin.claim.command.claim.tax.force"; public static final String COMMAND_IGNORE_CLAIMS = "griefdefender.admin.claim.command.ignore.base"; public static final String COMMAND_DELETE_CLAIM_BASE = "griefdefender.admin.claim.command.delete.base"; public static final String COMMAND_DELETE_CLAIMS = "griefdefender.admin.claim.command.delete-claims"; diff --git a/bukkit/src/main/java/com/griefdefender/provider/LuckPermsProvider.java b/bukkit/src/main/java/com/griefdefender/provider/LuckPermsProvider.java index 9814207..e3183be 100644 --- a/bukkit/src/main/java/com/griefdefender/provider/LuckPermsProvider.java +++ b/bukkit/src/main/java/com/griefdefender/provider/LuckPermsProvider.java @@ -387,8 +387,8 @@ public class LuckPermsProvider implements PermissionProvider { } } } - Map, Map> optionMap = this.getPermanentOptions(holder); - for (Entry, Map> mapEntry : optionMap.entrySet()) { + Map, Map>> optionMap = this.getPermanentOptions(holder); + for (Entry, Map>> mapEntry : optionMap.entrySet()) { for (Context context : mapEntry.getKey()) { if (context.getKey().equalsIgnoreCase("gd_claim") && context.getValue().equalsIgnoreCase(claimUniqueId.toString())) { this.clearPermissions(holder, mapEntry.getKey()); @@ -440,7 +440,7 @@ public class LuckPermsProvider implements PermissionProvider { return cachedData.getPermissionMap(); } - public Map getOptions(GDPermissionHolder holder, Set contexts) { + public Map> getOptions(GDPermissionHolder holder, Set contexts) { ImmutableContextSet set = this.getLPContexts(contexts).immutableCopy(); final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { @@ -450,9 +450,9 @@ public class LuckPermsProvider implements PermissionProvider { final QueryOptions query = QueryOptions.builder(QueryMode.CONTEXTUAL).option(DataQueryOrderFunction.KEY, DEFAULT_DATA_QUERY_ORDER).context(set).build(); CachedMetaData cachedData = permissionHolder.getCachedData().getMetaData(query); // TODO - Map metaMap = new HashMap<>(); + Map> metaMap = new HashMap<>(); for (Map.Entry> mapEntry : cachedData.getMeta().entrySet()) { - metaMap.put(mapEntry.getKey(), mapEntry.getValue().get(0)); + metaMap.put(mapEntry.getKey(), mapEntry.getValue()); } return metaMap; } @@ -543,14 +543,14 @@ public class LuckPermsProvider implements PermissionProvider { return transientPermissionMap; } - public Map, Map> getPermanentOptions(GDPermissionHolder holder) { + public Map, Map>> getPermanentOptions(GDPermissionHolder holder) { final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { return new HashMap<>(); } final Collection nodes = permissionHolder.data().toCollection(); - Map, Map> permanentPermissionMap = new TreeMap, Map>(CONTEXT_COMPARATOR); + Map, Map>> permanentPermissionMap = new TreeMap, Map>>(CONTEXT_COMPARATOR); for (Node node : nodes) { if (node.getType() != NodeType.META) { continue; @@ -558,26 +558,35 @@ public class LuckPermsProvider implements PermissionProvider { final MetaNode metaNode = (MetaNode) node; final Set contexts = getGPContexts(node.getContexts()); - Map metaEntry = permanentPermissionMap.get(contexts); + Map> metaEntry = permanentPermissionMap.get(contexts); if (metaEntry == null) { metaEntry = new HashMap<>(); - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + final List values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); permanentPermissionMap.put(contexts, metaEntry); } else { - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + List values = metaEntry.get(metaNode.getMetaKey()); + if (values == null) { + values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); + } else { + values.add(metaNode.getMetaValue()); + } } } return permanentPermissionMap; } - public Map, Map> getTransientOptions(GDPermissionHolder holder) { + public Map, Map>> getTransientOptions(GDPermissionHolder holder) { final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { return new HashMap<>(); } final Collection nodes = permissionHolder.transientData().toCollection(); - Map, Map> permanentPermissionMap = new TreeMap, Map>(CONTEXT_COMPARATOR); + Map, Map>> permanentPermissionMap = new TreeMap, Map>>(CONTEXT_COMPARATOR); for (Node node : nodes) { if (node.getType() != NodeType.META) { continue; @@ -585,64 +594,27 @@ public class LuckPermsProvider implements PermissionProvider { final MetaNode metaNode = (MetaNode) node; final Set contexts = getGPContexts(node.getContexts()); - Map metaEntry = permanentPermissionMap.get(contexts); + Map> metaEntry = permanentPermissionMap.get(contexts); if (metaEntry == null) { metaEntry = new HashMap<>(); - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + final List values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); permanentPermissionMap.put(contexts, metaEntry); } else { - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + List values = metaEntry.get(metaNode.getMetaKey()); + if (values == null) { + values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); + } else { + values.add(metaNode.getMetaValue()); + } } } return permanentPermissionMap; } - public Map getPermanentOptions(GDPermissionHolder holder, Set contexts) { - final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); - if (permissionHolder == null) { - return new HashMap<>(); - } - - final Collection nodes = permissionHolder.data().toCollection(); - final Map options = new HashMap<>(); - for (Node node : nodes) { - if (node.getType() != NodeType.META) { - continue; - } - - final MetaNode metaNode = (MetaNode) node; - if (contexts == null) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } else if (getGPContexts(node.getContexts()).containsAll(contexts)) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } - } - return options; - } - - public Map getTransientOptions(GDPermissionHolder holder, Set contexts) { - final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); - if (permissionHolder == null) { - return new HashMap<>(); - } - - final Collection nodes = permissionHolder.transientData().toCollection(); - final Map options = new HashMap<>(); - for (Node node : nodes) { - if (node.getType() != NodeType.META) { - continue; - } - - final MetaNode metaNode = (MetaNode) node; - if (contexts == null) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } else if (getGPContexts(node.getContexts()).containsAll(contexts)) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } - } - return options; - } - public Map, Map> getAllPermissions(GDPermissionHolder holder) { final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { diff --git a/bukkit/src/main/java/com/griefdefender/provider/PermissionProvider.java b/bukkit/src/main/java/com/griefdefender/provider/PermissionProvider.java index fb6dba2..5319884 100644 --- a/bukkit/src/main/java/com/griefdefender/provider/PermissionProvider.java +++ b/bukkit/src/main/java/com/griefdefender/provider/PermissionProvider.java @@ -138,21 +138,24 @@ public interface PermissionProvider { * Clears all permissions that contain {@link Context} * from passed holder. * - * @param claim The claim + * @param holder The holder + * @param context The context */ void clearPermissions(GDPermissionHolder holder, Context context); /** * Clears all permissions that contain {@link Context}'s - * from passed player. + * from passed holder. * - * @param claim The claim + * @param holder The holder + * @param contexts The contexts */ void clearPermissions(GDPermissionHolder holder, Set contexts); /** * Checks if holder has permission. * + * @param holder The holder * @param permission The permission * @return whether the holder has permission */ @@ -174,7 +177,7 @@ public interface PermissionProvider { * @param contexts The contexts required * @return An immutable map of cached options or empty if none. */ - Map getOptions(GDPermissionHolder holder, Set contexts); + Map> getOptions(GDPermissionHolder holder, Set contexts); /** * Gets all persisted permissions. @@ -205,7 +208,7 @@ public interface PermissionProvider { * @param holder The holder * @return An immutable map of persisted options or empty if none. */ - Map, Map> getPermanentOptions(GDPermissionHolder holder); + Map, Map>> getPermanentOptions(GDPermissionHolder holder); /** * Gets all transient options with associated contexts of holder. @@ -213,23 +216,7 @@ public interface PermissionProvider { * @param holder The holder * @return An immutable map of transient options or empty if none. */ - Map, Map> getTransientOptions(GDPermissionHolder holder); - - /** - * Gets all persisted options and associated values of holder. - * - * @param holder The holder - * @return An immutable map of persisted options or empty if none. - */ - Map getPermanentOptions(GDPermissionHolder holder, Set contexts); - - /** - * Gets all transient options and associated values of holder. - * - * @param holder The holder - * @return An immutable map of transient options or empty if none. - */ - Map getTransientOptions(GDPermissionHolder holder, Set contexts); + Map, Map>> getTransientOptions(GDPermissionHolder holder); /** * Gets all persisted permissions, including inherited nodes, with associated contexts of holder. diff --git a/bukkit/src/main/java/com/griefdefender/provider/permissionsex/PermissionsExProvider.java b/bukkit/src/main/java/com/griefdefender/provider/permissionsex/PermissionsExProvider.java index bc41f39..053e1e0 100644 --- a/bukkit/src/main/java/com/griefdefender/provider/permissionsex/PermissionsExProvider.java +++ b/bukkit/src/main/java/com/griefdefender/provider/permissionsex/PermissionsExProvider.java @@ -346,8 +346,9 @@ public class PermissionsExProvider implements PermissionProvider { } @Override - public Map getOptions(GDPermissionHolder holder, Set contexts) { - return holderToPEXSubject(holder).getOptions(contextsGDToPEX(contexts)); + public Map> getOptions(GDPermissionHolder holder, Set contexts) { + //return holderToPEXSubject(holder).getOptions(contextsGDToPEX(contexts)); + return new HashMap<>(); } @Override @@ -367,23 +368,15 @@ public class PermissionsExProvider implements PermissionProvider { } @Override - public Map, Map> getPermanentOptions(GDPermissionHolder holder) { - return tKeys(holderToPEXSubject(holder).data().get().getAllOptions()); + public Map, Map>> getPermanentOptions(GDPermissionHolder holder) { + //return tKeys(holderToPEXSubject(holder).data().get().getAllOptions()); + return new HashMap<>(); } @Override - public Map, Map> getTransientOptions(GDPermissionHolder holder) { - return tKeys(holderToPEXSubject(holder).transientData().get().getAllOptions()); - } - - @Override - public Map getPermanentOptions(GDPermissionHolder holder, Set contexts) { - return holderToPEXSubject(holder).data().get().getOptions(contextsGDToPEX(contexts)); - } - - @Override - public Map getTransientOptions(GDPermissionHolder holder, Set contexts) { - return holderToPEXSubject(holder).transientData().get().getOptions(contextsGDToPEX(contexts)); + public Map, Map>> getTransientOptions(GDPermissionHolder holder) { + //return tKeys(holderToPEXSubject(holder).transientData().get().getAllOptions()); + return new HashMap<>(); } @Override diff --git a/bukkit/src/main/java/com/griefdefender/storage/BaseStorage.java b/bukkit/src/main/java/com/griefdefender/storage/BaseStorage.java index 5f893ad..d76de67 100644 --- a/bukkit/src/main/java/com/griefdefender/storage/BaseStorage.java +++ b/bukkit/src/main/java/com/griefdefender/storage/BaseStorage.java @@ -431,8 +431,8 @@ public abstract class BaseStorage { } private void setDefaultOptions(Set contexts, Map defaultOptions) { - final Map, Map> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER); - final Map options = permanentOptions.get(contexts); + final Map, Map>> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER); + final Map> options = permanentOptions.get(contexts); GriefDefenderPlugin.getInstance().executor.execute(() -> { for (Map.Entry optionEntry : defaultOptions.entrySet()) { final Option option = OptionRegistryModule.getInstance().getById(optionEntry.getKey()).orElse(null); @@ -446,7 +446,7 @@ public abstract class BaseStorage { // Transient options are checked first so we must ignore setting if a persisted option exists boolean foundPersisted = false; if (options != null) { - for (Entry mapEntry : options.entrySet()) { + for (Entry> mapEntry : options.entrySet()) { if (mapEntry.getKey().equalsIgnoreCase(option.getPermission())) { foundPersisted = true; break; diff --git a/bukkit/src/main/java/com/griefdefender/storage/FileStorage.java b/bukkit/src/main/java/com/griefdefender/storage/FileStorage.java index 738a137..021fa4e 100644 --- a/bukkit/src/main/java/com/griefdefender/storage/FileStorage.java +++ b/bukkit/src/main/java/com/griefdefender/storage/FileStorage.java @@ -109,6 +109,10 @@ public class FileStorage extends BaseStorage { } public void registerWorld(World world) { + if (this.claimWorldManagers.get(world.getUID()) != null) { + return; + } + Environment dimType = world.getEnvironment(); final String worldName = world.getName().toLowerCase(); final String dimName = dimType.name().toLowerCase(); diff --git a/bukkit/src/main/java/com/griefdefender/task/ClaimBlockTask.java b/bukkit/src/main/java/com/griefdefender/task/ClaimBlockTask.java index c01c83d..7816b51 100644 --- a/bukkit/src/main/java/com/griefdefender/task/ClaimBlockTask.java +++ b/bukkit/src/main/java/com/griefdefender/task/ClaimBlockTask.java @@ -79,7 +79,7 @@ public class ClaimBlockTask extends BukkitRunnable { if ((currentTotal + accruedBlocks) > playerData.getMaxAccruedClaimBlocks()) { playerData.setAccruedClaimBlocks(playerData.getMaxAccruedClaimBlocks()); playerData.lastAfkCheckLocation = player.getLocation(); - return; + continue; } playerData.setAccruedClaimBlocks(playerData.getAccruedClaimBlocks() + accruedBlocks); diff --git a/bukkit/src/main/java/com/griefdefender/task/TaxApplyTask.java b/bukkit/src/main/java/com/griefdefender/task/TaxApplyTask.java index 7f90596..260600f 100644 --- a/bukkit/src/main/java/com/griefdefender/task/TaxApplyTask.java +++ b/bukkit/src/main/java/com/griefdefender/task/TaxApplyTask.java @@ -36,9 +36,7 @@ import com.griefdefender.api.permission.option.Options; import com.griefdefender.cache.PermissionHolderCache; import com.griefdefender.claim.GDClaim; import com.griefdefender.claim.GDClaimManager; -import com.griefdefender.configuration.GriefDefenderConfig; import com.griefdefender.economy.GDPaymentTransaction; -import com.griefdefender.event.GDCauseStackManager; import com.griefdefender.event.GDTaxClaimEvent; import com.griefdefender.permission.GDPermissionManager; import com.griefdefender.permission.GDPermissionUser; @@ -61,10 +59,10 @@ import java.util.UUID; public class TaxApplyTask extends BukkitRunnable { - Economy economy; + private static Economy economy; public TaxApplyTask() { - this.economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi(); + economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi(); int taxHour = GriefDefenderPlugin.getGlobalConfig().getConfig().economy.taxApplyHour; long delay = TaskUtil.computeDelay(taxHour, 0, 0); this.runTaskTimer(GDBootstrap.getInstance(), delay, 1728000L); @@ -73,8 +71,8 @@ public class TaxApplyTask extends BukkitRunnable { @SuppressWarnings({"unchecked", "rawtypes"}) @Override public void run() { - if (this.economy == null) { - this.economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi(); + if (economy == null) { + economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi(); } for (World world : Bukkit.getWorlds()) { if (!GriefDefenderPlugin.getInstance().claimsEnabledForWorld(world.getUID())) { @@ -123,7 +121,7 @@ public class TaxApplyTask extends BukkitRunnable { } } - private void handleClaimTax(GDClaim claim, GDPlayerData playerData, boolean inTown) { + public static void handleClaimTax(GDClaim claim, GDPlayerData playerData, boolean inTown) { final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(playerData.getUniqueId()); final OfflinePlayer player = user.getOfflinePlayer(); double taxRate = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), user, Options.TAX_RATE, claim); @@ -136,7 +134,7 @@ public class TaxApplyTask extends BukkitRunnable { final double taxBalance = claim.getEconomyData().getTaxBalance(); taxRate = event.getTaxRate(); taxOwed = taxBalance + (claim.getClaimBlocks() * taxRate); - final EconomyResponse response = EconomyUtil.getInstance().withdrawFunds(player, taxOwed); + final EconomyResponse response = EconomyUtil.getInstance().withdrawTax(claim, player, taxOwed); if (!response.transactionSuccess()) { final Instant localNow = Instant.now(); Instant taxPastDueDate = claim.getEconomyData().getTaxPastDueDate(); @@ -170,7 +168,7 @@ public class TaxApplyTask extends BukkitRunnable { .getEconomyData() .addPaymentTransaction(new GDPaymentTransaction(TransactionType.TAX, TransactionResultType.SUCCESS, Instant.now(), taxOwed)); if (town.getEconomyAccountId().isPresent()) { - this.economy.bankDeposit(town.getEconomyAccountId().get().toString(), taxOwed); + economy.bankDeposit(town.getEconomyAccountId().get().toString(), taxOwed); } } claim.getData().save(); diff --git a/bukkit/src/main/java/com/griefdefender/util/EconomyUtil.java b/bukkit/src/main/java/com/griefdefender/util/EconomyUtil.java index 50b9cb0..9d805e7 100644 --- a/bukkit/src/main/java/com/griefdefender/util/EconomyUtil.java +++ b/bukkit/src/main/java/com/griefdefender/util/EconomyUtil.java @@ -104,6 +104,31 @@ public class EconomyUtil { instance = new EconomyUtil(); } + public EconomyResponse withdrawTax(GDClaim claim, OfflinePlayer player, double taxOwed) { + if (GriefDefenderPlugin.getGlobalConfig().getConfig().economy.bankSystem) { + final EconomyResponse balanceResponse = this.vaultProvider.getApi().bankBalance(claim.getUniqueId().toString()); + if (balanceResponse.transactionSuccess() && balanceResponse.balance > 0) { + EconomyResponse withdrawResponse = null; + if (taxOwed == balanceResponse.balance || balanceResponse.balance > taxOwed) { + withdrawResponse = this.vaultProvider.getApi().bankWithdraw(claim.getUniqueId().toString(), taxOwed); + if (withdrawResponse.transactionSuccess()) { + claim.getData().getEconomyData().addPaymentTransaction( + new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, player.getUniqueId(), Instant.now(), taxOwed)); + return withdrawResponse; + } + } else { + withdrawResponse = this.vaultProvider.getApi().bankWithdraw(claim.getUniqueId().toString(), balanceResponse.balance); + if (withdrawResponse.transactionSuccess()) { + taxOwed -= balanceResponse.balance; + claim.getData().getEconomyData().addPaymentTransaction( + new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, player.getUniqueId(), Instant.now(), balanceResponse.balance)); + } + } + } + } + return this.withdrawFunds(player, taxOwed); + } + public EconomyResponse withdrawFunds(OfflinePlayer player, double funds) { final Double balance = this.vaultProvider.getApi().getBalance(player); if (funds < 0) { diff --git a/bukkit/src/main/java/com/griefdefender/util/PermissionUtil.java b/bukkit/src/main/java/com/griefdefender/util/PermissionUtil.java index 4dd9eb3..1ff43db 100644 --- a/bukkit/src/main/java/com/griefdefender/util/PermissionUtil.java +++ b/bukkit/src/main/java/com/griefdefender/util/PermissionUtil.java @@ -98,7 +98,7 @@ public class PermissionUtil { } public void addActiveContexts(Set contexts, GDPermissionHolder permissionHolder, GDPlayerData playerData, Claim claim) { - PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, null, null); + PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, playerData, claim); } public boolean containsDefaultContext(Set contexts) { @@ -145,7 +145,7 @@ public class PermissionUtil { return PERMISSION_PROVIDER.getPermissions(holder, contexts); } - public Map getOptions(GDPermissionHolder holder, Set contexts) { + public Map> getOptions(GDPermissionHolder holder, Set contexts) { return PERMISSION_PROVIDER.getOptions(holder, contexts); } @@ -161,22 +161,14 @@ public class PermissionUtil { return PERMISSION_PROVIDER.getTransientPermissions(holder); } - public Map, Map> getPermanentOptions(GDPermissionHolder holder) { + public Map, Map>> getPermanentOptions(GDPermissionHolder holder) { return PERMISSION_PROVIDER.getPermanentOptions(holder); } - public Map, Map> getTransientOptions(GDPermissionHolder holder) { + public Map, Map>> getTransientOptions(GDPermissionHolder holder) { return PERMISSION_PROVIDER.getTransientOptions(holder); } - public Map getPermanentOptions(GDPermissionHolder holder, Set contexts) { - return PERMISSION_PROVIDER.getPermanentOptions(holder, contexts); - } - - public Map getTransientOptions(GDPermissionHolder holder, Set contexts) { - return PERMISSION_PROVIDER.getTransientOptions(holder, contexts); - } - public Map, Map> getAllPermissions(GDPermissionHolder holder) { return PERMISSION_PROVIDER.getAllPermissions(holder); } diff --git a/bukkit/src/main/java/com/griefdefender/util/PlayerUtil.java b/bukkit/src/main/java/com/griefdefender/util/PlayerUtil.java index 2767fc4..d6c10fd 100644 --- a/bukkit/src/main/java/com/griefdefender/util/PlayerUtil.java +++ b/bukkit/src/main/java/com/griefdefender/util/PlayerUtil.java @@ -75,6 +75,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; import org.checkerframework.checker.nullness.qual.Nullable; @@ -373,4 +374,34 @@ public class PlayerUtil { return claim; } + + public Location getSafeClaimLocation(GDClaim claim) { + final int minClaimLevel = claim.getOwnerMinClaimLevel(); + double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65); + if (claim.isCuboid()) { + claimY = claim.lesserBoundaryCorner.getY(); + } + + final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1); + final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1); + Location claimCorner = null; + switch (randomCorner) { + case 1: // SW + claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random); + case 2: // NW + claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random); + case 3: // SE + claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random); + case 4: // NE + claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random); + } + + final Location safeLocation = SafeTeleportHelper.getInstance().getSafeLocation(claimCorner, 64, 16, 2).orElse(null); + if (safeLocation != null) { + return safeLocation; + } + + // If no safe location was found, fall back to corner + return claimCorner; + } } diff --git a/bukkit/src/main/resources/1.12.2.json b/bukkit/src/main/resources/1.12.2.json index 4a98435..0b0e0e2 100644 --- a/bukkit/src/main/resources/1.12.2.json +++ b/bukkit/src/main/resources/1.12.2.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.12.2", - "sha1": "a2dc91c2f88c19743fd0ae0a56fd5a66807be23b", - "path": "com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210101.002548-59.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210101.002548-59.jar" + "sha1": "9350289c71b1bf1e285dc15a3b4f2009023db3ae", + "path": "com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210111.053602-65.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210111.053602-65.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -42,21 +42,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -146,32 +146,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.13.2.json b/bukkit/src/main/resources/1.13.2.json index 73d0691..df1cdf7 100644 --- a/bukkit/src/main/resources/1.13.2.json +++ b/bukkit/src/main/resources/1.13.2.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.13.2", - "sha1": "909b2226df074a8a557eff3807527704dfcc7c1a", - "path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210101.002246-57.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210101.002246-57.jar" + "sha1": "854b3e6b5d94b5d4b9f0392858123041c860f836", + "path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210111.053702-60.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210111.053702-60.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.14.2.json b/bukkit/src/main/resources/1.14.2.json index 3f2a2a7..f5c5a03 100644 --- a/bukkit/src/main/resources/1.14.2.json +++ b/bukkit/src/main/resources/1.14.2.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.14.2", - "sha1": "d23791e720f7f225c469d10cbde04ea972f8f725", - "path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210101.004044-57.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210101.004044-57.jar" + "sha1": "6f638a64099128bae726b0a644f49338399bd958", + "path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210111.053844-59.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210111.053844-59.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.14.3.json b/bukkit/src/main/resources/1.14.3.json index 4f9f63e..2b5a1d9 100644 --- a/bukkit/src/main/resources/1.14.3.json +++ b/bukkit/src/main/resources/1.14.3.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.14.3", - "sha1": "b583a2b1478f6cceddd73f7537c567dddef88269", - "path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210101.001718-59.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210101.001718-59.jar" + "sha1": "1bf95706a45fce471714ef8733816f648243837f", + "path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210111.054136-60.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210111.054136-60.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.14.4.json b/bukkit/src/main/resources/1.14.4.json index 7bfb862..ccd72d3 100644 --- a/bukkit/src/main/resources/1.14.4.json +++ b/bukkit/src/main/resources/1.14.4.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.14.4", - "sha1": "f198c2d3284df26b37f8bebde06c52c25adc497f", - "path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210101.001540-57.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210101.001540-57.jar" + "sha1": "1744b2962c74912b6c0745d75550ca374a2c0d81", + "path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210111.054342-58.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210111.054342-58.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.15.2.json b/bukkit/src/main/resources/1.15.2.json index 7c2bf24..86c5432 100644 --- a/bukkit/src/main/resources/1.15.2.json +++ b/bukkit/src/main/resources/1.15.2.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.15.2", - "sha1": "4130d6349f5d666bca4bb7663debb3ee0facbfaa", - "path": "com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210101.001123-40.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210101.001123-40.jar" + "sha1": "77a4e2d849d26c2b4c888f35f5b2b9d1de17b1ec", + "path": "com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210111.054736-41.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210111.054736-41.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.15.json b/bukkit/src/main/resources/1.15.json index faf6062..6d2adad 100644 --- a/bukkit/src/main/resources/1.15.json +++ b/bukkit/src/main/resources/1.15.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.15", - "sha1": "278cacea6b2e11f208085e95bc3e5cae23cb47e6", - "path": "com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210101.001354-40.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210101.001354-40.jar" + "sha1": "b35127c49c436ad710313369bc35c91977b647a4", + "path": "com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210111.054552-41.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210111.054552-41.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.16.1.json b/bukkit/src/main/resources/1.16.1.json index 453a76f..ffdfb67 100644 --- a/bukkit/src/main/resources/1.16.1.json +++ b/bukkit/src/main/resources/1.16.1.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.16.1", - "sha1": "35ca9f23b6258d4d519657c38a33861734312cba", - "path": "com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210101.000900-21.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210101.000900-21.jar" + "sha1": "3d638213ae52c0a55749d8e0764afab33e53e8f4", + "path": "com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210111.055030-22.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210111.055030-22.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.16.2.json b/bukkit/src/main/resources/1.16.2.json index fd8ae28..ea1cc2e 100644 --- a/bukkit/src/main/resources/1.16.2.json +++ b/bukkit/src/main/resources/1.16.2.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.16.2", - "sha1": "2120729220d0a9d834398759a8bd5b85aaae0908", - "path": "com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210101.000516-14.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210101.000516-14.jar" + "sha1": "9c7386be3b14d87500375005b68d4a7c1d947afb", + "path": "com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210111.055250-15.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210111.055250-15.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.16.4.json b/bukkit/src/main/resources/1.16.4.json index 2b4a67a..ba41641 100644 --- a/bukkit/src/main/resources/1.16.4.json +++ b/bukkit/src/main/resources/1.16.4.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.16.4", - "sha1": "839c9998f0baf77155a7adf3a693117649253b8d", - "path": "com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210101.000151-15.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210101.000151-15.jar" + "sha1": "0b477824841be8d813b591b9ab46cb40f78ce4db", + "path": "com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210111.055442-16.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210111.055442-16.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -48,21 +48,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -152,32 +152,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/1.8.8.json b/bukkit/src/main/resources/1.8.8.json index 60c2194..dc14f3d 100644 --- a/bukkit/src/main/resources/1.8.8.json +++ b/bukkit/src/main/resources/1.8.8.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter:1.8.8", - "sha1": "f26ea115bb8b504e4ec448a16008f1ec46d0f1d3", - "path": "com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210101.002757-57.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210101.002757-57.jar" + "sha1": "027d23621f322901c6a2e0ed9876f5e03f22505f", + "path": "com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210111.053523-62.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210111.053523-62.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -42,21 +42,21 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT", - "sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb", - "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar" + "sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95", + "path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar" }, { "name": "co.aikar:acf-paper:0.5.0-SNAPSHOT", - "sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c", - "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar" + "sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60", + "path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -146,32 +146,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1", diff --git a/bukkit/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml index d56a987..0b66f27 100644 --- a/bukkit/src/main/resources/plugin.yml +++ b/bukkit/src/main/resources/plugin.yml @@ -3,5 +3,6 @@ main: com.griefdefender.GDBootstrap softdepend: [dynmap, PlaceholderAPI, WorldEdit, WorldGuard, Vault] depend: [LuckPerms] load: STARTUP -version: '1.5.9' +loadafter: [EliteEnchantments] +version: '1.5.10' api-version: 1.13 diff --git a/common/src/main/resources/assets/lang/pl_PL.conf b/common/src/main/resources/assets/lang/pl_PL.conf index bded800..c6225cd 100644 --- a/common/src/main/resources/assets/lang/pl_PL.conf +++ b/common/src/main/resources/assets/lang/pl_PL.conf @@ -72,11 +72,11 @@ GriefDefender { trapped="Teleportuje w bezpieczne miejsce w przypadku utknięcia." trust-access="Pozwala graczowi na interakcje z działką poza schowkami i ekwipunkiem." trust-container="Pozwala graczowi na interakcje z działką, w tym ze schowkami i ekwipunkiem." - trust-group="Zezwala grupie na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." - trust-group-all="Zezwala grupie na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." + trust-group="Zezwala grupie na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." + trust-group-all="Zezwala grupie na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." trust-list="Zarządzanie zaufanymi osobami dla działki, na której stoisz." - trust-player="Zezwala graczowi na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." - trust-player-all="Zezwala graczowi na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." + trust-player="Zezwala graczowi na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." + trust-player-all="Zezwala graczowi na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki." untrust-group="Usuwa grupę z listy dostępu do działki." untrust-group-all="Usuwa grupę z list dostępu do wszystkich działek." untrust-player="Usuwa gracza z listy dostępu do działki." @@ -515,7 +515,7 @@ GriefDefender { flag-ui-override-no-permission="Ta flaga została nadpisana przez administratora i &n&cNIE MOŻE&f być zmieniona." flag-ui-override-permission="&fFlaga &r{flag}&f jest obecnie &cnadpisana&f przez administratora.\nKliknij aby usunąć." flag-ui-return-flags="Powrót do flag" - label-accessors=Goście + label-accessors=Gość label-all=Wszystko label-area=Obszar label-available=Dostępne @@ -527,7 +527,7 @@ GriefDefender { label-children=dziedziczące label-claim=Działka label-confirm=Potwierdź - label-containers=Pojemniki + label-containers=Magazynier label-context=Kontekst label-created=Stworzone label-day=Dzień @@ -804,7 +804,7 @@ GriefDefender { title-builder=BUDOWNICZY title-buy=KUP title-claim=DZIAŁKA - title-container=POJEMNIK + title-container=MAGAZYNIER title-default=DOMYŚLNE title-group=GROUP title-inherit=DZIEDZICZENIE @@ -828,7 +828,7 @@ GriefDefender { trust-click-show-list="Kliknij aby wyświetlić zaufanych graczy i grupy." trust-grant="&6{target} &aotrzymuje permisję {type}&a na obecnej działce." trust-individual-all-claims="&6{player}&a ma teraz pełny dostęp do wszystkich Twoich działek. Aby wycofać te permisje na WSZYSTKICH działkach, użyj komendy &f/untrustall&a." - trust-invalid="&cNiewłaściwy typ 'trust'.\nDostępne typy to : accessor (Gość), builder (Budowniczy), container (Pojemnik), and manager (Manager)." + trust-invalid="&cNiewłaściwy typ 'trust'.\nDostępne typy to : accessor (Gość), builder (Budowniczy), container (Magazynier), oraz manager (Manager)." trust-list-header="Sprecyzowane permisje są tu:" trust-no-claims="&cNie masz działek, żeby nadać permisje." trust-plugin-cancel="&cNie można nadać praw {target}&c. Plugin odmówił." diff --git a/common/src/main/resources/assets/lang/zh_CN.conf b/common/src/main/resources/assets/lang/zh_CN.conf index cbb473b..017fbc4 100644 --- a/common/src/main/resources/assets/lang/zh_CN.conf +++ b/common/src/main/resources/assets/lang/zh_CN.conf @@ -854,4 +854,4 @@ GriefDefender { untrust-self="&c您不能移除自己的信任权限。" visual-update-in-progress="&a更新领地选区可视化效果。还需等待 &6{count}&a 个方块的效果渲染。请稍作等待。" } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 2ad74f4..9ab3b39 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,14 +2,14 @@ name=GriefDefender group=com.griefdefender url=https://github.com/bloodmc/GriefDefender -version=1.5.9 +version=1.5.10 apiVersion=1.0.0-20201225.034857-27 # Bukkit -adapterVersion=1.16.4-20210101.000151-15 +adapterVersion=1.16.4-20210111.055442-16 spigotVersion=1.16.4-R0.1-SNAPSHOT # Sponge -adapterSpongeVersion=1.12.2-20210101.010513-16 -commonVersion=1.12.2-7.1.7-SNAPSHOT +adapterSpongeVersion=1.12.2-20210115.020835-20 +commonVersion=1.12.2-7.3.0 minecraftVersion=1.12.2 mcpMappings=snapshot_20180808 diff --git a/sponge/build.gradle b/sponge/build.gradle index c473781..bbb6808 100644 --- a/sponge/build.gradle +++ b/sponge/build.gradle @@ -115,11 +115,12 @@ sourceSets { dependencies { compileOnly(project(path: ":GriefDefenderAPI")) + compileOnly fileTree(dir: 'libs', include: ['*.jar']) compile project (':common') compileOnly "com.griefdefender:adapter-sponge:$adapterSpongeVersion" compileOnly "com.griefdefender:reflect-helper:1.0" // Sponge - apiCompile "org.spongepowered:spongeapi:$apiVersion" + //apiCompile "org.spongepowered:spongeapi:$apiVersion" compileOnly ("org.spongepowered:spongecommon:$commonVersion:dev") { exclude module: 'testplugins' @@ -128,10 +129,10 @@ dependencies { compileOnly ("io.github.nucleuspowered:nucleus-api:1.14.1-S7.1"){ exclude module: 'spongeapi' } - compile "com.github.rojo8399:PlaceholderAPI:4.5.1" - compile "com.github.bloodmc:mcclans-api:develop-SNAPSHOT" + //compile "com.github.randombyte-developer:PlaceholderAPI:4.5.1" + //compile "com.github.bloodmc:mcclans-api:develop-SNAPSHOT" compileOnly "com.sk89q.worldedit:worldedit-core:6.1.4-SNAPSHOT" - compileOnly "com.github.lucko:luckperms:master-SNAPSHOT" + compileOnly "com.github.lucko:luckperms:v5.2" compileOnly "us.dynmap:dynmap-api:3.0-SNAPSHOT" // required for bootstrap @@ -156,10 +157,10 @@ dependencies { compileOnly "org.jetbrains:annotations:17.0.0" compileOnly "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" compileOnly "org.ow2.asm:asm-debug-all:5.2" - compileOnly "org.spongepowered:configurate-core:3.7-SNAPSHOT" - compileOnly "org.spongepowered:configurate-gson:3.7-SNAPSHOT" - compileOnly "org.spongepowered:configurate-hocon:3.7-SNAPSHOT" - compileOnly "org.spongepowered:configurate-yaml:3.7-SNAPSHOT" + compileOnly "org.spongepowered:configurate-core:3.7.2" + compileOnly "org.spongepowered:configurate-gson:3.7.2" + compileOnly "org.spongepowered:configurate-hocon:3.7.2" + compileOnly "org.spongepowered:configurate-yaml:3.7.2" compileOnly "net.kyori:event-api:3.0.0" compileOnly "net.kyori:event-method:3.0.0" compileOnly "net.kyori:event-method-asm:3.0.0" diff --git a/sponge/src/main/java/com/griefdefender/GDPlayerData.java b/sponge/src/main/java/com/griefdefender/GDPlayerData.java index 5a033f0..f3ed3e0 100644 --- a/sponge/src/main/java/com/griefdefender/GDPlayerData.java +++ b/sponge/src/main/java/com/griefdefender/GDPlayerData.java @@ -116,6 +116,7 @@ public class GDPlayerData implements PlayerData { public boolean townChat = false; public boolean lockPlayerDeathDrops = false; public boolean trappedRequest = false; + public boolean runningPlayerCommands = false; public List chatLines = new ArrayList<>(); public Instant recordChatTimestamp; public Instant commandInputTimestamp; diff --git a/sponge/src/main/java/com/griefdefender/command/ClaimOptionBase.java b/sponge/src/main/java/com/griefdefender/command/ClaimOptionBase.java index adf4089..a7ae01d 100644 --- a/sponge/src/main/java/com/griefdefender/command/ClaimOptionBase.java +++ b/sponge/src/main/java/com/griefdefender/command/ClaimOptionBase.java @@ -384,7 +384,7 @@ public abstract class ClaimOptionBase extends BaseCommand { overrideContexts.add(claim.getOverrideClaimContext()); Map filteredContextMap = new HashMap<>(); - for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) { + for (Map.Entry, Map>> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) { final Set contextSet = mapEntry.getKey(); if (contextSet.contains(claim.getDefaultTypeContext()) || (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT)))) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); @@ -421,7 +421,7 @@ public abstract class ClaimOptionBase extends BaseCommand { } } - for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { + for (Map.Entry, Map>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { final Set contextSet = mapEntry.getKey(); if (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT))) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); @@ -430,11 +430,11 @@ public abstract class ClaimOptionBase extends BaseCommand { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue()); } if (displayType != MenuType.DEFAULT) { - if (claim.isTown() || isAdmin) { + //if (claim.isTown() || isAdmin) { if (contextSet.contains(claim.getContext())) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.CLAIM, mapEntry.getValue()); } - } + //} if (contextSet.contains(ClaimContexts.GLOBAL_OVERRIDE_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_OVERRIDE_CONTEXT))) { this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.OVERRIDE, mapEntry.getValue()); } @@ -452,7 +452,7 @@ public abstract class ClaimOptionBase extends BaseCommand { Collections.reverse(inheritParents); for (Claim current : inheritParents) { GDClaim currentClaim = (GDClaim) current; - for (Map.Entry, Map> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { + for (Map.Entry, Map>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) { final Set contextSet = mapEntry.getKey(); if (contextSet.contains(currentClaim.getContext())) { inheritPermissionMap.put(mapEntry.getKey(), new ClaimClickData(currentClaim, mapEntry.getValue())); @@ -518,10 +518,10 @@ public abstract class ClaimOptionBase extends BaseCommand { paginationList.sendTo(player, activePage); } - private void addFilteredContexts(GDPermissionUser src, Map filteredContextMap, Set contexts, MenuType type, Map permissions) { + private void addFilteredContexts(GDPermissionUser src, Map filteredContextMap, Set contexts, MenuType type, Map> permissions) { final Player player = src.getOnlinePlayer(); final GDPlayerData playerData = src.getInternalPlayerData(); - for (Map.Entry permissionEntry : permissions.entrySet()) { + for (Map.Entry> permissionEntry : permissions.entrySet()) { final Option option = OptionRegistryModule.getInstance().getById(permissionEntry.getKey()).orElse(null); if (option == null) { continue; @@ -544,10 +544,21 @@ public abstract class ClaimOptionBase extends BaseCommand { } } final OptionData optionData = filteredContextMap.get(permissionEntry.getKey()); + String optionValue = permissionEntry.getValue().get(0); + if (option.multiValued()) { + optionValue = ""; + for (String entry : permissionEntry.getValue()) { + if (optionValue.isEmpty()) { + optionValue += entry; + } else { + optionValue = optionValue + "\\|" + entry; + } + } + } if (optionData != null) { - optionData.addContexts(option, permissionEntry.getValue(), type, contexts); + optionData.addContexts(option, optionValue, type, contexts); } else { - filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, permissionEntry.getValue(), type, contexts)); + filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, optionValue, type, contexts)); } } } diff --git a/sponge/src/main/java/com/griefdefender/command/CommandClaimCreate.java b/sponge/src/main/java/com/griefdefender/command/CommandClaimCreate.java index 744a02f..d4fe11a 100644 --- a/sponge/src/main/java/com/griefdefender/command/CommandClaimCreate.java +++ b/sponge/src/main/java/com/griefdefender/command/CommandClaimCreate.java @@ -88,6 +88,13 @@ public class CommandClaimCreate extends BaseCommand { return; } + final int radiusLimit = GriefDefenderPlugin.getGlobalConfig().getConfig().claim.claimCreateRadiusLimit; + if (radius > radiusLimit) { + GriefDefenderPlugin.sendMessage(player, GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_FAILED_RESULT, + ImmutableMap.of("reason", "Radius exceeds limit of " + radiusLimit + "."))); + return; + } + final Vector3i lesserBoundary = new Vector3i( location.getBlockX() - radius, minClaimLevel, diff --git a/sponge/src/main/java/com/griefdefender/command/CommandClaimRent.java b/sponge/src/main/java/com/griefdefender/command/CommandClaimRent.java index 8ebf001..d4efd67 100644 --- a/sponge/src/main/java/com/griefdefender/command/CommandClaimRent.java +++ b/sponge/src/main/java/com/griefdefender/command/CommandClaimRent.java @@ -33,6 +33,8 @@ import co.aikar.commands.annotation.Description; import co.aikar.commands.annotation.Optional; import co.aikar.commands.annotation.Subcommand; import co.aikar.commands.annotation.Syntax; + +import com.flowpowered.math.vector.Vector3i; import com.google.common.collect.ImmutableMap; import com.griefdefender.GDPlayerData; import com.griefdefender.GriefDefenderPlugin; @@ -45,6 +47,7 @@ import com.griefdefender.claim.GDClaim; import com.griefdefender.claim.GDClaimManager; import com.griefdefender.configuration.MessageStorage; import com.griefdefender.internal.pagination.PaginationList; +import com.griefdefender.internal.util.VecHelper; import com.griefdefender.permission.GDPermissionUser; import com.griefdefender.permission.GDPermissions; import com.griefdefender.text.action.GDCallbackHolder; @@ -61,6 +64,8 @@ import net.kyori.text.event.HoverEvent; import net.kyori.text.format.TextColor; import net.kyori.text.format.TextDecoration; import net.kyori.text.serializer.plain.PlainComponentSerializer; + +import org.spongepowered.api.block.tileentity.Sign; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.service.economy.account.Account; @@ -127,8 +132,13 @@ public class CommandClaimRent extends BaseCommand { } return; } - - EconomyUtil.getInstance().rentCancelConfirmation(player, claim, null); + + Sign sign = null; + final Vector3i signPos = claim.getEconomyData().getRentSignPosition(); + if (signPos != null) { + sign = SignUtil.getSign(VecHelper.toLocation(player.getWorld(), signPos)); + } + EconomyUtil.getInstance().rentCancelConfirmation(player, claim, sign); return; } else if (subCommand.equalsIgnoreCase("clearbalance")) { if (args.length != 2) { diff --git a/sponge/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java b/sponge/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java index 382b51a..96d19b9 100644 --- a/sponge/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java +++ b/sponge/src/main/java/com/griefdefender/command/gphelper/CommandTrapped.java @@ -45,18 +45,15 @@ import com.griefdefender.configuration.MessageStorage; import com.griefdefender.permission.GDPermissionManager; import com.griefdefender.permission.GDPermissions; import com.griefdefender.permission.option.GDOptions; +import com.griefdefender.util.PlayerUtil; import java.time.Duration; import java.time.Instant; -import java.util.concurrent.ThreadLocalRandom; -import org.spongepowered.api.Sponge; import org.spongepowered.api.data.key.Keys; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.gamemode.GameMode; import org.spongepowered.api.entity.living.player.gamemode.GameModes; -import org.spongepowered.api.world.Location; -import org.spongepowered.api.world.World; @CommandAlias("%griefdefender") @CommandPermission(GDPermissions.COMMAND_TRAPPED) @@ -111,34 +108,7 @@ public class CommandTrapped extends BaseCommand { return; } - final int minClaimLevel = claim.getOwnerMinClaimLevel(); - double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65); - if (claim.isCuboid()) { - claimY = claim.lesserBoundaryCorner.getY(); - } - - final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1); - final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1); - Location claimCorner = null; - switch (randomCorner) { - case 1: // SW - claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random); - case 2: // NW - claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random); - case 3: // SE - claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random); - case 4: // NE - claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random); - } - - final Location safeLocation = Sponge.getTeleportHelper().getSafeLocation(claimCorner, 64, 16, 2).orElse(null); - if (safeLocation != null) { - playerData.teleportLocation = safeLocation; - } else { - // If no safe location was found, fall back to corner - playerData.teleportLocation = claimCorner; - } - + playerData.teleportLocation = PlayerUtil.getInstance().getSafeClaimLocation(claim); int teleportDelay = 0; if (GDOptions.PLAYER_TELEPORT_DELAY) { teleportDelay = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.PLAYER_TELEPORT_DELAY, claim); diff --git a/sponge/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java b/sponge/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java index 056b09d..5c6cf74 100644 --- a/sponge/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java +++ b/sponge/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java @@ -50,6 +50,8 @@ public class ClaimCategory extends ConfigCategory { + "\nNote: If in economy-mode, use setting 'use-claim-block-task' under economy category." + "\nNote: To configure amount accrued, see 'blocks-accrued-per-hour' option at https://github.com/bloodmc/GriefDefender/wiki/Options-(Meta)#global-options") public boolean claimBlockTask = true; + @Setting(value = "claim-create-radius-limit", comment = "The radius limit for the /claimcreate command. (Default: 256)") + public int claimCreateRadiusLimit = 256; @Setting(value = "worldedit-schematics", comment = "Whether to use WorldEdit for schematics. Default: false" + "\nNote: If you were using schematics in older GD/GP versions and want old schematics to work then you should keep this setting disabled.") public boolean useWorldEditSchematics = false; diff --git a/sponge/src/main/java/com/griefdefender/configuration/category/ModCategory.java b/sponge/src/main/java/com/griefdefender/configuration/category/ModCategory.java index ad8f456..f293811 100644 --- a/sponge/src/main/java/com/griefdefender/configuration/category/ModCategory.java +++ b/sponge/src/main/java/com/griefdefender/configuration/category/ModCategory.java @@ -25,7 +25,11 @@ package com.griefdefender.configuration.category; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import org.apache.commons.io.FilenameUtils; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -36,9 +40,22 @@ public class ModCategory { @Setting(value = "block-id-convert-list", comment = "Used to override generic block id's to their actual id during TE and item usage if available. Add the target block id to list if you want to force a conversion when detected." + "\nNote: This is useful for mods such as IC2 which uses the generic id 'ic2:te' for its multi-block.") public List blockIdConvertList = new ArrayList<>(); + @Setting(value = "tile-id-nbt-map", comment = "Used to override generic tileentity id's to their actual id during TE usage. Add the target TE id as key and NBT key where ID is stored as value." + + "\nNote: This is useful for mods such as Gregtech which uses the generic id 'gregtech:machine' for its TE and NBT key 'MetaId' to store the actual ID.") + public Map tileIdNbtMap = new HashMap<>(); + @Setting(value = "item-interact-force-list", comment = "Used to force interact-item flag checks when a player left/right-clicks with an item in hand." + + "\nBy default, GD will only check interact-item flags when the item is used." + + "\nTo force an item, add the item 'modid:name' to list." + + "\nNote: Names support wildcards '?' and '*' by using Apache's wildcard matcher." + + "\nThe wildcard '?' represents a single character." + + "\nThe wildcard '*' represents zero or more characters." + + "\nFor more information on usage, see https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FilenameUtils.html#wildcardMatch(java.lang.String,%20java.lang.String)") + public List itemInteractForceList = new ArrayList<>(); public ModCategory() { + this.blockIdConvertList.add("gregtech:machine"); this.blockIdConvertList.add("ic2:te"); + this.tileIdNbtMap.put("gregtech:machine", "MetaId"); } public boolean convertBlockId(String id) { @@ -47,4 +64,17 @@ public class ModCategory { } return false; } + + public String getNbtKey(String tileId) { + return this.tileIdNbtMap.get(tileId); + } + + public boolean forceItemInteract(String id) { + for (String str : this.itemInteractForceList) { + if (FilenameUtils.wildcardMatch(id, str)) { + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/sponge/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java b/sponge/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java index aef6d4b..04d4c0c 100644 --- a/sponge/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java +++ b/sponge/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java @@ -86,8 +86,8 @@ public class FlagDefinitionSerializer implements TypeSerializer Set flagContexts = new HashSet<>(); for (String part : parts) { String[] split = part.split("="); - String key = split[0]; - String value = split[1]; + String key = split[0].toLowerCase(); + String value = split[1].toLowerCase(); // Handle linked Flag if (key.equalsIgnoreCase("flag")) { final String flagName = value; @@ -108,11 +108,6 @@ public class FlagDefinitionSerializer implements TypeSerializer } flagContexts.add(new Context(key, value)); break; - case "used_item": - case "item_name": - case ContextKeys.STATE: - flagContexts.add(new Context(key, value)); - break; case "server": case "world": case ContextKeys.CLAIM_DEFAULT: @@ -120,7 +115,8 @@ public class FlagDefinitionSerializer implements TypeSerializer // gd_claim contexts should always be set at the definition level throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'.\nContext '" + key + "' can only be used for the definition."); default: - throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'."); + flagContexts.add(new Context(key, value)); + break; } } } diff --git a/sponge/src/main/java/com/griefdefender/listener/BlockEventHandler.java b/sponge/src/main/java/com/griefdefender/listener/BlockEventHandler.java index d1e2975..40dfdb7 100644 --- a/sponge/src/main/java/com/griefdefender/listener/BlockEventHandler.java +++ b/sponge/src/main/java/com/griefdefender/listener/BlockEventHandler.java @@ -217,12 +217,6 @@ public class BlockEventHandler { return; } - if (source instanceof Player && !hasFakePlayer && tileEntity == null) { - // handle in normal events - GDTimings.BLOCK_PRE_EVENT.stopTimingIfSync(); - return; - } - if (sourceLocation != null) { GDPlayerData playerData = null; if (user != null) { @@ -790,29 +784,6 @@ public class BlockEventHandler { return; } - // handle ice form/melt - if (event.getTransactions().size() == 1) { - final BlockSnapshot sourceBlock = event.getTransactions().get(0).getOriginal(); - final BlockSnapshot targetBlock = event.getTransactions().get(0).getFinal(); - if (NMSUtil.getInstance().isBlockWater(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockIce(targetBlock.getState().getType())) { - final Location loc = targetBlock.getLocation().get(); - final GDClaim claim = this.dataStore.getClaimAt(loc); - final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, (Player) null, true); - if (result == Tristate.FALSE) { - event.setCancelled(true); - } - return; - } else if (NMSUtil.getInstance().isBlockIce(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockWater(targetBlock.getState().getType())) { - final Location loc = targetBlock.getLocation().get(); - final GDClaim claim = this.dataStore.getClaimAt(loc); - final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, (Player) null, true); - if (result == Tristate.FALSE) { - event.setCancelled(true); - } - return; - } - } - ItemStackSnapshot itemSnapshot = event.getContext().get(EventContextKeys.USED_ITEM).orElse(null); if (itemSnapshot != null) { if (itemSnapshot.getType().equals(ItemTypes.BUCKET)) { @@ -824,6 +795,29 @@ public class BlockEventHandler { GDClaim sourceClaim = null; LocatableBlock locatable = null; final User user = CauseContextHelper.getEventUser(event); + // handle ice form/melt + if (!(event.getCause().root() instanceof Entity) && event.getTransactions().size() == 1) { + final BlockSnapshot sourceBlock = event.getTransactions().get(0).getOriginal(); + final BlockSnapshot targetBlock = event.getTransactions().get(0).getFinal(); + if (NMSUtil.getInstance().isBlockWater(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockIce(targetBlock.getState().getType())) { + final Location loc = targetBlock.getLocation().get(); + final GDClaim claim = this.dataStore.getClaimAt(loc); + final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, user, true); + if (result == Tristate.FALSE) { + event.setCancelled(true); + } + return; + } else if (NMSUtil.getInstance().isBlockIce(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockWater(targetBlock.getState().getType())) { + final Location loc = targetBlock.getLocation().get(); + final GDClaim claim = this.dataStore.getClaimAt(loc); + final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, user, true); + if (result == Tristate.FALSE) { + event.setCancelled(true); + } + return; + } + } + if (source instanceof LocatableBlock) { locatable = (LocatableBlock) source; if (user != null && user instanceof Player) { diff --git a/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java b/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java index a67f1df..8d90d24 100644 --- a/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java +++ b/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java @@ -35,11 +35,15 @@ import org.spongepowered.api.Sponge; import org.spongepowered.api.data.key.Keys; import org.spongepowered.api.entity.Entity; import org.spongepowered.api.entity.Item; +import org.spongepowered.api.entity.Transform; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.gamemode.GameMode; import org.spongepowered.api.entity.living.player.gamemode.GameModes; import org.spongepowered.api.entity.projectile.Projectile; +import org.spongepowered.api.event.Cancellable; +import org.spongepowered.api.event.Event; import org.spongepowered.api.event.entity.MoveEntityEvent; +import org.spongepowered.api.event.entity.living.humanoid.player.RespawnPlayerEvent; import org.spongepowered.api.item.inventory.ItemStack; import org.spongepowered.api.text.Text; import org.spongepowered.api.world.Location; @@ -103,11 +107,15 @@ public class CommonEntityEventHandler { this.storage = GriefDefenderPlugin.getInstance().dataStore; } - public boolean onEntityMove(MoveEntityEvent event, Location fromLocation, Location toLocation, Entity targetEntity){ + public boolean onEntityMove(Event event, Location fromLocation, Location toLocation, Entity targetEntity){ if (targetEntity instanceof Item || targetEntity instanceof Projectile) { return true; } + if ((!GDFlags.ENTER_CLAIM && !GDFlags.EXIT_CLAIM) || fromLocation.getBlockPosition().equals(toLocation.getBlockPosition())) { + return true; + } + Player player = null; GDPermissionUser user = null; boolean onMount = false; @@ -127,9 +135,6 @@ public class CommonEntityEventHandler { } } } - if ((!GDFlags.ENTER_CLAIM && !GDFlags.EXIT_CLAIM) || fromLocation.getBlockPosition().equals(toLocation.getBlockPosition())) { - return true; - } if (user != null) { if (user.getInternalPlayerData().trappedRequest) { GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().COMMAND_TRAPPED_CANCEL_MOVE); @@ -137,6 +142,11 @@ public class CommonEntityEventHandler { user.getInternalPlayerData().teleportDelay = 0; } } + if (player != null && user != null) { + if (event instanceof MoveEntityEvent.Teleport && user.getInternalPlayerData().runningPlayerCommands) { + return true; + } + } World world = targetEntity.getWorld(); if (!GriefDefenderPlugin.getInstance().claimsEnabledForWorld(world.getUniqueId())) { @@ -168,27 +178,32 @@ public class CommonEntityEventHandler { // enter if (GDFlags.ENTER_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, toLocation, toClaim, Flags.ENTER_CLAIM, targetEntity, targetEntity, user) == Tristate.FALSE) { gpEvent.cancelled(true); - if (event != null) { - event.setCancelled(true); + if (event != null && event instanceof Cancellable) { + ((Cancellable) event).setCancelled(true); } } // exit if (GDFlags.EXIT_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, fromLocation, fromClaim, Flags.EXIT_CLAIM, targetEntity, targetEntity, user) == Tristate.FALSE) { gpEvent.cancelled(true); - if (event != null) { - event.setCancelled(true); + if (event != null && event instanceof Cancellable) { + ((Cancellable) event).setCancelled(true); } } GriefDefender.getEventManager().post(gpEvent); if (gpEvent.cancelled()) { - if (event != null) { - event.setCancelled(true); + if (event != null && event instanceof Cancellable) { + ((Cancellable) event).setCancelled(true); } if (!(targetEntity instanceof Player) && EntityUtils.getOwnerUniqueId(targetEntity) == null) { targetEntity.remove(); } + if (event instanceof RespawnPlayerEvent) { + // Respawn player in safe location in source claim + ((RespawnPlayerEvent) event).setToTransform(new Transform(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim))); + } + GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync(); return false; } } @@ -237,10 +252,11 @@ public class CommonEntityEventHandler { GDBorderClaimEvent gpEvent = new GDBorderClaimEvent(targetEntity, fromClaim, toClaim); if (user != null && toClaim.isUserTrusted(user, TrustTypes.ACCESSOR)) { - final GDPlayerData playerData = user.getInternalPlayerData(); GriefDefender.getEventManager().post(gpEvent); if (gpEvent.cancelled()) { - event.setCancelled(true); + if (event instanceof Cancellable) { + ((Cancellable) event).setCancelled(true); + } if (!(targetEntity instanceof Player) && EntityUtils.getOwnerUniqueId(targetEntity) == null) { targetEntity.remove(); } @@ -248,6 +264,11 @@ public class CommonEntityEventHandler { if (player != null && cancelMessage != null) { TextAdapter.sendComponent(player, cancelMessage); } + if (event instanceof RespawnPlayerEvent) { + // Respawn player in safe location in source claim + ((RespawnPlayerEvent) event).setToTransform(new Transform(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim))); + } + GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync(); return false; } else { final boolean showGpPrefix = GriefDefenderPlugin.getGlobalConfig().getConfig().message.enterExitShowGdPrefix; @@ -294,8 +315,14 @@ public class CommonEntityEventHandler { this.checkPlayerGodMode(user, fromClaim, toClaim); this.checkPlayerWalkSpeed(user, fromClaim, toClaim); this.checkPlayerWeather(user, fromClaim, toClaim, false); - this.runPlayerCommands(fromClaim, user, false); - this.runPlayerCommands(toClaim, user, true); + // Exit command - Don't run if to claim is child of from claim + if (!toClaim.isParent(fromClaim)) { + this.runPlayerCommands(fromClaim, user, false); + } + // Enter command - Don't run if to claim is parent of from claim + if (!fromClaim.isParent(toClaim)) { + this.runPlayerCommands(toClaim, user, true); + } } } @@ -335,10 +362,16 @@ public class CommonEntityEventHandler { TextAdapter.sendComponent(player, cancelMessage); } - event.setCancelled(true); + if (event instanceof Cancellable) { + ((Cancellable) event).setCancelled(true); + } if (!(targetEntity instanceof Player) && EntityUtils.getOwnerUniqueId(targetEntity) == null) { targetEntity.remove(); } + if (event instanceof RespawnPlayerEvent) { + // Respawn player in safe location in source claim + ((RespawnPlayerEvent) event).setToTransform(new Transform(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim))); + } GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync(); return false; } @@ -346,20 +379,22 @@ public class CommonEntityEventHandler { if (player != null) { if (GDFlags.ENTITY_RIDING && onMount) { if (GDPermissionManager.getInstance().getFinalPermission(event, targetEntity.getLocation(), toClaim, Flags.ENTITY_RIDING, player, targetEntity, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) { - event.setCancelled(true); - Location safeLocation = Sponge.getGame().getTeleportHelper() - .getSafeLocation(fromLocation, 80, 0) - .orElseGet(() -> Sponge.getGame().getTeleportHelper() - .getSafeLocation(fromLocation, 80, 6) - .orElse(world.getSpawnLocation()) - ); - targetEntity.getBaseVehicle().clearPassengers(); - player.setTransform(player.getTransform().setLocation(safeLocation)); - GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync(); - return false; + if (event instanceof Cancellable) { + ((Cancellable) event).setCancelled(true); + Location safeLocation = Sponge.getGame().getTeleportHelper() + .getSafeLocation(fromLocation, 80, 0) + .orElseGet(() -> Sponge.getGame().getTeleportHelper() + .getSafeLocation(fromLocation, 80, 6) + .orElse(world.getSpawnLocation()) + ); + targetEntity.getBaseVehicle().clearPassengers(); + player.setTransform(player.getTransform().setLocation(safeLocation)); + GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync(); + return false; + } } } - final GDPlayerData playerData = user.getInternalPlayerData(); + final boolean showGpPrefix = GriefDefenderPlugin.getGlobalConfig().getConfig().message.enterExitShowGdPrefix; Component welcomeMessage = gpEvent.getEnterMessage().orElse(null); if (welcomeMessage != null && !welcomeMessage.equals(TextComponent.empty()) && !fromClaim.isParent(toClaim)) { @@ -404,8 +439,14 @@ public class CommonEntityEventHandler { this.checkPlayerGodMode(user, fromClaim, toClaim); this.checkPlayerWalkSpeed(user, fromClaim, toClaim); this.checkPlayerWeather(user, fromClaim, toClaim, false); - this.runPlayerCommands(fromClaim, user, false); - this.runPlayerCommands(toClaim, user, true); + // Exit command - Don't run if to claim is child of from claim + if (!toClaim.isParent(fromClaim)) { + this.runPlayerCommands(fromClaim, user, false); + } + // Enter command - Don't run if to claim is parent of from claim + if (!fromClaim.isParent(toClaim)) { + this.runPlayerCommands(toClaim, user, true); + } } } } @@ -428,7 +469,11 @@ public class CommonEntityEventHandler { if (!GDOptions.PLAYER_COMMAND_ENTER && !GDOptions.PLAYER_COMMAND_EXIT) { return; } + if (user.getInternalPlayerData().runningPlayerCommands) { + return; + } + user.getInternalPlayerData().runningPlayerCommands = true; List rawCommandList = new ArrayList<>(); Set contexts = new HashSet<>(); if (player.getUniqueId().equals(claim.getOwnerUniqueId())) { @@ -461,6 +506,7 @@ public class CommonEntityEventHandler { if (rawCommandList != null) { runCommand(claim, player, rawCommandList, false); } + user.getInternalPlayerData().runningPlayerCommands = false; } private void runCommand(GDClaim claim, Player player, List rawCommandList, boolean runAsConsole) { @@ -475,6 +521,10 @@ public class CommonEntityEventHandler { String args = command.replace(baseCommand + " ", ""); baseCommand = baseCommand.replace("\\", "").replace("/", ""); args = args.replace("%player%", player.getName()); + // Handle WorldEdit commands + if (command.startsWith("//") && !baseCommand.startsWith("/")) { + baseCommand = "/" + baseCommand; + } if (runAsConsole) { CommandHelper.executeCommand(Sponge.getServer().getConsole(), baseCommand, args); } else { diff --git a/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java b/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java index 27fed65..2cb332e 100644 --- a/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java +++ b/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java @@ -392,6 +392,17 @@ public class EntityEventHandler { } } + if (user == null) { + final UUID uuid = NMSUtil.getInstance().getEntityOwnerUUID(entity); + if (uuid != null) { + final GDPermissionUser gdUser = PermissionHolderCache.getInstance().getOrCreateUser(uuid); + if (GDPermissionManager.getInstance().getFinalPermission(event, entity.getLocation(), targetClaim, flag, actualSource, entity, gdUser, TrustTypes.ACCESSOR, true) == Tristate.FALSE) { + return false; + } + + return true; + } + } if (GDPermissionManager.getInstance().getFinalPermission(event, entity.getLocation(), targetClaim, flag, actualSource, entity, user, TrustTypes.ACCESSOR, true) == Tristate.FALSE) { return false; } diff --git a/sponge/src/main/java/com/griefdefender/listener/PlayerEventHandler.java b/sponge/src/main/java/com/griefdefender/listener/PlayerEventHandler.java index 2dc706b..9b6928d 100644 --- a/sponge/src/main/java/com/griefdefender/listener/PlayerEventHandler.java +++ b/sponge/src/main/java/com/griefdefender/listener/PlayerEventHandler.java @@ -58,6 +58,8 @@ import com.griefdefender.event.GDCauseStackManager; import com.griefdefender.internal.provider.GDWorldEditProvider; import com.griefdefender.internal.registry.BlockTypeRegistryModule; import com.griefdefender.internal.registry.GDBlockType; +import com.griefdefender.internal.registry.GDTileType; +import com.griefdefender.internal.registry.TileEntityTypeRegistryModule; import com.griefdefender.internal.util.BlockUtil; import com.griefdefender.internal.util.NMSUtil; import com.griefdefender.internal.visual.GDClaimVisual; @@ -81,12 +83,14 @@ import net.kyori.text.event.HoverEvent; import net.kyori.text.serializer.gson.GsonComponentSerializer; import org.spongepowered.api.Sponge; import org.spongepowered.api.block.BlockSnapshot; +import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockTypes; import org.spongepowered.api.block.tileentity.Sign; import org.spongepowered.api.block.tileentity.TileEntity; import org.spongepowered.api.command.CommandMapping; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.data.key.Keys; +import org.spongepowered.api.data.property.block.MatterProperty; import org.spongepowered.api.data.type.HandType; import org.spongepowered.api.data.type.HandTypes; import org.spongepowered.api.entity.Entity; @@ -135,8 +139,6 @@ import org.spongepowered.api.text.channel.MutableMessageChannel; import org.spongepowered.api.text.channel.type.FixedMessageChannel; import org.spongepowered.api.text.format.TextColors; import org.spongepowered.api.text.serializer.TextSerializers; -import org.spongepowered.api.util.blockray.BlockRay; -import org.spongepowered.api.util.blockray.BlockRayHit; import org.spongepowered.api.world.Chunk; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; @@ -481,6 +483,9 @@ public class PlayerEventHandler { if (claim.isInTown()) { playerData.inTown = true; } + if (GDFlags.ENTER_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, player.getLocation(), claim, Flags.ENTER_CLAIM, player, player, player, true) == Tristate.FALSE) { + player.setLocation(PlayerUtil.getInstance().getSafeClaimLocation(claim)); + } GDTimings.PLAYER_JOIN_EVENT.stopTimingIfSync(); } @@ -573,6 +578,14 @@ public class PlayerEventHandler { final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(event.getTargetEntity().getWorld(), event.getTargetEntity().getUniqueId()); playerData.lastPvpTimestamp = null; + if (playerData.ignoreClaims || event.getTargetEntity().hasPermission(GDPermissions.COMMAND_DELETE_ADMIN_CLAIMS)) { + return; + } + + final Location sourceLocation = event.getFromTransform().getLocation(); + final Location destination = event.getToTransform().getLocation(); + // Handle BorderClaimEvent + CommonEntityEventHandler.getInstance().onEntityMove(event, sourceLocation, destination, event.getTargetEntity()); } @Listener(order = Order.FIRST, beforeModifications = true) @@ -910,7 +923,7 @@ public class PlayerEventHandler { GDPlayerData playerData = this.dataStore.getOrCreatePlayerData(world, player.getUniqueId()); Location location = player.getLocation(); GDClaim claim = this.dataStore.getClaimAtPlayer(playerData, location); - if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, Flags.ITEM_PICKUP, player, event.getTargetEntity(), player, true) == Tristate.FALSE) { + if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, Flags.ITEM_PICKUP, player, event.getTargetEntity(), player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) { event.setCancelled(true); } @@ -1032,7 +1045,7 @@ public class PlayerEventHandler { final HandType handType = event.getHandType(); final ItemStack itemInHand = player.getItemInHand(handType).orElse(ItemStack.empty()); - if (handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) { + if (PlayerUtil.getInstance().forceItemInteract(itemInHand.getType(), player) && handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) { event.setCancelled(true); return; } @@ -1126,7 +1139,7 @@ public class PlayerEventHandler { final HandType handType = event.getHandType(); final ItemStack itemInHand = player.getItemInHand(handType).orElse(ItemStack.empty()); - if (handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) { + if (PlayerUtil.getInstance().forceItemInteract(itemInHand.getType(), player) && handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) { event.setCancelled(true); return; } @@ -1246,11 +1259,10 @@ public class PlayerEventHandler { final BlockSnapshot blockSnapshot = context.get(EventContextKeys.BLOCK_HIT).orElse(BlockSnapshot.NONE); final Vector3d interactPoint = event.getInteractionPoint().orElse(null); final Entity entity = context.get(EventContextKeys.ENTITY_HIT).orElse(null); - final Location location = entity != null ? entity.getLocation() + Location location = entity != null ? entity.getLocation() : blockSnapshot != BlockSnapshot.NONE ? blockSnapshot.getLocation().get() : interactPoint != null ? new Location(world, interactPoint) - : player.getLocation(); - final GDClaim claim = this.dataStore.getClaimAt(location); + : null; final Flag flag = primaryEvent ? Flags.INTERACT_ITEM_PRIMARY : Flags.INTERACT_ITEM_SECONDARY; @@ -1267,6 +1279,23 @@ public class PlayerEventHandler { return event; } + final boolean isItemBucket = !itemInHand.isEmpty() && itemInHand.getType().equals(ItemTypes.BUCKET); + BlockState blockHit = blockSnapshot != BlockSnapshot.NONE ? blockSnapshot.getState() : null; + if (location == null) { + if (isItemBucket) { + final int distance = NMSUtil.getInstance().getPlayerBlockReachDistance(player); + location = BlockUtil.getInstance().getTargetBlock(player, playerData, distance, true).orElse(null); + if (location != null) { + blockHit = location.getBlock(); + } else { + location = player.getLocation(); + } + } else { + location = player.getLocation(); + } + } + + final GDClaim claim = this.dataStore.getClaimAt(location); if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, flag, player, itemInHand, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) { Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM, ImmutableMap.of( @@ -1282,12 +1311,19 @@ public class PlayerEventHandler { return event; } - if (blockSnapshot != null && blockSnapshot.getState().getType() != BlockTypes.AIR) { - if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, flag, itemInHand, blockSnapshot, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) { + if (blockHit != null && blockHit.getType() != BlockTypes.AIR) { + TrustType trustType = TrustTypes.ACCESSOR; + if (isItemBucket) { + final MatterProperty matterProperty = blockHit.getProperty(MatterProperty.class).orElse(null); + if (matterProperty != null && matterProperty.getValue() == MatterProperty.Matter.LIQUID) { + trustType = TrustTypes.BUILDER; + } + } + if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, flag, itemInHand, blockHit, player, trustType, true) == Tristate.FALSE) { final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM_BLOCK, ImmutableMap.of( "item", itemInHand.getType().getId(), - "block", blockSnapshot.getState().getType().getId())); + "block", blockHit.getType().getId())); GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message); if (event instanceof InteractBlockEvent.Secondary) { ((InteractBlockEvent.Secondary) event).setUseItemResult(SpongeUtil.getSpongeTristate(Tristate.FALSE)); @@ -1298,11 +1334,11 @@ public class PlayerEventHandler { return event; } if (!itemInHand.isEmpty() && itemInHand.getType().equals(ItemTypes.BUCKET)) { - if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim,Flags.INTERACT_BLOCK_SECONDARY, itemInHand, blockSnapshot, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) { + if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim,Flags.INTERACT_BLOCK_SECONDARY, itemInHand, blockHit, player, trustType, true) == Tristate.FALSE) { final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM_BLOCK, ImmutableMap.of( "item", itemInHand.getType().getId(), - "block", blockSnapshot.getState().getType().getId())); + "block", blockHit.getType().getId())); GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message); event.setCancelled(true); lastInteractItemCancelled = true; @@ -2036,16 +2072,30 @@ public class PlayerEventHandler { if (playerData != null && claim.getData() != null && claim.getData().isExpired() /*&& GriefDefenderPlugin.getActiveConfig(player.getWorld().getProperties()).getConfig().claim.bankTaxSystem*/) { playerData.sendTaxExpireMessage(player, claim); } else if (playerItem == null || playerItem == ItemTypes.NONE || playerItem.isEmpty()) { + String blockId = blockSnapshot.getState().getType().getId(); + if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(blockId)) { + final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(blockSnapshot.getLocation().orElse(null)); + if (tileType != null) { + blockId = tileType.getId(); + } + } final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_BLOCK, ImmutableMap.of( "player", claim.getOwnerName(), - "block", blockSnapshot.getState().getType().getId())); + "block", blockId)); GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message); } else { + String blockId = blockSnapshot.getState().getType().getId(); + if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(blockId)) { + final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(blockSnapshot.getLocation().orElse(null)); + if (tileType != null) { + blockId = tileType.getId(); + } + } final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM_BLOCK, ImmutableMap.of( "item", playerItem.getType().getId(), - "block", blockSnapshot.getState().getType().getId())); + "block", blockId)); GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message); } if (handType == HandTypes.MAIN_HAND) { diff --git a/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java b/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java index 4b4e496..9c4a884 100644 --- a/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java +++ b/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java @@ -100,6 +100,7 @@ import org.spongepowered.api.event.Event; import org.spongepowered.api.event.block.NotifyNeighborBlockEvent; import org.spongepowered.api.event.cause.EventContextKey; import org.spongepowered.api.event.cause.EventContextKeys; +import org.spongepowered.api.event.cause.entity.damage.DamageTypes; import org.spongepowered.api.event.cause.entity.damage.source.DamageSource; import org.spongepowered.api.event.cause.entity.damage.source.EntityDamageSource; import org.spongepowered.api.item.ItemType; @@ -265,10 +266,18 @@ public class GDPermissionManager implements PermissionManager { if (source instanceof Player && !isFakePlayer && flag != Flags.COLLIDE_BLOCK && flag != Flags.COLLIDE_ENTITY) { this.addPlayerContexts((Player) source, contexts); } - if (!(source instanceof Player) && target instanceof Player && user != null && user.getOnlinePlayer() != null && !user.getUniqueId().equals(((Player) target).getUniqueId())) { - // add source player context - // this allows users to block all pvp actions when direct source isn't a player - contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer()))); + if (!(source instanceof Player) && user != null && user.getOnlinePlayer() != null) { + boolean addPlayerContext = false; + if (!(target instanceof Player)) { + addPlayerContext = true; + } else if (!user.getUniqueId().equals(((Player) target).getUniqueId())) { + addPlayerContext = true; + } + if (addPlayerContext) { + // add source player context + // this allows users to block all pvp actions when direct source isn't a player + contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer()))); + } } final Set sourceContexts = this.getPermissionContexts((GDClaim) claim, source, true); @@ -709,7 +718,17 @@ public class GDPermissionManager implements PermissionManager { if (obj != null) { if (obj instanceof Item) { - final String id = ((Item) obj).getItemType().getId(); + final Item item = ((Item) obj); + String id = item.getItemType().getId(); + if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) { + final int index = id.indexOf(":"); + final String modId = id.substring(0, index); + id = modId + ":" + NMSUtil.getInstance().getItemName(item); + } + final String itemMeta = NMSUtil.getInstance().getItemStackMeta((Item) obj); + if (itemMeta != null) { + contexts.add(new Context("meta", itemMeta)); + } return populateEventSourceTargetContext(contexts, id, isSource); } else if (obj instanceof Entity) { final Entity targetEntity = (Entity) obj; @@ -751,29 +770,34 @@ public class GDPermissionManager implements PermissionManager { } else if (obj instanceof BlockSnapshot) { final BlockSnapshot blockSnapshot = (BlockSnapshot) obj; final BlockState blockstate = blockSnapshot.getState(); + final Location location = blockSnapshot.getLocation().orElse(null); String id = blockstate.getType().getId(); if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) { - final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(blockSnapshot); + final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(location); if (tileType != null) { id = tileType.getId(); - if (this.isObjectIdBanned(claim, id, BanType.BLOCK)) { - return null; - } - return this.populateEventSourceTargetContext(contexts, id, isSource); } } - return this.getPermissionContexts(claim, blockstate, isSource); - } else if (obj instanceof BlockState) { - final BlockState blockstate = (BlockState) obj; - if (this.isObjectIdBanned(claim, blockstate.getType().getId(), BanType.BLOCK)) { - return null; - } - final String id = blockstate.getType().getId(); - this.addBlockContexts(contexts, blockstate.getType(), isSource); - this.addBlockPropertyContexts(contexts, blockstate); if (this.isObjectIdBanned(claim, id, BanType.BLOCK)) { return null; } + this.addBlockContexts(contexts, blockstate.getType(), isSource); + this.addBlockPropertyContexts(contexts, blockstate); + return populateEventSourceTargetContext(contexts, id, isSource); + } else if (obj instanceof BlockState) { + final BlockState blockstate = (BlockState) obj; + String id = blockstate.getType().getId(); + if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) { + final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(this.eventLocation); + if (tileType != null) { + id = tileType.getId(); + } + } + if (this.isObjectIdBanned(claim, id, BanType.BLOCK)) { + return null; + } + this.addBlockContexts(contexts, blockstate.getType(), isSource); + this.addBlockPropertyContexts(contexts, blockstate); return populateEventSourceTargetContext(contexts, id, isSource); } else if (obj instanceof LocatableBlock) { final LocatableBlock locatableBlock = (LocatableBlock) obj; @@ -850,7 +874,9 @@ public class GDPermissionManager implements PermissionManager { String id = itemstack.getType().getId(); if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) { - id = NMSUtil.getInstance().getItemName(itemstack); + final int index = id.indexOf(":"); + final String modId = id.substring(0, index); + id = modId + ":" + NMSUtil.getInstance().getItemName(itemstack); } if (this.isObjectIdBanned(claim, id, BanType.ITEM)) { return null; @@ -900,6 +926,9 @@ public class GDPermissionManager implements PermissionManager { } else if (obj instanceof DamageSource) { final DamageSource damageSource = (DamageSource) obj; String id = damageSource.getType().getId(); + if (damageSource.getType() == DamageTypes.CUSTOM) { + id = NMSUtil.getInstance().getDamageSourceId(damageSource); + } if (!id.contains(":")) { id = "minecraft:" + id; } diff --git a/sponge/src/main/java/com/griefdefender/provider/LuckPermsProvider.java b/sponge/src/main/java/com/griefdefender/provider/LuckPermsProvider.java index 5a52a1e..ef33939 100644 --- a/sponge/src/main/java/com/griefdefender/provider/LuckPermsProvider.java +++ b/sponge/src/main/java/com/griefdefender/provider/LuckPermsProvider.java @@ -387,8 +387,8 @@ public class LuckPermsProvider implements PermissionProvider { } } } - Map, Map> optionMap = this.getPermanentOptions(holder); - for (Entry, Map> mapEntry : optionMap.entrySet()) { + Map, Map>> optionMap = this.getPermanentOptions(holder); + for (Entry, Map>> mapEntry : optionMap.entrySet()) { for (Context context : mapEntry.getKey()) { if (context.getKey().equalsIgnoreCase("gd_claim") && context.getValue().equalsIgnoreCase(claimUniqueId.toString())) { this.clearPermissions(holder, mapEntry.getKey()); @@ -435,7 +435,7 @@ public class LuckPermsProvider implements PermissionProvider { return cachedData.getPermissionMap(); } - public Map getOptions(GDPermissionHolder holder, Set contexts) { + public Map> getOptions(GDPermissionHolder holder, Set contexts) { ImmutableContextSet set = this.getLPContexts(contexts).immutableCopy(); final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { @@ -445,9 +445,9 @@ public class LuckPermsProvider implements PermissionProvider { final QueryOptions query = QueryOptions.builder(QueryMode.CONTEXTUAL).option(DataQueryOrderFunction.KEY, DEFAULT_DATA_QUERY_ORDER).context(set).build(); CachedMetaData cachedData = permissionHolder.getCachedData().getMetaData(query); // TODO - Map metaMap = new HashMap<>(); + Map> metaMap = new HashMap<>(); for (Map.Entry> mapEntry : cachedData.getMeta().entrySet()) { - metaMap.put(mapEntry.getKey(), mapEntry.getValue().get(0)); + metaMap.put(mapEntry.getKey(), mapEntry.getValue()); } return metaMap; } @@ -538,14 +538,14 @@ public class LuckPermsProvider implements PermissionProvider { return transientPermissionMap; } - public Map, Map> getPermanentOptions(GDPermissionHolder holder) { + public Map, Map>> getPermanentOptions(GDPermissionHolder holder) { final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { return new HashMap<>(); } final Collection nodes = permissionHolder.data().toCollection(); - Map, Map> permanentPermissionMap = new TreeMap, Map>(CONTEXT_COMPARATOR); + Map, Map>> permanentPermissionMap = new TreeMap, Map>>(CONTEXT_COMPARATOR); for (Node node : nodes) { if (node.getType() != NodeType.META) { continue; @@ -553,26 +553,35 @@ public class LuckPermsProvider implements PermissionProvider { final MetaNode metaNode = (MetaNode) node; final Set contexts = getGPContexts(node.getContexts()); - Map metaEntry = permanentPermissionMap.get(contexts); + Map> metaEntry = permanentPermissionMap.get(contexts); if (metaEntry == null) { metaEntry = new HashMap<>(); - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + final List values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); permanentPermissionMap.put(contexts, metaEntry); } else { - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + List values = metaEntry.get(metaNode.getMetaKey()); + if (values == null) { + values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); + } else { + values.add(metaNode.getMetaValue()); + } } } return permanentPermissionMap; } - public Map, Map> getTransientOptions(GDPermissionHolder holder) { + public Map, Map>> getTransientOptions(GDPermissionHolder holder) { final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { return new HashMap<>(); } final Collection nodes = permissionHolder.transientData().toCollection(); - Map, Map> permanentPermissionMap = new TreeMap, Map>(CONTEXT_COMPARATOR); + Map, Map>> permanentPermissionMap = new TreeMap, Map>>(CONTEXT_COMPARATOR); for (Node node : nodes) { if (node.getType() != NodeType.META) { continue; @@ -580,64 +589,27 @@ public class LuckPermsProvider implements PermissionProvider { final MetaNode metaNode = (MetaNode) node; final Set contexts = getGPContexts(node.getContexts()); - Map metaEntry = permanentPermissionMap.get(contexts); + Map> metaEntry = permanentPermissionMap.get(contexts); if (metaEntry == null) { metaEntry = new HashMap<>(); - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + final List values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); permanentPermissionMap.put(contexts, metaEntry); } else { - metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue()); + List values = metaEntry.get(metaNode.getMetaKey()); + if (values == null) { + values = new ArrayList<>(); + values.add(metaNode.getMetaValue()); + metaEntry.put(metaNode.getMetaKey(), values); + } else { + values.add(metaNode.getMetaValue()); + } } } return permanentPermissionMap; } - public Map getPermanentOptions(GDPermissionHolder holder, Set contexts) { - final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); - if (permissionHolder == null) { - return new HashMap<>(); - } - - final Collection nodes = permissionHolder.data().toCollection(); - final Map options = new HashMap<>(); - for (Node node : nodes) { - if (node.getType() != NodeType.META) { - continue; - } - - final MetaNode metaNode = (MetaNode) node; - if (contexts == null) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } else if (getGPContexts(node.getContexts()).containsAll(contexts)) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } - } - return options; - } - - public Map getTransientOptions(GDPermissionHolder holder, Set contexts) { - final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); - if (permissionHolder == null) { - return new HashMap<>(); - } - - final Collection nodes = permissionHolder.transientData().toCollection(); - final Map options = new HashMap<>(); - for (Node node : nodes) { - if (node.getType() != NodeType.META) { - continue; - } - - final MetaNode metaNode = (MetaNode) node; - if (contexts == null) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } else if (getGPContexts(node.getContexts()).containsAll(contexts)) { - options.put(metaNode.getMetaKey(), metaNode.getMetaValue()); - } - } - return options; - } - public Map, Map> getAllPermissions(GDPermissionHolder holder) { final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder); if (permissionHolder == null) { diff --git a/sponge/src/main/java/com/griefdefender/provider/PermissionProvider.java b/sponge/src/main/java/com/griefdefender/provider/PermissionProvider.java index fb6dba2..a0f622e 100644 --- a/sponge/src/main/java/com/griefdefender/provider/PermissionProvider.java +++ b/sponge/src/main/java/com/griefdefender/provider/PermissionProvider.java @@ -174,7 +174,7 @@ public interface PermissionProvider { * @param contexts The contexts required * @return An immutable map of cached options or empty if none. */ - Map getOptions(GDPermissionHolder holder, Set contexts); + Map> getOptions(GDPermissionHolder holder, Set contexts); /** * Gets all persisted permissions. @@ -205,7 +205,7 @@ public interface PermissionProvider { * @param holder The holder * @return An immutable map of persisted options or empty if none. */ - Map, Map> getPermanentOptions(GDPermissionHolder holder); + Map, Map>> getPermanentOptions(GDPermissionHolder holder); /** * Gets all transient options with associated contexts of holder. @@ -213,23 +213,7 @@ public interface PermissionProvider { * @param holder The holder * @return An immutable map of transient options or empty if none. */ - Map, Map> getTransientOptions(GDPermissionHolder holder); - - /** - * Gets all persisted options and associated values of holder. - * - * @param holder The holder - * @return An immutable map of persisted options or empty if none. - */ - Map getPermanentOptions(GDPermissionHolder holder, Set contexts); - - /** - * Gets all transient options and associated values of holder. - * - * @param holder The holder - * @return An immutable map of transient options or empty if none. - */ - Map getTransientOptions(GDPermissionHolder holder, Set contexts); + Map, Map>> getTransientOptions(GDPermissionHolder holder); /** * Gets all persisted permissions, including inherited nodes, with associated contexts of holder. diff --git a/sponge/src/main/java/com/griefdefender/storage/BaseStorage.java b/sponge/src/main/java/com/griefdefender/storage/BaseStorage.java index 8b7d668..8beb9ad 100644 --- a/sponge/src/main/java/com/griefdefender/storage/BaseStorage.java +++ b/sponge/src/main/java/com/griefdefender/storage/BaseStorage.java @@ -433,8 +433,8 @@ public abstract class BaseStorage { } private void setDefaultOptions(Set contexts, Map defaultOptions) { - final Map, Map> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER); - final Map options = permanentOptions.get(contexts); + final Map, Map>> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER); + final Map> options = permanentOptions.get(contexts); GriefDefenderPlugin.getInstance().executor.execute(() -> { for (Map.Entry optionEntry : defaultOptions.entrySet()) { final Option option = OptionRegistryModule.getInstance().getById(optionEntry.getKey()).orElse(null); @@ -448,7 +448,7 @@ public abstract class BaseStorage { // Transient options are checked first so we must ignore setting if a persisted option exists boolean foundPersisted = false; if (options != null) { - for (Entry mapEntry : options.entrySet()) { + for (Entry> mapEntry : options.entrySet()) { if (mapEntry.getKey().equalsIgnoreCase(option.getPermission())) { foundPersisted = true; break; diff --git a/sponge/src/main/java/com/griefdefender/storage/FileStorage.java b/sponge/src/main/java/com/griefdefender/storage/FileStorage.java index 8a20cc4..413d5ae 100644 --- a/sponge/src/main/java/com/griefdefender/storage/FileStorage.java +++ b/sponge/src/main/java/com/griefdefender/storage/FileStorage.java @@ -119,6 +119,10 @@ public class FileStorage extends BaseStorage { } public void registerWorld(World world) { + if (this.claimWorldManagers.get(world.getUniqueId()) != null) { + return; + } + final UUID worldUniqueId = world.getUniqueId(); DimensionType dimType = world.getProperties().getDimensionType(); String[] parts = dimType.getId().split(":"); diff --git a/sponge/src/main/java/com/griefdefender/task/ClaimBlockTask.java b/sponge/src/main/java/com/griefdefender/task/ClaimBlockTask.java index 2a4e942..dbf930e 100644 --- a/sponge/src/main/java/com/griefdefender/task/ClaimBlockTask.java +++ b/sponge/src/main/java/com/griefdefender/task/ClaimBlockTask.java @@ -66,7 +66,7 @@ public class ClaimBlockTask implements Runnable { if (GriefDefenderPlugin.getInstance().isEconomyModeEnabled()) { final Account playerAccount = GriefDefenderPlugin.getInstance().economyService.get().getOrCreateAccount(player.getUniqueId()).orElse(null); if (playerAccount == null) { - return; + continue; } final Currency defaultCurrency = GriefDefenderPlugin.getInstance().economyService.get().getDefaultCurrency(); @@ -76,7 +76,7 @@ public class ClaimBlockTask implements Runnable { if ((currentTotal + accruedBlocks) > playerData.getMaxAccruedClaimBlocks()) { playerData.setAccruedClaimBlocks(playerData.getMaxAccruedClaimBlocks()); playerData.lastAfkCheckLocation = player.getLocation(); - return; + continue; } playerData.setAccruedClaimBlocks(playerData.getAccruedClaimBlocks() + accruedBlocks); diff --git a/sponge/src/main/java/com/griefdefender/task/RentApplyTask.java b/sponge/src/main/java/com/griefdefender/task/RentApplyTask.java index bcf1b77..ac2dae5 100644 --- a/sponge/src/main/java/com/griefdefender/task/RentApplyTask.java +++ b/sponge/src/main/java/com/griefdefender/task/RentApplyTask.java @@ -105,9 +105,11 @@ public class RentApplyTask implements Runnable { } final Set children = claim.getChildren(true); for (Claim child : children) { - for (UUID uuid : child.getEconomyData().getRenters()) { - final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(uuid); - handleClaimRent((GDClaim) child, user); + if (child.getEconomyData().isRented()) { + for (UUID uuid : child.getEconomyData().getRenters()) { + final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(uuid); + handleClaimRent((GDClaim) child, user); + } } } } diff --git a/sponge/src/main/java/com/griefdefender/task/TaxApplyTask.java b/sponge/src/main/java/com/griefdefender/task/TaxApplyTask.java index 450a2e9..b686ce5 100644 --- a/sponge/src/main/java/com/griefdefender/task/TaxApplyTask.java +++ b/sponge/src/main/java/com/griefdefender/task/TaxApplyTask.java @@ -126,7 +126,7 @@ public class TaxApplyTask implements Runnable { final double taxBalance = claim.getEconomyData().getTaxBalance(); taxRate = event.getTaxRate(); taxOwed = taxBalance + (claim.getClaimBlocks() * taxRate); - final TransactionResult result = EconomyUtil.withdrawFunds(user.getUniqueId(), taxOwed); + final TransactionResult result = EconomyUtil.getInstance().withdrawTax(claim, user.getUniqueId(), taxOwed); if (result.getResult() != ResultType.SUCCESS) { final Instant localNow = Instant.now(); Instant taxPastDueDate = claim.getEconomyData().getTaxPastDueDate(); diff --git a/sponge/src/main/java/com/griefdefender/util/CauseContextHelper.java b/sponge/src/main/java/com/griefdefender/util/CauseContextHelper.java index 658e9f5..920cbc8 100644 --- a/sponge/src/main/java/com/griefdefender/util/CauseContextHelper.java +++ b/sponge/src/main/java/com/griefdefender/util/CauseContextHelper.java @@ -43,6 +43,7 @@ import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.entity.Entity; import org.spongepowered.api.entity.living.Living; import org.spongepowered.api.entity.living.player.User; +import org.spongepowered.api.entity.projectile.source.ProjectileSource; import org.spongepowered.api.event.Event; import org.spongepowered.api.event.cause.Cause; import org.spongepowered.api.event.cause.EventContext; @@ -75,8 +76,15 @@ public class CauseContextHelper { if (cause != null) { user = cause.first(User.class).orElse(null); if (user == null) { - // check for FakePlayer in context - user = cause.getContext().get(EventContextKeys.FAKE_PLAYER).orElse(null); + // check projectile source + final ProjectileSource projectileSource = cause.getContext().get(EventContextKeys.PROJECTILE_SOURCE).orElse(null); + if (projectileSource != null && projectileSource instanceof User) { + user = (User) projectileSource; + } + if (user == null) { + // check for FakePlayer in context + user = cause.getContext().get(EventContextKeys.FAKE_PLAYER).orElse(null); + } } if (user != null && user instanceof Entity && NMSUtil.getInstance().isFakePlayer((Entity) user)) { fakePlayer = user; diff --git a/sponge/src/main/java/com/griefdefender/util/EconomyUtil.java b/sponge/src/main/java/com/griefdefender/util/EconomyUtil.java index fcbf843..b1d3596 100644 --- a/sponge/src/main/java/com/griefdefender/util/EconomyUtil.java +++ b/sponge/src/main/java/com/griefdefender/util/EconomyUtil.java @@ -71,6 +71,7 @@ import org.spongepowered.api.entity.Item; import org.spongepowered.api.entity.living.monster.Monster; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.service.economy.Currency; +import org.spongepowered.api.service.economy.EconomyService; import org.spongepowered.api.service.economy.account.Account; import org.spongepowered.api.service.economy.transaction.ResultType; import org.spongepowered.api.service.economy.transaction.TransactionResult; @@ -92,6 +93,7 @@ import java.util.function.Consumer; public class EconomyUtil { + private final EconomyService economyService = GriefDefenderPlugin.getInstance().economyService.orElse(null); private static EconomyUtil instance; public static EconomyUtil getInstance() { @@ -102,6 +104,35 @@ public class EconomyUtil { instance = new EconomyUtil(); } + public TransactionResult withdrawTax(GDClaim claim, UUID playerUniqueId, double taxOwed) { + if (GriefDefenderPlugin.getGlobalConfig().getConfig().economy.bankSystem) { + final Account bankAccount = this.economyService.getOrCreateAccount(claim.getUniqueId().toString()).orElse(null); + if (bankAccount != null) { + final Currency defaultCurrency = GriefDefenderPlugin.getInstance().economyService.get().getDefaultCurrency(); + final double bankBalance = bankAccount.getBalance(defaultCurrency).doubleValue(); + if (bankBalance > 0) { + TransactionResult withdrawResponse = null; + if (taxOwed == bankBalance || bankBalance > taxOwed) { + withdrawResponse = bankAccount.withdraw(defaultCurrency, BigDecimal.valueOf(taxOwed), Sponge.getCauseStackManager().getCurrentCause()); + if (withdrawResponse.getResult() == ResultType.SUCCESS) { + claim.getData().getEconomyData().addPaymentTransaction( + new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, playerUniqueId, Instant.now(), taxOwed)); + return withdrawResponse; + } + } else { + withdrawResponse = bankAccount.withdraw(defaultCurrency, BigDecimal.valueOf(bankBalance), Sponge.getCauseStackManager().getCurrentCause()); + if (withdrawResponse.getResult() == ResultType.SUCCESS) { + taxOwed -= bankBalance; + claim.getData().getEconomyData().addPaymentTransaction( + new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, playerUniqueId, Instant.now(), bankBalance)); + } + } + } + } + } + return withdrawFunds(playerUniqueId, taxOwed); + } + public void economyCreateClaimConfirmation(Player player, GDPlayerData playerData, int height, Vector3i point1, Vector3i point2, ClaimType claimType, boolean cuboid, Claim parent) { GDClaim claim = new GDClaim(player.getWorld(), point1, point2, claimType, player.getUniqueId(), cuboid); claim.parent = (GDClaim) parent; diff --git a/sponge/src/main/java/com/griefdefender/util/PermissionUtil.java b/sponge/src/main/java/com/griefdefender/util/PermissionUtil.java index 7a72769..34d36f1 100644 --- a/sponge/src/main/java/com/griefdefender/util/PermissionUtil.java +++ b/sponge/src/main/java/com/griefdefender/util/PermissionUtil.java @@ -96,7 +96,7 @@ public class PermissionUtil { } public void addActiveContexts(Set contexts, GDPermissionHolder permissionHolder, GDPlayerData playerData, Claim claim) { - PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, null, null); + PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, playerData, claim); } public boolean containsDefaultContext(Set contexts) { @@ -139,7 +139,7 @@ public class PermissionUtil { return PERMISSION_PROVIDER.getPermissions(holder, contexts); } - public Map getOptions(GDPermissionHolder holder, Set contexts) { + public Map> getOptions(GDPermissionHolder holder, Set contexts) { return PERMISSION_PROVIDER.getOptions(holder, contexts); } @@ -155,22 +155,14 @@ public class PermissionUtil { return PERMISSION_PROVIDER.getTransientPermissions(holder); } - public Map, Map> getPermanentOptions(GDPermissionHolder holder) { + public Map, Map>> getPermanentOptions(GDPermissionHolder holder) { return PERMISSION_PROVIDER.getPermanentOptions(holder); } - public Map, Map> getTransientOptions(GDPermissionHolder holder) { + public Map, Map>> getTransientOptions(GDPermissionHolder holder) { return PERMISSION_PROVIDER.getTransientOptions(holder); } - public Map getPermanentOptions(GDPermissionHolder holder, Set contexts) { - return PERMISSION_PROVIDER.getPermanentOptions(holder, contexts); - } - - public Map getTransientOptions(GDPermissionHolder holder, Set contexts) { - return PERMISSION_PROVIDER.getTransientOptions(holder, contexts); - } - public Map, Map> getAllPermissions(GDPermissionHolder holder) { return PERMISSION_PROVIDER.getAllPermissions(holder); } diff --git a/sponge/src/main/java/com/griefdefender/util/PlayerUtil.java b/sponge/src/main/java/com/griefdefender/util/PlayerUtil.java index 4a7f493..2c9ebbb 100644 --- a/sponge/src/main/java/com/griefdefender/util/PlayerUtil.java +++ b/sponge/src/main/java/com/griefdefender/util/PlayerUtil.java @@ -41,7 +41,6 @@ import com.griefdefender.api.permission.option.type.WeatherType; import com.griefdefender.api.permission.option.type.WeatherTypes; import com.griefdefender.cache.PermissionHolderCache; import com.griefdefender.claim.GDClaim; -import com.griefdefender.internal.util.BlockUtil; import com.griefdefender.internal.util.NMSUtil; import com.griefdefender.permission.GDPermissionUser; import net.kyori.text.Component; @@ -69,6 +68,7 @@ import org.spongepowered.api.world.World; import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; import javax.annotation.Nullable; @@ -326,4 +326,51 @@ public class PlayerUtil { return claim; } + + public Location getSafeClaimLocation(GDClaim claim) { + final int minClaimLevel = claim.getOwnerMinClaimLevel(); + double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65); + if (claim.isCuboid()) { + claimY = claim.lesserBoundaryCorner.getY(); + } + + final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1); + final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1); + Location claimCorner = null; + switch (randomCorner) { + case 1: // SW + claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random); + case 2: // NW + claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random); + case 3: // SE + claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random); + case 4: // NE + claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random); + } + + final Location safeLocation = Sponge.getTeleportHelper().getSafeLocation(claimCorner, 64, 16, 2).orElse(null); + if (safeLocation != null) { + return safeLocation; + } + + // If no safe location was found, fall back to corner + return claimCorner; + } + + public boolean forceItemInteract(ItemType itemType, Player player) { + final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); + if (playerData.claimMode) { + return true; + } + if (!playerData.claimTool) { + return GriefDefenderPlugin.getGlobalConfig().getConfig().mod.forceItemInteract(itemType.getId()); + } + if (GriefDefenderPlugin.getInstance().modificationTool != null && itemType.getId().equals(GriefDefenderPlugin.getInstance().modificationTool)) { + return true; + } + if (GriefDefenderPlugin.getInstance().investigationTool != null && itemType.getId().equals(GriefDefenderPlugin.getInstance().investigationTool)) { + return true; + } + return GriefDefenderPlugin.getGlobalConfig().getConfig().mod.forceItemInteract(itemType.getId()); + } } diff --git a/sponge/src/main/resources/1.12.2.json b/sponge/src/main/resources/1.12.2.json index f524535..83cd92a 100644 --- a/sponge/src/main/resources/1.12.2.json +++ b/sponge/src/main/resources/1.12.2.json @@ -3,9 +3,9 @@ "libraries": [ { "name": "com.griefdefender:adapter-sponge:1.12.2", - "sha1": "beb43662d4d04825a35dcdf21eb16b18424e93d6", - "path": "com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210101.010513-16.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210101.010513-16.jar" + "sha1": "da88e2f8cbe0535f01753087464dd3b7918048a4", + "path": "com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210115.020835-20.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210115.020835-20.jar" }, { "name": "com.griefdefender:api:1.0.0", @@ -41,15 +41,15 @@ }, { "name": "co.aikar:acf-core:0.5.0-SNAPSHOT", - "sha1": "72aff420c92e4cb381ba8bccceb0b37cba7a9496", - "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190722.233344-152.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190722.233344-152.jar" + "sha1": "5f81a496db139cd72d00d31789b57b4788c505f8", + "path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar" }, { "name": "co.aikar:acf-sponge:0.5.0-SNAPSHOT", - "sha1": "c73413c215cfad8f0c2306ed156df74ebdf18d47", - "path": "co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20190722.233405-145.jar", - "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20190722.233405-145.jar" + "sha1": "8fde3bc49f21414ca81070271e43c5e9a04c3e08", + "path": "co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20200925.132017-161.jar", + "url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20200925.132017-161.jar" }, { "name": "co.aikar:locales:1.0-SNAPSHOT", @@ -137,32 +137,32 @@ "url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" }, { - "name": "org.spongepowered:configurate-core:3.7-SNAPSHOT", - "sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16", - "path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar", + "name": "org.spongepowered:configurate-core:3.7.2", + "sha1": "985223b13c7da64116a7e20203b2904023eeb1db", + "path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT", - "sha1": "265a94f16583621f497eeecc356f35f983484dde", - "path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar", + "name": "org.spongepowered:configurate-gson:3.7.2", + "sha1": "0431733e80d7dfc62b37962c2723bba5c996548f", + "path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT", - "sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af", - "path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar", + "name": "org.spongepowered:configurate-hocon:3.7.2", + "sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707", + "path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar" }, { - "name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT", - "sha1": "c66110f5ae0098c450e048f78b322590d2e24d06", - "path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar", + "name": "org.spongepowered:configurate-yaml:3.7.2", + "sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2", + "path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar", "relocate": "ninja.leaping.configurate:configurate", - "url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar" + "url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar" }, { "name": "com.typesafe:config:1.3.1",