Skip to content

Commit

Permalink
feat: add some player events
Browse files Browse the repository at this point in the history
  • Loading branch information
ShrBox committed Nov 30, 2023
1 parent e2393ee commit ef5c1dd
Show file tree
Hide file tree
Showing 13 changed files with 161 additions and 168 deletions.
38 changes: 38 additions & 0 deletions src/ll/api/event/player/PlayerConnectEvent.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include "ll/api/event/player/PlayerConnectEvent.h"
#include "ll/api/event/Emitter.h"
#include "ll/api/memory/Hook.h"

#include "mc/network/ServerNetworkHandler.h"


namespace ll::event::player {

LL_TYPED_INSTANCE_HOOK(
PlayerConnectEventHook,
HookPriority::Normal,
ServerNetworkHandler,
"?sendLoginMessageLocal@ServerNetworkHandler@@QEAAXAEBVNetworkIdentifier@@AEBVConnectionRequest@@AEAVServerPlayer@@"
"@Z",
void,
const NetworkIdentifier& ni,
const ConnectionRequest& cr,
const ServerPlayer& sp
) {
auto event = PlayerConnectEvent(sp);
EventBus::getInstance().publish(event);
if (event.isCancelled()) {
return;
}
origin(ni, cr, sp);
}

class PlayerConnectEventEmitter : public Emitter<PlayerConnectEvent> {
public:
PlayerConnectEventEmitter() { PlayerConnectEventHook::hook(); }
~PlayerConnectEventEmitter() override { PlayerConnectEventHook::unhook(); }
};

std::unique_ptr<EmitterBase> PlayerConnectEvent::emitterFactory(ListenerBase&) {
return std::make_unique<PlayerConnectEventEmitter>();
}
} // namespace ll::event::player
18 changes: 18 additions & 0 deletions src/ll/api/event/player/PlayerConnectEvent.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#pragma once

#include "ll/api/base/Macro.h"
#include "ll/api/event/Cancellable.h"
#include "ll/api/event/Event.h"

#include "mc/server/ServerPlayer.h"

namespace ll::event::player {
class PlayerConnectEvent : public Cancellable<Event> {
public:
const ServerPlayer& player;

constexpr explicit PlayerConnectEvent(const ServerPlayer& player) : player(player) {}

LLNDAPI static std::unique_ptr<EmitterBase> emitterFactory(ListenerBase&);
};
} // namespace ll::event::player
33 changes: 33 additions & 0 deletions src/ll/api/event/player/PlayerJoinEvent.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#include "ll/api/event/player/PlayerJoinEvent.h"
#include "ll/api/event/Emitter.h"
#include "ll/api/memory/Hook.h"

#include "mc/server/ServerPlayer.h"

namespace ll::event::player {

LL_TYPED_INSTANCE_HOOK(
PlayerJoinEventHook,
HookPriority::Normal,
ServerPlayer,
&ServerPlayer::setLocalPlayerAsInitialized,
void
) {
auto event = PlayerJoinEvent(*this);
EventBus::getInstance().publish(event);
if (event.isCancelled()) {
return;
}
origin();
}

class PlayerJoinEventEmitter : public Emitter<PlayerJoinEvent> {
public:
PlayerJoinEventEmitter() { PlayerJoinEventHook::hook(); }
~PlayerJoinEventEmitter() override { PlayerJoinEventHook::unhook(); }
};

std::unique_ptr<EmitterBase> PlayerJoinEvent::emitterFactory(ListenerBase&) {
return std::make_unique<PlayerJoinEventEmitter>();
}
} // namespace ll::event::player
18 changes: 18 additions & 0 deletions src/ll/api/event/player/PlayerJoinEvent.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#pragma once

#include "ll/api/base/Macro.h"
#include "ll/api/event/Cancellable.h"
#include "ll/api/event/Event.h"

#include "mc/server/ServerPlayer.h"

