Update method of permission checking, fixes #1313

This commit is contained in:
PikaMug 2020-06-01 00:57:14 -04:00
parent a5251dd8ce
commit 44f9373e5b
2 changed files with 191 additions and 143 deletions

View File

@ -26,7 +26,6 @@ import java.net.URLClassLoader;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -68,7 +67,7 @@ import org.bukkit.entity.Tameable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.permissions.Permission;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@ -3508,25 +3507,13 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
* @return {@code true} if entity is a Player that has permission * @return {@code true} if entity is a Player that has permission
*/ */
public boolean canUseQuests(UUID uuid) { public boolean canUseQuests(UUID uuid) {
if (!(Bukkit.getPlayer(uuid) instanceof Player)) {
return false;
}
Player p = Bukkit.getPlayer(uuid); Player p = Bukkit.getPlayer(uuid);
if (p.isOp()) { if (p != null) {
return true; for (Permission perm : getDescription().getPermissions()) {
} if (p.hasPermission(perm.getName())) {
try {
for (PermissionAttachmentInfo pm : p.getEffectivePermissions()) {
if (pm.getPermission().startsWith("quests")
|| pm.getPermission().equals("*")
|| pm.getPermission().equals("*.*")) {
return true; return true;
} }
} }
} catch (NullPointerException ne) {
// User has no permissions
} catch (ConcurrentModificationException cme) {
// Bummer. Not much we can do about it
} }
return false; return false;
} }

View File

