Search in sources :

Example 1 with Biome

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);
    }
}
Also used : java.util(java.util) Biome(org.pepsoft.worldpainter.layers.Biome) ObjectInputStream(java.io.ObjectInputStream) IOException(java.io.IOException) HistoryEntry(org.pepsoft.worldpainter.history.HistoryEntry) TILE_SIZE(org.pepsoft.worldpainter.Constants.TILE_SIZE) SubProgressReceiver(org.pepsoft.util.SubProgressReceiver) File(java.io.File) Layer(org.pepsoft.worldpainter.layers.Layer) Serializable(java.io.Serializable) Direction(org.pepsoft.minecraft.Direction) java.awt(java.awt) UndoManager(org.pepsoft.util.undo.UndoManager) List(java.util.List) PropertyChangeListener(java.beans.PropertyChangeListener) ProgressReceiver(org.pepsoft.util.ProgressReceiver) Material(org.pepsoft.minecraft.Material) AttributeKey(org.pepsoft.util.AttributeKey) MemoryUtils(org.pepsoft.util.MemoryUtils) PropertyChangeSupport(java.beans.PropertyChangeSupport) DIM_NORMAL(org.pepsoft.worldpainter.Constants.DIM_NORMAL) PropertyChangeSupport(java.beans.PropertyChangeSupport) HistoryEntry(org.pepsoft.worldpainter.history.HistoryEntry)

Aggregations

java.awt (java.awt)1 PropertyChangeListener (java.beans.PropertyChangeListener)1 PropertyChangeSupport (java.beans.PropertyChangeSupport)1 File (java.io.File)1 IOException (java.io.IOException)1 ObjectInputStream (java.io.ObjectInputStream)1 Serializable (java.io.Serializable)1 java.util (java.util)1 List (java.util.List)1 Direction (org.pepsoft.minecraft.Direction)1 Material (org.pepsoft.minecraft.Material)1 AttributeKey (org.pepsoft.util.AttributeKey)1 MemoryUtils (org.pepsoft.util.MemoryUtils)1 ProgressReceiver (org.pepsoft.util.ProgressReceiver)1 SubProgressReceiver (org.pepsoft.util.SubProgressReceiver)1 UndoManager (org.pepsoft.util.undo.UndoManager)1 DIM_NORMAL (org.pepsoft.worldpainter.Constants.DIM_NORMAL)1 TILE_SIZE (org.pepsoft.worldpainter.Constants.TILE_SIZE)1 HistoryEntry (org.pepsoft.worldpainter.history.HistoryEntry)1 Biome (org.pepsoft.worldpainter.layers.Biome)1