namespace ll::event::player {
class PlayerJoinEvent : public Cancellable<Event> {
public:
ServerPlayer& player;

constexpr explicit PlayerJoinEvent(ServerPlayer& player) : player(player) {}

LLNDAPI static std::unique_ptr<EmitterBase> emitterFactory(ListenerBase&);
};
} // namespace ll::event::player
24 changes: 24 additions & 0 deletions src/ll/api/event/player/PlayerLeaveEvent.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#include "ll/api/event/player/PlayerLeaveEvent.h"
#include "ll/api/event/Emitter.h"
#include "ll/api/memory/Hook.h"

#include "mc/server/ServerPlayer.h"

namespace ll::event::player {

LL_TYPED_INSTANCE_HOOK(PlayerLeaveEventHook, HookPriority::Normal, ServerPlayer, &ServerPlayer::disconnect, void) {
auto event = PlayerLeaveEvent(*this);
EventBus::getInstance().publish(event);
origin();
}

class PlayerLeaveEventEmitter : public Emitter<PlayerLeaveEvent> {
public:
PlayerLeaveEventEmitter() { PlayerLeaveEventHook::hook(); }
~PlayerLeaveEventEmitter() override { PlayerLeaveEventHook::unhook(); }
};

std::unique_ptr<EmitterBase> PlayerLeaveEvent::emitterFactory(ListenerBase&) {
return std::make_unique<PlayerLeaveEventEmitter>();
}
} // namespace ll::event::player
18 changes: 18 additions & 0 deletions src/ll/api/event/player/PlayerLeaveEvent.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#pragma once

#include "ll/api/base/Macro.h"
#include "ll/api/event/Cancellable.h"
#include "ll/api/event/Event.h"

#include "mc/server/ServerPlayer.h"

namespace ll::event::player {
class PlayerLeaveEvent : public Event {
public:
ServerPlayer& player;

constexpr explicit PlayerLeaveEvent(ServerPlayer& player) : player(player) {}

LLNDAPI static std::unique_ptr<EmitterBase> emitterFactory(ListenerBase&);
};
} // namespace ll::event::player
12 changes: 12 additions & 0 deletions src/ll/test/EventTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
#include "mc/world/events/ServerInstanceEventCoordinator.h"

#include "ll/api/event/command/ExecuteCommandEvent.h"
#include "ll/api/event/player/PlayerConnectEvent.h"
#include "ll/api/event/player/PlayerJoinEvent.h"
#include "ll/api/event/player/PlayerLeaveEvent.h"
#include "mc/nbt/CompoundTag.h"

#include "ll/api/base/FixedString.h"
Expand Down Expand Up @@ -121,4 +124,13 @@ LL_AUTO_TYPED_INSTANCE_HOOK(
ll::logger.debug("ExecutedCommandEvent: {}", ev.commandContext.mCommand);
ll::logger.debug("result: {}", ev.result.getFullCode());
});
bus.emplaceListener<player::PlayerConnectEvent>([](player::PlayerConnectEvent& ev) {
ll::logger.debug("Player connect: {}", ev.player.getRealName());
});
bus.emplaceListener<player::PlayerJoinEvent>([](player::PlayerJoinEvent& ev) {
ll::logger.debug("Player join: {}", ev.player.getRealName());
});
bus.emplaceListener<player::PlayerLeaveEvent>([](player::PlayerLeaveEvent& ev) {
ll::logger.debug("Player leave: {}", ev.player.getRealName());
});
}
35 changes: 0 additions & 35 deletions temp/event/player/PlayerConnectEvent.cpp

This file was deleted.

22 changes: 0 additions & 22 deletions temp/event/player/PlayerConnectEvent.h

This file was deleted.

34 changes: 0 additions & 34 deletions temp/event/player/PlayerJoinEvent.cpp

This file was deleted.

23 changes: 0 additions & 23 deletions temp/event/player/PlayerJoinEvent.h

This file was deleted.

31 changes: 0 additions & 31 deletions temp/event/player/PlayerLeaveEvent.cpp

This file was deleted.

23 changes: 0 additions & 23 deletions temp/event/player/PlayerLeaveEvent.h

This file was deleted.

0 comments on commit ef5c1dd

Please sign in to comment.