From f64b87eac9f6e2ca62c45769161ed923cfd07fa1 Mon Sep 17 00:00:00 2001 From: hufang360 Date: Sat, 22 Aug 2026 12:12:02 +0800 Subject: [PATCH 1/4] Bump OTAPI to 3.3.12 for Terraria 1.4.5.7 support --- TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs | 4 ++-- TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs | 5 ++++- TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs | 6 ++++-- TerrariaServerAPI/TerrariaServerAPI.csproj | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs index a638047..0bb7715 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs @@ -38,7 +38,7 @@ static void OnUpdateConnectedClients(object? sender, HookEvents.Terraria.Netplay args.OriginalMethod(); if (ServerApi.ForceUpdate) { - Terraria.Netplay.HasClients = true; + Terraria.Netplay.HasFullyConnectedClients = true; } } @@ -192,7 +192,7 @@ static void OnConnectionAccepted(object? sender, HookEvents.Terraria.Netplay.OnC } if (FindNextOpenClientSlot() == -1) { - Netplay.StopListening(); + Netplay.TcpListener?.StopListening(); } } diff --git a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs index 1e248a0..1a93df7 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs @@ -52,7 +52,10 @@ static void OnStrike(NPC npc, HookEvents.Terraria.NPC.StrikeNPCEventArgs args) if (!args.ContinueExecution) return; if (args.entity is Player player) { - if (_hookManager.InvokeNpcStrike(npc, ref args.Damage, ref args.knockBack, ref args.hitDirection, ref args.crit, ref args.noEffect, ref args.fromNet, player)) + // 1.4.5.7 removed the noEffect parameter from NPC.StrikeNPC, so it is + // not part of the OTAPI hook args anymore; keep the internal API intact. + bool noEffect = false; + if (_hookManager.InvokeNpcStrike(npc, ref args.Damage, ref args.knockBack, ref args.hitDirection, ref args.crit, ref noEffect, ref args.fromNet, player)) { args.ContinueExecution = false; args.HookReturnValue = 0; diff --git a/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs b/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs index 079d7ac..b45e1f8 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs @@ -159,8 +159,10 @@ public enum PacketTypes RequestSection = 159, SyncItemPosition = 160, HostToken = 161, - - // Mobile version packets + // 1.4.5.7: 162 is the NPC strike acknowledgement (DamageNPCAck). + // The old mobile-only aliases are kept as same-value members for API compatibility, + // matching how OTAPI retains deprecated members for older plugins. + DamageNPCAck = 162, ServerInfo = 162, PlayerPlatformInfo = 163 } diff --git a/TerrariaServerAPI/TerrariaServerAPI.csproj b/TerrariaServerAPI/TerrariaServerAPI.csproj index 61005da..6638c32 100644 --- a/TerrariaServerAPI/TerrariaServerAPI.csproj +++ b/TerrariaServerAPI/TerrariaServerAPI.csproj @@ -23,6 +23,6 @@ - + From 5acdf8845f57772e7f7ebb269895c3427a04fe83 Mon Sep 17 00:00:00 2001 From: bulkinglb <72748386+bulkinglb@users.noreply.github.com> Date: Sat, 22 Aug 2026 16:49:54 +0200 Subject: [PATCH 2/4] chore: bump OTAPI to 3.3.14 3.3.13 restored the NPC create fallback internally, so the OnCreate workaround this branch added is no longer needed. 3.3.14 targets Terraria 1.4.5.8 (protocol 326). --- TerrariaServerAPI/TerrariaServerAPI.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TerrariaServerAPI/TerrariaServerAPI.csproj b/TerrariaServerAPI/TerrariaServerAPI.csproj index 6638c32..fef687d 100644 --- a/TerrariaServerAPI/TerrariaServerAPI.csproj +++ b/TerrariaServerAPI/TerrariaServerAPI.csproj @@ -23,6 +23,6 @@ - + From 7d3596c0cfae939d0319d3adbbb6bf7032417ac7 Mon Sep 17 00:00:00 2001 From: bulkinglb <72748386+bulkinglb@users.noreply.github.com> Date: Mon, 24 Aug 2026 10:55:49 +0200 Subject: [PATCH 3/4] fix: move the mobile packet ids to the end of the enum --- TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs b/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs index b45e1f8..f1fc13c 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/PacketTypes.cs @@ -159,10 +159,7 @@ public enum PacketTypes RequestSection = 159, SyncItemPosition = 160, HostToken = 161, - // 1.4.5.7: 162 is the NPC strike acknowledgement (DamageNPCAck). - // The old mobile-only aliases are kept as same-value members for API compatibility, - // matching how OTAPI retains deprecated members for older plugins. DamageNPCAck = 162, - ServerInfo = 162, - PlayerPlatformInfo = 163 + ServerInfo = 163, + PlayerPlatformInfo = 164 } From e6f3b40a2cb0d1f3dcc2acbfd1ebff815bade9ce Mon Sep 17 00:00:00 2001 From: bulkinglb <72748386+bulkinglb@users.noreply.github.com> Date: Mon, 24 Aug 2026 10:55:49 +0200 Subject: [PATCH 4/4] refactor: deprecate NoEffect on NpcStrikeEventArgs --- .../TerrariaApi.Server/EventArgs/NpcStrikeEventArgs.cs | 1 + TerrariaServerAPI/TerrariaApi.Server/HookManager.cs | 4 +--- TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs | 5 +---- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/TerrariaServerAPI/TerrariaApi.Server/EventArgs/NpcStrikeEventArgs.cs b/TerrariaServerAPI/TerrariaApi.Server/EventArgs/NpcStrikeEventArgs.cs index 5bff008..71a21f1 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/EventArgs/NpcStrikeEventArgs.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/EventArgs/NpcStrikeEventArgs.cs @@ -36,6 +36,7 @@ public bool Critical get; set; } + [Obsolete("NPC.StrikeNPC does not supply this value; it is always false and is ignored.")] public bool NoEffect { get; diff --git a/TerrariaServerAPI/TerrariaApi.Server/HookManager.cs b/TerrariaServerAPI/TerrariaApi.Server/HookManager.cs index 6cb1985..dd0b5f1 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/HookManager.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/HookManager.cs @@ -678,7 +678,7 @@ public HandlerCollection NpcStrike } internal bool InvokeNpcStrike( - NPC npc, ref int damage, ref float knockback, ref int hitDirection, ref bool crit, ref bool noEffect, + NPC npc, ref int damage, ref float knockback, ref int hitDirection, ref bool crit, ref bool fromNet, Player player) { NpcStrikeEventArgs args = new NpcStrikeEventArgs @@ -688,7 +688,6 @@ internal bool InvokeNpcStrike( KnockBack = knockback, HitDirection = hitDirection, Critical = crit, - NoEffect = noEffect, FromNet = fromNet, Player = player }; @@ -699,7 +698,6 @@ internal bool InvokeNpcStrike( knockback = args.KnockBack; hitDirection = args.HitDirection; crit = args.Critical; - noEffect = args.NoEffect; fromNet = args.FromNet; player = args.Player; return args.Handled; diff --git a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs index 1a93df7..958e4e7 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs @@ -52,10 +52,7 @@ static void OnStrike(NPC npc, HookEvents.Terraria.NPC.StrikeNPCEventArgs args) if (!args.ContinueExecution) return; if (args.entity is Player player) { - // 1.4.5.7 removed the noEffect parameter from NPC.StrikeNPC, so it is - // not part of the OTAPI hook args anymore; keep the internal API intact. - bool noEffect = false; - if (_hookManager.InvokeNpcStrike(npc, ref args.Damage, ref args.knockBack, ref args.hitDirection, ref args.crit, ref noEffect, ref args.fromNet, player)) + if (_hookManager.InvokeNpcStrike(npc, ref args.Damage, ref args.knockBack, ref args.hitDirection, ref args.crit, ref args.fromNet, player)) { args.ContinueExecution = false; args.HookReturnValue = 0;