Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions docs/modules/styling.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,18 @@ These options can be configured in the `styling` section of the config file.

![Chat message](../assets/text_formatting/chat.webp)

!!! config "enable-nameplate-formatting"

Enable nameplate formatting. Default: `true`.

Clients need to reconnect to apply changes.

!!! config "nameplate-formats"

Scoreboard nameplate format per LuckPerms group. Controls the prefix and suffix displayed above players' heads.

Clients need to reconnect to apply changes.

```hocon
nameplate-formats {
default {
Expand All @@ -120,11 +128,7 @@ These options can be configured in the `styling` section of the config file.

!!! warning

Nameplate placeholders are not refreshed frequently. Avoid placeholders that change often.

!!! config "do-color-nameplate"

Whether to color the username part in the scoreboard nameplate. Default: `true`.
Nameplate placeholders are calculated on player login. Avoid placeholders that change often.

!!! config "emote-format"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@
import me.alexdevs.solstice.api.module.ModuleBase;
import me.alexdevs.solstice.api.text.Format;
import me.alexdevs.solstice.api.utils.PlayerUtils;
import me.alexdevs.solstice.api.utils.SolsticeIdentifier;
import me.alexdevs.solstice.integrations.LuckPermsIntegration;
import me.alexdevs.solstice.modules.styling.data.StylingConfig;
import me.lucko.fabric.api.permissions.v0.Permissions;

import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import me.alexdevs.solstice.api.utils.SolsticeIdentifier;
import net.minecraft.server.ServerScoreboard;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.players.PlayerList;
import net.minecraft.world.scores.PlayerTeam;

import java.util.Locale;
import java.util.Optional;

public class StylingModule extends ModuleBase.Toggleable {
public static final String ADVANCED_CHAT_FORMATTING_PERMISSION = "solstice.chat.advanced";
Expand Down Expand Up @@ -48,13 +48,6 @@ public void init() {
});

SolsticeEvents.READY.register((instance, server) -> {
var config = getConfig();
if (config.chatFormat != null) {
config.chatFormats.put("default", config.chatFormat);
config.chatFormat = null;
Solstice.configManager.save();
}

// Cleanup
var scoreboard = server.getScoreboard();
for (var team : scoreboard.getPlayerTeams()) {
Expand All @@ -66,14 +59,15 @@ public void init() {

ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
var player = handler.getPlayer();
if (player.getTeam() == null) {
var config = getConfig();
if (player.getTeam() == null && config.enableNameplateFormatting) {
ServerScoreboard scoreboard = server.getScoreboard();
var username = PlayerUtils.getName(player.getGameProfile());
PlayerTeam team = scoreboard.addPlayerTeam("sol_" + username);
team.setDisplayName(player.getDisplayName());
//? if >= 26.1
//? if >=26.1
//team.setColor(java.util.Optional.ofNullable(this.getNameplateColor(player)).map(c -> net.minecraft.world.scores.TeamColor.valueOf(c.name())));
//? if < 26.1
//? if <26.1
team.setColor(this.getNameplateColor(player));
team.setPlayerPrefix(this.getNameplatePrefix(player));
team.setPlayerSuffix(this.getNameplateSuffix(player));
Expand Down Expand Up @@ -126,6 +120,11 @@ public void broadcastActivity(PlayerList playerList, Component component, boolea

public ChatFormatting getNameplateColor(ServerPlayer player) {
var config = this.getConfig();

if (!config.enableNameplateFormatting) {
return ChatFormatting.WHITE;
}

var primaryGroup = LuckPermsIntegration.getPrimaryGroup(player);
var color = "WHITE";
if (config.nameplateFormats.containsKey(primaryGroup)) {
Expand All @@ -134,14 +133,33 @@ public ChatFormatting getNameplateColor(ServerPlayer player) {
color = config.nameplateFormats.getOrDefault("default", DEFAULT_NAMEPLATE).color();
}

//? if >= 26.1
//return ChatFormatting.valueOf(color.toUpperCase(Locale.ROOT));
//? if < 26.1
return ChatFormatting.getByName(color);
var parsedColor = parseFormattingColor(color);

if (parsedColor.isEmpty()) {
Solstice.LOGGER.error("Invalid nameplate color: {}", color);
}

return parsedColor.orElse(ChatFormatting.WHITE);
}

private static Optional<ChatFormatting> parseFormattingColor(String color) {
try {
//? if >=26.1
//return Optional.of(ChatFormatting.valueOf(color.toUpperCase(Locale.ROOT)));
//? if <26.1
return Optional.ofNullable(ChatFormatting.getByName(color));
} catch (IllegalArgumentException e) {
return Optional.empty();
}
}

public Component getNameplatePrefix(ServerPlayer player) {
var config = getConfig();

if (!config.enableNameplateFormatting) {
return Component.empty();
}

var primaryGroup = LuckPermsIntegration.getPrimaryGroup(player);
var format = "";
if (config.nameplateFormats.containsKey(primaryGroup)) {
Expand All @@ -155,6 +173,11 @@ public Component getNameplatePrefix(ServerPlayer player) {

public Component getNameplateSuffix(ServerPlayer player) {
var config = getConfig();

if (!config.enableNameplateFormatting) {
return Component.empty();
}

var primaryGroup = LuckPermsIntegration.getPrimaryGroup(player);
var format = "";
if (config.nameplateFormats.containsKey(primaryGroup)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,14 @@ public class StylingConfig {
@Comment("Goal advancement format.")
public String advancementGoal = "<aqua>\uD83C\uDF96</aqua> %player:displayname% <gray>completed the goal</gray> <hover:'${description}'><aqua>${title}</aqua></hover>";

@Comment("!! This setting is deprecated. Use chat-formats instead. !!")
@Deprecated
public @Nullable String chatFormat = null;

@Comment("Chat format per group. group = format")
public Map<String, String> chatFormats = Map.of(
"default", "%player:displayname%<gray>:</gray> ${message}"
);

@Comment("Enable nameplate customizations.")
public boolean enableNameplateFormatting = true;

@Comment("Nameplate formatting per group. group = format.\nPlaceholders here are not refreshed often.")
public Map<String, NameplateFormat> nameplateFormats = Map.of(
"default", new NameplateFormat("", "", "green")
Expand Down
Loading