VillagerTradeLimiter/src/com/pretzel/dev/villagertradelimiter/VillagerTradeLimiter.java

127 lines
4.9 KiB
Java

package com.pretzel.dev.villagertradelimiter;
import com.pretzel.dev.villagertradelimiter.commands.CommandManager;
import com.pretzel.dev.villagertradelimiter.commands.CommandBase;
import com.pretzel.dev.villagertradelimiter.data.PlayerData;
import com.pretzel.dev.villagertradelimiter.database.DatabaseManager;
import com.pretzel.dev.villagertradelimiter.listeners.InventoryListener;
import com.pretzel.dev.villagertradelimiter.listeners.VillagerListener;
import com.pretzel.dev.villagertradelimiter.settings.ConfigUpdater;
import com.pretzel.dev.villagertradelimiter.lib.Metrics;
import com.pretzel.dev.villagertradelimiter.lib.Util;
import com.pretzel.dev.villagertradelimiter.listeners.PlayerListener;
import com.pretzel.dev.villagertradelimiter.settings.Lang;
import com.pretzel.dev.villagertradelimiter.settings.Settings;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.*;
public class VillagerTradeLimiter extends JavaPlugin {
public static final String PLUGIN_NAME = "VillagerTradeLimiter";
public static final String PREFIX = ChatColor.GOLD+"["+PLUGIN_NAME+"] ";
private static final int BSTATS_ID = 9829;
//Settings
private FileConfiguration cfg;
private Lang lang;
private CommandManager commandManager;
private DatabaseManager databaseManager;
private PlayerListener playerListener;
private HashMap<UUID, PlayerData> playerData;
/** Initial plugin load/unload */
public void onEnable() {
//Initialize instance variables
this.cfg = null;
this.commandManager = new CommandManager(this);
this.playerData = new HashMap<>();
//Copy default settings & load settings
this.getConfig().options().copyDefaults();
this.saveDefaultConfig();
this.loadSettings();
this.loadBStats();
//Register commands and listeners
this.registerCommands();
this.registerListeners();
//Send enabled message
Util.consoleMsg(PREFIX+PLUGIN_NAME+" is running!");
}
/** Save database on plugin stop, server stop */
public void onDisable() {
for(UUID uuid : playerData.keySet()) {
this.databaseManager.savePlayer(uuid, false);
}
this.playerData.clear();
}
/** Loads or reloads config.yml and messages.yml */
public void loadSettings() {
final String mainPath = this.getDataFolder().getPath()+"/";
final File file = new File(mainPath, "config.yml");
try {
ConfigUpdater.update(this, "config.yml", file, Collections.singletonList("Overrides"));
} catch (IOException e) {
Util.errorMsg(e);
}
this.cfg = YamlConfiguration.loadConfiguration(file);
this.lang = new Lang(this, this.getTextResource("messages.yml"), mainPath);
//Load/reload database manager
if(this.databaseManager == null) this.databaseManager = new DatabaseManager(this);
else onDisable();
this.databaseManager.load();
}
/** Load and initialize the bStats class with the plugin id */
private void loadBStats() {
if(this.cfg.getBoolean("bStats", true)) {
new Metrics(this, BSTATS_ID);
}
}
/** Registers plugin commands */
private void registerCommands() {
final CommandBase cmd = this.commandManager.getCommands();
this.getCommand("villagertradelimiter").setExecutor(cmd);
this.getCommand("villagertradelimiter").setTabCompleter(cmd);
}
/** Registers plugin listeners */
private void registerListeners() {
final Settings settings = new Settings(this);
this.playerListener = new PlayerListener(this, settings);
this.getServer().getPluginManager().registerEvents(this.playerListener, this);
this.getServer().getPluginManager().registerEvents(new InventoryListener(this, settings), this);
this.getServer().getPluginManager().registerEvents(new VillagerListener(this, settings), this);
}
// ------------------------- Getters -------------------------
/** @return the settings from config.yml */
public FileConfiguration getCfg() { return this.cfg; }
/** @param path the key you want the value for
* @return a language setting from messages.yml */
public String getLang(final String path) { return this.lang.get(path); }
/** @return this plugin's player listener */
public PlayerListener getPlayerListener() { return this.playerListener; }
/** @return a player's data container */
public HashMap<UUID, PlayerData> getPlayerData() { return this.playerData; }
/** @return the invsee inventory's barrier block */
public ItemStack getBarrier() { return this.commandManager.getBarrier(); }
}