From ff6e231035dd941df8f4615dac36fcfb3a1f5e28 Mon Sep 17 00:00:00 2001 From: moddedmcplayer <76910334+moddedmcplayer@users.noreply.github.com> Date: Sun, 1 Feb 2026 18:27:21 +0100 Subject: [PATCH] new default provider --- .../Display/NickEventXPDisplayProvider.cs | 62 +++++++++++++++++++ .../Patch/NickPatchXPDisplayProvider.cs | 2 +- XPSystem/Main.cs | 6 +- XPSystem/XPSystem.csproj | 1 + 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 XPSystem/BuiltInProviders/Display/NickEventXPDisplayProvider.cs diff --git a/XPSystem/BuiltInProviders/Display/NickEventXPDisplayProvider.cs b/XPSystem/BuiltInProviders/Display/NickEventXPDisplayProvider.cs new file mode 100644 index 0000000..4570c80 --- /dev/null +++ b/XPSystem/BuiltInProviders/Display/NickEventXPDisplayProvider.cs @@ -0,0 +1,62 @@ +namespace XPSystem.BuiltInProviders.Display +{ + using System.Collections.Generic; + using System.ComponentModel; + using LabApi.Events.Arguments.PlayerEvents; + using XPSystem.API; + using XPSystem.API.Player; + using XPSystem.API.StorageProviders; + + public class NickEventXPDisplayProvider : XPDisplayProvider + { + private Dictionary DisplayNameOverrides { get; } = new(); + + public override void Enable() + { + base.Enable(); + LabApi.Events.Handlers.PlayerEvents.ChangingNickname += OnChangingNickname; + } + + public override void Disable() + { + base.Disable(); + LabApi.Events.Handlers.PlayerEvents.ChangingNickname -= OnChangingNickname; + } + + protected override void RefreshOfEnabled(BaseXPPlayer player, PlayerInfoWrapper? playerInfo) => Refresh(player); + protected override void RefreshOfDisabled(BaseXPPlayer player) => Refresh(player); + private void Refresh(BaseXPPlayer player) + { + if (player is not XPPlayer) + return; + + player.Hub.nicknameSync.DisplayName = player.Nickname; + } + + private void OnChangingNickname(PlayerChangingNicknameEventArgs ev) + { + if (!Config.Enabled) + return; + + if (!XPPlayer.TryGetXP(ev.Player.ReferenceHub, out XPPlayer? player)) + return; + + string name = Config.UseEvNewNick ? (ev.NewNickname ?? player.Nickname) : player.Nickname; + ev.NewNickname = Config.NickStructure + .Replace("%lvl%", XPAPI.GetPlayerInfo(player).Level.ToString()) + .Replace("%name%", name); + } + + public class NickConfig : IXPDisplayProviderConfig + { + [Description("Enable nick modifications?")] + public bool Enabled { get; set; } = true; + + [Description("Use the NewNickname of the EventArgs instead of MyNick for %name%.")] + public bool UseEvNewNick { get; set; } = true; + + [Description("The structure of the player nick. Variables: %lvl% - the level. %name% - the players nickname/name")] + public string NickStructure { get; set; } = "LVL %lvl% | %name%"; + } + } +} \ No newline at end of file diff --git a/XPSystem/BuiltInProviders/Display/Patch/NickPatchXPDisplayProvider.cs b/XPSystem/BuiltInProviders/Display/Patch/NickPatchXPDisplayProvider.cs index 0439ba3..92d3d0a 100644 --- a/XPSystem/BuiltInProviders/Display/Patch/NickPatchXPDisplayProvider.cs +++ b/XPSystem/BuiltInProviders/Display/Patch/NickPatchXPDisplayProvider.cs @@ -9,7 +9,7 @@ public class NickPatchXPDisplayProvider : XPDisplayProvider { - public Dictionary DisplayNameOverrides { get; } = new(); + private Dictionary DisplayNameOverrides { get; } = new(); protected override void RefreshOfEnabled(BaseXPPlayer player, PlayerInfoWrapper? playerInfo) => Refresh(player); protected override void RefreshOfDisabled(BaseXPPlayer player) => Refresh(player); diff --git a/XPSystem/Main.cs b/XPSystem/Main.cs index 3744372..77d6bee 100644 --- a/XPSystem/Main.cs +++ b/XPSystem/Main.cs @@ -9,7 +9,7 @@ using XPSystem.API; using XPSystem.API.Legacy; using XPSystem.API.StorageProviders; - using XPSystem.BuiltInProviders.Display.Patch; + using XPSystem.BuiltInProviders.Display; using XPSystem.Commands.Client; using XPSystem.Config; using XPSystem.Config.Events; @@ -25,7 +25,7 @@ public class Main : LabApi.Loader.Features.Plugins.Plugin #endif { - public const string VersionString = "2.1.1"; + public const string VersionString = "2.1.2"; /// /// This number is increased every time the plugin is reloaded. @@ -80,7 +80,7 @@ public override void Enable() Harmony = new Harmony($"XPSystem - {DateTime.Now.Ticks}"); Harmony.PatchAll(); - DisplayProviders.Add(new NickPatchXPDisplayProvider()); + DisplayProviders.Add(new NickEventXPDisplayProvider()); DisplayProviders.Add(new RankXPDisplayProvider()); MessagingProvider = MessagingProviders.Get(Config.DisplayMode); XPECLimitTracker.Initialize(); diff --git a/XPSystem/XPSystem.csproj b/XPSystem/XPSystem.csproj index ed2883f..dbd03b8 100644 --- a/XPSystem/XPSystem.csproj +++ b/XPSystem/XPSystem.csproj @@ -205,6 +205,7 @@ +