diff --git a/.locale/en_US.yml b/.locale/en_US.yml
index b21ea089..395cc47c 100644
--- a/.locale/en_US.yml
+++ b/.locale/en_US.yml
@@ -3,50 +3,46 @@
# Author: Luck
prefix: "&7&l[&b&lL&3&lP&7&l] &c"
-log-info: "&7&l[&bL&3P&7&l] &3{0}"
-log-warn: "&7&l[&bLuck&3Perms&7&l] &c[WARN] {0}"
-log-error: "&7&l[&bLuck&3Perms&7&l] &4[ERROR] {0}"
empty: "{0}"
player-online: "&aOnline"
player-offline: "&cOffline"
-loading-error: "Permissions data could not be loaded. Please try again later."
+loading-error: "&cPermissions data could not be loaded. Please try again later."
op-disabled: "&bThe vanilla OP system is disabled on this server."
-op-disabled-sponge: "&2Server Operator status has no effect when a permission plugin is installed. Please edit user data directly."
+op-disabled-sponge: "&2Please note that Server Operator status has no effect on Sponge permission checks when a permission plugin is installed. Please edit user data directly."
+log-info: "&7&l[&bL&3P&7&l] &3{0}"
+log-warn: "&7&l[&bLuck&3Perms&7&l] &c[WARN] {0}"
+log-error: "&7&l[&bLuck&3Perms&7&l] &4[ERROR] {0}"
log: "&3LOG &3&l> {0}"
-verbose-log: "&3VERBOSE &3&l> {0}"
+verbose-log: "&3VB &3&l> {0}"
export-log: "&3EXPORT &3&l> &f{0}"
export-log-progress: "&3EXPORT &3&l> &7{0}"
migration-log: "&3MIGRATION &7[&3{0}&7] &3&l> &f{1}"
migration-log-progress: "&3MIGRATION &7[&3{0}&7] &3&l> &7{1}"
-command-not-recognised: "Command not recognised."
-command-no-permission: "You do not have permission to use this command!"
-already-haspermission: "{0} already has this permission!"
-does-not-havepermission: "{0} does not have this permission set."
-already-has-temp-permission: "{0} already has this permission set temporarily!"
-does-not-have-temp-permission: "{0} does not have this permission set temporarily."
-user-not-found: "&bUser could not be found."
-user-not-online: "&bUser &a{0}&b is not online."
-user-save-error: "There was an error whilst saving the user."
-group-not-found: "&bGroup could not be found."
-group-save-error: "There was an error whilst saving the group."
-track-not-found: "&bTrack could not be found."
-track-save-error: "There was an error whilst saving the track."
-user-invalid-entry: "&d{0}&c is not a valid username/uuid."
-group-invalid-entry: "Group names can only contain alphanumeric characters."
-track-invalid-entry: "Track names can only contain alphanumeric characters."
-server-world-invalid-entry: "Server/world names can only contain alphanumeric characters and cannot exceed 36 characters in length."
-use-inherit-command: "Use the 'parent add' and 'parent remove' commands instead of specifying the node."
-verbose-invalid-filter: "&cInvalid verbose filter: &f{0}"
-verbose-on: "&bVerbose checking output set to &aTRUE &bfor all permissions."
-verbose-on-query: "&bVerbose checking output set to &aTRUE &bfor permissions matching filter: &f{0}"
-verbose-off: "&bVerbose checking output set to &cFALSE&b."
-verbose-recording-on: "&bVerbose recording set to &aTRUE &bfor all permissions."
-verbose-recording-on-query: "&bVerbose recording set to &aTRUE &bfor permissions matching filter: &f{0}"
-verbose-recording-upload-start: "&bVerbose recording was disabled. Uploading results..."
-verbose-recording-url: "&aVerbose results URL:"
+command-not-recognised: "&cCommand not recognised."
+command-no-permission: "&cYou do not have permission to use this command!"
+user-not-found: "&cA user for &4{0}&c could not be found."
+user-not-online: "&aUser &b{0}&a is not online."
+user-save-error: "&cThere was an error whilst saving user data for &4{0}&c."
+group-not-found: "&cA group named &4{0}&c could not be found."
+group-save-error: "&cThere was an error whilst saving group data for &4{0}&c."
+track-not-found: "&cA track named &4{0}&c could not be found."
+track-save-error: "&cThere was an error whilst saving track data for &4{0}&c."
+user-invalid-entry: "&4{0}&c is not a valid username/uuid."
+group-invalid-entry: "&4{0}&c is not a valid group name."
+track-invalid-entry: "&4{0}&c is not a valid track name."
+server-world-invalid-entry: "&cServer/world names can only contain alphanumeric characters and cannot exceed 36 characters in length."
+use-inherit-command: "&cUse the 'parent add' and 'parent remove' commands instead of specifying the node."
+verbose-invalid-filter: "&4{0}&c is not a valid verbose filter."
+verbose-on: "&bVerbose logging &aenabled &bfor checks matching &aANY&b."
+verbose-on-query: "&bVerbose logging &aenabled &bfor checks matching &a{0}&b."
+verbose-off: "&bVerbose logging &cdisabled&b."
+verbose-recording-on: "&bVerbose recording &aenabled &bfor checks matching &aANY&b."
+verbose-recording-on-query: "&bVerbose recording &aenabled &bfor checks matching &a{0}&b."
+verbose-upload-start: "&bVerbose logging &cdisabled&b. Uploading results..."
+verbose-results-url: "&aVerbose results URL:"
tree-upload-start: "&bGenerating permission tree..."
-tree-empty: "&aUnable to generate tree. No results were found."
-tree-url: "&aPermission Tree URL:"
+tree-empty: "&cUnable to generate tree. No results were found."
+tree-url: "&aPermission tree URL:"
search-searching: "&aSearching for users and groups with &b{0}&a..."
search-searching-members: "&aSearching for users and groups who inherit from &b{0}&a..."
search-result: "&aFound &b{0}&a entries from &b{1}&a users and &b{2}&a groups."
@@ -54,13 +50,13 @@ search-showing-users: "&bShowing user entries:"
search-showing-groups: "&bShowing group entries:"
search-showing-users-with-page: "&bShowing user entries: {0}"
search-showing-groups-with-page: "&bShowing group entries: {0}"
-apply-edits-invalid-code: "&aInvalid code. &7({0})"
-apply-edits-unable-to-read: "&aUnable to read data using the given code. &7({0})"
-apply-edits-no-target: "&aUnable to parse the target of the edit. Please supply it as an extra argument."
-apply-edits-target-group-not-exists: "&aTarget group &b{0}&a does not exist."
-apply-edits-target-user-not-uuid: "&aTarget user &b{0}&a is not a valid uuid."
-apply-edits-target-user-unable-to-load: "&aUnable to load target user &b{0}&a."
-apply-edits-target-unknown: "&aInvalid target. &7({0})"
+apply-edits-invalid-code: "&cInvalid code. &7({0})"
+apply-edits-unable-to-read: "&cUnable to read data using the given code. &7({0})"
+apply-edits-no-target: "&cUnable to parse the target of the edit. Please supply it as an extra argument."
+apply-edits-target-group-not-exists: "&cTarget group &4{0}&c does not exist."
+apply-edits-target-user-not-uuid: "&cTarget user &4{0}&c is not a valid uuid."
+apply-edits-target-user-unable-to-load: "&cUnable to load target user &4{0}&c."
+apply-edits-target-unknown: "&cInvalid target. &7({0})"
apply-edits-success: "&aSuccessfully applied &b{0}&a nodes to &b{1}&a."
editor-upload-failure: "&cUnable to upload permission data to the editor."
editor-url: "&aEditor URL:"
@@ -69,29 +65,27 @@ create-success: "&b{0}&a was successfully created."
delete-success: "&b{0}&a was successfully deleted."
rename-success: "&b{0}&a was successfully renamed to &b{1}&a."
clone-success: "&b{0}&a was successfully cloned onto &b{1}&a."
-already-inherits: "{0} already inherits '{1}'."
-does-not-inherit: "{0} does not inherit '{1}'."
-already-temp-inherits: "{0} already temporarily inherits '{1}'."
-does-not-temp-inherit: "{0} does not temporarily inherit '{1}'."
-track-already-contains: "Track {0} already contains the group '{1}'."
-track-does-not-contain: "Track {0} does not contain the group '{1}'."
-track-ambiguous-call: "The user specified is a member of multiple groups on this track. Unable to determine their location."
-group-already-exists: "That group already exists!"
-group-does-not-exist: "That group does not exist!"
-group-load-error: "An unexpected error occurred. Group not loaded."
-groups-load-error: "An unexpected error occurred. Unable to load all groups."
-track-already-exists: "That track already exists!"
-track-does-not-exist: "That track does not exist!"
-track-load-error: "An unexpected error occurred. Track not loaded."
-tracks-load-error: "An unexpected error occurred. Unable to load all tracks."
-track-empty: "The track cannot be used as it is empty or contains only one group."
-update-task-request: "&bUpdate task scheduled."
-update-task-complete: "&aUpdate task finished."
-update-task-complete-network: "&aUpdate task finished. Now attempting to push to other servers."
+already-inherits: "&b{0}&a already inherits from &b{1}&a in context {2}&a."
+does-not-inherit: "&b{0}&a does not inherit from &b{1}&a in context {2}&a."
+already-temp-inherits: "&b{0}&a already temporarily inherits from &b{1}&a in context {2}&a."
+does-not-temp-inherit: "&b{0}&a does not temporarily inherit from &b{1}&a in context {2}&a."
+track-already-contains: "&b{0}&a already contains &b{1}&a."
+track-does-not-contain: "&b{0}&a doesn't contain &b{1}&a."
+track-ambiguous-call: "&4{0}&c is a member of multiple groups on this track. Unable to determine their location."
+already-exists: "&4{0}&c already exists!"
+does-not-exist: "&4{0}&c does not exist!"
+group-load-error: "&cAn unexpected error occurred. Group not loaded."
+groups-load-error: "&cAn unexpected error occurred. Unable to load all groups."
+track-load-error: "&cAn unexpected error occurred. Track not loaded."
+tracks-load-error: "&cAn unexpected error occurred. Unable to load all tracks."
+track-empty: "&4{0}&c cannot be used as it is empty or contains only one group."
+update-task-request: "&bAn update task has been requested. Please wait..."
+update-task-complete: "&aUpdate task complete."
+update-task-complete-network: "&aUpdate task complete. Now attempting to push to other servers."
update-task-push-success: "&aOther servers were notified via &b{0} Messaging &asuccessfully."
update-task-push-failure: "&cError whilst pushing changes to other servers."
-update-task-push-failure-not-setup: "&cError whilst pushing changes to other servers. A messaging service has not been configured."
-reload-config-success: "&aThe configuration file was reloaded. &7(some options will only apply after the server has restarted.)"
+update-task-push-failure-not-setup: "&cError whilst pushing changes to other servers. &7(a messaging service has not been configured)"
+reload-config-success: "&aThe configuration file was reloaded. &7(some options will only apply after the server has restarted)"
info-top: >
{PREFIX}&2Running &bLuckPerms v{0}&2 by &bLuck&2.\n
{PREFIX}&f- &3Platform: &f{1}\n
@@ -108,25 +102,23 @@ info-middle: >
{PREFIX}&f- &3Context Calculators: &a{8}\n
{PREFIX}&f- &3Known permissions: &a{9}\n
{PREFIX}&f- &3Active processors: &7{10}
-create-group-error: "There was an error whilst creating the group."
-delete-group-error: "There was an error whilst deleting the group."
-delete-group-error-default: "You cannot delete the default group."
+create-error: "&cThere was an error whilst creating &4{0}&c."
+delete-error: "&cThere was an error whilst deleting &4{0}&c."
+delete-group-error-default: "&cYou cannot delete the default group."
groups-list: "&aGroups: &7(name, weight, tracks)"
groups-list-entry: "&f- &3{0} &7- &b{1}"
groups-list-entry-with-tracks: "&f- &3{0} &7- &b{1} &7- [&3{2}&7]"
-create-track-error: "There was an error whilst creating the track."
-delete-track-error: "There was an error whilst deleting the track."
tracks-list: "&aTracks: {0}"
-listnodes: "&b{0}'s Nodes:"
-listnodes-with-page: "&b{0}'s Nodes: {1}"
-listnodes-temp: "&b{0}'s Temporary Nodes:"
-listnodes-temp-with-page: "&b{0}'s Temporary Nodes: {1}"
+listnodes: "&b{0}'s Permissions:"
+listnodes-with-page: "&b{0}'s Permissions: {1}"
+listnodes-temp: "&b{0}'s Temporary Permissions:"
+listnodes-temp-with-page: "&b{0}'s Temporary Permissions: {1}"
listparents: "&b{0}'s Parent Groups:"
listparents-temp: "&b{0}'s Temporary Parent Groups:"
list-tracks: >
&b{0}'s Tracks:\n
{1}
-list-tracks-empty: "{0} is not on any tracks."
+list-tracks-empty: "&b{0}&a is not on any tracks."
context-pair-inline: "&3{0}=&b{1}"
context-pair--global-inline: "&eglobal"
context-pair-sep: "&a, "
@@ -134,9 +126,13 @@ context-pair: "&8(&7{0}=&f{1}&8)"
check-permission: "&b{0}&a has permission &b{1}&a set to {2}&a in context {3}&a."
check-inherits-permission: "&b{0}&a has permission &b{1}&a set to {2}&a in context {3}&a. &7(inherited from &a{4}&7)"
setpermission-success: "&aSet &b{0}&a to &b{1}&a for &b{2}&a in context {3}&a."
+already-haspermission: "&b{0}&a already has &b{1}&a set in context {2}&a."
setpermission-temp-success: "&aSet &b{0}&a to &b{1}&a for &b{2}&a for a duration of &b{3}&a in context {4}&a."
+already-has-temp-permission: "&b{0}&a already has &b{1}&a set temporarily in context {2}&a."
unsetpermission-success: "&aUnset &b{0}&a for &b{1}&a in context {2}&a."
+does-not-have-permission: "&b{0}&a does not have &b{1}&a set in context {2}&a."
unset-temp-permission-success: "&aUnset temporary permission &b{0}&a for &b{1}&a in context {2}&a."
+does-not-have-temp-permission: "&b{0}&a does not have &b{1}&a set temporarily in context {2}&a."
set-inherit-success: "&b{0}&a now inherits permissions from &b{1}&a in context {2}&a."
set-temp-inherit-success: "&b{0}&a now inherits permissions from &b{1}&a for a duration of &b{2}&a in context {3}&a."
set-parent-success: "&b{0}&a had their existing parent groups cleared, and now only inherits &b{1}&a in context {2}&a."
@@ -151,35 +147,40 @@ parent-clear-track-success: "&b{0}&a's parents on track &b{1}&a were cleared in
parent-clear-track-success-singular: "&b{0}&a's parents on track &b{1}&a were cleared in context {2}&a. (&b{3}&a node was removed.)"
meta-clear-success: "&b{0}&a's meta matching type &b{1}&a was cleared in context {2}&a. (&b{3}&a nodes were removed.)"
meta-clear-success-singular: "&b{0}&a's meta matching type &b{1}&a was cleared in context {2}&a. (&b{3}&a node was removed.)"
-illegal-date-error: "Could not parse date '{0}'."
-past-date-error: "You cannot set a date in the past!"
+illegal-date-error: "&cCould not parse date &4{0}&c."
+past-date-error: "&cYou cannot set a date in the past!"
chat-meta-prefix-header: "&b{0}'s Prefixes"
chat-meta-suffix-header: "&b{0}'s Suffixes"
meta-header: "&b{0}'s Meta"
-chat-meta-entry: "&b-> {0} &f- &f\"{1}&f\" &8(&7inherited from &a{2}&8)"
-chat-meta-entry-with-context: "&b-> {0} &f- &f\"{1}&f\" &8(&7inherited from &a{2}&8){3}"
-meta-entry: "&b-> &a{0} &f= &f\"{1}&f\" &8(&7inherited from &a{2}&8)"
-meta-entry-with-context: "&b-> &a{0} &f= &f\"{1}&f\" &8(&7inherited from &a{2}&8){3}"
+chat-meta-entry: "&b-> {0} &f- &f'{1}&f' &8(&7inherited from &a{2}&8)"
+chat-meta-entry-with-context: "&b-> {0} &f- &f'{1}&f' &8(&7inherited from &a{2}&8){3}"
+meta-entry: "&b-> &a{0} &f= &f'{1}&f' &8(&7inherited from &a{2}&8)"
+meta-entry-with-context: "&b-> &a{0} &f= &f'{1}&f' &8(&7inherited from &a{2}&8){3}"
chat-meta-prefix-none: "&b{0} has no prefixes."
chat-meta-suffix-none: "&b{0} has no suffixes."
meta-none: "&b{0} has no meta."
-meta-invalid-priority: "Invalid priority '{0}'. Expected a number."
-already-has-chat-meta: "{0} already has that {1} set."
-does-not-have-chat-meta: "{0} doesn't have that {1} set."
-add-chatmeta-success: "&b{0}&a had {1} &f\"{2}&f\"&a set at a priority of &b{3}&a in context {4}&a."
-add-temp-chatmeta-success: "&b{0}&a had {1} &f\"{2}&f\"&a set at a priority of &b{3}&a for a duration of &b{4}&a in context {5}&a."
-remove-chatmeta-success: "&b{0}&a had {1} &f\"{2}&f\"&a at priority &b{3}&a removed in context {4}&a."
+meta-invalid-priority: "&cInvalid priority &4{0}&c. Expected a number."
+already-has-chat-meta: "&b{0}&a already has {1} &f'{2}&f'&a set at a priority of &b{3}&a in context {4}&a."
+already-has-temp-chat-meta: "&b{0}&a already has {1} &f'{2}&f'&a set temporarily at a priority of &b{3}&a in context {4}&a."
+does-not-have-chat-meta: "&b{0}&a doesn't have {1} &f'{2}&f'&a set at a priority of &b{3}&a in context {4}&a."
+does-not-have-temp-chat-meta: "&b{0}&a doesn't have {1} &f'{2}&f'&a set temporarily at a priority of &b{3}&a in context {4}&a."
+add-chatmeta-success: "&b{0}&a had {1} &f'{2}&f'&a set at a priority of &b{3}&a in context {4}&a."
+add-temp-chatmeta-success: "&b{0}&a had {1} &f'{2}&f'&a set at a priority of &b{3}&a for a duration of &b{4}&a in context {5}&a."
+remove-chatmeta-success: "&b{0}&a had {1} &f'{2}&f'&a at priority &b{3}&a removed in context {4}&a."
bulk-remove-chatmeta-success: "&b{0}&a had all {1}es at priority &b{2}&a removed in context {3}&a."
-remove-temp-chatmeta-success: "&b{0}&a had temporary {1} &f\"{2}&f\"&a at priority &b{3}&a removed in context {4}&a."
+remove-temp-chatmeta-success: "&b{0}&a had temporary {1} &f'{2}&f'&a at priority &b{3}&a removed in context {4}&a."
bulk-remove-temp-chatmeta-success: "&b{0}&a had all temporary {1}es at priority &b{2}&a removed in context {3}&a."
-already-has-meta: "{0} already has that meta key value pair set."
-set-meta-success: "&aSet meta value for key &f\"{0}&f\"&a to &f\"{1}&f\"&a for &b{2}&a in context {3}&a."
-set-meta-temp-success: "&aSet meta value for key &f\"{0}&f\"&a to &f\"{1}&f\"&a for &b{2}&a for a duration of &b{3}&a in context {4}&a."
-unset-meta-success: "&aUnset meta value with key &f\"{0}&f\"&a for &b{1}&a in context {2}&a."
-unset-meta-temp-success: "&aUnset temporary meta value with key &f\"{0}&f\"&a for &b{1}&a in context {2}&a."
-bulk-update-invalid-data-type: "Invalid type. Was expecting 'all', 'users' or 'groups'."
-bulk-update-invalid-constraint: "Invalid constraint &4{0}&c. Constraints should be in the format '&f &c'."
-bulk-update-invalid-comparison: "Invalid comparison operator '&4{0}&c'. Expected one of the following: &f== != ~~ ~!"
+already-has-meta: "&b{0}&a already has meta key &f'{1}&f'&a set to &f'{2}&f'&a in context {3}&a."
+already-has-temp-meta: "&b{0}&a already has meta key &f'{1}&f'&a temporarily set to &f'{2}&f'&a in context {3}&a."
+doesnt-have-meta: "&b{0}&a doesn't have meta key &f'{1}&f'&a set in context {2}&a."
+doesnt-have-temp-meta: "&b{0}&a doesn't have meta key &f'{1}&f'&a set temporarily in context {2}&a."
+set-meta-success: "&aSet meta key &f'{0}&f'&a to &f'{1}&f'&a for &b{2}&a in context {3}&a."
+set-meta-temp-success: "&aSet meta key &f'{0}&f'&a to &f'{1}&f'&a for &b{2}&a for a duration of &b{3}&a in context {4}&a."
+unset-meta-success: "&aUnset meta key &f'{0}&f'&a for &b{1}&a in context {2}&a."
+unset-meta-temp-success: "&aUnset temporary meta key &f'{0}&f'&a for &b{1}&a in context {2}&a."
+bulk-update-invalid-data-type: "&cInvalid type. Was expecting 'all', 'users' or 'groups'."
+bulk-update-invalid-constraint: "&cInvalid constraint &4{0}&c. Constraints should be in the format '&f &c'."
+bulk-update-invalid-comparison: "&cInvalid comparison operator '&4{0}&c'. Expected one of the following: &f== != ~~ ~!"
bulk-update-queued: "&aBulk update operation was queued. &7(&f{0}&7)"
bulk-update-confirm: "&aRun &b/{0} bulkupdate confirm {1} &ato execute the update."
bulk-update-unknown-id: "&aOperation with id &b{0}&a does not exist or has expired."
@@ -192,8 +193,8 @@ user-info-general: >
{PREFIX}&f- &3Status: {2}\n
{PREFIX}&f- &3Primary Group: &f{3}\n
{PREFIX}&f- &aCounts:\n
- {PREFIX}&f- &3Permissions: &a{4}\n
- {PREFIX}&f- &3Temporary Permissions: &a{5}\n
+ {PREFIX}&f- &3Nodes: &a{4}\n
+ {PREFIX}&f- &3Permissions: &a{5}\n
{PREFIX}&f- &3Prefixes: &a{6}\n
{PREFIX}&f- &3Suffixes: &a{7}\n
{PREFIX}&f- &3Meta: &a{8}
@@ -205,30 +206,30 @@ user-info-data: >
{PREFIX}&f- &3Current Suffix: {3}
info-parent-header: "&f- &aParent Groups:"
info-temp-parent-header: "&f- &aTemporary Parent Groups:"
-user-removegroup-error-primary: "You cannot remove a user from their primary group."
+user-removegroup-error-primary: "&aYou cannot remove a user from their primary group."
user-primarygroup-success: "&b{0}&a's primary group was set to &b{1}&a."
-user-primarygroup-warn-option: "&cWarning: The primary group calculation method being used by this server &7({0}) &cmay not reflect this change."
-user-primarygroup-error-alreadyhas: "The user already has this group set as their primary group."
+user-primarygroup-warn-option: "&aWarning: The primary group calculation method being used by this server &7({0}) &amay not reflect this change."
+user-primarygroup-error-alreadyhas: "&b{0}&a already has &b{1}&a set as their primary group."
user-primarygroup-error-notmember: "&b{0}&a was not already a member of &b{1}&a, adding them now."
-user-track-error-not-contain-group: "The user specified isn't already in any groups on this track."
+user-track-error-not-contain-group: "&b{0}&a isn't already in any groups on &b{1}&a."
user-track-added-to-first: "&b{0}&a isn't in any groups on this track, so they were added to the first group, &b{1}&a in context {2}&a."
-user-promote-success: "&aPromoting user along track &b{0}&a from &b{1}&a to &b{2}&a in context {3}&a."
-user-promote-error-endoftrack: "The end of track &4{0}&c was reached. Unable to promote user."
+user-promote-success: "&aPromoting &b{0}&a along track &b{1}&a from &b{2}&a to &b{3}&a in context {4}&a."
+user-promote-error-endoftrack: "&aThe end of track &b{0}&a was reached. Unable to promote &b{1}&a."
user-promote-error-malformed: >
- {PREFIX}The next group on the track, {0}, no longer exists. Unable to promote user.\n
- {PREFIX}Either create the group, or remove it from the track and try again.
-user-demote-success: "&aDemoting user along track &b{0}&a from &b{1}&a to &b{2}&a in context {3}&a."
-user-demote-endoftrack: "The end of track &4{0}&c was reached, so &4{1}&c was removed from &4{2}&c."
+ {PREFIX}&aThe next group on the track, &b{0}&a, no longer exists. Unable to promote user.\n
+ {PREFIX}&aEither create the group, or remove it from the track and try again.
+user-demote-success: "&aDemoting &b{0}&a along track &b{1}&a from &b{2}&a to &b{3}&a in context {4}&a."
+user-demote-endoftrack: "&aThe end of track &b{0}&a was reached, so &b{1}&a was removed from &b{2}&a."
user-demote-error-malformed: >
- {PREFIX}The previous group on the track, {0}, no longer exists. Unable to demote user.\n
- {PREFIX}Either create the group, or remove it from the track and try again.
+ {PREFIX}&aThe previous group on the track, &b{0}&a, no longer exists. Unable to demote user.\n
+ {PREFIX}&aEither create the group, or remove it from the track and try again.
group-info-general: >
{PREFIX}&b&l> &bGroup Info: &f{0}\n
{PREFIX}&f- &3Display Name: &f{1}\n
{PREFIX}&f- &3Weight: &f{2}\n
{PREFIX}&f- &aCounts:\n
- {PREFIX}&f- &3Permissions: &a{3}\n
- {PREFIX}&f- &3Temporary Permissions: &a{4}\n
+ {PREFIX}&f- &3Nodes: &a{3}\n
+ {PREFIX}&f- &3Permissions: &a{4}\n
{PREFIX}&f- &3Prefixes: &a{5}\n
{PREFIX}&f- &3Suffixes: &a{6}\n
{PREFIX}&f- &3Meta: &a{7}
@@ -237,40 +238,40 @@ track-info: >
{PREFIX}&b&l> &bShowing Track: &f{0}\n
{PREFIX}&f- &7Path: &f{1}
track-clear: "&b{0}&a's groups track was cleared."
-track-append-success: "&aGroup &b{0}&a was successfully appended to track &b{1}&a."
-track-insert-success: "&aGroup &b{0}&a was successfully inserted into track &b{1}&a at position &b{2}&a."
-track-insert-error-number: "Expected number but instead received: {0}"
-track-insert-error-invalid-pos: "Unable to insert at position {0}. Index out of bounds."
-track-remove-success: "&aGroup &b{0}&a was successfully removed from track &b{1}&a."
-log-load-error: "The log could not be loaded."
-log-invalid-page: "Invalid page number."
-log-invalid-page-range: "Invalid page number. Please enter a value between 1 and {0}."
+track-append-success: "&aGroup &b{0}&a was appended to track &b{1}&a."
+track-insert-success: "&aGroup &b{0}&a was inserted into track &b{1}&a at position &b{2}&a."
+track-insert-error-number: "&cExpected number but instead received: {0}"
+track-insert-error-invalid-pos: "&cUnable to insert at position &4{0}&c. &7(invalid position)"
+track-remove-success: "&aGroup &b{0}&a was removed from track &b{1}&a."
+log-load-error: "&cThe log could not be loaded."
+log-invalid-page: "&cInvalid page number."
+log-invalid-page-range: "&cInvalid page number. Please enter a value between &41&c and &4{0}&c."
log-no-entries: "&bNo log entries to show."
log-entry: "&b#{0} -> &8(&7{1} ago&8) {2}"
log-notify-console: "&cCannot toggle notifications for console."
log-notify-toggle-on: "&aEnabled&b logging output."
log-notify-toggle-off: "&cDisabled&b logging output."
-log-notify-already-on: "You are already receiving notifications."
-log-notify-already-off: "You aren't currently receiving notifications."
-log-notify-unknown: "State unknown. Expecting \"on\" or \"off\"."
+log-notify-already-on: "&cYou are already receiving notifications."
+log-notify-already-off: "&cYou aren't currently receiving notifications."
+log-notify-unknown: "&cState unknown. Expecting \"on\" or \"off\"."
log-search-header: "&aShowing recent actions for query &b{0} &a(page &f{1}&a of &f{2}&a)"
log-recent-header: "&aShowing recent actions (page &f{0}&a of &f{1}&a)"
log-recent-by-header: "&aShowing recent actions by &b{0} &a(page &f{1}&a of &f{2}&a)"
log-history-user-header: "&aShowing history for user &b{0} &a(page &f{1}&a of &f{2}&a)"
log-history-group-header: "&aShowing history for group &b{0} &a(page &f{1}&a of &f{2}&a)"
log-history-track-header: "&aShowing history for track &b{0} &a(page &f{1}&a of &f{2}&a)"
-log-export-already-exists: "Error: File {0} already exists."
-log-export-not-writable: "Error: File {0} is not writable."
-log-export-empty: "The log is empty and therefore cannot be exported."
-log-export-failure: "An unexpected error occured whilst writing to the file."
+log-export-already-exists: "&cError: File &4{0}&c already exists."
+log-export-not-writable: "&cError: File &4{0}&c is not writable."
+log-export-empty: "&cThe log is empty and therefore cannot be exported."
+log-export-failure: "&cAn unexpected error occured whilst writing to the file."
log-export-success: "&aSuccessfully exported the log to &b{0}&a."
-import-already-running: "Another import process is already running. Please wait for it to finish and try again."
-export-already-running: "Another export process is already running. Please wait for it to finish and try again."
-import-log-doesnt-exist: "Error: File {0} does not exist."
-import-log-not-readable: "Error: File {0} is not readable."
-import-log-failure: "An unexpected error occured whilst reading from the log file."
-import-progress: "&b(Import) &b-> &f{0} &fpercent complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferrors."
-import-progress-sin: "&b(Import) &b-> &f{0} &fpercent complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferror."
+import-already-running: "&cAnother import process is already running. Please wait for it to finish and try again."
+export-already-running: "&cAnother export process is already running. Please wait for it to finish and try again."
+import-log-doesnt-exist: "&cError: File &4{0}&c does not exist."
+import-log-not-readable: "&cError: File &4{0}&c is not readable."
+import-log-failure: "&cAn unexpected error occured whilst reading from the log file."
+import-progress: "&b(Import) &b-> &f{0}&f% complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferrors."
+import-progress-sin: "&b(Import) &b-> &f{0}&f% complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferror."
import-start: "&b(Import) &b-> &fStarting import process."
import-end-complete: "&b(Import) &a&lCOMPLETED &7- took &b{0} &7seconds - &7No errors."
import-end-complete-err: "&b(Import) &a&lCOMPLETED &7- took &b{0} &7seconds - &c{1} errors."
@@ -309,6 +310,7 @@ command-specs:
args:
"on|record|off|paste": "whether to enable/disable logging, or to paste the logged output"
"filter": "the filter to match entries against"
+ "--slim": "add \"--slim\" to exclude trace data from the pasted output"
tree:
description: "Generate a tree view of permissions"
usage: "/%s tree [selection] [max level] [player]"
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java
index 0b9abc09..64353c8c 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java
@@ -189,7 +189,7 @@ public abstract class SubCommand extends Command {
}
if (!success) {
- Message.USER_SAVE_ERROR.send(sender);
+ Message.USER_SAVE_ERROR.send(sender, user.getFriendlyName());
}
}
@@ -210,7 +210,7 @@ public abstract class SubCommand extends Command {
}
if (!success) {
- Message.GROUP_SAVE_ERROR.send(sender);
+ Message.GROUP_SAVE_ERROR.send(sender, group.getFriendlyName());
}
}
@@ -231,7 +231,7 @@ public abstract class SubCommand extends Command {
}
if (!success) {
- Message.TRACK_SAVE_ERROR.send(sender);
+ Message.TRACK_SAVE_ERROR.send(sender, track.getName());
}
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java
index e40906bf..b4df5b45 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java
@@ -100,7 +100,7 @@ public class MetaAddChatMeta extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.ALREADY_HAS_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase());
+ Message.ALREADY_HAS_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java
index b0a80d84..1f1b1c11 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java
@@ -110,7 +110,7 @@ public class MetaAddTempChatMeta extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.ALREADY_HAS_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase());
+ Message.ALREADY_HAS_TEMP_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java
index 574c76a6..ac438ceb 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java
@@ -114,7 +114,7 @@ public class MetaRemoveChatMeta extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOES_NOT_HAVE_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase());
+ Message.DOES_NOT_HAVE_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java
index 4552a942..08c5dfc3 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java
@@ -114,7 +114,7 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOES_NOT_HAVE_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase());
+ Message.DOES_NOT_HAVE_TEMP_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java
index 79d9a5f0..82030837 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java
@@ -80,7 +80,7 @@ public class MetaSet extends SharedSubCommand {
Node n = NodeFactory.makeMetaNode(key, value).withExtraContext(context).build();
if (holder.hasPermission(n).asBoolean()) {
- Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName());
+ Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName(), key, value, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java
index 4c70974e..8408f78a 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java
@@ -86,7 +86,7 @@ public class MetaSetTemp extends SharedSubCommand {
Node n = NodeFactory.makeMetaNode(key, value).withExtraContext(context).setExpiry(duration).build();
if (holder.hasPermission(n).asBoolean()) {
- Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName());
+ Message.ALREADY_HAS_TEMP_META.send(sender, holder.getFriendlyName(), key, value, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java
index db48625d..53ae744e 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java
@@ -80,7 +80,7 @@ public class MetaUnset extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOESNT_HAVE_META.send(sender, holder.getFriendlyName());
+ Message.DOESNT_HAVE_META.send(sender, holder.getFriendlyName(), key, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java
index 0fd3fd5e..7aa40270 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java
@@ -80,7 +80,7 @@ public class MetaUnsetTemp extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOESNT_HAVE_META.send(sender, holder.getFriendlyName());
+ Message.DOESNT_HAVE_TEMP_META.send(sender, holder.getFriendlyName(), key, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java
index 33bd4643..8cc7b128 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java
@@ -65,13 +65,13 @@ public class ParentAdd extends SharedSubCommand {
MutableContextSet context = ArgumentUtils.handleContext(1, args, plugin);
if (!plugin.getStorage().loadGroup(groupName).join()) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
Group group = plugin.getGroupManager().getIfLoaded(groupName);
if (group == null) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.LOADING_ERROR;
}
@@ -97,7 +97,7 @@ public class ParentAdd extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.ALREADY_INHERITS.send(sender, holder.getFriendlyName(), group.getDisplayName());
+ Message.ALREADY_INHERITS.send(sender, holder.getFriendlyName(), group.getDisplayName(), Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java
index b0394065..26997ee1 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java
@@ -73,13 +73,13 @@ public class ParentAddTemp extends SharedSubCommand {
TemporaryModifier modifier = plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR);
if (!plugin.getStorage().loadGroup(groupName).join()) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
Group group = plugin.getGroupManager().getIfLoaded(groupName);
if (group == null) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
@@ -94,7 +94,7 @@ public class ParentAddTemp extends SharedSubCommand {
}
if (group.getName().equalsIgnoreCase(holder.getObjectName())) {
- Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getDisplayName());
+ Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getDisplayName(), Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
@@ -111,7 +111,7 @@ public class ParentAddTemp extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getDisplayName());
+ Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getDisplayName(), Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java
index 796f0d0b..6b2362a8 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java
@@ -64,23 +64,23 @@ public class ParentClearTrack extends SharedSubCommand {
final String trackName = args.get(0).toLowerCase();
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
- Message.TRACK_INVALID_ENTRY.send(sender);
+ Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return CommandResult.INVALID_ARGS;
}
if (!plugin.getStorage().loadTrack(trackName).join()) {
- Message.TRACK_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, trackName);
return CommandResult.INVALID_ARGS;
}
Track track = plugin.getTrackManager().getIfLoaded(trackName);
if (track == null) {
- Message.TRACK_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, trackName);
return CommandResult.LOADING_ERROR;
}
if (track.getSize() <= 1) {
- Message.TRACK_EMPTY.send(sender);
+ Message.TRACK_EMPTY.send(sender, track.getName());
return CommandResult.STATE_ERROR;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java
index b1d695b6..ddfeafd4 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java
@@ -71,11 +71,11 @@ public class ParentInfo extends SharedSubCommand {
}
Component ent = permGroupsToMessage(holder.getOwnNodesSorted(), holder, label);
- Message.LISTNODES.send(sender, holder.getFriendlyName());
+ Message.LISTPARENTS.send(sender, holder.getFriendlyName());
sender.sendMessage(ent);
Component tempEnt = tempGroupsToMessage(holder.getOwnNodesSorted(), holder, label);
- Message.LISTNODES_TEMP.send(sender, holder.getFriendlyName());
+ Message.LISTPARENTS_TEMP.send(sender, holder.getFriendlyName());
sender.sendMessage(tempEnt);
return CommandResult.SUCCESS;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java
index 2111168a..475693ad 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java
@@ -105,7 +105,7 @@ public class ParentRemove extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOES_NOT_INHERIT.send(sender, holder.getFriendlyName(), groupName);
+ Message.DOES_NOT_INHERIT.send(sender, holder.getFriendlyName(), groupName, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java
index f9d2cab6..6f7e7927 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java
@@ -86,7 +86,7 @@ public class ParentRemoveTemp extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOES_NOT_TEMP_INHERIT.send(sender, holder.getFriendlyName(), groupName);
+ Message.DOES_NOT_TEMP_INHERIT.send(sender, holder.getFriendlyName(), groupName, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java
index f6fdedce..25107c35 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java
@@ -65,13 +65,13 @@ public class ParentSet extends SharedSubCommand {
MutableContextSet context = ArgumentUtils.handleContext(1, args, plugin);
if (!plugin.getStorage().loadGroup(groupName).join()) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
Group group = plugin.getGroupManager().getIfLoaded(groupName);
if (group == null) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.LOADING_ERROR;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java
index ee392268..c709c743 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java
@@ -65,23 +65,23 @@ public class ParentSetTrack extends SharedSubCommand {
final String trackName = args.get(0).toLowerCase();
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
- Message.TRACK_INVALID_ENTRY.send(sender);
+ Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return CommandResult.INVALID_ARGS;
}
if (!plugin.getStorage().loadTrack(trackName).join()) {
- Message.TRACK_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, trackName);
return CommandResult.INVALID_ARGS;
}
Track track = plugin.getTrackManager().getIfLoaded(trackName);
if (track == null) {
- Message.TRACK_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, trackName);
return CommandResult.LOADING_ERROR;
}
if (track.getSize() <= 1) {
- Message.TRACK_EMPTY.send(sender);
+ Message.TRACK_EMPTY.send(sender, track.getName());
return CommandResult.STATE_ERROR;
}
@@ -90,7 +90,7 @@ public class ParentSetTrack extends SharedSubCommand {
if (index > 0) {
List trackGroups = track.getGroups();
if ((index - 1) >= trackGroups.size()) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, index);
return CommandResult.INVALID_ARGS;
}
groupName = track.getGroups().get(index - 1);
@@ -105,13 +105,13 @@ public class ParentSetTrack extends SharedSubCommand {
MutableContextSet context = ArgumentUtils.handleContext(2, args, plugin);
if (!plugin.getStorage().loadGroup(groupName).join()) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
Group group = plugin.getGroupManager().getIfLoaded(groupName);
if (group == null) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.LOADING_ERROR;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java
index 101a5e02..cbf2b25c 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java
@@ -140,13 +140,11 @@ public class PermissionInfo extends SharedSubCommand {
List l = new ArrayList<>();
for (Node node : nodes) {
- if (nodeFilter != null && !node.getPermission().startsWith(nodeFilter)) {
- continue;
- }
- if (contextFilter != null && !node.getFullContexts().hasIgnoreCase(contextFilter.getKey(), contextFilter.getValue())) {
- continue;
- }
+ if (node.isGroupNode() || node.isPrefix() || node.isSuffix() || node.isMeta()) continue;
+ if (nodeFilter != null && !node.getPermission().startsWith(nodeFilter)) continue;
+ if (contextFilter != null && !node.getFullContexts().hasIgnoreCase(contextFilter.getKey(), contextFilter.getValue())) continue;
if (temp != node.isTemporary()) continue;
+
l.add(node);
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java
index a10a9b18..d80d4b7d 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java
@@ -88,7 +88,7 @@ public class PermissionSet extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.ALREADY_HASPERMISSION.send(sender, holder.getFriendlyName());
+ Message.ALREADY_HASPERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java
index 17bde8c2..c16dec4a 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java
@@ -96,7 +96,7 @@ public class PermissionSetTemp extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.ALREADY_HAS_TEMP_PERMISSION.send(sender, holder.getFriendlyName());
+ Message.ALREADY_HAS_TEMP_PERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java
index ddda521f..17f0fe22 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java
@@ -93,7 +93,7 @@ public class PermissionUnset extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOES_NOT_HAVEPERMISSION.send(sender, holder.getFriendlyName());
+ Message.DOES_NOT_HAVE_PERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java
index 648409ee..481a93f1 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java
@@ -86,7 +86,7 @@ public class PermissionUnsetTemp extends SharedSubCommand {
save(holder, sender, plugin);
return CommandResult.SUCCESS;
} else {
- Message.DOES_NOT_HAVE_TEMP_PERMISSION.send(sender, holder.getFriendlyName());
+ Message.DOES_NOT_HAVE_TEMP_PERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context));
return CommandResult.STATE_ERROR;
}
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/CreateGroup.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/CreateGroup.java
index 853186b7..53554cc1 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/CreateGroup.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/CreateGroup.java
@@ -54,17 +54,17 @@ public class CreateGroup extends SingleCommand {
String groupName = args.get(0).toLowerCase();
if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) {
- Message.GROUP_INVALID_ENTRY.send(sender);
+ Message.GROUP_INVALID_ENTRY.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
if (plugin.getStorage().loadGroup(groupName).join()) {
- Message.GROUP_ALREADY_EXISTS.send(sender);
+ Message.ALREADY_EXISTS.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
if (!plugin.getStorage().createAndLoadGroup(groupName, CreationCause.COMMAND).join()) {
- Message.CREATE_GROUP_ERROR.send(sender);
+ Message.CREATE_ERROR.send(sender, groupName);
return CommandResult.FAILURE;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/DeleteGroup.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/DeleteGroup.java
index 5ad01759..68d146c0 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/DeleteGroup.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/DeleteGroup.java
@@ -62,7 +62,7 @@ public class DeleteGroup extends SingleCommand {
}
if (!plugin.getStorage().loadGroup(groupName).join()) {
- Message.GROUP_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, groupName);
return CommandResult.INVALID_ARGS;
}
@@ -73,7 +73,7 @@ public class DeleteGroup extends SingleCommand {
}
if (!plugin.getStorage().deleteGroup(group, DeletionCause.COMMAND).join()) {
- Message.DELETE_GROUP_ERROR.send(sender);
+ Message.DELETE_ERROR.send(sender, group.getFriendlyName());
return CommandResult.FAILURE;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupClone.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupClone.java
index 774830f4..041363e1 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupClone.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupClone.java
@@ -57,7 +57,7 @@ public class GroupClone extends SubCommand {
String newGroupName = args.get(0).toLowerCase();
if (!DataConstraints.GROUP_NAME_TEST.test(newGroupName)) {
- Message.GROUP_INVALID_ENTRY.send(sender);
+ Message.GROUP_INVALID_ENTRY.send(sender, newGroupName);
return CommandResult.INVALID_ARGS;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java
index a62cc06a..8d7853d0 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java
@@ -61,8 +61,8 @@ public class GroupInfo extends SubCommand {
group.getId(),
group.getDisplayName(),
group.getWeight().isPresent() ? group.getWeight().getAsInt() : "None",
- group.getPermanentNodes().size(),
- group.getTemporaryNodes().size(),
+ group.getOwnNodes().size(),
+ group.getOwnNodes().stream().filter(n -> !(n.isGroupNode() || n.isPrefix() || n.isSuffix() || n.isMeta())).mapToInt(n -> 1).sum(),
group.getPrefixNodes().size(),
group.getSuffixNodes().size(),
group.getMetaNodes().size()
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupMainCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupMainCommand.java
index 3e64e839..94ec4b56 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupMainCommand.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupMainCommand.java
@@ -84,13 +84,13 @@ public class GroupMainCommand extends MainCommand {
@Override
protected Group getTarget(String target, LuckPermsPlugin plugin, Sender sender) {
if (!plugin.getStorage().loadGroup(target).join()) {
- Message.GROUP_NOT_FOUND.send(sender);
+ Message.GROUP_NOT_FOUND.send(sender, target);
return null;
}
Group group = plugin.getGroupManager().getIfLoaded(target);
if (group == null) {
- Message.GROUP_NOT_FOUND.send(sender);
+ Message.GROUP_NOT_FOUND.send(sender, target);
return null;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupRename.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupRename.java
index 77ccf2ee..ddce076a 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupRename.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupRename.java
@@ -52,17 +52,17 @@ public class GroupRename extends SubCommand {
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Group group, List args, String label) throws CommandException {
String newGroupName = args.get(0).toLowerCase();
if (!DataConstraints.GROUP_NAME_TEST.test(newGroupName)) {
- Message.GROUP_INVALID_ENTRY.send(sender);
+ Message.GROUP_INVALID_ENTRY.send(sender, newGroupName);
return CommandResult.INVALID_ARGS;
}
if (plugin.getStorage().loadGroup(newGroupName).join()) {
- Message.GROUP_ALREADY_EXISTS.send(sender);
+ Message.ALREADY_EXISTS.send(sender, newGroupName);
return CommandResult.INVALID_ARGS;
}
if (!plugin.getStorage().createAndLoadGroup(newGroupName, CreationCause.COMMAND).join()) {
- Message.CREATE_GROUP_ERROR.send(sender);
+ Message.CREATE_ERROR.send(sender, newGroupName);
return CommandResult.FAILURE;
}
@@ -73,7 +73,7 @@ public class GroupRename extends SubCommand {
}
if (!plugin.getStorage().deleteGroup(group, DeletionCause.COMMAND).join()) {
- Message.DELETE_GROUP_ERROR.send(sender);
+ Message.DELETE_ERROR.send(sender, group.getFriendlyName());
return CommandResult.FAILURE;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogGroupHistory.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogGroupHistory.java
index 65d811a6..d3f004ce 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogGroupHistory.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogGroupHistory.java
@@ -65,7 +65,7 @@ public class LogGroupHistory extends SubCommand {
}
if (!DataConstraints.GROUP_NAME_TEST.test(group)) {
- Message.GROUP_INVALID_ENTRY.send(sender);
+ Message.GROUP_INVALID_ENTRY.send(sender, group);
return CommandResult.INVALID_ARGS;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java
index c4094a82..0064d0ed 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java
@@ -32,6 +32,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
import me.lucko.luckperms.common.commands.abstraction.SubCommand;
import me.lucko.luckperms.common.commands.sender.Sender;
import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.constants.CommandPermission;
import me.lucko.luckperms.common.constants.DataConstraints;
import me.lucko.luckperms.common.locale.CommandSpec;
@@ -69,51 +70,37 @@ public class LogRecent extends SubCommand {
}
// User and possibly page
- final String s = args.get(0);
- UUID u;
-
- u = Util.parseUuid(s);
- if (u == null) {
- if (s.length() <= 16) {
- if (!DataConstraints.PLAYER_USERNAME_TEST.test(s)) {
- Message.USER_INVALID_ENTRY.send(sender, s);
- return CommandResult.INVALID_ARGS;
- }
-
- UUID uuid = plugin.getStorage().getUUID(s).join();
-
- if (uuid == null) {
- Message.USER_NOT_FOUND.send(sender);
- return CommandResult.INVALID_ARGS;
- }
-
- if (args.size() != 2) {
- // Just user
- return showLog(log.getRecentMaxPages(uuid), uuid, sender, log);
- }
-
- try {
- int p = Integer.parseInt(args.get(1));
- // User and page
- return showLog(p, uuid, sender, log);
- } catch (NumberFormatException e) {
- // Invalid page
- return showLog(-1, null, sender, log);
- }
+ final String target = args.get(0);
+ UUID uuid = Util.parseUuid(target.toLowerCase());
+ if (uuid == null) {
+ if (!DataConstraints.PLAYER_USERNAME_TEST.test(target)) {
+ Message.USER_INVALID_ENTRY.send(sender, target);
+ return CommandResult.INVALID_ARGS;
}
- Message.USER_INVALID_ENTRY.send(sender, s);
- return CommandResult.INVALID_ARGS;
+ uuid = plugin.getStorage().getUUID(target.toLowerCase()).join();
+ if (uuid == null) {
+ if (!plugin.getConfiguration().get(ConfigKeys.USE_SERVER_UUID_CACHE)) {
+ Message.USER_NOT_FOUND.send(sender, target);
+ return CommandResult.INVALID_ARGS;
+ }
+
+ uuid = plugin.lookupUuid(target).orElse(null);
+ if (uuid == null) {
+ Message.USER_NOT_FOUND.send(sender, target);
+ return CommandResult.INVALID_ARGS;
+ }
+ }
}
if (args.size() != 2) {
// Just user
- return showLog(log.getRecentMaxPages(u), u, sender, log);
+ return showLog(log.getRecentMaxPages(uuid), uuid, sender, log);
} else {
try {
int p = Integer.parseInt(args.get(1));
// User and page
- return showLog(p, u, sender, log);
+ return showLog(p, uuid, sender, log);
} catch (NumberFormatException e) {
// Invalid page
return showLog(-1, null, sender, log);
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogTrackHistory.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogTrackHistory.java
index 3d0c572b..2bbf5d59 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogTrackHistory.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogTrackHistory.java
@@ -65,7 +65,7 @@ public class LogTrackHistory extends SubCommand {
}
if (!DataConstraints.TRACK_NAME_TEST.test(track)) {
- Message.TRACK_INVALID_ENTRY.send(sender);
+ Message.TRACK_INVALID_ENTRY.send(sender, track);
return CommandResult.INVALID_ARGS;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java
index 60339b3a..34775962 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java
@@ -32,6 +32,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
import me.lucko.luckperms.common.commands.abstraction.SubCommand;
import me.lucko.luckperms.common.commands.sender.Sender;
import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.constants.CommandPermission;
import me.lucko.luckperms.common.constants.DataConstraints;
import me.lucko.luckperms.common.locale.CommandSpec;
@@ -53,7 +54,7 @@ public class LogUserHistory extends SubCommand {
@Override
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Log log, List args, String label) throws CommandException {
- String user = args.get(0);
+ String target = args.get(0);
int page = -999;
if (args.size() == 2) {
@@ -65,37 +66,33 @@ public class LogUserHistory extends SubCommand {
}
}
- UUID uuid = Util.parseUuid(user);
- if (uuid != null) {
- if (page == -999) {
- page = log.getUserHistoryMaxPages(uuid);
+ UUID uuid = Util.parseUuid(target.toLowerCase());
+ if (uuid == null) {
+ if (!DataConstraints.PLAYER_USERNAME_TEST.test(target)) {
+ Message.USER_INVALID_ENTRY.send(sender, target);
+ return null;
}
- return showLog(page, uuid, sender, log);
+ uuid = plugin.getStorage().getUUID(target.toLowerCase()).join();
+ if (uuid == null) {
+ if (!plugin.getConfiguration().get(ConfigKeys.USE_SERVER_UUID_CACHE)) {
+ Message.USER_NOT_FOUND.send(sender, target);
+ return null;
+ }
+
+ uuid = plugin.lookupUuid(target).orElse(null);
+ if (uuid == null) {
+ Message.USER_NOT_FOUND.send(sender, target);
+ return null;
+ }
+ }
}
- if (user.length() <= 16) {
- if (!DataConstraints.PLAYER_USERNAME_TEST.test(user)) {
- Message.USER_INVALID_ENTRY.send(sender, user);
- return CommandResult.INVALID_ARGS;
- }
-
- UUID uuid1 = plugin.getStorage().getUUID(user).join();
-
- if (uuid1 == null) {
- Message.USER_NOT_FOUND.send(sender);
- return CommandResult.INVALID_ARGS;
- }
-
- if (page == -999) {
- page = log.getUserHistoryMaxPages(uuid1);
- }
-
- return showLog(page, uuid1, sender, log);
+ if (page == -999) {
+ page = log.getUserHistoryMaxPages(uuid);
}
- Message.USER_INVALID_ENTRY.send(sender, user);
- return CommandResult.INVALID_ARGS;
+ return showLog(page, uuid, sender, log);
}
private static CommandResult showLog(int page, UUID user, Sender sender, Log log) {
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/VerboseCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/VerboseCommand.java
index 39d68178..bf0c9844 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/VerboseCommand.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/VerboseCommand.java
@@ -64,6 +64,7 @@ public class VerboseCommand extends SingleCommand {
}
boolean noTraces = args.remove("--notrace") || args.remove("--notraces") || args.remove("--slim") || args.remove("-s");
+ boolean attachRaw = args.remove("--raw");
String mode = args.get(0).toLowerCase();
if (mode.equals("on") || mode.equals("true") || mode.equals("record")) {
@@ -107,14 +108,14 @@ public class VerboseCommand extends SingleCommand {
if (listener == null) {
Message.VERBOSE_OFF.send(sender);
} else {
- Message.VERBOSE_RECORDING_UPLOAD_START.send(sender);
+ Message.VERBOSE_UPLOAD_START.send(sender);
- String url = listener.uploadPasteData(!noTraces);
+ String url = listener.uploadPasteData(!noTraces, attachRaw);
if (url == null) {
url = "null";
}
- Message.VERBOSE_RECORDING_URL.send(sender);
+ Message.VERBOSE_RESULTS_URL.send(sender);
Component message = TextComponent.builder(url).color(TextColor.AQUA)
.clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url))
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/CreateTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/CreateTrack.java
index 1d59ad49..c11dcba7 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/CreateTrack.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/CreateTrack.java
@@ -54,17 +54,17 @@ public class CreateTrack extends SingleCommand {
String trackName = args.get(0).toLowerCase();
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
- Message.TRACK_INVALID_ENTRY.send(sender);
+ Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return CommandResult.INVALID_ARGS;
}
if (plugin.getStorage().loadTrack(trackName).join()) {
- Message.TRACK_ALREADY_EXISTS.send(sender);
+ Message.ALREADY_EXISTS.send(sender, trackName);
return CommandResult.INVALID_ARGS;
}
if (!plugin.getStorage().createAndLoadTrack(trackName, CreationCause.COMMAND).join()) {
- Message.CREATE_TRACK_ERROR.send(sender);
+ Message.CREATE_ERROR.send(sender, trackName);
return CommandResult.FAILURE;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/DeleteTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/DeleteTrack.java
index c288a570..80e5fce5 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/DeleteTrack.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/DeleteTrack.java
@@ -55,7 +55,7 @@ public class DeleteTrack extends SingleCommand {
String trackName = args.get(0).toLowerCase();
if (!plugin.getStorage().loadTrack(trackName).join()) {
- Message.TRACK_DOES_NOT_EXIST.send(sender);
+ Message.DOES_NOT_EXIST.send(sender, trackName);
return CommandResult.INVALID_ARGS;
}
@@ -66,7 +66,7 @@ public class DeleteTrack extends SingleCommand {
}
if (!plugin.getStorage().deleteTrack(track, DeletionCause.COMMAND).join()) {
- Message.DELETE_TRACK_ERROR.send(sender);
+ Message.DELETE_ERROR.send(sender, track.getName());
return CommandResult.FAILURE;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java
index c8d96e42..e41efe06 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java
@@ -58,13 +58,13 @@ public class TrackAppend extends SubCommand
*/
@SuppressWarnings("SpellCheckingInspection")
-@AllArgsConstructor
public enum Message {
/*
@@ -46,371 +45,383 @@ public enum Message {
*/
PREFIX("&7&l[&b&lL&3&lP&7&l] &c", false),
- LOG_INFO("&7&l[&bL&3P&7&l] &3{0}", false),
- LOG_WARN("&7&l[&bLuck&3Perms&7&l] &c[WARN] {0}", false),
- LOG_ERROR("&7&l[&bLuck&3Perms&7&l] &4[ERROR] {0}", false),
-
- EMPTY("{0}", true),
+ EMPTY("{}", true),
PLAYER_ONLINE("&aOnline", false),
PLAYER_OFFLINE("&cOffline", false),
- LOADING_ERROR("Permissions data could not be loaded. Please try again later.", true),
+ LOADING_ERROR("&cPermissions data could not be loaded. Please try again later.", true),
OP_DISABLED("&bThe vanilla OP system is disabled on this server.", false),
- OP_DISABLED_SPONGE("&2Server Operator status has no effect when a permission plugin is installed. Please edit user data directly.", true),
- LOG("&3LOG &3&l> {0}", true),
- VERBOSE_LOG("&3VB &3&l> {0}", true),
+ OP_DISABLED_SPONGE("&2Please note that Server Operator status has no effect on Sponge permission checks when a permission plugin is installed. Please edit user data directly.", true),
- EXPORT_LOG("&3EXPORT &3&l> &f{0}", true),
- EXPORT_LOG_PROGRESS("&3EXPORT &3&l> &7{0}", true),
- MIGRATION_LOG("&3MIGRATION &7[&3{0}&7] &3&l> &f{1}", true),
- MIGRATION_LOG_PROGRESS("&3MIGRATION &7[&3{0}&7] &3&l> &7{1}", true),
+ /*
+ * Logging
+ */
+ LOG_INFO("&7&l[&bL&3P&7&l] &3{}", false),
+ LOG_WARN("&7&l[&bLuck&3Perms&7&l] &c[WARN] {}", false),
+ LOG_ERROR("&7&l[&bLuck&3Perms&7&l] &4[ERROR] {}", false),
+ LOG("&3LOG &3&l> {}", true),
+ VERBOSE_LOG("&3VB &3&l> {}", true),
+ EXPORT_LOG("&3EXPORT &3&l> &f{}", true),
+ EXPORT_LOG_PROGRESS("&3EXPORT &3&l> &7{}", true),
+ MIGRATION_LOG("&3MIGRATION &7[&3{}&7] &3&l> &f{}", true),
+ MIGRATION_LOG_PROGRESS("&3MIGRATION &7[&3{}&7] &3&l> &7{}", true),
- COMMAND_NOT_RECOGNISED("Command not recognised.", true),
- COMMAND_NO_PERMISSION("You do not have permission to use this command!", true),
- ALREADY_HASPERMISSION("{0} already has this permission!", true),
- DOES_NOT_HAVEPERMISSION("{0} does not have this permission set.", true),
- ALREADY_HAS_TEMP_PERMISSION("{0} already has this permission set temporarily!", true),
- DOES_NOT_HAVE_TEMP_PERMISSION("{0} does not have this permission set temporarily.", true),
+ /*
+ * Misc commands
+ */
+ COMMAND_NOT_RECOGNISED("&cCommand not recognised.", true),
+ COMMAND_NO_PERMISSION("&cYou do not have permission to use this command!", true),
/*
* Loading / Saving
*/
- USER_NOT_FOUND("&bUser could not be found.", true),
- USER_NOT_ONLINE("&bUser &a{0}&b is not online.", true),
- USER_SAVE_ERROR("There was an error whilst saving the user.", true),
+ USER_NOT_FOUND("&cA user for &4{}&c could not be found.", true),
+ USER_NOT_ONLINE("&aUser &b{}&a is not online.", true),
+ USER_SAVE_ERROR("&cThere was an error whilst saving user data for &4{}&c.", true),
- GROUP_NOT_FOUND("&bGroup could not be found.", true),
- GROUP_SAVE_ERROR("There was an error whilst saving the group.", true),
+ GROUP_NOT_FOUND("&cA group named &4{}&c could not be found.", true),
+ GROUP_SAVE_ERROR("&cThere was an error whilst saving group data for &4{}&c.", true),
- TRACK_NOT_FOUND("&bTrack could not be found.", true),
- TRACK_SAVE_ERROR("There was an error whilst saving the track.", true),
+ TRACK_NOT_FOUND("&cA track named &4{}&c could not be found.", true),
+ TRACK_SAVE_ERROR("&cThere was an error whilst saving track data for &4{}&c.", true),
-
- /*
- * Command Syntax
- */
- USER_INVALID_ENTRY("&d{0}&c is not a valid username/uuid.", true),
- GROUP_INVALID_ENTRY("Group names can only contain alphanumeric characters.", true),
- TRACK_INVALID_ENTRY("Track names can only contain alphanumeric characters.", true),
- SERVER_WORLD_INVALID_ENTRY("Server/world names can only contain alphanumeric characters and cannot exceed 36 characters in length.", true),
- USE_INHERIT_COMMAND("Use the 'parent add' and 'parent remove' commands instead of specifying the node.", true),
+ USER_INVALID_ENTRY("&4{}&c is not a valid username/uuid.", true),
+ GROUP_INVALID_ENTRY("&4{}&c is not a valid group name.", true),
+ TRACK_INVALID_ENTRY("&4{}&c is not a valid track name.", true),
+ SERVER_WORLD_INVALID_ENTRY("&cServer/world names can only contain alphanumeric characters and cannot exceed 36 characters in length.", true),
+ USE_INHERIT_COMMAND("&cUse the 'parent add' and 'parent remove' commands instead of specifying the node.", true),
/*
* Commands
*/
- VERBOSE_INVALID_FILTER("&cInvalid verbose filter: &f{0}", true),
- VERBOSE_ON("&bVerbose checking output set to &aTRUE &bfor all permissions.", true),
- VERBOSE_ON_QUERY("&bVerbose checking output set to &aTRUE &bfor permissions matching filter: &f{0}", true),
- VERBOSE_OFF("&bVerbose checking output set to &cFALSE&b.", true),
+ VERBOSE_INVALID_FILTER("&4{}&c is not a valid verbose filter.", true),
+ VERBOSE_ON("&bVerbose logging &aenabled &bfor checks matching &aANY&b.", true),
+ VERBOSE_ON_QUERY("&bVerbose logging &aenabled &bfor checks matching &a{}&b.", true),
+ VERBOSE_OFF("&bVerbose logging &cdisabled&b.", true),
- VERBOSE_RECORDING_ON("&bVerbose recording set to &aTRUE &bfor all permissions.", true),
- VERBOSE_RECORDING_ON_QUERY("&bVerbose recording set to &aTRUE &bfor permissions matching filter: &f{0}", true),
- VERBOSE_RECORDING_UPLOAD_START("&bVerbose recording was disabled. Uploading results...", true),
- VERBOSE_RECORDING_URL("&aVerbose results URL:", true),
+ VERBOSE_RECORDING_ON("&bVerbose recording &aenabled &bfor checks matching &aANY&b.", true),
+ VERBOSE_RECORDING_ON_QUERY("&bVerbose recording &aenabled &bfor checks matching &a{}&b.", true),
+ VERBOSE_UPLOAD_START("&bVerbose logging &cdisabled&b. Uploading results...", true),
+ VERBOSE_RESULTS_URL("&aVerbose results URL:", true),
TREE_UPLOAD_START("&bGenerating permission tree...", true),
- TREE_EMPTY("&aUnable to generate tree. No results were found.", true),
- TREE_URL("&aPermission Tree URL:", true),
+ TREE_EMPTY("&cUnable to generate tree. No results were found.", true),
+ TREE_URL("&aPermission tree URL:", true),
- SEARCH_SEARCHING("&aSearching for users and groups with &b{0}&a...", true),
- SEARCH_SEARCHING_MEMBERS("&aSearching for users and groups who inherit from &b{0}&a...", true),
- SEARCH_RESULT("&aFound &b{0}&a entries from &b{1}&a users and &b{2}&a groups.", true),
+ SEARCH_SEARCHING("&aSearching for users and groups with &b{}&a...", true),
+ SEARCH_SEARCHING_MEMBERS("&aSearching for users and groups who inherit from &b{}&a...", true),
+ SEARCH_RESULT("&aFound &b{}&a entries from &b{}&a users and &b{}&a groups.", true),
SEARCH_SHOWING_USERS("&bShowing user entries:", true),
SEARCH_SHOWING_GROUPS("&bShowing group entries:", true),
- SEARCH_SHOWING_USERS_WITH_PAGE("&bShowing user entries: {0}", true),
- SEARCH_SHOWING_GROUPS_WITH_PAGE("&bShowing group entries: {0}", true),
+ SEARCH_SHOWING_USERS_WITH_PAGE("&bShowing user entries: {}", true),
+ SEARCH_SHOWING_GROUPS_WITH_PAGE("&bShowing group entries: {}", true),
- APPLY_EDITS_INVALID_CODE("&aInvalid code. &7({0})", true),
- APPLY_EDITS_UNABLE_TO_READ("&aUnable to read data using the given code. &7({0})", true),
- APPLY_EDITS_NO_TARGET("&aUnable to parse the target of the edit. Please supply it as an extra argument.", true),
- APPLY_EDITS_TARGET_GROUP_NOT_EXISTS("&aTarget group &b{0}&a does not exist.", true),
- APPLY_EDITS_TARGET_USER_NOT_UUID("&aTarget user &b{0}&a is not a valid uuid.", true),
- APPLY_EDITS_TARGET_USER_UNABLE_TO_LOAD("&aUnable to load target user &b{0}&a.", true),
- APPLY_EDITS_TARGET_UNKNOWN("&aInvalid target. &7({0})", true),
- APPLY_EDITS_SUCCESS("&aSuccessfully applied &b{0}&a nodes to &b{1}&a.", true),
+ APPLY_EDITS_INVALID_CODE("&cInvalid code. &7({})", true),
+ APPLY_EDITS_UNABLE_TO_READ("&cUnable to read data using the given code. &7({})", true),
+ APPLY_EDITS_NO_TARGET("&cUnable to parse the target of the edit. Please supply it as an extra argument.", true),
+ APPLY_EDITS_TARGET_GROUP_NOT_EXISTS("&cTarget group &4{}&c does not exist.", true),
+ APPLY_EDITS_TARGET_USER_NOT_UUID("&cTarget user &4{}&c is not a valid uuid.", true),
+ APPLY_EDITS_TARGET_USER_UNABLE_TO_LOAD("&cUnable to load target user &4{}&c.", true),
+ APPLY_EDITS_TARGET_UNKNOWN("&cInvalid target. &7({})", true),
+ APPLY_EDITS_SUCCESS("&aSuccessfully applied &b{}&a nodes to &b{}&a.", true),
EDITOR_UPLOAD_FAILURE("&cUnable to upload permission data to the editor.", true),
EDITOR_URL("&aEditor URL:", true),
- CHECK_RESULT("&aPermission check result on user &b{0}&a for permission &b{1}&a: &f{2}", true),
+ CHECK_RESULT("&aPermission check result on user &b{}&a for permission &b{}&a: &f{}", true),
- CREATE_SUCCESS("&b{0}&a was successfully created.", true),
- DELETE_SUCCESS("&b{0}&a was successfully deleted.", true),
- RENAME_SUCCESS("&b{0}&a was successfully renamed to &b{1}&a.", true),
- CLONE_SUCCESS("&b{0}&a was successfully cloned onto &b{1}&a.", true),
+ CREATE_SUCCESS("&b{}&a was successfully created.", true),
+ DELETE_SUCCESS("&b{}&a was successfully deleted.", true),
+ RENAME_SUCCESS("&b{}&a was successfully renamed to &b{}&a.", true),
+ CLONE_SUCCESS("&b{}&a was successfully cloned onto &b{}&a.", true),
- ALREADY_INHERITS("{0} already inherits '{1}'.", true),
- DOES_NOT_INHERIT("{0} does not inherit '{1}'.", true),
- ALREADY_TEMP_INHERITS("{0} already temporarily inherits '{1}'.", true),
- DOES_NOT_TEMP_INHERIT("{0} does not temporarily inherit '{1}'.", true),
+ ALREADY_INHERITS("&b{}&a already inherits from &b{}&a in context {}&a.", true),
+ DOES_NOT_INHERIT("&b{}&a does not inherit from &b{}&a in context {}&a.", true),
+ ALREADY_TEMP_INHERITS("&b{}&a already temporarily inherits from &b{}&a in context {}&a.", true),
+ DOES_NOT_TEMP_INHERIT("&b{}&a does not temporarily inherit from &b{}&a in context {}&a.", true),
- TRACK_ALREADY_CONTAINS("Track {0} already contains the group '{1}'.", true),
- TRACK_DOES_NOT_CONTAIN("Track {0} does not contain the group '{1}'.", true),
- TRACK_AMBIGUOUS_CALL("The user specified is a member of multiple groups on this track. Unable to determine their location.", true),
+ TRACK_ALREADY_CONTAINS("&b{}&a already contains &b{}&a.", true),
+ TRACK_DOES_NOT_CONTAIN("&b{}&a doesn't contain &b{}&a.", true),
+ TRACK_AMBIGUOUS_CALL("&4{}&c is a member of multiple groups on this track. Unable to determine their location.", true),
- GROUP_ALREADY_EXISTS("That group already exists!", true),
- GROUP_DOES_NOT_EXIST("That group does not exist!", true),
- GROUP_LOAD_ERROR("An unexpected error occurred. Group not loaded.", true),
- GROUPS_LOAD_ERROR("An unexpected error occurred. Unable to load all groups.", true),
+ ALREADY_EXISTS("&4{}&c already exists!", true),
+ DOES_NOT_EXIST("&4{}&c does not exist!", true),
- TRACK_ALREADY_EXISTS("That track already exists!", true),
- TRACK_DOES_NOT_EXIST("That track does not exist!", true),
- TRACK_LOAD_ERROR("An unexpected error occurred. Track not loaded.", true),
- TRACKS_LOAD_ERROR("An unexpected error occurred. Unable to load all tracks.", true),
- TRACK_EMPTY("The track cannot be used as it is empty or contains only one group.", true),
+ GROUP_LOAD_ERROR("&cAn unexpected error occurred. Group not loaded.", true),
+ GROUPS_LOAD_ERROR("&cAn unexpected error occurred. Unable to load all groups.", true),
- UPDATE_TASK_REQUEST("&bUpdate task scheduled.", true),
- UPDATE_TASK_COMPLETE("&aUpdate task finished.", true),
- UPDATE_TASK_COMPLETE_NETWORK("&aUpdate task finished. Now attempting to push to other servers.", true),
- UPDATE_TASK_PUSH_SUCCESS("&aOther servers were notified via &b{0} Messaging &asuccessfully.", true),
+ TRACK_LOAD_ERROR("&cAn unexpected error occurred. Track not loaded.", true),
+ TRACKS_LOAD_ERROR("&cAn unexpected error occurred. Unable to load all tracks.", true),
+ TRACK_EMPTY("&4{}&c cannot be used as it is empty or contains only one group.", true),
+
+ UPDATE_TASK_REQUEST("&bAn update task has been requested. Please wait...", true),
+ UPDATE_TASK_COMPLETE("&aUpdate task complete.", true),
+ UPDATE_TASK_COMPLETE_NETWORK("&aUpdate task complete. Now attempting to push to other servers.", true),
+ UPDATE_TASK_PUSH_SUCCESS("&aOther servers were notified via &b{} Messaging &asuccessfully.", true),
UPDATE_TASK_PUSH_FAILURE("&cError whilst pushing changes to other servers.", true),
- UPDATE_TASK_PUSH_FAILURE_NOT_SETUP("&cError whilst pushing changes to other servers. A messaging service has not been configured.", true),
- RELOAD_CONFIG_SUCCESS("&aThe configuration file was reloaded. &7(some options will only apply after the server has restarted.)", true),
+ UPDATE_TASK_PUSH_FAILURE_NOT_SETUP("&cError whilst pushing changes to other servers. &7(a messaging service has not been configured)", true),
+ RELOAD_CONFIG_SUCCESS("&aThe configuration file was reloaded. &7(some options will only apply after the server has restarted)", true),
INFO_TOP(
- "{PREFIX}&2Running &bLuckPerms v{0}&2 by &bLuck&2." + "\n" +
- "{PREFIX}&f- &3Platform: &f{1}" + "\n" +
- "{PREFIX}&f- &3Server Brand: &f{2}" + "\n" +
- "{PREFIX}&f- &3Server Version: &f{3}",
+ "{PREFIX}&2Running &bLuckPerms v{}&2 by &bLuck&2." + "\n" +
+ "{PREFIX}&f- &3Platform: &f{}" + "\n" +
+ "{PREFIX}&f- &3Server Brand: &f{}" + "\n" +
+ "{PREFIX}&f- &3Server Version: &f{}",
false
),
INFO_MIDDLE(
- "{PREFIX}&f- &bMessaging Type: &f{0}" + "\n" +
+ "{PREFIX}&f- &bMessaging Type: &f{}" + "\n" +
"{PREFIX}&f- &bInstance:" + "\n" +
- "{PREFIX}&f- &3Server Name: &f{1}" + "\n" +
- "{PREFIX}&f- &3Online Players: &a{2}" + "\n" +
- "{PREFIX}&f- &3Unique Connections: &a{3}" + "\n" +
- "{PREFIX}&f- &3Uptime: &7{4}" + "\n" +
- "{PREFIX}&f- &3Local Data: &a{5} &7users, &a{6} &7groups, &a{7} &7tracks" + "\n" +
- "{PREFIX}&f- &3Context Calculators: &a{8}" + "\n" +
- "{PREFIX}&f- &3Known permissions: &a{9}" + "\n" +
+ "{PREFIX}&f- &3Server Name: &f{}" + "\n" +
+ "{PREFIX}&f- &3Online Players: &a{}" + "\n" +
+ "{PREFIX}&f- &3Unique Connections: &a{}" + "\n" +
+ "{PREFIX}&f- &3Uptime: &7{}" + "\n" +
+ "{PREFIX}&f- &3Local Data: &a{} &7users, &a{} &7groups, &a{} &7tracks" + "\n" +
+ "{PREFIX}&f- &3Context Calculators: &a{}" + "\n" +
+ "{PREFIX}&f- &3Known permissions: &a{}" + "\n" +
"{PREFIX}&f- &3Active processors: &7{10}",
false
),
- CREATE_GROUP_ERROR("There was an error whilst creating the group.", true),
- DELETE_GROUP_ERROR("There was an error whilst deleting the group.", true),
- DELETE_GROUP_ERROR_DEFAULT("You cannot delete the default group.", true),
+
+ CREATE_ERROR("&cThere was an error whilst creating &4{}&c.", true),
+ DELETE_ERROR("&cThere was an error whilst deleting &4{}&c.", true),
+
+ DELETE_GROUP_ERROR_DEFAULT("&cYou cannot delete the default group.", true),
+
GROUPS_LIST("&aGroups: &7(name, weight, tracks)", true),
- GROUPS_LIST_ENTRY("&f- &3{0} &7- &b{1}", true),
- GROUPS_LIST_ENTRY_WITH_TRACKS("&f- &3{0} &7- &b{1} &7- [&3{2}&7]", true),
+ GROUPS_LIST_ENTRY("&f- &3{} &7- &b{}", true),
+ GROUPS_LIST_ENTRY_WITH_TRACKS("&f- &3{} &7- &b{} &7- [&3{}&7]", true),
- CREATE_TRACK_ERROR("There was an error whilst creating the track.", true),
- DELETE_TRACK_ERROR("There was an error whilst deleting the track.", true),
- TRACKS_LIST("&aTracks: {0}", true),
+ TRACKS_LIST("&aTracks: {}", true),
- LISTNODES("&b{0}'s Nodes:", true),
- LISTNODES_WITH_PAGE("&b{0}'s Nodes: {1}", true),
- LISTNODES_TEMP("&b{0}'s Temporary Nodes:", true),
- LISTNODES_TEMP_WITH_PAGE("&b{0}'s Temporary Nodes: {1}", true),
- LISTPARENTS("&b{0}'s Parent Groups:", true),
- LISTPARENTS_TEMP("&b{0}'s Temporary Parent Groups:", true),
- LIST_TRACKS("&b{0}'s Tracks:" + "\n" + "{1}", true),
- LIST_TRACKS_EMPTY("{0} is not on any tracks.", true),
+ LISTNODES("&b{}'s Permissions:", true),
+ LISTNODES_WITH_PAGE("&b{}'s Permissions: {}", true),
+ LISTNODES_TEMP("&b{}'s Temporary Permissions:", true),
+ LISTNODES_TEMP_WITH_PAGE("&b{}'s Temporary Permissions: {}", true),
- CONTEXT_PAIR_INLINE("&3{0}=&b{1}", false),
+ LISTPARENTS("&b{}'s Parent Groups:", true),
+ LISTPARENTS_TEMP("&b{}'s Temporary Parent Groups:", true),
+ LIST_TRACKS("&b{}'s Tracks:" + "\n" + "{}", true),
+ LIST_TRACKS_EMPTY("&b{}&a is not on any tracks.", true),
+
+ CONTEXT_PAIR_INLINE("&3{}=&b{}", false),
CONTEXT_PAIR__GLOBAL_INLINE("&eglobal", false),
CONTEXT_PAIR_SEP("&a, ", false),
- CONTEXT_PAIR("&8(&7{0}=&f{1}&8)", false),
+ CONTEXT_PAIR("&8(&7{}=&f{}&8)", false),
- CHECK_PERMISSION("&b{0}&a has permission &b{1}&a set to {2}&a in context {3}&a.", true),
- CHECK_INHERITS_PERMISSION("&b{0}&a has permission &b{1}&a set to {2}&a in context {3}&a. &7(inherited from &a{4}&7)", true),
- SETPERMISSION_SUCCESS("&aSet &b{0}&a to &b{1}&a for &b{2}&a in context {3}&a.", true),
- SETPERMISSION_TEMP_SUCCESS("&aSet &b{0}&a to &b{1}&a for &b{2}&a for a duration of &b{3}&a in context {4}&a.", true),
- UNSETPERMISSION_SUCCESS("&aUnset &b{0}&a for &b{1}&a in context {2}&a.", true),
- UNSET_TEMP_PERMISSION_SUCCESS("&aUnset temporary permission &b{0}&a for &b{1}&a in context {2}&a.", true),
- SET_INHERIT_SUCCESS("&b{0}&a now inherits permissions from &b{1}&a in context {2}&a.", true),
- SET_TEMP_INHERIT_SUCCESS("&b{0}&a now inherits permissions from &b{1}&a for a duration of &b{2}&a in context {3}&a.", true),
- SET_PARENT_SUCCESS("&b{0}&a had their existing parent groups cleared, and now only inherits &b{1}&a in context {2}&a.", true),
- SET_TRACK_PARENT_SUCCESS("&b{0}&a had their existing parent groups on track &b{1}&a cleared, and now only inherits &b{2}&a in context {3}&a.", true),
- UNSET_INHERIT_SUCCESS("&b{0}&a no longer inherits permissions from &b{1}&a in context {2}&a.", true),
- UNSET_TEMP_INHERIT_SUCCESS("&b{0}&a no longer temporarily inherits permissions from &b{1}&a in context {2}&a.", true),
+ CHECK_PERMISSION("&b{}&a has permission &b{}&a set to {}&a in context {}&a.", true),
+ CHECK_INHERITS_PERMISSION("&b{}&a has permission &b{}&a set to {}&a in context {}&a. &7(inherited from &a{}&7)", true),
- CLEAR_SUCCESS("&b{0}&a's permissions were cleared in context {1}&a. (&b{2}&a nodes were removed.)", true),
- CLEAR_SUCCESS_SINGULAR("&b{0}&a's permissions were cleared in context {1}&a. (&b{2}&a node was removed.)", true),
- PARENT_CLEAR_SUCCESS("&b{0}&a's parents were cleared in context {1}&a. (&b{2}&a nodes were removed.)", true),
- PARENT_CLEAR_SUCCESS_SINGULAR("&b{0}&a's parents were cleared in context {1}&a. (&b{2}&a node was removed.)", true),
+ SETPERMISSION_SUCCESS("&aSet &b{}&a to &b{}&a for &b{}&a in context {}&a.", true),
+ ALREADY_HASPERMISSION("&b{}&a already has &b{}&a set in context {}&a.", true),
- PARENT_CLEAR_TRACK_SUCCESS("&b{0}&a's parents on track &b{1}&a were cleared in context {2}&a. (&b{3}&a nodes were removed.)", true),
- PARENT_CLEAR_TRACK_SUCCESS_SINGULAR("&b{0}&a's parents on track &b{1}&a were cleared in context {2}&a. (&b{3}&a node was removed.)", true),
+ SETPERMISSION_TEMP_SUCCESS("&aSet &b{}&a to &b{}&a for &b{}&a for a duration of &b{}&a in context {}&a.", true),
+ ALREADY_HAS_TEMP_PERMISSION("&b{}&a already has &b{}&a set temporarily in context {}&a.", true),
- META_CLEAR_SUCCESS("&b{0}&a's meta matching type &b{1}&a was cleared in context {2}&a. (&b{3}&a nodes were removed.)", true),
- META_CLEAR_SUCCESS_SINGULAR("&b{0}&a's meta matching type &b{1}&a was cleared in context {2}&a. (&b{3}&a node was removed.)", true),
+ UNSETPERMISSION_SUCCESS("&aUnset &b{}&a for &b{}&a in context {}&a.", true),
+ DOES_NOT_HAVE_PERMISSION("&b{}&a does not have &b{}&a set in context {}&a.", true),
- ILLEGAL_DATE_ERROR("Could not parse date '{0}'.", true),
- PAST_DATE_ERROR("You cannot set a date in the past!", true),
+ UNSET_TEMP_PERMISSION_SUCCESS("&aUnset temporary permission &b{}&a for &b{}&a in context {}&a.", true),
+ DOES_NOT_HAVE_TEMP_PERMISSION("&b{}&a does not have &b{}&a set temporarily in context {}&a.", true),
- CHAT_META_PREFIX_HEADER("&b{0}'s Prefixes", true),
- CHAT_META_SUFFIX_HEADER("&b{0}'s Suffixes", true),
- META_HEADER("&b{0}'s Meta", true),
- CHAT_META_ENTRY("&b-> {0} &f- &f\"{1}&f\" &8(&7inherited from &a{2}&8)", true),
- CHAT_META_ENTRY_WITH_CONTEXT("&b-> {0} &f- &f\"{1}&f\" &8(&7inherited from &a{2}&8){3}", true),
- META_ENTRY("&b-> &a{0} &f= &f\"{1}&f\" &8(&7inherited from &a{2}&8)", true),
- META_ENTRY_WITH_CONTEXT("&b-> &a{0} &f= &f\"{1}&f\" &8(&7inherited from &a{2}&8){3}", true),
- CHAT_META_PREFIX_NONE("&b{0} has no prefixes.", true),
- CHAT_META_SUFFIX_NONE("&b{0} has no suffixes.", true),
- META_NONE("&b{0} has no meta.", true),
+ SET_INHERIT_SUCCESS("&b{}&a now inherits permissions from &b{}&a in context {}&a.", true),
+ SET_TEMP_INHERIT_SUCCESS("&b{}&a now inherits permissions from &b{}&a for a duration of &b{}&a in context {}&a.", true),
+ SET_PARENT_SUCCESS("&b{}&a had their existing parent groups cleared, and now only inherits &b{}&a in context {}&a.", true),
+ SET_TRACK_PARENT_SUCCESS("&b{}&a had their existing parent groups on track &b{}&a cleared, and now only inherits &b{}&a in context {}&a.", true),
+ UNSET_INHERIT_SUCCESS("&b{}&a no longer inherits permissions from &b{}&a in context {}&a.", true),
+ UNSET_TEMP_INHERIT_SUCCESS("&b{}&a no longer temporarily inherits permissions from &b{}&a in context {}&a.", true),
- META_INVALID_PRIORITY("Invalid priority '{0}'. Expected a number.", true),
+ CLEAR_SUCCESS("&b{}&a's permissions were cleared in context {}&a. (&b{}&a nodes were removed.)", true),
+ CLEAR_SUCCESS_SINGULAR("&b{}&a's permissions were cleared in context {}&a. (&b{}&a node was removed.)", true),
+ PARENT_CLEAR_SUCCESS("&b{}&a's parents were cleared in context {}&a. (&b{}&a nodes were removed.)", true),
+ PARENT_CLEAR_SUCCESS_SINGULAR("&b{}&a's parents were cleared in context {}&a. (&b{}&a node was removed.)", true),
- ALREADY_HAS_CHAT_META("{0} already has that {1} set.", true),
- DOES_NOT_HAVE_CHAT_META("{0} doesn't have that {1} set.", true),
+ PARENT_CLEAR_TRACK_SUCCESS("&b{}&a's parents on track &b{}&a were cleared in context {}&a. (&b{}&a nodes were removed.)", true),
+ PARENT_CLEAR_TRACK_SUCCESS_SINGULAR("&b{}&a's parents on track &b{}&a were cleared in context {}&a. (&b{}&a node was removed.)", true),
- ADD_CHATMETA_SUCCESS("&b{0}&a had {1} &f\"{2}&f\"&a set at a priority of &b{3}&a in context {4}&a.", true),
- ADD_TEMP_CHATMETA_SUCCESS("&b{0}&a had {1} &f\"{2}&f\"&a set at a priority of &b{3}&a for a duration of &b{4}&a in context {5}&a.", true),
- REMOVE_CHATMETA_SUCCESS("&b{0}&a had {1} &f\"{2}&f\"&a at priority &b{3}&a removed in context {4}&a.", true),
- BULK_REMOVE_CHATMETA_SUCCESS("&b{0}&a had all {1}es at priority &b{2}&a removed in context {3}&a.", true),
- REMOVE_TEMP_CHATMETA_SUCCESS("&b{0}&a had temporary {1} &f\"{2}&f\"&a at priority &b{3}&a removed in context {4}&a.", true),
- BULK_REMOVE_TEMP_CHATMETA_SUCCESS("&b{0}&a had all temporary {1}es at priority &b{2}&a removed in context {3}&a.", true),
+ META_CLEAR_SUCCESS("&b{}&a's meta matching type &b{}&a was cleared in context {}&a. (&b{}&a nodes were removed.)", true),
+ META_CLEAR_SUCCESS_SINGULAR("&b{}&a's meta matching type &b{}&a was cleared in context {}&a. (&b{}&a node was removed.)", true),
- ALREADY_HAS_META("{0} already has that meta pair set.", true),
+ ILLEGAL_DATE_ERROR("&cCould not parse date &4{}&c.", true),
+ PAST_DATE_ERROR("&cYou cannot set a date in the past!", true),
- SET_META_SUCCESS("&aSet meta value for key &f\"{0}&f\"&a to &f\"{1}&f\"&a for &b{2}&a in context {3}&a.", true),
- SET_META_TEMP_SUCCESS("&aSet meta value for key &f\"{0}&f\"&a to &f\"{1}&f\"&a for &b{2}&a for a duration of &b{3}&a in context {4}&a.", true),
- UNSET_META_SUCCESS("&aUnset meta value with key &f\"{0}&f\"&a for &b{1}&a in context {2}&a.", true),
- UNSET_META_TEMP_SUCCESS("&aUnset temporary meta value with key &f\"{0}&f\"&a for &b{1}&a in context {2}&a.", true),
+ CHAT_META_PREFIX_HEADER("&b{}'s Prefixes", true),
+ CHAT_META_SUFFIX_HEADER("&b{}'s Suffixes", true),
+ META_HEADER("&b{}'s Meta", true),
+ CHAT_META_ENTRY("&b-> {} &f- &f'{}&f' &8(&7inherited from &a{}&8)", true),
+ CHAT_META_ENTRY_WITH_CONTEXT("&b-> {} &f- &f'{}&f' &8(&7inherited from &a{}&8){}", true),
+ META_ENTRY("&b-> &a{} &f= &f'{}&f' &8(&7inherited from &a{}&8)", true),
+ META_ENTRY_WITH_CONTEXT("&b-> &a{} &f= &f'{}&f' &8(&7inherited from &a{}&8){}", true),
+ CHAT_META_PREFIX_NONE("&b{} has no prefixes.", true),
+ CHAT_META_SUFFIX_NONE("&b{} has no suffixes.", true),
+ META_NONE("&b{} has no meta.", true),
- DOESNT_HAVE_META("{0} does not have that meta pair set.", true),
+ META_INVALID_PRIORITY("&cInvalid priority &4{}&c. Expected a number.", true),
- BULK_UPDATE_INVALID_DATA_TYPE("Invalid type. Was expecting 'all', 'users' or 'groups'.", true),
- BULK_UPDATE_INVALID_CONSTRAINT("Invalid constraint &4{0}&c. Constraints should be in the format '&f &c'.", true),
- BULK_UPDATE_INVALID_COMPARISON("Invalid comparison operator '&4{0}&c'. Expected one of the following: &f== != ~~ ~!", true),
- BULK_UPDATE_QUEUED("&aBulk update operation was queued. &7(&f{0}&7)", true),
- BULK_UPDATE_CONFIRM("&aRun &b/{0} bulkupdate confirm {1} &ato execute the update.", true),
- BULK_UPDATE_UNKNOWN_ID("&aOperation with id &b{0}&a does not exist or has expired.", true),
+ ALREADY_HAS_CHAT_META("&b{}&a already has {} &f'{}&f'&a set at a priority of &b{}&a in context {}&a.", true),
+ ALREADY_HAS_TEMP_CHAT_META("&b{}&a already has {} &f'{}&f'&a set temporarily at a priority of &b{}&a in context {}&a.", true),
+
+ DOES_NOT_HAVE_CHAT_META("&b{}&a doesn't have {} &f'{}&f'&a set at a priority of &b{}&a in context {}&a.", true),
+ DOES_NOT_HAVE_TEMP_CHAT_META("&b{}&a doesn't have {} &f'{}&f'&a set temporarily at a priority of &b{}&a in context {}&a.", true),
+
+ ADD_CHATMETA_SUCCESS("&b{}&a had {} &f'{}&f'&a set at a priority of &b{}&a in context {}&a.", true),
+ ADD_TEMP_CHATMETA_SUCCESS("&b{}&a had {} &f'{}&f'&a set at a priority of &b{}&a for a duration of &b{}&a in context {}&a.", true),
+ REMOVE_CHATMETA_SUCCESS("&b{}&a had {} &f'{}&f'&a at priority &b{}&a removed in context {}&a.", true),
+ BULK_REMOVE_CHATMETA_SUCCESS("&b{}&a had all {}es at priority &b{}&a removed in context {}&a.", true),
+ REMOVE_TEMP_CHATMETA_SUCCESS("&b{}&a had temporary {} &f'{}&f'&a at priority &b{}&a removed in context {}&a.", true),
+ BULK_REMOVE_TEMP_CHATMETA_SUCCESS("&b{}&a had all temporary {}es at priority &b{}&a removed in context {}&a.", true),
+
+ ALREADY_HAS_META("&b{}&a already has meta key &f'{}&f'&a set to &f'{}&f'&a in context {}&a.", true),
+ ALREADY_HAS_TEMP_META("&b{}&a already has meta key &f'{}&f'&a temporarily set to &f'{}&f'&a in context {}&a.", true),
+
+ DOESNT_HAVE_META("&b{}&a doesn't have meta key &f'{}&f'&a set in context {}&a.", true),
+ DOESNT_HAVE_TEMP_META("&b{}&a doesn't have meta key &f'{}&f'&a set temporarily in context {}&a.", true),
+
+ SET_META_SUCCESS("&aSet meta key &f'{}&f'&a to &f'{}&f'&a for &b{}&a in context {}&a.", true),
+ SET_META_TEMP_SUCCESS("&aSet meta key &f'{}&f'&a to &f'{}&f'&a for &b{}&a for a duration of &b{}&a in context {}&a.", true),
+ UNSET_META_SUCCESS("&aUnset meta key &f'{}&f'&a for &b{}&a in context {}&a.", true),
+ UNSET_META_TEMP_SUCCESS("&aUnset temporary meta key &f'{}&f'&a for &b{}&a in context {}&a.", true),
+
+ BULK_UPDATE_INVALID_DATA_TYPE("&cInvalid type. Was expecting 'all', 'users' or 'groups'.", true),
+ BULK_UPDATE_INVALID_CONSTRAINT("&cInvalid constraint &4{}&c. Constraints should be in the format '&f &c'.", true),
+ BULK_UPDATE_INVALID_COMPARISON("&cInvalid comparison operator '&4{}&c'. Expected one of the following: &f== != ~~ ~!", true),
+ BULK_UPDATE_QUEUED("&aBulk update operation was queued. &7(&f{}&7)", true),
+ BULK_UPDATE_CONFIRM("&aRun &b/{} bulkupdate confirm {} &ato execute the update.", true),
+ BULK_UPDATE_UNKNOWN_ID("&aOperation with id &b{}&a does not exist or has expired.", true),
BULK_UPDATE_STARTING("&aRunning bulk update.", true),
BULK_UPDATE_SUCCESS("&bBulk update completed successfully.", true),
BULK_UPDATE_FAILURE("&cBulk update failed. Check the console for errors.", true),
USER_INFO_GENERAL(
- "{PREFIX}&b&l> &bUser Info: &f{0}" + "\n" +
- "{PREFIX}&f- &3UUID: &f{1}" + "\n" +
- "{PREFIX}&f- &3Status: {2}" + "\n" +
- "{PREFIX}&f- &3Primary Group: &f{3}" + "\n" +
+ "{PREFIX}&b&l> &bUser Info: &f{}" + "\n" +
+ "{PREFIX}&f- &3UUID: &f{}" + "\n" +
+ "{PREFIX}&f- &3Status: {}" + "\n" +
+ "{PREFIX}&f- &3Primary Group: &f{}" + "\n" +
"{PREFIX}&f- &aCounts:" + "\n" +
- "{PREFIX}&f- &3Permissions: &a{4}" + "\n" +
- "{PREFIX}&f- &3Temporary Permissions: &a{5}" + "\n" +
- "{PREFIX}&f- &3Prefixes: &a{6}" + "\n" +
- "{PREFIX}&f- &3Suffixes: &a{7}" + "\n" +
- "{PREFIX}&f- &3Meta: &a{8}",
+ "{PREFIX}&f- &3Nodes: &a{}" + "\n" +
+ "{PREFIX}&f- &3Permissions: &a{}" + "\n" +
+ "{PREFIX}&f- &3Prefixes: &a{}" + "\n" +
+ "{PREFIX}&f- &3Suffixes: &a{}" + "\n" +
+ "{PREFIX}&f- &3Meta: &a{}",
false
),
USER_INFO_DATA(
"{PREFIX}&f- &aCached Data:" + "\n" +
- "{PREFIX}&f- &3Has contextual data: {0}" + "\n" +
- "{PREFIX}&f- &3Current Contexts: {1}" + "\n" +
- "{PREFIX}&f- &3Current Prefix: {2}" + "\n" +
- "{PREFIX}&f- &3Current Suffix: {3}",
+ "{PREFIX}&f- &3Has contextual data: {}" + "\n" +
+ "{PREFIX}&f- &3Current Contexts: {}" + "\n" +
+ "{PREFIX}&f- &3Current Prefix: {}" + "\n" +
+ "{PREFIX}&f- &3Current Suffix: {}",
false
),
INFO_PARENT_HEADER("&f- &aParent Groups:", true),
INFO_TEMP_PARENT_HEADER("&f- &aTemporary Parent Groups:", true),
- USER_REMOVEGROUP_ERROR_PRIMARY("You cannot remove a user from their primary group.", true),
- USER_PRIMARYGROUP_SUCCESS("&b{0}&a's primary group was set to &b{1}&a.", true),
- USER_PRIMARYGROUP_WARN_OPTION("&cWarning: The primary group calculation method being used by this server &7({0}) &cmay not reflect this change.", true),
- USER_PRIMARYGROUP_ERROR_ALREADYHAS("The user already has this group set as their primary group.", true),
- USER_PRIMARYGROUP_ERROR_NOTMEMBER("&b{0}&a was not already a member of &b{1}&a, adding them now.", true),
- USER_TRACK_ERROR_NOT_CONTAIN_GROUP("The user specified isn't already in any groups on this track.", true),
+ USER_REMOVEGROUP_ERROR_PRIMARY("&aYou cannot remove a user from their primary group.", true),
+ USER_PRIMARYGROUP_SUCCESS("&b{}&a's primary group was set to &b{}&a.", true),
+ USER_PRIMARYGROUP_WARN_OPTION("&aWarning: The primary group calculation method being used by this server &7({}) &amay not reflect this change.", true),
+ USER_PRIMARYGROUP_ERROR_ALREADYHAS("&b{}&a already has &b{}&a set as their primary group.", true),
+ USER_PRIMARYGROUP_ERROR_NOTMEMBER("&b{}&a was not already a member of &b{}&a, adding them now.", true),
+ USER_TRACK_ERROR_NOT_CONTAIN_GROUP("&b{}&a isn't already in any groups on &b{}&a.", true),
- USER_TRACK_ADDED_TO_FIRST("&b{0}&a isn't in any groups on this track, so they were added to the first group, &b{1}&a in context {2}&a.", true),
- USER_PROMOTE_SUCCESS("&aPromoting user along track &b{0}&a from &b{1}&a to &b{2}&a in context {3}&a.", true),
+ USER_TRACK_ADDED_TO_FIRST("&b{}&a isn't in any groups on this track, so they were added to the first group, &b{}&a in context {}&a.", true),
+ USER_PROMOTE_SUCCESS("&aPromoting &b{}&a along track &b{}&a from &b{}&a to &b{}&a in context {}&a.", true),
- USER_PROMOTE_ERROR_ENDOFTRACK("The end of track &4{0}&c was reached. Unable to promote user.", true),
+ USER_PROMOTE_ERROR_ENDOFTRACK("&aThe end of track &b{}&a was reached. Unable to promote &b{}&a.", true),
USER_PROMOTE_ERROR_MALFORMED(
- "{PREFIX}The next group on the track, {0}, no longer exists. Unable to promote user." + "\n" +
- "{PREFIX}Either create the group, or remove it from the track and try again.",
+ "{PREFIX}&aThe next group on the track, &b{}&a, no longer exists. Unable to promote user." + "\n" +
+ "{PREFIX}&aEither create the group, or remove it from the track and try again.",
false
),
- USER_DEMOTE_SUCCESS("&aDemoting user along track &b{0}&a from &b{1}&a to &b{2}&a in context {3}&a.", true),
- USER_DEMOTE_ENDOFTRACK("The end of track &4{0}&c was reached, so &4{1}&c was removed from &4{2}&c.", true),
+ USER_DEMOTE_SUCCESS("&aDemoting &b{}&a along track &b{}&a from &b{}&a to &b{}&a in context {}&a.", true),
+ USER_DEMOTE_ENDOFTRACK("&aThe end of track &b{}&a was reached, so &b{}&a was removed from &b{}&a.", true),
USER_DEMOTE_ERROR_MALFORMED(
- "{PREFIX}The previous group on the track, {0}, no longer exists. Unable to demote user." + "\n" +
- "{PREFIX}Either create the group, or remove it from the track and try again.",
+ "{PREFIX}&aThe previous group on the track, &b{}&a, no longer exists. Unable to demote user." + "\n" +
+ "{PREFIX}&aEither create the group, or remove it from the track and try again.",
false
),
GROUP_INFO_GENERAL(
- "{PREFIX}&b&l> &bGroup Info: &f{0}" + "\n" +
- "{PREFIX}&f- &3Display Name: &f{1}" + "\n" +
- "{PREFIX}&f- &3Weight: &f{2}" + "\n" +
+ "{PREFIX}&b&l> &bGroup Info: &f{}" + "\n" +
+ "{PREFIX}&f- &3Display Name: &f{}" + "\n" +
+ "{PREFIX}&f- &3Weight: &f{}" + "\n" +
"{PREFIX}&f- &aCounts:" + "\n" +
- "{PREFIX}&f- &3Permissions: &a{3}" + "\n" +
- "{PREFIX}&f- &3Temporary Permissions: &a{4}" + "\n" +
- "{PREFIX}&f- &3Prefixes: &a{5}" + "\n" +
- "{PREFIX}&f- &3Suffixes: &a{6}" + "\n" +
- "{PREFIX}&f- &3Meta: &a{7}",
+ "{PREFIX}&f- &3Nodes: &a{}" + "\n" +
+ "{PREFIX}&f- &3Permissions: &a{}" + "\n" +
+ "{PREFIX}&f- &3Prefixes: &a{}" + "\n" +
+ "{PREFIX}&f- &3Suffixes: &a{}" + "\n" +
+ "{PREFIX}&f- &3Meta: &a{}",
false
),
- GROUP_SET_WEIGHT("&aSet weight to &b{0}&a for group &b{1}&a.", true),
+ GROUP_SET_WEIGHT("&aSet weight to &b{}&a for group &b{}&a.", true),
TRACK_INFO(
- "{PREFIX}&b&l> &bShowing Track: &f{0}" + "\n" +
- "{PREFIX}&f- &7Path: &f{1}",
+ "{PREFIX}&b&l> &bShowing Track: &f{}" + "\n" +
+ "{PREFIX}&f- &7Path: &f{}",
false
),
- TRACK_CLEAR("&b{0}&a's groups track was cleared.", true),
- TRACK_APPEND_SUCCESS("&aGroup &b{0}&a was successfully appended to track &b{1}&a.", true),
- TRACK_INSERT_SUCCESS("&aGroup &b{0}&a was successfully inserted into track &b{1}&a at position &b{2}&a.", true),
- TRACK_INSERT_ERROR_NUMBER("Expected number but instead received: {0}", true),
- TRACK_INSERT_ERROR_INVALID_POS("Unable to insert at position {0}. Index out of bounds.", true),
- TRACK_REMOVE_SUCCESS("&aGroup &b{0}&a was successfully removed from track &b{1}&a.", true),
+ TRACK_CLEAR("&b{}&a's groups track was cleared.", true),
+ TRACK_APPEND_SUCCESS("&aGroup &b{}&a was appended to track &b{}&a.", true),
+ TRACK_INSERT_SUCCESS("&aGroup &b{}&a was inserted into track &b{}&a at position &b{}&a.", true),
+ TRACK_INSERT_ERROR_NUMBER("&cExpected number but instead received: {}", true),
+ TRACK_INSERT_ERROR_INVALID_POS("&cUnable to insert at position &4{}&c. &7(invalid position)", true),
+ TRACK_REMOVE_SUCCESS("&aGroup &b{}&a was removed from track &b{}&a.", true),
- LOG_LOAD_ERROR("The log could not be loaded.", true),
- LOG_INVALID_PAGE("Invalid page number.", true),
- LOG_INVALID_PAGE_RANGE("Invalid page number. Please enter a value between 1 and {0}.", true),
+ LOG_LOAD_ERROR("&cThe log could not be loaded.", true),
+ LOG_INVALID_PAGE("&cInvalid page number.", true),
+ LOG_INVALID_PAGE_RANGE("&cInvalid page number. Please enter a value between &41&c and &4{}&c.", true),
LOG_NO_ENTRIES("&bNo log entries to show.", true),
- LOG_ENTRY("&b#{0} -> &8(&7{1} ago&8) {2}", true),
+ LOG_ENTRY("&b#{} -> &8(&7{} ago&8) {}", true),
LOG_NOTIFY_CONSOLE("&cCannot toggle notifications for console.", true),
LOG_NOTIFY_TOGGLE_ON("&aEnabled&b logging output.", true),
LOG_NOTIFY_TOGGLE_OFF("&cDisabled&b logging output.", true),
- LOG_NOTIFY_ALREADY_ON("You are already receiving notifications.", true),
- LOG_NOTIFY_ALREADY_OFF("You aren't currently receiving notifications.", true),
- LOG_NOTIFY_UNKNOWN("State unknown. Expecting \"on\" or \"off\".", true),
+ LOG_NOTIFY_ALREADY_ON("&cYou are already receiving notifications.", true),
+ LOG_NOTIFY_ALREADY_OFF("&cYou aren't currently receiving notifications.", true),
+ LOG_NOTIFY_UNKNOWN("&cState unknown. Expecting \"on\" or \"off\".", true),
- LOG_SEARCH_HEADER("&aShowing recent actions for query &b{0} &a(page &f{1}&a of &f{2}&a)", true),
+ LOG_SEARCH_HEADER("&aShowing recent actions for query &b{} &a(page &f{}&a of &f{}&a)", true),
- LOG_RECENT_HEADER("&aShowing recent actions (page &f{0}&a of &f{1}&a)", true),
- LOG_RECENT_BY_HEADER("&aShowing recent actions by &b{0} &a(page &f{1}&a of &f{2}&a)", true),
+ LOG_RECENT_HEADER("&aShowing recent actions (page &f{}&a of &f{}&a)", true),
+ LOG_RECENT_BY_HEADER("&aShowing recent actions by &b{} &a(page &f{}&a of &f{}&a)", true),
- LOG_HISTORY_USER_HEADER("&aShowing history for user &b{0} &a(page &f{1}&a of &f{2}&a)", true),
- LOG_HISTORY_GROUP_HEADER("&aShowing history for group &b{0} &a(page &f{1}&a of &f{2}&a)", true),
- LOG_HISTORY_TRACK_HEADER("&aShowing history for track &b{0} &a(page &f{1}&a of &f{2}&a)", true),
+ LOG_HISTORY_USER_HEADER("&aShowing history for user &b{} &a(page &f{}&a of &f{}&a)", true),
+ LOG_HISTORY_GROUP_HEADER("&aShowing history for group &b{} &a(page &f{}&a of &f{}&a)", true),
+ LOG_HISTORY_TRACK_HEADER("&aShowing history for track &b{} &a(page &f{}&a of &f{}&a)", true),
- LOG_EXPORT_ALREADY_EXISTS("Error: File {0} already exists.", true),
- LOG_EXPORT_NOT_WRITABLE("Error: File {0} is not writable.", true),
- LOG_EXPORT_EMPTY("The log is empty and therefore cannot be exported.", true),
- LOG_EXPORT_FAILURE("An unexpected error occured whilst writing to the file.", true),
- LOG_EXPORT_SUCCESS("&aSuccessfully exported the log to &b{0}&a.", true),
+ LOG_EXPORT_ALREADY_EXISTS("&cError: File &4{}&c already exists.", true),
+ LOG_EXPORT_NOT_WRITABLE("&cError: File &4{}&c is not writable.", true),
+ LOG_EXPORT_EMPTY("&cThe log is empty and therefore cannot be exported.", true),
+ LOG_EXPORT_FAILURE("&cAn unexpected error occured whilst writing to the file.", true),
+ LOG_EXPORT_SUCCESS("&aSuccessfully exported the log to &b{}&a.", true),
- IMPORT_ALREADY_RUNNING("Another import process is already running. Please wait for it to finish and try again.", true),
- EXPORT_ALREADY_RUNNING("Another export process is already running. Please wait for it to finish and try again.", true),
- IMPORT_LOG_DOESNT_EXIST("Error: File {0} does not exist.", true),
- IMPORT_LOG_NOT_READABLE("Error: File {0} is not readable.", true),
- IMPORT_LOG_FAILURE("An unexpected error occured whilst reading from the log file.", true),
+ IMPORT_ALREADY_RUNNING("&cAnother import process is already running. Please wait for it to finish and try again.", true),
+ EXPORT_ALREADY_RUNNING("&cAnother export process is already running. Please wait for it to finish and try again.", true),
+ IMPORT_LOG_DOESNT_EXIST("&cError: File &4{}&c does not exist.", true),
+ IMPORT_LOG_NOT_READABLE("&cError: File &4{}&c is not readable.", true),
+ IMPORT_LOG_FAILURE("&cAn unexpected error occured whilst reading from the log file.", true),
- IMPORT_PROGRESS("&b(Import) &b-> &f{0}&f% complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferrors.", true),
- IMPORT_PROGRESS_SIN("&b(Import) &b-> &f{0}&f% complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferror.", true),
+ IMPORT_PROGRESS("&b(Import) &b-> &f{}&f% complete &7- &b{}&f/&b{} &foperations complete with &c{} &ferrors.", true),
+ IMPORT_PROGRESS_SIN("&b(Import) &b-> &f{}&f% complete &7- &b{}&f/&b{} &foperations complete with &c{} &ferror.", true),
IMPORT_START("&b(Import) &b-> &fStarting import process.", true),
- IMPORT_END_COMPLETE("&b(Import) &a&lCOMPLETED &7- took &b{0} &7seconds - &7No errors.", true),
- IMPORT_END_COMPLETE_ERR("&b(Import) &a&lCOMPLETED &7- took &b{0} &7seconds - &c{1} errors.", true),
- IMPORT_END_COMPLETE_ERR_SIN("&b(Import) &a&lCOMPLETED &7- took &b{0} &7seconds - &c{1} error.", true),
+ IMPORT_END_COMPLETE("&b(Import) &a&lCOMPLETED &7- took &b{} &7seconds - &7No errors.", true),
+ IMPORT_END_COMPLETE_ERR("&b(Import) &a&lCOMPLETED &7- took &b{} &7seconds - &c{} errors.", true),
+ IMPORT_END_COMPLETE_ERR_SIN("&b(Import) &a&lCOMPLETED &7- took &b{} &7seconds - &c{} error.", true),
IMPORT_END_ERROR_HEADER(
- "{PREFIX}&b(Import) &7------------> &fShowing Error #&b{0} &7<------------" + "\n" +
- "{PREFIX}&b(Import) &fWhilst executing: &3Command #{1}" + "\n" +
- "{PREFIX}&b(Import) &fCommand: &7{2}" + "\n" +
- "{PREFIX}&b(Import) &fType: &3{3}" + "\n" +
+ "{PREFIX}&b(Import) &7------------> &fShowing Error #&b{} &7<------------" + "\n" +
+ "{PREFIX}&b(Import) &fWhilst executing: &3Command #{}" + "\n" +
+ "{PREFIX}&b(Import) &fCommand: &7{}" + "\n" +
+ "{PREFIX}&b(Import) &fType: &3{}" + "\n" +
"{PREFIX}&b(Import) &fOutput:",
false
),
- IMPORT_END_ERROR_CONTENT("&b(Import) &b-> &c{0}", true),
+ IMPORT_END_ERROR_CONTENT("&b(Import) &b-> &c{}", true),
IMPORT_END_ERROR_FOOTER("&b(Import) &7<------------------------------------------>", true);
public static final Object SKIP_ELEMENT = new Object();
@@ -430,6 +441,12 @@ public enum Message {
private String message;
private boolean showPrefix;
+ Message(String message, boolean showPrefix) {
+ // rewrite hardcoded placeholders according to their position
+ this.message = TextUtils.rewritePlaceholders(message);
+ this.showPrefix = showPrefix;
+ }
+
public String asString(LocaleManager localeManager, Object... objects) {
String prefix = null;
if (localeManager != null) {
diff --git a/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java b/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java
index f1e3a3b7..a3def685 100644
--- a/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java
+++ b/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java
@@ -164,7 +164,7 @@ public class NodeFactory {
} else {
sb.append(type.getEntry(node).getValue());
}
- if (node.isTemporary()) {
+ if (set && node.isTemporary()) {
sb.append(" ").append(node.getExpiryUnixTime());
}
@@ -216,15 +216,10 @@ public class NodeFactory {
private static StringBuilder appendContextToCommand(StringBuilder sb, Node node) {
if (node.isServerSpecific()) {
- sb.append(" ").append(node.getServer().get());
-
- if (node.isWorldSpecific()) {
- sb.append(" ").append(node.getWorld().get());
- }
- } else {
- if (node.isWorldSpecific()) {
- sb.append(" world=").append(node.getWorld().get());
- }
+ sb.append(" server=").append(node.getServer().get());
+ }
+ if (node.isWorldSpecific()) {
+ sb.append(" world=").append(node.getWorld().get());
}
ContextSet contexts = node.getContexts();
diff --git a/common/src/main/java/me/lucko/luckperms/common/utils/TextUtils.java b/common/src/main/java/me/lucko/luckperms/common/utils/TextUtils.java
index c99831a5..1ddff0be 100644
--- a/common/src/main/java/me/lucko/luckperms/common/utils/TextUtils.java
+++ b/common/src/main/java/me/lucko/luckperms/common/utils/TextUtils.java
@@ -63,4 +63,12 @@ public class TextUtils {
return ComponentSerializers.LEGACY.serialize(component);
}
+ public static String rewritePlaceholders(String input) {
+ int i = 0;
+ while (input.contains("{}")) {
+ input = input.replaceFirst("\\{\\}", "{" + i++ + "}");
+ }
+ return input;
+ }
+
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java
index b0e76c09..41288697 100644
--- a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java
+++ b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java
@@ -174,7 +174,7 @@ public class VerboseListener {
* @return the url
* @see PasteUtils#paste(String, List)
*/
- public String uploadPasteData(boolean showTraces) {
+ public String uploadPasteData(boolean showTraces, boolean attachRaw) {
long now = System.currentTimeMillis();
String startDate = DATE_FORMAT.format(new Date(startTime));
String endDate = DATE_FORMAT.format(new Date(now));
@@ -216,7 +216,7 @@ public class VerboseListener {
}
prettyOutput.add("### Output")
- .add("Format: `` `` `` ``")
+ .add("Format: `` `` ``")
.add("")
.add("___")
.add("");
@@ -267,14 +267,23 @@ public class VerboseListener {
prettyOutput.add("");
}
- csvOutput.add(escapeCommas(c.getCheckTarget()) + "," + escapeCommas(c.getPermission()) + "," + c.getResult().name().toLowerCase());
+ if (attachRaw) {
+ csvOutput.add(escapeCommas(c.getCheckTarget()) + "," + escapeCommas(c.getPermission()) + "," + c.getResult().name().toLowerCase());
+ }
});
results.clear();
- List> content = ImmutableList.of(
- Maps.immutableEntry("luckperms-verbose.md", prettyOutput.build().stream().collect(Collectors.joining("\n"))),
- Maps.immutableEntry("raw-data.csv", csvOutput.build().stream().collect(Collectors.joining("\n")))
- );
+ List> content;
+ if (attachRaw) {
+ content = ImmutableList.of(
+ Maps.immutableEntry("luckperms-verbose.md", prettyOutput.build().stream().collect(Collectors.joining("\n"))),
+ Maps.immutableEntry("raw-data.csv", csvOutput.build().stream().collect(Collectors.joining("\n")))
+ );
+ } else {
+ content = ImmutableList.of(
+ Maps.immutableEntry("luckperms-verbose.md", prettyOutput.build().stream().collect(Collectors.joining("\n")))
+ );
+ }
return PasteUtils.paste("LuckPerms Verbose Checking Output", content);
}