From cfc1eb27b9467da526dc1bee6b9f14c2cc3d29fc Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 1 Apr 2022 18:18:55 +1300 Subject: [PATCH] Fix permissions somewhat for negating with a wildcard for options --- .../utilities/parser/DisguiseParser.java | 1 - .../utilities/parser/DisguisePermissions.java | 18 +++++------ .../parser/DisguisePermissionsTest.java | 30 ++++++++++++++++++- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java index 02f6e143..c01d7dc1 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguiseParser.java @@ -733,7 +733,6 @@ public class DisguiseParser { toSkip++; } } else if (disguisePerm.isMob()) { // Its a mob, use the mob constructor - if (args.length > 1) { boolean adult = true; diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java index 0c19a821..f727ef21 100644 --- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java +++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissions.java @@ -151,7 +151,7 @@ public class DisguisePermissions { // If this refers to a specific disguise if (dPerm != null) { - return new ParsedPermission(new DisguisePerm[]{dPerm}, options, (byte) 0, split[1].equals("*")); + return new ParsedPermission(new DisguisePerm[]{dPerm}, options, (byte) (options.containsKey("*") ? 1 : 0), split[1].equals("*")); } // If the disguise can't be found, it may be refering to a range @@ -403,34 +403,34 @@ public class DisguisePermissions { if (permissionName.equals("ageable")) { if (Ageable.class.isAssignableFrom(disguiseType.getEntityClass())) { - return 1; + return 2; } } else if (permissionName.equals("monster") || permissionName.equals("monsters")) { if (Monster.class.isAssignableFrom(disguiseType.getEntityClass())) { - return 2; + return 3; } } else if (permissionName.equals("animal") || permissionName.equals("animals")) { if (Animals.class.isAssignableFrom(disguiseType.getEntityClass())) { - return 2; + return 3; } } else if (permissionName.equals("mob")) { if (disguiseType.isMob()) { - return 3; + return 4; } } else if (permissionName.equals("misc")) { if (disguiseType.isMisc()) { - return 3; + return 4; } } else if (permissionName.equals("custom")) { if (disguisePerm.isCustomDisguise()) { - return 3; + return 4; } } else if (permissionName.equals("vanilla")) { if (!disguisePerm.isCustomDisguise()) { - return 4; + return 5; } } else if (permissionName.equals("*")) { - return 5; + return 6; } return -1; diff --git a/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java b/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java index a8866b8e..b901bca9 100644 --- a/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java +++ b/plugin/src/test/java/me/libraryaddict/disguise/utilities/parser/DisguisePermissionsTest.java @@ -1,5 +1,7 @@ package me.libraryaddict.disguise.utilities.parser; +import lombok.SneakyThrows; +import me.libraryaddict.disguise.DisguiseAPI; import me.libraryaddict.disguise.DisguiseConfig; import me.libraryaddict.disguise.disguisetypes.DisguiseType; import org.bukkit.permissions.Permissible; @@ -213,6 +215,33 @@ public class DisguisePermissionsTest { DisguisePermissions.hasPermissionOption(disguiseOptions, "setBlock", "DIRT")); } + @SneakyThrows + @Test + public void testCustomDisguisePermissions() { + DisguiseConfig.getCustomDisguises().put(new DisguisePerm(DisguiseType.BEE, "babybee"), "bee setbaby"); + + DisguisePermissions permissions = createPermissions("disguise", false, "libsdisguises.disguise.bee.-*", "libsdisguises.disguise.babybee.nooptions"); + + Assert.assertNotNull("The custom disguise babybee should exist", DisguiseParser.getDisguisePerm("babybee")); + + Assert.assertTrue("They should be allowed to disguise as a bee", permissions.isAllowedDisguise(new DisguisePerm(DisguiseType.BEE))); + + Assert.assertFalse("They should not be allowed to disguise as a bee and call setbaby", + permissions.isAllowedDisguise(new DisguisePerm(DisguiseType.BEE), Collections.singletonList("setbaby"))); + + Assert.assertFalse("They should not be allowed to disguise as a burning bee", + permissions.isAllowedDisguise(new DisguisePerm(DisguiseType.BEE), Collections.singletonList("setburning"))); + + Assert.assertFalse("They should not be allowed to disguise as a slime", permissions.isAllowedDisguise(new DisguisePerm(DisguiseType.SLIME))); + + Assert.assertTrue("They should be allowed to disguise as babybee", permissions.isAllowedDisguise(DisguiseParser.getDisguisePerm("babybee"))); + + Assert.assertFalse("They should not be allowed to disguise as babybee and use setbaby", + permissions.isAllowedDisguise(DisguiseParser.getDisguisePerm("babybee"), Collections.singletonList("setbaby"))); + + DisguiseAPI.removeCustomDisguise("babybee"); + } + @Test public void testExplictPermissions() { DisguiseConfig.setExplicitDisguisePermissions(true); @@ -256,7 +285,6 @@ public class DisguisePermissionsTest { } private Permissible createPermissionsHolder(boolean isOp, String... perms) { - List permitted = new ArrayList<>(); List negated = new ArrayList<>(); Set attachments = new HashSet<>();