From 9f5e194a6e16e6a7bb59ad24dc86708d064d8452 Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 28 Aug 2016 17:43:02 +0100 Subject: [PATCH] bug fixes --- .../java/me/lucko/luckperms/api/Node.java | 6 ++++ .../luckperms/api/vault/VaultChatHook.java | 2 +- .../api/vault/VaultPermissionHook.java | 2 +- .../lucko/luckperms/commands/SubCommand.java | 4 +-- .../group/subcommands/GroupSetPermission.java | 2 +- .../subcommands/GroupSetTempPermission.java | 2 +- .../subcommands/GroupUnSetPermission.java | 2 +- .../subcommands/GroupUnsetTempPermission.java | 2 +- .../commands/user/subcommands/UserClear.java | 1 - .../user/subcommands/UserSetPermission.java | 2 +- .../subcommands/UserSetTempPermission.java | 2 +- .../user/subcommands/UserUnSetPermission.java | 2 +- .../subcommands/UserUnsetTempPermission.java | 2 +- .../luckperms/core/PermissionHolder.java | 22 +++++++----- .../storage/methods/FlatfileDatastore.java | 2 -- .../storage/methods/MongoDBDatastore.java | 1 - .../storage/methods/SQLDatastore.java | 2 -- .../java/me/lucko/luckperms/users/User.java | 5 +-- .../me/lucko/luckperms/users/UserManager.java | 35 +++++++++++++++---- .../luckperms/utils/AbstractManager.java | 2 +- .../java/me/lucko/luckperms/utils/Node.java | 30 +++++----------- 21 files changed, 71 insertions(+), 59 deletions(-) diff --git a/api/src/main/java/me/lucko/luckperms/api/Node.java b/api/src/main/java/me/lucko/luckperms/api/Node.java index 8d0a460ab..60378552f 100644 --- a/api/src/main/java/me/lucko/luckperms/api/Node.java +++ b/api/src/main/java/me/lucko/luckperms/api/Node.java @@ -151,20 +151,26 @@ public interface Node extends Map.Entry { /** * @return the time in Unix time when this node will expire + * @throws IllegalStateException if the node is not temporary */ long getExpiryUnixTime(); /** * @return the {@link Date} when this node will expire + * @throws IllegalStateException if the node is not temporary */ Date getExpiry(); /** * @return the number of seconds until this permission will expire + * @throws IllegalStateException if the node is not temporary */ long getSecondsTilExpiry(); /** + * Return true if the node has expired. + * This also returns false if the node is not temporary + * * @return true if this node has expired */ boolean hasExpired(); diff --git a/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultChatHook.java b/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultChatHook.java index fbece153f..ffee11e91 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultChatHook.java +++ b/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultChatHook.java @@ -55,7 +55,7 @@ import static me.lucko.luckperms.utils.ArgumentChecker.unescapeCharacters; * * Registered on normal priority so other plugins can override. */ -class VaultChatHook extends Chat { +public class VaultChatHook extends Chat { @Setter private LPBukkitPlugin plugin; diff --git a/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultPermissionHook.java b/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultPermissionHook.java index 555b9145f..40f03ba4a 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultPermissionHook.java +++ b/bukkit/src/main/java/me/lucko/luckperms/api/vault/VaultPermissionHook.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.groups.Group; import me.lucko.luckperms.users.User; import net.milkbowl.vault.permission.Permission; -class VaultPermissionHook extends Permission { +public class VaultPermissionHook extends Permission { @Setter private LPBukkitPlugin plugin; diff --git a/common/src/main/java/me/lucko/luckperms/commands/SubCommand.java b/common/src/main/java/me/lucko/luckperms/commands/SubCommand.java index 28808049c..fed730fc0 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/SubCommand.java +++ b/common/src/main/java/me/lucko/luckperms/commands/SubCommand.java @@ -145,13 +145,13 @@ public abstract class SubCommand { } protected static void save(User user, Sender sender, LuckPermsPlugin plugin) { - user.refreshPermissions(); - if (plugin.getDatastore().saveUser(user)) { Message.USER_SAVE_SUCCESS.send(sender); } else { Message.USER_SAVE_ERROR.send(sender); } + + user.refreshPermissions(); } protected static void save(Group group, Sender sender, LuckPermsPlugin plugin) { diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetPermission.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetPermission.java index 10e716f8c..42f770641 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetPermission.java @@ -45,7 +45,7 @@ public class GroupSetPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Group group, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); String bool = args.get(1).toLowerCase(); if (ArgumentChecker.checkNode(node)) { diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetTempPermission.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetTempPermission.java index d1f1e639d..08f80795d 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetTempPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupSetTempPermission.java @@ -47,7 +47,7 @@ public class GroupSetTempPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Group group, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); String bool = args.get(1).toLowerCase(); if (ArgumentChecker.checkNode(node)) { diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnSetPermission.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnSetPermission.java index f1a521170..a27a68efc 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnSetPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnSetPermission.java @@ -45,7 +45,7 @@ public class GroupUnSetPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Group group, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); if (ArgumentChecker.checkNode(node)) { sendUsage(sender, label); diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnsetTempPermission.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnsetTempPermission.java index 13555713c..d8044b348 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnsetTempPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupUnsetTempPermission.java @@ -46,7 +46,7 @@ public class GroupUnsetTempPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Group group, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); if (ArgumentChecker.checkNode(node)) { sendUsage(sender, label); diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserClear.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserClear.java index 31ecf14e2..4a72f3d83 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserClear.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserClear.java @@ -43,7 +43,6 @@ public class UserClear extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, User user, List args, String label) { user.clearNodes(); - plugin.getUserManager().giveDefaults(user); Message.CLEAR_SUCCESS.send(sender, user.getName()); LogEntry.build().actor(sender).acted(user).action("clear").build().submit(plugin, sender); diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetPermission.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetPermission.java index e33b7cd8e..8c8aae5df 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetPermission.java @@ -46,7 +46,7 @@ public class UserSetPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, User user, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); String bool = args.get(1).toLowerCase(); if (ArgumentChecker.checkNode(node)) { diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetTempPermission.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetTempPermission.java index 2e0a3d6b7..385bfced6 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetTempPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserSetTempPermission.java @@ -47,7 +47,7 @@ public class UserSetTempPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, User user, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); String bool = args.get(1).toLowerCase(); if (ArgumentChecker.checkNode(node)) { diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnSetPermission.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnSetPermission.java index f1bfc8552..ba071033a 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnSetPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnSetPermission.java @@ -45,7 +45,7 @@ public class UserUnSetPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, User user, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); if (ArgumentChecker.checkNode(node)) { sendUsage(sender, label); diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnsetTempPermission.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnsetTempPermission.java index 53f1ec77e..048679f73 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnsetTempPermission.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserUnsetTempPermission.java @@ -46,7 +46,7 @@ public class UserUnsetTempPermission extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, User user, List args, String label) { - String node = args.get(0); + String node = args.get(0).replace("{SPACE}", " "); if (ArgumentChecker.checkNode(node)) { sendUsage(sender, label); diff --git a/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java b/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java index 3444e9f5c..d6697fa1d 100644 --- a/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java +++ b/common/src/main/java/me/lucko/luckperms/core/PermissionHolder.java @@ -81,17 +81,21 @@ public abstract class PermissionHolder { public SortedSet getPermissions() { // Returns no duplicate nodes. as in, nodes with the same value. + TreeSet combined = new TreeSet<>(PRIORITY_COMPARATOR); + combined.addAll(nodes); + combined.addAll(transientNodes); + TreeSet permissions = new TreeSet<>(PRIORITY_COMPARATOR); - permissions.addAll(nodes); - permissions.addAll(transientNodes); - Iterator iterator = permissions.descendingIterator(); - while (iterator.hasNext()) { - Node entry = iterator.next(); + combined: + for (Node node : combined) { + for (Node other : permissions) { + if (node.equalsIgnoringValue(other)) { + continue combined; + } + } - permissions.stream() - .filter(entry::equalsIgnoringValue) // The node appears again at a higher priority - .forEachOrdered(other -> iterator.remove()); // Remove it. + permissions.add(node); } return permissions; @@ -283,7 +287,7 @@ public abstract class PermissionHolder { private static Tristate hasPermission(Set toQuery, Node node) { for (Node n : toQuery) { if (n.equalsIgnoringValue(node)) { - n.getTristate(); + return n.getTristate(); } } diff --git a/common/src/main/java/me/lucko/luckperms/storage/methods/FlatfileDatastore.java b/common/src/main/java/me/lucko/luckperms/storage/methods/FlatfileDatastore.java index d4fd4c853..7fc647f43 100644 --- a/common/src/main/java/me/lucko/luckperms/storage/methods/FlatfileDatastore.java +++ b/common/src/main/java/me/lucko/luckperms/storage/methods/FlatfileDatastore.java @@ -178,8 +178,6 @@ public class FlatfileDatastore extends Datastore { return false; } - plugin.getUserManager().giveDefaults(user); - boolean success = doWrite(userFile, writer -> { writer.beginObject(); writer.name("uuid").value(user.getUuid().toString()); diff --git a/common/src/main/java/me/lucko/luckperms/storage/methods/MongoDBDatastore.java b/common/src/main/java/me/lucko/luckperms/storage/methods/MongoDBDatastore.java index f20b32a1e..3f6f6023a 100644 --- a/common/src/main/java/me/lucko/luckperms/storage/methods/MongoDBDatastore.java +++ b/common/src/main/java/me/lucko/luckperms/storage/methods/MongoDBDatastore.java @@ -146,7 +146,6 @@ public class MongoDBDatastore extends Datastore { try (MongoCursor cursor = c.find(new Document("_id", user.getUuid())).iterator()) { if (!cursor.hasNext()) { - plugin.getUserManager().giveDefaults(user); c.insertOne(fromUser(user)); } else { Document d = cursor.next(); diff --git a/common/src/main/java/me/lucko/luckperms/storage/methods/SQLDatastore.java b/common/src/main/java/me/lucko/luckperms/storage/methods/SQLDatastore.java index bec17652c..a84714b6c 100644 --- a/common/src/main/java/me/lucko/luckperms/storage/methods/SQLDatastore.java +++ b/common/src/main/java/me/lucko/luckperms/storage/methods/SQLDatastore.java @@ -184,8 +184,6 @@ abstract class SQLDatastore extends Datastore { boolean onResult(ResultSet resultSet) throws SQLException { boolean success = true; if (!resultSet.next()) { - plugin.getUserManager().giveDefaults(user); - success = runQuery(new QueryPS(USER_INSERT) { @Override void onRun(PreparedStatement preparedStatement) throws SQLException { diff --git a/common/src/main/java/me/lucko/luckperms/users/User.java b/common/src/main/java/me/lucko/luckperms/users/User.java index 71239c4ee..2183e54eb 100644 --- a/common/src/main/java/me/lucko/luckperms/users/User.java +++ b/common/src/main/java/me/lucko/luckperms/users/User.java @@ -286,11 +286,8 @@ public abstract class User extends PermissionHolder implements Identifiable { } } + @Override + public void set(User u) { + giveDefaultIfNeeded(u, true); + super.set(u); + } + @Override public void copy(User from, User to) { to.setNodes(from.getNodes()); @@ -62,12 +70,27 @@ public abstract class UserManager extends AbstractManager { * Set a user to the default group * @param user the user to give to */ - public void giveDefaults(User user) { - // Setup the new user with default values - try { - user.setPermission(plugin.getConfiguration().getDefaultGroupNode(), true); - } catch (ObjectAlreadyHasException ignored) {} - user.setPrimaryGroup(plugin.getConfiguration().getDefaultGroupName()); + public void giveDefaultIfNeeded(User user, boolean save) { + boolean hasGroup = false; + for (Node node : user.getPermissions()) { + if (node.isGroupNode()) { + hasGroup = true; + break; + } + } + + if (!hasGroup) { + user.setPrimaryGroup("default"); + try { + user.setPermission("group.default", true); + } catch (ObjectAlreadyHasException ignored) { + ignored.printStackTrace(); + } + + if (save) { + plugin.getDatastore().saveUser(user, Callback.empty()); + } + } } /** diff --git a/common/src/main/java/me/lucko/luckperms/utils/AbstractManager.java b/common/src/main/java/me/lucko/luckperms/utils/AbstractManager.java index e0507a3ca..d4d2423d1 100644 --- a/common/src/main/java/me/lucko/luckperms/utils/AbstractManager.java +++ b/common/src/main/java/me/lucko/luckperms/utils/AbstractManager.java @@ -61,7 +61,7 @@ public abstract class AbstractManager> { public void updateOrSet(T t) { if (!isLoaded(t.getId())) { // The object isn't already loaded - objects.put(t.getId(), t); + set(t); } else { copy(t, objects.get(t.getId())); } diff --git a/common/src/main/java/me/lucko/luckperms/utils/Node.java b/common/src/main/java/me/lucko/luckperms/utils/Node.java index a04a619da..e17f4d030 100644 --- a/common/src/main/java/me/lucko/luckperms/utils/Node.java +++ b/common/src/main/java/me/lucko/luckperms/utils/Node.java @@ -354,7 +354,7 @@ public class Node implements me.lucko.luckperms.api.Node { } public boolean hasExpired() { - return expireAt < (System.currentTimeMillis() / 1000L); + return isTemporary() && expireAt < (System.currentTimeMillis() / 1000L); } public Map getExtraContexts() { @@ -485,34 +485,26 @@ public class Node implements me.lucko.luckperms.api.Node { } } - if (other.getServer().isPresent() != this.getServer().isPresent()) { + if (other.getServer().isPresent() == this.getServer().isPresent()) { if (other.getServer().isPresent()) { if (!other.getServer().get().equalsIgnoreCase(this.getServer().get())) { return false; } } - } else { - return false; } - if (other.getWorld().isPresent() != this.getWorld().isPresent()) { + if (other.getWorld().isPresent() == this.getWorld().isPresent()) { if (other.getWorld().isPresent()) { if (!other.getWorld().get().equalsIgnoreCase(this.getWorld().get())) { return false; } } - } else { - return false; } if (!other.getExtraContexts().equals(this.getExtraContexts())) { return false; } - if (other.isTemporary() != this.isTemporary()) { - return false; - } - return true; } @@ -522,34 +514,30 @@ public class Node implements me.lucko.luckperms.api.Node { return false; } - if (other.getServer().isPresent() != this.getServer().isPresent()) { + if (other.isTemporary() != this.isTemporary()) { + return false; + } + + if (other.getServer().isPresent() == this.getServer().isPresent()) { if (other.getServer().isPresent()) { if (!other.getServer().get().equalsIgnoreCase(this.getServer().get())) { return false; } } - } else { - return false; } - if (other.getWorld().isPresent() != this.getWorld().isPresent()) { + if (other.getWorld().isPresent() == this.getWorld().isPresent()) { if (other.getWorld().isPresent()) { if (!other.getWorld().get().equalsIgnoreCase(this.getWorld().get())) { return false; } } - } else { - return false; } if (!other.getExtraContexts().equals(this.getExtraContexts())) { return false; } - if (other.isTemporary() != this.isTemporary()) { - return false; - } - return true; }