package jk_5.nailed.plugins.worldedit;
import com.sk89q.worldedit.LocalConfiguration;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.session.SessionManager;
import com.sk89q.worldedit.world.snapshot.SnapshotRepository;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;
import java.util.HashSet;
public class WorldEditConfig extends LocalConfiguration {
private static final Logger logger = LogManager.getLogger();
@Override
public void load() {
File file = new File("settings.conf");
logger.info("Loading config");
if(!file.exists() || file.length() == 0){
ReadableByteChannel in = null;
FileChannel out = null;
try{
in = Channels.newChannel(WorldEditConfig.class.getResourceAsStream("/reference.conf"));
out = new FileOutputStream(file).getChannel();
out.transferFrom(in, 0, Long.MAX_VALUE);
}catch(Exception e){
logger.error("Was not able to load WorldEdit config", e);
}finally{
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
}
Config defaults = ConfigFactory.defaultReference().withOnlyPath("worldedit");
Config conf = ConfigFactory.parseFile(file).withFallback(defaults);
Config config;
try{
config = conf.getConfig("worldedit");
}catch(Exception e){
logger.warn("Failed to load config, using defaults", e);
config = defaults.getConfig("worldedit");
}
profile = config.getBoolean("profile");
wandItem = config.getInt("wand-item");
defaultChangeLimit = Math.max(-1, config.getInt("limits.max-blocks-changed.default"));
maxChangeLimit = Math.max(-1, config.getInt("limits.max-blocks-changed.maximum"));
defaultMaxPolygonalPoints = Math.max(-1, config.getInt("limits.max-polygonal-points.default"));
maxPolygonalPoints = Math.max(-1,config.getInt("limits.max-polygonal-points.maximum"));
defaultMaxPolyhedronPoints = Math.max(-1, config.getInt("limits.max-polyhedron-points.default"));
maxPolyhedronPoints = Math.max(-1, config.getInt("limits.max-polyhedron-points.maximum"));
maxRadius = Math.max(-1, config.getInt("limits.max-radius"));
maxBrushRadius = config.getInt("limits.max-brush-radius");
maxSuperPickaxeSize = Math.max(1, config.getInt("limits.max-super-pickaxe-size"));
butcherDefaultRadius = Math.max(-1, config.getInt("limits.butcher-radius.default"));
butcherMaxRadius = Math.max(-1, config.getInt("limits.butcher-radius.maximum"));
disallowedBlocks = new HashSet<Integer>(config.getIntList("limits.disallowed-blocks"));
allowedDataCycleBlocks = new HashSet<Integer>(config.getIntList("limits.allowed-data-cycle-blocks"));
registerHelp = config.getBoolean("register-help");
logCommands = config.getBoolean("logging.log-commands");
logFile = config.getString("logging.file");
superPickaxeDrop = config.getBoolean("super-pickaxe.drop-items");
superPickaxeManyDrop = config.getBoolean("super-pickaxe.many-drop-items");
noDoubleSlash = config.getBoolean("no-double-slash");
useInventory = config.getBoolean("use-inventory.enable");
useInventoryOverride = config.getBoolean("use-inventory.allow-override");
useInventoryCreativeOverride = config.getBoolean("use-inventory.creative-mode-overrides");
navigationWand = config.getInt("navigation-wand.item");
navigationWandMaxDistance = config.getInt("navigation-wand.max-distance");
navigationUseGlass = config.getBoolean("navigation.use-glass");
scriptTimeout = config.getInt("scripting.timeout");
scriptsDir = config.getString("scripting.dir");
saveDir = config.getString("saving.dir");
allowSymlinks = config.getBoolean("files.allow-symbolic-links");
LocalSession.MAX_HISTORY_SIZE = Math.max(0, config.getInt("history.size"));
SessionManager.EXPIRATION_GRACE = config.getInt("history.expiration") * 60 * 1000;
showHelpInfo = config.getBoolean("show-help-on-first-use");
String snapshotsDir = config.getString("snapshots.directory");
if(!snapshotsDir.isEmpty()){
snapshotRepo = new SnapshotRepository(snapshotsDir);
}
String typ = config.getString("shell-save-type").trim();
shellSaveType = typ.isEmpty() ? null : typ;
}
}