# Conflicts: # src/main/java/net/knarcraft/blacksmith/BlacksmithPlugin.java # src/main/java/net/knarcraft/blacksmith/command/blacksmith/BlackSmithConfigCommand.java # src/main/java/net/knarcraft/blacksmith/formatting/BlacksmithStringFormatter.java # src/main/java/net/knarcraft/blacksmith/trait/SalvageSession.java # src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java
276 lines
9.7 KiB
Java
276 lines
9.7 KiB
Java
package net.knarcraft.blacksmith;
|
|
|
|
import net.citizensnpcs.api.CitizensAPI;
|
|
import net.citizensnpcs.api.trait.TraitFactory;
|
|
import net.citizensnpcs.api.trait.TraitInfo;
|
|
import net.knarcraft.blacksmith.command.PresetCommand;
|
|
import net.knarcraft.blacksmith.command.PresetTabCompleter;
|
|
import net.knarcraft.blacksmith.command.blacksmith.BlackSmithConfigCommand;
|
|
import net.knarcraft.blacksmith.command.blacksmith.BlackSmithConfigTabCompleter;
|
|
import net.knarcraft.blacksmith.command.blacksmith.BlackSmithEditCommand;
|
|
import net.knarcraft.blacksmith.command.blacksmith.BlackSmithEditTabCompleter;
|
|
import net.knarcraft.blacksmith.command.scrapper.ScrapperConfigCommand;
|
|
import net.knarcraft.blacksmith.command.scrapper.ScrapperConfigTabCompleter;
|
|
import net.knarcraft.blacksmith.command.scrapper.ScrapperEditCommand;
|
|
import net.knarcraft.blacksmith.command.scrapper.ScrapperEditTabCompleter;
|
|
import net.knarcraft.blacksmith.config.blacksmith.GlobalBlacksmithSettings;
|
|
import net.knarcraft.blacksmith.config.scrapper.GlobalScrapperSettings;
|
|
import net.knarcraft.blacksmith.formatting.Translatable;
|
|
import net.knarcraft.blacksmith.listener.NPCClickListener;
|
|
import net.knarcraft.blacksmith.listener.PlayerListener;
|
|
import net.knarcraft.blacksmith.manager.EconomyManager;
|
|
import net.knarcraft.blacksmith.manager.PlayerUsageManager;
|
|
import net.knarcraft.blacksmith.trait.BlacksmithTrait;
|
|
import net.knarcraft.blacksmith.trait.ScrapperTrait;
|
|
import net.knarcraft.knarlib.formatting.FormatBuilder;
|
|
import net.knarcraft.knarlib.formatting.StringFormatter;
|
|
import net.knarcraft.knarlib.formatting.TranslatableTimeUnit;
|
|
import net.knarcraft.knarlib.formatting.Translator;
|
|
import net.knarcraft.knarlib.plugin.ConfigCommentPlugin;
|
|
import net.knarcraft.knarlib.util.ConfigHelper;
|
|
import net.knarcraft.knarlib.util.UpdateChecker;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.PluginCommand;
|
|
import org.bukkit.command.TabCompleter;
|
|
import org.bukkit.configuration.InvalidConfigurationException;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.event.Event;
|
|
import org.bukkit.plugin.PluginDescriptionFile;
|
|
import org.bukkit.plugin.PluginManager;
|
|
import org.bukkit.plugin.java.JavaPluginLoader;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.io.File;
|
|
import java.util.logging.Level;
|
|
|
|
/**
|
|
* Blacksmith's main class
|
|
*/
|
|
public class BlacksmithPlugin extends ConfigCommentPlugin {
|
|
|
|
private static BlacksmithPlugin instance;
|
|
private GlobalBlacksmithSettings blacksmithConfig;
|
|
private GlobalScrapperSettings scrapperConfig;
|
|
private static Translator translator;
|
|
|
|
/**
|
|
* Constructor required for MockBukkit
|
|
*/
|
|
@SuppressWarnings("unused")
|
|
public BlacksmithPlugin() {
|
|
super();
|
|
}
|
|
|
|
/**
|
|
* Constructor required for MockBukkit
|
|
*/
|
|
@SuppressWarnings("unused")
|
|
protected BlacksmithPlugin(@NotNull JavaPluginLoader loader, @NotNull PluginDescriptionFile descriptionFile,
|
|
@NotNull File dataFolder, @NotNull File file) {
|
|
super(loader, descriptionFile, dataFolder, file);
|
|
}
|
|
|
|
/**
|
|
* Gets an instance of the Blacksmith plugin
|
|
*
|
|
* @return <p>An instance of the blacksmith plugin</p>
|
|
*/
|
|
public static @NotNull BlacksmithPlugin getInstance() {
|
|
return instance;
|
|
}
|
|
|
|
/**
|
|
* Gets settings for the blacksmith plugin's blacksmiths
|
|
*
|
|
* @return <p>Settings for the blacksmith plugin's blacksmith</p>
|
|
*/
|
|
public @NotNull GlobalBlacksmithSettings getGlobalBlacksmithSettings() {
|
|
return blacksmithConfig;
|
|
}
|
|
|
|
/**
|
|
* Gets settings for the blacksmith plugin's scrapper
|
|
*
|
|
* @return <p>Settings for the blacksmith plugin's scrapper</p>
|
|
*/
|
|
public @NotNull GlobalScrapperSettings getGlobalScrapperSettings() {
|
|
return scrapperConfig;
|
|
}
|
|
|
|
/**
|
|
* Reloads the configuration file from disk
|
|
*/
|
|
public void reload() {
|
|
this.reloadConfig();
|
|
blacksmithConfig.load();
|
|
scrapperConfig.load();
|
|
translator.loadLanguages(this.getDataFolder(), "en", this.getConfig().getString(
|
|
"language", "en"));
|
|
}
|
|
|
|
/**
|
|
* Gets the translator to use for translation
|
|
*
|
|
* @return <p>The translator to use</p>
|
|
*/
|
|
public static @NotNull Translator getTranslator() {
|
|
return BlacksmithPlugin.translator;
|
|
}
|
|
|
|
@Override
|
|
public void onDisable() {
|
|
log(" v" + getDescription().getVersion() + " disabled.");
|
|
}
|
|
|
|
@Override
|
|
public void onEnable() {
|
|
instance = this;
|
|
ConfigHelper.saveDefaults(this);
|
|
|
|
//Migrate from an earlier configuration file syntax if necessary
|
|
if (getConfig().getString("scrapper.defaults.dropItem") == null) {
|
|
net.knarcraft.knarlib.util.ConfigHelper.migrateConfig(this);
|
|
}
|
|
initializeConfigurations(getConfig());
|
|
|
|
//Set up Vault integration
|
|
if (!setUpVault()) {
|
|
return;
|
|
}
|
|
|
|
//Register the blacksmith trait with Citizens
|
|
TraitFactory traitFactory = CitizensAPI.getTraitFactory();
|
|
traitFactory.registerTrait(TraitInfo.create(BlacksmithTrait.class).withName("blacksmith"));
|
|
traitFactory.registerTrait(TraitInfo.create(ScrapperTrait.class).withName("scrapper"));
|
|
|
|
//Register all commands
|
|
registerCommands();
|
|
//Register all listeners
|
|
registerListeners();
|
|
|
|
log(" v" + getDescription().getVersion() + " enabled.");
|
|
|
|
//Alert about an update in the console
|
|
UpdateChecker.checkForUpdate(this, "https://api.spigotmc.org/legacy/update.php?resource=105938",
|
|
() -> this.getDescription().getVersion(), null);
|
|
|
|
// Remove expired scrapper usage data
|
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> PlayerUsageManager.removeExpiredData(
|
|
System.currentTimeMillis() - 3600000), 36000, 36000);
|
|
}
|
|
|
|
/**
|
|
* Calls an event
|
|
*
|
|
* @param event <p>The event to call</p>
|
|
*/
|
|
public void callEvent(@NotNull Event event) {
|
|
this.getServer().getPluginManager().callEvent(event);
|
|
}
|
|
|
|
/**
|
|
* Prints an info message to the console
|
|
*
|
|
* @param message <p>The message to print</p>
|
|
*/
|
|
public static void log(@NotNull String message) {
|
|
BlacksmithPlugin.getInstance().getLogger().log(Level.INFO, message);
|
|
}
|
|
|
|
/**
|
|
* Prints a warning message to the console
|
|
*
|
|
* @param message <p>The message to print</p>
|
|
*/
|
|
public static void warn(@NotNull String message) {
|
|
BlacksmithPlugin.getInstance().getLogger().log(Level.WARNING, message);
|
|
}
|
|
|
|
/**
|
|
* Prints an error message to the console
|
|
*
|
|
* @param message <p>The message to print</p>
|
|
*/
|
|
public static void error(@NotNull String message) {
|
|
BlacksmithPlugin.getInstance().getLogger().log(Level.SEVERE, message);
|
|
}
|
|
|
|
/**
|
|
* Prints a debug message to the console
|
|
*
|
|
* @param message <p>The message to print</p>
|
|
*/
|
|
public static void debug(@NotNull String message) {
|
|
BlacksmithPlugin.getInstance().getLogger().log(Level.FINE, message);
|
|
}
|
|
|
|
/**
|
|
* Initializes custom configuration and translation
|
|
*
|
|
* @param fileConfiguration <p>The configuration file to get values from</p>
|
|
*/
|
|
private void initializeConfigurations(@NotNull FileConfiguration fileConfiguration) {
|
|
//Load settings
|
|
blacksmithConfig = new GlobalBlacksmithSettings(this);
|
|
blacksmithConfig.load();
|
|
scrapperConfig = new GlobalScrapperSettings(this);
|
|
scrapperConfig.load();
|
|
|
|
//Prepare the translator
|
|
translator = new Translator();
|
|
translator.registerMessageCategory(TranslatableTimeUnit.UNIT_SECOND);
|
|
translator.registerMessageCategory(Translatable.ITEM_TYPE_ENCHANTMENT);
|
|
translator.loadLanguages(this.getDataFolder(), "en",
|
|
fileConfiguration.getString("language", "en"));
|
|
PluginDescriptionFile description = this.getDescription();
|
|
String prefix;
|
|
if (description.getPrefix() == null) {
|
|
prefix = "Blacksmith";
|
|
} else {
|
|
prefix = description.getPrefix();
|
|
}
|
|
FormatBuilder.setStringFormatter(new StringFormatter(prefix, translator));
|
|
|
|
// This reload is necessary to get values just added to the configuration for some reason
|
|
this.reload();
|
|
}
|
|
|
|
/**
|
|
* Tries to set up Vault
|
|
*
|
|
* @return <p>True if Vault setup/integration succeeded</p>
|
|
*/
|
|
private boolean setUpVault() {
|
|
log("Setting Up Vault now....");
|
|
boolean canLoad = EconomyManager.setUp(getServer().getServicesManager());
|
|
if (!canLoad) {
|
|
error("Vault Integration Failed....");
|
|
getServer().getPluginManager().disablePlugin(this);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Registers all listeners used by this plugin
|
|
*/
|
|
private void registerListeners() {
|
|
PluginManager pluginManager = getServer().getPluginManager();
|
|
pluginManager.registerEvents(new PlayerListener(), this);
|
|
pluginManager.registerEvents(new NPCClickListener(), this);
|
|
}
|
|
|
|
/**
|
|
* Registers all commands used by this plugin
|
|
*/
|
|
private void registerCommands() {
|
|
registerCommand("blacksmith", new BlackSmithEditCommand(), new BlackSmithEditTabCompleter());
|
|
registerCommand("blacksmithConfig", new BlackSmithConfigCommand(), new BlackSmithConfigTabCompleter());
|
|
registerCommand("scrapper", new ScrapperEditCommand(), new ScrapperEditTabCompleter());
|
|
registerCommand("scrapperConfig", new ScrapperConfigCommand(), new ScrapperConfigTabCompleter());
|
|
registerCommand("preset", new PresetCommand(), new PresetTabCompleter());
|
|
}
|
|
|
|
}
|