9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-23 08:59:27 +00:00

feat(bukkit): 添加 LuckPerms 支持

This commit is contained in:
jhqwqmc
2025-04-12 03:18:39 +08:00
parent b97fa1ee6a
commit 86f795e7a5
2 changed files with 20 additions and 27 deletions

View File

@@ -33,32 +33,26 @@ public class LuckPermsEventListeners {
RegisteredServiceProvider<LuckPerms> provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class); RegisteredServiceProvider<LuckPerms> provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class);
if (provider != null) { if (provider != null) {
this.luckPerms = provider.getProvider(); this.luckPerms = provider.getProvider();
this.registerEventListeners();
} else {
throw new IllegalStateException("Unable to hook into LuckPerms");
}
}
private void registerEventListeners() {
EventBus eventBus = this.luckPerms.getEventBus(); EventBus eventBus = this.luckPerms.getEventBus();
EventSubscription<UserDataRecalculateEvent> onUserPermissionChangeSubscription = this.subscriptions.add(eventBus.subscribe(this.plugin, UserDataRecalculateEvent.class, this::onUserPermissionChange));
eventBus.subscribe( this.subscriptions.add(eventBus.subscribe(this.plugin, GroupDataRecalculateEvent.class, this::onGroupPermissionChange));
plugin,
UserDataRecalculateEvent.class,
this::onUserPermissionChange
);
EventSubscription<GroupDataRecalculateEvent> onGroupPermissionChangeSubscription =
eventBus.subscribe(
plugin,
GroupDataRecalculateEvent.class,
this::onGroupPermissionChange
);
this.subscriptions.add(onUserPermissionChangeSubscription);
this.subscriptions.add(onGroupPermissionChangeSubscription);
} else luckPerms = null;
} }
public void unregisterListeners() { public void unregisterListeners() {
for (EventSubscription<?> subscription : this.subscriptions) { this.subscriptions.forEach(subscription -> {
try { try {
subscription.close(); subscription.close();
} catch (Exception e) { } catch (Exception e) {
this.plugin.getLogger().log(Level.WARNING, "Failed to close event subscription", e); this.plugin.getLogger().log(Level.WARNING, "Failed to close event subscription", e);
} }
} });
this.subscriptions.clear(); this.subscriptions.clear();
} }
@@ -70,14 +64,13 @@ public class LuckPermsEventListeners {
this.scheduler.asyncLater(() -> { this.scheduler.asyncLater(() -> {
String groupName = event.getGroup().getName(); String groupName = event.getGroup().getName();
Bukkit.getOnlinePlayers().forEach(player -> { Bukkit.getOnlinePlayers().forEach(player -> {
UUID playerUUID = player.getUniqueId(); UUID uuid = player.getUniqueId();
User onlineUser = this.luckPerms.getUserManager().getUser(playerUUID); User user = luckPerms.getUserManager().getUser(uuid);
if (onlineUser == null) return; if (user == null) return;
boolean isInGroup = onlineUser.getInheritedGroups(onlineUser.getQueryOptions()) boolean inGroup = user.getInheritedGroups(user.getQueryOptions()).stream()
.parallelStream()
.anyMatch(g -> g.getName().equals(groupName)); .anyMatch(g -> g.getName().equals(groupName));
if (isInGroup) { if (inGroup) {
this.consumer.accept(playerUUID, false); this.consumer.accept(uuid, false);
} }
}); });
}, 1L, TimeUnit.SECONDS); }, 1L, TimeUnit.SECONDS);

View File

@@ -46,12 +46,12 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
@Override @Override
public void delayedInit() { public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this, plugin.bootstrap());
if (this.plugin.isPluginEnabled("LuckPerms")) { if (this.plugin.isPluginEnabled("LuckPerms")) {
luckPermsEventListeners = new LuckPermsEventListeners( luckPermsEventListeners = new LuckPermsEventListeners(
plugin.bootstrap(), this::refreshEmojiSuggestions, plugin.scheduler() plugin.bootstrap(), this::refreshEmojiSuggestions, plugin.scheduler()
); );
} }
Bukkit.getPluginManager().registerEvents(this, plugin.bootstrap());
} }
@Override @Override
@@ -99,7 +99,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
} }
private void addEmojiSuggestions(Player player) { private void addEmojiSuggestions(Player player) {
List<String> hasPermissions = cachedEmojiSuggestions().parallelStream() List<String> hasPermissions = cachedEmojiSuggestions().stream()
.filter(keyword -> { .filter(keyword -> {
Emoji emoji = super.emojiMapper.get(keyword); Emoji emoji = super.emojiMapper.get(keyword);
if (emoji == null) return false; if (emoji == null) return false;