Skip to content

Commit

Permalink
Add LP prefix and suffix as pre-process placeholders in name formats
Browse files Browse the repository at this point in the history
  • Loading branch information
Ale32bit committed Dec 16, 2024
1 parent 9ca180c commit 79614e5
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 6 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ dependencies {
include modImplementation("eu.pb4:placeholder-api:${project.placeholderapi_version}")
include modImplementation("eu.pb4:sgui:${project.sgui_version}")

modCompileOnly "net.luckperms:api:5.4"

}

processResources {
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/me/alexdevs/solstice/Solstice.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import me.alexdevs.solstice.api.events.WorldSave;
import me.alexdevs.solstice.data.PlayerDataManager;
import me.alexdevs.solstice.data.ServerData;
import me.alexdevs.solstice.integrations.LuckPermsIntegration;
import me.alexdevs.solstice.locale.LocaleManager;
import me.alexdevs.solstice.modules.Modules;
import me.alexdevs.solstice.util.data.HoconDataManager;
Expand Down Expand Up @@ -83,6 +84,10 @@ public void onInitialize() {
return;
}

if(FabricLoader.getInstance().isModLoaded("luckperms")) {
LuckPermsIntegration.register();
}

ServerLifecycleEvents.SERVER_STARTING.register(server -> {
Solstice.server = server;
var path = server.getSavePath(WorldSavePath.ROOT).resolve("data").resolve(MOD_ID);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package me.alexdevs.solstice.integrations;

import me.alexdevs.solstice.Solstice;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.loader.api.FabricLoader;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
import net.minecraft.server.network.ServerPlayerEntity;
import org.jetbrains.annotations.Nullable;

public class LuckPermsIntegration {

private static LuckPerms luckPerms;
private static boolean available = false;

public static void register() {

var container = FabricLoader.getInstance().getModContainer(Solstice.MOD_ID).get();

ServerLifecycleEvents.SERVER_STARTED.register(server -> {
luckPerms = LuckPermsProvider.get();
available = true;
var eventBus = luckPerms.getEventBus();

eventBus.subscribe(container, UserDataRecalculateEvent.class, Listeners::onDataRecalculate);
});

}

public static @Nullable String getPrefix(ServerPlayerEntity player) {
if(!available) {
return null;
}
var playerMeta = luckPerms.getPlayerAdapter(ServerPlayerEntity.class).getMetaData(player);
return playerMeta.getPrefix();
}

public static @Nullable String getSuffix(ServerPlayerEntity player) {
if(!available) {
return null;
}
var playerMeta = luckPerms.getPlayerAdapter(ServerPlayerEntity.class).getMetaData(player);
return playerMeta.getSuffix();
}

public static class Listeners {

public static void onDataRecalculate(UserDataRecalculateEvent event) {
Solstice.modules.customName.refreshNames();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package me.alexdevs.solstice.modules.customname;

import eu.pb4.placeholders.api.PlaceholderContext;
import eu.pb4.placeholders.api.Placeholders;
import eu.pb4.placeholders.api.TextParserUtils;
import me.alexdevs.solstice.Solstice;
import me.alexdevs.solstice.integrations.LuckPermsIntegration;
import me.alexdevs.solstice.modules.customname.commands.NicknameCommand;
import me.alexdevs.solstice.modules.customname.data.CustomNameConfig;
import me.alexdevs.solstice.modules.customname.data.CustomNamePlayerData;
Expand Down Expand Up @@ -85,14 +87,32 @@ public MutableText getNameForPlayer(ServerPlayerEntity player) {

var playerData = Solstice.playerData.get(player).getData(CustomNamePlayerData.class);

var name = playerData.nickname == null ? Text.of(player.getGameProfile().getName()) : TextParserUtils.formatText(playerData.nickname);
var name = playerData.nickname == null ? player.getGameProfile().getName() : playerData.nickname;

var placeholders = Map.of(
"name", name
var prefix = LuckPermsIntegration.getPrefix(player);
var suffix = LuckPermsIntegration.getSuffix(player);
if(prefix == null)
prefix = "";
if(suffix == null)
suffix = "";

Map<String, String> placeholders = Map.of(
"name", name,
"prefix", prefix,
"suffix", suffix
);

var pattern = Format.PLACEHOLDER_PATTERN;
var output = format;
var matcher = pattern.matcher(format);
while(matcher.find()) {
var chunk = matcher.group();
var key = matcher.group("id");
output = output.replace(chunk, placeholders.getOrDefault(key, ""));
}

var playerContext = PlaceholderContext.of(player);
return Format.parse(format, playerContext, placeholders).copy();
return Format.parse(output, playerContext).copy();
}

public void setCustomName(ServerPlayerEntity player, String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public record NameFormat(String group, String format) {

@Comment("Customize player display names based on their LuckPerms group. Priority is determined by the list order: first comes before last.")
public ArrayList<NameFormat> nameFormats = new ArrayList<>(List.of(
new NameFormat("admin", "<red>${name}</red>"),
new NameFormat("default", "<green>${name}</green>")
new NameFormat("admin", "${prefix}<red>${name}</red>${suffix}"),
new NameFormat("default", "${prefix}<green>${name}</green>${suffix}")
));
}

0 comments on commit 79614e5

Please sign in to comment.