Skip to content

Commit fcd3927

Browse files
committed
Add abillity for resourcepack-extensions to define blockstate-properties and alter the blockstate id to resource mapping
1 parent db3889a commit fcd3927

3 files changed

Lines changed: 29 additions & 3 deletions

File tree

core/src/main/java/de/bluecolored/bluemap/core/map/hires/block/BlockStateModelRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void render(BlockNeighborhood block, BlockState blockState, TileModelView
8282
private void renderModel(BlockNeighborhood block, BlockState blockState, TileModelView tileModel, Color blockColor) {
8383
int modelStart = tileModel.getStart();
8484

85-
var stateResource = resourcePack.getBlockStates().get(blockState.getId());
85+
var stateResource = resourcePack.getBlockState(blockState);
8686
if (stateResource == null) return;
8787

8888
float blockColorOpacity = 0;

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/ResourcePack.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,15 +355,32 @@ private Atlas getBlocksAtlas() {
355355
return new Atlas();
356356
}
357357

358+
public BlockState getBlockState(de.bluecolored.bluemap.core.world.BlockState blockState) {
359+
Key key = blockState.getId();
360+
for (ResourcePackExtension extension : extensions.values()) {
361+
key = extension.getBlockStateKey(key);
362+
}
363+
return blockStates.get(key);
364+
}
365+
358366
public BlockProperties getBlockProperties(de.bluecolored.bluemap.core.world.BlockState state) {
359367
return blockPropertiesCache.get(state);
360368
}
361369

362370
private BlockProperties loadBlockProperties(de.bluecolored.bluemap.core.world.BlockState state) {
363-
BlockProperties.Builder props = blockPropertiesConfig.getBlockProperties(state).toBuilder();
371+
BlockProperties.Builder props = BlockProperties.builder();
372+
373+
// collect properties from extensions
374+
for (ResourcePackExtension extension : extensions.values()) {
375+
extension.getBlockProperties(state, props);
376+
}
377+
378+
// explicitly configured properties always have priority -> overwrite
379+
props.from(blockPropertiesConfig.getBlockProperties(state));
364380

381+
// calculate culling and occlusion from model if UNDEFINED
365382
if (props.isOccluding() == Tristate.UNDEFINED || props.isCulling() == Tristate.UNDEFINED) {
366-
BlockState resource = blockStates.get(state.getId());
383+
BlockState resource = getBlockState(state);
367384
if (resource != null) {
368385
resource.forEach(state,0, 0, 0, variant -> {
369386
Model model = variant.getModel().getResource(models::get);

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/ResourcePackExtension.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626

2727
import de.bluecolored.bluemap.core.resources.pack.PackExtension;
2828
import de.bluecolored.bluemap.core.util.Key;
29+
import de.bluecolored.bluemap.core.world.BlockProperties;
30+
import de.bluecolored.bluemap.core.world.BlockState;
31+
import org.jetbrains.annotations.Nullable;
2932

3033
import java.util.Set;
3134

@@ -35,4 +38,10 @@ default Set<Key> collectUsedTextureKeys() {
3538
return Set.of();
3639
}
3740

41+
default Key getBlockStateKey(Key key) {
42+
return key;
43+
}
44+
45+
default void getBlockProperties(BlockState blockState, BlockProperties.Builder propertiesBuilder) {}
46+
3847
}

0 commit comments

Comments
 (0)