@ -8,130 +8,191 @@ dev-url: https://github.com/PikaMug/Quests
author: PikaMug author: PikaMug
softdepend: [Citizens, CitizensBooks, Denizen, DungeonsXL, GPS, Heroes, mcMMO, Parties, PhatLoots, PlaceholderAPI, Vault, WorldGuard] softdepend: [Citizens, CitizensBooks, Denizen, DungeonsXL, GPS, Heroes, mcMMO, Parties, PhatLoots, PlaceholderAPI, Vault, WorldGuard]
permissions: permissions:
quests.quest: quests.*:
description: View current quest objectives description: Access ALL Quests functionality
default: true default: op
quests.questinfo: children:
description: View information about a quest quests.quest: true
default: true quests.questinfo: true
quests.quests: quests.quests: true
description: Display plugin help quests.list: true
default: true quests.take: true
quests.list: quests.quit: true
description: List available quests quests.stats: true
default: true quests.top: true
quests.take: quests.info: true
description: Accept a quest via command quests.journal: true
default: true quests.compass: true
quests.quit: quests.admin.*: true
description: Quit a current quest quests.editor.*: true
default: true quests.events.*: true
quests.stats: quests.actions.*: true
description: View quest statistics quests.quest:
default: true description: View current quest objectives
quests.top: default: true
description: View plugin leaderboards quests.questinfo:
default: true description: View information about a quest
quests.info: default: true
description: View plugin information quests.quests:
default: true description: Display plugin help
quests.journal: default: true
description: Toggle the Quest Journal quests.list:
default: true description: List available quests
quests.compass: default: true
description: Use a Compass to target quests quests.take:
default: true description: Accept a quest via command
quests.admin: default: true
description: Display administrator help quests.quit:
default: op description: Quit a current quest
quests.admin.stats: default: true
description: View quest statistics of a player quests.stats:
default: op description: View quest statistics
quests.admin.give: default: true
description: Force a player to take a quest quests.top:
default: op description: View plugin leaderboards
quests.admin.quit: default: true
description: Force a player to quit a quest quests.info:
default: op description: View plugin information
quests.admin.points: default: true
description: Set a player's Quest Points quests.journal:
default: op description: Toggle the Quest Journal
quests.admin.takepoints: default: true
description: Take away a player's Quest Points quests.compass:
default: op description: Use a Compass to target quests
quests.admin.givepoints: default: true
description: Add to a player's Quest Points quests.admin.*:
default: op description: Access all Questadmin functionality
quests.admin.pointsall: default: op
description: Set ALL players' Quest Points children:
default: op quests.admin: true
quests.admin.finish: quests.admin.stats: true
description: Force a player to complete a quest quests.admin.give: true
default: op quests.admin.quit: true
quests.admin.nextstage: quests.admin.points: true
description: Force a player to complete current stage quests.admin.takepoints: true
default: op quests.admin.givepoints: true
quests.admin.setstage: quests.admin.finish: true
description: Set the current stage for a player quests.admin.nextstage: true
default: op quests.admin.setstage: true
quests.admin.reset: quests.admin.reset: true
description: Clear all Quests data of a player quests.admin.remove: true
default: op quests.admin.reload: true
quests.admin.remove: quests.admin.drop: true
description: Remove a completed quest from a player quests.admin:
default: op description: Display administrator help
quests.admin.reload: default: op
description: Safely reload the plugin quests.admin.stats:
default: op description: View quest statistics of a player
quests.admin.drop: default: op
description: Ability to drop the Quests Journal quests.admin.give:
default: op description: Force a player to take a quest
quests.editor.editor: default: op
description: Ability to open Quests Editor quests.admin.quit:
default: op description: Force a player to quit a quest
quests.editor.create: default: op
description: Ability to create new quests quests.admin.points:
default: op description: Set a player's Quest Points
quests.editor.edit: default: op
description: Ability to edit existing quests quests.admin.takepoints:
default: op description: Take away a player's Quest Points
quests.editor.delete: default: op
description: Ability to delete existing quests quests.admin.givepoints:
default: op description: Add to a player's Quest Points
quests.events.editor: default: op
description: LEGACY - Ability to open Actions Editor quests.admin.pointsall:
default: op description: Set ALL players' Quest Points
quests.events.create: default: op
description: LEGACY - Ability to create new actions quests.admin.finish:
default: op description: Force a player to complete a quest
quests.events.edit: default: op
description: LEGACY - Ability to edit existing actions quests.admin.nextstage:
default: op description: Force a player to complete current stage
quests.events.delete: default: op
description: LEGACY - Ability to delete existing actions quests.admin.setstage:
default: op description: Set the current stage for a player
quests.actions.editor: default: op
description: Ability to open Actions Editor quests.admin.reset:
default: op description: Clear all Quests data of a player
quests.actions.create: default: op
description: Ability to create new actions quests.admin.remove:
default: op description: Remove a completed quest from a player
quests.actions.edit: default: op
description: Ability to edit existing actions quests.admin.reload:
default: op description: Safely reload the plugin
quests.actions.delete: default: op
description: Ability to delete existing actions quests.admin.drop:
default: op description: Ability to drop the Quests Journal
default: op
quests.editor.*:
description: Access all Quests Editor functionality
default: op
children:
quests.editor.editor: true
quests.editor.create: true
quests.editor.edit: true
quests.editor.delete: true
quests.editor.editor:
description: Ability to open Quests Editor
default: op
quests.editor.create:
description: Ability to create new quests
default: op
quests.editor.edit:
description: Ability to edit existing quests
default: op
quests.editor.delete:
description: Ability to delete existing quests
default: op
quests.events.*:
description: LEGACY - Access all Actions Editor functionality
default: op
children:
quests.events.editor: true
quests.events.create: true
quests.events.edit: true
quests.events.delete: true
quests.events.editor:
description: LEGACY - Ability to open Actions Editor
default: op
quests.events.create:
description: LEGACY - Ability to create new actions
default: op
quests.events.edit:
description: LEGACY - Ability to edit existing actions
default: op
quests.events.delete:
description: LEGACY - Ability to delete existing actions
default: op
quests.actions.*:
description: Access all Actions Editor functionality
default: op
children:
quests.actions.editor: true
quests.actions.create: true
quests.actions.edit: true
quests.actions.delete: true
quests.actions.editor:
description: Ability to open Actions Editor
default: op
quests.actions.create:
description: Ability to create new actions
default: op
quests.actions.edit:
description: Ability to edit existing actions
default: op
quests.actions.delete:
description: Ability to delete existing actions
default: op
commands: commands:
quests: quests:
description: Quests command description: Quests command
permission: quests.quests permission: quests.quests
aliases: qs aliases: qs
questadmin: questadmin:
description: Quests admin command description: Quests admin command
permission: quests.admin permission: quests.admin
aliases: [questsadmin, qa] aliases: [questsadmin, qa]
quest: quest:
description: Quest command description: Quest command
permission: quests.quest permission: quests.quest
aliases: q aliases: q