Skip to content

Commit ffb4c8c

Browse files
committed
Fix getOrDefault semantics on dynamic model maps
Fixes embeddedt#672
1 parent 3eaf157 commit ffb4c8c

3 files changed

Lines changed: 27 additions & 0 deletions

File tree

src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import java.util.Collection;
2727
import java.util.Map;
28+
import java.util.Objects;
2829
import java.util.concurrent.CompletableFuture;
2930
import java.util.concurrent.CompletionStage;
3031
import java.util.function.Consumer;
@@ -95,6 +96,7 @@ private static Object2IntMap<BlockState> buildModelGroups(BlockColors blockColor
9596
@Overwrite
9697
private static Map<BlockState, BlockStateModel> createBlockStateToModelDispatch(Map<BlockState, BlockStateModel> blockStateModels, BlockStateModel missingModel) {
9798
BlockStateModelMap.resetCache();
99+
Objects.requireNonNull(missingModel);
98100
return new BlockStateModelMap(blockStateModels, missingModel);
99101
}
100102
}

src/main/java/org/embeddedt/modernfix/dynresources/BlockStateModelMap.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import java.util.Collection;
1111
import java.util.Map;
12+
import java.util.Objects;
1213
import java.util.Set;
1314

1415
/**
@@ -18,6 +19,10 @@
1819
public record BlockStateModelMap(Map<BlockState, BlockStateModel> modelMap,
1920
BlockStateModel fallbackModel) implements Map<BlockState, BlockStateModel> {
2021

22+
public BlockStateModelMap {
23+
Objects.requireNonNull(fallbackModel);
24+
}
25+
2126
@Override
2227
public int size() {
2328
return Block.BLOCK_STATE_REGISTRY.size();
@@ -55,6 +60,12 @@ public BlockStateModel get(Object o) {
5560
}
5661
}
5762

63+
@Override
64+
public BlockStateModel getOrDefault(Object key, BlockStateModel defaultValue) {
65+
var value = get(key);
66+
return value != fallbackModel ? value : defaultValue;
67+
}
68+
5869
@Override
5970
public @Nullable BlockStateModel put(BlockState blockState, BlockStateModel blockStateModel) {
6071
var oldModel = modelMap.put(blockState, blockStateModel);

src/main/java/org/embeddedt/modernfix/dynresources/DynamicRegistryMap.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Collections;
1010
import java.util.Iterator;
1111
import java.util.Map;
12+
import java.util.Objects;
1213
import java.util.Set;
1314
import java.util.concurrent.ConcurrentHashMap;
1415
import java.util.function.Function;
@@ -73,6 +74,19 @@ public V get(Object o) {
7374
}
7475
}
7576

77+
@Override
78+
public V getOrDefault(Object o, V defaultValue) {
79+
Object value = overrides.get(o);
80+
if (value == NULL_OVERRIDE) {
81+
return null;
82+
} else if (value != null) {
83+
return (V) value;
84+
} else {
85+
var fallback = fallbackGetter.apply((K)o);
86+
return fallback != null ? fallback : defaultValue;
87+
}
88+
}
89+
7690
@Override
7791
public @Nullable V put(K k, V v) {
7892
if (v == null) {

0 commit comments

Comments
 (0)