From 501c303775ef1a14a741b7a1e63fd4b009d646d0 Mon Sep 17 00:00:00 2001 From: bloodshot Date: Sat, 28 Dec 2019 15:34:17 -0500 Subject: [PATCH] sponge: Fix permission lookups for 'any'. * Fix '/cf' command when using modid:any. * Improve sponge playerdata migration. --- .../java/com/griefdefender/command/CommandHelper.java | 4 +--- .../com/griefdefender/migrator/GPSpongeMigrator.java | 11 +++++++++-- .../griefdefender/permission/GDPermissionManager.java | 4 ++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/sponge/src/main/java/com/griefdefender/command/CommandHelper.java b/sponge/src/main/java/com/griefdefender/command/CommandHelper.java index 3243de2..a9b6718 100644 --- a/sponge/src/main/java/com/griefdefender/command/CommandHelper.java +++ b/sponge/src/main/java/com/griefdefender/command/CommandHelper.java @@ -242,9 +242,7 @@ public static PermissionResult addFlagPermission(CommandSource src, GDPermission } String[] parts = target.split(":"); - if (parts.length > 1 && parts[1].equalsIgnoreCase("any")) { - target = baseFlag + "." + parts[0]; - } else { + if (parts.length <= 1 || !parts[1].equalsIgnoreCase("any")) { // check for meta parts = target.split("\\."); String targetFlag = parts[0]; diff --git a/sponge/src/main/java/com/griefdefender/migrator/GPSpongeMigrator.java b/sponge/src/main/java/com/griefdefender/migrator/GPSpongeMigrator.java index d7dd1ed..7756551 100644 --- a/sponge/src/main/java/com/griefdefender/migrator/GPSpongeMigrator.java +++ b/sponge/src/main/java/com/griefdefender/migrator/GPSpongeMigrator.java @@ -37,6 +37,7 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashSet; @@ -63,9 +64,15 @@ public class GPSpongeMigrator { public void migrateData() { try { - FileUtils.copyDirectory(GP_GLOBAL_PLAYER_DATA_PATH.toFile(), GD_DATA_ROOT_PATH.resolve("GlobalPlayerData").toFile(), true); + if (Files.exists(GP_GLOBAL_PLAYER_DATA_PATH)) { + if (Files.isDirectory(GP_GLOBAL_PLAYER_DATA_PATH)) { + FileUtils.copyDirectory(GP_GLOBAL_PLAYER_DATA_PATH.toFile(), GD_DATA_ROOT_PATH.resolve("GlobalPlayerData").toFile(), true); + } else { + // Support symlinks + FileUtils.copyFile(GP_GLOBAL_PLAYER_DATA_PATH.toFile(), GD_DATA_ROOT_PATH.resolve("GlobalPlayerData").toFile(), true); + } + } FileUtils.copyDirectory(GP_CLAIM_DATA_PATH.toFile(), GD_DATA_ROOT_PATH.resolve("worlds").toFile(), true); - //FileUtils.copyFile(GP_GLOBAL_CONFIG.toFile(), GD_DATA_ROOT_PATH.resolve("global.conf").toFile()); } catch (IOException e1) { e1.printStackTrace(); } diff --git a/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java b/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java index 16c0ad1..c683911 100644 --- a/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java +++ b/sponge/src/main/java/com/griefdefender/permission/GDPermissionManager.java @@ -983,12 +983,16 @@ private Set populateEventSourceTargetContext(Set contexts, Str if (!id.contains(":")) { id = "minecraft:" + id; } + final String[] parts = id.split(":"); + final String modId = parts[0]; if (isSource) { this.eventSourceId = id.toLowerCase(); contexts.add(new Context("source", this.eventSourceId)); + contexts.add(new Context("source", modId + ":any")); } else { this.eventTargetId = id.toLowerCase(); contexts.add(new Context("target", this.eventTargetId)); + contexts.add(new Context("target", modId + ":any")); } return contexts; }