package com.taiter.ce;
/*
* This file is part of Custom Enchantments
* Copyright (C) Taiterio 2015
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.HandlerList;
import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.taiter.ce.CItems.AssassinsBlade;
import com.taiter.ce.CItems.Bandage;
import com.taiter.ce.CItems.BearTrap;
import com.taiter.ce.CItems.BeastmastersBow;
import com.taiter.ce.CItems.CItem;
import com.taiter.ce.CItems.Deathscythe;
import com.taiter.ce.CItems.DruidBoots;
import com.taiter.ce.CItems.Firecracker;
import com.taiter.ce.CItems.FireworkBattery;
import com.taiter.ce.CItems.Flamethrower;
import com.taiter.ce.CItems.HealingShovel;
import com.taiter.ce.CItems.HermesBoots;
import com.taiter.ce.CItems.HookshotBow;
import com.taiter.ce.CItems.Landmine;
import com.taiter.ce.CItems.LivefireBoots;
import com.taiter.ce.CItems.Medikit;
import com.taiter.ce.CItems.Minigun;
import com.taiter.ce.CItems.NecromancersStaff;
import com.taiter.ce.CItems.PiranhaTrap;
import com.taiter.ce.CItems.PoisonIvy;
import com.taiter.ce.CItems.PotionLauncher;
import com.taiter.ce.CItems.Powergloves;
import com.taiter.ce.CItems.PricklyBlock;
import com.taiter.ce.CItems.Pyroaxe;
import com.taiter.ce.CItems.RocketBoots;
import com.taiter.ce.CItems.ThorsAxe;
import com.taiter.ce.Enchantments.CEnchantment;
import com.taiter.ce.Enchantments.CEnchantment.Application;
import com.taiter.ce.Enchantments.EnchantManager;
import com.taiter.ce.Enchantments.Global.IceAspect;
import net.milkbowl.vault.economy.Economy;
public final class Main extends JavaPlugin {
public static Plugin plugin;
public static FileConfiguration config;
public static CEListener listener;
public static CeCommand commandC;
private static ClassLoader classLoader;
public static Set<CItem> items;
public static Boolean createExplosions;
public static Boolean hasRPGItems = false;
// The inventories for the Enchantment Menu
public static Inventory CEMainMenu;
public static Inventory CEEnchantmentMainMenu;
public static Inventory CEItemMenu;
public static Inventory CEConfigMenu;
public static Inventory CEArmorMenu;
public static Inventory CEBootsMenu;
public static Inventory CEBowMenu;
public static Inventory CEGlobalMenu;
public static Inventory CEHelmetMenu;
public static Inventory CEToolMenu;
//------------------------------------------------------
// Economy
public static Economy econ = null;
public static Boolean hasEconomy = false;
public static Plugin econPl;
//------------------------------------------------------
// Updater
private URL updateListURL;
private URL updateDownloadURL;
private String currentVersion;
private String newVersion;
private String newMD5;
public Boolean hasUpdate = false;
public Boolean hasChecked = false;
//------------------------------------------------------
@SuppressWarnings("deprecation")
@Override
public void onEnable() {
plugin = this;
commandC = new CeCommand(this);
classLoader = this.getClassLoader();
items = new HashSet<CItem>();
//Load/Create config
this.saveDefaultConfig();
config = this.getConfig();
config.options().copyDefaults(true);
this.saveConfig();
if (config.contains("enchantments"))
Tools.convertOldConfig();
// Start the listener
initializeListener();
//Load global config values
try {
createExplosions = Boolean.parseBoolean(Main.config.getString("Global.CreateExplosions"));
// Get the maximum amount of Enchantments on an Item
EnchantManager.setMaxEnchants(Integer.parseInt(config.getString("Global.Enchantments.MaximumCustomEnchantments")));
} catch (Exception ex) {
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Config error, please check the values of");
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Global.CreateExplosions (Has to be true or false) and");
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Global.Enchantments.MaximumCustomEnchantments (Has to be a number)");
}
// Set the Loreprefix
EnchantManager.setLorePrefix(resolveEnchantmentColor());
EnchantManager.setEnchantBookName(ChatColor.translateAlternateColorCodes('&', Main.config.getString("Global.Books.Name")));
// Check and set up the Economy
if (setupEconomy()) {
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] Vault has been detected!");
hasEconomy = true;
}
if (Main.getWorldGuard() != null)
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] WorldGuard has been detected!");
if (this.getServer().getPluginManager().getPlugin("RPG_Items") != null)
hasRPGItems = true;
// Make the list of Enchantments
makeLists(true, true);
if (EnchantManager.getEnchantments().size() == 0)
return;
try {
writePermissions();
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
Tools.generateInventories();
currentVersion = plugin.getDescription().getVersion();
try {
updateListURL = new URL("https://api.curseforge.com/servermods/files?projectIds=54406");
} catch (MalformedURLException e) {
}
if (Boolean.parseBoolean(config.getString("Global.Updates.CheckOnStartup"))) {
this.getServer().getScheduler().scheduleAsyncDelayedTask(this, new BukkitRunnable() {
@Override
public void run() {
if (!hasChecked)
updateCheck();
}
}, Integer.parseInt(config.getString("Global.Updates.CheckDelay")));
}
}
@Override
public void onDisable() {
getServer().getScheduler().cancelTasks(plugin);
for (CEnchantment c : EnchantManager.getEnchantments())
if (c instanceof IceAspect)
for (HashMap<org.bukkit.block.Block, String> list : ((IceAspect) c).IceLists)
((IceAspect) c).deleteIce(list);
}
// UPDATER
public void updateCheck() {
try {
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] Checking for updates...");
URLConnection connection = updateListURL.openConnection();
connection.setConnectTimeout(5000);
connection.addRequestProperty("User-Agent", "Custom Enchantments - Update Checker");
connection.setDoOutput(true);
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = reader.readLine();
JSONArray array = (JSONArray) JSONValue.parse(response);
JSONObject newestUpdate = (JSONObject) array.get(array.size() - 1);
newVersion = newestUpdate.get("name").toString().replace("Custom Enchantments ", "").trim();
newMD5 = newestUpdate.get("md5").toString();
int newLength = newVersion.length();
int currentLength = currentVersion.length();
double versionNew;
double versionCurrent;
Boolean newHasSubVersion = false;
Boolean currentHasSubVersion = false;
try {
versionNew = Double.parseDouble(newVersion);
} catch (NumberFormatException ex) {
newHasSubVersion = true;
versionNew = Double.parseDouble(newVersion.substring(0, newVersion.length() - 1));
}
try {
versionCurrent = Double.parseDouble(currentVersion);
} catch (NumberFormatException ex) {
currentHasSubVersion = true;
versionCurrent = Double.parseDouble(currentVersion.substring(0, currentVersion.length() - 1));
}
if ((versionNew > versionCurrent) || ((versionNew == versionCurrent) && newHasSubVersion && currentHasSubVersion
&& ((byte) newVersion.toCharArray()[newLength - 1] > (byte) currentVersion.toCharArray()[currentLength - 1]))) {
hasUpdate = true;
updateDownloadURL = new URL(newestUpdate.get("downloadUrl").toString().replace("\\.", ""));
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] A new update is available!");
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] The new version is " + ChatColor.AQUA + newVersion + ChatColor.GREEN + ".");
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] You are currently using " + ChatColor.AQUA + currentVersion + ChatColor.GREEN + ".");
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] You can use '/ce update applyupdate' to update automatically.");
} else {
hasUpdate = false;
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] You are using the latest Version of CE!");
}
hasChecked = true;
} catch (IOException ioex) {
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] Failed to check for updates");
}
}
public void update() {
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] Updating to Version " + newVersion + " started");
BufferedInputStream input = null;
FileOutputStream output = null;
try {
Boolean notify = Boolean.parseBoolean(config.getString("Global.Updates.UpdateNotifications"));
int updateSize = updateDownloadURL.openConnection().getContentLength();
File file = new File(plugin.getDataFolder().getParent(), "CustomEnchantments.jar");
input = new BufferedInputStream(updateDownloadURL.openStream());
output = new FileOutputStream(file);
int bufferSize = (int) Math.ceil(updateSize / 100);
byte[] data = new byte[bufferSize];
int downloaded = 0;
int cRead;
while ((cRead = input.read(data, 0, bufferSize)) != -1) {
output.write(data, 0, cRead);
downloaded += cRead;
if (notify) {
int percentage = ((downloaded * 100) / updateSize);
if (percentage % 25 == 0)
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] Downloaded " + percentage + "% (" + downloaded + "/" + updateSize + " Bytes).");
}
}
testFile(file, bufferSize);
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] Update " + newVersion + " successfully downloaded. Restart/Reload the Server to apply changes.");
currentVersion = newVersion;
hasUpdate = false;
input.close();
output.close();
} catch (Exception e) {
try {
if (input != null)
input.close();
if (output != null)
output.close();
} catch (IOException ex) {
}
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Updating to Version " + newVersion + " failed");
}
}
private boolean testFile(File f, int bufferSize) throws Exception {
InputStream fis = new FileInputStream(f);
byte[] buffer = new byte[bufferSize];
MessageDigest md = MessageDigest.getInstance("MD5");
int cRead;
while ((cRead = fis.read(buffer)) != -1)
md.update(buffer, 0, cRead);
fis.close();
byte[] result = md.digest();
String md5 = "";
for (int i = 0; i < result.length; i++)
md5 += Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1);
if (md5.equals(newMD5))
return true;
return false;
}
// UPDATER
public static WorldGuardPlugin getWorldGuard() {
Plugin worldguard = Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
if (worldguard != null && worldguard instanceof WorldGuardPlugin && worldguard.isEnabled())
return (WorldGuardPlugin) worldguard;
return null;
}
public void initializeListener() {
if (listener != null)
HandlerList.unregisterAll(listener);
listener = new CEListener();
// Register the events
getServer().getPluginManager().registerEvents(listener, this);
// Unregister unused events
// EnchantItemEvent may be used
if (!getConfig().getBoolean("Global.Enchantments.CEnchantmentTable"))
EnchantItemEvent.getHandlerList().unregister(listener);
}
public static String resolveEnchantmentColor() {
String color = Main.plugin.getConfig().getString("Global.Enchantments.CEnchantmentColor");
if (color.contains(";")) {
String[] temp = color.split(";");
color = "";
for (String c : temp)
try {
color += ChatColor.valueOf(c.toUpperCase());
} catch (Exception e) {
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[CE] ERROR: The ChatColor '" + c
+ "' was not found, please check the list of Bukkit ChatColors and update the ChatColor Section. The ChatColor will be ignored to ensure that CE is still working.");
}
} else {
try {
color = ChatColor.valueOf(Main.config.getString("Global.Enchantments.CEnchantmentColor").toUpperCase()).toString();
} catch (Exception e) {
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[CE] ERROR: The ChatColor '" + color
+ "' was not found, please check the list of Bukkit ChatColors and update the ChatColor Section. The ChatColor will be ignored to ensure that CE is still working.");
}
}
return color;
}
private void writePermissions() {
Permission mainNode = new Permission("ce.*", "The main permission node for Custom Enchantments.", PermissionDefault.OP);
Permission runecrafting = new Permission("ce.runecrafting", "The permission for Runecrafting.", PermissionDefault.OP);
runecrafting.addParent(mainNode, true);
Permission cmdNode = new Permission("ce.cmd.*", "The permission node for CE's commands.", PermissionDefault.OP);
Permission enchNode = new Permission("ce.ench.*", "The permission node for CE's EnchantManager.getEnchantments().", PermissionDefault.OP);
Permission itemNode = new Permission("ce.item.*", "The permission node for CE's items.", PermissionDefault.OP);
cmdNode.addParent(mainNode, true);
enchNode.addParent(mainNode, true);
itemNode.addParent(mainNode, true);
Permission cmdMenu = new Permission("ce.cmd.menu", "The permission for the CE command 'menu'");
Permission cmdList = new Permission("ce.cmd.reload", "The permission for the CE command 'reload'");
Permission cmdGive = new Permission("ce.cmd.give", "The permission for the CE command 'give'");
Permission cmdChange = new Permission("ce.cmd.change", "The permission for the CE command 'change'");
Permission cmdEnchant = new Permission("ce.cmd.enchant", "The permission for the CE command 'enchant'");
Permission cmdRunecraft = new Permission("ce.cmd.runecrafting", "The permission for the CE command 'runecrafting'");
cmdMenu.addParent(cmdNode, true);
cmdList.addParent(cmdNode, true);
cmdGive.addParent(cmdNode, true);
cmdChange.addParent(cmdNode, true);
cmdEnchant.addParent(cmdNode, true);
cmdRunecraft.addParent(cmdNode, true);
Bukkit.getServer().getPluginManager().addPermission(mainNode);
Bukkit.getServer().getPluginManager().addPermission(runecrafting);
Bukkit.getServer().getPluginManager().addPermission(cmdNode);
Bukkit.getServer().getPluginManager().addPermission(enchNode);
Bukkit.getServer().getPluginManager().addPermission(itemNode);
Bukkit.getServer().getPluginManager().addPermission(cmdMenu);
Bukkit.getServer().getPluginManager().addPermission(cmdList);
Bukkit.getServer().getPluginManager().addPermission(cmdGive);
Bukkit.getServer().getPluginManager().addPermission(cmdChange);
Bukkit.getServer().getPluginManager().addPermission(cmdEnchant);
Bukkit.getServer().getPluginManager().addPermission(cmdRunecraft);
for (CItem ci : items) {
Permission itemTemp = new Permission("ce.item." + ci.getPermissionName(), "The permission for the CE Item '" + ci.getOriginalName() + "'.");
itemTemp.addParent(itemNode, true);
Bukkit.getServer().getPluginManager().addPermission(itemTemp);
}
for (CEnchantment ce : EnchantManager.getEnchantments()) {
Permission enchTemp = new Permission("ce.ench." + ce.getPermissionName(), "The permission for the CE Enchantment '" + ce.getOriginalName() + "'.");
enchTemp.addParent(enchNode, true);
Bukkit.getServer().getPluginManager().addPermission(enchTemp);
}
}
private boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null)
return false;
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null)
return false;
econ = rsp.getProvider();
return econ != null;
}
public static void makeLists(boolean finalize, boolean printSuccess) {
long time = System.currentTimeMillis();
// ------------Dynamic enchantment loading----------------------
try {
String path = plugin.getDataFolder().getAbsolutePath();
String classSource = Bukkit.getPluginManager().getPlugin("CustomEnchantments").getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
String seperator = "\\\\";
if (classSource.contains("/"))
seperator = "/";
String[] classSourceSplit = classSource.split(seperator);
path = path.substring(0, path.length() - 18) + classSourceSplit[classSourceSplit.length - 1].replace("%20", " ");
JarFile jar = new JarFile(path);
Enumeration<JarEntry> entries = jar.entries();
while (entries.hasMoreElements()) {
String entryName = entries.nextElement().getName();
if (!entryName.contains("$") && entryName.contains("Enchantments") && entryName.endsWith(".class")
&& !(entryName.contains("CEnchantment") || entryName.contains("EnchantManager") || entryName.contains("GlowEnchantment")))
try {
Application app = null;
String className = entryName.replace(".class", "");
if (entryName.contains("/")) {
app = Application.valueOf(entryName.split("/")[4].toUpperCase());
className = className.replaceAll("/", ".");
} else if (entryName.contains("\\")) {
app = Application.valueOf(entryName.split("\\\\")[4].toUpperCase());
className = className.replaceAll("\\\\", ".");
}
EnchantManager.getEnchantments().add((CEnchantment) classLoader.loadClass(className).getDeclaredConstructor(Application.class).newInstance(app));
} catch (ClassNotFoundException e) {
} // Checked exception, should never be thrown
}
jar.close();
} catch (Exception e) {
if (e instanceof FileNotFoundException) {
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Custom Enchantments could not be started,");
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] please make sure that you the plugins jar");
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] in your plugin folder is named 'CustomEnchantments'.");
} else {
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Custom Enchantments could not be loaded,");
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] please report this error on the Bukkit page of the plugin");
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] by sending the following to Taiterio via PM:");
e.printStackTrace();
}
plugin.getServer().getPluginManager().disablePlugin(plugin);
return;
}
// --------------------------------------------------------------------------------
if (finalize)
for (CEnchantment ce : new HashSet<CEnchantment>(EnchantManager.getEnchantments()))
ce.finalizeEnchantment();
if (printSuccess)
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] All Enchantments have been loaded.");
// ITEMS
// Bow
items.add(new Minigun("Minigun", ChatColor.AQUA, "Fires a Volley of Arrows", 0, Material.BOW));
items.add(new BeastmastersBow("Beastmaster's Bow", ChatColor.AQUA, "Tame the wilderness;and turn nature against your foes!", 0, Material.BOW));
items.add(new HookshotBow("Hookshot Bow", ChatColor.AQUA, "Everyone is just one hook away", 0, Material.BOW));
// Boots
items.add(new HermesBoots("Hermes Boots", ChatColor.GOLD, "These boots are made for walkin'", 100, Material.DIAMOND_BOOTS));
items.add(new LivefireBoots("Livefire Boots", ChatColor.DARK_RED, "Leave a burning trail...;Because it's fun!", 0, Material.DIAMOND_BOOTS));
items.add(new RocketBoots("Rocket Boots", ChatColor.AQUA, "Up we go!; ;WARNING: May cause dismemberment,; death; and explosions", 0, Material.DIAMOND_BOOTS));
items.add(new DruidBoots("Druid Boots", ChatColor.DARK_GREEN, "Let the nature rejuvenate you!", 0, Material.DIAMOND_BOOTS));
// Flint + Steel
items.add(new Flamethrower("Flamethrower", ChatColor.DARK_RED, "Burn, baby, burn!", 0, Material.FLINT_AND_STEEL));
// Stick
items.add(new NecromancersStaff("Necromancer's Staff of Destruction", ChatColor.AQUA, "Wreak chaos everywhere,;Because why not?", 0, Material.STICK));
// Armor
// items.add((CItem) new Swimsuit("Scuba Helmet", ChatColor.BLUE, "Just
// stay underwater for a while,;Take your time!", 60,
// Material.IRON_HELMET));
// Axe
items.add(new ThorsAxe("Thor's Axe", ChatColor.GOLD, "Smite your enemies down with mighty thunder!;Note: Batteries not included.", 0, Material.DIAMOND_AXE));
items.add(new Pyroaxe("Pyroaxe", ChatColor.DARK_RED, "Are your enemies burning?;Do you want to make their situation worse?;Then this is just perfect for you!", 0, Material.DIAMOND_AXE));
// Sword
items.add(new AssassinsBlade("Assassin's Blade", ChatColor.AQUA, "Sneak up on your enemies and hit them hard!; ;(High chance of failure against Hacked Clients)", 200, Material.GOLD_SWORD));
// Shovel
items.add(new HealingShovel("Healing Shovel", ChatColor.GREEN, "Smacking other people in the face;has never been healthier!", 600, Material.GOLD_SPADE));
// Projectile
items.add(new Firecracker("Firecracker", ChatColor.DARK_RED, "Makes every situation a good situation!", 0, Material.SNOW_BALL));
// Block
items.add(new FireworkBattery("Firework-Battery", ChatColor.DARK_RED, "Make the sky shine bright with colors!", 0, Material.REDSTONE_BLOCK));
// Mines
items.add(new BearTrap("Bear Trap", ChatColor.GRAY, "Just hope that it does not contain bears...", 0, Material.IRON_PLATE));
items.add(new PiranhaTrap("Piranha Trap", ChatColor.GRAY, "Who came up with this?", 0, Material.WOOD_PLATE));
items.add(new PoisonIvy("Poison Ivy", ChatColor.DARK_GREEN, "If you're too cheap to afford ladders,;just take this, it'll work just fine!", 0, Material.VINE));
items.add(new PricklyBlock("Prickly Block", ChatColor.LIGHT_PURPLE, "Just build a labyrinth out of these,;people will love you for it!", 0, Material.SAND));
items.add(new Landmine("Landmine", ChatColor.GRAY, "Just don't trigger it yourself, please.", 0, Material.GOLD_PLATE));
// Any
items.add(new Powergloves("Powergloves", ChatColor.AQUA, "Throw all your problems away!", 500, Material.QUARTZ));
items.add(new Medikit("Medikit", ChatColor.GREEN, "Treats most of your ailments,;it even has a box of juice!", 2000, Material.NETHER_STALK));
items.add(new Bandage("Bandage", ChatColor.GREEN, "It has little hearts on it,;so you know it's good", 1000, Material.PAPER));
items.add(new Deathscythe("Deathscythe", ChatColor.DARK_GRAY, "An ancient evil lies within...", 400, Material.GOLD_HOE));
items.add(new PotionLauncher("Potion Launcher", ChatColor.DARK_GRAY,
"Instructions: Put potion into the righthand slot; of the potion launcher,; aim and fire!; ;Manufactured by " + ChatColor.MAGIC + "Taiterio", 20,
Material.HOPPER));
//
if (finalize)
for (CItem ci : items)
ci.finalizeItem();
if (printSuccess)
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] All Items have been loaded.");
deleteInactive();
if (printSuccess)
if (Boolean.parseBoolean(Main.config.getString("Global.Logging.Enabled")))
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[CE] Took " + (System.currentTimeMillis() - time) + "ms to initialize Custom Enchantments.");
}
private static void deleteInactive() {
Set<CEnchantment> e = new LinkedHashSet<CEnchantment>(EnchantManager.getEnchantments());
Set<CItem> i = new LinkedHashSet<CItem>(items);
for (CEnchantment ce : e) {
if (!Boolean.parseBoolean(config.getString("Enchantments." + ce.getOriginalName() + ".Enabled"))) {
EnchantManager.getEnchantments().remove(ce);
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Custom Enchantment " + ce.getOriginalName() + " is disabled in the config.");
}
}
for (CItem ci : i) {
if (!Boolean.parseBoolean(config.getString("Items." + ci.getOriginalName() + ".Enabled"))) {
items.remove(ci);
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[CE] Custom Item " + ci.getOriginalName() + " is disabled in the config.");
}
}
Tools.resolveLists();
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("ce") || cmd.getName().equalsIgnoreCase("customenchantments")) {
String result = commandC.processCommand(sender, args);
if (result != "")
sender.sendMessage(result);
return true;
}
return false;
}
}