Added Config Getters
because the tests wont run cause the plugin is complaining
This commit is contained in:
parent
f8126979f1
commit
2c9f8dd51a
|
@ -30,12 +30,13 @@ import java.io.IOException;
|
|||
public class WorldSystem extends JavaPlugin {
|
||||
private static boolean is1_13Plus = false;
|
||||
final private String version = this.getDescription().getVersion();
|
||||
private static File configFile;
|
||||
private CreatorAdapter creator;
|
||||
|
||||
public static void createConfigs() {
|
||||
File folder = getInstance().getDataFolder();
|
||||
File dir = new File(folder + "/worldsources");
|
||||
File config = new File(folder, "config.yml");
|
||||
configFile = new File(folder, "config.yml");
|
||||
File dconfig = new File(folder, "dependence.yml");
|
||||
File languages = new File(folder + "/languages");
|
||||
File gui = new File(folder, "gui.yml");
|
||||
|
@ -213,4 +214,6 @@ public class WorldSystem extends JavaPlugin {
|
|||
return creator;
|
||||
}
|
||||
|
||||
public static File getConfigFile() { return configFile; }
|
||||
|
||||
}
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
package de.butzlabben.world.autoupdater;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.nio.channels.Channels;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
|
||||
/**
|
||||
* @author Butzlabben
|
||||
* @since 02.05.2018
|
||||
*/
|
||||
public class AutoUpdate implements Runnable {
|
||||
|
||||
private final UpdateInformations ui;
|
||||
private final String jar;
|
||||
|
||||
protected AutoUpdate(UpdateInformations ui, String jar) {
|
||||
this.ui = ui;
|
||||
this.jar = jar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
FileChannel out = null;
|
||||
FileOutputStream outStream = null;
|
||||
try {
|
||||
|
||||
ReadableByteChannel in = Channels
|
||||
.newChannel(new URL(ui.getURL()).openStream());
|
||||
outStream = new FileOutputStream(jar);
|
||||
out = outStream.getChannel();
|
||||
out.transferFrom(in, 0, Long.MAX_VALUE);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (out != null)
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (outStream != null) {
|
||||
try {
|
||||
outStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,126 +0,0 @@
|
|||
package de.butzlabben.world.autoupdater;
|
||||
|
||||
import de.butzlabben.world.config.PluginConfig;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* @author Butzlabben
|
||||
* @since 01.05.2018
|
||||
*/
|
||||
public class AutoUpdater implements Listener {
|
||||
|
||||
private static AutoUpdater instance;
|
||||
private boolean confirmed;
|
||||
private boolean confirmNeed;
|
||||
private AutoUpdate au;
|
||||
|
||||
private AutoUpdater() {
|
||||
confirmNeed = PluginConfig.confirmNeed();
|
||||
UpdateInformations ui = UpdateInformations.getInformations();
|
||||
if (ui == null) {
|
||||
Bukkit.getConsoleSender().sendMessage(PluginConfig.getPrefix() + "§cCouldn't contact autoupdate server");
|
||||
return;
|
||||
}
|
||||
Plugin plugin = Bukkit.getPluginManager().getPlugin(ui.getPlugin());
|
||||
if (plugin == null)
|
||||
return;
|
||||
String v = plugin.getDescription().getVersion();
|
||||
if (!ui.getVersion().equals(plugin.getDescription().getVersion())) {
|
||||
|
||||
if (!ui.isSilent()) {
|
||||
Bukkit.getConsoleSender().sendMessage(PluginConfig.getPrefix() + "Found new version. Current: " + v
|
||||
+ ", Available: " + ui.getVersion());
|
||||
}
|
||||
// Get jar file
|
||||
Method getFileMethod;
|
||||
try {
|
||||
getFileMethod = JavaPlugin.class.getDeclaredMethod("getFile");
|
||||
} catch (NoSuchMethodException | SecurityException e1) {
|
||||
e1.printStackTrace();
|
||||
return;
|
||||
}
|
||||
getFileMethod.setAccessible(true);
|
||||
File file;
|
||||
|
||||
try {
|
||||
file = (File) getFileMethod.invoke(plugin);
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
getFileMethod.setAccessible(false);
|
||||
|
||||
String jar = file.getAbsolutePath();
|
||||
au = new AutoUpdate(ui, jar);
|
||||
if (ui.isSilent() || !confirmNeed) {
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(au));
|
||||
if (!ui.isSilent())
|
||||
Bukkit.getConsoleSender().sendMessage(
|
||||
PluginConfig.getPrefix() + "§aAutoupdate confirmed, §crestart §ato apply changes");
|
||||
confirmed = true;
|
||||
} else {
|
||||
Bukkit.getPluginManager().registerEvents(this, plugin);
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
p.sendMessage(
|
||||
PluginConfig.getPrefix() + "§aFound new update. Confirm autoupdate with §c/ws confirm");
|
||||
p.sendMessage(PluginConfig.getPrefix() + "§aRead changelogs: https://www.spigotmc.org/resources/49756/updates");
|
||||
}
|
||||
Bukkit.getConsoleSender().sendMessage(
|
||||
PluginConfig.getPrefix() + "§aFound new update. Confirm autoupdate with §c/ws confirm");
|
||||
Bukkit.getConsoleSender().sendMessage(PluginConfig.getPrefix() + "§aRead changelogs: https://www.spigotmc.org/resources/49756/updates");
|
||||
}
|
||||
} else {
|
||||
confirmNeed = false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void startAsync() {
|
||||
Thread t = new Thread(() -> {
|
||||
getInstance();
|
||||
});
|
||||
t.setName("update-thread-worldsystem");
|
||||
t.start();
|
||||
}
|
||||
|
||||
public static synchronized AutoUpdater getInstance() {
|
||||
if (instance == null)
|
||||
instance = new AutoUpdater();
|
||||
return instance;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void on(PlayerJoinEvent e) {
|
||||
if (e.getPlayer().hasPermission("ws.confirm")) {
|
||||
e.getPlayer().sendMessage(
|
||||
PluginConfig.getPrefix() + "§aFound new update. Confirm autoupdate with §c/ws confirm");
|
||||
e.getPlayer().sendMessage(PluginConfig.getPrefix() + "§aRead changelogs: https://www.spigotmc.org/resources/49756/updates");
|
||||
}
|
||||
}
|
||||
|
||||
public boolean confirm() {
|
||||
if (confirmNeed && !confirmed) {
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(au));
|
||||
confirmed = true;
|
||||
HandlerList.unregisterAll(this);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean confirmed() {
|
||||
return confirmed;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
package de.butzlabben.world.autoupdater;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import de.butzlabben.WorldSystem;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
/**
|
||||
* @author Butzlabben
|
||||
* @since 02.05.2018
|
||||
*/
|
||||
public class UpdateInformations {
|
||||
|
||||
private final String version, url, plugin;
|
||||
private final boolean silent;
|
||||
|
||||
public UpdateInformations(String version, String url, String plugin, boolean silent) {
|
||||
this.version = version;
|
||||
this.url = url;
|
||||
this.plugin = plugin;
|
||||
this.silent = silent;
|
||||
}
|
||||
|
||||
protected static synchronized UpdateInformations getInformations() {
|
||||
String json = callURL("https://zendilu.net/butzlabben/worldsystem/info.php?version=" + WorldSystem.getInstance().getDescription().getVersion());
|
||||
Gson gson = new GsonBuilder().create();
|
||||
return gson.fromJson(json, UpdateInformations.class);
|
||||
}
|
||||
|
||||
public static String callURL(String URL) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
URLConnection urlConn;
|
||||
InputStreamReader in = null;
|
||||
try {
|
||||
URL url = new URL(URL);
|
||||
urlConn = url.openConnection();
|
||||
urlConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
|
||||
|
||||
if (urlConn != null)
|
||||
urlConn.setReadTimeout(60 * 1000);
|
||||
|
||||
if (urlConn != null && urlConn.getInputStream() != null) {
|
||||
in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
|
||||
BufferedReader bufferedReader = new BufferedReader(in);
|
||||
|
||||
if (bufferedReader != null) {
|
||||
int cp;
|
||||
while ((cp = bufferedReader.read()) != -1) {
|
||||
sb.append((char) cp);
|
||||
}
|
||||
bufferedReader.close();
|
||||
}
|
||||
}
|
||||
|
||||
in.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public String getURL() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getPlugin() {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
public boolean isSilent() {
|
||||
return silent;
|
||||
}
|
||||
}
|
|
@ -28,12 +28,6 @@ public class CommandRegistry implements CommandExecutor {
|
|||
return ws.getCommand(sender, command, label, args);
|
||||
case "gui":
|
||||
return ws.guiCommand(sender, command, label, args);
|
||||
case "confirm":
|
||||
if (sender.hasPermission("ws.confirm")) {
|
||||
return ws.confirmCommand(sender, command, label, args);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
case "home":
|
||||
return ws.homeCommand(sender, command, label, args);
|
||||
case "info":
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package de.butzlabben.world.command.commands;
|
||||
|
||||
import de.butzlabben.WorldSystem;
|
||||
import de.butzlabben.world.autoupdater.AutoUpdater;
|
||||
import de.butzlabben.world.config.DependenceConfig;
|
||||
import de.butzlabben.world.config.MessageConfig;
|
||||
import de.butzlabben.world.config.PluginConfig;
|
||||
|
@ -58,18 +57,6 @@ public class WSCommands {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean confirmCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
CommandSender cs = sender;
|
||||
|
||||
if (AutoUpdater.getInstance().confirmed()) {
|
||||
cs.sendMessage(PluginConfig.getPrefix() + "§cAlready confirmed or no confirm needed");
|
||||
return false;
|
||||
}
|
||||
AutoUpdater.getInstance().confirm();
|
||||
cs.sendMessage(PluginConfig.getPrefix() + "§aAutoupdate confirmed, §crestart §ato apply changes");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public boolean getCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (sender instanceof Player) {
|
||||
|
|
|
@ -23,9 +23,12 @@ public class PluginConfig {
|
|||
|
||||
//New Config
|
||||
private YamlConfiguration config;
|
||||
private File configFile;
|
||||
|
||||
|
||||
//TODO Document
|
||||
public PluginConfig(File configFile) throws FileNotFoundException {
|
||||
this.configFile = configFile;
|
||||
try {
|
||||
config = YamlConfiguration.loadConfiguration(
|
||||
new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8));
|
||||
|
@ -36,99 +39,156 @@ public class PluginConfig {
|
|||
try {
|
||||
verifyConfigFormating();
|
||||
} catch (InvalidConfigFormatException e) {
|
||||
e.printStackTrace();
|
||||
//Disable the Plugin
|
||||
Bukkit.getPluginManager().disablePlugin(WorldSystem.getProvidingPlugin(WorldSystem.class));
|
||||
try {
|
||||
Files.copy(configFile.toPath(),
|
||||
new File(configFile.getParentFile(), "config-broken-"
|
||||
+ new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss").format(new Date()) + ".yml").toPath(),
|
||||
StandardCopyOption.REPLACE_EXISTING);
|
||||
Files.delete(configFile.toPath());
|
||||
System.err.println("[WorldSystem] Config is broken, creating a new one!");
|
||||
} catch (IOException ex) {
|
||||
|
||||
//Somthing Really Bad Happened
|
||||
//TODO Log it
|
||||
ex.printStackTrace();
|
||||
}
|
||||
try {
|
||||
verifyConfigFormating();
|
||||
} catch (InvalidConfigFormatException ex) {
|
||||
//Should Never Run
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void verifyConfigFormating() throws InvalidConfigFormatException {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* private final static GameMode[] gameModes = new GameMode[]{GameMode.SURVIVAL, GameMode.CREATIVE,
|
||||
GameMode.ADVENTURE, GameMode.SPECTATOR};
|
||||
private static File file;
|
||||
|
||||
private PluginConfig() {
|
||||
}
|
||||
|
||||
public static void checkConfig(File f) {
|
||||
file = f;
|
||||
if (file.exists()) {
|
||||
YamlConfiguration cfg = getConfig();
|
||||
if (!(cfg.isString("worldfolder") && cfg.isInt("unloadingtime")
|
||||
&& cfg.isBoolean("survival") && cfg.isString("language") && cfg.isString("prefix")
|
||||
&& cfg.isInt("request_expires") && cfg.isBoolean("need_confirm")
|
||||
&& cfg.isBoolean("contact_authserver") && cfg.isBoolean("spawn_teleportation")
|
||||
&& cfg.isInt("delete_after") && cfg.isBoolean("worldtemplates.multi_choose")
|
||||
&& cfg.isString("worldtemplates.default") && cfg.isBoolean("load_worlds_async") &&
|
||||
|
||||
// Database stuff
|
||||
cfg.isString("database.type") && cfg.isString("database.worlds_table_name") && cfg.isString("database.players_table_name")
|
||||
&& cfg.isString("database.mysql_settings.host") && cfg.isInt("database.mysql_settings.port")
|
||||
&& cfg.isString("database.mysql_settings.username") && cfg.isString("database.mysql_settings.password")
|
||||
&& cfg.isString("database.mysql_settings.database") && cfg.isString("database.sqlite_settings.file") &&
|
||||
|
||||
cfg.isInt("lagsystem.period_in_seconds") && cfg.isInt("lagsystem.entities_per_world")
|
||||
&& cfg.isBoolean("lagsystem.garbagecollector.use")
|
||||
&& cfg.isInt("lagsystem.garbagecollector.period_in_minutes") &&
|
||||
|
||||
cfg.isString("spawn.spawnpoint.world") && cfg.isInt("spawn.gamemode")
|
||||
&& cfg.isBoolean("spawn.spawnpoint.use_last_location")
|
||||
&& (cfg.isDouble("spawn.spawnpoint.x") || cfg.isInt("spawn.spawnpoint.x"))
|
||||
&& (cfg.isDouble("spawn.spawnpoint.y") || cfg.isInt("spawn.spawnpoint.y"))
|
||||
&& (cfg.isDouble("spawn.spawnpoint.z") || cfg.isInt("spawn.spawnpoint.z"))
|
||||
&& (cfg.isDouble("spawn.spawnpoint.yaw") || cfg.isInt("spawn.spawnpoint.yaw"))
|
||||
&& (cfg.isDouble("spawn.spawnpoint.pitch") || cfg.isInt("spawn.spawnpoint.pitch")) &&
|
||||
|
||||
cfg.isBoolean("worldspawn.use") && cfg.isBoolean("worldspawn.use_last_location")
|
||||
&& (cfg.isDouble("worldspawn.spawnpoint.x") || cfg.isInt("worldspawn.spawnpoint.x"))
|
||||
&& (cfg.isDouble("worldspawn.spawnpoint.y") || cfg.isInt("worldspawn.spawnpoint.y"))
|
||||
&& (cfg.isDouble("worldspawn.spawnpoint.z") || cfg.isInt("worldspawn.spawnpoint.z"))
|
||||
&& (cfg.isDouble("worldspawn.spawnpoint.yaw") || cfg.isInt("worldspawn.spawnpoint.yaw"))
|
||||
&& (cfg.isDouble("worldspawn.spawnpoint.pitch") || cfg.isInt("worldspawn.spawnpoint.pitch")))) {
|
||||
try {
|
||||
Files.copy(file.toPath(),
|
||||
new File(file.getParentFile(), "config-broken-"
|
||||
+ new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss").format(new Date()) + ".yml").toPath(),
|
||||
StandardCopyOption.REPLACE_EXISTING);
|
||||
Files.delete(file.toPath());
|
||||
System.err.println("[WorldSystem] Config is broken, creating a new one!");
|
||||
checkConfig(f);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
InputStream in = JavaPlugin.getPlugin(WorldSystem.class).getResource("configOLD.yml");
|
||||
Files.copy(in, file.toPath());
|
||||
} catch (IOException e) {
|
||||
System.err.println("Wasn't able to create Config");
|
||||
e.printStackTrace();
|
||||
}
|
||||
//Verify General
|
||||
if (!(config.isString("playerWorldsDir") &&
|
||||
config.isInt("unloadTime") &&
|
||||
config.isString("prefix") &&
|
||||
config.isInt("deleteAfterDays") &&
|
||||
config.isString("worldDifficulty"))) {
|
||||
throw new InvalidConfigFormatException("Invaild Config Format in General Settings");
|
||||
}
|
||||
//Verify World Creation Settings
|
||||
if (!(config.isBoolean("multiChoose") &&
|
||||
config.isString("defaultGenerator") &&
|
||||
config.isString("worldGenTemplates") &&
|
||||
config.isInt("worldBorderDefaultSize") &&
|
||||
config.isInt("worldBorderCenter.x") &&
|
||||
config.isInt("worldBorderCenter.z")
|
||||
)) {
|
||||
throw new InvalidConfigFormatException("Invaild Config Format in World Creation Settings");
|
||||
}
|
||||
|
||||
// Should fix #2
|
||||
if (getSpawn(null).getWorld() == null) {
|
||||
Bukkit.getConsoleSender().sendMessage(getPrefix() + "§cWorld is null in spawn.world!");
|
||||
if (!(config.isString("serverSpawn.serverGamemode") &&
|
||||
config.isString("serverSpawn.serverSpawnPoint.worldName") &&
|
||||
config.isInt("serverSpawn.serverSpawnPoint.x") &&
|
||||
config.isInt("serverSpawn.serverSpawnPoint.y") &&
|
||||
config.isInt("serverSpawn.serverSpawnPoint.z") &&
|
||||
config.isString("wsWorldSpawn.worldGameMode") &&
|
||||
config.isBoolean("wsWorldSpawn.useLastLocation") &&
|
||||
config.isString("wsWorldSpawn.defaultWorldSpawnPoint.worldName") &&
|
||||
config.isInt("wsWorldSpawn.defaultWorldSpawnPoint.x") &&
|
||||
config.isInt("wsWorldSpawn.defaultWorldSpawnPoint.y") &&
|
||||
config.isInt("wsWorldSpawn.defaultWorldSpawnPoint.z"))) {
|
||||
throw new InvalidConfigFormatException("Invaild Config Format in World Entering/Exiting");
|
||||
}
|
||||
|
||||
if (!(config.isBoolean("announceAdvancements") &&
|
||||
config.isBoolean("commandBlockOutput") &&
|
||||
config.isBoolean("disableElytraMovementCheck") &&
|
||||
config.isBoolean("doDaylightCycle") &&
|
||||
config.isBoolean("doEntityDrops") &&
|
||||
config.isBoolean("doFireTick") &&
|
||||
config.isBoolean("doLimitedCrafting") &&
|
||||
config.isBoolean("doMobLoot") &&
|
||||
config.isBoolean("doMobSpawning") &&
|
||||
config.isBoolean("doTileDrops") &&
|
||||
config.isBoolean("doWeatherCycle") &&
|
||||
config.isBoolean("gameLoopFunction") &&
|
||||
config.isBoolean("keepInventory") &&
|
||||
config.isBoolean("logAdminCommands") &&
|
||||
config.isInt("maxCommandChainLength") &&
|
||||
config.isInt("maxEntityCramming") &&
|
||||
config.isBoolean("mobGriefing") &&
|
||||
config.isBoolean("naturalRegeneration") &&
|
||||
config.isInt("randomTickSpeed") &&
|
||||
config.isBoolean("reducedDebugInfo") &&
|
||||
config.isBoolean("sendCommandFeedback") &&
|
||||
config.isBoolean("showDeathMessages") &&
|
||||
config.isInt("spawnRadius") &&
|
||||
config.isBoolean("spectatorsGenerateChunks"))) {
|
||||
throw new InvalidConfigFormatException("Invaild Config Format in Gamerules ");
|
||||
}
|
||||
}
|
||||
|
||||
public static YamlConfiguration getConfig() {
|
||||
try {
|
||||
return YamlConfiguration
|
||||
.loadConfiguration(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
throw new IllegalStateException("Cannot access config file");
|
||||
public String getWorldDir() {
|
||||
return config.getString("playerWorldsDir", "plugins/WorldSystem/Worlds") + "/";
|
||||
}
|
||||
|
||||
public boolean useWorldSpawn() {
|
||||
return config.getBoolean("wsWorldSpawn.useLastLocation", true);
|
||||
}
|
||||
|
||||
public GameMode getWorldSystemGamemode() {
|
||||
return stringToGamemode(config.getString("wsWorldSpawn.worldGameMode", "Survival"));
|
||||
}
|
||||
|
||||
public GameMode getServerGamemode() {
|
||||
return stringToGamemode(config.getString("serverSpawn.serverGamemode", "Survival"));
|
||||
}
|
||||
|
||||
public int getUnloadingTime() {
|
||||
return config.getInt("unloadTime", 20);
|
||||
}
|
||||
|
||||
public boolean isMultiChoose() {
|
||||
return config.getBoolean("multiChoose", false);
|
||||
}
|
||||
|
||||
public String getDefaultWorldGenerator() {
|
||||
return config.getString("defaultGenerator", "Vanilla");
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
return config.getString("language", "en");
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return ChatColor.translateAlternateColorCodes('&', config.getString("prefix", "§8[§3WorldSystem§8] §6"));
|
||||
}
|
||||
|
||||
public Location getWorldSpawn(World w) {
|
||||
return getLocation(config, "wsWorldSpawn.defaultWorldSpawnPoint", w);
|
||||
}
|
||||
|
||||
public Location getSpawn(Player player) {
|
||||
Location location = getLocation(config, "wsWorldSpawn.defaultWorldSpawnPoint", Bukkit.getWorld(config.getString("wsWorldSpawn.defaultWorldSpawnPoint.worldName", "world")));
|
||||
|
||||
//TODO Player Positions with PlayerWorldData;
|
||||
return PlayerPositions.instance.injectPlayersLocation(player, location);
|
||||
}
|
||||
|
||||
|
||||
private GameMode stringToGamemode(String gamemode) {
|
||||
switch (gamemode.toLowerCase()) {
|
||||
case "Creative":
|
||||
return GameMode.CREATIVE;
|
||||
case "Adventure":
|
||||
return GameMode.ADVENTURE;
|
||||
default:
|
||||
return GameMode.SURVIVAL;
|
||||
}
|
||||
}
|
||||
|
||||
private static Location getLocation(YamlConfiguration cfg, String path, World world) {
|
||||
return new Location(world, cfg.getDouble(path + ".x", 0), cfg.getDouble(path + ".y", 20),
|
||||
cfg.getDouble(path + ".z", 0));
|
||||
}
|
||||
/*
|
||||
|
||||
public static int getGCPeriod() {
|
||||
return getConfig().getInt("lagsystem.garbagecollector.period_in_minutes", 5);
|
||||
}
|
||||
|
@ -145,45 +205,7 @@ public class PluginConfig {
|
|||
return getConfig().getInt("lagsystem.period_in_seconds", 10);
|
||||
}
|
||||
|
||||
public static boolean useWorldSpawn() {
|
||||
return getConfig().getBoolean("worldspawn.use", true);
|
||||
}
|
||||
|
||||
public static boolean isSurvival() {
|
||||
return getConfig().getBoolean("survival", false);
|
||||
}
|
||||
|
||||
public static int getUnloadingTime() {
|
||||
return getConfig().getInt("unloadingtime", 20);
|
||||
}
|
||||
|
||||
public static GameMode getSpawnGamemode() {
|
||||
return gameModes[getConfig().getInt("spawn.gamemode", 2)];
|
||||
}
|
||||
|
||||
public static String getWorlddir() {
|
||||
return getConfig().getString("worldfolder", "plugins/WorldSystem/Worlds") + "/";
|
||||
}
|
||||
|
||||
public static boolean isMultiChoose() {
|
||||
return getConfig().getBoolean("worldtemplates.multi_choose", false);
|
||||
}
|
||||
|
||||
public static String getDefaultWorldTemplate() {
|
||||
return getConfig().getString("worldtemplates.default", "");
|
||||
}
|
||||
|
||||
public static String getLanguage() {
|
||||
return getConfig().getString("language", "en");
|
||||
}
|
||||
|
||||
public static String getPrefix() {
|
||||
return ChatColor.translateAlternateColorCodes('&', getConfig().getString("prefix", "§8[§3WorldSystem§8] §6"));
|
||||
}
|
||||
|
||||
public static Location getWorldSpawn(World w) {
|
||||
return getLocation(getConfig(), "worldspawn.spawnpoint", w);
|
||||
}
|
||||
/////////////////////////////////////
|
||||
|
||||
public static Location getSpawn(Player player) {
|
||||
YamlConfiguration cfg = getConfig();
|
||||
|
@ -195,12 +217,6 @@ public class PluginConfig {
|
|||
return getConfig().getInt("request_expires", 20);
|
||||
}
|
||||
|
||||
private static Location getLocation(YamlConfiguration cfg, String path, World world) {
|
||||
return new Location(world, cfg.getDouble(path + ".x", 0), cfg.getDouble(path + ".y", 20),
|
||||
cfg.getDouble(path + ".z", 0), (float) cfg.getDouble(path + ".yaw", 0),
|
||||
(float) cfg.getDouble(path + ".pitch", 0));
|
||||
}
|
||||
|
||||
public static boolean confirmNeed() {
|
||||
return getConfig().getBoolean("need_confirm", true);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package de.butzlabben.world.wrapper;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import de.butzlabben.WorldSystem;
|
||||
import de.butzlabben.world.config.PluginConfig;
|
||||
import de.butzlabben.world.config.WorldConfig;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -9,6 +10,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
|
@ -176,7 +178,11 @@ public class WorldPlayer {
|
|||
public boolean isOnSystemWorld() {
|
||||
File worldconfig = new File(Bukkit.getWorldContainer(), worldname + "/worldconfig.yml");
|
||||
if (!worldconfig.exists()) {
|
||||
worldconfig = new File(PluginConfig.getWorlddir() + worldname + "/worldconfig.yml");
|
||||
try {
|
||||
worldconfig = new File(new PluginConfig(WorldSystem.getConfigFile()).getWorlddir() + worldname + "/worldconfig.yml");
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
if (worldconfig.exists()) {
|
||||
YamlConfiguration cfg = YamlConfiguration.loadConfiguration(worldconfig);
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
# General Settings #
|
||||
####################
|
||||
|
||||
# The Language to plugin should run in
|
||||
language: "en"
|
||||
#The Path that the Worlds of players will be stored when not in use.
|
||||
playerWorldsDir: 'plugins/WorldSystem/Worlds'
|
||||
|
||||
|
@ -29,7 +31,7 @@ deleteAfterDays: -1
|
|||
|
||||
#World Difficulty
|
||||
#Options: PEACEFUL, EASY, NORMAL, HARD
|
||||
worldDifficulty: EASY
|
||||
worldDifficulty: 'EASY'
|
||||
|
||||
##########################
|
||||
# World Creation Setting #
|
||||
|
@ -39,7 +41,7 @@ worldDifficulty: EASY
|
|||
multiChoose: false
|
||||
#The Default Generation File
|
||||
#Warning: "do not add the .json"
|
||||
defaultGenerator: 'vanilla'
|
||||
defaultGenerator: 'Vanilla'
|
||||
#World Generation Folder
|
||||
worldGenTemplates: 'plugins/WorldSystem/Generators'
|
||||
|
||||
|
@ -80,7 +82,7 @@ wsWorldSpawn:
|
|||
#Warning: Spelling Matters, Capitalization Does not
|
||||
worldGameMode: 'Survival'
|
||||
# places the player at their last known location in the world
|
||||
useLastLocation: true;
|
||||
useLastLocation: false;
|
||||
#The point the player should be placed when entering a WS World
|
||||
#for the first Time
|
||||
defaultWorldSpawnPoint:
|
||||
|
|
|
@ -279,7 +279,7 @@ worldchoose:
|
|||
|
||||
rows: 4
|
||||
|
||||
# The key must be named exactly as in the config.yml
|
||||
# The key must be named exactly as in the configOLD.yml
|
||||
template_default:
|
||||
enabled: true
|
||||
slot:
|
||||
|
|
|
@ -279,7 +279,7 @@ worldchoose:
|
|||
|
||||
rows: 4
|
||||
|
||||
# The key must be named exactly as in the config.yml
|
||||
# The key must be named exactly as in the configOLD.yml
|
||||
template_default:
|
||||
enabled: true
|
||||
slot:
|
||||
|
|
|
@ -1,133 +1,121 @@
|
|||
|
||||
|
||||
# Path where the worlds will be saved
|
||||
worldfolder: 'plugins/WorldSystem/Worlds'
|
||||
|
||||
worldtemplates:
|
||||
# Whether players can decide on different templates
|
||||
multi_choose: false
|
||||
# If multi_choose is disabled, which template should be choosen
|
||||
default: 'template_default'
|
||||
templates:
|
||||
# The "1" can be any key
|
||||
1:
|
||||
# Name of directory in plugins/WorldSystem/worldsources
|
||||
# e.g. this would be plugins/WorldSystem/worldsources/template_default
|
||||
name: 'template_default'
|
||||
# Just remove the permission field if everybody should be able to use this template
|
||||
2:
|
||||
name: 'another_template'
|
||||
# Only players with this exact permission can use and see this template
|
||||
# ws.* will not work with this
|
||||
permission: ws.template.another_template
|
||||
# If this config option is given, 100 is needed to create a world
|
||||
# This amount will then with withdrawn from the player
|
||||
cost: 100
|
||||
|
||||
# Options for random world generation
|
||||
# Here you can configure the world generator of a template
|
||||
generator:
|
||||
# A seed for worldgeneration
|
||||
# Set it to 0 for no seed-useage
|
||||
seed: 0
|
||||
# Environment for the world
|
||||
# Valid inputs are 'NORMAL', 'NETHER' and 'THE_END'
|
||||
environment: NORMAL
|
||||
# Type of the world eg. flat, amplified, ...
|
||||
# Valid types are 'NORMAL', 'VERSION_1_1', 'FLAT', 'AMPLIFIED', 'CUSTOMIZED' or 'LARGE_BIOMES'
|
||||
type: NORMAL
|
||||
# Put in here the name of a generator
|
||||
# If you have one from one plugin
|
||||
generator: ''
|
||||
|
||||
# If a confirm is needed before auto-update
|
||||
need_confirm: true
|
||||
|
||||
# When nobody is on a world time until it get unloaded
|
||||
unloadingtime: 20
|
||||
|
||||
# If true nobody can teleport or change their gamemode a WorldSystem world
|
||||
# Except for players with the permissions: ws.gamemode | ws.tp.*
|
||||
survival: false
|
||||
|
||||
# If WorldSystem should load the worlds async if possible (FAWE installed)
|
||||
load_worlds_async: true
|
||||
|
||||
# Options for the database saving player positions
|
||||
database:
|
||||
# Which type should be choosen:
|
||||
# 'mysql' or 'sqlite'
|
||||
# You need a working mysql database in order to use this option
|
||||
type: sqlite
|
||||
# How the table with the saved player positions on the playerworlds should be named
|
||||
worlds_table_name: worlds_positions
|
||||
# How the table with the saved player positions on the normal worlds should be named
|
||||
players_table_name: player_positions
|
||||
# how should the uuid cache be stored
|
||||
players_uuids: players_uuids
|
||||
|
||||
# Configure here your mysql connection
|
||||
mysql_settings:
|
||||
host: 127.0.0.1
|
||||
port: 3306
|
||||
username: root
|
||||
password: YOUR_PASSWORD_HERE
|
||||
database: database
|
||||
sqlite_settings:
|
||||
# Where the database file should be located
|
||||
file: 'plugins/WorldSystem/repository.db'
|
||||
|
||||
# If true players will teleported to the spawn on join
|
||||
spawn_teleportation: true
|
||||
|
||||
# Time in seconds until a request expires
|
||||
request_expires: 20
|
||||
|
||||
# Name of the languagefile in plugins/WorldSystem/languages/
|
||||
language: en
|
||||
|
||||
# Prefix which will be shown before each message
|
||||
prefix: '&8[&3WorldSystem&8] &6'
|
||||
|
||||
# Time in days after a not used world will be deleted
|
||||
# Set to -1 to disable
|
||||
delete_after: -1
|
||||
|
||||
# Whether WorldSystem should contact the Mojang authserver
|
||||
# If not, some unknown playernames will not be displayed
|
||||
# eg. in the gui or in /ws info
|
||||
contact_authserver: true
|
||||
|
||||
# Options for the LagSystem:
|
||||
# period_in_seconds - how often will be checked for entities in seconds
|
||||
# entities_per_world - maximal allowed entities per world
|
||||
# garbagecollector - how often will be unused ram be cleared
|
||||
lagsystem:
|
||||
period_in_seconds: 10
|
||||
entities_per_world: 350
|
||||
garbagecollector:
|
||||
use: false
|
||||
period_in_minutes: 5
|
||||
|
||||
# Location where you will be teleported when you leave you world
|
||||
spawn:
|
||||
gamemode: 2
|
||||
spawnpoint:
|
||||
use_last_location: true
|
||||
world: world
|
||||
x: 0
|
||||
y: 20
|
||||
z: 0
|
||||
yaw: 0
|
||||
pitch: 0
|
||||
|
||||
# Location where you spawn when you join a world
|
||||
worldspawn:
|
||||
use_last_location: true
|
||||
use: false
|
||||
spawnpoint:
|
||||
x: 0
|
||||
y: 20
|
||||
z: 0
|
||||
yaw: 0
|
||||
pitch: 0
|
||||
##########################################################################
|
||||
### __ __ __ _______ __ ###
|
||||
### \ \ / / / / / / ___/ / / ###
|
||||
### \ \ __ / /___ ___/ /___/ / /____ ______/ /______________ ###
|
||||
### \ \ / \ / / __ \/ _/ / __ /__ / / / / __/ __/ ___/ _ _ / ###
|
||||
### \ \/ /\ \/ / /_/ / // / /_/ /__/ / /_/ /_ / /_/ ___/ // // / ###
|
||||
### \__/ \__/\____/_//_/\__,_/____/\__, /___/\__/\___/_//_//_/ ###
|
||||
### ___/ / ###
|
||||
### \___/ ###
|
||||
##########################################################################
|
||||
|
||||
|
||||
####################
|
||||
# General Settings #
|
||||
####################
|
||||
|
||||
#The Path that the Worlds of players will be stored when not in use.
|
||||
playerWorldsDir: 'plugins/WorldSystem/Worlds'
|
||||
|
||||
#The time that a world should take till it unloads from no use
|
||||
unloadTime: 20
|
||||
|
||||
#Prefix on Messages sent by the plugin
|
||||
prefix: '&8[&3WorldSystem&8] &6'
|
||||
|
||||
#Delete the world after set amount of days
|
||||
#-1 to disable
|
||||
deleteAfterDays: -1
|
||||
|
||||
#World Difficulty
|
||||
#Options: PEACEFUL, EASY, NORMAL, HARD
|
||||
worldDifficulty: 'EASY'
|
||||
|
||||
##########################
|
||||
# World Creation Setting #
|
||||
##########################
|
||||
|
||||
#Allow Players to Choose the Template they want
|
||||
multiChoose: false
|
||||
#The Default Generation File
|
||||
#Warning: "do not add the .json"
|
||||
defaultGenerator: 'Vanilla'
|
||||
#World Generation Folder
|
||||
worldGenTemplates: 'plugins/WorldSystem/Generators'
|
||||
|
||||
#World Borders
|
||||
#The Default World Border Size for everyone
|
||||
worldBorderDefaultSize: 500
|
||||
#!Note: Dynamic World Borders Will Added back in a Future Update
|
||||
|
||||
#World Border Center
|
||||
worldBorderCenter:
|
||||
x: 0
|
||||
z: 0
|
||||
|
||||
##########################
|
||||
# World Entering/Exiting #
|
||||
##########################
|
||||
|
||||
#This is the Settings you need to adjust to your server
|
||||
serverSpawn:
|
||||
#The Gamemode the Main server uses
|
||||
#Options: Survival, Creative, Adventure
|
||||
#Warning: Spectator is not a Valid Input
|
||||
#Warning: Spelling Matters, Capitalization Does not
|
||||
serverGamemode: 'Survival'
|
||||
#The point the player should be placed when leaving a WS World
|
||||
serverSpawnPoint:
|
||||
worldName: 'world'
|
||||
x: 0
|
||||
y: 60
|
||||
z: 0
|
||||
|
||||
#This is the Settings you need to adjust to your server
|
||||
wsWorldSpawn:
|
||||
#The Gamemode the Main server uses
|
||||
#World Gamemode
|
||||
#Options: Survival, Creative, Adventure
|
||||
#Warning: Spectator is not a Valid Input
|
||||
#Warning: Spelling Matters, Capitalization Does not
|
||||
worldGameMode: 'Survival'
|
||||
# places the player at their last known location in the world
|
||||
useLastLocation: true;
|
||||
#The point the player should be placed when entering a WS World
|
||||
#for the first Time
|
||||
defaultWorldSpawnPoint:
|
||||
worldName: 'world'
|
||||
x: 0
|
||||
y: 60
|
||||
z: 0
|
||||
|
||||
###################
|
||||
# World Gamerules #
|
||||
###################
|
||||
|
||||
#!DevTODO create a class to handle this to make it cleaner
|
||||
#Also Document this part of the config
|
||||
announceAdvancements: true
|
||||
commandBlockOutput: false
|
||||
disableElytraMovementCheck: false
|
||||
doDaylightCycle: true
|
||||
doEntityDrops: true
|
||||
doFireTick: true
|
||||
doLimitedCrafting: false
|
||||
doMobLoot: true
|
||||
doMobSpawning: true
|
||||
doTileDrops: true
|
||||
doWeatherCycle: false
|
||||
gameLoopFunction: false
|
||||
keepInventory: true
|
||||
logAdminCommands: true
|
||||
maxCommandChainLength: 65536
|
||||
maxEntityCramming: 24
|
||||
mobGriefing: true
|
||||
naturalRegeneration: true
|
||||
randomTickSpeed: 3
|
||||
reducedDebugInfo: false
|
||||
sendCommandFeedback: true
|
||||
showDeathMessages: true
|
||||
spawnRadius: 10
|
||||
spectatorsGenerateChunks: true
|
|
@ -0,0 +1,133 @@
|
|||
|
||||
|
||||
# Path where the worlds will be saved
|
||||
worldfolder: 'plugins/WorldSystem/Worlds'
|
||||
|
||||
worldtemplates:
|
||||
# Whether players can decide on different templates
|
||||
multi_choose: false
|
||||
# If multi_choose is disabled, which template should be choosen
|
||||
default: 'template_default'
|
||||
templates:
|
||||
# The "1" can be any key
|
||||
1:
|
||||
# Name of directory in plugins/WorldSystem/worldsources
|
||||
# e.g. this would be plugins/WorldSystem/worldsources/template_default
|
||||
name: 'template_default'
|
||||
# Just remove the permission field if everybody should be able to use this template
|
||||
2:
|
||||
name: 'another_template'
|
||||
# Only players with this exact permission can use and see this template
|
||||
# ws.* will not work with this
|
||||
permission: ws.template.another_template
|
||||
# If this config option is given, 100 is needed to create a world
|
||||
# This amount will then with withdrawn from the player
|
||||
cost: 100
|
||||
|
||||
# Options for random world generation
|
||||
# Here you can configure the world generator of a template
|
||||
generator:
|
||||
# A seed for worldgeneration
|
||||
# Set it to 0 for no seed-useage
|
||||
seed: 0
|
||||
# Environment for the world
|
||||
# Valid inputs are 'NORMAL', 'NETHER' and 'THE_END'
|
||||
environment: NORMAL
|
||||
# Type of the world eg. flat, amplified, ...
|
||||
# Valid types are 'NORMAL', 'VERSION_1_1', 'FLAT', 'AMPLIFIED', 'CUSTOMIZED' or 'LARGE_BIOMES'
|
||||
type: NORMAL
|
||||
# Put in here the name of a generator
|
||||
# If you have one from one plugin
|
||||
generator: ''
|
||||
|
||||
# If a confirm is needed before auto-update
|
||||
need_confirm: true
|
||||
|
||||
# When nobody is on a world time until it get unloaded
|
||||
unloadingtime: 20
|
||||
|
||||
# If true nobody can teleport or change their gamemode a WorldSystem world
|
||||
# Except for players with the permissions: ws.gamemode | ws.tp.*
|
||||
survival: false
|
||||
|
||||
# If WorldSystem should load the worlds async if possible (FAWE installed)
|
||||
load_worlds_async: true
|
||||
|
||||
# Options for the database saving player positions
|
||||
database:
|
||||
# Which type should be choosen:
|
||||
# 'mysql' or 'sqlite'
|
||||
# You need a working mysql database in order to use this option
|
||||
type: sqlite
|
||||
# How the table with the saved player positions on the playerworlds should be named
|
||||
worlds_table_name: worlds_positions
|
||||
# How the table with the saved player positions on the normal worlds should be named
|
||||
players_table_name: player_positions
|
||||
# how should the uuid cache be stored
|
||||
players_uuids: players_uuids
|
||||
|
||||
# Configure here your mysql connection
|
||||
mysql_settings:
|
||||
host: 127.0.0.1
|
||||
port: 3306
|
||||
username: root
|
||||
password: YOUR_PASSWORD_HERE
|
||||
database: database
|
||||
sqlite_settings:
|
||||
# Where the database file should be located
|
||||
file: 'plugins/WorldSystem/repository.db'
|
||||
|
||||
# If true players will teleported to the spawn on join
|
||||
spawn_teleportation: true
|
||||
|
||||
# Time in seconds until a request expires
|
||||
request_expires: 20
|
||||
|
||||
# Name of the languagefile in plugins/WorldSystem/languages/
|
||||
language: en
|
||||
|
||||
# Prefix which will be shown before each message
|
||||
prefix: '&8[&3WorldSystem&8] &6'
|
||||
|
||||
# Time in days after a not used world will be deleted
|
||||
# Set to -1 to disable
|
||||
delete_after: -1
|
||||
|
||||
# Whether WorldSystem should contact the Mojang authserver
|
||||
# If not, some unknown playernames will not be displayed
|
||||
# eg. in the gui or in /ws info
|
||||
contact_authserver: true
|
||||
|
||||
# Options for the LagSystem:
|
||||
# period_in_seconds - how often will be checked for entities in seconds
|
||||
# entities_per_world - maximal allowed entities per world
|
||||
# garbagecollector - how often will be unused ram be cleared
|
||||
lagsystem:
|
||||
period_in_seconds: 10
|
||||
entities_per_world: 350
|
||||
garbagecollector:
|
||||
use: false
|
||||
period_in_minutes: 5
|
||||
|
||||
# Location where you will be teleported when you leave you world
|
||||
spawn:
|
||||
gamemode: 2
|
||||
spawnpoint:
|
||||
use_last_location: true
|
||||
world: world
|
||||
x: 0
|
||||
y: 20
|
||||
z: 0
|
||||
yaw: 0
|
||||
pitch: 0
|
||||
|
||||
# Location where you spawn when you join a world
|
||||
worldspawn:
|
||||
use_last_location: true
|
||||
use: false
|
||||
spawnpoint:
|
||||
x: 0
|
||||
y: 20
|
||||
z: 0
|
||||
yaw: 0
|
||||
pitch: 0
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -284,7 +284,7 @@ worldchoose:
|
|||
|
||||
rows: 4
|
||||
|
||||
# The key must be named exactly as in the config.yml
|
||||
# The key must be named exactly as in the configOLD.yml
|
||||
template_default:
|
||||
enabled: true
|
||||
slot:
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue