Brewery/src/com/dre/brewery/P.java

830 lines
26 KiB
Java
Raw Normal View History

package com.dre.brewery;
2016-03-21 20:35:12 +01:00
import com.dre.brewery.filedata.*;
import com.dre.brewery.integration.LogBlockBarrel;
import com.dre.brewery.integration.WGBarrel;
import com.dre.brewery.integration.WGBarrelNew;
import com.dre.brewery.integration.WGBarrelOld;
import com.dre.brewery.listeners.*;
import java.io.File;
import java.io.FileOutputStream;
2016-03-21 20:35:12 +01:00
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
2013-04-30 21:41:16 +02:00
import java.util.HashMap;
2016-03-21 20:35:12 +01:00
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
2014-06-06 01:27:27 +02:00
import java.util.UUID;
import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
2016-03-21 20:35:12 +01:00
import org.bukkit.Location;
import org.bukkit.Material;
2016-03-21 20:35:12 +01:00
import org.bukkit.World;
2013-05-28 16:25:06 +02:00
import org.bukkit.block.Block;
2016-03-21 20:35:12 +01:00
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
public class P extends JavaPlugin {
public static P p;
2015-01-09 18:08:38 +01:00
public static String configVersion = "1.3.1";
2013-09-09 16:28:35 +02:00
public static boolean debug;
2014-06-06 01:27:27 +02:00
public static boolean useUUID;
public static boolean use1_9;
2015-01-09 18:08:38 +01:00
public static boolean updateCheck;
// Third Party Enabled
public boolean useWG; //WorldGuard
2015-01-09 00:45:26 +01:00
public WGBarrel wg;
public boolean useLWC; //LWC
public boolean useLB; //LogBlock
public boolean useGP; //GriefPrevention
public boolean hasVault;
// Listeners
public BlockListener blockListener;
public PlayerListener playerListener;
2013-04-28 23:57:41 +02:00
public EntityListener entityListener;
2013-05-09 21:47:58 +02:00
public InventoryListener inventoryListener;
public WorldListener worldListener;
public Compat1_9 compat1_9;
2013-08-26 16:50:27 +02:00
// Language
public String language;
public LanguageReader languageReader;
@Override
public void onEnable() {
p = this;
2014-06-06 01:27:27 +02:00
// Version check
String v = Bukkit.getBukkitVersion();
2016-03-21 20:35:12 +01:00
useUUID = !v.matches(".*1\\.[0-6].*") && !v.matches(".*1\\.7\\.[0-5].*");
use1_9 = !v.matches(".*1\\.[0-8].*");
if (use1_9) {
log("&cExperimental support for Bukkit 1.9 enabled.");
}
2014-06-06 01:27:27 +02:00
// load the Config
try {
if (!readConfig()) {
p = null;
getServer().getPluginManager().disablePlugin(this);
return;
}
} catch (Exception e) {
e.printStackTrace();
p = null;
getServer().getPluginManager().disablePlugin(this);
return;
}
2013-04-30 21:41:16 +02:00
readData();
2014-03-17 16:02:22 +01:00
// Setup Metrics
setupMetrics();
2013-08-26 16:50:27 +02:00
// Listeners
blockListener = new BlockListener();
playerListener = new PlayerListener();
2013-04-28 23:57:41 +02:00
entityListener = new EntityListener();
2013-05-09 21:47:58 +02:00
inventoryListener = new InventoryListener();
worldListener = new WorldListener();
compat1_9 = new Compat1_9();
getCommand("Brewery").setExecutor(new CommandListener());
p.getServer().getPluginManager().registerEvents(blockListener, p);
p.getServer().getPluginManager().registerEvents(playerListener, p);
2013-04-28 23:57:41 +02:00
p.getServer().getPluginManager().registerEvents(entityListener, p);
2013-05-09 21:47:58 +02:00
p.getServer().getPluginManager().registerEvents(inventoryListener, p);
p.getServer().getPluginManager().registerEvents(worldListener, p);
if (use1_9) {
p.getServer().getPluginManager().registerEvents(compat1_9, p);
}
2013-05-09 21:47:58 +02:00
// Heartbeat
2013-06-30 23:41:37 +02:00
p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 650, 1200);
p.getServer().getScheduler().runTaskTimer(p, new DrunkRunnable(), 120, 120);
2015-01-09 18:08:38 +01:00
if (updateCheck) {
p.getServer().getScheduler().runTaskLaterAsynchronously(p, new UpdateChecker(), 135);
}
this.log(this.getDescription().getName() + " enabled!");
}
@Override
public void onDisable() {
// Disable listeners
HandlerList.unregisterAll(this);
// Stop shedulers
getServer().getScheduler().cancelTasks(this);
if (p == null) {
return;
}
2013-07-29 18:54:38 +02:00
// save Data to Disk
2014-09-04 13:06:34 +02:00
DataSave.save(true);
2013-09-11 14:45:46 +02:00
// save LanguageReader
languageReader.save();
2013-07-29 18:54:38 +02:00
// delete Data from Ram
Barrel.barrels.clear();
BCauldron.bcauldrons.clear();
BIngredients.possibleIngredients.clear();
BIngredients.recipes.clear();
BIngredients.cookedNames.clear();
2014-06-06 01:27:27 +02:00
BPlayer.clear();
2013-07-29 18:54:38 +02:00
Brew.potions.clear();
Wakeup.wakeups.clear();
Words.words.clear();
this.log(this.getDescription().getName() + " disabled!");
}
2014-03-17 16:02:22 +01:00
public void setupMetrics() {
try {
2015-03-16 15:08:55 +01:00
new com.dre.brewery.integration.Metrics(this).start();
} catch (Exception ignored) {
2014-03-17 16:02:22 +01:00
}
}
2013-09-05 18:46:33 +02:00
public void reload(CommandSender sender) {
// clear all existent config Data
2013-07-29 18:54:38 +02:00
BIngredients.possibleIngredients.clear();
BIngredients.recipes.clear();
BIngredients.cookedNames.clear();
Words.words.clear();
BPlayer.drainItems.clear();
if (useLB) {
try {
LogBlockBarrel.clear();
} catch (Exception e) {
e.printStackTrace();
}
2014-04-09 00:35:08 +02:00
}
2013-07-29 18:54:38 +02:00
// load the Config
try {
if (!readConfig()) {
p = null;
getServer().getPluginManager().disablePlugin(this);
return;
}
} catch (Exception e) {
e.printStackTrace();
p = null;
getServer().getPluginManager().disablePlugin(this);
return;
}
2013-09-05 18:46:33 +02:00
// save and load LanguageReader
languageReader.save();
languageReader = new LanguageReader(new File(p.getDataFolder(), "languages/" + language + ".yml"));
// Reload Recipes
2013-09-05 18:46:33 +02:00
Boolean successful = true;
for (Brew brew : Brew.potions.values()) {
if (!brew.reloadRecipe()) {
successful = false;
}
}
if (!successful) {
msg(sender, p.languageReader.get("Error_Recipeload"));
2013-09-05 18:46:33 +02:00
}
2013-07-29 18:54:38 +02:00
}
public void msg(CommandSender sender, String msg) {
2013-08-15 18:17:05 +02:00
sender.sendMessage(color("&2[Brewery] &f" + msg));
}
public void log(String msg) {
this.msg(Bukkit.getConsoleSender(), msg);
}
2013-09-09 16:28:35 +02:00
public void debugLog(String msg) {
if (debug) {
this.msg(Bukkit.getConsoleSender(), "&2[Debug] &f" + msg);
}
}
public void errorLog(String msg) {
2015-01-09 00:45:26 +01:00
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_GREEN + "[Brewery] " + ChatColor.DARK_RED + "ERROR: " + ChatColor.RED + msg);
2013-04-30 21:41:16 +02:00
}
public boolean readConfig() {
File file = new File(p.getDataFolder(), "config.yml");
if (!checkConfigs()) {
return false;
}
2013-07-29 18:54:38 +02:00
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
2013-11-21 22:08:47 +01:00
// Set the Language
language = config.getString("language", "en");
// Load LanguageReader
languageReader = new LanguageReader(new File(p.getDataFolder(), "languages/" + language + ".yml"));
2013-11-21 22:08:47 +01:00
// Check if config is the newest version
String version = config.getString("version", null);
if (version != null) {
2015-01-09 02:28:04 +01:00
if (!version.equals(configVersion)) {
2013-11-21 22:08:47 +01:00
new ConfigUpdater(file).update(version, language);
2015-01-09 02:28:04 +01:00
P.p.log("Config Updated to version: " + configVersion);
2013-11-21 22:08:47 +01:00
config = YamlConfiguration.loadConfiguration(file);
}
}
2015-01-09 18:08:38 +01:00
// If the Update Checker should be enabled
updateCheck = config.getBoolean("updateCheck", false);
// Third-Party
useWG = config.getBoolean("useWorldGuard", true) && getServer().getPluginManager().isPluginEnabled("WorldGuard");
2015-01-09 00:45:26 +01:00
if (useWG) {
try {
try {
Class.forName("com.sk89q.worldguard.bukkit.RegionContainer");
wg = new WGBarrelNew();
} catch (ClassNotFoundException e) {
wg = new WGBarrelOld();
}
} catch (Throwable e) {
wg = null;
P.p.errorLog("Failed loading WorldGuard Integration! Opening Barrels will NOT work!");
P.p.errorLog("Brewery was tested with version 5.8 to 6.0 of WorldGuard!");
P.p.errorLog("Disable the WorldGuard support in the config and do /brew reload");
e.printStackTrace();
}
}
useLWC = config.getBoolean("useLWC", true) && getServer().getPluginManager().isPluginEnabled("LWC");
useGP = config.getBoolean("useGriefPrevention", true) && getServer().getPluginManager().isPluginEnabled("GriefPrevention");
useLB = config.getBoolean("useLogBlock", false) && getServer().getPluginManager().isPluginEnabled("LogBlock");
hasVault = getServer().getPluginManager().isPluginEnabled("Vault");
2013-06-05 20:06:44 +02:00
// various Settings
2014-09-04 13:06:34 +02:00
DataSave.autosave = config.getInt("autosave", 3);
2013-09-09 16:28:35 +02:00
debug = config.getBoolean("debug", false);
2014-06-03 21:03:32 +02:00
BPlayer.pukeItem = Material.matchMaterial(config.getString("pukeItem", "SOUL_SAND"));
2013-09-01 23:47:01 +02:00
BPlayer.hangoverTime = config.getInt("hangoverDays", 0) * 24 * 60;
BPlayer.overdrinkKick = config.getBoolean("enableKickOnOverdrink", false);
BPlayer.enableHome = config.getBoolean("enableHome", false);
BPlayer.enableLoginDisallow = config.getBoolean("enableLoginDisallow", false);
BPlayer.enablePuke = config.getBoolean("enablePuke", false);
BPlayer.homeType = config.getString("homeType", null);
Brew.colorInBarrels = config.getBoolean("colorInBarrels", false);
Brew.colorInBrewer = config.getBoolean("colorInBrewer", false);
PlayerListener.openEverywhere = config.getBoolean("openLargeBarrelEverywhere", false);
2013-10-25 17:59:21 +02:00
Words.log = config.getBoolean("logRealChat", false);
2013-11-17 15:26:28 +01:00
Words.commands = config.getStringList("distortCommands");
Words.doSigns = config.getBoolean("distortSignText", false);
for (String bypass : config.getStringList("distortBypass")) {
Words.ignoreText.add(bypass.split(","));
}
2013-06-05 20:06:44 +02:00
// loading recipes
ConfigurationSection configSection = config.getConfigurationSection("recipes");
if (configSection != null) {
for (String recipeId : configSection.getKeys(false)) {
2013-09-05 23:02:45 +02:00
BRecipe recipe = new BRecipe(configSection, recipeId);
if (recipe.isValid()) {
BIngredients.recipes.add(recipe);
} else {
errorLog("Loading the Recipe with id: '" + recipeId + "' failed!");
2013-09-05 23:02:45 +02:00
}
}
}
// loading cooked names and possible ingredients
configSection = config.getConfigurationSection("cooked");
if (configSection != null) {
for (String ingredient : configSection.getKeys(false)) {
2013-07-03 00:31:34 +02:00
Material mat = Material.matchMaterial(ingredient);
if (mat == null && hasVault) {
try {
net.milkbowl.vault.item.ItemInfo vaultItem = net.milkbowl.vault.item.Items.itemByString(ingredient);
if (vaultItem != null) {
mat = vaultItem.getType();
}
} catch (Exception e) {
P.p.errorLog("Could not check vault for Item Name");
e.printStackTrace();
}
}
2013-09-06 00:22:39 +02:00
if (mat != null) {
BIngredients.cookedNames.put(mat, (configSection.getString(ingredient, null)));
BIngredients.possibleIngredients.add(mat);
} else {
errorLog("Unknown Material: " + ingredient);
2013-09-06 00:22:39 +02:00
}
}
}
// loading drainItems
List<String> drainList = config.getStringList("drainItems");
if (drainList != null) {
for (String drainString : drainList) {
String[] drainSplit = drainString.split("/");
if (drainSplit.length > 1) {
Material mat = Material.matchMaterial(drainSplit[0]);
int strength = p.parseInt(drainSplit[1]);
if (mat == null && hasVault && strength > 0) {
try {
net.milkbowl.vault.item.ItemInfo vaultItem = net.milkbowl.vault.item.Items.itemByString(drainSplit[0]);
if (vaultItem != null) {
mat = vaultItem.getType();
}
} catch (Exception e) {
P.p.errorLog("Could not check vault for Item Name");
e.printStackTrace();
}
}
if (mat != null && strength > 0) {
BPlayer.drainItems.put(mat, strength);
}
}
}
}
// telling Words the path, it will load it when needed
2013-05-02 10:06:07 +02:00
Words.config = config;
return true;
}
// load all Data
public void readData() {
File file = new File(p.getDataFolder(), "data.yml");
if (file.exists()) {
2013-04-30 21:41:16 +02:00
FileConfiguration data = YamlConfiguration.loadConfiguration(file);
2014-06-03 21:03:32 +02:00
// Check if data is the newest version
String version = data.getString("Version", null);
if (version != null) {
2014-09-04 13:06:34 +02:00
if (!version.equals(DataSave.dataVersion)) {
2014-06-03 21:03:32 +02:00
P.p.log("Data File is being updated...");
new DataUpdater(data, file).update(version);
data = YamlConfiguration.loadConfiguration(file);
2014-09-04 13:06:34 +02:00
P.p.log("Data Updated to version: " + DataSave.dataVersion);
2014-06-03 21:03:32 +02:00
}
}
2013-09-04 23:32:09 +02:00
// loading Ingredients into ingMap
Map<String, BIngredients> ingMap = new HashMap<String, BIngredients>();
ConfigurationSection section = data.getConfigurationSection("Ingredients");
if (section != null) {
for (String id : section.getKeys(false)) {
ConfigurationSection matSection = section.getConfigurationSection(id + ".mats");
if (matSection != null) {
// matSection has all the materials + amount as Integers
2014-08-20 17:40:10 +02:00
ArrayList<ItemStack> ingredients = deserializeIngredients(matSection);
2013-09-04 23:32:09 +02:00
ingMap.put(id, new BIngredients(ingredients, section.getInt(id + ".cookedTime", 0)));
} else {
errorLog("Ingredient id: '" + id + "' incomplete in data.yml");
}
}
}
// loading Brew
2013-09-04 23:32:09 +02:00
section = data.getConfigurationSection("Brew");
if (section != null) {
// All sections have the UID as name
for (String uid : section.getKeys(false)) {
2013-09-04 23:32:09 +02:00
BIngredients ingredients = getIngredients(ingMap, section.getString(uid + ".ingId"));
2013-05-28 16:25:06 +02:00
int quality = section.getInt(uid + ".quality", 0);
int distillRuns = section.getInt(uid + ".distillRuns", 0);
float ageTime = (float) section.getDouble(uid + ".ageTime", 0.0);
2013-09-05 17:09:20 +02:00
float wood = (float) section.getDouble(uid + ".wood", -1.0);
2013-05-28 16:25:06 +02:00
String recipe = section.getString(uid + ".recipe", null);
2014-06-03 23:10:47 +02:00
boolean unlabeled = section.getBoolean(uid + ".unlabeled", false);
boolean persistent = section.getBoolean(uid + ".persist", false);
2014-09-03 22:03:03 +02:00
boolean stat = section.getBoolean(uid + ".stat", false);
2013-05-28 16:25:06 +02:00
2014-09-03 22:03:03 +02:00
new Brew(parseInt(uid), ingredients, quality, distillRuns, ageTime, wood, recipe, unlabeled, persistent, stat);
2013-04-30 21:41:16 +02:00
}
}
2013-05-09 21:47:58 +02:00
// loading BPlayer
section = data.getConfigurationSection("Player");
if (section != null) {
2013-05-09 21:47:58 +02:00
// keys have players name
for (String name : section.getKeys(false)) {
2014-06-06 01:27:27 +02:00
try {
UUID.fromString(name);
if (!useUUID) {
continue;
}
} catch (IllegalArgumentException e) {
if (useUUID) {
continue;
}
}
2013-05-28 16:25:06 +02:00
int quality = section.getInt(name + ".quality");
int drunk = section.getInt(name + ".drunk");
int offDrunk = section.getInt(name + ".offDrunk", 0);
boolean passedOut = section.getBoolean(name + ".passedOut", false);
new BPlayer(name, quality, drunk, offDrunk, passedOut);
2013-05-09 21:47:58 +02:00
}
}
2013-06-05 19:44:30 +02:00
for (World world : p.getServer().getWorlds()) {
if (world.getName().startsWith("DXL_")) {
loadWorldData(getDxlName(world.getName()), world);
} else {
loadWorldData(world.getUID().toString(), world);
}
2013-05-09 21:47:58 +02:00
}
} else {
errorLog("No data.yml found, will create new one!");
}
}
2014-08-20 17:40:10 +02:00
public ArrayList<ItemStack> deserializeIngredients(ConfigurationSection matSection) {
ArrayList<ItemStack> ingredients = new ArrayList<ItemStack>();
for (String mat : matSection.getKeys(false)) {
String[] matSplit = mat.split(",");
ItemStack item = new ItemStack(Material.getMaterial(matSplit[0]), matSection.getInt(mat));
if (matSplit.length == 2) {
item.setDurability((short) P.p.parseInt(matSplit[1]));
}
ingredients.add(item);
}
return ingredients;
}
2013-09-04 23:32:09 +02:00
// returns Ingredients by id from the specified ingMap
public BIngredients getIngredients(Map<String, BIngredients> ingMap, String id) {
if (!ingMap.isEmpty()) {
if (ingMap.containsKey(id)) {
return ingMap.get(id);
2013-05-09 21:47:58 +02:00
}
}
2013-09-04 23:32:09 +02:00
errorLog("Ingredient id: '" + id + "' not found in data.yml");
return new BIngredients();
}
// loads BIngredients from an ingredient section
public BIngredients loadIngredients(ConfigurationSection section) {
if (section != null) {
2014-08-20 17:40:10 +02:00
return new BIngredients(deserializeIngredients(section), 0);
2013-09-04 23:32:09 +02:00
} else {
errorLog("Cauldron is missing Ingredient Section");
}
2013-05-09 21:47:58 +02:00
return new BIngredients();
}
// load Block locations of given world
2013-06-05 19:44:30 +02:00
public void loadWorldData(String uuid, World world) {
2013-05-09 21:47:58 +02:00
File file = new File(p.getDataFolder(), "data.yml");
if (file.exists()) {
FileConfiguration data = YamlConfiguration.loadConfiguration(file);
// loading BCauldron
if (data.contains("BCauldron." + uuid)) {
ConfigurationSection section = data.getConfigurationSection("BCauldron." + uuid);
for (String cauldron : section.getKeys(false)) {
2013-05-09 21:47:58 +02:00
// block is splitted into x/y/z
String block = section.getString(cauldron + ".block");
if (block != null) {
2013-04-30 21:41:16 +02:00
String[] splitted = block.split("/");
2013-05-09 21:47:58 +02:00
if (splitted.length == 3) {
2013-06-05 19:44:30 +02:00
Block worldBlock = world.getBlockAt(parseInt(splitted[0]), parseInt(splitted[1]), parseInt(splitted[2]));
2013-05-28 16:25:06 +02:00
BIngredients ingredients = loadIngredients(section.getConfigurationSection(cauldron + ".ingredients"));
int state = section.getInt(cauldron + ".state", 1);
new BCauldron(worldBlock, ingredients, state);
2013-04-30 21:41:16 +02:00
} else {
errorLog("Incomplete Block-Data in data.yml: " + section.getCurrentPath() + "." + cauldron);
2013-04-30 21:41:16 +02:00
}
} else {
errorLog("Missing Block-Data in data.yml: " + section.getCurrentPath() + "." + cauldron);
2013-04-30 21:41:16 +02:00
}
}
}
// loading Barrel
2013-05-09 21:47:58 +02:00
if (data.contains("Barrel." + uuid)) {
ConfigurationSection section = data.getConfigurationSection("Barrel." + uuid);
for (String barrel : section.getKeys(false)) {
2013-05-09 21:47:58 +02:00
// block spigot is splitted into x/y/z
String spigot = section.getString(barrel + ".spigot");
if (spigot != null) {
2013-04-30 21:41:16 +02:00
String[] splitted = spigot.split("/");
2013-05-09 21:47:58 +02:00
if (splitted.length == 3) {
2013-06-05 19:44:30 +02:00
// load itemStacks from invSection
ConfigurationSection invSection = section.getConfigurationSection(barrel + ".inv");
2013-06-05 19:44:30 +02:00
Block block = world.getBlockAt(parseInt(splitted[0]), parseInt(splitted[1]), parseInt(splitted[2]));
2013-05-28 16:25:06 +02:00
float time = (float) section.getDouble(barrel + ".time", 0.0);
byte sign = (byte) section.getInt(barrel + ".sign", 0);
String[] st = section.getString(barrel + ".st", "").split(",");
String[] wo = section.getString(barrel + ".wo", "").split(",");
2013-06-05 19:44:30 +02:00
if (invSection != null) {
new Barrel(block, sign, st, wo, invSection.getValues(true), time);
2013-04-30 21:41:16 +02:00
} else {
// Barrel has no inventory
new Barrel(block, sign, st, wo, null, time);
2013-04-30 21:41:16 +02:00
}
2013-06-05 19:44:30 +02:00
2013-04-30 21:41:16 +02:00
} else {
errorLog("Incomplete Block-Data in data.yml: " + section.getCurrentPath() + "." + barrel);
2013-04-30 21:41:16 +02:00
}
} else {
errorLog("Missing Block-Data in data.yml: " + section.getCurrentPath() + "." + barrel);
2013-04-30 21:41:16 +02:00
}
}
}
2013-05-02 10:06:07 +02:00
// loading Wakeup
if (data.contains("Wakeup." + uuid)) {
ConfigurationSection section = data.getConfigurationSection("Wakeup." + uuid);
for (String wakeup : section.getKeys(false)) {
// loc of wakeup is splitted into x/y/z/pitch/yaw
String loc = section.getString(wakeup);
if (loc != null) {
String[] splitted = loc.split("/");
if (splitted.length == 5) {
double x = NumberUtils.toDouble(splitted[0]);
double y = NumberUtils.toDouble(splitted[1]);
double z = NumberUtils.toDouble(splitted[2]);
float pitch = NumberUtils.toFloat(splitted[3]);
float yaw = NumberUtils.toFloat(splitted[4]);
Location location = new Location(world, x, y, z, yaw, pitch);
Wakeup.wakeups.add(new Wakeup(location));
} else {
errorLog("Incomplete Location-Data in data.yml: " + section.getCurrentPath() + "." + wakeup);
}
}
}
}
2013-04-30 21:41:16 +02:00
}
}
private boolean checkConfigs() {
File cfg = new File(p.getDataFolder(), "config.yml");
if (!cfg.exists()) {
errorLog("No config.yml found, creating default file! You may want to choose a config according to your language!");
InputStream defconf = getResource("config/en/config.yml");
if (defconf == null) {
errorLog("default config file not found, your jarfile may be corrupt. Disabling Brewery!");
return false;
}
try {
saveFile(defconf, getDataFolder(), "config.yml");
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
if (!cfg.exists()) {
errorLog("default config file could not be copied, your jarfile may be corrupt. Disabling Brewery!");
return false;
}
File configs = new File(getDataFolder(), "configs");
if (!configs.exists()) {
String lang[] = new String[] {"de", "en", "fr"};
for (String l : lang) {
File lfold = new File(configs, l);
try {
saveFile(getResource("config/" + l + "/config.yml"), lfold, "config.yml");
} catch (IOException e) {
e.printStackTrace();
}
}
}
File languages = new File(getDataFolder(), "languages");
if (!languages.exists()) {
String lang[] = new String[] {"de", "en", "fr", "no"};
for (String l : lang) {
try {
saveFile(getResource("languages/" + l + ".yml"), languages, l + ".yml");
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
// Utility
public int parseInt(String string) {
return NumberUtils.toInt(string, 0);
}
// gets the Name of a DXL World
2013-06-05 19:44:30 +02:00
public String getDxlName(String worldName) {
File dungeonFolder = new File(worldName);
if (dungeonFolder.isDirectory()) {
for (File file : dungeonFolder.listFiles()) {
if (!file.isDirectory()) {
if (file.getName().startsWith(".id_")) {
2013-09-05 19:53:49 +02:00
return file.getName().substring(1).toLowerCase();
2013-06-05 19:44:30 +02:00
}
}
}
}
2013-07-30 22:37:14 +02:00
return worldName;
2013-06-05 19:44:30 +02:00
}
// create empty World save Sections
public void createWorldSections(ConfigurationSection section) {
for (World world : p.getServer().getWorlds()) {
String worldName = world.getName();
if (worldName.startsWith("DXL_")) {
worldName = getDxlName(worldName);
} else {
worldName = world.getUID().toString();
}
section.createSection(worldName);
}
}
// prints a list of Strings at the specified page
2013-08-26 16:50:27 +02:00
public void list(CommandSender sender, ArrayList<String> strings, int page) {
int pages = (int) Math.ceil(strings.size() / 7F);
if (page > pages || page < 1) {
page = 1;
}
sender.sendMessage(color("&7-------------- &f" + languageReader.get("Etc_Page") + " &6" + page + "&f/&6" + pages + " &7--------------"));
ListIterator<String> iter = strings.listIterator((page - 1) * 7);
for (int i = 0; i < 7; i++) {
if (iter.hasNext()) {
2013-08-15 18:17:05 +02:00
sender.sendMessage(color(iter.next()));
} else {
break;
}
}
}
2014-04-09 00:35:08 +02:00
// Returns true if the Block can be destroyed by the Player or something else (null)
public boolean blockDestroy(Block block, Player player) {
switch (block.getType()) {
2014-05-19 15:17:55 +02:00
case CAULDRON:
// will only remove when existing
BCauldron.remove(block);
return true;
case FENCE:
case NETHER_FENCE:
2015-01-10 22:51:01 +01:00
case ACACIA_FENCE:
case BIRCH_FENCE:
case DARK_OAK_FENCE:
case IRON_FENCE:
case JUNGLE_FENCE:
case SPRUCE_FENCE:
2014-05-19 15:17:55 +02:00
// remove barrel and throw potions on the ground
Barrel barrel = Barrel.getBySpigot(block);
if (barrel != null) {
if (barrel.hasPermsDestroy(player)) {
barrel.remove(null, player);
return true;
} else {
return false;
}
}
return true;
2014-06-03 21:03:32 +02:00
case SIGN_POST:
2014-05-19 15:17:55 +02:00
case WALL_SIGN:
// remove small Barrels
Barrel barrel2 = Barrel.getBySpigot(block);
if (barrel2 != null) {
if (!barrel2.isLarge()) {
if (barrel2.hasPermsDestroy(player)) {
barrel2.remove(null, player);
return true;
} else {
return false;
}
2014-05-19 15:17:55 +02:00
} else {
barrel2.destroySign();
}
2014-05-19 15:17:55 +02:00
}
return true;
case WOOD:
case WOOD_STAIRS:
case BIRCH_WOOD_STAIRS:
case JUNGLE_WOOD_STAIRS:
case SPRUCE_WOOD_STAIRS:
2014-06-03 21:03:32 +02:00
case ACACIA_STAIRS:
case DARK_OAK_STAIRS:
2014-05-19 15:17:55 +02:00
Barrel barrel3 = Barrel.getByWood(block);
if (barrel3 != null) {
if (barrel3.hasPermsDestroy(player)) {
barrel3.remove(block, player);
} else {
return false;
}
2014-05-19 15:17:55 +02:00
}
default:
break;
}
return true;
}
2013-08-15 18:17:05 +02:00
public String color(String msg) {
if (msg != null) {
msg = ChatColor.translateAlternateColorCodes('&', msg);
2013-08-15 18:17:05 +02:00
}
return msg;
2013-07-04 02:59:21 +02:00
}
public static void saveFile(InputStream in, File dest, String name) throws IOException {
if (in == null) return;
if (!dest.exists()) {
dest.mkdirs();
}
File result = new File(dest, name);
if (result.exists()) {
return;
}
OutputStream out = new FileOutputStream(result);
byte[] buffer = new byte[1024];
int length;
//copy the file content in bytes
while ((length = in.read(buffer)) > 0){
out.write(buffer, 0, length);
}
in.close();
out.close();
}
2014-06-06 01:27:27 +02:00
// Returns either uuid or Name of player, depending on bukkit version
public static String playerString(Player player) {
if (useUUID) {
return player.getUniqueId().toString();
} else {
return player.getName();
}
}
// returns the Player if online
public static Player getPlayerfromString(String name) {
if (useUUID) {
try {
return Bukkit.getPlayer(UUID.fromString(name));
2014-06-06 01:36:22 +02:00
} catch (Exception e) {
2014-06-06 01:27:27 +02:00
return Bukkit.getPlayerExact(name);
}
}
return Bukkit.getPlayerExact(name);
}
// Runnables
2013-06-30 23:41:37 +02:00
public class DrunkRunnable implements Runnable {
@Override
public void run() {
2014-06-06 01:27:27 +02:00
if (!BPlayer.isEmpty()) {
2013-06-30 23:41:37 +02:00
BPlayer.drunkeness();
}
}
}
public class BreweryRunnable implements Runnable {
@Override
public void run() {
for (BCauldron cauldron : BCauldron.bcauldrons) {
cauldron.onUpdate();// runs every min to update cooking time
}
Barrel.onUpdate();// runs every min to check and update ageing time
BPlayer.onUpdate();// updates players drunkeness
2013-04-30 21:41:16 +02:00
2013-09-09 16:28:35 +02:00
debugLog("Update");
2014-09-04 13:06:34 +02:00
DataSave.autoSave();
}
}
}