//////////////////////////////////////////////////////////////////////////////////////////////////// // PlotSquared - A plot manager and world generator for the Bukkit API / // Copyright (c) 2014 IntellectualSites/IntellectualCrafters / // / // This program is free software; you can redistribute it and/or modify / // it under the terms of the GNU General Public License as published by / // the Free Software Foundation; either version 3 of the License, or / // (at your option) any later version. / // / // This program is distributed in the hope that it will be useful, / // but WITHOUT ANY WARRANTY; without even the implied warranty of / // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / // GNU General Public License for more details. / // / // You should have received a copy of the GNU General Public License / // along with this program; if not, write to the Free Software Foundation, / // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// package com.intellectualcrafters.plot.commands; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import com.intellectualcrafters.configuration.ConfigurationSection; import com.intellectualcrafters.configuration.file.YamlConfiguration; import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.ConfigurationNode; import com.intellectualcrafters.plot.object.FileBytes; import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.SetupObject; import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.SetupUtils; import com.intellectualcrafters.plot.util.TaskManager; public class Template extends SubCommand { public Template() { super("template", "plots.admin", "Create or use a world template", "template", "", CommandCategory.DEBUG, false); } public static boolean extractAllFiles(String world, String template) { byte[] buffer = new byte[2048]; try { File folder = new File(PS.get().IMP.getDirectory() + File.separator + "templates"); if (!folder.exists()) { return false; } File input = new File(folder + File.separator + template + ".template"); File output = PS.get().IMP.getDirectory(); if (!output.exists()) { output.mkdirs(); } ZipInputStream zis = new ZipInputStream(new FileInputStream(input)); ZipEntry ze = zis.getNextEntry(); while (ze != null) { String name = ze.getName(); File newFile = new File((output + File.separator + name).replaceAll("__TEMP_DIR__", world)); new File(newFile.getParent()).mkdirs(); FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); ze = zis.getNextEntry(); } zis.closeEntry(); zis.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public static byte[] getBytes(PlotWorld plotworld) { ConfigurationSection section = PS.get().config.getConfigurationSection("worlds." + plotworld.worldname); YamlConfiguration config = new YamlConfiguration(); String generator = SetupUtils.manager.getGenerator(plotworld); if (generator != null) { config.set("generator.plugin", generator); } for (String key : section.getKeys(true)) { config.set(key, section.get(key)); } return config.saveToString().getBytes(); } public static void zipAll(final String world, Set files) throws IOException { File output = new File(PS.get().IMP.getDirectory() + File.separator + "templates"); output.mkdirs(); FileOutputStream fos = new FileOutputStream(output + File.separator + world + ".template"); ZipOutputStream zos = new ZipOutputStream(fos); for (FileBytes file : files) { ZipEntry ze = new ZipEntry(file.path); zos.putNextEntry(ze); zos.write(file.data); } zos.closeEntry(); zos.close(); } @Override public boolean execute(final PlotPlayer plr, final String... args) { if (args.length != 2 && args.length != 3) { if (args.length == 1) { if (args[0].equalsIgnoreCase("export")) { MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot template export "); return false; } else if (args[0].equalsIgnoreCase("import")) { MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot template import