Replace AchievementInitializer MM IL with static hook

This commit is contained in:
Luke 2025-01-11 14:39:14 +10:00
parent 337f15c0ef
commit 90f1d49887

View file

@ -447,7 +447,7 @@ namespace TShockAPI
// Initialize the AchievementManager, which is normally only done on clients.
Game._achievements = new AchievementManager();
IL.Terraria.Initializers.AchievementInitializer.Load += OnAchievementInitializerLoad;
OTAPI.Hooks.Initializers.AchievementInitializerLoad += OnAchievementInitializerLoad;
// Actually call AchievementInitializer.Load, which is also normally only done on clients.
AchievementInitializer.Load();
@ -496,11 +496,9 @@ namespace TShockAPI
}
}
private static void OnAchievementInitializerLoad(ILContext il)
private static void OnAchievementInitializerLoad(object sender, OTAPI.Hooks.Initializers.AchievementInitializerLoadEventArgs args)
{
// Modify AchievementInitializer.Load to remove the Main.netMode == 2 check (occupies the first 4 IL instructions)
for (var i = 0; i < 4; i++)
il.Body.Instructions.RemoveAt(0);
args.ShouldLoad = true;
}
protected void CrashReporter_HeapshotRequesting(object sender, EventArgs e)
@ -524,7 +522,7 @@ namespace TShockAPI
}
SaveManager.Instance.Dispose();
IL.Terraria.Initializers.AchievementInitializer.Load -= OnAchievementInitializerLoad;
OTAPI.Hooks.Initializers.AchievementInitializerLoad -= OnAchievementInitializerLoad;
ModuleManager.Dispose();