From cf2d6047cbe042d73513fb409fc3a443b26dc7c6 Mon Sep 17 00:00:00 2001 From: bloodshot Date: Mon, 8 Jun 2020 14:34:07 -0400 Subject: [PATCH] 1.3.3 Update * Fix startup NPE with 1.8.8 and 1.12.2. * Fix another bug related to ghost claims. * Fix withers using owner for block break. * Fix ice being ignored. * Fix context exception when using wilderness in default/override flag definition. * Add support for multiple default/override contexts in flag definitions. * Move chat input handling to lowest event priority. * (Sponge) Fix debug not turning off properly. * (Sponge) Fix walk/fly speed checks by rounding result. --- .../griefdefender/claim/GDClaimManager.java | 5 +++- .../CustomFlagGroupDefinitionCategory.java | 28 +++++++++++-------- .../serializer/FlagDefinitionSerializer.java | 4 +-- .../listener/CommandEventHandler.java | 12 +++++--- .../listener/CommonBlockEventHandler.java | 12 ++++++-- .../listener/EntityEventHandler.java | 2 +- bukkit/src/main/resources/1.12.2.json | 6 ++-- bukkit/src/main/resources/1.13.2.json | 6 ++-- bukkit/src/main/resources/1.14.2.json | 6 ++-- bukkit/src/main/resources/1.14.3.json | 6 ++-- bukkit/src/main/resources/1.14.4.json | 6 ++-- bukkit/src/main/resources/1.15.2.json | 6 ++-- bukkit/src/main/resources/1.15.json | 6 ++-- bukkit/src/main/resources/1.8.8.json | 6 ++-- bukkit/src/main/resources/plugin.yml | 2 +- gradle.properties | 4 +-- .../griefdefender/claim/GDClaimManager.java | 5 +++- .../griefdefender/command/CommandDebug.java | 8 +++--- .../configuration/category/ClaimCategory.java | 1 - .../CustomFlagGroupDefinitionCategory.java | 28 +++++++++++-------- .../serializer/FlagDefinitionSerializer.java | 4 +-- .../listener/CommonEntityEventHandler.java | 4 +-- 22 files changed, 95 insertions(+), 72 deletions(-) diff --git a/bukkit/src/main/java/com/griefdefender/claim/GDClaimManager.java b/bukkit/src/main/java/com/griefdefender/claim/GDClaimManager.java index e01a340..96c1e64 100644 --- a/bukkit/src/main/java/com/griefdefender/claim/GDClaimManager.java +++ b/bukkit/src/main/java/com/griefdefender/claim/GDClaimManager.java @@ -384,10 +384,13 @@ private void deleteChunkHashes(GDClaim claim) { } for (Long chunkHash : chunkHashes) { - Set claimsInChunk = this.getInternalChunksToClaimsMap().get(chunkHash); + Set claimsInChunk = this.chunksToClaimsMap.get(chunkHash); if (claimsInChunk != null) { claimsInChunk.remove(claim); } + if (claimsInChunk.isEmpty()) { + this.chunksToClaimsMap.remove(chunkHash); + } } } diff --git a/bukkit/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java b/bukkit/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java index 6413c47..dc7168b 100644 --- a/bukkit/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java +++ b/bukkit/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java @@ -88,21 +88,20 @@ public void initDefaults() { continue; } Set contexts = new HashSet<>(flagDefinition.getContexts()); - boolean shouldApply = false; - boolean isOverride = false; + Set defaultContexts = new HashSet<>(); + Set overrideContexts = new HashSet<>(); String groupStr = null; final Iterator iterator = contexts.iterator(); while (iterator.hasNext()) { final Context context = iterator.next(); if (context.getKey().equalsIgnoreCase("gd_claim_default")) { - shouldApply = true; + defaultContexts.add(context); } else if (context.getKey().equalsIgnoreCase("gd_claim_override")) { if (context.getValue().equalsIgnoreCase("claim")) { iterator.remove(); continue; } - shouldApply = true; - isOverride = true; + overrideContexts.add(context); } else if (context.getKey().equalsIgnoreCase("group")) { groupStr = context.getValue(); } @@ -117,14 +116,19 @@ public void initDefaults() { } } for (FlagData flagData : flagDefinition.getFlagData()) { - Set permissionContexts = new HashSet<>(contexts); + Set permissionContexts = new HashSet<>(); permissionContexts.addAll(flagData.getContexts()); - if (shouldApply) { - if (isOverride) { - PermissionUtil.getInstance().setPermissionValue(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); - } else { - PermissionUtil.getInstance().setTransientPermission(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); - } + // apply defaults + for (Context context : defaultContexts) { + permissionContexts.add(context); + PermissionUtil.getInstance().setTransientPermission(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); + permissionContexts.remove(context); + } + // apply overrides + for (Context context : overrideContexts) { + permissionContexts.add(context); + PermissionUtil.getInstance().setPermissionValue(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); + permissionContexts.remove(context); } } } 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 b06c25f..098f11a 100644 --- a/bukkit/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java +++ b/bukkit/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java @@ -144,13 +144,13 @@ public FlagDefinition deserialize(TypeToken type, ConfigurationNode node) thr final String value = parts[1]; if (key.equalsIgnoreCase("default") || key.equalsIgnoreCase("gd_claim_default")) { if (!value.equalsIgnoreCase("global") && !value.equalsIgnoreCase("basic") && !value.equalsIgnoreCase("admin") - && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town")) { + && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town") && !value.equalsIgnoreCase("wilderness")) { throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'."); } contexts.add(new Context("gd_claim_default", value)); } else if (key.equalsIgnoreCase("override") || key.equalsIgnoreCase("gd_claim_override")) { if (!value.equalsIgnoreCase("global") && !value.equalsIgnoreCase("basic") && !value.equalsIgnoreCase("admin") - && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town") && !value.equalsIgnoreCase("claim")) { + && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town") && !value.equalsIgnoreCase("claim") && !value.equalsIgnoreCase("wilderness")) { // try UUID if (value.length() == 36) { try { diff --git a/bukkit/src/main/java/com/griefdefender/listener/CommandEventHandler.java b/bukkit/src/main/java/com/griefdefender/listener/CommandEventHandler.java index 5cdecf0..1e57ea9 100644 --- a/bukkit/src/main/java/com/griefdefender/listener/CommandEventHandler.java +++ b/bukkit/src/main/java/com/griefdefender/listener/CommandEventHandler.java @@ -82,18 +82,22 @@ public void onRemoteServerCommand(RemoteServerCommandEvent event) { // CauseTracker.getInstance().getCauseStack().add(event.getSender()); } - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerChatPost(AsyncPlayerChatEvent event) { + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerChatInput(AsyncPlayerChatEvent event) { final Player player = event.getPlayer(); final GDPlayerData playerData = this.dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); - final Iterator iterator = event.getRecipients().iterator(); // check for command input if (playerData.isWaitingForInput()) { playerData.commandInput = event.getMessage(); playerData.commandConsumer.accept(player); event.setCancelled(true); - return; } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerChatPost(AsyncPlayerChatEvent event) { + final Player player = event.getPlayer(); + final Iterator iterator = event.getRecipients().iterator(); while (iterator.hasNext()) { final Player receiver = iterator.next(); diff --git a/bukkit/src/main/java/com/griefdefender/listener/CommonBlockEventHandler.java b/bukkit/src/main/java/com/griefdefender/listener/CommonBlockEventHandler.java index f4c69dc..5e3b018 100644 --- a/bukkit/src/main/java/com/griefdefender/listener/CommonBlockEventHandler.java +++ b/bukkit/src/main/java/com/griefdefender/listener/CommonBlockEventHandler.java @@ -142,9 +142,15 @@ public void handleBlockModify(Event event, Object source, BlockState newState) { } } } - if (!(source instanceof Player) && user == null && !NMSUtil.getInstance().isBlockIce(newState.getType())) { - // always allow - return; + if (!(source instanceof Player) && user == null) { + if (source instanceof Block) { + if (!NMSUtil.getInstance().isBlockIce(((Block) source).getType())) { + return; + } + } else { + // always allow + return; + } } final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, location, targetClaim, Flags.BLOCK_MODIFY, source, newState, user, TrustTypes.BUILDER, true); diff --git a/bukkit/src/main/java/com/griefdefender/listener/EntityEventHandler.java b/bukkit/src/main/java/com/griefdefender/listener/EntityEventHandler.java index b6714eb..12a21fe 100644 --- a/bukkit/src/main/java/com/griefdefender/listener/EntityEventHandler.java +++ b/bukkit/src/main/java/com/griefdefender/listener/EntityEventHandler.java @@ -156,7 +156,7 @@ public void onEntityChangeBlockEvent(EntityChangeBlockEvent event) { user = PermissionHolderCache.getInstance().getOrCreateUser(uuid); } } - if (user == null) { + if (user == null && !NMSUtil.getInstance().isEntityMonster(event.getEntity())) { final GDEntity gdEntity = EntityTracker.getCachedEntity(event.getEntity().getEntityId()); if (gdEntity != null) { user = PermissionHolderCache.getInstance().getOrCreateUser(gdEntity.getOwnerUUID()); diff --git a/bukkit/src/main/resources/1.12.2.json b/bukkit/src/main/resources/1.12.2.json index 7e21f39..2ed3337 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": "73421d4599201a371858653a7d31c054eb972949", - "path": "com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20200607.224144-34.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20200607.224144-34.jar" + "sha1": "ac5ae7a5dab7bbf4efda26d66cb99a4cd1e91a23", + "path": "com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20200608.154737-35.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20200608.154737-35.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/1.13.2.json b/bukkit/src/main/resources/1.13.2.json index 5c3f7cf..be80dae 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": "78e6b190a71d1213632ed0c9eacb0017836e9a45", - "path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20200607.224012-33.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20200607.224012-33.jar" + "sha1": "a8b277590f2f2e4725c059f963109a232b5400e8", + "path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20200608.154648-34.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20200608.154648-34.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/1.14.2.json b/bukkit/src/main/resources/1.14.2.json index 18a356a..f23629c 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": "49837d3d065b2e642d86a43d4106edf5e89c1f42", - "path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20200607.223940-33.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20200607.223940-33.jar" + "sha1": "9b698ff86706e3e2378b01f500d48e7dde3753fb", + "path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20200608.155146-34.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20200608.155146-34.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/1.14.3.json b/bukkit/src/main/resources/1.14.3.json index c4e2064..7693e6e 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": "bc12031edab59cdb998248a9048f225ec5bfbf34", - "path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20200607.223828-34.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20200607.223828-34.jar" + "sha1": "cd56f66cfb67cc151496a19a0788b4d868950d47", + "path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20200608.154518-35.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20200608.154518-35.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/1.14.4.json b/bukkit/src/main/resources/1.14.4.json index 5b1dc3c..f97f6bb 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": "fc030c3b3b95439abd341df479e297b183a2cf13", - "path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20200607.223535-32.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20200607.223535-32.jar" + "sha1": "83d35e56feb96ab9f88378ab97945be15a04ed3d", + "path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20200608.154430-33.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20200608.154430-33.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/1.15.2.json b/bukkit/src/main/resources/1.15.2.json index 5ec0a22..405b637 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": "2d8a21c18abae4184fb6bc80cad4175fe8cbdda6", - "path": "com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20200607.223430-13.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20200607.223430-13.jar" + "sha1": "b9ba833d0305ea7e74074d664e1ecceee405aca8", + "path": "com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20200608.154231-14.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20200608.154231-14.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/1.15.json b/bukkit/src/main/resources/1.15.json index 1a52e1e..f5a17f1 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": "a20a6b8aa707a1e13333078cf10c49b64732e334", - "path": "com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20200607.223501-14.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20200607.223501-14.jar" + "sha1": "b5f4c81abce44d0f12b488b1ff0dba4ec9ff81ba", + "path": "com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20200608.154335-15.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20200608.154335-15.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/1.8.8.json b/bukkit/src/main/resources/1.8.8.json index 565b116..9092195 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": "0694300ced47831481d1bd01f91bc2a6ad180305", - "path": "com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20200607.174827-33.jar", - "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20200607.174827-33.jar" + "sha1": "9d183a6a2ec921d7907118e4e728c62554850c87", + "path": "com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20200608.154829-34.jar", + "url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20200608.154829-34.jar" }, { "name": "com.griefdefender:api:1.0.0", diff --git a/bukkit/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml index 6b7b766..671e7aa 100644 --- a/bukkit/src/main/resources/plugin.yml +++ b/bukkit/src/main/resources/plugin.yml @@ -3,5 +3,5 @@ main: com.griefdefender.GDBootstrap softdepend: [dynmap, PlaceholderAPI, WorldEdit, WorldGuard, Vault] depend: [LuckPerms] load: STARTUP -version: '1.3.2' +version: '1.3.3' api-version: 1.13 diff --git a/gradle.properties b/gradle.properties index 94e64ea..2722744 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ name=GriefDefender group=com.griefdefender url=https://github.com/bloodmc/GriefDefender -version=1.3.2 +version=1.3.3 apiVersion=1.0.0-20200528.202302-24 # Bukkit -adapterVersion=1.15.2-20200607.223430-13 +adapterVersion=1.15.2-20200608.154231-14 spigotVersion=1.15.2-R0.1-SNAPSHOT # Sponge adapterSpongeVersion=1.12.2-20200607.180353-5 diff --git a/sponge/src/main/java/com/griefdefender/claim/GDClaimManager.java b/sponge/src/main/java/com/griefdefender/claim/GDClaimManager.java index 823aa99..c6180f7 100644 --- a/sponge/src/main/java/com/griefdefender/claim/GDClaimManager.java +++ b/sponge/src/main/java/com/griefdefender/claim/GDClaimManager.java @@ -380,9 +380,12 @@ private void deleteChunkHashes(GDClaim claim) { } for (Long chunkHash : chunkHashes) { - Set claimsInChunk = this.getInternalChunksToClaimsMap().get(chunkHash); + Set claimsInChunk = this.chunksToClaimsMap.get(chunkHash); if (claimsInChunk != null) { claimsInChunk.remove(claim); + if (claimsInChunk.isEmpty()) { + this.chunksToClaimsMap.remove(chunkHash); + } } } } diff --git a/sponge/src/main/java/com/griefdefender/command/CommandDebug.java b/sponge/src/main/java/com/griefdefender/command/CommandDebug.java index 6852411..e786fbe 100644 --- a/sponge/src/main/java/com/griefdefender/command/CommandDebug.java +++ b/sponge/src/main/java/com/griefdefender/command/CommandDebug.java @@ -67,7 +67,7 @@ public void execute(CommandSource src, String command, @Optional String filter) } else if (command.equalsIgnoreCase("paste")) { paste = true; } else if (command.equalsIgnoreCase("off")) { - GriefDefenderPlugin.getInstance().getDebugUserMap().remove(src.getIdentifier()); + GriefDefenderPlugin.getInstance().getDebugUserMap().remove(src.getName()); if (GriefDefenderPlugin.getInstance().getDebugUserMap().isEmpty()) { GriefDefenderPlugin.debugActive = false; } @@ -75,7 +75,7 @@ public void execute(CommandSource src, String command, @Optional String filter) if (debugData == null) { if (paste) { - debugData = GriefDefenderPlugin.getInstance().getDebugUserMap().get(src.getIdentifier()); + debugData = GriefDefenderPlugin.getInstance().getDebugUserMap().get(src.getName()); if (debugData == null) { TextAdapter.sendComponent(src, TextComponent.of("Nothing to paste!", TextColor.RED)); } else { @@ -87,7 +87,7 @@ public void execute(CommandSource src, String command, @Optional String filter) .append("Debug ", TextColor.GRAY) .append("OFF", TextColor.RED) .build()); - GriefDefenderPlugin.getInstance().getDebugUserMap().remove(src.getIdentifier()); + GriefDefenderPlugin.getInstance().getDebugUserMap().remove(src.getName()); if (GriefDefenderPlugin.getInstance().getDebugUserMap().isEmpty()) { GriefDefenderPlugin.debugActive = false; } @@ -126,7 +126,7 @@ private GDDebugData getOrCreateDebugUser(CommandSource src, String filter, boole } debugData = new GDDebugData(src, filter, verbose); - GriefDefenderPlugin.getInstance().getDebugUserMap().put(src.getIdentifier(), debugData); + GriefDefenderPlugin.getInstance().getDebugUserMap().put(src.getName(), debugData); GriefDefenderPlugin.debugActive = true; return debugData; } 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 411de8f..07ded80 100644 --- a/sponge/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java +++ b/sponge/src/main/java/com/griefdefender/configuration/category/ClaimCategory.java @@ -46,7 +46,6 @@ public class ClaimCategory extends ConfigCategory { + "\nNote: To disable, set value to '0'.") public int explosionCancelBlockLimit = 50; @Setting(value = "worldedit-schematics", comment = "Whether to use WorldEdit for schematics. Default: false" - + "\nNote: Sponge schematics do not support Entities. If you want entities, then you must set this to true to use WorldEdit instead." + "\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; @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/sponge/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java b/sponge/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java index 6413c47..dc7168b 100644 --- a/sponge/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java +++ b/sponge/src/main/java/com/griefdefender/configuration/category/CustomFlagGroupDefinitionCategory.java @@ -88,21 +88,20 @@ public void initDefaults() { continue; } Set contexts = new HashSet<>(flagDefinition.getContexts()); - boolean shouldApply = false; - boolean isOverride = false; + Set defaultContexts = new HashSet<>(); + Set overrideContexts = new HashSet<>(); String groupStr = null; final Iterator iterator = contexts.iterator(); while (iterator.hasNext()) { final Context context = iterator.next(); if (context.getKey().equalsIgnoreCase("gd_claim_default")) { - shouldApply = true; + defaultContexts.add(context); } else if (context.getKey().equalsIgnoreCase("gd_claim_override")) { if (context.getValue().equalsIgnoreCase("claim")) { iterator.remove(); continue; } - shouldApply = true; - isOverride = true; + overrideContexts.add(context); } else if (context.getKey().equalsIgnoreCase("group")) { groupStr = context.getValue(); } @@ -117,14 +116,19 @@ public void initDefaults() { } } for (FlagData flagData : flagDefinition.getFlagData()) { - Set permissionContexts = new HashSet<>(contexts); + Set permissionContexts = new HashSet<>(); permissionContexts.addAll(flagData.getContexts()); - if (shouldApply) { - if (isOverride) { - PermissionUtil.getInstance().setPermissionValue(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); - } else { - PermissionUtil.getInstance().setTransientPermission(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); - } + // apply defaults + for (Context context : defaultContexts) { + permissionContexts.add(context); + PermissionUtil.getInstance().setTransientPermission(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); + permissionContexts.remove(context); + } + // apply overrides + for (Context context : overrideContexts) { + permissionContexts.add(context); + PermissionUtil.getInstance().setPermissionValue(holder, flagData.getFlag().getPermission(), flagDefinition.getDefaultValue(), permissionContexts); + permissionContexts.remove(context); } } } 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 b06c25f..098f11a 100644 --- a/sponge/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java +++ b/sponge/src/main/java/com/griefdefender/configuration/serializer/FlagDefinitionSerializer.java @@ -144,13 +144,13 @@ public FlagDefinition deserialize(TypeToken type, ConfigurationNode node) thr final String value = parts[1]; if (key.equalsIgnoreCase("default") || key.equalsIgnoreCase("gd_claim_default")) { if (!value.equalsIgnoreCase("global") && !value.equalsIgnoreCase("basic") && !value.equalsIgnoreCase("admin") - && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town")) { + && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town") && !value.equalsIgnoreCase("wilderness")) { throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'."); } contexts.add(new Context("gd_claim_default", value)); } else if (key.equalsIgnoreCase("override") || key.equalsIgnoreCase("gd_claim_override")) { if (!value.equalsIgnoreCase("global") && !value.equalsIgnoreCase("basic") && !value.equalsIgnoreCase("admin") - && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town") && !value.equalsIgnoreCase("claim")) { + && !value.equalsIgnoreCase("subdivision") && !value.equalsIgnoreCase("town") && !value.equalsIgnoreCase("claim") && !value.equalsIgnoreCase("wilderness")) { // try UUID if (value.length() == 36) { try { diff --git a/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java b/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java index d6b4069..57bc266 100644 --- a/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java +++ b/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java @@ -631,7 +631,7 @@ private void checkPlayerFlySpeed(GDPermissionUser user, GDClaim fromClaim, GDCla } final GDPlayerData playerData = user.getInternalPlayerData(); - final double currentFlySpeed = player.get(Keys.FLYING_SPEED).get(); + final double currentFlySpeed = Math.round(player.get(Keys.FLYING_SPEED).get() * 100.0) / 100.0; final double flySpeed = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), playerData.getSubject(), Options.PLAYER_FLY_SPEED, toClaim); if (flySpeed <= 0) { String configValue = GriefDefenderPlugin.getOptionConfig().getConfig().vanillaFallbackMap.get(Options.PLAYER_FLY_SPEED.getName().toLowerCase()); @@ -679,7 +679,7 @@ private void checkPlayerWalkSpeed(GDPermissionUser user, GDClaim fromClaim, GDCl } final GDPlayerData playerData = user.getInternalPlayerData(); - final double currentWalkSpeed = player.get(Keys.WALKING_SPEED).get(); + final double currentWalkSpeed = Math.round(player.get(Keys.WALKING_SPEED).get() * 100.0) / 100.0; final double walkSpeed = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), playerData.getSubject(), Options.PLAYER_WALK_SPEED, toClaim); if (walkSpeed <= 0) { String configValue = GriefDefenderPlugin.getOptionConfig().getConfig().vanillaFallbackMap.get(Options.PLAYER_WALK_SPEED.getName().toLowerCase());