From fc5b7005f10ead63990aa155c30dc93a7c5f7675 Mon Sep 17 00:00:00 2001 From: bulkinglb Date: Fri, 21 Aug 2026 22:54:45 +0200 Subject: [PATCH] Port TSAPI hooks to Terraria 1.4.5.7 / OTAPI 3.3.12 - Netplay.HasClients was renamed to HasFullyConnectedClients. - Netplay.StopListening() was removed. Vanilla's OnConnectionAccepted now kicks the incoming connection with CLI.ServerIsFull when every slot is taken instead of tearing the listener down, so the hook mirrors that. (Netplay.IsListening still exists but is never read, so clearing it would have been a no-op.) - NPC.StrikeNPC no longer carries noEffect. The parameter is kept in the TSAPI hook signature for plugin compatibility and fed a local dummy. Co-Authored-By: Claude Opus 5 --- .../TerrariaApi.Server/Hooking/NetHooks.cs | 12 +++++++----- .../TerrariaApi.Server/Hooking/NpcHooks.cs | 4 +++- TerrariaServerAPI/TerrariaServerAPI.csproj | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs index a638047..4aca6ee 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs @@ -1,6 +1,7 @@ using OTAPI; using System; using Terraria; +using Terraria.Localization; using Terraria.Net; namespace TerrariaApi.Server.Hooking; @@ -38,7 +39,7 @@ static void OnUpdateConnectedClients(object? sender, HookEvents.Terraria.Netplay args.OriginalMethod(); if (ServerApi.ForceUpdate) { - Terraria.Netplay.HasClients = true; + Terraria.Netplay.HasFullyConnectedClients = true; } } @@ -189,11 +190,12 @@ static void OnConnectionAccepted(object? sender, HookEvents.Terraria.Netplay.OnC { Netplay.Clients[slot].Reset(); Netplay.Clients[slot].Socket = args.client; + return; } - if (FindNextOpenClientSlot() == -1) - { - Netplay.StopListening(); - } + + // 1.4.5.7 removed Netplay.StopListening(). Vanilla now kicks the incoming connection + // when every slot is taken rather than tearing the listener down, so mirror that. + Netplay.KickClient(args.client, NetworkText.FromKey("CLI.ServerIsFull")); } static int FindNextOpenClientSlot() diff --git a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs index 1e248a0..8002434 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NpcHooks.cs @@ -52,7 +52,9 @@ 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)) + // TODO(1.4.5.7): NPC.StrikeNPC no longer has noEffect; kept in the TSAPI hook signature for plugin compat. + 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/TerrariaServerAPI.csproj b/TerrariaServerAPI/TerrariaServerAPI.csproj index 61005da..6638c32 100644 --- a/TerrariaServerAPI/TerrariaServerAPI.csproj +++ b/TerrariaServerAPI/TerrariaServerAPI.csproj @@ -23,6 +23,6 @@ - +