use of org.pepsoft.worldpainter.layers.Biome in project WorldPainter by Captain-Chaos.
the class World2 method readObject.
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
propertyChangeSupport = new PropertyChangeSupport(this);
// Legacy maps
if (wpVersion < 1) {
if (maxheight == 0) {
maxheight = 128;
}
if (generator == null) {
generator = Generator.DEFAULT;
if ((generatorName != null) && generatorName.equals("FLAT")) {
generator = Generator.FLAT;
} else {
TileFactory tileFactory = dimensions.containsKey(0) ? dimensions.get(0).getTileFactory() : null;
if (tileFactory instanceof HeightMapTileFactory) {
if (((HeightMapTileFactory) tileFactory).getWaterHeight() < 32) {
// Low level
generator = Generator.FLAT;
}
}
}
}
if (biomeAlgorithm == BIOME_ALGORITHM_CUSTOM_BIOMES) {
customBiomes = true;
}
if (upIs == null) {
upIs = Direction.WEST;
askToRotate = true;
}
if ((!allowMerging) && (biomeAlgorithm != BIOME_ALGORITHM_NONE)) {
customBiomes = false;
}
if (mixedMaterials == null) {
mixedMaterials = new MixedMaterial[Terrain.CUSTOM_TERRAIN_COUNT];
if (customMaterials != null) {
for (int i = 0; i < customMaterials.length; i++) {
if (customMaterials[i] != null) {
mixedMaterials[i] = MixedMaterial.create(customMaterials[i]);
}
}
customMaterials = null;
}
}
Dimension dim = dimensions.get(DIM_NORMAL);
if (dim != null) {
// Migrate to refactored automatic biomes
if (biomeAlgorithm == BIOME_ALGORITHM_AUTO_BIOMES) {
// Automatic biomes was enabled; biome information should
// be present throughout; no need to do anything. Schedule a
// warning to warn the user about the change though
warnings = EnumSet.of(Warning.AUTO_BIOMES_DISABLED);
} else if (customBiomes) {
// Custom biomes was enabled; a mix of initialised and
// uninitialised tiles may be present which would be
// problematic, as the initialised tiles would have been
// initialised to zero and the default is now 255. Check what
// the situation is and take appropriate steps
boolean tilesWithBiomesFound = false, tilesWithoutBiomesFound = false;
for (Tile tile : dim.getTiles()) {
if (tile.hasLayer(Biome.INSTANCE)) {
tilesWithBiomesFound = true;
} else {
tilesWithoutBiomesFound = true;
}
}
if (tilesWithBiomesFound) {
if (tilesWithoutBiomesFound) {
// behaviour
for (Tile tile : dim.getTiles()) {
if (!tile.hasLayer(Biome.INSTANCE)) {
for (int x = 0; x < TILE_SIZE; x++) {
for (int y = 0; y < TILE_SIZE; y++) {
tile.setLayerValue(Biome.INSTANCE, x, y, 0);
}
}
}
}
} else {
// There are only initialised tiles. Good, we can leave
// it like that, and don't have to warn the user, as the
// behaviour will not change
}
} else if (tilesWithoutBiomesFound) {
// There are only uninitialised tiles. Leave it like that,
// but warn the user that automatic biomes is now active
warnings = EnumSet.of(Warning.AUTO_BIOMES_ENABLED);
}
} else {
// Neither custom nor automatic biomes was enabled; all
// tiles *should* be uninitialised, but clear the layer data
// anyway just to make sure. Schedule a warning to warn the user
// that automatic biomes are now active
dim.clearLayerData(Biome.INSTANCE);
warnings = EnumSet.of(Warning.AUTO_BIOMES_ENABLED);
}
}
}
if (wpVersion < 2) {
if (gameType == 3) {
difficulty = org.pepsoft.minecraft.Constants.DIFFICULTY_HARD;
} else {
difficulty = org.pepsoft.minecraft.Constants.DIFFICULTY_NORMAL;
}
}
if (wpVersion < 3) {
history = new ArrayList<>();
history.add(new HistoryEntry(HistoryEntry.WORLD_LEGACY_PRE_2_0_0));
}
if (wpVersion < 4) {
borderSettings = new BorderSettings();
}
if (wpVersion < 5) {
if (tilesToExport != null) {
dimensionsToExport = Collections.singleton(dimensionToExport);
} else {
dimensionsToExport = null;
}
dimensionToExport = -1;
}
if (wpVersion < 6) {
switch(version) {
case org.pepsoft.minecraft.Constants.SUPPORTED_VERSION_1:
platform = DefaultPlugin.JAVA_MCREGION;
break;
case org.pepsoft.minecraft.Constants.SUPPORTED_VERSION_2:
platform = DefaultPlugin.JAVA_ANVIL;
break;
default:
platform = (maxheight == org.pepsoft.minecraft.Constants.DEFAULT_MAX_HEIGHT_2) ? DefaultPlugin.JAVA_ANVIL : DefaultPlugin.JAVA_MCREGION;
}
version = -1;
gameTypeObj = GameType.values()[gameType];
gameType = -1;
}
wpVersion = CURRENT_WP_VERSION;
// Bug fix: fix the maxHeight of the dimensions, which somehow is not
// always correctly set (possibly only on imported worlds from
// non-standard height maps due to a bug which should be fixed).
dimensions.values().stream().filter(dimension -> dimension.getMaxHeight() != maxheight).forEach(dimension -> {
logger.warn("Fixing maxHeight of dimension " + dimension.getDim() + " (was " + dimension.getMaxHeight() + ", should be " + maxheight + ")");
dimension.setMaxHeight(maxheight);
dimension.setDirty(false);
});
// worlds for it
if (mixedMaterials.length != Terrain.CUSTOM_TERRAIN_COUNT) {
mixedMaterials = Arrays.copyOf(mixedMaterials, Terrain.CUSTOM_TERRAIN_COUNT);
}
}
Aggregations