Permalink
Browse files

Make the base fuzzy cached per block type

  • Loading branch information...
me4502 committed Dec 27, 2018
1 parent 8da984d commit b544782f3b653b3998d52c02cd12695ab5c03882
@@ -48,6 +48,7 @@
private final String id;
private final Function<BlockState, BlockState> values;
private final AtomicReference<BlockState> defaultState = new AtomicReference<>();
private final AtomicReference<FuzzyBlockState> emptyFuzzy = new AtomicReference<>();
private final AtomicReference<Map<String, ? extends Property<?>>> properties = new AtomicReference<>();
private final AtomicReference<BlockMaterial> blockMaterial = new AtomicReference<>();
private final AtomicReference<Map<Map<Property<?>, Object>, BlockState>> blockStatesMap = new AtomicReference<>();
@@ -156,6 +157,10 @@ public BlockState getDefaultState() {
});
}

public FuzzyBlockState getFuzzyMatcher() {
return updateField(emptyFuzzy, () -> new FuzzyBlockState(this));
}

/**
* Gets a list of all possible states for this BlockType.
*
@@ -37,11 +37,16 @@
super(blockType);
}

@SuppressWarnings("unchecked")
@Override
public BlockState toImmutableState() {
/**
* Gets a full BlockState from this fuzzy one, filling in
* properties with default values where necessary.
*
* @return The full BlockState
*/
public BlockState getFullState() {
BlockState state = getBlockType().getDefaultState();
for (Map.Entry<Property<?>, Object> entry : getStates().entrySet()) {
//noinspection unchecked
state = state.with((Property<Object>) entry.getKey(), entry.getValue());
}
return getBlockType().getDefaultState();
@@ -110,6 +115,9 @@ public Builder type(BlockState state) {
*/
public FuzzyBlockState build() {
checkNotNull(internalState);
if (values.isEmpty()) {
return internalState.getBlockType().getFuzzyMatcher();
}
FuzzyBlockState blockState = new FuzzyBlockState(internalState.getBlockType());
for (Map.Entry<Property<?>, Object> entry : values.entrySet()) {
blockState.setState(entry.getKey(), entry.getValue());

0 comments on commit b544782

Please sign in to comment.