|
3 | 3 | import io.github.miniplaceholders.api.Expansion; |
4 | 4 | import io.github.miniplaceholders.api.provider.ExpansionProvider; |
5 | 5 | import io.github.miniplaceholders.api.provider.LoadRequirement; |
6 | | -import io.github.miniplaceholders.api.utils.Tags; |
7 | | -import net.kyori.adventure.audience.Audience; |
8 | | -import net.kyori.adventure.identity.Identity; |
9 | | -import net.kyori.adventure.text.Component; |
10 | | -import net.kyori.adventure.text.format.NamedTextColor; |
11 | | -import net.kyori.adventure.text.minimessage.MiniMessage; |
12 | | -import net.kyori.adventure.text.minimessage.tag.Tag; |
13 | | -import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue; |
14 | | -import net.luckperms.api.LuckPerms; |
15 | | -import net.luckperms.api.LuckPermsProvider; |
16 | | -import net.luckperms.api.model.group.Group; |
17 | | -import net.luckperms.api.model.user.User; |
18 | | -import net.luckperms.api.query.QueryOptions; |
19 | | -import net.luckperms.api.util.Tristate; |
20 | | - |
21 | | -import java.util.Optional; |
22 | | -import java.util.UUID; |
23 | | - |
24 | | -import static io.github.miniplaceholders.api.utils.Components.FALSE_COMPONENT; |
25 | | -import static io.github.miniplaceholders.api.utils.Components.TRUE_COMPONENT; |
26 | | -import static io.github.miniplaceholders.api.utils.LegacyStrings.parsePossibleLegacy; |
27 | 6 |
|
28 | 7 | public final class LuckPermsExpansionProvider implements ExpansionProvider { |
29 | | - private static final Component UNDEFINED_COMPONENT = Component.text("undefined", NamedTextColor.GRAY); |
30 | | - |
31 | | - private User user(final Audience audience, final LuckPerms luckPerms) { |
32 | | - final UUID uuid = audience.get(Identity.UUID).orElse(null); |
33 | | - if (uuid == null) { |
34 | | - return null; |
35 | | - } |
36 | | - return luckPerms.getUserManager().getUser(uuid); |
37 | | - } |
38 | 8 |
|
39 | 9 | @Override |
40 | 10 | public Expansion provideExpansion() { |
41 | | - final LuckPerms luckPerms = LuckPermsProvider.get(); |
42 | | - return Expansion.builder("luckperms") |
43 | | - .author("MiniPlaceholders Contributors") |
44 | | - .version("2.0.0") |
45 | | - .audiencePlaceholder("prefix", (aud, queue, ctx) -> { |
46 | | - final User user = user(aud, luckPerms); |
47 | | - if (user == null) { |
48 | | - return null; |
49 | | - } |
50 | | - final String prefix = user.getCachedData().getMetaData().getPrefix(); |
51 | | - |
52 | | - if (parseString(queue)) { |
53 | | - return Tag.preProcessParsed(MiniMessage.miniMessage().serialize(parsePossibleLegacy(prefix, ctx))); |
54 | | - } else { |
55 | | - return Tag.inserting(parsePossibleLegacy(prefix, ctx)); |
56 | | - } |
57 | | - }) |
58 | | - .audiencePlaceholder("suffix", (aud, queue, ctx) -> { |
59 | | - final User user = user(aud, luckPerms); |
60 | | - if (user == null) { |
61 | | - return null; |
62 | | - } |
63 | | - final String suffix = user.getCachedData().getMetaData().getSuffix(); |
64 | | - |
65 | | - if (parseString(queue)) { |
66 | | - return Tag.preProcessParsed(MiniMessage.miniMessage().serialize(parsePossibleLegacy(suffix, ctx))); |
67 | | - } else { |
68 | | - return Tag.inserting(parsePossibleLegacy(suffix, ctx)); |
69 | | - } |
70 | | - }) |
71 | | - .audiencePlaceholder("meta", (aud, queue, ctx) -> { |
72 | | - final User user = user(aud, luckPerms); |
73 | | - if (user == null) { |
74 | | - return null; |
75 | | - } |
76 | | - final String meta = queue.popOr(() -> "you need to introduce a meta key").value(); |
77 | | - final Optional<QueryOptions> queryOptions = luckPerms.getContextManager().getQueryOptions(user); |
78 | | - if (queryOptions.isEmpty()) { |
79 | | - return null; |
80 | | - } |
81 | | - final String result = user.getCachedData().getMetaData(queryOptions.get()).getMetaValue(meta); |
82 | | - |
83 | | - if (parseString(queue)) { |
84 | | - return Tag.preProcessParsed(result != null ? result : ""); |
85 | | - } else { |
86 | | - if (result == null) { |
87 | | - return Tags.EMPTY_TAG; |
88 | | - } |
89 | | - return Tag.preProcessParsed(result); |
90 | | - } |
91 | | - }) |
92 | | - .audiencePlaceholder("has_permission", (aud, queue, ctx) -> { |
93 | | - final User user = user(aud, luckPerms); |
94 | | - if (user == null) { |
95 | | - return null; |
96 | | - } |
97 | | - final String permission = queue.popOr(() -> "you need to introduce an permission").value(); |
98 | | - final Tristate result = user.getCachedData().getPermissionData().checkPermission(permission); |
99 | | - final boolean hasPermission = result.asBoolean(); |
100 | | - |
101 | | - if (parseString(queue)) { |
102 | | - return Tag.preProcessParsed(hasPermission ? "true" : "false"); |
103 | | - } else { |
104 | | - return Tag.selfClosingInserting(hasPermission |
105 | | - ? TRUE_COMPONENT |
106 | | - : FALSE_COMPONENT |
107 | | - ); |
108 | | - } |
109 | | - }) |
110 | | - .audiencePlaceholder("check_permission", (aud, queue, ctx) -> { |
111 | | - final User user = user(aud, luckPerms); |
112 | | - if (user == null) { |
113 | | - return null; |
114 | | - } |
115 | | - final String permission = queue.popOr(() -> "you need to introduce an permission").value(); |
116 | | - final Tristate result = user.getCachedData().getPermissionData().checkPermission(permission); |
117 | | - |
118 | | - if (parseString(queue)) { |
119 | | - return Tag.preProcessParsed(switch (result) { |
120 | | - case TRUE -> "true"; |
121 | | - case FALSE -> "false"; |
122 | | - case UNDEFINED -> "undefined"; |
123 | | - }); |
124 | | - } else { |
125 | | - return Tag.selfClosingInserting(switch (result) { |
126 | | - case TRUE -> TRUE_COMPONENT; |
127 | | - case FALSE -> FALSE_COMPONENT; |
128 | | - case UNDEFINED -> UNDEFINED_COMPONENT; |
129 | | - }); |
130 | | - } |
131 | | - }) |
132 | | - .audiencePlaceholder("inherited_groups", (aud, queue, ctx) -> { |
133 | | - final User user = user(aud, luckPerms); |
134 | | - if (user == null) { |
135 | | - return null; |
136 | | - } |
137 | | - |
138 | | - if (parseString(queue)) { |
139 | | - final String groups = user.getInheritedGroups(user.getQueryOptions()).stream() |
140 | | - .map(group -> MiniMessage.miniMessage().serialize(parsePossibleLegacy(group.getDisplayName()))) |
141 | | - .reduce((a, b) -> a + ", " + b) |
142 | | - .orElse(""); |
143 | | - return Tag.preProcessParsed(groups); |
144 | | - } else { |
145 | | - final Component groups = user.getInheritedGroups(user.getQueryOptions()).stream() |
146 | | - .map(group -> parsePossibleLegacy(group.getDisplayName(), ctx)) |
147 | | - .collect(Component.toComponent(Component.text(", "))); |
148 | | - return Tag.selfClosingInserting(groups); |
149 | | - } |
150 | | - }) |
151 | | - .audiencePlaceholder("primary_group_name", (aud, queue, ctx) -> { |
152 | | - final User user = user(aud, luckPerms); |
153 | | - if (user == null) { |
154 | | - return null; |
155 | | - } |
156 | | - final String primaryGroup = user.getCachedData().getMetaData().getPrimaryGroup(); |
157 | | - |
158 | | - if (parseString(queue)) { |
159 | | - return Tag.preProcessParsed(primaryGroup != null ? primaryGroup : ""); |
160 | | - } else { |
161 | | - if (primaryGroup == null) { |
162 | | - return Tags.EMPTY_TAG; |
163 | | - } |
164 | | - return Tag.preProcessParsed(primaryGroup); |
165 | | - } |
166 | | - }) |
167 | | - .audiencePlaceholder("inherits_group", (aud, queue, ctx) -> { |
168 | | - final User user = user(aud, luckPerms); |
169 | | - if (user == null) { |
170 | | - return null; |
171 | | - } |
172 | | - final Group group = luckPerms.getGroupManager().getGroup(queue.popOr("you need to provide a group").value()); |
173 | | - final boolean inheritsGroup = group != null && user.getInheritedGroups(user.getQueryOptions()).contains(group); |
174 | | - |
175 | | - if (parseString(queue)) { |
176 | | - return Tag.preProcessParsed(inheritsGroup ? "true" : "false"); |
177 | | - } else { |
178 | | - return Tag.selfClosingInserting(inheritsGroup |
179 | | - ? TRUE_COMPONENT |
180 | | - : FALSE_COMPONENT |
181 | | - ); |
182 | | - } |
183 | | - }).build(); |
| 11 | + return LuckPermsExpansion.luckPerms(); |
184 | 12 | } |
185 | 13 |
|
186 | 14 | @Override |
187 | 15 | public LoadRequirement loadRequirement() { |
188 | 16 | return LoadRequirement.requiredComplement("luckperms", "LuckPerms"); |
189 | 17 | } |
190 | 18 |
|
191 | | - private boolean parseString(ArgumentQueue queue) { |
192 | | - return queue.hasNext() && queue.pop().lowerValue().equals("string"); |
193 | | - } |
194 | 19 | } |
0 commit comments