From a85a8e38f2e1ec7bfbd22a992f18742fc08d1e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=86=99=E6=81=A9?= <2383759126@qq.com> Date: Mon, 27 Jul 2026 23:24:00 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20WorldEdit=E4=BF=AE=E5=A4=8D=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=BC=82=E5=B8=B8=E5=AF=BC=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WorldEdit/WorldEdit/WorldEdit.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/WorldEdit/WorldEdit/WorldEdit.cs b/src/WorldEdit/WorldEdit/WorldEdit.cs index 54772ab22..7a62ef696 100644 --- a/src/WorldEdit/WorldEdit/WorldEdit.cs +++ b/src/WorldEdit/WorldEdit/WorldEdit.cs @@ -55,7 +55,7 @@ public class WorldEdit : TerrariaPlugin public override string Name => System.Reflection.Assembly.GetExecutingAssembly().GetName().Name!; - public override Version Version => new Version(2026, 07, 20); + public override Version Version => new Version(2026, 07, 21); static WorldEdit() { @@ -407,6 +407,8 @@ private void OnInitialize(EventArgs e) { HelpText = "Sets actuators in the worldedit selection." }); + try + { string text = TShock.Config.Settings.StorageType.ToLowerInvariant(); string storageType = text; if (storageType != "mysql") @@ -430,7 +432,10 @@ private void OnInitialize(EventArgs e) } if (!File.Exists(path)) { - Database.Query("DROP TABLE WorldEdit"); + if (Database != null) + { + Database.Query("DROP TABLE IF EXISTS WorldEdit"); + } foreach (string item in Directory.EnumerateFiles("worldedit", "undo-*.dat")) { File.Delete(item); @@ -478,6 +483,11 @@ private void OnInitialize(EventArgs e) Colors.Add(itemNameById.Substring(0, itemNameById.Length - 6).ToLowerInvariant(), paintItem.paint); } } + } + catch (Exception ex) + { + TShock.Log.ConsoleError($"WorldEdit initialization error (database/biomes/colors): {ex}"); + } Selections.Add("altcheckers", (int i, int j, TSPlayer plr) => ((i + j) & 1) == 0); Selections.Add("checkers", (int i, int j, TSPlayer plr) => ((i + j) & 1) == 1); Selections.Add("ellipse", delegate (int i, int j, TSPlayer plr) From df9f18687949a9bbe7654c8fcfcd9eff48e3b580 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=86=99=E6=81=A9?= <2383759126@qq.com> Date: Mon, 27 Jul 2026 23:46:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=BE=93=E5=85=A5/he?= =?UTF-8?q?lp=202=E4=BC=9A=E5=87=BA=E7=8E=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ItemDecoration/Plugin.cs | 36 ++++++++++++++++++++++-------------- src/ItemDecoration/README.md | 2 ++ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/ItemDecoration/Plugin.cs b/src/ItemDecoration/Plugin.cs index dcc944e61..e88ea3d1c 100644 --- a/src/ItemDecoration/Plugin.cs +++ b/src/ItemDecoration/Plugin.cs @@ -10,6 +10,7 @@ using Terraria.ID; using TerrariaApi.Server; using TShockAPI; +using TShockAPI.Hooks; namespace ItemDecoration; @@ -21,7 +22,7 @@ public class Plugin : LazyPlugin public override string Description => GetString("Show Item Decoration and More!!!"); public override string Name => Assembly.GetExecutingAssembly().GetName().Name!; - public override Version Version => new Version(3, 0, 1); + public override Version Version => new Version(3, 0, 2); public Plugin(Main game) : base(game) { @@ -30,23 +31,30 @@ public Plugin(Main game) : base(game) public override void Initialize() { - ServerApi.Hooks.ServerChat.Register(this, this.OnServerChat); + PlayerHooks.PlayerChat += this.OnPlayerChat; Hooks.MessageBuffer.InvokeGetData += this.MessageBuffer_InvokeGetData; } - - private void OnServerChat(ServerChatEventArgs args) + protected override void Dispose(bool disposing) { - var player = TShock.Players[args.Who]; - if (args.Handled || player == null - || args.Text.StartsWith(TShock.Config.Settings.CommandSilentSpecifier) - || args.Text.StartsWith(TShock.Config.Settings.CommandSpecifier) - || string.IsNullOrWhiteSpace(args.Text)) // Verificar si el texto está vacío o es solo espacios en blanco. + if (disposing) + { + PlayerHooks.PlayerChat -= this.OnPlayerChat; + Hooks.MessageBuffer.InvokeGetData -= this.MessageBuffer_InvokeGetData; + } + base.Dispose(disposing); + } + + + private void OnPlayerChat(PlayerChatEventArgs args) + { + var player = args.Player; + if (args.Handled || player == null || string.IsNullOrWhiteSpace(args.RawText)) { return; } - var msg = ReplacePlaceholderWithItem(player, args.Text); - if (!string.IsNullOrWhiteSpace(msg)) // Verificar que el mensaje procesado no esté vacío. + var msg = ReplacePlaceholderWithItem(player, args.RawText); + if (!string.IsNullOrWhiteSpace(msg)) { TShock.Utils.Broadcast(string.Format( TShock.Config.Settings.ChatFormat, @@ -116,8 +124,8 @@ private bool MessageBuffer_InvokeGetData(Hooks.MessageBuffer.orig_InvokeGetData { return orig(instance, ref packetId, ref readOffset, ref start, ref length, ref messageType, maxPackets); } - - + + if (!this._lastSelectedItem.ContainsKey(player.Index) || this._lastSelectedItem[player.Index] != newSelectItem.type) { this._lastSelectedItem[player.Index] = newSelectItem.type; @@ -165,7 +173,7 @@ private static string ReplacePlaceholderWithItem(TSPlayer player, string message { stringBuilder.Append(' '); } - + stringBuilder.Append($"[c/{damageColorHex}:{selectedItem.damage}]"); } } diff --git a/src/ItemDecoration/README.md b/src/ItemDecoration/README.md index a216608c0..601f928c1 100644 --- a/src/ItemDecoration/README.md +++ b/src/ItemDecoration/README.md @@ -110,6 +110,8 @@ ``` ## 更新日志 +### v3.0.2 +- 修复 `/help 2` 等带数字的指令会被误拦截的问题(ServerChat → PlayerChat) ### v1.0.0.1 - 完成西班牙语的i18n config配置,修复聊天不显示名字的问题 ### v1.0.0.0