PlotSquared/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java

1116 lines
47 KiB
Java
Raw Normal View History

2015-02-19 07:08:15 +01:00
package com.intellectualcrafters.plot;
import java.io.File;
2015-02-27 08:50:16 +01:00
import java.io.FileInputStream;
import java.io.FileOutputStream;
2015-02-19 07:08:15 +01:00
import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
2015-02-19 09:51:10 +01:00
import java.util.ArrayList;
2015-02-19 07:08:15 +01:00
import java.util.Arrays;
2015-03-08 08:59:00 +01:00
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
2015-02-19 07:08:15 +01:00
import java.util.HashMap;
2015-02-19 09:51:10 +01:00
import java.util.HashSet;
2015-02-19 07:08:15 +01:00
import java.util.LinkedHashMap;
2015-02-19 09:51:10 +01:00
import java.util.LinkedHashSet;
2015-02-19 07:08:15 +01:00
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
2015-02-19 11:29:17 +01:00
import java.util.UUID;
2015-02-27 08:50:16 +01:00
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
2015-02-19 07:08:15 +01:00
import net.milkbowl.vault.economy.Economy;
import org.bukkit.configuration.file.YamlConfiguration;
import com.intellectualcrafters.plot.commands.Cluster;
import com.intellectualcrafters.plot.commands.MainCommand;
import com.intellectualcrafters.plot.config.C;
2015-02-19 09:51:10 +01:00
import com.intellectualcrafters.plot.config.Configuration;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.config.Settings;
import com.intellectualcrafters.plot.database.DBFunc;
2015-04-29 15:07:12 +02:00
import com.intellectualcrafters.plot.database.Database;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.database.MySQL;
import com.intellectualcrafters.plot.database.SQLManager;
import com.intellectualcrafters.plot.database.SQLite;
import com.intellectualcrafters.plot.flag.AbstractFlag;
import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.flag.FlagValue;
2015-02-19 09:51:10 +01:00
import com.intellectualcrafters.plot.generator.AugmentedPopulator;
2015-02-20 07:34:19 +01:00
import com.intellectualcrafters.plot.generator.ClassicPlotWorld;
2015-02-19 09:51:10 +01:00
import com.intellectualcrafters.plot.generator.HybridGen;
import com.intellectualcrafters.plot.generator.HybridPlotWorld;
2015-02-22 14:20:41 +01:00
import com.intellectualcrafters.plot.generator.HybridUtils;
2015-02-19 09:51:10 +01:00
import com.intellectualcrafters.plot.generator.SquarePlotManager;
2015-02-20 07:34:19 +01:00
import com.intellectualcrafters.plot.generator.SquarePlotWorld;
2015-04-26 08:29:58 +02:00
import com.intellectualcrafters.plot.listeners.APlotListener;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.object.Plot;
2015-02-19 09:51:10 +01:00
import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.object.PlotCluster;
import com.intellectualcrafters.plot.object.PlotGenerator;
2015-03-20 03:13:27 +01:00
import com.intellectualcrafters.plot.object.PlotHandler;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotManager;
2015-02-22 08:07:02 +01:00
import com.intellectualcrafters.plot.object.PlotPlayer;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.object.PlotWorld;
2015-04-06 11:59:22 +02:00
import com.intellectualcrafters.plot.object.comment.CommentManager;
2015-02-22 14:20:41 +01:00
import com.intellectualcrafters.plot.util.BlockManager;
2015-02-25 11:36:19 +01:00
import com.intellectualcrafters.plot.util.ChunkManager;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.util.ClusterManager;
2015-02-23 06:29:45 +01:00
import com.intellectualcrafters.plot.util.EventUtil;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.util.ExpireManager;
import com.intellectualcrafters.plot.util.Logger;
import com.intellectualcrafters.plot.util.Logger.LogLevel;
2015-02-20 12:23:48 +01:00
import com.intellectualcrafters.plot.util.MainUtil;
2015-04-27 11:07:42 +02:00
import com.intellectualcrafters.plot.util.PlayerManager;
2015-02-23 01:50:05 +01:00
import com.intellectualcrafters.plot.util.SetupUtils;
2015-02-19 07:08:15 +01:00
import com.intellectualcrafters.plot.util.TaskManager;
2015-02-20 07:28:21 +01:00
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
2015-02-19 12:35:45 +01:00
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
2015-02-19 07:08:15 +01:00
public class PlotSquared {
2015-02-19 09:51:10 +01:00
public static final String MAIN_PERMISSION = "plots.use";
public static final String ADMIN_PERMISSION = "plots.admin";
2015-02-19 07:08:15 +01:00
public static File styleFile;
public static YamlConfiguration style;
public static File configFile;
public static YamlConfiguration config;
public static File storageFile;
public static YamlConfiguration storage;
public static PlotSquared THIS = null; // This class
2015-02-27 08:50:16 +01:00
public static File FILE = null; // This file
2015-02-19 07:08:15 +01:00
public static IPlotMain IMP = null; // Specific implementation of PlotSquared
public static String VERSION = null;
public static TaskManager TASK = null;
2015-02-19 09:51:10 +01:00
private static boolean LOADING_WORLD = false;
2015-02-19 07:08:15 +01:00
public static Economy economy = null;
2015-02-19 12:35:45 +01:00
public static WorldEditPlugin worldEdit = null;
2015-02-19 07:08:15 +01:00
private final static HashMap<String, PlotWorld> plotworlds = new HashMap<>();
private final static HashMap<String, PlotManager> plotmanagers = new HashMap<>();
2015-05-07 10:15:51 +02:00
2015-02-19 07:08:15 +01:00
private static LinkedHashMap<String, HashMap<PlotId, Plot>> plots;
2015-05-07 10:15:51 +02:00
2015-04-29 15:07:12 +02:00
private static Database database;
2015-02-19 07:08:15 +01:00
public static Connection connection;
2015-05-04 15:53:24 +02:00
2015-04-29 15:07:12 +02:00
public static Database getDatabase() {
return database;
2015-02-19 07:08:15 +01:00
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static void updatePlot(final Plot plot) {
final String world = plot.world;
if (!plots.containsKey(world)) {
plots.put(world, new HashMap<PlotId, Plot>());
}
plot.hasChanged = true;
plots.get(world).put(plot.id, plot);
}
2015-02-23 02:32:27 +01:00
2015-02-20 09:55:04 +01:00
public static PlotWorld getPlotWorld(final String world) {
2015-02-19 09:51:10 +01:00
if (plotworlds.containsKey(world)) {
return plotworlds.get(world);
}
return null;
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static void addPlotWorld(final String world, final PlotWorld plotworld, final PlotManager manager) {
plotworlds.put(world, plotworld);
plotmanagers.put(world, manager);
if (!plots.containsKey(world)) {
plots.put(world, new HashMap<PlotId, Plot>());
}
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static void removePlotWorld(final String world) {
plots.remove(world);
plotmanagers.remove(world);
plotworlds.remove(world);
}
2015-02-23 02:32:27 +01:00
2015-02-20 06:40:51 +01:00
public static HashMap<String, HashMap<PlotId, Plot>> getAllPlotsRaw() {
return plots;
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static void setAllPlotsRaw(final LinkedHashMap<String, HashMap<PlotId, Plot>> plots) {
PlotSquared.plots = plots;
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static Set<Plot> getPlots() {
final ArrayList<Plot> newplots = new ArrayList<>();
for (final Entry<String, HashMap<PlotId, Plot>> entry : plots.entrySet()) {
if (isPlotWorld(entry.getKey())) {
newplots.addAll(entry.getValue().values());
}
2015-02-19 09:51:10 +01:00
}
return new LinkedHashSet<>(newplots);
}
2015-03-08 08:59:00 +01:00
2015-04-11 06:07:19 +02:00
public static Set<Plot> getPlotsRaw() {
final ArrayList<Plot> newplots = new ArrayList<>();
for (final Entry<String, HashMap<PlotId, Plot>> entry : plots.entrySet()) {
newplots.addAll(entry.getValue().values());
}
return new LinkedHashSet<>(newplots);
}
2015-03-08 08:59:00 +01:00
public static ArrayList<Plot> sortPlots(Collection<Plot> plots) {
ArrayList<Plot> newPlots = new ArrayList<>();
newPlots.addAll(plots);
Collections.sort(newPlots, new Comparator<Plot>() {
@Override
public int compare(Plot p1, Plot p2) {
2015-03-11 11:27:30 +01:00
int h1 = p1.hashCode();
int h2 = p2.hashCode();
if (h1 < 0) {
h1 = -h1*2 - 1;
}
else {
h1*=2;
}
if (h2 < 0) {
h2 = -h2*2 - 1;
}
else {
h2*=2;
}
return h1-h2;
2015-03-08 08:59:00 +01:00
}
});
return newPlots;
}
public static ArrayList<Plot> sortPlots(Collection<Plot> plots, final String priorityWorld) {
ArrayList<Plot> newPlots = new ArrayList<>();
2015-03-11 11:27:30 +01:00
HashMap<PlotId, Plot> worldPlots = PlotSquared.plots.get(priorityWorld);
if (worldPlots != null) {
for (Plot plot : sortPlots(worldPlots.values())) {
if (plots.contains(plot)) {
newPlots.add(plot);
}
}
2015-03-11 11:27:30 +01:00
}
2015-04-03 04:42:49 +02:00
ArrayList<String> worlds = new ArrayList<>(PlotSquared.plots.keySet());
Collections.sort(worlds);
for (String world : worlds) {
if (!world.equals(priorityWorld)) {
for (Plot plot : PlotSquared.plots.get(world).values()) {
if (plots.contains(plot)) {
newPlots.add(plot);
}
}
2015-03-08 08:59:00 +01:00
}
2015-03-11 11:27:30 +01:00
}
2015-03-08 08:59:00 +01:00
return newPlots;
2015-02-19 09:51:10 +01:00
}
2015-04-03 04:42:49 +02:00
public static ArrayList<Plot> sortPlotsByWorld(Collection<Plot> plots) {
ArrayList<Plot> newPlots = new ArrayList<>();
ArrayList<String> worlds = new ArrayList<>(PlotSquared.plots.keySet());
Collections.sort(worlds);
for (String world : worlds) {
for (Plot plot : PlotSquared.plots.get(world).values()) {
if (plots.contains(plot)) {
newPlots.add(plot);
}
}
}
return newPlots;
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static Set<Plot> getPlots(final String world, final String player) {
final UUID uuid = UUIDHandler.getUUID(player);
return getPlots(world, uuid);
}
2015-02-23 02:32:27 +01:00
2015-02-22 13:51:02 +01:00
public static Set<Plot> getPlots(final String world, final PlotPlayer player) {
final UUID uuid = player.getUUID();
return getPlots(world, uuid);
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static Set<Plot> getPlots(final String world, final UUID uuid) {
final ArrayList<Plot> myplots = new ArrayList<>();
for (final Plot plot : getPlots(world).values()) {
if (plot.hasOwner()) {
2015-03-20 03:13:27 +01:00
if (PlotHandler.isOwner(plot, uuid)) {
2015-02-19 09:51:10 +01:00
myplots.add(plot);
}
}
}
return new HashSet<>(myplots);
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static boolean isPlotWorld(final String world) {
return (plotworlds.containsKey(world));
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static PlotManager getPlotManager(final String world) {
if (plotmanagers.containsKey(world)) {
return plotmanagers.get(world);
}
return null;
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static String[] getPlotWorldsString() {
final Set<String> strings = plots.keySet();
return strings.toArray(new String[strings.size()]);
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static HashMap<PlotId, Plot> getPlots(final String world) {
if (plots.containsKey(world)) {
return plots.get(world);
}
return new HashMap<>();
}
2015-02-23 02:32:27 +01:00
2015-02-22 08:07:02 +01:00
public static Set<Plot> getPlots(final PlotPlayer player) {
2015-03-08 08:59:00 +01:00
return getPlots(player.getUUID());
}
public static Set<Plot> getPlots(final UUID uuid) {
2015-02-22 08:07:02 +01:00
final ArrayList<Plot> myplots = new ArrayList<>();
for (final String world : plots.keySet()) {
if (isPlotWorld(world)) {
for (final Plot plot : plots.get(world).values()) {
if (plot.hasOwner()) {
2015-03-20 03:13:27 +01:00
if (PlotHandler.isOwner(plot, uuid)) {
2015-02-22 08:07:02 +01:00
myplots.add(plot);
}
}
}
}
}
return new HashSet<>(myplots);
}
2015-02-23 02:32:27 +01:00
2015-02-19 09:51:10 +01:00
public static boolean removePlot(final String world, final PlotId id, final boolean callEvent) {
if (callEvent) {
EventUtil.manager.callDelete(world, id);
}
2015-02-19 09:51:10 +01:00
plots.get(world).remove(id);
2015-02-20 12:23:48 +01:00
if (MainUtil.lastPlot.containsKey(world)) {
final PlotId last = MainUtil.lastPlot.get(world);
2015-02-20 07:34:19 +01:00
final int last_max = Math.max(last.x, last.y);
final int this_max = Math.max(id.x, id.y);
2015-02-19 09:51:10 +01:00
if (this_max < last_max) {
2015-02-20 12:23:48 +01:00
MainUtil.lastPlot.put(world, id);
2015-02-19 09:51:10 +01:00
}
}
return true;
}
2015-02-23 02:32:27 +01:00
public static void loadWorld(final String world, PlotGenerator generator) {
2015-02-24 12:27:30 +01:00
PlotWorld plotWorld = getPlotWorld(world);
if (plotWorld != null) {
if (generator != null) {
generator.init(plotWorld);
}
2015-02-19 09:51:10 +01:00
return;
}
final Set<String> worlds = (config.contains("worlds") ? config.getConfigurationSection("worlds").getKeys(false) : new HashSet<String>());
final PlotGenerator plotGenerator;
final PlotManager plotManager;
final String path = "worlds." + world;
if (!LOADING_WORLD && (generator != null) && (generator instanceof PlotGenerator)) {
2015-02-20 07:34:19 +01:00
plotGenerator = generator;
2015-02-19 09:51:10 +01:00
plotWorld = plotGenerator.getNewPlotWorld(world);
plotManager = plotGenerator.getPlotManager();
if (!world.equals("CheckingPlotSquaredGenerator")) {
log(C.PREFIX.s() + "&aDetected world load for '" + world + "'");
log(C.PREFIX.s() + "&3 - generator: &7" + plotGenerator.getClass().getName());
log(C.PREFIX.s() + "&3 - plotworld: &7" + plotWorld.getClass().getName());
log(C.PREFIX.s() + "&3 - manager: &7" + plotManager.getClass().getName());
}
if (!config.contains(path)) {
config.createSection(path);
}
plotWorld.saveConfiguration(config.getConfigurationSection(path));
plotWorld.loadDefaultConfiguration(config.getConfigurationSection(path));
try {
config.save(configFile);
} catch (final IOException e) {
e.printStackTrace();
}
// Now add it
addPlotWorld(world, plotWorld, plotManager);
2015-02-24 12:27:30 +01:00
generator.init(plotWorld);
2015-02-20 12:23:48 +01:00
MainUtil.setupBorder(world);
2015-02-19 09:51:10 +01:00
} else {
if (!worlds.contains(world)) {
return;
}
if (!LOADING_WORLD) {
LOADING_WORLD = true;
try {
2015-02-20 07:34:19 +01:00
final String gen_string = config.getString("worlds." + world + "." + "generator.plugin");
2015-02-19 09:51:10 +01:00
if (gen_string == null) {
generator = new HybridGen(world);
2015-02-20 07:34:19 +01:00
} else {
generator = (PlotGenerator) IMP.getGenerator(world, gen_string);
2015-02-19 09:51:10 +01:00
}
loadWorld(world, generator);
2015-02-20 07:34:19 +01:00
} catch (final Exception e) {
2015-02-19 09:51:10 +01:00
log("&d=== Oh no! Please set the generator for the " + world + " ===");
e.printStackTrace();
LOADING_WORLD = false;
removePlotWorld(world);
} finally {
LOADING_WORLD = false;
}
} else {
2015-02-20 07:34:19 +01:00
final PlotGenerator gen_class = generator;
2015-02-19 09:51:10 +01:00
plotWorld = gen_class.getNewPlotWorld(world);
plotManager = gen_class.getPlotManager();
2015-04-27 16:53:07 +02:00
2015-02-19 09:51:10 +01:00
if (!config.contains(path)) {
config.createSection(path);
}
2015-04-27 16:53:07 +02:00
2015-02-19 09:51:10 +01:00
plotWorld.TYPE = 2;
plotWorld.TERRAIN = 0;
plotWorld.saveConfiguration(config.getConfigurationSection(path));
plotWorld.loadDefaultConfiguration(config.getConfigurationSection(path));
2015-04-27 16:53:07 +02:00
2015-02-19 09:51:10 +01:00
try {
config.save(configFile);
} catch (final IOException e) {
e.printStackTrace();
}
2015-04-27 16:53:07 +02:00
2015-02-20 07:34:19 +01:00
if (((plotWorld.TYPE == 2) && !Settings.ENABLE_CLUSTERS) || !(plotManager instanceof SquarePlotManager)) {
2015-02-19 09:51:10 +01:00
log("&c[ERROR] World '" + world + "' in settings.yml is not using PlotSquared generator! Please set the generator correctly or delete the world from the 'settings.yml'!");
return;
}
addPlotWorld(world, plotWorld, plotManager);
if (plotWorld.TYPE == 2) {
if (ClusterManager.getClusters(world).size() > 0) {
2015-02-20 07:34:19 +01:00
for (final PlotCluster cluster : ClusterManager.getClusters(world)) {
2015-02-19 09:51:10 +01:00
new AugmentedPopulator(world, gen_class, cluster, plotWorld.TERRAIN == 2, plotWorld.TERRAIN != 2);
}
}
} else if (plotWorld.TYPE == 1) {
new AugmentedPopulator(world, gen_class, null, plotWorld.TERRAIN == 2, plotWorld.TERRAIN != 2);
}
2015-02-24 12:27:30 +01:00
gen_class.init(plotWorld);
2015-02-19 09:51:10 +01:00
}
}
}
2015-02-23 02:32:27 +01:00
2015-02-20 07:34:19 +01:00
public static boolean setupPlotWorld(final String world, final String id) {
if ((id != null) && (id.length() > 0)) {
2015-02-19 09:51:10 +01:00
// save configuration
2015-02-20 07:34:19 +01:00
final String[] split = id.split(",");
final HybridPlotWorld plotworld = new HybridPlotWorld(world);
final int width = SquarePlotWorld.PLOT_WIDTH_DEFAULT;
final int gap = SquarePlotWorld.ROAD_WIDTH_DEFAULT;
final int height = ClassicPlotWorld.PLOT_HEIGHT_DEFAULT;
final PlotBlock[] floor = ClassicPlotWorld.TOP_BLOCK_DEFAULT;
final PlotBlock[] main = ClassicPlotWorld.MAIN_BLOCK_DEFAULT;
final PlotBlock wall = ClassicPlotWorld.WALL_FILLING_DEFAULT;
final PlotBlock border = ClassicPlotWorld.WALL_BLOCK_DEFAULT;
for (final String element : split) {
final String[] pair = element.split("=");
2015-02-19 09:51:10 +01:00
if (pair.length != 2) {
log("&cNo value provided for: &7" + element);
return false;
}
2015-02-20 07:34:19 +01:00
final String key = pair[0].toLowerCase();
final String value = pair[1];
2015-02-19 09:51:10 +01:00
try {
switch (key) {
case "s":
case "size": {
2015-02-20 07:34:19 +01:00
SquarePlotWorld.PLOT_WIDTH_DEFAULT = ((Integer) Configuration.INTEGER.parseString(value)).shortValue();
2015-02-19 09:51:10 +01:00
break;
}
case "g":
case "gap": {
2015-02-20 07:34:19 +01:00
SquarePlotWorld.ROAD_WIDTH_DEFAULT = ((Integer) Configuration.INTEGER.parseString(value)).shortValue();
2015-02-19 09:51:10 +01:00
break;
}
case "h":
case "height": {
2015-02-20 07:34:19 +01:00
ClassicPlotWorld.PLOT_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value);
ClassicPlotWorld.ROAD_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value);
ClassicPlotWorld.WALL_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value);
2015-02-19 09:51:10 +01:00
break;
}
case "f":
case "floor": {
2015-02-20 07:34:19 +01:00
ClassicPlotWorld.TOP_BLOCK_DEFAULT = (PlotBlock[]) Configuration.BLOCKLIST.parseString(value);
2015-02-19 09:51:10 +01:00
break;
}
case "m":
case "main": {
2015-02-20 07:34:19 +01:00
ClassicPlotWorld.MAIN_BLOCK_DEFAULT = (PlotBlock[]) Configuration.BLOCKLIST.parseString(value);
2015-02-19 09:51:10 +01:00
break;
}
case "w":
case "wall": {
2015-02-20 07:34:19 +01:00
ClassicPlotWorld.WALL_FILLING_DEFAULT = (PlotBlock) Configuration.BLOCK.parseString(value);
2015-02-19 09:51:10 +01:00
break;
}
case "b":
case "border": {
2015-02-20 07:34:19 +01:00
ClassicPlotWorld.WALL_BLOCK_DEFAULT = (PlotBlock) Configuration.BLOCK.parseString(value);
2015-02-19 09:51:10 +01:00
break;
}
default: {
log("&cKey not found: &7" + element);
return false;
}
}
2015-02-20 07:34:19 +01:00
} catch (final Exception e) {
2015-02-19 09:51:10 +01:00
e.printStackTrace();
log("&cInvalid value: &7" + value + " in arg " + element);
return false;
}
}
try {
2015-02-20 07:34:19 +01:00
final String root = "worlds." + world;
2015-02-19 09:51:10 +01:00
if (!config.contains(root)) {
config.createSection(root);
}
plotworld.saveConfiguration(config.getConfigurationSection(root));
2015-02-20 07:34:19 +01:00
ClassicPlotWorld.PLOT_HEIGHT_DEFAULT = height;
ClassicPlotWorld.ROAD_HEIGHT_DEFAULT = height;
ClassicPlotWorld.WALL_HEIGHT_DEFAULT = height;
ClassicPlotWorld.TOP_BLOCK_DEFAULT = floor;
ClassicPlotWorld.MAIN_BLOCK_DEFAULT = main;
ClassicPlotWorld.WALL_BLOCK_DEFAULT = border;
ClassicPlotWorld.WALL_FILLING_DEFAULT = wall;
SquarePlotWorld.PLOT_WIDTH_DEFAULT = width;
SquarePlotWorld.ROAD_WIDTH_DEFAULT = gap;
} catch (final Exception e) {
2015-02-19 09:51:10 +01:00
e.printStackTrace();
}
}
return true;
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public static Connection getConnection() {
return connection;
}
2015-02-23 02:32:27 +01:00
2015-02-20 07:34:19 +01:00
public PlotSquared(final IPlotMain imp_class) {
SetupUtils.generators = new HashMap<>();
2015-02-19 07:08:15 +01:00
THIS = this;
IMP = imp_class;
2015-02-27 08:50:16 +01:00
try {
FILE = new File(PlotSquared.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
}
catch (Exception e) {
log("Could not determine file path");
}
2015-02-19 07:08:15 +01:00
VERSION = IMP.getVersion();
2015-02-21 13:09:20 +01:00
economy = IMP.getEconomy();
2015-02-19 07:08:15 +01:00
C.setupTranslations();
C.saveTranslations();
if (getJavaVersion() < 1.7) {
log(C.PREFIX.s() + "&cYour java version is outdated. Please update to at least 1.7.");
// Didn't know of any other link :D
log(C.PREFIX.s() + "&cURL: &6https://java.com/en/download/index.jsp");
IMP.disable();
return;
}
if (getJavaVersion() < 1.8) {
log(C.PREFIX.s() + "&cIt's really recommended to run Java 1.8, as it increases performance");
}
TASK = IMP.getTaskManager();
if (C.ENABLED.s().length() > 0) {
log(C.ENABLED.s());
}
setupConfigs();
setupDefaultFlags();
setupDatabase();
2015-04-06 11:59:22 +02:00
CommentManager.registerDefaultInboxes();
2015-04-03 15:12:10 +02:00
// Tasks
if (Settings.KILL_ROAD_MOBS) {
IMP.runEntityTask();
}
2015-02-19 07:08:15 +01:00
// Events
IMP.registerCommands();
IMP.registerPlayerEvents();
IMP.registerInventoryEvents();
IMP.registerPlotPlusEvents();
IMP.registerForceFieldEvents();
IMP.registerWorldEditEvents();
2015-04-26 08:29:58 +02:00
IMP.registerWorldEvents();
2015-04-29 01:36:38 +02:00
if (Settings.TNT_LISTENER) {
IMP.registerTNTListener();
}
2015-04-26 08:29:58 +02:00
if (Settings.CHUNK_PROCESSOR) {
IMP.registerChunkProcessor();
}
2015-02-23 00:12:33 +01:00
// create UUIDWrapper
UUIDHandler.uuidWrapper = IMP.initUUIDHandler();
2015-02-23 06:29:45 +01:00
// create event util class
EventUtil.manager = IMP.initEventUtil();
2015-02-22 14:20:41 +01:00
// create Hybrid utility class
HybridUtils.manager = IMP.initHybridUtils();
// create setup util class
SetupUtils.manager = IMP.initSetupUtils();
2015-02-19 09:51:10 +01:00
// Set block
2015-02-22 14:20:41 +01:00
BlockManager.manager = IMP.initBlockManager();
2015-02-23 01:05:25 +01:00
// Set chunk
2015-02-23 06:29:45 +01:00
ChunkManager.manager = IMP.initChunkManager();
2015-04-26 08:29:58 +02:00
// Plot listener
APlotListener.manager = IMP.initPlotListener();
2015-04-27 11:07:42 +02:00
// Player manager
PlayerManager.manager = IMP.initPlayerManager();
2015-04-26 08:29:58 +02:00
2015-02-19 09:51:10 +01:00
// PlotMe
2015-03-31 14:14:38 +02:00
if (Settings.CONVERT_PLOTME || Settings.CACHE_PLOTME) {
TaskManager.runTaskLater(new Runnable() {
@Override
public void run() {
if (IMP.initPlotMeConverter()) {
log("&c=== IMPORTANT ===");
log("&cTHIS MESSAGE MAY BE EXTREMELY HELPFUL IF YOU HAVE TROUBLE CONVERTING PLOTME!");
log("&c - Make sure 'UUID.read-from-disk' is disabled (false)!");
log("&c - Sometimes the database can be locked, deleting PlotMe.jar beforehand will fix the issue!");
2015-05-01 13:00:17 +02:00
log("&c - After the conversion is finished, please set 'plotme-convert.enabled' to false in the 'settings.yml'");
}
2015-02-19 09:51:10 +01:00
}
}, 200);
}
2015-02-19 07:08:15 +01:00
if (Settings.AUTO_CLEAR) {
ExpireManager.runTask();
}
2015-04-09 07:41:14 +02:00
2015-02-27 08:50:16 +01:00
// Copy files
2015-04-21 14:48:18 +02:00
copyFile("town.template", "templates");
copyFile("skyblock.template", "templates");
copyFile("german.yml", "translations");
copyFile("s_chinese_unescaped.yml", "translations");
copyFile("s_chinese.yml", "translations");
2015-04-03 15:12:10 +02:00
showDebug();
2015-02-27 08:50:16 +01:00
}
2015-04-21 14:48:18 +02:00
public void copyFile(String file, String folder) {
2015-02-27 08:50:16 +01:00
try {
byte[] buffer = new byte[2048];
File output = PlotSquared.IMP.getDirectory();
if (!output.exists()) {
output.mkdirs();
}
2015-04-21 14:48:18 +02:00
File newFile = new File((output + File.separator + folder + File.separator + file));
2015-02-27 08:50:16 +01:00
if (newFile.exists()) {
return;
}
ZipInputStream zis = new ZipInputStream(new FileInputStream(FILE));
ZipEntry ze = zis.getNextEntry();
while (ze != null) {
String name = ze.getName();
if (name.equals(file)) {
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 = null;
}
else {
ze = zis.getNextEntry();
}
}
zis.closeEntry();
zis.close();
}
catch (Exception e) {
e.printStackTrace();
log("&cCould not save " + file);
}
2015-02-19 07:08:15 +01:00
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public void disable() {
try {
2015-04-29 15:07:12 +02:00
database.closeConnection();
2015-02-19 07:08:15 +01:00
} catch (NullPointerException | SQLException e) {
2015-04-29 15:07:12 +02:00
log("&cCould not close database connection!");
2015-02-19 07:08:15 +01:00
}
}
2015-02-23 02:32:27 +01:00
2015-02-20 07:34:19 +01:00
public static void log(final String message) {
2015-02-19 07:08:15 +01:00
IMP.log(message);
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public void setupDatabase() {
final String[] tables;
if (Settings.ENABLE_CLUSTERS) {
MainCommand.subCommands.add(new Cluster());
2015-02-20 07:34:19 +01:00
tables = new String[] { "plot_trusted", "plot_ratings", "plot_comments", "cluster" };
} else {
tables = new String[] { "plot_trusted", "plot_ratings", "plot_comments" };
2015-02-19 07:08:15 +01:00
}
if (Settings.DB.USE_MYSQL) {
try {
2015-04-29 15:07:12 +02:00
database = new MySQL(THIS, Settings.DB.HOST_NAME, Settings.DB.PORT, Settings.DB.DATABASE, Settings.DB.USER, Settings.DB.PASSWORD);
connection = database.openConnection();
2015-02-19 07:08:15 +01:00
{
if (DBFunc.dbManager == null) {
DBFunc.dbManager = new SQLManager(connection, Settings.DB.PREFIX);
}
final DatabaseMetaData meta = connection.getMetaData();
ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null);
if (!res.next()) {
DBFunc.createTables("mysql", true);
} else {
for (final String table : tables) {
res = meta.getTables(null, null, Settings.DB.PREFIX + table, null);
if (!res.next()) {
DBFunc.createTables("mysql", false);
}
}
}
}
} catch (final Exception e) {
log("&c[Plots] MySQL is not setup correctly. The plugin will disable itself.");
if ((config == null) || config.getBoolean("debug")) {
log("&d==== Here is an ugly stacktrace if you are interested in those things ====");
e.printStackTrace();
log("&d==== End of stacktrace ====");
log("&6Please go to the PlotSquared 'storage.yml' and configure MySQL correctly.");
}
IMP.disable();
return;
}
plots = DBFunc.getPlots();
if (Settings.ENABLE_CLUSTERS) {
ClusterManager.clusters = DBFunc.getClusters();
}
2015-02-20 07:34:19 +01:00
} else if (Settings.DB.USE_MONGO) {
2015-02-19 07:08:15 +01:00
// DBFunc.dbManager = new MongoManager();
log(C.PREFIX.s() + "MongoDB is not yet implemented");
2015-02-20 07:34:19 +01:00
} else if (Settings.DB.USE_SQLITE) {
2015-02-19 07:08:15 +01:00
try {
2015-04-29 15:07:12 +02:00
this.database = new SQLite(THIS, IMP.getDirectory() + File.separator + Settings.DB.SQLITE_DB + ".db");
connection = this.database.openConnection();
2015-02-19 07:08:15 +01:00
{
DBFunc.dbManager = new SQLManager(connection, Settings.DB.PREFIX);
final DatabaseMetaData meta = connection.getMetaData();
ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null);
if (!res.next()) {
DBFunc.createTables("sqlite", true);
} else {
for (final String table : tables) {
res = meta.getTables(null, null, Settings.DB.PREFIX + table, null);
if (!res.next()) {
DBFunc.createTables("sqlite", false);
}
}
}
}
} catch (final Exception e) {
log(C.PREFIX.s() + "&cFailed to open SQLite connection. The plugin will disable itself.");
log("&9==== Here is an ugly stacktrace, if you are interested in those things ===");
e.printStackTrace();
IMP.disable();
return;
}
plots = DBFunc.getPlots();
if (Settings.ENABLE_CLUSTERS) {
ClusterManager.clusters = DBFunc.getClusters();
}
} else {
log(C.PREFIX + "&cNo storage type is set!");
IMP.disable();
return;
}
2015-02-20 07:34:19 +01:00
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public static void setupDefaultFlags() {
final List<String> booleanFlags = Arrays.asList("notify-enter", "notify-leave", "item-drop", "invincible", "instabreak", "drop-protection", "forcefield", "titles", "pve", "pvp", "no-worldedit", "redstone", "keep");
2015-02-19 07:08:15 +01:00
final List<String> intervalFlags = Arrays.asList("feed", "heal");
final List<String> stringFlags = Arrays.asList("greeting", "farewell");
final List<String> intFlags = Arrays.asList("entity-cap", "mob-cap", "animal-cap", "hostile-cap", "vehicle-cap", "music");
2015-02-19 07:08:15 +01:00
for (final String flag : stringFlags) {
FlagManager.addFlag(new AbstractFlag(flag));
}
for (final String flag : intervalFlags) {
FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.IntervalValue()));
}
for (final String flag : booleanFlags) {
FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.BooleanValue()));
}
2015-03-20 13:04:48 +01:00
for (final String flag : intFlags) {
FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.UnsignedIntegerValue()));
}
2015-02-19 07:08:15 +01:00
FlagManager.addFlag(new AbstractFlag("fly", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("explosion", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("hostile-interact", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("hostile-attack", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("animal-interact", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("animal-attack", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("tamed-interact", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("tamed-attack", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("misc-interact", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("hanging-place", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("hanging-break", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("vehicle-use", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("vehicle-place", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("vehicle-break", new FlagValue.BooleanValue()));
FlagManager.addFlag(new AbstractFlag("place", new FlagValue.PlotBlockListValue()));
FlagManager.addFlag(new AbstractFlag("break", new FlagValue.PlotBlockListValue()));
FlagManager.addFlag(new AbstractFlag("use", new FlagValue.PlotBlockListValue()));
FlagManager.addFlag(new AbstractFlag("gamemode") {
@Override
public String parseValueRaw(final String value) {
switch (value) {
case "creative":
case "c":
case "1":
return "creative";
case "survival":
case "s":
case "0":
return "survival";
case "adventure":
case "a":
case "2":
return "adventure";
default:
return null;
}
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
@Override
public String getValueDesc() {
return "Flag value must be a gamemode: 'creative' , 'survival' or 'adventure'";
}
});
FlagManager.addFlag(new AbstractFlag("price", new FlagValue.UnsignedDoubleValue()));
FlagManager.addFlag(new AbstractFlag("time", new FlagValue.LongValue()));
FlagManager.addFlag(new AbstractFlag("weather") {
@Override
public String parseValueRaw(final String value) {
switch (value) {
case "rain":
case "storm":
case "on":
return "rain";
case "lightning":
case "thunder":
return "thunder";
2015-02-19 07:08:15 +01:00
case "clear":
case "off":
case "sun":
return "clear";
default:
return null;
}
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
@Override
public String getValueDesc() {
return "Flag value must be weather type: 'clear' or 'rain'";
}
});
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public static void setupConfig() {
config.set("version", VERSION);
2015-04-09 07:41:14 +02:00
2015-02-19 07:08:15 +01:00
final Map<String, Object> options = new HashMap<>();
2015-04-18 15:47:13 +02:00
// Command confirmation
options.put("confirmation.clear", Settings.CONFIRM_CLEAR);
options.put("confirmation.delete", Settings.CONFIRM_DELETE);
options.put("confirmation.unlink", Settings.CONFIRM_UNLINK);
2015-04-18 15:47:13 +02:00
// Protection
2015-04-01 10:25:58 +02:00
options.put("protection.tnt-listener.enabled", Settings.TNT_LISTENER);
options.put("protection.piston.falling-blocks", Settings.PISTON_FALLING_BLOCK_CHECK);
2015-04-18 15:47:13 +02:00
// Clusters
2015-02-19 07:08:15 +01:00
options.put("clusters.enabled", Settings.ENABLE_CLUSTERS);
2015-04-18 15:47:13 +02:00
// PlotMe
2015-02-19 07:08:15 +01:00
options.put("plotme-alias", Settings.USE_PLOTME_ALIAS);
options.put("plotme-convert.enabled", Settings.CONVERT_PLOTME);
2015-03-31 14:14:38 +02:00
options.put("plotme-convert.cache-uuids", Settings.CACHE_PLOTME);
2015-04-18 15:47:13 +02:00
// UUID
2015-02-19 07:08:15 +01:00
options.put("UUID.offline", Settings.OFFLINE_MODE);
options.put("UUID.force-lowercase", Settings.UUID_LOWERCASE);
2015-04-18 15:47:13 +02:00
options.put("uuid.read-from-disk", Settings.UUID_FROM_DISK);
// Mob stuff
2015-02-19 07:08:15 +01:00
options.put("kill_road_mobs", Settings.KILL_ROAD_MOBS_DEFAULT);
options.put("mob_pathfinding", Settings.MOB_PATHFINDING_DEFAULT);
2015-04-18 15:47:13 +02:00
// Clearing + Expiry
2015-02-19 07:08:15 +01:00
options.put("clear.auto.enabled", false);
options.put("clear.auto.days", 365);
options.put("clear.check-disk", Settings.AUTO_CLEAR_CHECK_DISK);
options.put("clear.on.ban", false);
2015-04-18 15:47:13 +02:00
options.put("clear.fastmode", Settings.ENABLE_CLUSTERS);
options.put("clear.auto.clear-interval-seconds", Settings.CLEAR_INTERVAL);
2015-04-18 15:47:13 +02:00
// Schematics
2015-02-19 07:08:15 +01:00
options.put("schematics.save_path", Settings.SCHEMATIC_SAVE_PATH);
2015-04-18 15:47:13 +02:00
// Caching
2015-03-12 10:28:08 +01:00
options.put("cache.permissions", Settings.PERMISSION_CACHING);
2015-04-18 15:47:13 +02:00
// Titles
2015-02-19 07:08:15 +01:00
options.put("titles", Settings.TITLES);
2015-04-18 15:47:13 +02:00
// Teleportation
2015-02-19 07:08:15 +01:00
options.put("teleport.on_login", Settings.TELEPORT_ON_LOGIN);
2015-04-18 15:47:13 +02:00
options.put("teleport.delay", 0);
// WorldEdit
2015-02-19 07:08:15 +01:00
options.put("worldedit.require-selection-in-mask", Settings.REQUIRE_SELECTION);
2015-04-18 15:47:13 +02:00
options.put("worldedit.max-volume", Settings.WE_MAX_VOLUME);
options.put("worldedit.max-iterations", Settings.WE_MAX_ITERATIONS);
options.put("worldedit.blacklist", Arrays.asList("cs", ".s", "restore", "snapshot", "delchunks", "listchunks"));
2015-04-18 15:47:13 +02:00
// Chunk processor
options.put("chunk-processor.enabled", Settings.CHUNK_PROCESSOR);
options.put("chunk-processor.max-blockstates", Settings.CHUNK_PROCESSOR_MAX_BLOCKSTATES);
options.put("chunk-processor.max-entities", Settings.CHUNK_PROCESSOR_MAX_ENTITIES);
2015-04-18 15:47:13 +02:00
// Comments
2015-05-14 12:34:08 +02:00
options.put("comments.notifications.enabled", Settings.COMMENT_NOTIFICATIONS);
2015-04-18 15:47:13 +02:00
// Plot limits
options.put("global_limit", Settings.GLOBAL_LIMIT);
2015-04-18 15:47:13 +02:00
options.put("max_plots", Settings.MAX_PLOTS);
options.put("claim.max-auto-area", Settings.MAX_AUTO_SIZE);
// Misc
options.put("console.color", Settings.CONSOLE_COLOR);
options.put("metrics", true);
options.put("debug", true);
options.put("auto_update", false);
2015-02-19 07:08:15 +01:00
for (final Entry<String, Object> node : options.entrySet()) {
if (!config.contains(node.getKey())) {
config.set(node.getKey(), node.getValue());
}
}
2015-04-18 15:47:13 +02:00
// Command confirmation
Settings.CONFIRM_CLEAR = config.getBoolean("confirmation.clear");
Settings.CONFIRM_DELETE = config.getBoolean("confirmation.delete");
Settings.CONFIRM_UNLINK = config.getBoolean("confirmation.unlink");
2015-04-18 15:47:13 +02:00
// Protection
Settings.TNT_LISTENER = config.getBoolean("protection.tnt-listener.enabled");
Settings.PISTON_FALLING_BLOCK_CHECK = config.getBoolean("protection.piston.falling-blocks");
// Clusters
Settings.ENABLE_CLUSTERS = config.getBoolean("clusters.enabled");
// PlotMe
2015-02-19 07:08:15 +01:00
Settings.USE_PLOTME_ALIAS = config.getBoolean("plotme-alias");
Settings.CONVERT_PLOTME = config.getBoolean("plotme-convert.enabled");
2015-03-31 14:14:38 +02:00
Settings.CACHE_PLOTME = config.getBoolean("plotme-convert.cache-uuids");
2015-04-18 15:47:13 +02:00
// UUID
Settings.OFFLINE_MODE = config.getBoolean("UUID.offline");
Settings.UUID_LOWERCASE = config.getBoolean("UUID.force-lowercase");
Settings.UUID_FROM_DISK = config.getBoolean("uuid.read-from-disk");
// Mob stuff
2015-02-19 07:08:15 +01:00
Settings.KILL_ROAD_MOBS = config.getBoolean("kill_road_mobs");
2015-05-15 06:00:39 +02:00
Settings.MOB_PATHFINDING = config.getBoolean("mob_pathfinding");
2015-04-18 15:47:13 +02:00
// Clearing + Expiry
Settings.FAST_CLEAR = config.getBoolean("clear.fastmode");
2015-02-19 07:08:15 +01:00
Settings.AUTO_CLEAR_DAYS = config.getInt("clear.auto.days");
Settings.AUTO_CLEAR_CHECK_DISK = config.getBoolean("clear.check-disk");
Settings.AUTO_CLEAR = config.getBoolean("clear.auto.enabled");
2015-04-18 15:47:13 +02:00
Settings.CLEAR_INTERVAL = config.getInt("clear.auto.clear-interval-seconds");
2015-04-18 15:47:13 +02:00
// Schematics
Settings.SCHEMATIC_SAVE_PATH = config.getString("schematics.save_path");
// Caching
Settings.PERMISSION_CACHING = config.getBoolean("cache.permissions");
// Titles
2015-02-19 07:08:15 +01:00
Settings.TITLES = config.getBoolean("titles");
2015-04-18 15:47:13 +02:00
// Teleportation
Settings.TELEPORT_DELAY = config.getInt("teleport.delay");
Settings.TELEPORT_ON_LOGIN = config.getBoolean("teleport.on_login");
// WorldEdit
Settings.REQUIRE_SELECTION = config.getBoolean("worldedit.require-selection-in-mask");
Settings.WE_MAX_VOLUME = config.getLong("worldedit.max-volume");
Settings.WE_MAX_ITERATIONS = config.getLong("worldedit.max-iterations");
Settings.WE_BLACKLIST = config.getStringList("worldedit.blacklist");
2015-04-18 15:47:13 +02:00
// Chunk processor
Settings.CHUNK_PROCESSOR = config.getBoolean("chunk-processor.enabled");
Settings.CHUNK_PROCESSOR_MAX_BLOCKSTATES = config.getInt("chunk-processor.max-blockstates");
Settings.CHUNK_PROCESSOR_MAX_ENTITIES= config.getInt("chunk-processor.max-entities");
// Comments
2015-05-14 12:34:08 +02:00
Settings.COMMENT_NOTIFICATIONS = config.getBoolean("comments.notifications.enabled");
2015-04-18 15:47:13 +02:00
// Plot limits
Settings.MAX_AUTO_SIZE = config.getInt("claim.max-auto-area");
2015-02-19 07:08:15 +01:00
Settings.MAX_PLOTS = config.getInt("max_plots");
if (Settings.MAX_PLOTS > 32767) {
log("&c`max_plots` Is set too high! This is a per player setting and does not need to be very large.");
Settings.MAX_PLOTS = 32767;
}
Settings.GLOBAL_LIMIT = config.getBoolean("global_limit");
2015-04-18 15:47:13 +02:00
// Misc
Settings.DEBUG = config.getBoolean("debug");
if (Settings.DEBUG) {
log(C.PREFIX.s() + "&6Debug Mode Enabled (Default). Edit the config to turn this off.");
}
Settings.CONSOLE_COLOR = config.getBoolean("console.color");
Settings.METRICS = config.getBoolean("metrics");
2015-02-19 07:08:15 +01:00
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public static void setupConfigs() {
final File folder = new File(IMP.getDirectory() + File.separator + "config");
if (!folder.exists() && !folder.mkdirs()) {
log(C.PREFIX.s() + "&cFailed to create the /plugins/config folder. Please create it manually.");
}
try {
styleFile = new File(IMP.getDirectory() + File.separator + "translations" + File.separator + "style.yml");
if (!styleFile.exists()) {
if (!styleFile.createNewFile()) {
log("Could not create the style file, please create \"translations/style.yml\" manually");
}
}
style = YamlConfiguration.loadConfiguration(styleFile);
setupStyle();
} catch (final Exception err) {
Logger.add(LogLevel.DANGER, "Failed to save style.yml");
2015-02-23 01:33:48 +01:00
log("failed to save style.yml");
2015-02-19 07:08:15 +01:00
}
try {
configFile = new File(IMP.getDirectory() + File.separator + "config" + File.separator + "settings.yml");
if (!configFile.exists()) {
if (!configFile.createNewFile()) {
log("Could not create the settings file, please create \"settings.yml\" manually.");
}
}
config = YamlConfiguration.loadConfiguration(configFile);
setupConfig();
} catch (final Exception err_trans) {
Logger.add(LogLevel.DANGER, "Failed to save settings.yml");
2015-02-23 01:33:48 +01:00
log("Failed to save settings.yml");
2015-02-19 07:08:15 +01:00
}
try {
storageFile = new File(IMP.getDirectory() + File.separator + "config" + File.separator + "storage.yml");
if (!storageFile.exists()) {
if (!storageFile.createNewFile()) {
log("Could not the storage settings file, please create \"storage.yml\" manually.");
}
}
storage = YamlConfiguration.loadConfiguration(storageFile);
setupStorage();
} catch (final Exception err_trans) {
Logger.add(LogLevel.DANGER, "Failed to save storage.yml");
2015-02-23 01:33:48 +01:00
log("Failed to save storage.yml");
2015-02-19 07:08:15 +01:00
}
try {
style.save(styleFile);
config.save(configFile);
storage.save(storageFile);
} catch (final IOException e) {
Logger.add(LogLevel.DANGER, "Configuration file saving failed");
e.printStackTrace();
}
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
private static void setupStorage() {
storage.set("version", VERSION);
final Map<String, Object> options = new HashMap<>();
options.put("mysql.use", false);
options.put("sqlite.use", true);
options.put("sqlite.db", "storage");
options.put("mysql.host", "localhost");
options.put("mysql.port", "3306");
options.put("mysql.user", "root");
options.put("mysql.password", "password");
options.put("mysql.database", "plot_db");
options.put("prefix", "");
for (final Entry<String, Object> node : options.entrySet()) {
if (!storage.contains(node.getKey())) {
storage.set(node.getKey(), node.getValue());
}
}
2015-02-20 07:34:19 +01:00
Settings.DB.USE_MYSQL = storage.getBoolean("mysql.use");
Settings.DB.USER = storage.getString("mysql.user");
Settings.DB.PASSWORD = storage.getString("mysql.password");
Settings.DB.HOST_NAME = storage.getString("mysql.host");
Settings.DB.PORT = storage.getString("mysql.port");
Settings.DB.DATABASE = storage.getString("mysql.database");
Settings.DB.USE_SQLITE = storage.getBoolean("sqlite.use");
Settings.DB.SQLITE_DB = storage.getString("sqlite.db");
Settings.DB.PREFIX = storage.getString("prefix");
Settings.METRICS = config.getBoolean("metrics");
Settings.AUTO_CLEAR = config.getBoolean("clear.auto.enabled");
Settings.AUTO_CLEAR_DAYS = config.getInt("clear.auto.days");
Settings.DELETE_PLOTS_ON_BAN = config.getBoolean("clear.on.ban");
2015-02-23 00:12:33 +01:00
}
2015-02-23 02:32:27 +01:00
2015-02-23 00:12:33 +01:00
public static void showDebug() {
C.COLOR_1 = "&" + (style.getString("color.1"));
C.COLOR_2 = "&" + (style.getString("color.2"));
C.COLOR_3 = "&" + (style.getString("color.3"));
C.COLOR_4 = "&" + (style.getString("color.4"));
2015-02-20 07:34:19 +01:00
if (Settings.DEBUG) {
final Map<String, String> settings = new HashMap<>();
settings.put("Kill Road Mobs", "" + Settings.KILL_ROAD_MOBS);
settings.put("Use Metrics", "" + Settings.METRICS);
settings.put("Delete Plots On Ban", "" + Settings.DELETE_PLOTS_ON_BAN);
settings.put("Mob Pathfinding", "" + Settings.MOB_PATHFINDING);
settings.put("DB Mysql Enabled", "" + Settings.DB.USE_MYSQL);
settings.put("DB SQLite Enabled", "" + Settings.DB.USE_SQLITE);
settings.put("Auto Clear Enabled", "" + Settings.AUTO_CLEAR);
settings.put("Auto Clear Days", "" + Settings.AUTO_CLEAR_DAYS);
settings.put("Schematics Save Path", "" + Settings.SCHEMATIC_SAVE_PATH);
settings.put("API Location", "" + Settings.API_URL);
for (final Entry<String, String> setting : settings.entrySet()) {
log(C.PREFIX.s() + String.format("&cKey: &6%s&c, Value: &6%s", setting.getKey(), setting.getValue()));
}
2015-02-19 07:08:15 +01:00
}
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
private static void setupStyle() {
style.set("version", VERSION);
final Map<String, Object> o = new HashMap<>();
2015-02-21 12:46:33 +01:00
o.put("color.1", C.COLOR_1.substring(1));
o.put("color.2", C.COLOR_2.substring(1));
o.put("color.3", C.COLOR_3.substring(1));
o.put("color.4", C.COLOR_4.substring(1));
2015-02-19 07:08:15 +01:00
for (final Entry<String, Object> node : o.entrySet()) {
if (!style.contains(node.getKey())) {
style.set(node.getKey(), node.getValue());
}
}
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public static double getJavaVersion() {
return Double.parseDouble(System.getProperty("java.specification.version"));
}
2015-02-23 02:32:27 +01:00
2015-02-19 07:08:15 +01:00
public static Set<String> getPlotWorlds() {
return plotworlds.keySet();
}
public static Collection<PlotWorld> getPlotWorldObjects() {
return plotworlds.values();
}
2015-02-19 07:08:15 +01:00
}