Skip to content

Commit 2233b93

Browse files
committed
Move to OTAPI static hooks
1 parent 10dfd45 commit 2233b93

File tree

10 files changed

+488
-507
lines changed

10 files changed

+488
-507
lines changed

TerrariaServerAPI.Tests/BaseTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ public void EnsureInitialised()
1515
{
1616
var are = new AutoResetEvent(false);
1717
Exception? error = null;
18-
On.Terraria.Main.hook_DedServ cb = (On.Terraria.Main.orig_DedServ orig, Terraria.Main instance) =>
18+
HookEvents.HookDelegate<global::Terraria.Main,HookEvents.Terraria.Main. DedServEventArgs> cb = (instance, args) =>
1919
{
2020
instance.Initialize();
2121
are.Set();
2222
_initialized = true;
2323
};
24-
On.Terraria.Main.DedServ += cb;
24+
HookEvents.Terraria.Main.DedServ += cb;
2525

2626
global::TerrariaApi.Server.Program.Main(new string[] { });
2727

2828
_initialized = are.WaitOne(TimeSpan.FromSeconds(30));
2929

30-
On.Terraria.Main.DedServ -= cb;
30+
HookEvents.Terraria.Main.DedServ -= cb;
3131

3232
Assert.That(_initialized, Is.True);
3333
Assert.That(error, Is.Null);
Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,80 @@
1-
using Microsoft.Xna.Framework;
2-
using OTAPI;
1+
using OTAPI;
32

4-
namespace TerrariaApi.Server.Hooking
3+
namespace TerrariaApi.Server.Hooking;
4+
5+
internal static class GameHooks
56
{
6-
internal static class GameHooks
7-
{
8-
private static HookManager _hookManager;
7+
private static HookManager _hookManager;
98

10-
/// <summary>
11-
/// Attaches any of the OTAPI Game hooks to the existing <see cref="HookManager"/> implementation
12-
/// </summary>
13-
/// <param name="hookManager">HookManager instance which will receive the events</param>
14-
public static void AttachTo(HookManager hookManager)
15-
{
16-
_hookManager = hookManager;
9+
/// <summary>
10+
/// Attaches any of the OTAPI Game hooks to the existing <see cref="HookManager"/> implementation
11+
/// </summary>
12+
/// <param name="hookManager">HookManager instance which will receive the events</param>
13+
public static void AttachTo(HookManager hookManager)
14+
{
15+
_hookManager = hookManager;
1716

18-
On.Terraria.Main.Update += OnUpdate;
19-
On.Terraria.Main.Initialize += OnInitialize;
20-
On.Terraria.Netplay.StartServer += OnStartServer;
17+
HookEvents.Terraria.Main.Update += OnUpdate;
18+
HookEvents.Terraria.Main.Initialize += OnInitialize;
19+
HookEvents.Terraria.Netplay.StartServer += OnStartServer;
2120

22-
Hooks.WorldGen.HardmodeTilePlace += OnHardmodeTilePlace;
23-
Hooks.WorldGen.HardmodeTileUpdate += OnHardmodeTileUpdate;
24-
Hooks.Item.MechSpawn += OnItemMechSpawn;
25-
Hooks.NPC.MechSpawn += OnNpcMechSpawn;
26-
}
21+
Hooks.WorldGen.HardmodeTilePlace += OnHardmodeTilePlace;
22+
Hooks.WorldGen.HardmodeTileUpdate += OnHardmodeTileUpdate;
23+
Hooks.Item.MechSpawn += OnItemMechSpawn;
24+
Hooks.NPC.MechSpawn += OnNpcMechSpawn;
25+
}
2726

28-
private static void OnUpdate(On.Terraria.Main.orig_Update orig, Terraria.Main instance, GameTime gameTime)
29-
{
30-
_hookManager.InvokeGameUpdate();
31-
orig(instance, gameTime);
32-
_hookManager.InvokeGamePostUpdate();
33-
}
27+
private static void OnUpdate(Terraria.Main instance, HookEvents.Terraria.Main.UpdateEventArgs args)
28+
{
29+
if (!args.ContinueExecution) return;
30+
args.ContinueExecution = false;
31+
_hookManager.InvokeGameUpdate();
32+
args.OriginalMethod(args.gameTime);
33+
_hookManager.InvokeGamePostUpdate();
34+
}
3435

35-
private static void OnHardmodeTileUpdate(object sender, Hooks.WorldGen.HardmodeTileUpdateEventArgs e)
36+
private static void OnHardmodeTileUpdate(object sender, Hooks.WorldGen.HardmodeTileUpdateEventArgs e)
37+
{
38+
if (_hookManager.InvokeGameHardmodeTileUpdate(e.X, e.Y, e.Type))
3639
{
37-
if (_hookManager.InvokeGameHardmodeTileUpdate(e.X, e.Y, e.Type))
38-
{
39-
e.Result = HookResult.Cancel;
40-
}
40+
e.Result = HookResult.Cancel;
4141
}
42+
}
4243

43-
private static void OnHardmodeTilePlace(object sender, Hooks.WorldGen.HardmodeTilePlaceEventArgs e)
44+
private static void OnHardmodeTilePlace(object sender, Hooks.WorldGen.HardmodeTilePlaceEventArgs e)
45+
{
46+
if (_hookManager.InvokeGameHardmodeTileUpdate(e.X, e.Y, e.Type))
4447
{
45-
if (_hookManager.InvokeGameHardmodeTileUpdate(e.X, e.Y, e.Type))
46-
{
47-
e.Result = HardmodeTileUpdateResult.Cancel;
48-
}
48+
e.Result = HardmodeTileUpdateResult.Cancel;
4949
}
50+
}
5051

51-
private static void OnInitialize(On.Terraria.Main.orig_Initialize orig, Terraria.Main instance)
52-
{
53-
HookManager.InitialiseAPI();
54-
_hookManager.InvokeGameInitialize();
55-
orig(instance);
56-
}
52+
private static void OnInitialize(Terraria.Main instance, HookEvents.Terraria.Main.InitializeEventArgs args)
53+
{
54+
if (!args.ContinueExecution) return;
55+
HookManager.InitialiseAPI();
56+
_hookManager.InvokeGameInitialize();
57+
}
5758

58-
private static void OnStartServer(On.Terraria.Netplay.orig_StartServer orig)
59-
{
60-
_hookManager.InvokeGamePostInitialize();
61-
orig();
62-
}
59+
private static void OnStartServer(object? sender, HookEvents.Terraria.Netplay.StartServerEventArgs args)
60+
{
61+
if (!args.ContinueExecution) return;
62+
_hookManager.InvokeGamePostInitialize();
63+
}
6364

64-
private static void OnItemMechSpawn(object sender, Hooks.Item.MechSpawnEventArgs e)
65+
private static void OnItemMechSpawn(object sender, Hooks.Item.MechSpawnEventArgs e)
66+
{
67+
if (!_hookManager.InvokeGameStatueSpawn(e.Num2, e.Num3, e.Num, (int)(e.X / 16f), (int)(e.Y / 16f), e.Type, false))
6568
{
66-
if (!_hookManager.InvokeGameStatueSpawn(e.Num2, e.Num3, e.Num, (int)(e.X / 16f), (int)(e.Y / 16f), e.Type, false))
67-
{
68-
e.Result = HookResult.Cancel;
69-
}
69+
e.Result = HookResult.Cancel;
7070
}
71+
}
7172

72-
private static void OnNpcMechSpawn(object sender, Hooks.NPC.MechSpawnEventArgs e)
73+
private static void OnNpcMechSpawn(object sender, Hooks.NPC.MechSpawnEventArgs e)
74+
{
75+
if (!_hookManager.InvokeGameStatueSpawn(e.Num2, e.Num3, e.Num, (int)(e.X / 16f), (int)(e.Y / 16f), e.Type, true))
7376
{
74-
if (!_hookManager.InvokeGameStatueSpawn(e.Num2, e.Num3, e.Num, (int)(e.X / 16f), (int)(e.Y / 16f), e.Type, true))
75-
{
76-
e.Result = HookResult.Cancel;
77-
}
77+
e.Result = HookResult.Cancel;
7878
}
7979
}
8080
}
Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,45 @@
11
using OTAPI;
22
using Terraria;
3-
using Terraria.GameContent.Items;
43

5-
namespace TerrariaApi.Server.Hooking
6-
{
7-
internal static class ItemHooks
8-
{
9-
private static HookManager _hookManager;
4+
namespace TerrariaApi.Server.Hooking;
105

11-
/// <summary>
12-
/// Attaches any of the OTAPI Item hooks to the existing <see cref="HookManager"/> implementation
13-
/// </summary>
14-
/// <param name="hookManager">HookManager instance which will receive the events</param>
15-
public static void AttachTo(HookManager hookManager)
16-
{
17-
_hookManager = hookManager;
18-
19-
On.Terraria.Item.SetDefaults_int_bool_ItemVariant += OnSetDefaults;
20-
On.Terraria.Item.netDefaults += OnNetDefaults;
6+
internal static class ItemHooks
7+
{
8+
private static HookManager _hookManager;
219

22-
Hooks.Chest.QuickStack += OnQuickStack;
23-
}
10+
/// <summary>
11+
/// Attaches any of the OTAPI Item hooks to the existing <see cref="HookManager"/> implementation
12+
/// </summary>
13+
/// <param name="hookManager">HookManager instance which will receive the events</param>
14+
public static void AttachTo(HookManager hookManager)
15+
{
16+
_hookManager = hookManager;
2417

25-
private static void OnNetDefaults(On.Terraria.Item.orig_netDefaults orig, Item item, int type)
26-
{
27-
if (_hookManager.InvokeItemNetDefaults(ref type, item))
28-
return;
18+
HookEvents.Terraria.Item.SetDefaults_Int32_Boolean_ItemVariant += OnSetDefaults;
19+
HookEvents.Terraria.Item.netDefaults += OnNetDefaults;
2920

30-
orig(item, type);
31-
}
21+
Hooks.Chest.QuickStack += OnQuickStack;
22+
}
3223

33-
private static void OnSetDefaults(On.Terraria.Item.orig_SetDefaults_int_bool_ItemVariant orig, Item item, int type, bool noMatCheck, ItemVariant? variant = null)
34-
{
35-
if (_hookManager.InvokeItemSetDefaultsInt(ref type, item, variant))
36-
return;
24+
private static void OnNetDefaults(Item item, HookEvents.Terraria.Item.netDefaultsEventArgs args)
25+
{
26+
if (!args.ContinueExecution) return;
27+
if (_hookManager.InvokeItemNetDefaults(ref args.type, item))
28+
args.ContinueExecution = false;
29+
}
3730

38-
orig(item, type, noMatCheck, variant);
39-
}
31+
private static void OnSetDefaults(Item item, HookEvents.Terraria.Item.SetDefaults_Int32_Boolean_ItemVariantEventArgs args)
32+
{
33+
if (!args.ContinueExecution) return;
34+
if (_hookManager.InvokeItemSetDefaultsInt(ref args.Type, item, args.variant))
35+
args.ContinueExecution = false;
36+
}
4037

41-
private static void OnQuickStack(object sender, Hooks.Chest.QuickStackEventArgs e)
38+
private static void OnQuickStack(object sender, Hooks.Chest.QuickStackEventArgs e)
39+
{
40+
if (_hookManager.InvokeItemForceIntoChest(Main.chest[e.ChestIndex], e.Item, Main.player[e.PlayerId]))
4241
{
43-
if (_hookManager.InvokeItemForceIntoChest(Main.chest[e.ChestIndex], e.Item, Main.player[e.PlayerId]))
44-
{
45-
e.Result = HookResult.Cancel;
46-
}
42+
e.Result = HookResult.Cancel;
4743
}
4844
}
4945
}

0 commit comments

Comments
 (0)