From d2e3636b20e7902eb84010c6701a147a8bc7b634 Mon Sep 17 00:00:00 2001 From: ShrBox Date: Sun, 5 Apr 2026 21:03:35 +0800 Subject: [PATCH 1/3] feat: support 26.10(WIP) --- src/legacy/api/BlockAPI.cpp | 55 ++++++++++++++++++++++------- src/legacy/api/BlockEntityAPI.cpp | 2 +- src/legacy/api/CommandAPI.cpp | 10 +++--- src/legacy/api/CommandOriginAPI.cpp | 2 +- src/legacy/api/CommandOutputAPI.cpp | 6 ++-- src/legacy/api/DeviceAPI.cpp | 2 +- src/legacy/api/EntityAPI.cpp | 7 ++-- src/legacy/api/NbtAPI.cpp | 22 ++++++------ src/legacy/api/NbtAPI.h | 22 ++++++------ src/legacy/api/PlayerAPI.cpp | 21 ++++++----- src/legacy/api/StructureAPI.cpp | 2 +- xmake.lua | 4 +-- 12 files changed, 92 insertions(+), 63 deletions(-) diff --git a/src/legacy/api/BlockAPI.cpp b/src/legacy/api/BlockAPI.cpp index 6e9b6ad..c3cc24b 100644 --- a/src/legacy/api/BlockAPI.cpp +++ b/src/legacy/api/BlockAPI.cpp @@ -10,12 +10,12 @@ #include "ll/api/service/Bedrock.h" #include "lse/api/helper/BlockHelper.h" #include "mc/deps/core/utility/optional_ref.h" +#include "mc/deps/shared_types/v1_26_0/block/LiquidReaction.h" #include "mc/world/level/BlockSource.h" #include "mc/world/level/ChunkBlockPos.h" #include "mc/world/level/block/BedrockBlockNames.h" #include "mc/world/level/block/Block.h" #include "mc/world/level/block/BlockChangeContext.h" -#include "mc/world/level/block/LiquidReaction.h" #include "mc/world/level/block/VanillaBlockTags.h" #include "mc/world/level/block/actor/BlockActor.h" #include "mc/world/level/block/block_serialization_utils/BlockSerializationUtils.h" @@ -281,7 +281,7 @@ Local BlockClass::isUnbreakable() const { Local BlockClass::isWaterBlockingBlock() const { try { return Boolean::newBoolean( - block->mDirectData->mWaterDetectionRule->mOnLiquidTouches == LiquidReaction::Blocking + block->mDirectData->mWaterDetectionRule->mOnLiquidTouches == SharedTypes::v1_26_0::LiquidReaction::Blocking ); } CATCH_AND_THROW @@ -308,7 +308,14 @@ Local BlockClass::setNbt(Arguments const& args) { ->getDimension(blockPos.dim) .lock() ->getBlockSourceFromMainChunkSource() - .setBlock(blockPos.getBlockPos(), *bl, 3, nullptr, nullptr, BlockChangeContext(false)); + .setBlock( + blockPos.getBlockPos(), + *bl, + 3, + nullptr, + nullptr, + BlockChangeContext(StatelessBlockChangeContext::Commands) + ); } preloadData(blockPos.getBlockPos(), blockPos.getDimensionId()); return Boolean::newBoolean(true); @@ -381,7 +388,8 @@ Local BlockClass::removeBlockEntity(Arguments const&) const { ->getDimension(blockPos.dim) .lock() ->getBlockSourceFromMainChunkSource() - .removeBlockEntity(blockPos.getBlockPos()) + .getChunkAt(blockPos.getBlockPos()) + ->removeBlockEntity(blockPos.getBlockPos()) != nullptr ); } @@ -398,8 +406,12 @@ Local BlockClass::destroyBlock(Arguments const& args) const { BlockSource& bl = ll::service::getLevel()->getDimension(blockPos.dim).lock()->getBlockSourceFromMainChunkSource(); return Boolean::newBoolean( - ll::service::getLevel() - ->destroyBlock(bl, blockPos.getBlockPos(), args[0].asBoolean().value(), BlockChangeContext(false)) + ll::service::getLevel()->destroyBlock( + bl, + blockPos.getBlockPos(), + args[0].asBoolean().value(), + BlockChangeContext(StatelessBlockChangeContext::Commands) + ) ); } CATCH_AND_THROW @@ -525,9 +537,14 @@ Local McClass::setBlock(Arguments const& args) { } BlockSource& bs = ll::service::getLevel()->getDimension(pos.dim).lock()->getBlockSourceFromMainChunkSource(); - return Boolean::newBoolean( - bs.setBlock(pos.getBlockPos(), bl, 3, nullptr, nullptr, BlockChangeContext(false)) - ); + return Boolean::newBoolean(bs.setBlock( + pos.getBlockPos(), + bl, + 3, + nullptr, + nullptr, + BlockChangeContext(StatelessBlockChangeContext::Commands) + )); } if (IsInstanceOf(block)) { // Nbt @@ -538,9 +555,14 @@ Local McClass::setBlock(Arguments const& args) { } BlockSource& bs = ll::service::getLevel()->getDimension(pos.dim).lock()->getBlockSourceFromMainChunkSource(); - return Boolean::newBoolean( - bs.setBlock(pos.getBlockPos(), bl, 3, nullptr, nullptr, BlockChangeContext(false)) - ); + return Boolean::newBoolean(bs.setBlock( + pos.getBlockPos(), + bl, + 3, + nullptr, + nullptr, + BlockChangeContext(StatelessBlockChangeContext::Commands) + )); } // other block object Block const* bl = BlockClass::extract(block); @@ -548,7 +570,14 @@ Local McClass::setBlock(Arguments const& args) { throw WrongArgTypeException(__FUNCTION__); } BlockSource& bs = ll::service::getLevel()->getDimension(pos.dim).lock()->getBlockSourceFromMainChunkSource(); - return Boolean::newBoolean(bs.setBlock(pos.getBlockPos(), *bl, 3, nullptr, nullptr, BlockChangeContext(false))); + return Boolean::newBoolean(bs.setBlock( + pos.getBlockPos(), + *bl, + 3, + nullptr, + nullptr, + BlockChangeContext(StatelessBlockChangeContext::Commands) + )); } CATCH_AND_THROW } diff --git a/src/legacy/api/BlockEntityAPI.cpp b/src/legacy/api/BlockEntityAPI.cpp index 01960a3..c61dbcf 100644 --- a/src/legacy/api/BlockEntityAPI.cpp +++ b/src/legacy/api/BlockEntityAPI.cpp @@ -7,7 +7,7 @@ #include "ll/api/service/Bedrock.h" #include "lse/api/MoreGlobal.h" #include "mc/dataloadhelper/DefaultDataLoadHelper.h" -#include "mc/nbt/CompoundTag.h" +#include "mc/deps/nbt/CompoundTag.h" #include "mc/world/item/SaveContextFactory.h" #include "mc/world/level/BlockSource.h" #include "mc/world/level/block/actor/BlockActor.h" diff --git a/src/legacy/api/CommandAPI.cpp b/src/legacy/api/CommandAPI.cpp index 215dd2d..511b385 100644 --- a/src/legacy/api/CommandAPI.cpp +++ b/src/legacy/api/CommandAPI.cpp @@ -122,7 +122,7 @@ Local convertResult(ParamStorageType const& result, CommandOrigin const& auto dim = origin.getDimension(); return IntPos::newPos( std::get(result.value()) - .getBlockPos(CommandVersion::CurrentVersion(), origin, Vec3::ZERO()), + .getBlockPos(static_cast(CurrentCmdVersion::Latest), origin, Vec3::ZERO()), dim ? dim->getDimensionId().id : -1 ); } @@ -130,14 +130,14 @@ Local convertResult(ParamStorageType const& result, CommandOrigin const& auto dim = origin.getDimension(); return FloatPos::newPos( std::get(result.value()) - .getPosition(CommandVersion::CurrentVersion(), origin, Vec3::ZERO()), + .getPosition(static_cast(CurrentCmdVersion::Latest), origin, Vec3::ZERO()), dim ? dim->getDimensionId().id : -1 ); } if (result.hold(ParamKind::Kind::Message)) { return String::newString( std::get(result.value()) - .generateMessage(origin, CommandVersion::CurrentVersion()) + .generateMessage(origin, static_cast(CurrentCmdVersion::Latest)) .mMessage->c_str() ); } @@ -199,7 +199,7 @@ Local McClass::runcmd(Arguments const& args) { CommandPermissionLevel::Owner, 0 ), - CommandVersion::CurrentVersion() + static_cast(CurrentCmdVersion::Latest) ); try { return Boolean::newBoolean(ll::service::getMinecraft()->mCommands->executeCommand(context, false).mSuccess); @@ -217,7 +217,7 @@ Local McClass::runcmdEx(Arguments const& args) { auto command = ll::service::getMinecraft()->mCommands->compileCommand( args[0].asString().toString(), origin, - static_cast(CommandVersion::CurrentVersion()), + static_cast(static_cast(CurrentCmdVersion::Latest)), [&](std::string const& err) { outputStr.append(err).append("\n"); } ); Local resObj = Object::newObject(); diff --git a/src/legacy/api/CommandOriginAPI.cpp b/src/legacy/api/CommandOriginAPI.cpp index 2b5dd0d..26a28e9 100644 --- a/src/legacy/api/CommandOriginAPI.cpp +++ b/src/legacy/api/CommandOriginAPI.cpp @@ -6,7 +6,7 @@ #include "legacy/api/NbtAPI.h" #include "legacy/api/PlayerAPI.h" #include "magic_enum.hpp" -#include "mc/nbt/CompoundTag.h" +#include "mc/deps/nbt/CompoundTag.h" #include "mc/server/commands/CommandOriginType.h" #include "mc/world/actor/player/Player.h" #include "mc/world/level/dimension/Dimension.h" diff --git a/src/legacy/api/CommandOutputAPI.cpp b/src/legacy/api/CommandOutputAPI.cpp index eda5c30..4d7994b 100644 --- a/src/legacy/api/CommandOutputAPI.cpp +++ b/src/legacy/api/CommandOutputAPI.cpp @@ -69,7 +69,7 @@ Local CommandOutputClass::success(Arguments const& args) { std::vector param{}; auto paramArr = args[1].asArray(); for (int i = 0; i < paramArr.size(); ++i) { - param.push_back(CommandOutputParameter(paramArr.get(i).asString().toString().c_str())); + param.push_back(CommandOutputParameter({paramArr.get(i).asString().toString()})); } get()->success(msg, param); send(); @@ -91,7 +91,7 @@ Local CommandOutputClass::addMessage(Arguments const& args) { std::vector param{}; auto paramArr = args[1].asArray(); for (int i = 0; i < paramArr.size(); ++i) { - param.push_back(CommandOutputParameter(paramArr.get(i).asString().toString().c_str())); + param.push_back(CommandOutputParameter({paramArr.get(i).asString().toString()})); } if (args.size() >= 3) { CHECK_ARG_TYPE(args[2], ValueKind::kNumber); @@ -120,7 +120,7 @@ Local CommandOutputClass::error(Arguments const& args) { std::vector param{}; auto paramArr = args[1].asArray(); for (int i = 0; i < paramArr.size(); ++i) { - param.push_back(CommandOutputParameter(paramArr.get(i).asString().toString().c_str())); + param.push_back(CommandOutputParameter({paramArr.get(i).asString().toString()})); } get()->error(msg, param); send(); diff --git a/src/legacy/api/DeviceAPI.cpp b/src/legacy/api/DeviceAPI.cpp index a7ca6b3..ed8c5ea 100644 --- a/src/legacy/api/DeviceAPI.cpp +++ b/src/legacy/api/DeviceAPI.cpp @@ -3,7 +3,7 @@ #include "legacy/api/APIHelp.h" #include "ll/api/service/Bedrock.h" #include "magic_enum.hpp" -#include "mc/certificates/WebToken.h" +#include "mc/deps/certificates/WebToken.h" #include "mc/deps/input/InputMode.h" #include "mc/deps/json/Value.h" #include "mc/legacy/ActorRuntimeID.h" diff --git a/src/legacy/api/EntityAPI.cpp b/src/legacy/api/EntityAPI.cpp index 43b9ab0..e80fe04 100644 --- a/src/legacy/api/EntityAPI.cpp +++ b/src/legacy/api/EntityAPI.cpp @@ -13,6 +13,7 @@ #include "lse/api/MoreGlobal.h" #include "lse/api/helper/AttributeHelper.h" #include "mc/deps/core/math/Vec2.h" +#include "mc/deps/nbt/CompoundTag.h" #include "mc/deps/shared_types/legacy/actor/ActorDamageCause.h" #include "mc/deps/vanilla_components/ActorDataFlagComponent.h" #include "mc/deps/vanilla_components/StateVectorComponent.h" @@ -23,13 +24,13 @@ #include "mc/entity/utilities/ActorMobilityUtils.h" #include "mc/legacy/ActorRuntimeID.h" #include "mc/legacy/ActorUniqueID.h" -#include "mc/nbt/CompoundTag.h" #include "mc/server/commands/CommandUtils.h" #include "mc/util/BlockUtils.h" #include "mc/world/SimpleContainer.h" #include "mc/world/actor/ActorDamageByActorSource.h" #include "mc/world/actor/ActorDamageSource.h" #include "mc/world/actor/ActorDefinitionIdentifier.h" +#include "mc/world/actor/ActorHurtResult.h" #include "mc/world/actor/ActorType.h" #include "mc/world/actor/Mob.h" #include "mc/world/actor/item/ItemActor.h" @@ -636,7 +637,7 @@ Local EntityClass::getDirection() const { if (!entity) return {}; // getRotation() - Vec2 const vec = entity->mBuiltInComponents->mActorRotationComponent->mRotationDegree; + Vec2 const vec = entity->mBuiltInComponents->mActorRotationComponent->mRot; return DirectionAngle::newAngle(vec.x, vec.y); } CATCH_AND_THROW @@ -694,7 +695,7 @@ Local EntityClass::teleport(Arguments const& args) const { } if (!rotationIsValid) { // getRotation() - ang = entity->mBuiltInComponents->mActorRotationComponent->mRotationDegree; + ang = entity->mBuiltInComponents->mActorRotationComponent->mRot; } entity->teleport(pos.getVec3(), pos.dim, ang); return Boolean::newBoolean(true); diff --git a/src/legacy/api/NbtAPI.cpp b/src/legacy/api/NbtAPI.cpp index b507a4a..8bf180e 100644 --- a/src/legacy/api/NbtAPI.cpp +++ b/src/legacy/api/NbtAPI.cpp @@ -2,17 +2,17 @@ #include "legacy/api/APIHelp.h" #include "ll/api/utils/Base64Utils.h" -#include "mc/nbt/ByteArrayTag.h" -#include "mc/nbt/ByteTag.h" -#include "mc/nbt/CompoundTag.h" -#include "mc/nbt/DoubleTag.h" -#include "mc/nbt/EndTag.h" -#include "mc/nbt/FloatTag.h" -#include "mc/nbt/Int64Tag.h" -#include "mc/nbt/IntTag.h" -#include "mc/nbt/ListTag.h" -#include "mc/nbt/ShortTag.h" -#include "mc/nbt/StringTag.h" +#include "mc/deps/nbt/ByteArrayTag.h" +#include "mc/deps/nbt/ByteTag.h" +#include "mc/deps/nbt/CompoundTag.h" +#include "mc/deps/nbt/DoubleTag.h" +#include "mc/deps/nbt/EndTag.h" +#include "mc/deps/nbt/FloatTag.h" +#include "mc/deps/nbt/Int64Tag.h" +#include "mc/deps/nbt/IntTag.h" +#include "mc/deps/nbt/ListTag.h" +#include "mc/deps/nbt/ShortTag.h" +#include "mc/deps/nbt/StringTag.h" #include #include diff --git a/src/legacy/api/NbtAPI.h b/src/legacy/api/NbtAPI.h index d278128..09a10e3 100644 --- a/src/legacy/api/NbtAPI.h +++ b/src/legacy/api/NbtAPI.h @@ -1,16 +1,16 @@ #pragma once #include "legacy/api/APIHelp.h" -#include "mc/nbt/ByteArrayTag.h" -#include "mc/nbt/DoubleTag.h" -#include "mc/nbt/Tag.h" - -#include -#include -#include -#include -#include -#include -#include +#include "mc/deps/nbt/ByteArrayTag.h" +#include "mc/deps/nbt/DoubleTag.h" +#include "mc/deps/nbt/Tag.h" + +#include +#include +#include +#include +#include +#include +#include #include // NBT Static diff --git a/src/legacy/api/PlayerAPI.cpp b/src/legacy/api/PlayerAPI.cpp index 3ebd483..cff27fd 100644 --- a/src/legacy/api/PlayerAPI.cpp +++ b/src/legacy/api/PlayerAPI.cpp @@ -33,6 +33,9 @@ #include "lse/api/helper/ScoreboardHelper.h" #include "mc/deps/core/math/Vec2.h" #include "mc/deps/core/utility/MCRESULT.h" +#include "mc/deps/nbt/CompoundTag.h" +#include "mc/deps/nbt/ListTag.h" +#include "mc/deps/nbt/StringTag.h" #include "mc/entity/components/ActorRotationComponent.h" #include "mc/entity/components/AttributesComponent.h" #include "mc/entity/components/InsideBlockComponent.h" @@ -41,9 +44,6 @@ #include "mc/entity/utilities/ActorMobilityUtils.h" #include "mc/legacy/ActorRuntimeID.h" #include "mc/legacy/ActorUniqueID.h" -#include "mc/nbt/CompoundTag.h" -#include "mc/nbt/ListTag.h" -#include "mc/nbt/StringTag.h" #include "mc/network/ConnectionRequest.h" #include "mc/network/MinecraftPacketIds.h" #include "mc/network/MinecraftPackets.h" @@ -66,7 +66,6 @@ #include "mc/server/NetworkChunkPublisher.h" #include "mc/server/ServerPlayer.h" #include "mc/server/commands/CommandContext.h" -#include "mc/server/commands/CommandVersion.h" #include "mc/server/commands/MinecraftCommands.h" #include "mc/server/commands/PlayerCommandOrigin.h" #include "mc/util/BlockUtils.h" @@ -75,6 +74,7 @@ #include "mc/world/Minecraft.h" #include "mc/world/actor/Actor.h" #include "mc/world/actor/ActorDamageByActorSource.h" +#include "mc/world/actor/ActorHurtResult.h" #include "mc/world/actor/ai/util/BossBarColor.h" #include "mc/world/actor/ai/util/BossEventUpdateType.h" #include "mc/world/actor/player/Inventory.h" @@ -87,7 +87,6 @@ #include "mc/world/attribute/Attribute.h" #include "mc/world/attribute/AttributeInstance.h" #include "mc/world/attribute/AttributeInstanceConstRef.h" -#include "mc/world/attribute/AttributeInstanceHandle.h" // IWYU pragma: keep #include "mc/world/attribute/AttributeInstanceRef.h" #include "mc/world/attribute/SharedAttributes.h" #include "mc/world/effect/EffectDuration.h" @@ -1042,7 +1041,7 @@ Local PlayerClass::getDirection() const { if (!player) return {}; // getRotation() - Vec2 vec = player->mBuiltInComponents->mActorRotationComponent->mRotationDegree; + Vec2 vec = player->mBuiltInComponents->mActorRotationComponent->mRot; return DirectionAngle::newAngle(vec.x, vec.y); } CATCH_AND_THROW @@ -1519,7 +1518,7 @@ Local PlayerClass::teleport(Arguments const& args) const { throw WrongArgTypeException(__FUNCTION__); } if (!rotationIsValid) { - angle = player->mBuiltInComponents->mActorRotationComponent->mRotationDegree; + angle = player->mBuiltInComponents->mActorRotationComponent->mRot; } player->teleport(pos.getVec3(), pos.dim, angle); return Boolean::newBoolean(true); @@ -1611,7 +1610,7 @@ Local PlayerClass::runcmd(Arguments const& args) const { CommandContext context = CommandContext( args[0].asString().toString(), std::make_unique(ll::service::getLevel(), player->getOrCreateUniqueID()), - CommandVersion::CurrentVersion() + static_cast(CurrentCmdVersion::Latest) ); ll::service::getMinecraft()->mCommands->executeCommand(context, false); return Boolean::newBoolean(true); @@ -3290,9 +3289,9 @@ Local PlayerClass::getAttributes(Arguments const&) const { player->save(tag); try { Local arr = Array::newArray(); - tag.at("Attributes").get().forEachCompoundTag([&](CompoundTag const& tagP) { - arr.add(Tag2Value(&const_cast(tagP), true)); - }); + for (auto& tagP : tag.at("Attributes").get()) { + arr.add(Tag2Value(tagP.get(), true)); + } return arr; } catch (...) { return Array::newArray(); diff --git a/src/legacy/api/StructureAPI.cpp b/src/legacy/api/StructureAPI.cpp index 888a42d..9f7f308 100644 --- a/src/legacy/api/StructureAPI.cpp +++ b/src/legacy/api/StructureAPI.cpp @@ -3,7 +3,7 @@ #include "legacy/api/McAPI.h" #include "legacy/api/NbtAPI.h" #include "ll/api/service/Bedrock.h" -#include "mc/nbt/CompoundTag.h" +#include "mc/deps/nbt/CompoundTag.h" #include "mc/world/level/dimension/Dimension.h" #include "mc/world/level/levelgen/structure/BoundingBox.h" #include "mc/world/level/levelgen/structure/StructureTemplate.h" diff --git a/xmake.lua b/xmake.lua index 8cead55..d8cb772 100644 --- a/xmake.lua +++ b/xmake.lua @@ -3,9 +3,9 @@ add_rules("mode.debug", "mode.release") add_repositories("levimc-repo " .. (get_config("levimc_repo") or "https://github.com/LiteLDev/xmake-repo.git")) if is_config("target_type", "server") then - add_requires("levilamina 1.9.8", {configs = {target_type = "server"}}) + add_requires("levilamina 3b4b0ddf0405e27c37b09dc574724c96783d7c55", {configs = {target_type = "server"}}) else - add_requires("levilamina 1.9.8", {configs = {target_type = "client"}}) + add_requires("levilamina 3b4b0ddf0405e27c37b09dc574724c96783d7c55", {configs = {target_type = "client"}}) end add_requires("levibuildscript") From fb127b4875b31d687f25b95bd5bcaae2ad6a70fc Mon Sep 17 00:00:00 2001 From: ShrBox Date: Mon, 6 Apr 2026 17:06:37 +0800 Subject: [PATCH 2/3] feat: support 26.10 --- src/legacy/api/EntityAPI.cpp | 3 +- src/legacy/api/ItemAPI.cpp | 6 ++-- src/legacy/api/PlayerAPI.cpp | 2 +- src/legacy/api/ServerAPI.cpp | 9 ++--- src/legacy/api/SimulatedPlayerAPI.cpp | 4 ++- src/lse/api/NetworkPacket.h | 20 +++++------ src/lse/events/BlockEvents.cpp | 50 +++++++-------------------- src/lse/events/EntityEvents.cpp | 7 ++-- src/lse/events/PlayerEvents.cpp | 6 ++-- xmake.lua | 7 ++-- 10 files changed, 45 insertions(+), 69 deletions(-) diff --git a/src/legacy/api/EntityAPI.cpp b/src/legacy/api/EntityAPI.cpp index e80fe04..ba537af 100644 --- a/src/legacy/api/EntityAPI.cpp +++ b/src/legacy/api/EntityAPI.cpp @@ -968,8 +968,7 @@ Local EntityClass::hurt(Arguments const& args) const { ActorDamageByActorSource(*source, static_cast(type)); return Boolean::newBoolean(entity->_hurt(damageBySource, damage, true, false)); } - ActorDamageSource damageSource; - damageSource.mCause = static_cast(type); + ActorDamageSource damageSource(static_cast(type), {}); return Boolean::newBoolean(entity->_hurt(damageSource, damage, true, false)); } CATCH_AND_THROW diff --git a/src/legacy/api/ItemAPI.cpp b/src/legacy/api/ItemAPI.cpp index d2652e2..9f4c990 100644 --- a/src/legacy/api/ItemAPI.cpp +++ b/src/legacy/api/ItemAPI.cpp @@ -407,8 +407,10 @@ Local ItemClass::setDisplayName(Arguments const& args) const { CHECK_ARG_TYPE(args[0], ValueKind::kString); try { - Bedrock::Safety::RedactableString redactableString; - redactableString.mUnredactedString = args[0].asString().toString(); + Bedrock::Safety::RedactableString redactableString( + args[0].asString().toString(), + args[0].asString().toString() + ); get()->setCustomName(redactableString); return Boolean::newBoolean(true); } diff --git a/src/legacy/api/PlayerAPI.cpp b/src/legacy/api/PlayerAPI.cpp index cff27fd..405386b 100644 --- a/src/legacy/api/PlayerAPI.cpp +++ b/src/legacy/api/PlayerAPI.cpp @@ -2748,7 +2748,7 @@ Local PlayerClass::hurt(Arguments const& args) const { ActorDamageByActorSource(*source, static_cast(type)); return Boolean::newBoolean(player->_hurt(damageBySource, damage, true, false)); } - ActorDamageSource damageSource; + ActorDamageSource damageSource(static_cast(type), {}); damageSource.mCause = static_cast(type); return Boolean::newBoolean(player->_hurt(damageSource, damage, true, false)); } diff --git a/src/legacy/api/ServerAPI.cpp b/src/legacy/api/ServerAPI.cpp index fc3fa99..2c416e1 100644 --- a/src/legacy/api/ServerAPI.cpp +++ b/src/legacy/api/ServerAPI.cpp @@ -34,13 +34,8 @@ Local McClass::setMaxNumPlayers(Arguments const& args) { int activePlayerCount = handler->_getActiveAndInProgressPlayerCount(mce::UUID::EMPTY()); bool result = true; - if (maxPlayers <= SharedConstants::NetworkDefaultMaxConnections()) { - if (maxPlayers < activePlayerCount) { - maxPlayers = activePlayerCount; - result = false; - } - } else { - maxPlayers = SharedConstants::NetworkDefaultMaxConnections(); + if (maxPlayers < activePlayerCount) { + maxPlayers = activePlayerCount; result = false; } diff --git a/src/legacy/api/SimulatedPlayerAPI.cpp b/src/legacy/api/SimulatedPlayerAPI.cpp index 97dae1f..559f3ce 100644 --- a/src/legacy/api/SimulatedPlayerAPI.cpp +++ b/src/legacy/api/SimulatedPlayerAPI.cpp @@ -14,6 +14,8 @@ #include "mc/server/SimulatedPlayer.h" #include "mc/server/sim/LookDuration.h" #include "mc/world/actor/Actor.h" +#include "mc/world/actor/ActorHurtResult.h" +#include "mc/world/gamemode/InteractionResult.h" #include "mc/world/level/dimension/Dimension.h" #include @@ -166,7 +168,7 @@ Local PlayerClass::simulateInteract(Arguments const& args) { if (args.size() == 0) return Boolean::newBoolean(sp->simulateInteract()); if (auto actor = EntityClass::tryExtractActor(args[0])) { - return Boolean::newBoolean(sp->isAlive() && sp->interact(*actor, Vec3::ZERO())); + return Boolean::newBoolean(sp->isAlive() && sp->interact(*actor, Vec3::ZERO()).mSuccess); } int dimid = sp->getDimensionId().id; diff --git a/src/lse/api/NetworkPacket.h b/src/lse/api/NetworkPacket.h index a9d46f6..ed0e7bc 100644 --- a/src/lse/api/NetworkPacket.h +++ b/src/lse/api/NetworkPacket.h @@ -15,23 +15,21 @@ class NetworkPacket final : public Packet { public: NetworkPacket(std::string data) : mData(std::move(data)) {} - NetworkPacket() = default; - NetworkPacket(NetworkPacket&&) = default; - auto operator=(NetworkPacket&&) -> NetworkPacket& = default; - ~NetworkPacket() override = default; + NetworkPacket() = default; + NetworkPacket(NetworkPacket&&) = default; + NetworkPacket& operator=(NetworkPacket&&) = default; + ~NetworkPacket() override = default; - NetworkPacket(NetworkPacket const&) = delete; - auto operator=(NetworkPacket const&) -> NetworkPacket& = delete; + NetworkPacket(NetworkPacket const&) = delete; + NetworkPacket& operator=(NetworkPacket const&) = delete; - [[nodiscard]] auto getId() const -> MinecraftPacketIds override { return packetId; } + [[nodiscard]] MinecraftPacketIds getId() const override { return packetId; } - [[nodiscard]] auto getName() const -> std::string override { return "NetworkPacket"; } + [[nodiscard]] std::string_view getName() const override { return "NetworkPacket"; } void write(BinaryStream& stream) const override { stream.mBuffer.append(mData); } - auto _read(class ReadOnlyBinaryStream& /*stream*/) -> Bedrock::Result override { - return Bedrock::Result{}; - } + Bedrock::Result _read(class ReadOnlyBinaryStream& /*stream*/) override { return Bedrock::Result{}; } private: std::string mData; diff --git a/src/lse/events/BlockEvents.cpp b/src/lse/events/BlockEvents.cpp index bef4262..0f63cf3 100644 --- a/src/lse/events/BlockEvents.cpp +++ b/src/lse/events/BlockEvents.cpp @@ -331,29 +331,6 @@ RedstoneUpdateEvent(BlockSource const& region, BlockPos const& pos, int const& s return true; } -#define REDSTONE_EVNET_HOOK_OLD(BLOCK) \ - LL_TYPE_INSTANCE_HOOK( \ - BLOCK##Hook, \ - HookPriority::Normal, \ - BLOCK, \ - &BLOCK::$onRedstoneUpdate, \ - void, \ - BlockSource& region, \ - BlockPos const& pos, \ - int strength, \ - bool isFirstTime \ - ) { \ - IF_LISTENED(EVENT_TYPES::onRedStoneUpdate) { \ - if (checkClientIsServerThread()) { \ - if (!RedstoneUpdateEvent(region, pos, strength, isFirstTime)) { \ - return; \ - } \ - } \ - } \ - IF_LISTENED_END(EVENT_TYPES::onRedStoneUpdate); \ - origin(region, pos, strength, isFirstTime); \ - } - #define REDSTONE_EVNET_HOOK_1(BLOCK) \ LL_TYPE_INSTANCE_HOOK( \ BLOCK##Hook, \ @@ -404,24 +381,23 @@ RedstoneUpdateEvent(BlockSource const& region, BlockPos const& pos, int const& s origin(blockEvent); \ } -REDSTONE_EVNET_HOOK_OLD(HopperBlock) -REDSTONE_EVNET_HOOK_OLD(CrafterBlock) -REDSTONE_EVNET_HOOK_OLD(CommandBlock) -REDSTONE_EVNET_HOOK_OLD(BigDripleafBlock) -REDSTONE_EVNET_HOOK_OLD(CopperBulbBlock) -REDSTONE_EVNET_HOOK_OLD(DoorBlock) -REDSTONE_EVNET_HOOK_OLD(FenceGateBlock) -REDSTONE_EVNET_HOOK_OLD(DispenserBlock) -REDSTONE_EVNET_HOOK_OLD(StructureBlock) -REDSTONE_EVNET_HOOK_OLD(TrapDoorBlock) -REDSTONE_EVNET_HOOK_OLD(NoteBlock) -REDSTONE_EVNET_HOOK_OLD(RedstoneLampBlock) -REDSTONE_EVNET_HOOK_OLD(TntBlock) - REDSTONE_EVNET_HOOK_1(BaseRailBlock) REDSTONE_EVNET_HOOK_1(PoweredRailBlock) REDSTONE_EVNET_HOOK_1(ActivatorRailBlock) +REDSTONE_EVNET_HOOK_2(HopperBlock) +REDSTONE_EVNET_HOOK_2(CrafterBlock) +REDSTONE_EVNET_HOOK_2(CommandBlock) +REDSTONE_EVNET_HOOK_2(BigDripleafBlock) +REDSTONE_EVNET_HOOK_2(CopperBulbBlock) +REDSTONE_EVNET_HOOK_2(DoorBlock) +REDSTONE_EVNET_HOOK_2(FenceGateBlock) +REDSTONE_EVNET_HOOK_2(DispenserBlock) +REDSTONE_EVNET_HOOK_2(StructureBlock) +REDSTONE_EVNET_HOOK_2(TrapDoorBlock) +REDSTONE_EVNET_HOOK_2(NoteBlock) +REDSTONE_EVNET_HOOK_2(RedstoneLampBlock) +REDSTONE_EVNET_HOOK_2(TntBlock) REDSTONE_EVNET_HOOK_2(RedStoneWireBlock) REDSTONE_EVNET_HOOK_2(RedstoneTorchBlock) REDSTONE_EVNET_HOOK_2(ComparatorBlock) diff --git a/src/lse/events/EntityEvents.cpp b/src/lse/events/EntityEvents.cpp index da35eaf..5f00023 100644 --- a/src/lse/events/EntityEvents.cpp +++ b/src/lse/events/EntityEvents.cpp @@ -16,6 +16,7 @@ #include "mc/legacy/ActorUniqueID.h" #include "mc/world/actor/ActorDamageSource.h" #include "mc/world/actor/ActorDefinitionIdentifier.h" +#include "mc/world/actor/ActorHurtResult.h" #include "mc/world/actor/ActorType.h" #include "mc/world/actor/Mob.h" #include "mc/world/actor/VanillaActorRendererId.h" @@ -55,7 +56,7 @@ LL_TYPE_INSTANCE_HOOK( IF_LISTENED(EVENT_TYPES::onSpawnProjectile) { if (checkClientIsServerThread()) { static auto& tridentName = EntityCanonicalName(ActorType::Trident); - if (id.mCanonicalName != tridentName) { + if (*id.mCanonicalName != tridentName) { if (!CallEvent( EVENT_TYPES::onSpawnProjectile, EntityClass::newEntity(spawner), @@ -252,7 +253,7 @@ LL_TYPE_INSTANCE_HOOK( HookPriority::Normal, Mob, &Mob::$_hurt, - bool, + ActorHurtResult, ::ActorDamageSource const& source, float damage, bool knock, @@ -277,7 +278,7 @@ LL_TYPE_INSTANCE_HOOK( Number::newNumber(damage < 0.0f ? -damage : damage), Number::newNumber(static_cast(source.mCause)) )) { - return false; + return {false, false}; } } } diff --git a/src/lse/events/PlayerEvents.cpp b/src/lse/events/PlayerEvents.cpp index e3dd772..a367d5b 100644 --- a/src/lse/events/PlayerEvents.cpp +++ b/src/lse/events/PlayerEvents.cpp @@ -13,6 +13,7 @@ #include "mc/server/ServerPlayer.h" #include "mc/server/module/VanillaServerGameplayEventListener.h" #include "mc/world/ContainerID.h" +#include "mc/world/actor/ActorHurtResult.h" #include "mc/world/actor/ActorType.h" #include "mc/world/actor/FishingHook.h" #include "mc/world/actor/item/ItemActor.h" @@ -23,6 +24,7 @@ #include "mc/world/effect/MobEffectInstance.h" #include "mc/world/events/EventResult.h" #include "mc/world/events/PlayerOpenContainerEvent.h" +#include "mc/world/gamemode/InteractionResult.h" #include "mc/world/inventory/network/ItemStackNetManagerBase.h" #include "mc/world/inventory/transaction/ComplexInventoryTransaction.h" #include "mc/world/inventory/transaction/InventoryAction.h" @@ -584,7 +586,7 @@ LL_TYPE_INSTANCE_HOOK( HookPriority::Normal, Player, &Player::interact, - bool, + InteractionResult, Actor& actor, Vec3 const& location ) { @@ -596,7 +598,7 @@ LL_TYPE_INSTANCE_HOOK( EntityClass::newEntity(&actor), FloatPos::newPos(location, getDimensionId().id) )) { - return false; + return {false, true}; } } } diff --git a/xmake.lua b/xmake.lua index d8cb772..dd5c1f0 100644 --- a/xmake.lua +++ b/xmake.lua @@ -3,16 +3,17 @@ add_rules("mode.debug", "mode.release") add_repositories("levimc-repo " .. (get_config("levimc_repo") or "https://github.com/LiteLDev/xmake-repo.git")) if is_config("target_type", "server") then - add_requires("levilamina 3b4b0ddf0405e27c37b09dc574724c96783d7c55", {configs = {target_type = "server"}}) + add_requires("levilamina 1312818717e46c0f788f0c9409003e08f6e45e1f", {configs = {target_type = "server"}}) else - add_requires("levilamina 3b4b0ddf0405e27c37b09dc574724c96783d7c55", {configs = {target_type = "client"}}) + add_requires("levilamina 1312818717e46c0f788f0c9409003e08f6e45e1f", {configs = {target_type = "client"}}) end add_requires("levibuildscript") +add_requires("legacyremotecall b8bf79f92e1ef3ede108be7bdc881048b4ef929f", {configs = {target_type = get_config(target_type)}}) + add_requires( "legacymoney 0.10.0", - "legacyremotecall 0.17.2", "lightwebsocketclient 1.0.1", "magic_enum v0.9.7", "nlohmann_json v3.11.3", From 834ecc731dcd439d1f560b01a8ee5941323422a5 Mon Sep 17 00:00:00 2001 From: ShrBox Date: Tue, 7 Apr 2026 14:05:13 +0800 Subject: [PATCH 3/3] fix: fix server side compilation --- src/legacy/api/BaseAPI.cpp | 8 ++++---- src/legacy/api/EntityAPI.cpp | 7 +++++-- src/legacy/api/ItemAPI.cpp | 2 +- src/legacy/api/PlayerAPI.cpp | 8 ++++++-- xmake.lua | 8 ++++---- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/legacy/api/BaseAPI.cpp b/src/legacy/api/BaseAPI.cpp index 9a4ba59..2dad476 100644 --- a/src/legacy/api/BaseAPI.cpp +++ b/src/legacy/api/BaseAPI.cpp @@ -3,11 +3,11 @@ #include "legacy/api/APIHelp.h" #include "legacy/api/McAPI.h" #include "legacy/main/Global.h" +#include "ll/api/Versions.h" #include "mc/common/Common.h" #include "mc/common/SharedConstants.h" - -#include -#include +#include "mc/world/actor/ActorDamageSource.h" +#include "mc/world/level/BlockSource.h" ///////////////////// Enum ////////////////////// ClassDefine DamageCauseEnumBuilder = @@ -240,7 +240,7 @@ Local McClass::getBDSVersion(Arguments const&) { Local McClass::getServerProtocolVersion(Arguments const&) { try { - return Number::newNumber(SharedConstants::NetworkProtocolVersion()); + return Number::newNumber(ll::getNetworkProtocolVersion()); } CATCH_AND_THROW } diff --git a/src/legacy/api/EntityAPI.cpp b/src/legacy/api/EntityAPI.cpp index ba537af..36b4afd 100644 --- a/src/legacy/api/EntityAPI.cpp +++ b/src/legacy/api/EntityAPI.cpp @@ -21,6 +21,7 @@ #include "mc/entity/components/InsideBlockComponent.h" #include "mc/entity/components/IsOnHotBlockFlagComponent.h" #include "mc/entity/components/TagsComponent.h" +#include "mc/entity/components/WasInWaterFlagComponent.h" #include "mc/entity/utilities/ActorMobilityUtils.h" #include "mc/legacy/ActorRuntimeID.h" #include "mc/legacy/ActorUniqueID.h" @@ -528,7 +529,9 @@ Local EntityClass::getInAir() const { Actor const* entity = get(); if (!entity) return {}; - return Boolean::newBoolean(!entity->isOnGround() && !entity->isInWater()); + return Boolean::newBoolean( + !entity->isOnGround() && !entity->getEntityContext().hasComponent() + ); } CATCH_AND_THROW } @@ -538,7 +541,7 @@ Local EntityClass::getInWater() const { Actor const* entity = get(); if (!entity) return {}; - return Boolean::newBoolean(entity->isInWater()); + return Boolean::newBoolean(entity->getEntityContext().hasComponent()); } CATCH_AND_THROW } diff --git a/src/legacy/api/ItemAPI.cpp b/src/legacy/api/ItemAPI.cpp index 9f4c990..e99ea31 100644 --- a/src/legacy/api/ItemAPI.cpp +++ b/src/legacy/api/ItemAPI.cpp @@ -212,7 +212,7 @@ Local ItemClass::isArmorItem() const { Local ItemClass::isBlock() const { try { - return Boolean::newBoolean(get()->isBlock()); + return Boolean::newBoolean(get()->getBlockType().get()); } CATCH_AND_THROW } diff --git a/src/legacy/api/PlayerAPI.cpp b/src/legacy/api/PlayerAPI.cpp index 405386b..e4c1e36 100644 --- a/src/legacy/api/PlayerAPI.cpp +++ b/src/legacy/api/PlayerAPI.cpp @@ -41,6 +41,7 @@ #include "mc/entity/components/InsideBlockComponent.h" #include "mc/entity/components/IsOnHotBlockFlagComponent.h" #include "mc/entity/components/TagsComponent.h" +#include "mc/entity/components/WasInWaterFlagComponent.h" #include "mc/entity/utilities/ActorMobilityUtils.h" #include "mc/legacy/ActorRuntimeID.h" #include "mc/legacy/ActorUniqueID.h" @@ -87,6 +88,7 @@ #include "mc/world/attribute/Attribute.h" #include "mc/world/attribute/AttributeInstance.h" #include "mc/world/attribute/AttributeInstanceConstRef.h" +#include "mc/world/attribute/AttributeInstanceHandle.h" #include "mc/world/attribute/AttributeInstanceRef.h" #include "mc/world/attribute/SharedAttributes.h" #include "mc/world/effect/EffectDuration.h" @@ -1072,7 +1074,9 @@ Local PlayerClass::getInAir() const { Player* player = get(); if (!player) return {}; - return Boolean::newBoolean(!player->isOnGround() && !player->isInWater()); + return Boolean::newBoolean( + !player->isOnGround() && !player->getEntityContext().hasComponent() + ); } CATCH_AND_THROW } @@ -1082,7 +1086,7 @@ Local PlayerClass::getInWater() const { Player* player = get(); if (!player) return {}; - return Boolean::newBoolean(player->isInWater()); + return Boolean::newBoolean(player->getEntityContext().hasComponent()); } CATCH_AND_THROW } diff --git a/xmake.lua b/xmake.lua index dd5c1f0..faf9edc 100644 --- a/xmake.lua +++ b/xmake.lua @@ -3,17 +3,17 @@ add_rules("mode.debug", "mode.release") add_repositories("levimc-repo " .. (get_config("levimc_repo") or "https://github.com/LiteLDev/xmake-repo.git")) if is_config("target_type", "server") then - add_requires("levilamina 1312818717e46c0f788f0c9409003e08f6e45e1f", {configs = {target_type = "server"}}) + add_requires("levilamina 26.10.*", {configs = {target_type = "server"}}) else - add_requires("levilamina 1312818717e46c0f788f0c9409003e08f6e45e1f", {configs = {target_type = "client"}}) + add_requires("levilamina 26.10.*", {configs = {target_type = "client"}}) end add_requires("levibuildscript") -add_requires("legacyremotecall b8bf79f92e1ef3ede108be7bdc881048b4ef929f", {configs = {target_type = get_config(target_type)}}) +add_requires("legacyremotecall 0.18.*", {configs = {target_type = get_config(target_type)}}) +add_requires("legacymoney 0.18.*", {configs = {target_type = get_config(target_type)}}) add_requires( - "legacymoney 0.10.0", "lightwebsocketclient 1.0.1", "magic_enum v0.9.7", "nlohmann_json v3.11.3",