Skip to content
This repository has been archived by the owner on Jun 12, 2024. It is now read-only.

Commit

Permalink
feat: add PlayerRespawnEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
LazuliKao committed Jul 28, 2023
1 parent 80da85a commit b675f62
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 56 deletions.
4 changes: 3 additions & 1 deletion src/Events/Events.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public static class Events
public static JoinEvent PlayerJoin => PlayerJoinEvent.Value;
private static readonly Lazy<LeftEvent> PlayerLeftEvent = new(() => new());
public static LeftEvent PlayerLeft => PlayerLeftEvent.Value;
}
private static readonly Lazy<RespawnEvent> PlayerRespawnEvent = new(() => new());
public static RespawnEvent PlayerRespawn => PlayerRespawnEvent.Value;
}
36 changes: 19 additions & 17 deletions src/Events/Implements/Player/InitializedEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,25 @@ public class InitializedEvent : HookEventBase<InitializedEventArgs, InitializedE
{
public unsafe delegate void HookDelegate(void* serverPlayerPtr);

public InitializedEvent() : base("_ZN12ServerPlayer27setLocalPlayerAsInitializedEv") { }
public InitializedEvent()
: base("_ZN12ServerPlayer27setLocalPlayerAsInitializedEv") { }

public override unsafe HookDelegate HookedFunc => (serverPlayerPtr) =>
{
try
public override unsafe HookDelegate HookedFunc =>
(serverPlayerPtr) =>
{
var e = new InitializedEventArgs()
try
{
ServerPlayer = new ServerPlayer(serverPlayerPtr)
};
OnEventBefore(e);
Original(serverPlayerPtr);
OnEventAfter(e);
}
catch (Exception ex)
{
Log.Logger.Error(nameof(InitializedEvent), ex);
}
};
}
var e = new InitializedEventArgs
{
ServerPlayer = new ServerPlayer(serverPlayerPtr)
};
OnEventBefore(e);
Original(serverPlayerPtr);
OnEventAfter(e);
}
catch (Exception ex)
{
Log.Logger.Error(nameof(InitializedEvent), ex);
}
};
}
45 changes: 25 additions & 20 deletions src/Events/Implements/Player/JoinEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,31 @@ public class JoinEventArgs : EventArgsBase

public class JoinEvent : HookEventBase<JoinEventArgs, JoinEvent.HookDelegate>
{
public unsafe delegate void HookDelegate(void* serverNetworkHandler,
public unsafe delegate void HookDelegate(
void* serverNetworkHandler,
void* networkIdentifier,
void* connectionRequest, void* serverPlayerPtr);
public JoinEvent() : base(
"_ZN20ServerNetworkHandler21sendLoginMessageLocalERK17NetworkIdentifierRK17ConnectionRequestR12ServerPlayer") { }
public override unsafe HookDelegate HookedFunc => (handler, identifier, request, serverPlayerPtr) =>
{
try
void* connectionRequest,
void* serverPlayerPtr
);

public JoinEvent()
: base(
"_ZN20ServerNetworkHandler21sendLoginMessageLocalERK17NetworkIdentifierRK17ConnectionRequestR12ServerPlayer"
) { }

public override unsafe HookDelegate HookedFunc =>
(handler, identifier, request, serverPlayerPtr) =>
{
var e = new JoinEventArgs()
try
{
ServerPlayer = new ServerPlayer(serverPlayerPtr)
};
OnEventBefore(e);
Original(handler, identifier, request, serverPlayerPtr);
OnEventAfter(e);
}
catch (Exception ex)
{
Log.Logger.Error(nameof(InitializedEvent), ex);
}
};
}
var e = new JoinEventArgs { ServerPlayer = new ServerPlayer(serverPlayerPtr) };
OnEventBefore(e);
Original(handler, identifier, request, serverPlayerPtr);
OnEventAfter(e);
}
catch (Exception ex)
{
Log.Logger.Error(nameof(InitializedEvent), ex);
}
};
}
34 changes: 16 additions & 18 deletions src/Events/Implements/Player/LeftEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,22 @@ public class LeftEvent : HookEventBase<LeftEventArgs, LeftEvent.HookDelegate>
{
public unsafe delegate void HookDelegate(void* serverPlayerPtr);

public LeftEvent() : base(
"_ZN12ServerPlayer10disconnectEv") { }
public LeftEvent()
: base("_ZN12ServerPlayer10disconnectEv") { }

public override unsafe HookDelegate HookedFunc => (serverPlayerPtr) =>
{
try
public override unsafe HookDelegate HookedFunc =>
(serverPlayerPtr) =>
{
var e = new LeftEventArgs()
try
{
ServerPlayer = new ServerPlayer(serverPlayerPtr)
};
OnEventBefore(e);
Original(serverPlayerPtr);
OnEventAfter(e);
}
catch (Exception ex)
{
Log.Logger.Error(nameof(InitializedEvent), ex);
}
};
}
var e = new LeftEventArgs { ServerPlayer = new ServerPlayer(serverPlayerPtr) };
OnEventBefore(e);
Original(serverPlayerPtr);
OnEventAfter(e);
}
catch (Exception ex)
{
Log.Logger.Error(nameof(InitializedEvent), ex);
}
};
}
35 changes: 35 additions & 0 deletions src/Events/Implements/Player/RespawnEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using Hosihikari.Minecraft.Extension.Events;
using Hosihikari.Minecraft;
using Hosihikari.NativeInterop.Hook.ObjectOriented;

Check failure on line 3 in src/Events/Implements/Player/RespawnEvent.cs

View workflow job for this annotation

GitHub Actions / build

The type or namespace name 'NativeInterop' does not exist in the namespace 'Hosihikari' (are you missing an assembly reference?)

public class RespawnEventArgs : EventArgsBase
{
public required ServerPlayer ServerPlayer { get; init; }
}

namespace Hosihikari.Minecraft.Extension.Events.Implements.Player
{
public class RespawnEvent : HookEventBase<RespawnEventArgs, RespawnEvent.HookDelegate>
{
public unsafe delegate void HookDelegate(void* serverPlayerPtr);

public RespawnEvent()
: base("?respawn@ServerPlayer@@UEAAXXZ") { }

public override unsafe HookDelegate HookedFunc =>
serverPlayerPtr =>
{
try
{ //Actor::getIsExperienceDropEnabled
var e = new RespawnEventArgs { ServerPlayer = new ServerPlayer(serverPlayerPtr) };
OnEventBefore(e);
Original(serverPlayerPtr);
OnEventAfter(e);
}
catch (Exception ex)
{
Log.Logger.Error(nameof(InitializedEvent), ex);
}
};
}
}

0 comments on commit b675f62

Please sign in to comment.