Search in sources :

Example 1 with Level

use of org.pepsoft.minecraft.Level in project WorldPainter by Captain-Chaos.

the class DumpWater method main.

public static final void main(String[] args) throws IOException {
    File levelDatFile = new File(args[0]);
    int x = Integer.parseInt(args[1]);
    int y = Integer.parseInt(args[2]);
    int z = Integer.parseInt(args[3]);
    Level level = Level.load(levelDatFile);
    MinecraftWorld world = new JavaMinecraftWorld(levelDatFile.getParentFile(), 0, level.getMaxHeight(), level.getVersion() == SUPPORTED_VERSION_1 ? DefaultPlugin.JAVA_MCREGION : DefaultPlugin.JAVA_ANVIL, true, CACHE_SIZE);
    for (int dy = 16; dy >= -16; dy--) {
        for (int dx = -16; dx <= 16; dx++) {
            int blockX = x + dx, blockZ = z;
            int blockType = world.getBlockTypeAt(blockX, blockZ, y + dy);
            System.out.print('[');
            System.out.print(blockType != BLK_AIR ? BLOCK_TYPE_NAMES[blockType].substring(0, 3).toUpperCase() : "   ");
            System.out.print(';');
            int data = world.getDataAt(blockX, blockZ, y + dy);
            if (data > 0) {
                if (data < 10) {
                    System.out.print('0');
                }
                System.out.print(data);
            } else {
                System.out.print("  ");
            }
            System.out.print(']');
        }
        System.out.println();
    }
}
Also used : MinecraftWorld(org.pepsoft.worldpainter.exporting.MinecraftWorld) JavaMinecraftWorld(org.pepsoft.worldpainter.exporting.JavaMinecraftWorld) Level(org.pepsoft.minecraft.Level) File(java.io.File) JavaMinecraftWorld(org.pepsoft.worldpainter.exporting.JavaMinecraftWorld)

Example 2 with Level

use of org.pepsoft.minecraft.Level in project WorldPainter by Captain-Chaos.

the class MergeWorldDialog method setControlStates.

private void setControlStates() {
    File file = new File(fieldLevelDatFile.getText().trim());
    boolean levelDatSelected = file.isFile() && (file.getName().equalsIgnoreCase("level.dat"));
    if (levelDatSelected) {
        levelDatFile = file;
        try {
            Level level = Level.load(levelDatFile);
            if (level.getVersion() != org.pepsoft.minecraft.Constants.SUPPORTED_VERSION_2) {
                if (radioButtonBiomes.isSelected()) {
                    radioButtonAll.setSelected(true);
                }
                radioButtonBiomes.setEnabled(false);
            } else {
                radioButtonBiomes.setEnabled(true);
            }
        } catch (IOException e) {
            levelDatFile = null;
            throw new RuntimeException("I/O error while loading level.dat", e);
        }
    } else {
        levelDatFile = null;
    }
    boolean mergeAll = radioButtonAll.isSelected();
    boolean mergeBiomesOnly = radioButtonBiomes.isSelected();
    boolean mergeEverything = radioButtonExportEverything.isSelected();
    boolean surfacePresent = world.getDimension(DIM_NORMAL) != null;
    boolean netherPresent = world.getDimension(DIM_NETHER) != null;
    boolean endPresent = world.getDimension(DIM_END) != null;
    boolean oneDimensionPresent = world.getDimensions().length == 1;
    radioButtonExportEverything.setEnabled(!mergeBiomesOnly);
    radioButtonExportSelection.setEnabled(!mergeBiomesOnly);
    checkBoxFillCaves.setEnabled(mergeAll);
    checkBoxRemoveManMadeAboveGround.setEnabled(mergeAll);
    checkBoxRemoveManMadeBelowGround.setEnabled(mergeAll);
    checkBoxRemoveResources.setEnabled(mergeAll);
    checkBoxRemoveTrees.setEnabled(mergeAll);
    checkBoxRemoveVegetation.setEnabled(mergeAll);
    spinnerSurfaceThickness.setEnabled(mergeAll);
    checkBoxSurface.setEnabled(mergeEverything && (!mergeBiomesOnly) && surfacePresent && (!oneDimensionPresent));
    checkBoxNether.setEnabled(mergeEverything && (!mergeBiomesOnly) && netherPresent && (!oneDimensionPresent));
    checkBoxEnd.setEnabled(mergeEverything && (!mergeBiomesOnly) && endPresent && (!oneDimensionPresent));
    if (radioButtonExportSelection.isSelected()) {
        labelSelectTiles.setForeground(Color.BLUE);
        labelSelectTiles.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    } else {
        labelSelectTiles.setForeground(null);
        labelSelectTiles.setCursor(null);
    }
}
Also used : Level(org.pepsoft.minecraft.Level) IOException(java.io.IOException) File(java.io.File)

