Skip to content
This repository was archived by the owner on Apr 21, 2024. It is now read-only.

Commit 7b7cb3a

Browse files
author
BuildTools
committed
Added error handling to the Event class and added a utility class.
1 parent cb42c2d commit 7b7cb3a

File tree

3 files changed

+64
-6
lines changed

3 files changed

+64
-6
lines changed

Event.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,21 @@ public static void RegisterEventListener(Type eventListener)
4545
}
4646
registeredEventHandlers[eventType].Add(eventHandler);
4747

48-
Logger.Debug($"Successfully registered event handler \"{eventHandler.Name}\"!");
48+
Logger.Debug($"Successfully registered event handler \"{eventHandler.FullDescription()}\"!");
4949
}
5050
else
5151
{
52-
Logger.Error($"Could not register event handler \"{eventHandler.Name}\" as the argument \"{eventType} {eventHandlerArguments[0].Name}\" does not extend \"{nameof(Event)}\"!");
52+
Logger.Error($"Could not register event handler \"{eventHandler.FullDescription()}\" as the argument \"{eventType} {eventHandlerArguments[0].Name}\" does not extend \"{nameof(Event)}\"!");
5353
}
5454
}
5555
else
5656
{
57-
Logger.Error($"Could not register event handler \"{eventHandler.Name}\" as it has {eventHandlerArguments.Length} arguments, not 1!");
57+
Logger.Error($"Could not register event handler \"{eventHandler.FullDescription()}\" as it has {eventHandlerArguments.Length} arguments, not 1!");
5858
}
5959
}
6060
else
6161
{
62-
Logger.Error($"Could not register event handler \"{eventHandler.Name}\" as it is not static!");
62+
Logger.Error($"Could not register event handler \"{eventHandler.FullDescription()}\" as it is not static!");
6363
}
6464
}
6565
}
@@ -119,7 +119,13 @@ public static void RunHandlers(Event e)
119119
{
120120
foreach (MethodInfo method in EventManager.registeredEventHandlers[e.GetType()])
121121
{
122-
method.Invoke(null, new object[] { e });
122+
try
123+
{
124+
method.Invoke(null, new object[] { e });
125+
} catch(Exception ex)
126+
{
127+
Logger.Error($"An error occurred while running the event handler {method.FullDescription()}:\n{ex.Message}\n{ex.StackTrace}");
128+
}
123129
}
124130
}
125131
}
@@ -236,7 +242,6 @@ public abstract class PlayerEvent : GameEvent
236242
public abstract Player GetPlayer();
237243
public override GameSessionHandler GetGameSessionHandler()
238244
{
239-
Player player = GetPlayer();
240245
FieldInfo selfRefField = typeof(GameSessionHandler).GetField("selfRef", BindingFlags.Static | BindingFlags.NonPublic);
241246
return selfRefField.GetValue(null) as GameSessionHandler;
242247
}

Splotch.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Reflection;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace Splotch
9+
{
10+
public static class Splotch
11+
{
12+
public static GameSessionHandler GetGameSessionHandler()
13+
{
14+
FieldInfo selfRefField = typeof(GameSessionHandler).GetField("selfRef", BindingFlags.Static | BindingFlags.NonPublic);
15+
return selfRefField.GetValue(null) as GameSessionHandler;
16+
}
17+
18+
public static SlimeController[] GetSlimeControllers()
19+
{
20+
FieldInfo slimeControllersField = typeof(GameSessionHandler).GetField("slimeControllers", BindingFlags.Instance | BindingFlags.NonPublic);
21+
return slimeControllersField.GetValue(GetGameSessionHandler()) as SlimeController[];
22+
}
23+
24+
public static bool IsGameOver
25+
{
26+
get
27+
{
28+
FieldInfo gameOverField = typeof(GameSessionHandler).GetField("gameOver", BindingFlags.Instance | BindingFlags.NonPublic);
29+
return (bool) gameOverField.GetValue(GetGameSessionHandler());
30+
}
31+
set
32+
{
33+
FieldInfo gameOverField = typeof(GameSessionHandler).GetField("gameOver", BindingFlags.Instance | BindingFlags.NonPublic);
34+
gameOverField.SetValue(GetGameSessionHandler(), value);
35+
}
36+
}
37+
38+
public static void PrepareNextLevel()
39+
{
40+
MethodInfo prepareNextLevelMethod = typeof(GameSessionHandler).GetMethod("prepareNextlevel", BindingFlags.Instance | BindingFlags.NonPublic);
41+
prepareNextLevelMethod.Invoke(GetGameSessionHandler(), null);
42+
}
43+
44+
public static Player GetPlayerFromPlayerBody(PlayerBody playerBody)
45+
{
46+
FieldInfo type = typeof(PlayerBody).GetField("idHolder", BindingFlags.NonPublic | BindingFlags.Instance);
47+
IPlayerIdHolder idHolder = (IPlayerIdHolder)type.GetValue(playerBody);
48+
Player player = PlayerHandler.Get().GetPlayer(idHolder.GetPlayerId());
49+
return player;
50+
}
51+
}
52+
}

Splotch.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
<Compile Include="ModLoader.cs" />
5050
<Compile Include="ModManager.cs" />
5151
<Compile Include="Properties\AssemblyInfo.cs" />
52+
<Compile Include="Splotch.cs" />
5253
<Compile Include="SplotchMod.cs" />
5354
<Compile Include="VersionChecker.cs" />
5455
</ItemGroup>

0 commit comments

Comments
 (0)