From 4561187c94aab55811e696557e4370f7326fb7cc Mon Sep 17 00:00:00 2001 From: Elvin Starry Date: Sat, 6 Dec 2025 15:11:18 +0800 Subject: [PATCH] fix: Use new splited light block ID --- src/bedrock-block-data.cpp | 32 ++++++++++++++++++++++++++++++-- src/java-block-data.cpp | 7 ++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/bedrock-block-data.cpp b/src/bedrock-block-data.cpp index b9a3bfaf9..31e2fb69b 100644 --- a/src/bedrock-block-data.cpp +++ b/src/bedrock-block-data.cpp @@ -1062,9 +1062,27 @@ class BlockData::Impl { return bName; } + static std::optional LightLevelFromName(String const &bName) { + std::u8string const key = Namespace::Remove(bName); + std::u8string const prefix = u8"light_block_"; + if (!key.starts_with(prefix)) { + return std::nullopt; + } + auto suffix = key.substr(prefix.size()); + if (suffix.empty()) { + return std::nullopt; + } + if (auto level = strings::ToI32(suffix); level) { + return ClosedRange::Clamp(*level, 0, 15); + } else { + return std::nullopt; + } + } + static String LightBlock(String const &bName, CompoundTag const &s, Props &p, int outputDataVersion) { - auto level = s.int32(u8"block_light_level", 0); - p[u8"level"] = Int(level); + auto level = LightLevelFromName(bName); + auto levelFromState = ClosedRange::Clamp(s.int32(u8"block_light_level", 0), 0, 15); + p[u8"level"] = Int(level ? *level : levelFromState); Submergible(s, p); return Ns() + u8"light"; } @@ -2940,6 +2958,16 @@ class BlockData::Impl { E(lever, Lever); E(lightning_rod, LightningRod); E(light_block, LightBlock); + static std::array const sLightBlockNames = []() { + std::array ret{}; + for (int level = 0; level < 16; level++) { + ret[level] = u8"light_block_" + mcfile::String::ToString(level); + } + return ret; + }(); + for (auto const &name : sLightBlockNames) { + table->try_emplace(name, LightBlock); + } E(light_weighted_pressure_plate, BlockWithPowerFromRedstoneSignal); E(waterlily, Rename(u8"lily_pad")); E(loom, BlockWithFacing4FromDirectionA); diff --git a/src/java-block-data.cpp b/src/java-block-data.cpp index 5d0454632..11b4106fd 100644 --- a/src/java-block-data.cpp +++ b/src/java-block-data.cpp @@ -2443,10 +2443,11 @@ class BlockData::Impl { } static CompoundTagPtr Light(Block const &b, CompoundTagConstPtr const &, Options const &o) { - auto c = New(u8"light_block"); - auto s = States(); auto level = strings::ToI32(b.property(u8"level", u8"15")); - s->set(u8"block_light_level", Int(level ? *level : 15)); + auto clamped = ClosedRange::Clamp(level ? *level : 15, 0, 15); + auto name = u8"light_block_" + mcfile::String::ToString(clamped); + auto c = New(name); + auto s = States(); return AttachStates(c, s); }