HookManager.java
package dev.aura.bungeechat.api.hook;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.experimental.UtilityClass;
@UtilityClass
public class HookManager {
public static final int DEFAULT_PREFIX_PRIORITY = 100;
public static final int PERMISSION_PLUGIN_PREFIX_PRIORITY = 200;
public static final int ACCOUNT_PREFIX_PRIORITY = 300;
private static Map<String, BungeeChatHook> hooks = new LinkedHashMap<>();
public static void addHook(String name, BungeeChatHook hook) {
hooks.put(name, hook);
sortHooks();
}
public static BungeeChatHook removeHook(String name) {
BungeeChatHook out = hooks.remove(name);
sortHooks();
return out;
}
public String getPrefix(BungeeChatAccount account) {
Optional<String> out;
for (BungeeChatHook hook : hooks.values()) {
out = hook.getPrefix(account);
if (out.isPresent()) return out.get();
}
return "";
}
public String getSuffix(BungeeChatAccount account) {
Optional<String> out;
for (BungeeChatHook hook : hooks.values()) {
out = hook.getSuffix(account);
if (out.isPresent()) return out.get();
}
return "";
}
public String getFullName(BungeeChatAccount account) {
return getPrefix(account) + account.getName() + getSuffix(account);
}
public String getFullDisplayName(BungeeChatAccount account) {
return getPrefix(account) + account.getDisplayName() + getSuffix(account);
}
private static void sortHooks() {
hooks =
hooks.entrySet().stream()
.sorted(Collections.reverseOrder(Entry.comparingByValue()))
.collect(
Collectors.toMap(
Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
}
}