2011-05-15 19:33:03 +02:00
|
|
|
package com.Acrobot.ChestShop;
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2012-11-23 21:04:13 +01:00
|
|
|
import com.Acrobot.Breeze.Configuration.Configuration;
|
2013-10-27 16:49:14 +01:00
|
|
|
import com.Acrobot.ChestShop.Commands.Give;
|
2011-05-29 13:25:25 +02:00
|
|
|
import com.Acrobot.ChestShop.Commands.ItemInfo;
|
2014-05-20 23:13:25 +02:00
|
|
|
import com.Acrobot.ChestShop.Commands.Toggle;
|
2011-05-29 13:25:25 +02:00
|
|
|
import com.Acrobot.ChestShop.Commands.Version;
|
2012-11-23 21:04:13 +01:00
|
|
|
import com.Acrobot.ChestShop.Configuration.Messages;
|
|
|
|
import com.Acrobot.ChestShop.Configuration.Properties;
|
2015-05-22 13:25:32 +02:00
|
|
|
import com.Acrobot.ChestShop.Database.Migrations;
|
2012-06-08 15:28:36 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Block.BlockPlace;
|
2012-09-12 12:35:48 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Block.Break.ChestBreak;
|
2012-10-16 17:03:45 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Block.Break.SignBreak;
|
2013-01-24 22:35:28 +01:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Block.SignCreate;
|
2013-07-13 23:14:10 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Economy.ServerAccountCorrector;
|
|
|
|
import com.Acrobot.ChestShop.Listeners.Economy.TaxModule;
|
2015-05-22 13:25:32 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.GarbageTextListener;
|
2013-03-24 20:57:54 +01:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Item.ItemMoveListener;
|
2012-06-08 15:28:36 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.ItemInfoListener;
|
2013-04-23 21:04:59 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Modules.DiscountModule;
|
|
|
|
import com.Acrobot.ChestShop.Listeners.Modules.PriceRestrictionModule;
|
2014-05-20 23:13:25 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.Player.*;
|
2013-01-24 22:35:28 +01:00
|
|
|
import com.Acrobot.ChestShop.Listeners.PostShopCreation.CreationFeeGetter;
|
|
|
|
import com.Acrobot.ChestShop.Listeners.PostShopCreation.MessageSender;
|
2013-08-07 02:03:09 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.PostShopCreation.ShopCreationLogger;
|
2013-01-24 22:35:28 +01:00
|
|
|
import com.Acrobot.ChestShop.Listeners.PostShopCreation.SignSticker;
|
2012-10-16 17:03:45 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.PostTransaction.*;
|
2013-01-24 22:35:28 +01:00
|
|
|
import com.Acrobot.ChestShop.Listeners.PreShopCreation.*;
|
2012-08-10 21:44:32 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.PreTransaction.*;
|
2013-01-24 22:35:28 +01:00
|
|
|
import com.Acrobot.ChestShop.Listeners.PreTransaction.ErrorMessageSender;
|
|
|
|
import com.Acrobot.ChestShop.Listeners.PreTransaction.PermissionChecker;
|
2013-08-07 02:03:09 +02:00
|
|
|
import com.Acrobot.ChestShop.Listeners.ShopRemoval.ShopRefundListener;
|
|
|
|
import com.Acrobot.ChestShop.Listeners.ShopRemoval.ShopRemovalLogger;
|
2012-05-10 16:32:25 +02:00
|
|
|
import com.Acrobot.ChestShop.Logging.FileFormatter;
|
2013-01-24 22:35:28 +01:00
|
|
|
import com.Acrobot.ChestShop.Metadata.ItemDatabase;
|
2012-08-10 19:00:20 +02:00
|
|
|
import com.Acrobot.ChestShop.Signs.RestrictedSign;
|
2014-04-12 13:57:39 +02:00
|
|
|
import com.Acrobot.ChestShop.UUIDs.NameManager;
|
2014-04-15 16:00:57 +02:00
|
|
|
import com.Acrobot.ChestShop.Updater.Updater;
|
2012-06-08 15:28:36 +02:00
|
|
|
import org.bukkit.Bukkit;
|
2011-05-15 18:16:25 +02:00
|
|
|
import org.bukkit.Server;
|
2012-11-25 23:34:21 +01:00
|
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
2012-05-10 16:32:25 +02:00
|
|
|
import org.bukkit.event.Event;
|
|
|
|
import org.bukkit.event.Listener;
|
2011-05-15 18:16:25 +02:00
|
|
|
import org.bukkit.plugin.PluginDescriptionFile;
|
|
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
2013-08-08 20:25:27 +02:00
|
|
|
import org.mcstats.Metrics;
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2011-05-29 13:25:25 +02:00
|
|
|
import java.io.File;
|
2012-05-10 16:32:25 +02:00
|
|
|
import java.io.IOException;
|
2011-05-29 13:25:25 +02:00
|
|
|
import java.util.List;
|
2012-05-10 16:32:25 +02:00
|
|
|
import java.util.logging.FileHandler;
|
|
|
|
import java.util.logging.Logger;
|
2011-05-29 13:25:25 +02:00
|
|
|
|
2011-05-15 18:16:25 +02:00
|
|
|
/**
|
|
|
|
* Main file of the plugin
|
2011-05-29 13:25:25 +02:00
|
|
|
*
|
2011-05-15 18:16:25 +02:00
|
|
|
* @author Acrobot
|
|
|
|
*/
|
2011-05-15 19:33:03 +02:00
|
|
|
public class ChestShop extends JavaPlugin {
|
2013-01-24 22:35:28 +01:00
|
|
|
private static ChestShop plugin;
|
|
|
|
private static Server server;
|
|
|
|
private static PluginDescriptionFile description;
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
private static File dataFolder;
|
|
|
|
private static ItemDatabase itemDatabase;
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
private static Logger logger;
|
2012-05-10 16:32:25 +02:00
|
|
|
private FileHandler handler;
|
2011-09-06 19:01:57 +02:00
|
|
|
|
2015-05-22 13:25:32 +02:00
|
|
|
public ChestShop() {
|
2012-05-10 16:32:25 +02:00
|
|
|
dataFolder = getDataFolder();
|
2015-05-22 13:25:32 +02:00
|
|
|
logger = getLogger();
|
2012-05-10 16:32:25 +02:00
|
|
|
description = getDescription();
|
|
|
|
server = getServer();
|
2015-05-22 13:25:32 +02:00
|
|
|
plugin = this;
|
|
|
|
}
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2015-05-22 13:25:32 +02:00
|
|
|
public void onEnable() {
|
2012-11-23 21:04:13 +01:00
|
|
|
Configuration.pairFileAndClass(loadFile("config.yml"), Properties.class);
|
|
|
|
Configuration.pairFileAndClass(loadFile("local.yml"), Messages.class);
|
|
|
|
|
2014-04-12 17:37:23 +02:00
|
|
|
handleMigrations();
|
|
|
|
|
2013-02-10 15:28:16 +01:00
|
|
|
itemDatabase = new ItemDatabase();
|
|
|
|
|
2014-04-12 13:57:39 +02:00
|
|
|
NameManager.load();
|
2014-04-10 22:52:21 +02:00
|
|
|
|
2013-05-30 16:59:20 +02:00
|
|
|
Dependencies.loadPlugins();
|
2011-05-29 13:25:25 +02:00
|
|
|
|
2011-09-06 19:01:57 +02:00
|
|
|
registerEvents();
|
2011-08-13 12:08:34 +02:00
|
|
|
|
2012-11-23 21:04:13 +01:00
|
|
|
if (Properties.LOG_TO_FILE) {
|
|
|
|
File log = loadFile("ChestShop.log");
|
2011-07-05 19:08:55 +02:00
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
FileHandler handler = loadHandler(log.getAbsolutePath());
|
|
|
|
handler.setFormatter(new FileFormatter());
|
2012-03-06 19:41:14 +01:00
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
this.handler = handler;
|
|
|
|
logger.addHandler(handler);
|
|
|
|
}
|
2012-12-19 18:54:23 +01:00
|
|
|
|
2012-11-23 21:04:13 +01:00
|
|
|
if (!Properties.LOG_TO_CONSOLE) {
|
2012-05-10 16:32:25 +02:00
|
|
|
logger.setUseParentHandlers(false);
|
|
|
|
}
|
2011-05-29 13:25:25 +02:00
|
|
|
|
|
|
|
getCommand("iteminfo").setExecutor(new ItemInfo());
|
|
|
|
getCommand("csVersion").setExecutor(new Version());
|
2013-10-27 16:49:14 +01:00
|
|
|
getCommand("csGive").setExecutor(new Give());
|
2014-05-20 23:13:25 +02:00
|
|
|
getCommand("cstoggle").setExecutor(new Toggle());
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2012-01-25 16:32:34 +01:00
|
|
|
startStatistics();
|
2014-03-20 16:57:19 +01:00
|
|
|
startUpdater();
|
2011-05-15 18:16:25 +02:00
|
|
|
}
|
|
|
|
|
2014-04-12 17:37:23 +02:00
|
|
|
private void handleMigrations() {
|
2014-04-21 17:08:20 +02:00
|
|
|
File versionFile = loadFile("version");
|
|
|
|
YamlConfiguration previousVersion = YamlConfiguration.loadConfiguration(versionFile);
|
2014-04-12 17:37:23 +02:00
|
|
|
|
|
|
|
if (previousVersion.get("version") == null) {
|
2015-05-22 13:25:32 +02:00
|
|
|
previousVersion.set("version", Migrations.CURRENT_DATABASE_VERSION);
|
2014-04-21 17:08:20 +02:00
|
|
|
|
|
|
|
try {
|
|
|
|
previousVersion.save(versionFile);
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2014-04-12 17:37:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
int lastVersion = previousVersion.getInt("version");
|
2015-05-22 13:25:32 +02:00
|
|
|
int newVersion = Migrations.migrate(lastVersion);
|
2014-04-12 17:37:23 +02:00
|
|
|
|
2015-05-22 13:25:32 +02:00
|
|
|
if (lastVersion != newVersion) {
|
|
|
|
previousVersion.set("version", newVersion);
|
2015-03-11 18:01:50 +01:00
|
|
|
|
2015-05-22 13:25:32 +02:00
|
|
|
try {
|
|
|
|
previousVersion.save(versionFile);
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2014-04-12 17:37:23 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-11-23 21:04:13 +01:00
|
|
|
public static File loadFile(String string) {
|
|
|
|
File file = new File(dataFolder, string);
|
|
|
|
|
|
|
|
return loadFile(file);
|
|
|
|
}
|
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
private static File loadFile(File file) {
|
|
|
|
if (!file.exists()) {
|
|
|
|
try {
|
2013-04-05 13:11:06 +02:00
|
|
|
if (file.getParent() != null) {
|
|
|
|
file.getParentFile().mkdirs();
|
|
|
|
}
|
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
file.createNewFile();
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return file;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static FileHandler loadHandler(String path) {
|
|
|
|
FileHandler handler = null;
|
|
|
|
|
|
|
|
try {
|
|
|
|
handler = new FileHandler(path, true);
|
|
|
|
} catch (IOException ex) {
|
|
|
|
ex.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
return handler;
|
|
|
|
}
|
|
|
|
|
2011-05-15 18:16:25 +02:00
|
|
|
public void onDisable() {
|
2012-03-01 22:03:59 +01:00
|
|
|
getServer().getScheduler().cancelTasks(this);
|
2012-05-10 16:32:25 +02:00
|
|
|
|
2014-05-20 23:13:25 +02:00
|
|
|
Toggle.clearToggledPlayers();
|
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
if (handler != null) {
|
|
|
|
handler.close();
|
|
|
|
getLogger().removeHandler(handler);
|
|
|
|
}
|
2011-05-15 18:16:25 +02:00
|
|
|
}
|
|
|
|
|
2012-01-25 16:32:34 +01:00
|
|
|
////////////////// REGISTER EVENTS, SCHEDULER & STATS ///////////////////////////
|
2011-09-06 19:01:57 +02:00
|
|
|
private void registerEvents() {
|
2012-06-25 17:15:32 +02:00
|
|
|
registerEvent(new com.Acrobot.ChestShop.Plugins.ChestShop()); //Chest protection
|
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
registerPreShopCreationEvents();
|
|
|
|
registerPreTransactionEvents();
|
|
|
|
registerPostShopCreationEvents();
|
|
|
|
registerPostTransactionEvents();
|
2013-08-07 02:03:09 +02:00
|
|
|
registerShopRemovalEvents();
|
2013-01-24 22:35:28 +01:00
|
|
|
|
2013-04-23 21:04:59 +02:00
|
|
|
registerModules();
|
|
|
|
|
2012-10-16 17:03:45 +02:00
|
|
|
registerEvent(new SignBreak());
|
2013-01-24 22:35:28 +01:00
|
|
|
registerEvent(new SignCreate());
|
2012-09-12 12:35:48 +02:00
|
|
|
registerEvent(new ChestBreak());
|
2012-10-16 17:03:45 +02:00
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
registerEvent(new BlockPlace());
|
2012-06-08 15:28:36 +02:00
|
|
|
registerEvent(new PlayerConnect());
|
2012-08-10 18:56:16 +02:00
|
|
|
registerEvent(new PlayerInteract());
|
2012-09-12 12:35:48 +02:00
|
|
|
registerEvent(new PlayerInventory());
|
2014-05-20 23:13:25 +02:00
|
|
|
registerEvent(new PlayerLeave());
|
2013-07-28 16:59:44 +02:00
|
|
|
registerEvent(new PlayerTeleport());
|
2012-06-08 15:28:36 +02:00
|
|
|
|
|
|
|
registerEvent(new ItemInfoListener());
|
2015-05-22 13:25:32 +02:00
|
|
|
registerEvent(new GarbageTextListener());
|
2012-06-08 15:28:36 +02:00
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
registerEvent(new RestrictedSign());
|
2013-08-26 23:36:50 +02:00
|
|
|
|
|
|
|
if (!Properties.TURN_OFF_HOPPER_PROTECTION) {
|
|
|
|
registerEvent(new ItemMoveListener());
|
|
|
|
}
|
2013-01-24 22:35:28 +01:00
|
|
|
}
|
2012-08-10 18:56:16 +02:00
|
|
|
|
2013-08-07 02:03:09 +02:00
|
|
|
private void registerShopRemovalEvents() {
|
|
|
|
registerEvent(new ShopRefundListener());
|
|
|
|
registerEvent(new ShopRemovalLogger());
|
|
|
|
}
|
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
private void registerPreShopCreationEvents() {
|
|
|
|
if (Properties.BLOCK_SHOPS_WITH_SELL_PRICE_HIGHER_THAN_BUY_PRICE) {
|
|
|
|
registerEvent(new PriceRatioChecker());
|
|
|
|
}
|
2012-08-10 18:56:16 +02:00
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
registerEvent(new ChestChecker());
|
|
|
|
registerEvent(new ItemChecker());
|
|
|
|
registerEvent(new MoneyChecker());
|
|
|
|
registerEvent(new NameChecker());
|
|
|
|
registerEvent(new com.Acrobot.ChestShop.Listeners.PreShopCreation.PermissionChecker());
|
|
|
|
registerEvent(new com.Acrobot.ChestShop.Listeners.PreShopCreation.ErrorMessageSender());
|
|
|
|
registerEvent(new PriceChecker());
|
|
|
|
registerEvent(new QuantityChecker());
|
|
|
|
registerEvent(new TerrainChecker());
|
|
|
|
}
|
2012-08-10 19:00:20 +02:00
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
private void registerPostShopCreationEvents() {
|
|
|
|
registerEvent(new CreationFeeGetter());
|
|
|
|
registerEvent(new MessageSender());
|
|
|
|
registerEvent(new SignSticker());
|
2013-08-07 02:03:09 +02:00
|
|
|
registerEvent(new ShopCreationLogger());
|
2013-01-24 22:35:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private void registerPreTransactionEvents() {
|
2012-11-23 21:04:13 +01:00
|
|
|
if (Properties.ALLOW_PARTIAL_TRANSACTIONS) {
|
2012-08-10 18:56:16 +02:00
|
|
|
registerEvent(new PartialTransactionModule());
|
|
|
|
} else {
|
|
|
|
registerEvent(new AmountAndPriceChecker());
|
|
|
|
}
|
2012-06-08 15:28:36 +02:00
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
registerEvent(new CreativeModeIgnorer());
|
|
|
|
registerEvent(new ErrorMessageSender());
|
|
|
|
registerEvent(new PermissionChecker());
|
|
|
|
registerEvent(new PriceValidator());
|
|
|
|
registerEvent(new ShopValidator());
|
|
|
|
registerEvent(new SpamClickProtector());
|
|
|
|
registerEvent(new StockFittingChecker());
|
|
|
|
}
|
|
|
|
|
|
|
|
private void registerPostTransactionEvents() {
|
|
|
|
registerEvent(new EconomicModule());
|
|
|
|
registerEvent(new EmptyShopDeleter());
|
|
|
|
registerEvent(new ItemManager());
|
|
|
|
registerEvent(new TransactionLogger());
|
|
|
|
registerEvent(new TransactionMessageSender());
|
2012-05-10 16:32:25 +02:00
|
|
|
}
|
2012-03-17 15:00:25 +01:00
|
|
|
|
2013-04-23 21:04:59 +02:00
|
|
|
private void registerModules() {
|
|
|
|
registerEvent(new DiscountModule());
|
|
|
|
registerEvent(new PriceRestrictionModule());
|
2013-07-13 23:14:10 +02:00
|
|
|
|
|
|
|
registerEconomicalModules();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void registerEconomicalModules() {
|
|
|
|
registerEvent(new ServerAccountCorrector());
|
|
|
|
registerEvent(new TaxModule());
|
2013-04-23 21:04:59 +02:00
|
|
|
}
|
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
public void registerEvent(Listener listener) {
|
|
|
|
getServer().getPluginManager().registerEvents(listener, this);
|
2011-09-06 19:01:57 +02:00
|
|
|
}
|
|
|
|
|
2012-03-17 15:00:25 +01:00
|
|
|
private void startStatistics() {
|
|
|
|
try {
|
2012-04-16 16:34:00 +02:00
|
|
|
new Metrics(this).start();
|
2012-05-10 16:32:25 +02:00
|
|
|
} catch (IOException ex) {
|
|
|
|
ChestShop.getBukkitLogger().severe("There was an error while submitting statistics.");
|
2012-03-17 15:00:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-20 16:57:19 +01:00
|
|
|
private static final int PROJECT_BUKKITDEV_ID = 31263;
|
|
|
|
|
|
|
|
private void startUpdater() {
|
|
|
|
if (Properties.TURN_OFF_UPDATES) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
new Updater(this, PROJECT_BUKKITDEV_ID, this.getFile(), Updater.UpdateType.DEFAULT, true);
|
|
|
|
}
|
|
|
|
|
2011-05-29 13:25:25 +02:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
public static ItemDatabase getItemDatabase() {
|
|
|
|
return itemDatabase;
|
|
|
|
}
|
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
public static File getFolder() {
|
|
|
|
return dataFolder;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Logger getBukkitLogger() {
|
|
|
|
return logger;
|
|
|
|
}
|
|
|
|
|
2011-05-29 13:25:25 +02:00
|
|
|
public static Server getBukkitServer() {
|
|
|
|
return server;
|
|
|
|
}
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2011-05-29 13:25:25 +02:00
|
|
|
public static String getVersion() {
|
2011-07-23 21:00:47 +02:00
|
|
|
return description.getVersion();
|
2011-05-29 13:25:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static String getPluginName() {
|
2011-07-23 21:00:47 +02:00
|
|
|
return description.getName();
|
2011-05-29 13:25:25 +02:00
|
|
|
}
|
|
|
|
|
2012-11-04 21:09:38 +01:00
|
|
|
public static List<String> getDependencies() {
|
2012-05-10 16:32:25 +02:00
|
|
|
return description.getSoftDepend();
|
|
|
|
}
|
|
|
|
|
2013-01-24 22:35:28 +01:00
|
|
|
public static ChestShop getPlugin() {
|
|
|
|
return plugin;
|
|
|
|
}
|
|
|
|
|
2012-05-10 16:32:25 +02:00
|
|
|
public static void registerListener(Listener listener) {
|
|
|
|
plugin.registerEvent(listener);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void callEvent(Event event) {
|
2012-11-23 21:04:13 +01:00
|
|
|
Bukkit.getPluginManager().callEvent(event);
|
2012-06-08 15:28:36 +02:00
|
|
|
}
|
2011-05-15 18:16:25 +02:00
|
|
|
}
|