Skip to content

Commit 00aac67

Browse files
committed
fix: fix onUseBucketTake
1 parent 683b809 commit 00aac67

4 files changed

Lines changed: 31 additions & 48 deletions

File tree

src/legacy/api/PlayerAPI.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3635,9 +3635,7 @@ Local<Value> PlayerClass::sendToast(Arguments const& args) const {
36353635

36363636
if (!player) return {};
36373637

3638-
ToastRequestPacket pkt;
3639-
pkt.mTitle = args[0].asString().toString();
3640-
pkt.mContent = args[1].asString().toString();
3638+
ToastRequestPacket pkt(args[0].asString().toString(), args[1].asString().toString());
36413639
player->sendNetworkPacket(pkt);
36423640
return Boolean::newBoolean(true);
36433641
}

src/lse/events/EntityEvents.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ LL_TYPE_STATIC_HOOK(
401401
}
402402

403403
namespace Transformation {
404-
std::pair<::OwnerPtr<::EntityContext>, Actor*> currentActor = {{}, nullptr};
404+
std::pair<EntityId, Actor*> currentActor = {{}, nullptr};
405405
LL_TYPE_INSTANCE_HOOK(
406406
TransformedActorHook,
407407
HookPriority::Normal,
@@ -412,7 +412,7 @@ LL_TYPE_INSTANCE_HOOK(
412412
::Actor* from
413413
) {
414414
auto context = origin(identifier, from);
415-
currentActor = {context, from};
415+
currentActor = {context->mEntity, from};
416416
return context;
417417
}
418418

@@ -428,7 +428,7 @@ LL_TYPE_INSTANCE_HOOK(
428428
auto newActor = origin(region, entity);
429429
IF_LISTENED(EVENT_TYPES::onEntityTransformation) {
430430
if (isServerThread() && currentActor.first) {
431-
if (currentActor.first->mEntity == entity->mEntity && currentActor.second) {
431+
if (currentActor.first == entity->mEntity && currentActor.second) {
432432
CallEvent(
433433
EVENT_TYPES::onEntityTransformation,
434434
String::newString(std::to_string(currentActor.second->getOrCreateUniqueID().rawID)),

src/lse/events/PlayerEvents.cpp

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@
4040
#include "mc/world/level/block/Block.h"
4141
#include "mc/world/level/block/ItemFrameBlock.h"
4242
#include "mc/world/level/block/RespawnAnchorBlock.h"
43+
#include "mc/world/level/block/VanillaBlockTypeIds.h"
4344
#include "mc/world/level/block/VanillaStates.h"
4445
#include "mc/world/level/block/actor/PistonBlockActor.h"
4546
#include "mc/world/level/block/block_events/BlockPlayerInteractEvent.h"
4647
#include "mc/world/level/dimension/Dimension.h"
48+
#include "mc/world/level/material/Material.h"
4749

4850
namespace lse::events::player {
4951

@@ -492,59 +494,42 @@ LL_TYPE_INSTANCE_HOOK(
492494
}
493495

494496
LL_TYPE_INSTANCE_HOOK(
495-
UseBucketTakeHook1,
497+
UseBucketTakeHook,
496498
HookPriority::Normal,
497499
BucketItem,
498-
&BucketItem::_takeLiquid,
499-
bool,
500-
ItemStack& item,
501-
Actor& entity,
502-
BlockPos const& pos
500+
&BucketItem::$_useOn,
501+
InteractionResult,
502+
::ItemStack& instance,
503+
::Actor& entity,
504+
::BlockPos pos,
505+
uchar face,
506+
::Vec3 const& clickPos
503507
) {
504508
IF_LISTENED(EVENT_TYPES::onUseBucketTake) {
505509
if (isServerThread()) {
506-
if (!CallEvent(
507-
EVENT_TYPES::onUseBucketTake,
508-
PlayerClass::newPlayer(&static_cast<Player&>(entity)),
509-
ItemClass::newItem(&item),
510-
BlockClass::newBlock(pos, entity.getDimensionId()),
511-
Number::newNumber(-1),
512-
FloatPos::newPos(pos, entity.getDimensionId())
513-
)) {
514-
return false;
510+
auto& bs = entity.getDimensionBlockSource();
511+
using ::SharedTypes::v1_26_20::MaterialType;
512+
if (auto& type = bs.getMaterial(pos).mType; type != MaterialType::Water && type != MaterialType::Lava) {
513+
return InteractionResult{false, true};
514+
}
515+
if (auto& bl = bs.getBlock(pos).mBlockType;
516+
*bl->mNameInfo->mFullName != VanillaBlockTypeIds::PowderSnow()) {
517+
return InteractionResult{false, true};
515518
}
516-
}
517-
}
518-
IF_LISTENED_END(EVENT_TYPES::onUseBucketTake);
519-
return origin(item, entity, pos);
520-
}
521-
522-
LL_TYPE_INSTANCE_HOOK(
523-
UseBucketTakeHook2,
524-
HookPriority::Normal,
525-
BucketItem,
526-
&BucketItem::_takePowderSnow,
527-
bool,
528-
ItemStack& item,
529-
Actor& entity,
530-
BlockPos const& pos
531-
) {
532-
IF_LISTENED(EVENT_TYPES::onUseBucketTake) {
533-
if (isServerThread()) {
534519
if (!CallEvent(
535520
EVENT_TYPES::onUseBucketTake,
536521
PlayerClass::newPlayer(&static_cast<Player&>(entity)),
537-
ItemClass::newItem(&item),
522+
ItemClass::newItem(&instance),
538523
BlockClass::newBlock(pos, entity.getDimensionId()),
539524
Number::newNumber(-1),
540525
FloatPos::newPos(pos, entity.getDimensionId())
541526
)) {
542-
return false;
527+
return InteractionResult{false, true};
543528
}
544529
}
545530
}
546531
IF_LISTENED_END(EVENT_TYPES::onUseBucketTake);
547-
return origin(item, entity, pos);
532+
return origin(instance, entity, pos, face, clickPos);
548533
}
549534

550535
LL_TYPE_INSTANCE_HOOK(ConsumeTotemHook, HookPriority::Normal, Player, &Player::$consumeTotem, bool) {
@@ -669,7 +654,7 @@ LL_TYPE_INSTANCE_HOOK(
669654
uchar face,
670655
std::optional<Vec3> hit
671656
) {
672-
if (!isServerThread() || (!isInteractiveBlock() && !mBlockType->isCraftingBlock())) {
657+
if (!isServerThread() || (!mBlockType->isInteractiveBlock() && !mBlockType->isCraftingBlock())) {
673658
return origin(player, pos, face, hit); // 提前把不可交互方块过滤掉
674659
}
675660
IF_LISTENED(EVENT_TYPES::onBlockInteracted) {
@@ -705,7 +690,7 @@ void SleepEvent() { static ll::memory::HookRegistrar<SleepHook> reg; }
705690
void OpenInventoryEvent() { static ll::memory::HookRegistrar<OpenInventoryHook> reg; }
706691
void PullFishingHookEvent() { static ll::memory::HookRegistrar<PullFishingHook> reg; }
707692
void UseBucketPlaceEvent() { static ll::memory::HookRegistrar<UseBucketPlaceHook> reg; }
708-
void UseBucketTakeEvent() { static ll::memory::HookRegistrar<UseBucketTakeHook1, UseBucketTakeHook2> reg; }
693+
void UseBucketTakeEvent() { static ll::memory::HookRegistrar<UseBucketTakeHook> reg; }
709694
void ConsumeTotemEvent() { static ll::memory::HookRegistrar<ConsumeTotemHook> reg; }
710695
void SetArmorEvent() { static ll::memory::HookRegistrar<SetArmorHook> reg; }
711696
void InteractEntityEvent() { static ll::memory::HookRegistrar<InteractEntityHook> reg; }

xmake.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ add_rules("mode.debug", "mode.release")
33
add_repositories("levimc-repo " .. (get_config("levimc_repo") or "https://github.com/LiteLDev/xmake-repo.git"))
44

55
if is_config("target_type", "server") then
6-
add_requires("levilamina 2bd38e02b2b57405d1258a639437d1df6539e47b", {configs = {target_type = "server"}})
6+
add_requires("levilamina 8d5a11d0b130e51332690daf127823be2c9c37e2", {configs = {target_type = "server"}})
77
else
8-
add_requires("levilamina 2bd38e02b2b57405d1258a639437d1df6539e47b", {configs = {target_type = "client"}})
8+
add_requires("levilamina 8d5a11d0b130e51332690daf127823be2c9c37e2", {configs = {target_type = "client"}})
99
end
1010

1111
add_requires("levibuildscript")
1212

13-
add_requires("legacyremotecall e0f51bba07a9764a6fc2a5291bf14845d5b55875", {configs = {target_type = get_config(target_type)}})
14-
add_requires("legacymoney 898b64eb5827e79476068cc012785ce7c0712e8c", {configs = {target_type = get_config(target_type)}})
13+
add_requires("legacyremotecall ffb8d2a1b8fe449e27b227195f435cc1957c3d5d", {configs = {target_type = get_config(target_type)}})
14+
add_requires("legacymoney c675888be1aba973f5b8f9cbd91a040d6cd243b7", {configs = {target_type = get_config(target_type)}})
1515

1616
add_requires(
1717
"lightwebsocketclient v1.0.3",

0 commit comments

Comments
 (0)