Skip to content

Commit ea747d9

Browse files
committed
fix: fix the container close eve
1 parent a9a65aa commit ea747d9

1 file changed

Lines changed: 43 additions & 8 deletions

File tree

src/lse/events/PlayerEvents.cpp

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ LL_TYPE_INSTANCE_HOOK(
140140
return origin(playerOpenContainerEvent);
141141
}
142142

143-
LL_TYPE_INSTANCE_HOOK(
144-
CloseContainerHook,
143+
LL_TYPE_INSTANCE_HOOK( // 玩家手动关闭/退出游戏
144+
CloseContainerHook1,
145145
HookPriority::Normal,
146146
ServerPlayer,
147147
&ServerPlayer::doDeleteContainerManager,
@@ -151,18 +151,50 @@ LL_TYPE_INSTANCE_HOOK(
151151
IF_LISTENED(EVENT_TYPES::onCloseContainer) {
152152
if (mContainerManager) {
153153
if (auto* pos = std::get_if<BlockPos>(&*mContainerManager->mScreenContext->mOwner); pos) {
154-
CallEvent(
155-
EVENT_TYPES::onCloseContainer,
156-
PlayerClass::newPlayer(this),
157-
BlockClass::newBlock(*pos, getDimensionId().id)
158-
);
154+
if (getDimensionBlockSource().getBlock(*pos).mBlockType->isContainerBlock()) {
155+
CallEvent(
156+
EVENT_TYPES::onCloseContainer,
157+
PlayerClass::newPlayer(this),
158+
BlockClass::newBlock(*pos, getDimensionId().id)
159+
);
160+
}
159161
}
160162
}
161163
}
162164
IF_LISTENED_END(EVENT_TYPES::onCloseContainer);
163165
origin(forceDisconnect);
164166
}
165167

168+
LL_TYPE_INSTANCE_HOOK( // 方块被推动被迫关闭
169+
CloseContainerHook2,
170+
HookPriority::Normal,
171+
PistonBlockActor,
172+
&PistonBlockActor::_spawnMovingBlock,
173+
void,
174+
BlockSource& region,
175+
BlockPos const& blockPos
176+
) {
177+
if (region.getBlock(blockPos).mBlockType->isContainerBlock()) {
178+
IF_LISTENED(EVENT_TYPES::onCloseContainer) {
179+
region.mDimension.forEachPlayer([&](Player& player) -> bool {
180+
if (player.mContainerManager) {
181+
if (auto* pos = std::get_if<BlockPos>(&*player.mContainerManager->mScreenContext->mOwner);
182+
pos && *pos == blockPos) {
183+
CallEvent(
184+
EVENT_TYPES::onCloseContainer,
185+
PlayerClass::newPlayer(&player),
186+
BlockClass::newBlock(*pos, player.getDimensionId().id)
187+
);
188+
}
189+
}
190+
return true;
191+
});
192+
}
193+
IF_LISTENED_END(EVENT_TYPES::onCloseContainer);
194+
}
195+
origin(region, blockPos);
196+
}
197+
166198
LL_TYPE_INSTANCE_HOOK(
167199
ChangeSlotHook,
168200
HookPriority::Normal,
@@ -635,7 +667,10 @@ void DropItem() {
635667
DropItemHook2::hook();
636668
}
637669
void OpenContainerEvent() { OpenContainerHook::hook(); }
638-
void CloseContainerEvent() { CloseContainerHook::hook(); }
670+
void CloseContainerEvent() {
671+
CloseContainerHook1::hook();
672+
CloseContainerHook2::hook();
673+
}
639674
void ChangeSlotEvent() { ChangeSlotHook::hook(); }
640675
void AttackBlockEvent() { StartDestroyBlockHook::hook(); }
641676
void UseFrameEvent() {

0 commit comments

Comments
 (0)