Inventory overrides for multistate bedrock blocks

This commit is contained in:
Joshua Castle 2023-01-15 00:00:19 -08:00
parent df710cb279
commit 3d1d51d198
No known key found for this signature in database
GPG Key ID: F674F38216C35D5D
3 changed files with 14 additions and 2 deletions

View File

@ -164,6 +164,7 @@ public final class BlockRegistryPopulator {
BiFunction<String, NbtMapBuilder, String> stateMapper = blockMappers.getOrDefault(palette.getKey(), emptyMapper); BiFunction<String, NbtMapBuilder, String> stateMapper = blockMappers.getOrDefault(palette.getKey(), emptyMapper);
int[] javaToBedrockBlocks = new int[BLOCKS_JSON.size()]; int[] javaToBedrockBlocks = new int[BLOCKS_JSON.size()];
int[] javaToVanillaBedrockBlocks = new int[BLOCKS_JSON.size()];
Map<String, NbtMap> flowerPotBlocks = new Object2ObjectOpenHashMap<>(); Map<String, NbtMap> flowerPotBlocks = new Object2ObjectOpenHashMap<>();
Object2IntMap<NbtMap> itemFrames = new Object2IntOpenHashMap<>(); Object2IntMap<NbtMap> itemFrames = new Object2IntOpenHashMap<>();
@ -175,11 +176,12 @@ public final class BlockRegistryPopulator {
javaRuntimeId++; javaRuntimeId++;
Map.Entry<String, JsonNode> entry = blocksIterator.next(); Map.Entry<String, JsonNode> entry = blocksIterator.next();
String javaId = entry.getKey(); String javaId = entry.getKey();
int vanillaBedrockRuntimeId = blockStateOrderedMap.getOrDefault(buildBedrockState(entry.getValue(), stateVersion, stateMapper), -1);
int bedrockRuntimeId; int bedrockRuntimeId;
CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(javaRuntimeId); CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(javaRuntimeId);
if (blockStateOverride == null) { if (blockStateOverride == null) {
bedrockRuntimeId = blockStateOrderedMap.getOrDefault(buildBedrockState(entry.getValue(), stateVersion, stateMapper), -1); bedrockRuntimeId = vanillaBedrockRuntimeId;
if (bedrockRuntimeId == -1) { if (bedrockRuntimeId == -1) {
throw new RuntimeException("Unable to find " + javaId + " Bedrock runtime ID! Built NBT tag: \n" + throw new RuntimeException("Unable to find " + javaId + " Bedrock runtime ID! Built NBT tag: \n" +
buildBedrockState(entry.getValue(), stateVersion, stateMapper)); buildBedrockState(entry.getValue(), stateVersion, stateMapper));
@ -218,6 +220,7 @@ public final class BlockRegistryPopulator {
flowerPotBlocks.put(cleanJavaIdentifier.intern(), blockStates.get(bedrockRuntimeId)); flowerPotBlocks.put(cleanJavaIdentifier.intern(), blockStates.get(bedrockRuntimeId));
} }
javaToVanillaBedrockBlocks[javaRuntimeId] = vanillaBedrockRuntimeId;
javaToBedrockBlocks[javaRuntimeId] = bedrockRuntimeId; javaToBedrockBlocks[javaRuntimeId] = bedrockRuntimeId;
} }
@ -252,6 +255,7 @@ public final class BlockRegistryPopulator {
BlockRegistries.BLOCKS.register(palette.getKey().valueInt(), builder.blockStateVersion(stateVersion) BlockRegistries.BLOCKS.register(palette.getKey().valueInt(), builder.blockStateVersion(stateVersion)
.javaToBedrockBlocks(javaToBedrockBlocks) .javaToBedrockBlocks(javaToBedrockBlocks)
.javaToVanillaBedrockBlocks(javaToVanillaBedrockBlocks)
.itemFrames(itemFrames) .itemFrames(itemFrames)
.flowerPotBlocks(flowerPotBlocks) .flowerPotBlocks(flowerPotBlocks)
.jigsawStateIds(jigsawStateIds) .jigsawStateIds(jigsawStateIds)

View File

@ -375,7 +375,7 @@ public class ItemRegistryPopulator {
// and the last, if relevant. We then iterate over all those values and get their Bedrock equivalents // and the last, if relevant. We then iterate over all those values and get their Bedrock equivalents
Integer lastBlockRuntimeId = entry.getValue().getLastBlockRuntimeId() == null ? firstBlockRuntimeId : entry.getValue().getLastBlockRuntimeId(); Integer lastBlockRuntimeId = entry.getValue().getLastBlockRuntimeId() == null ? firstBlockRuntimeId : entry.getValue().getLastBlockRuntimeId();
for (int i = firstBlockRuntimeId; i <= lastBlockRuntimeId; i++) { for (int i = firstBlockRuntimeId; i <= lastBlockRuntimeId; i++) {
int bedrockBlockRuntimeId = blockMappings.getBedrockBlockId(i); int bedrockBlockRuntimeId = blockMappings.getVanillaBedrockBlockId(i);
NbtMap blockTag = blockMappings.getBedrockBlockStates().get(bedrockBlockRuntimeId); NbtMap blockTag = blockMappings.getBedrockBlockStates().get(bedrockBlockRuntimeId);
String bedrockName = blockTag.getString("name"); String bedrockName = blockTag.getString("name");
if (!bedrockName.equals(correctBedrockIdentifier)) { if (!bedrockName.equals(correctBedrockIdentifier)) {

View File

@ -47,6 +47,7 @@ public class BlockMappings {
int blockStateVersion; int blockStateVersion;
int[] javaToBedrockBlocks; int[] javaToBedrockBlocks;
int[] javaToVanillaBedrockBlocks;
NbtList<NbtMap> bedrockBlockStates; NbtList<NbtMap> bedrockBlockStates;
int[] remappedVanillaIds; int[] remappedVanillaIds;
@ -68,6 +69,13 @@ public class BlockMappings {
return this.javaToBedrockBlocks[state]; return this.javaToBedrockBlocks[state];
} }
public int getVanillaBedrockBlockId(int state) {
if (state >= this.javaToVanillaBedrockBlocks.length) {
return bedrockAirId;
}
return this.javaToVanillaBedrockBlocks[state];
}
public int getItemFrame(NbtMap tag) { public int getItemFrame(NbtMap tag) {
return this.itemFrames.getOrDefault(tag, -1); return this.itemFrames.getOrDefault(tag, -1);
} }