Example 3 with Level

use of org.pepsoft.minecraft.Level in project WorldPainter by Captain-Chaos.

the class MapImportDialog method importWorld.

private void importWorld() {
    final File levelDatFile = new File(fieldFilename.getText());
    final Set<Point> chunksToSkip = checkBoxImportOutliers.isSelected() ? null : mapStatistics.outlyingChunks;
    final JavaMapImporter.ReadOnlyOption readOnlyOption;
    if (radioButtonReadOnlyAll.isSelected()) {
        readOnlyOption = JavaMapImporter.ReadOnlyOption.ALL;
    } else if (radioButtonReadOnlyManMade.isSelected()) {
        readOnlyOption = JavaMapImporter.ReadOnlyOption.MAN_MADE;
    } else if (radioButtonReadOnlyManMadeAboveGround.isSelected()) {
        readOnlyOption = JavaMapImporter.ReadOnlyOption.MAN_MADE_ABOVE_GROUND;
    } else {
        readOnlyOption = JavaMapImporter.ReadOnlyOption.NONE;
    }
    app.setWorld(null);
    importedWorld = ProgressDialog.executeTask(this, new ProgressTask<World2>() {

        @Override
        public String getName() {
            return strings.getString("importing.world");
        }

        @Override
        public World2 execute(ProgressReceiver progressReceiver) throws OperationCancelled {
            try {
                Level level = Level.load(levelDatFile);
                int maxHeight = level.getMaxHeight();
                int waterLevel;
                if (level.getVersion() == SUPPORTED_VERSION_1) {
                    waterLevel = maxHeight / 2 - 2;
                } else {
                    waterLevel = 62;
                }
                int terrainLevel = waterLevel - 4;
                TileFactory tileFactory = TileFactoryFactory.createNoiseTileFactory(0, Terrain.GRASS, maxHeight, terrainLevel, waterLevel, false, true, 20, 1.0);
                Set<Integer> dimensionsToImport = new HashSet<>(3);
                dimensionsToImport.add(Constants.DIM_NORMAL);
                if (checkBoxImportNether.isSelected()) {
                    dimensionsToImport.add(Constants.DIM_NETHER);
                }
                if (checkBoxImportEnd.isSelected()) {
                    dimensionsToImport.add(Constants.DIM_END);
                }
                final JavaMapImporter importer = new JavaMapImporter(tileFactory, levelDatFile, false, chunksToSkip, readOnlyOption, dimensionsToImport);
                World2 world = importer.doImport(progressReceiver);
                if (importer.getWarnings() != null) {
                    try {
                        SwingUtilities.invokeAndWait(() -> {
                            Icon warningIcon = UIManager.getIcon("OptionPane.warningIcon");
                            Toolkit.getDefaultToolkit().beep();
                            int selectedOption = JOptionPane.showOptionDialog(MapImportDialog.this, strings.getString("the.import.process.generated.warnings"), strings.getString("import.warnings"), JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, warningIcon, new Object[] { strings.getString("review.warnings"), strings.getString("ok") }, null);
                            if (selectedOption == 0) {
                                ImportWarningsDialog warningsDialog = new ImportWarningsDialog(MapImportDialog.this, strings.getString("import.warnings"));
                                warningsDialog.setWarnings(importer.getWarnings());
                                warningsDialog.setVisible(true);
                            }
                        });
                    } catch (InterruptedException | InvocationTargetException e) {
                        throw new RuntimeException(e);
                    }
                }
                return world;
            } catch (IOException e) {
                throw new RuntimeException("I/O error while importing world", e);
            }
        }
    }, true);
    if (importedWorld == null) {
        // The import was cancelled
        cancel();
        return;
    }
    importedWorld.setDirty(false);
    Configuration config = Configuration.getInstance();
    config.setSavesDirectory(levelDatFile.getParentFile().getParentFile());
    ok();
}
Also used : ProgressTask(org.pepsoft.util.swing.ProgressTask) IOException(java.io.IOException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ProgressReceiver(org.pepsoft.util.ProgressReceiver) Level(org.pepsoft.minecraft.Level) File(java.io.File) RegionFile(org.pepsoft.minecraft.RegionFile)

Example 4 with Level

use of org.pepsoft.minecraft.Level in project WorldPainter by Captain-Chaos.

the class MapImportDialog method analyseMap.

private void analyseMap() {
    mapStatistics = null;
    resetStats();
    File levelDatFile = new File(fieldFilename.getText());
    final File worldDir = levelDatFile.getParentFile();
    // Check if it's a valid level.dat file before we commit
    int version;
    try {
        Level testLevel = Level.load(levelDatFile);
        version = testLevel.getVersion();
    } catch (IOException e) {
        logger.error("IOException while analysing map " + levelDatFile, e);
        JOptionPane.showMessageDialog(MapImportDialog.this, strings.getString("selected.file.is.not.a.valid.level.dat.file"), strings.getString("invalid.file"), JOptionPane.ERROR_MESSAGE);
        return;
    } catch (IllegalArgumentException e) {
        logger.error("IllegalArgumentException while analysing map " + levelDatFile, e);
        JOptionPane.showMessageDialog(MapImportDialog.this, strings.getString("selected.file.is.not.a.valid.level.dat.file"), strings.getString("invalid.file"), JOptionPane.ERROR_MESSAGE);
        return;
    } catch (NullPointerException e) {
        logger.error("NullPointerException while analysing map " + levelDatFile, e);
        JOptionPane.showMessageDialog(MapImportDialog.this, strings.getString("selected.file.is.not.a.valid.level.dat.file"), strings.getString("invalid.file"), JOptionPane.ERROR_MESSAGE);
        return;
    }
    // Other sanity checks
    if ((version != SUPPORTED_VERSION_1) && (version != SUPPORTED_VERSION_2)) {
        logger.error("Unsupported Minecraft version while analysing map " + levelDatFile);
        JOptionPane.showMessageDialog(MapImportDialog.this, strings.getString("unsupported.minecraft.version"), strings.getString("unsupported.version"), JOptionPane.ERROR_MESSAGE);
        return;
    }
    File regionDir = new File(worldDir, "region");
    if (!regionDir.isDirectory()) {
        logger.error("Region directory missing while analysing map " + levelDatFile);
        JOptionPane.showMessageDialog(MapImportDialog.this, strings.getString("the.region.folder.is.missing"), strings.getString("region.folder.missing"), JOptionPane.ERROR_MESSAGE);
        return;
    }
    final Pattern regionFilePattern = (version == SUPPORTED_VERSION_1) ? Pattern.compile("r\\.-?\\d+\\.-?\\d+\\.mcr") : Pattern.compile("r\\.-?\\d+\\.-?\\d+\\.mca");
    final File[] regionFiles = regionDir.listFiles((dir, name) -> regionFilePattern.matcher(name).matches());
    if ((regionFiles == null) || (regionFiles.length == 0)) {
        logger.error("Region files missing while analysing map " + levelDatFile);
        JOptionPane.showMessageDialog(MapImportDialog.this, strings.getString("the.region.folder.contains.no.region.files"), strings.getString("region.files.missing"), JOptionPane.ERROR_MESSAGE);
        return;
    }
    // Check for Nether and End
    boolean netherPresent = false, endPresent = false;
    File netherRegionDir = new File(worldDir, "DIM-1/region");
    if (netherRegionDir.isDirectory()) {
        File[] netherRegionFiles = netherRegionDir.listFiles((dir, name) -> regionFilePattern.matcher(name).matches());
        if ((netherRegionFiles != null) && (netherRegionFiles.length > 0)) {
            netherPresent = true;
        }
    }
    File endRegionDir = new File(worldDir, "DIM1/region");
    if (endRegionDir.isDirectory()) {
        File[] endRegionFiles = endRegionDir.listFiles((dir, name) -> regionFilePattern.matcher(name).matches());
        if ((endRegionFiles != null) && (endRegionFiles.length > 0)) {
            endPresent = true;
        }
    }
    checkBoxImportNether.setEnabled(netherPresent);
    checkBoxImportNether.setSelected(netherPresent);
    checkBoxImportEnd.setEnabled(endPresent);
    checkBoxImportEnd.setSelected(endPresent);
    mapStatistics = ProgressDialog.executeTask(this, new ProgressTask<MapStatistics>() {

        @Override
        public String getName() {
            return "Analyzing map...";
        }

        @Override
        public MapStatistics execute(ProgressReceiver progressReceiver) throws OperationCancelled {
            MapStatistics stats = new MapStatistics();
            int chunkCount = 0;
            List<Integer> xValues = new ArrayList<>(), zValues = new ArrayList<>();
            List<Point> chunks = new ArrayList<>();
            int count = 0;
            for (File file : regionFiles) {
                String[] nameFrags = file.getName().split("\\.");
                int regionX = Integer.parseInt(nameFrags[1]);
                int regionZ = Integer.parseInt(nameFrags[2]);
                try {
                    RegionFile regionFile = new RegionFile(file);
                    try {
                        for (int x = 0; x < 32; x++) {
                            for (int z = 0; z < 32; z++) {
                                if (regionFile.containsChunk(x, z)) {
                                    chunkCount++;
                                    int chunkX = regionX * 32 + x, chunkZ = regionZ * 32 + z;
                                    if (chunkX < stats.lowestChunkX) {
                                        stats.lowestChunkX = chunkX;
                                    }
                                    if (chunkX > stats.highestChunkX) {
                                        stats.highestChunkX = chunkX;
                                    }
                                    if (chunkZ < stats.lowestChunkZ) {
                                        stats.lowestChunkZ = chunkZ;
                                    }
                                    if (chunkZ > stats.highestChunkZ) {
                                        stats.highestChunkZ = chunkZ;
                                    }
                                    xValues.add(chunkX);
                                    zValues.add(chunkZ);
                                    chunks.add(new Point(chunkX, chunkZ));
                                }
                            }
                        }
                    } finally {
                        regionFile.close();
                    }
                } catch (IOException e) {
                    throw new RuntimeException("I/O error while analyzing map " + worldDir, e);
                }
                count++;
                progressReceiver.setProgress((float) count / (regionFiles.length + 1));
            }
            stats.chunkCount = chunkCount;
            if (chunkCount == 0) {
                // Completely empty map (wrong region file format)?
                progressReceiver.setProgress(1.0f);
                return stats;
            }
            Collections.sort(xValues);
            int p1 = xValues.size() / 4;
            float q1 = xValues.get(p1) * 0.75f + xValues.get(p1 + 1) * 0.25f;
            int p2 = xValues.size() / 2;
            float q2 = (xValues.get(p2) + xValues.get(p2 + 1)) / 2f;
            int p3 = xValues.size() * 3 / 4;
            float q3 = xValues.get(p3) * 0.25f + xValues.get(p3 + 1) * 0.75f;
            float iqr = q3 - q1;
            int lowerLimit = (int) (q2 - iqr * 1.5f);
            int upperLimit = (int) (q2 + iqr * 1.5f);
            for (Point chunk : chunks) {
                if ((chunk.x < lowerLimit) || (chunk.x > upperLimit)) {
                    stats.outlyingChunks.add(chunk);
                }
            }
            Collections.sort(zValues);
            p1 = zValues.size() / 4;
            q1 = zValues.get(p1) * 0.75f + zValues.get(p1 + 1) * 0.25f;
            p2 = zValues.size() / 2;
            q2 = (zValues.get(p2) + zValues.get(p2 + 1)) / 2f;
            p3 = zValues.size() * 3 / 4;
            q3 = zValues.get(p3) * 0.25f + zValues.get(p3 + 1) * 0.75f;
            iqr = q3 - q1;
            lowerLimit = (int) (q2 - iqr * 1.5f);
            upperLimit = (int) (q2 + iqr * 1.5f);
            for (Point chunk : chunks) {
                if ((chunk.y < lowerLimit) || (chunk.y > upperLimit)) {
                    stats.outlyingChunks.add(chunk);
                }
            }
            if (!stats.outlyingChunks.isEmpty()) {
                chunks.stream().filter(chunk -> !stats.outlyingChunks.contains(chunk)).forEach(chunk -> {
                    if (chunk.x < stats.lowestChunkXNoOutliers) {
                        stats.lowestChunkXNoOutliers = chunk.x;
                    }
                    if (chunk.x > stats.highestChunkXNoOutliers) {
                        stats.highestChunkXNoOutliers = chunk.x;
                    }
                    if (chunk.y < stats.lowestChunkZNoOutliers) {
                        stats.lowestChunkZNoOutliers = chunk.y;
                    }
                    if (chunk.y > stats.highestChunkZNoOutliers) {
                        stats.highestChunkZNoOutliers = chunk.y;
                    }
                });
            } else {
                stats.lowestChunkXNoOutliers = stats.lowestChunkX;
                stats.highestChunkXNoOutliers = stats.highestChunkX;
                stats.lowestChunkZNoOutliers = stats.lowestChunkZ;
                stats.highestChunkZNoOutliers = stats.highestChunkZ;
            }
            progressReceiver.setProgress(1.0f);
            return stats;
        }
    }, true);
    if ((mapStatistics != null) && (mapStatistics.chunkCount > 0)) {
        int width = mapStatistics.highestChunkXNoOutliers - mapStatistics.lowestChunkXNoOutliers + 1;
        int length = mapStatistics.highestChunkZNoOutliers - mapStatistics.lowestChunkZNoOutliers + 1;
        int area = (mapStatistics.chunkCount - mapStatistics.outlyingChunks.size());
        labelWidth.setText(FORMATTER.format(width * 16) + " blocks (from " + FORMATTER.format(mapStatistics.lowestChunkXNoOutliers << 4) + " to " + FORMATTER.format((mapStatistics.highestChunkXNoOutliers << 4) + 15) + "; " + FORMATTER.format(width) + " chunks)");
        labelLength.setText(FORMATTER.format(length * 16) + " blocks (from " + FORMATTER.format(mapStatistics.lowestChunkZNoOutliers << 4) + " to " + FORMATTER.format((mapStatistics.highestChunkZNoOutliers << 4) + 15) + "; " + FORMATTER.format(length) + " chunks)");
        labelArea.setText(FORMATTER.format(area * 256L) + " blocksĀ² (" + FORMATTER.format(area) + " chunks)");
        if (!mapStatistics.outlyingChunks.isEmpty()) {
            // There are outlying chunks
            int widthWithOutliers = mapStatistics.highestChunkX - mapStatistics.lowestChunkX + 1;
            int lengthWithOutliers = mapStatistics.highestChunkZ - mapStatistics.lowestChunkZ + 1;
            int areaOfOutliers = mapStatistics.outlyingChunks.size();
            labelOutliers1.setVisible(true);
            labelOutliers2.setVisible(true);
            labelWidthWithOutliers.setText(FORMATTER.format(widthWithOutliers * 16) + " blocks (" + FORMATTER.format(widthWithOutliers) + " chunks)");
            labelWidthWithOutliers.setVisible(true);
            labelOutliers3.setVisible(true);
            labelLengthWithOutliers.setText(FORMATTER.format(lengthWithOutliers * 16) + " blocks (" + FORMATTER.format(lengthWithOutliers) + " chunks)");
            labelLengthWithOutliers.setVisible(true);
            labelOutliers4.setVisible(true);
            labelAreaOutliers.setText(FORMATTER.format(areaOfOutliers * 256L) + " blocksĀ² (" + FORMATTER.format(areaOfOutliers) + " chunks)");
            labelAreaOutliers.setVisible(true);
            checkBoxImportOutliers.setVisible(true);
            // The dialog may need to become bigger:
            pack();
        }
    }
}
Also used : org.pepsoft.worldpainter(org.pepsoft.worldpainter) java.util(java.util) DocumentListener(javax.swing.event.DocumentListener) ProgressDialog(org.pepsoft.util.swing.ProgressDialog) IOException(java.io.IOException) FileFilter(javax.swing.filechooser.FileFilter) File(java.io.File) NumberFormat(java.text.NumberFormat) InvocationTargetException(java.lang.reflect.InvocationTargetException) java.awt(java.awt) ProgressTask(org.pepsoft.util.swing.ProgressTask) List(java.util.List) ProgressReceiver(org.pepsoft.util.ProgressReceiver) OperationCancelled(org.pepsoft.util.ProgressReceiver.OperationCancelled) FileUtils(org.pepsoft.util.FileUtils) Level(org.pepsoft.minecraft.Level) Pattern(java.util.regex.Pattern) DocumentEvent(javax.swing.event.DocumentEvent) MinecraftUtil(org.pepsoft.worldpainter.util.MinecraftUtil) SUPPORTED_VERSION_2(org.pepsoft.minecraft.Constants.SUPPORTED_VERSION_2) RegionFile(org.pepsoft.minecraft.RegionFile) javax.swing(javax.swing) SUPPORTED_VERSION_1(org.pepsoft.minecraft.Constants.SUPPORTED_VERSION_1) Pattern(java.util.regex.Pattern) ProgressTask(org.pepsoft.util.swing.ProgressTask) IOException(java.io.IOException) RegionFile(org.pepsoft.minecraft.RegionFile) ProgressReceiver(org.pepsoft.util.ProgressReceiver) Level(org.pepsoft.minecraft.Level) File(java.io.File) RegionFile(org.pepsoft.minecraft.RegionFile)

Example 5 with Level

use of org.pepsoft.minecraft.Level in project WorldPainter by Captain-Chaos.

the class BiomesViewerFrame method playHere.

private void playHere(boolean creativeMode) {
    String name = JOptionPane.showInputDialog(BiomesViewerFrame.this, "Type a name for the map:", "Map Name", JOptionPane.QUESTION_MESSAGE);
    if ((name == null) || (name.trim().length() == 0)) {
        return;
    }
    name = name.trim();
    File savesDir;
    boolean minecraftDirUsed = false;
    File minecraftDir = MinecraftUtil.findMinecraftDir();
    if (minecraftDir != null) {
        savesDir = new File(minecraftDir, "saves");
        minecraftDirUsed = true;
    } else {
        savesDir = DesktopUtils.getDocumentsFolder();
    }
    File worldDir = new File(savesDir, name);
    int ordinal = 1;
    while (worldDir.isDirectory()) {
        worldDir = new File(savesDir, name + ordinal);
        ordinal++;
    }
    if (!worldDir.mkdirs()) {
        throw new RuntimeException("Could not create " + worldDir);
    }
    BiomeScheme biomeScheme1 = BiomesViewerFrame.this.biomeScheme;
    Level level = new Level(Constants.DEFAULT_MAX_HEIGHT_1, (biomeScheme1 instanceof Minecraft1_1BiomeScheme) ? DefaultPlugin.JAVA_MCREGION : DefaultPlugin.JAVA_ANVIL);
    if (!(biomeScheme1 instanceof Minecraft1_1BiomeScheme)) {
        level.setGenerator(((biomeScheme1 instanceof Minecraft1_3LargeBiomeScheme) || (biomeScheme1 instanceof Minecraft1_7LargeBiomeScheme) || (biomeScheme1 instanceof Minecraft1_8LargeBiomeScheme) || (biomeScheme1 instanceof Minecraft1_12LargeBiomeScheme)) ? Generator.LARGE_BIOMES : Generator.DEFAULT);
    }
    if (creativeMode) {
        level.setGameType(Constants.GAME_TYPE_CREATIVE);
    } else {
        level.setGameType(Constants.GAME_TYPE_SURVIVAL);
    }
    level.setMapFeatures(true);
    level.setName(name);
    level.setSeed(((Number) seedSpinner.getValue()).longValue());
    Point worldCoords = imageViewer.getViewLocation();
    level.setSpawnX(worldCoords.x);
    level.setSpawnZ(worldCoords.y);
    level.setSpawnY(64);
    try {
        level.save(worldDir);
    } catch (IOException e) {
        throw new RuntimeException("I/O error writing level.dat file", e);
    }
    if (minecraftDirUsed) {
        JOptionPane.showMessageDialog(BiomesViewerFrame.this, "Map saved! You can find it in Minecraft under Singleplayer.");
    } else {
        JOptionPane.showMessageDialog(BiomesViewerFrame.this, "Map saved as " + worldDir + ".\nMove it to your Minecraft saves directory to play.");
    }
}
Also used : IOException(java.io.IOException) Level(org.pepsoft.minecraft.Level) File(java.io.File)

Aggregations

File (java.io.File)8 Level (org.pepsoft.minecraft.Level)8 IOException (java.io.IOException)5 RegionFile (org.pepsoft.minecraft.RegionFile)3 MinecraftWorld (org.pepsoft.worldpainter.exporting.MinecraftWorld)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)2 ProgressReceiver (org.pepsoft.util.ProgressReceiver)2 ProgressTask (org.pepsoft.util.swing.ProgressTask)2 JavaMinecraftWorld (org.pepsoft.worldpainter.exporting.JavaMinecraftWorld)2 java.awt (java.awt)1 BufferedImage (java.awt.image.BufferedImage)1 DataOutputStream (java.io.DataOutputStream)1 FileOutputStream (java.io.FileOutputStream)1 FilenameFilter (java.io.FilenameFilter)1 NumberFormat (java.text.NumberFormat)1 java.util (java.util)1 Arrays (java.util.Arrays)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1