Handle missing/corrupted block/biome ID's in the full data

This commit is contained in:
James Seibel
2024-05-09 19:45:54 -05:00
parent f33bfa1d69
commit 7cfcfb0695
2 changed files with 36 additions and 2 deletions
@@ -545,8 +545,8 @@ public class FullDataPointIdMap
throw new DataCorruptedException("Failed to deserialize BiomeBlockStateEntry");
}
IBiomeWrapper biome = WRAPPER_FACTORY.deserializeBiomeWrapper(stringArray[0], levelWrapper);
IBlockStateWrapper blockState = WRAPPER_FACTORY.deserializeBlockStateWrapper(stringArray[1], levelWrapper);
IBiomeWrapper biome = WRAPPER_FACTORY.deserializeBiomeWrapperOrGetDefault(stringArray[0], levelWrapper);
IBlockStateWrapper blockState = WRAPPER_FACTORY.deserializeBlockStateWrapperOrGetDefault(stringArray[1], levelWrapper);
return Entry.getEntry(biome, blockState);
}
@@ -40,9 +40,43 @@ import java.util.HashSet;
public interface IWrapperFactory extends IDhApiWrapperFactory, IBindable
{
AbstractBatchGenerationEnvironmentWrapper createBatchGenerator(IDhLevel targetLevel);
IBiomeWrapper deserializeBiomeWrapper(String str, ILevelWrapper levelWrapper) throws IOException;
IBiomeWrapper getPlainsBiomeWrapper(ILevelWrapper levelWrapper); // TODO it would be nice to remove the level wrapper if possible to put this in line with getAirBlockStateWrapper() but it isn't necessary
default IBiomeWrapper deserializeBiomeWrapperOrGetDefault(String str, ILevelWrapper levelWrapper)
{
IBiomeWrapper biome;
try
{
biome = this.deserializeBiomeWrapper(str, levelWrapper);
}
catch (IOException e)
{
biome = this.getPlainsBiomeWrapper(levelWrapper);
}
return biome;
}
IBlockStateWrapper deserializeBlockStateWrapper(String str, ILevelWrapper levelWrapper) throws IOException;
IBlockStateWrapper getAirBlockStateWrapper();
default IBlockStateWrapper deserializeBlockStateWrapperOrGetDefault(String str, ILevelWrapper levelWrapper)
{
IBlockStateWrapper blockState;
try
{
blockState = this.deserializeBlockStateWrapper(str, levelWrapper);
}
catch (IOException e)
{
blockState = this.getAirBlockStateWrapper();
}
return blockState;
}
/**
* Returns the set of {@link IBlockStateWrapper}'s that shouldn't be rendered. <br>
* Generally this contains blocks like: air, barriers, light blocks, etc.