From 1b275388b3eff7bc2063f584c57b7736e4893932 Mon Sep 17 00:00:00 2001 From: Alessandro Proto Date: Mon, 16 Dec 2024 14:01:30 +0100 Subject: [PATCH] Patch 1.1.3 --- .github/workflows/publish.yml | 4 +- CHANGELOG.md | 5 ++ build.gradle | 2 + gradle.properties | 2 +- .../java/me/alexdevs/solstice/Solstice.java | 5 ++ .../integrations/LuckPermsIntegration.java | 53 +++++++++++++++++++ .../modules/customname/CustomNameModule.java | 28 ++++++++-- .../customname/data/CustomNameConfig.java | 4 +- 8 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ec66d5f..1469406 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -5,8 +5,8 @@ on: [ workflow_dispatch ] env: MINECRAFT_VERSION: 1.21.1 JAVA_VERSION: 21 - VERSION: 1.1.2+1.21.1 - RELEASE_NAME: Solstice 1.1.2 for Minecraft 1.21.1 + VERSION: 1.1.3+1.21.1 + RELEASE_NAME: Solstice 1.1.3 for Minecraft 1.21.1 MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }} MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} diff --git a/CHANGELOG.md b/CHANGELOG.md index fa7c3d6..f770656 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 1.1.3 + +- Added `${prefix}` and `${suffix}` as name format placeholders pre-processed. +- Changing LuckPerms prefix and suffix no longer requires reloading. + # 1.1.2 - Bugfix misconfigured permission node for `/warp`. diff --git a/build.gradle b/build.gradle index 416c4fe..0e55e3e 100644 --- a/build.gradle +++ b/build.gradle @@ -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 { diff --git a/gradle.properties b/gradle.properties index 790d131..969dc95 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.21.1+build.3 loader_version=0.16.9 # Mod Properties -mod_version=1.1.2+1.21.1 +mod_version=1.1.3+1.21.1 maven_group=me.alexdevs archives_base_name=solstice diff --git a/src/main/java/me/alexdevs/solstice/Solstice.java b/src/main/java/me/alexdevs/solstice/Solstice.java index 6bb9a22..0f9d2d3 100644 --- a/src/main/java/me/alexdevs/solstice/Solstice.java +++ b/src/main/java/me/alexdevs/solstice/Solstice.java @@ -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; @@ -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); diff --git a/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java b/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java new file mode 100644 index 0000000..1629002 --- /dev/null +++ b/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java @@ -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(); + } + } +} diff --git a/src/main/java/me/alexdevs/solstice/modules/customname/CustomNameModule.java b/src/main/java/me/alexdevs/solstice/modules/customname/CustomNameModule.java index ca70752..1e72665 100644 --- a/src/main/java/me/alexdevs/solstice/modules/customname/CustomNameModule.java +++ b/src/main/java/me/alexdevs/solstice/modules/customname/CustomNameModule.java @@ -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; @@ -88,14 +90,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 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) { diff --git a/src/main/java/me/alexdevs/solstice/modules/customname/data/CustomNameConfig.java b/src/main/java/me/alexdevs/solstice/modules/customname/data/CustomNameConfig.java index e22b791..d1d556b 100644 --- a/src/main/java/me/alexdevs/solstice/modules/customname/data/CustomNameConfig.java +++ b/src/main/java/me/alexdevs/solstice/modules/customname/data/CustomNameConfig.java @@ -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 nameFormats = new ArrayList<>(List.of( - new NameFormat("admin", "${name}"), - new NameFormat("default", "${name}") + new NameFormat("admin", "${prefix}${name}${suffix}"), + new NameFormat("default", "${prefix}${name}${suffix}") )); }