Lowercase permissions can wait for a major version bump

I don't want to double our permissions checks for backwards compatibility.
This commit is contained in:
Jikoo 2017-11-07 18:16:38 -05:00
parent 48c61eeb82
commit cbb2b4d232
3 changed files with 67 additions and 41 deletions

View file

@ -11,8 +11,8 @@ OpenInv is a [Bukkit plugin](https://dev.bukkit.org/bukkit-plugins/openinv/) whi
- Read-only mode! No edits allowed! Don't grant `OpenInv.editender`
- Cross-world support! Don't grant `OpenInv.crossworld`
- No opening others! Don't grant `OpenInv.openenderall`
- **SilentChest**: Open containers without displaying an animation or making sound.
- **AnyChest**: Open containers, even if blocked by ocelots or blocks.
- **SilentContainer**: Open containers without displaying an animation or making sound.
- **AnyContainer**: Open containers, even if blocked by ocelots or blocks.
## Commands
<table width=100%>
@ -42,14 +42,19 @@ OpenInv is a [Bukkit plugin](https://dev.bukkit.org/bukkit-plugins/openinv/) whi
<td>Lists all online players that have a certain item in their ender chest.</td>
</tr>
<tr>
<td>/anychest [check]</td>
<td>ac</td>
<td>Check or toggle the AnyChest function, allowing opening blocked containers.</td>
<td>/searchenchant &lt[enchantment] [MinLevel]&gt</td>
<td>searchenchants</td>
<td>Lists all online players with a specific enchantment.</td>
</tr>
<tr>
<td>/silentchest [check]</td>
<td>sc</td>
<td>Check or toggle the SilentChest function, allowing opening containers silently.</td>
<td>/anycontainer [check]</td>
<td>ac, anychest</td>
<td>Check or toggle the AnyContainer function, allowing opening blocked containers.</td>
</tr>
<tr>
<td>/silentcontainer [check]</td>
<td>sc, silentchest</td>
<td>Check or toggle the SilentContainer function, allowing opening containers silently.</td>
</tr>
</table>
@ -103,13 +108,25 @@ OpenInv is a [Bukkit plugin](https://dev.bukkit.org/bukkit-plugins/openinv/) whi
<td>OpenInv.search</td>
<td>Required to use /searchinv and /searchender.</td>
</tr>
<tr>
<td>OpenInv.searchenchant</td>
<td>Required to use /searchenchant.</td>
</tr>
<tr>
<td>OpenInv.anychest</td>
<td>Required to use /anychest.</td>
</tr>
<tr>
<td>OpenInv.any.default</td>
<td>Cause AnyContainer to be enabled by default.</td>
</tr>
<tr>
<td>OpenInv.silent</td>
<td>Required to use /silentchest.</td>
<td>Required to use /silentcontainer.</td>
</tr>
<tr>
<td>OpenInv.silent.default</td>
<td>Cause SilentContainer to be enabled by default.</td>
</tr>
</table>

View file

@ -4,35 +4,44 @@ import org.bukkit.permissions.Permissible;
public enum Permissions {
OPENINV("OpenInv.openinv"),
OVERRIDE("OpenInv.override"),
EXEMPT("OpenInv.exempt"),
CROSSWORLD("OpenInv.crossworld"),
SILENT("OpenInv.silent"),
ANYCHEST("OpenInv.anychest"),
ENDERCHEST("OpenInv.openender"),
ENDERCHEST_ALL("OpenInv.openenderall"),
SEARCH("OpenInv.search"),
EDITINV("OpenInv.editinv"),
EDITENDER("OpenInv.editender"),
OPENSELF("OpenInv.openself");
OPENINV("openinv"),
OVERRIDE("override"),
EXEMPT("exempt"),
CROSSWORLD("crossworld"),
SILENT("silent"),
ANYCHEST("anychest"),
ENDERCHEST("openender"),
ENDERCHEST_ALL("openenderall"),
SEARCH("search"),
EDITINV("editinv"),
EDITENDER("editender"),
OPENSELF("openself");
private final String permission;
private final String[] permission;
private Permissions(String permission) {
this.permission = permission;
Permissions(String... permission) {
this.permission = new String[permission.length + 1];
this.permission[0] = "OpenInv";
System.arraycopy(permission, 0, permission, 1, permission.length);
}
public boolean hasPermission(Permissible permissible) {
String[] parts = permission.split("\\.");
String perm = "";
for (int i = 0; i < parts.length; i++) {
if (permissible.hasPermission(perm + "*")) {
StringBuilder permissionBuilder = new StringBuilder();
// Support wildcard nodes.
for (int i = 0; i < permission.length; i++) {
if (permissible.hasPermission(permissionBuilder.toString() + "*")) {
return true;
}
perm += parts[i] + ".";
permissionBuilder.append(permission[i]).append('.');
}
return permissible.hasPermission(permission);
// Delete trailing period.
if (permissionBuilder.length() > 0) {
permissionBuilder.deleteCharAt(permissionBuilder.length() - 1);
}
return permissible.hasPermission(permissionBuilder.toString());
}
}

View file

@ -7,10 +7,10 @@ description: >
This plugin allows you to open a player's inventory as a chest and interact with it in real time.
permissions:
openinv.any.default:
OpenInv.any.default:
description: Permission for AnyContainer to default on prior to toggling.
default: false
openinv.silent.default:
OpenInv.silent.default:
description: Permission for SilentContainer to default on prior to toggling.
default: false
@ -18,42 +18,42 @@ commands:
openinv:
aliases: [oi, inv, open]
description: Open a player's inventory
permission: OpenInv.*;OpenInv.openinv;openinv.*;openinv.openinv
permission: OpenInv.*;OpenInv.openinv
usage: |-
/<command> [Player] - Open a player's inventory
openender:
aliases: [oe]
description: Opens the enderchest of a player
permission: OpenInv.*;OpenInv.openender;openinv.*;openinv.openender
permission: OpenInv.*;OpenInv.openender
usage: |-
/<command> [Player] - Open a player's enderchest
searchinv:
aliases: [si]
description: Search and list players having a specific item
permission: OpenInv.*;OpenInv.search;openinv.*;openinv.search
permission: OpenInv.*;OpenInv.search
usage: |-
/<command> <Item> [MinAmount] - Item is the ID or the Bukkit Material, MinAmount is the minimum amount required
searchender:
aliases: [se]
permission: OpenInv.*;OpenInv.search;openinv.*;openinv.search
permission: OpenInv.*;OpenInv.search
description: Searches and lists players having a specific item in their ender chest
usage: |-
/<command> <item> [MinAmount] - Item is the ID or the Bukkit Material, MinAmount is the minimum amount required
silentcontainer:
aliases: [sc, silent, silentchest]
description: Toggle SilentContainer function, which stops sounds and animations when using containers.
permission: OpenInv.*;OpenInv.silent;openinv.*;openinv.silent
permission: OpenInv.*;OpenInv.silent
usage: |-
/<command> [Check] - Check or toggle silent chest
anycontainer:
aliases: [ac, anychest]
description: Toggle AnyContainer function, which allows opening of blocked containers.
permission: OpenInv.*;OpenInv.anychest;openinv.*;openinv.any
permission: OpenInv.*;OpenInv.anychest
usage: |-
/<command> [Check] - Checks or toggle anychest
searchenchant:
aliases: [searchenchants]
description: Search and list players with a specific enchantment.
permission: OpenInv.*;OpenInv.searchenchant;openinv.*;openinv.searchenchant
permission: OpenInv.*;OpenInv.searchenchant
usage: |-
/<command> <[enchantment] [MinLevel]> - Enchantment is the enchantment type, MinLevel is the minimum level. One is optional