From dafa599df60e03689e67e754fe037bb0d371e6a4 Mon Sep 17 00:00:00 2001 From: Exterminate Date: Sun, 1 Nov 2026 20:30:50 +1100 Subject: [PATCH] Fix blockstates --- Data Asset Sources.md | 3 +++ .../protocol/data/BedrockMappingData.java | 12 ++++++++++++ .../protocol/rewriter/BlockStateRewriter.java | 18 +++++++++++++++++- .../data/bedrock/data_driven_blocks.nbt | Bin 0 -> 3707 bytes 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/viabedrock/data/bedrock/data_driven_blocks.nbt diff --git a/Data Asset Sources.md b/Data Asset Sources.md index 92a0dd07e..02470c82d 100644 --- a/Data Asset Sources.md +++ b/Data Asset Sources.md @@ -35,6 +35,9 @@ This file has been generated using `./gradlew generateBedrockSoundLists` from th [Mojang/bedrock-samples](https://github.com/Mojang/bedrock-samples/blob/84aa19df535fcf6d044f28bf76f236029bd8407a/metadata/doc_modules/addons.json) [wiki.bedrock.dev](https://wiki.bedrock.dev/blocks/block-traits.html) +### data/bedrock/data_driven_blocks.nbt +[CloudburstMC/Data](https://github.com/CloudburstMC/Data/blob/e5c84599b43b2670e9c22ae3d032f925a7d9590c/data_driven_blocks.nbt) + ### data/bedrock/effects.json [minecraft.wiki](https://minecraft.wiki/w/Effect) diff --git a/src/main/java/net/raphimc/viabedrock/protocol/data/BedrockMappingData.java b/src/main/java/net/raphimc/viabedrock/protocol/data/BedrockMappingData.java index b7330220e..10e9ac59e 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/data/BedrockMappingData.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/data/BedrockMappingData.java @@ -102,6 +102,7 @@ public class BedrockMappingData extends MappingDataBase { private IntSet javaFluidBlockStates; private Int2IntMap javaPottedBlockStates; private Map javaHeightMapBlockStates; + private Set dataDrivenBedrockBlocks; // Biomes private CompoundTag bedrockBiomeDefinitions; @@ -352,6 +353,13 @@ public void load() { } this.javaHeightMapBlockStates.put(entry.getKey(), blockStates); } + + final CompoundTag dataDrivenBedrockBlocksTag = this.readNbt("bedrock/data_driven_blocks.nbt"); + this.dataDrivenBedrockBlocks = new HashSet<>(dataDrivenBedrockBlocksTag.size()); + for (Map.Entry entry : dataDrivenBedrockBlocksTag.getValue().entrySet()) { + this.dataDrivenBedrockBlocks.add(entry.getKey()); + } + } { // Biomes @@ -1101,6 +1109,10 @@ public Map getJavaHeightMapBlockStates() { return this.javaHeightMapBlockStates; } + public Set getBedrockDataDrivenBlocks() { + return this.dataDrivenBedrockBlocks; + } + public CompoundTag getBedrockBiomeDefinitions() { return this.bedrockBiomeDefinitions; } diff --git a/src/main/java/net/raphimc/viabedrock/protocol/rewriter/BlockStateRewriter.java b/src/main/java/net/raphimc/viabedrock/protocol/rewriter/BlockStateRewriter.java index 2cb4a79b6..c9adc71cb 100644 --- a/src/main/java/net/raphimc/viabedrock/protocol/rewriter/BlockStateRewriter.java +++ b/src/main/java/net/raphimc/viabedrock/protocol/rewriter/BlockStateRewriter.java @@ -52,7 +52,7 @@ public BlockStateRewriter(final BlockProperties[] blockProperties, final boolean this.blockStateIdMappings.defaultReturnValue(-1); this.legacyBlockStateIdMappings.defaultReturnValue(-1); - final List bedrockBlockStates = new ArrayList<>(BedrockProtocol.MAPPINGS.getBedrockBlockStates()); + final List bedrockBlockStates = this.getBedrockBlockStates(blockProperties); final Map javaBlockStates = BedrockProtocol.MAPPINGS.getJavaBlockStates(); final Map bedrockToJavaBlockStates = BedrockProtocol.MAPPINGS.getBedrockToJavaBlockStates(); final Map blockTags = BedrockProtocol.MAPPINGS.getBedrockCustomBlockTags(); @@ -192,6 +192,22 @@ public BlockStateRewriter(final BlockProperties[] blockProperties, final boolean this.blockStateSanitizer = new BlockStateSanitizer(bedrockBlockStates); } + private List getBedrockBlockStates(final BlockProperties[] definitions) { + final Set registered = new HashSet<>(); + for (final BlockProperties definition : definitions) { + if (definition.properties().contains("vanilla_block_data")) { + registered.add(definition.name().toLowerCase(Locale.ROOT)); + } + } + final List states = new ArrayList<>(BedrockProtocol.MAPPINGS.getBedrockBlockStates().size()); + for (final BedrockBlockState state : BedrockProtocol.MAPPINGS.getBedrockBlockStates()) { + if (!BedrockProtocol.MAPPINGS.getBedrockDataDrivenBlocks().contains(state.namespacedIdentifier()) || registered.contains(state.namespacedIdentifier())) { + states.add(state); + } + } + return states; + } + public int bedrockId(final CompoundTag bedrockBlockStateTag) { final CompoundTag bedrockBlockStateTagClone = bedrockBlockStateTag.copy(); try { diff --git a/src/main/resources/assets/viabedrock/data/bedrock/data_driven_blocks.nbt b/src/main/resources/assets/viabedrock/data/bedrock/data_driven_blocks.nbt new file mode 100644 index 0000000000000000000000000000000000000000..e0565ec39bb3bddb719644d68208700a8830ea5c GIT binary patch literal 3707 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