Add config options to disable commands, explicit permissions definitions

This commit is contained in:
libraryaddict 2018-11-08 21:04:18 +13:00
parent fd05c7a5dd
commit 19d3053201
4 changed files with 77 additions and 27 deletions

View File

@ -66,6 +66,23 @@ public class DisguiseConfig {
private static boolean modifyCollisions; private static boolean modifyCollisions;
private static boolean disableFriendlyInvisibles; private static boolean disableFriendlyInvisibles;
private static boolean warnScoreboardConflict; private static boolean warnScoreboardConflict;
private static boolean explicitDisguisePermissions;
private static boolean disableCommands;
/**
* No setter provided as this cannot be changed after startup
*/
public static boolean isDisableCommands() {
return disableCommands;
}
public static boolean isExplicitDisguisePermissions() {
return explicitDisguisePermissions;
}
public static void setExplicitDisguisePermissions(boolean explictDisguisePermission) {
explicitDisguisePermissions = explictDisguisePermission;
}
public static Entry<String, Disguise> getCustomDisguise(String disguise) { public static Entry<String, Disguise> getCustomDisguise(String disguise) {
for (Entry<String, Disguise> entry : customDisguises.entrySet()) { for (Entry<String, Disguise> entry : customDisguises.entrySet()) {
@ -226,6 +243,8 @@ public class DisguiseConfig {
setModifyCollisions(config.getBoolean("Scoreboard.Collisions")); setModifyCollisions(config.getBoolean("Scoreboard.Collisions"));
setDisableFriendlyInvisibles(config.getBoolean("Scoreboard.DisableFriendlyInvisibles")); setDisableFriendlyInvisibles(config.getBoolean("Scoreboard.DisableFriendlyInvisibles"));
setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict")); setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict"));
disableCommands = config.getBoolean("DisableCommands");
setExplicitDisguisePermissions(config.getBoolean("Permissions.ExplictDisguises"));
if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) { if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) {
DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!"); DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!");

View File

@ -69,23 +69,25 @@ public class LibsDisguises extends JavaPlugin {
Bukkit.getPluginManager().registerEvents(listener, this); Bukkit.getPluginManager().registerEvents(listener, this);
registerCommand("disguise", new DisguiseCommand()); if (!DisguiseConfig.isDisableCommands()) {
registerCommand("undisguise", new UndisguiseCommand()); registerCommand("disguise", new DisguiseCommand());
registerCommand("disguiseplayer", new DisguisePlayerCommand()); registerCommand("undisguise", new UndisguiseCommand());
registerCommand("undisguiseplayer", new UndisguisePlayerCommand()); registerCommand("disguiseplayer", new DisguisePlayerCommand());
registerCommand("undisguiseentity", new UndisguiseEntityCommand()); registerCommand("undisguiseplayer", new UndisguisePlayerCommand());
registerCommand("disguiseentity", new DisguiseEntityCommand()); registerCommand("undisguiseentity", new UndisguiseEntityCommand());
registerCommand("disguiseradius", new DisguiseRadiusCommand(getConfig().getInt("DisguiseRadiusMax"))); registerCommand("disguiseentity", new DisguiseEntityCommand());
registerCommand("undisguiseradius", new UndisguiseRadiusCommand(getConfig().getInt("UndisguiseRadiusMax"))); registerCommand("disguiseradius", new DisguiseRadiusCommand(getConfig().getInt("DisguiseRadiusMax")));
registerCommand("disguisehelp", new DisguiseHelpCommand()); registerCommand("undisguiseradius", new UndisguiseRadiusCommand(getConfig().getInt("UndisguiseRadiusMax")));
registerCommand("disguiseclone", new DisguiseCloneCommand()); registerCommand("disguisehelp", new DisguiseHelpCommand());
registerCommand("libsdisguises", new LibsDisguisesCommand()); registerCommand("disguiseclone", new DisguiseCloneCommand());
registerCommand("disguiseviewself", new DisguiseViewSelfCommand()); registerCommand("libsdisguises", new LibsDisguisesCommand());
registerCommand("disguisemodify", new DisguiseModifyCommand()); registerCommand("disguiseviewself", new DisguiseViewSelfCommand());
registerCommand("disguisemodifyentity", new DisguiseModifyEntityCommand()); registerCommand("disguisemodify", new DisguiseModifyCommand());
registerCommand("disguisemodifyplayer", new DisguiseModifyPlayerCommand()); registerCommand("disguisemodifyentity", new DisguiseModifyEntityCommand());
registerCommand("disguisemodifyradius", registerCommand("disguisemodifyplayer", new DisguiseModifyPlayerCommand());
new DisguiseModifyRadiusCommand(getConfig().getInt("DisguiseRadiusMax"))); registerCommand("disguisemodifyradius",
new DisguiseModifyRadiusCommand(getConfig().getInt("DisguiseRadiusMax")));
}
infectWithMetrics(); infectWithMetrics();
} }
@ -230,8 +232,17 @@ public class LibsDisguises extends JavaPlugin {
}); });
metrics.addCustomChart(new Metrics.SimplePie("targeted_disguises") { metrics.addCustomChart(new Metrics.SimplePie("targeted_disguises") {
/**
* Store value just to minimize amount of times it's called, and to persist even when not using anymore
*/
private boolean targetedDisguises;
@Override @Override
public String getValue() { public String getValue() {
if (targetedDisguises) {
return "Yes";
}
Collection<HashSet<TargetedDisguise>> list = DisguiseUtilities.getDisguises().values(); Collection<HashSet<TargetedDisguise>> list = DisguiseUtilities.getDisguises().values();
if (list.isEmpty()) if (list.isEmpty())
@ -242,6 +253,7 @@ public class LibsDisguises extends JavaPlugin {
if (disg.getObservers().isEmpty()) if (disg.getObservers().isEmpty())
continue; continue;
targetedDisguises = true;
return "Yes"; return "Yes";
} }
} }

View File

@ -189,12 +189,10 @@ public class DisguisePermissions {
Map<String, Boolean> permissions = new HashMap<>(); Map<String, Boolean> permissions = new HashMap<>();
// If the command sender is OP, then this will work even as the below code doesn't // If the command sender is OP, then this will work even as the below code doesn't
for (String perm : new String[]{permissionNode + "*", "libsdisguises.*.*"}) { // libsdisguises.[command].[disguise].[options]
if (!sender.hasPermission(perm)) { // They can use all commands, all disguises, all options
continue; if (sender.hasPermission("libsdisguises.*.*.*")) {
} permissions.put("libsdisguises.*.*.*", true);
permissions.put(perm, true);
} }
for (PermissionAttachmentInfo permission : sender.getEffectivePermissions()) { for (PermissionAttachmentInfo permission : sender.getEffectivePermissions()) {
@ -294,8 +292,9 @@ public class DisguisePermissions {
disabled = false; disabled = false;
} }
// If the child disguise does not have any options defined, give them wildcard by default // If the child disguise does not have any options defined, give them wildcard by default if
if (parsedPermission.options.isEmpty()) { // config allows
if (parsedPermission.options.isEmpty() && !DisguiseConfig.isExplictDisguisePermissions()) {
storage.wildcardAllow = true; storage.wildcardAllow = true;
// If this disguise has options defined, unless wildcard was explictly given then remove it // If this disguise has options defined, unless wildcard was explictly given then remove it
} else if (!storage.permittedOptions.contains("*")) { } else if (!storage.permittedOptions.contains("*")) {

View File

@ -1,5 +1,22 @@
# Shall I notify people of a LibsDisguises update? Permissions:
NotifyUpdate: true # By default "libsdisguises.disguise.cow" will allow all options for cow disguise unless another permission has
# defined otherwise.
# If given "libsdisguises.disguise.animals.setburning" then "libsdisguises.disguise.cow" they will still be able to
# use other options like "setbaby". This was provided for backwards compatibility.
# By turning this from 'false' to 'true' the plugin will no longer give them the options unless the player was
# explicitly granted it. Even if by wildcard. The above example means they can only use "setburning"
# To summerize, "libsdisguises.disguise.cow" will no longer let them do any options on the cow disguise unless it
# was added to their permissions
# You can read more about permissions here: https://www.spigotmc.org/wiki/lib-s-disguises-setting-up-permissions/
# The permission used to check OPs who may not have permissions defined, is "libsdisguises.*.*.*" which you can
# negate with your permissions plugin
ExplicitDisguises: false
# Disables commands with the exception of /libsdisguises. Useful if you don't want the plugin to be used by anything
# but a plugin
DisableCommands: false
# The disguise plugin stores all GameProfiles inside a file called 'cache.yml' # The disguise plugin stores all GameProfiles inside a file called 'cache.yml'
# This means that the plugin doesn't need to constantly call Mojang just to find a skin for an offline player # This means that the plugin doesn't need to constantly call Mojang just to find a skin for an offline player
@ -49,6 +66,9 @@ Scoreboard:
# If self disguises are disabled, or the scoreboard is using IGNORE_SCOREBOARD then this does nothing. # If self disguises are disabled, or the scoreboard is using IGNORE_SCOREBOARD then this does nothing.
WarnConflict: true WarnConflict: true
# Shall I notify those with the correct permission when there's a LibsDisguises update?
NotifyUpdate: true
# Whats the permission to get the notification? # Whats the permission to get the notification?
Permission: 'libsdisguises.update' Permission: 'libsdisguises.update'