mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 01:37:37 +00:00
Make the base fuzzy cached per block type
This commit is contained in:
parent
8da984d9f9
commit
b544782f3b
@ -48,6 +48,7 @@ public class BlockType {
|
||||
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 class BlockType {
|
||||
});
|
||||
}
|
||||
|
||||
public FuzzyBlockState getFuzzyMatcher() {
|
||||
return updateField(emptyFuzzy, () -> new FuzzyBlockState(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of all possible states for this BlockType.
|
||||
*
|
||||
|
@ -37,11 +37,16 @@ public class FuzzyBlockState extends BlockState {
|
||||
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 class FuzzyBlockState extends BlockState {
|
||||
*/
|
||||
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());
|
||||
|
Loading…
Reference in New Issue
Block a user