package jk_5.nailed.server.config; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import net.minecraft.server.dedicated.PropertyManager; 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.io.IOException; import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.ReadableByteChannel; //TODO: do some mixin magic in here public class MinecraftConfig extends PropertyManager { private static final Logger logger = LogManager.getLogger(); private final File file = new File("settings.conf"); private Config config; public MinecraftConfig() { super(null); logger.info("Loading minecraft config"); if(!file.exists() || file.length() == 0){ ReadableByteChannel in = null; FileChannel out = null; try{ in = Channels.newChannel(this.getClass().getResourceAsStream("/reference.conf")); out = new FileOutputStream(file).getChannel(); out.transferFrom(in, 0, Long.MAX_VALUE); }catch(IOException e){ logger.error("Error while creating default config file", e); }finally{ IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); } } Config defaults = ConfigFactory.defaultReference().withOnlyPath("minecraft"); Config conf = ConfigFactory.parseFile(file).withFallback(defaults); try{ config = conf.getConfig("minecraft"); }catch(Throwable e){ logger.warn("Failed to load minecraft config, using defaults.", e); config = defaults.getConfig("minecraft"); } } private String remap(String key){ if(key.equals("enable-query")){ return "query.enabled"; }else if(key.equals("enable-rcon")){ return "rcon.enabled"; }else{ return key; } } @Override public void saveProperties(){ logger.debug("Attempted to save minecraft config"); } @Override public File getPropertiesFile() { return null; } @Override public String getStringProperty(String key, String defaultValue) { if(config.hasPath(remap(key))){ return config.getString(remap(key)); }else{ logger.warn("Attempted to get minecraft config value \'{0}\', but it was not found in the configuration. Returning default value (\'{1}\')", remap(key), defaultValue); return defaultValue; } } @Override public int getIntProperty(String key, int defaultValue) { if(config.hasPath(remap(key))){ return config.getInt(remap(key)); }else{ logger.warn("Attempted to get minecraft config value \'{0}\', but it was not found in the configuration. Returning default value (\'{1}\')", remap(key), defaultValue); return defaultValue; } } @Override public long getLongProperty(String key, long defaultValue) { if(config.hasPath(remap(key))){ return config.getLong(remap(key)); }else{ logger.warn("Attempted to get minecraft config value \'{0}\', but it was not found in the configuration. Returning default value (\'{1}\')", remap(key), defaultValue); return defaultValue; } } @Override public boolean getBooleanProperty(String key, boolean defaultValue) { if(config.hasPath(remap(key))){ return config.getBoolean(remap(key)); }else{ logger.warn("Attempted to get minecraft config value \'{0}\', but it was not found in the configuration. Returning default value (\'{1}\')", remap(key), defaultValue); return defaultValue; } } @Override public void setProperty(String key, Object value) { } @Override public void generateNewProperties() { } }