Skip to content

Commit ef67121

Browse files
committed
Extract LuckPermsHook
1 parent 27be209 commit ef67121

3 files changed

Lines changed: 72 additions & 51 deletions

File tree

chatformatter-core/src/main/java/com/eternalcode/formatter/ChatFormatterPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.eternalcode.formatter.config.ConfigManager;
44
import com.eternalcode.formatter.config.PluginConfig;
5+
import com.eternalcode.formatter.mention.LuckPermsHook;
56
import com.eternalcode.formatter.mention.MentionListener;
67
import com.eternalcode.formatter.mention.MentionPlayerSettings;
78
import com.eternalcode.formatter.mention.MentionService;
@@ -56,7 +57,7 @@ public ChatFormatterPlugin(Plugin plugin) {
5657
new Metrics(plugin, 15199);
5758

5859
this.chatHandler = new ChatHandlerImpl(miniMessage, pluginConfig, this.rankProvider, this.placeholderRegistry, this.templateService);
59-
MentionPlayerSettings mentionPlayerSettings = new MentionPlayerSettings(server, plugin.getLogger(), configManager.getPluginConfig().mentions);
60+
MentionPlayerSettings mentionPlayerSettings = new MentionPlayerSettings(plugin.getLogger(), configManager.getPluginConfig().mentions, LuckPermsHook.initialize(server, plugin.getLogger()));
6061

6162
server.getPluginCommand("chatformatter").setExecutor(new ChatFormatterCommand(configManager, audienceProvider, miniMessage, mentionPlayerSettings));
6263

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.eternalcode.formatter.mention;
2+
3+
import net.luckperms.api.LuckPerms;
4+
import net.luckperms.api.LuckPermsProvider;
5+
import net.luckperms.api.model.user.User;
6+
import net.luckperms.api.node.types.MetaNode;
7+
import org.bukkit.Server;
8+
9+
import java.util.Optional;
10+
import java.util.UUID;
11+
import java.util.logging.Logger;
12+
13+
public class LuckPermsHook {
14+
15+
private static final String MENTION_SOUND_META_KEY = "chatformatter-mention-sound";
16+
17+
private final LuckPerms luckPerms;
18+
19+
private LuckPermsHook(LuckPerms luckPerms) {
20+
this.luckPerms = luckPerms;
21+
}
22+
23+
public static Optional<LuckPermsHook> initialize(Server server, Logger logger) {
24+
if (!server.getPluginManager().isPluginEnabled("LuckPerms")) {
25+
return Optional.empty();
26+
}
27+
28+
try {
29+
return Optional.of(new LuckPermsHook(LuckPermsProvider.get()));
30+
} catch (IllegalStateException e) {
31+
logger.warning("Failed to initialize LuckPerms API: " + e.getMessage());
32+
return Optional.empty();
33+
}
34+
}
35+
36+
public Optional<Boolean> getMentionSoundEnabled(UUID uuid) {
37+
User user = this.luckPerms.getUserManager().getUser(uuid);
38+
if (user == null) {
39+
return Optional.empty();
40+
}
41+
42+
String metaValue = user.getCachedData().getMetaData().getMetaValue(MENTION_SOUND_META_KEY);
43+
if (metaValue == null) {
44+
return Optional.empty();
45+
}
46+
47+
return Optional.of(Boolean.parseBoolean(metaValue));
48+
}
49+
50+
public void setMentionSoundEnabled(UUID uuid, boolean enabled) {
51+
this.luckPerms.getUserManager().modifyUser(uuid, user -> {
52+
user.data().clear(node ->
53+
node instanceof MetaNode metaNode && metaNode.getMetaKey().equals(MENTION_SOUND_META_KEY)
54+
);
55+
56+
MetaNode metaNode = MetaNode.builder(MENTION_SOUND_META_KEY, Boolean.toString(enabled)).build();
57+
user.data().add(metaNode);
58+
});
59+
}
60+
}
61+

chatformatter-core/src/main/java/com/eternalcode/formatter/mention/MentionPlayerSettings.java

Lines changed: 9 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,34 @@
11
package com.eternalcode.formatter.mention;
22

3-
import net.luckperms.api.LuckPerms;
4-
import net.luckperms.api.LuckPermsProvider;
5-
import net.luckperms.api.model.user.User;
6-
import net.luckperms.api.node.types.MetaNode;
7-
import org.bukkit.Server;
8-
3+
import java.util.Optional;
94
import java.util.UUID;
105
import java.util.logging.Logger;
116

127
public class MentionPlayerSettings {
138

14-
private static final String MENTION_SOUND_META_KEY = "chatformatter-mention-sound";
15-
169
private final Logger logger;
1710
private final MentionConfig config;
18-
private final Server server;
19-
private LuckPerms luckPerms;
11+
private final Optional<LuckPermsHook> luckPermsHook;
2012

21-
public MentionPlayerSettings(Server server, Logger logger, MentionConfig config) {
22-
this.server = server;
13+
public MentionPlayerSettings(Logger logger, MentionConfig config, Optional<LuckPermsHook> luckPermsHook) {
2314
this.logger = logger;
2415
this.config = config;
25-
this.initializeLuckPerms();
26-
}
27-
28-
private void initializeLuckPerms() {
29-
if (!this.server.getPluginManager().isPluginEnabled("LuckPerms")) {
30-
this.logger.warning("LuckPerms is not installed! Mention sound toggle feature will not work.");
31-
return;
32-
}
33-
34-
try {
35-
this.luckPerms = LuckPermsProvider.get();
36-
} catch (IllegalStateException e) {
37-
this.logger.warning("Failed to initialize LuckPerms API: " + e.getMessage());
38-
}
16+
this.luckPermsHook = luckPermsHook;
3917
}
4018

4119
public boolean isMentionSoundEnabled(UUID uuid) {
42-
if (this.luckPerms == null) {
43-
return this.config.enabled;
44-
}
45-
46-
User user = this.luckPerms.getUserManager().getUser(uuid);
47-
if (user == null) {
48-
return this.config.enabled;
49-
}
50-
51-
String metaValue = user.getCachedData().getMetaData().getMetaValue(MENTION_SOUND_META_KEY);
52-
if (metaValue == null) {
53-
return this.config.enabled;
54-
}
55-
56-
return Boolean.parseBoolean(metaValue);
20+
return this.luckPermsHook
21+
.flatMap(hook -> hook.getMentionSoundEnabled(uuid))
22+
.orElse(this.config.enabled);
5723
}
5824

5925
public void setMentionSoundEnabled(UUID uuid, boolean enabled) {
60-
if (this.luckPerms == null) {
26+
if (this.luckPermsHook.isEmpty()) {
6127
this.logger.warning("Cannot set mention sound preference - LuckPerms is not available!");
6228
return;
6329
}
6430

65-
this.luckPerms.getUserManager().modifyUser(uuid, user -> {
66-
user.data().clear(node ->
67-
node instanceof MetaNode metaNode && metaNode.getMetaKey().equals(MENTION_SOUND_META_KEY)
68-
);
69-
70-
MetaNode metaNode = MetaNode.builder(MENTION_SOUND_META_KEY, Boolean.toString(enabled)).build();
71-
user.data().add(metaNode);
72-
});
31+
this.luckPermsHook.get().setMentionSoundEnabled(uuid, enabled);
7332
}
7433

7534
public boolean toggleMentionSound(UUID uuid) {

0 commit comments

Comments
 (0)