Skip to content

Commit e851bfa

Browse files
committed
feat: add onScoreChanged #41
1 parent c530e48 commit e851bfa

File tree

3 files changed

+35
-84
lines changed

3 files changed

+35
-84
lines changed

src/legacy/api/EventAPI.cpp

Lines changed: 3 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -764,29 +764,9 @@ void EnableEventListener(int eventId) {
764764
});
765765
break;
766766

767-
// case EVENT_TYPES::onScoreChanged:
768-
// Event::PlayerScoreChangedEvent::subscribe(
769-
// [](const PlayerScoreChangedEvent &ev) {
770-
// IF_LISTENED(EVENT_TYPES::onScoreChanged) {
771-
// CallEvent(EVENT_TYPES::onScoreChanged,
772-
// PlayerClass::newPlayer(ev.mPlayer),
773-
// Number::newNumber(ev.mScore),
774-
// String::newString(ev.mObjective->getName()),
775-
// String::newString(ev.mObjective->getDisplayName()));
776-
// }
777-
// IF_LISTENED_END(EVENT_TYPES::onScoreChanged);
778-
// });
779-
// break;
780-
781-
// case EVENT_TYPES::onConsoleOutput:
782-
// Event::ConsoleOutputEvent::subscribe([](const ConsoleOutputEvent &ev) {
783-
// IF_LISTENED(EVENT_TYPES::onConsoleOutput) {
784-
// CallEvent(EVENT_TYPES::onConsoleOutput,
785-
// String::newString(ev.mOutput));
786-
// }
787-
// IF_LISTENED_END(EVENT_TYPES::onConsoleOutput);
788-
// });
789-
// break;
767+
case EVENT_TYPES::onScoreChanged:
768+
lse::events::ScoreChangedEvent();
769+
break;
790770

791771
case EVENT_TYPES::onMobSpawn:
792772
lse::getSelfPluginInstance().getLogger().warn(
@@ -953,38 +933,6 @@ void InitBasicEventListeners() {
953933
return;
954934
});
955935

956-
// // Plugin Hot Management
957-
// Event::ScriptPluginManagerEvent::subscribe_ref(
958-
// [](ScriptPluginManagerEvent &ev) {
959-
// switch (ev.operation) {
960-
// case ScriptPluginManagerEvent::Operation::Load:
961-
// // ev.pluginType is not used
962-
// // since in loadPlugin there will be check
963-
// try {
964-
// if (PluginManager::loadPlugin(ev.target, true, true))
965-
// ev.success = true;
966-
// } catch (...) {
967-
// }
968-
// break;
969-
970-
// case ScriptPluginManagerEvent::Operation::Unload:
971-
// if (PluginManager::unloadPlugin(ev.target))
972-
// ev.success = true;
973-
// break;
974-
975-
// case ScriptPluginManagerEvent::Operation::Reload:
976-
// if (PluginManager::reloadPlugin(ev.target))
977-
// ev.success = true;
978-
// break;
979-
980-
// default:
981-
// break;
982-
// }
983-
// if (ev.success)
984-
// return false; // Success. No need to spread to next engine
985-
// return true;
986-
// });
987-
988936
// ===== onServerStarted =====
989937
bus.emplaceListener<ServerStartedEvent>([](ServerStartedEvent& ev) {
990938
using namespace ll::chrono_literals;
@@ -1027,35 +975,6 @@ void InitBasicEventListeners() {
1027975
});
1028976
}
1029977

1030-
/* onTurnLectern // 由于还是不能拦截掉书,暂时注释
1031-
THook(void,
1032-
"?handle@ServerNetworkHandler@@UEAAXAEBVNetworkIdentifier@@AEBVLecternUpdatePacket@@@Z",
1033-
ServerNetworkHandler* handler, NetworkIdentifier* id, Packet* pkt)
1034-
{
1035-
IF_LISTENED(EVENT_TYPES::onTurnLectern)
1036-
{
1037-
// Packet* pkt = *(Packet**)pPacket;
1038-
Player* player = Raw_GetPlayerFromPacket(handler, id, pkt);
1039-
if (!player)
1040-
return;
1041-
1042-
int page = *((DWORD*)pkt + 12);
1043-
dAccess<bool>(pkt, 56) = false;
1044-
bool shouldDropBook = *((BYTE*)pkt + 56);
1045-
int totalPages = *((DWORD*)pkt + 13);
1046-
auto* bp = new BlockPos;
1047-
bp->x = *((DWORD*)pkt + 15);
1048-
bp->y = *((DWORD*)pkt + 16);
1049-
bp->z = *((DWORD*)pkt + 17);
1050-
CallEventRtnVoid(EVENT_TYPES::onTurnLectern,
1051-
PlayerClass::newPlayer(player), IntPos::newPos(bp, Raw_GetPlayerDimId(player)),
1052-
page, totalPages, Boolean::newBoolean(shouldDropBook));
1053-
}
1054-
IF_LISTENED_END(EVENT_TYPES::onTurnLectern);
1055-
original(handler,id,pkt);
1056-
}
1057-
*/
1058-
1059978
bool MoneyBeforeEventCallback(LLMoneyEvent type, xuid_t from, xuid_t to, money_t value) {
1060979
switch (type) {
1061980
case LLMoneyEvent::Add: {

src/legacy/events/EventHooks.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
#include "legacy/api/EventAPI.h"
77
#include "legacy/api/ItemAPI.h"
88
#include "legacy/api/PlayerAPI.h"
9+
#include "ll/api/service/Bedrock.h"
910
#include "mc/server/ServerPlayer.h"
1011
#include "mc/server/commands/CommandOrigin.h"
1112
#include "mc/server/commands/CommandOriginType.h"
13+
#include "mc/world/ActorUniqueID.h"
14+
#include "mc/world/scores/ScoreInfo.h"
1215

1316
#include <ll/api/memory/Hook.h>
1417
#include <ll/api/memory/Memory.h>
@@ -47,6 +50,7 @@
4750
#include <mc/world/level/block/actor/ChestBlockActor.h>
4851
#include <mc/world/level/block/actor/PistonBlockActor.h>
4952
#include <mc/world/phys/AABB.h>
53+
#include <mc/world/scores/ServerScoreboard.h>
5054

5155
namespace lse::events {
5256

@@ -798,6 +802,32 @@ LL_TYPE_INSTANCE_HOOK(
798802
origin(inEntity, inSpeed);
799803
}
800804

805+
LL_TYPE_INSTANCE_HOOK(
806+
ScoreChangedHook,
807+
HookPriority::Normal,
808+
ServerScoreboard,
809+
"?onScoreChanged@ServerScoreboard@@UEAAXAEBUScoreboardId@@AEBVObjective@@@Z",
810+
void,
811+
ScoreboardId const& id,
812+
Objective const& obj
813+
) {
814+
IF_LISTENED(EVENT_TYPES::onScoreChanged) {
815+
if (id.getIdentityDef().isPlayerType()) {
816+
CallEventVoid(
817+
EVENT_TYPES::onScoreChanged,
818+
PlayerClass::newPlayer(
819+
ll::service::getLevel()->getPlayer(ActorUniqueID(id.getIdentityDef().getPlayerId().mActorUniqueId))
820+
),
821+
Number::newNumber(obj.getPlayerScore(id).mScore),
822+
String::newString(obj.getName()),
823+
String::newString(obj.getDisplayName())
824+
);
825+
}
826+
}
827+
IF_LISTENED_END(EVENT_TYPES::onScoreChanged);
828+
origin(id, obj);
829+
}
830+
801831
void PlayerStartDestroyBlock() { PlayerStartDestroyHook::hook(); }
802832
void PlayerDropItem() { PlayerDropItemHook::hook(); }
803833
void PlayerOpenContainerEvent() { PlayerOpenContainerHook::hook(); }
@@ -841,6 +871,7 @@ void PlayerUseRespawnAnchorEvent() { PlayerUseRespawnAnchorHook::hook(); }
841871
void PlayerSleepEvent() { PlayerSleepHook::hook(); }
842872
void PlayerOpenInventoryEvent() { PlayerOpenInventoryHook::hook(); }
843873
void PlayerPullFishingHookEvent() { PlayerPullFishingHook::hook(); }
874+
void ScoreChangedEvent() { ScoreChangedHook::hook(); }
844875

845876
// NOLINTEND(cppcoreguidelines-pro-type-reinterpret-cast)
846877
// NOLINTEND(cppcoreguidelines-avoid-non-const-global-variables)

src/legacy/events/EventHooks.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,6 @@ void PlayerUseRespawnAnchorEvent();
3131
void PlayerSleepEvent();
3232
void PlayerOpenInventoryEvent();
3333
void PlayerPullFishingHookEvent();
34+
void ScoreChangedEvent();
3435

3536
} // namespace lse::events

0 commit comments

Comments
 (0)