diff --git a/new-implementation/src/main/java/de/epiceric/shopchest/ShopChestImpl.java b/new-implementation/src/main/java/de/epiceric/shopchest/ShopChestImpl.java index c56ef5a..90ab97b 100644 --- a/new-implementation/src/main/java/de/epiceric/shopchest/ShopChestImpl.java +++ b/new-implementation/src/main/java/de/epiceric/shopchest/ShopChestImpl.java @@ -5,12 +5,15 @@ import java.io.InputStreamReader; import java.lang.reflect.Field; import java.net.URL; import java.net.URLConnection; +import java.util.Map; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import org.bukkit.command.Command; import org.bukkit.command.CommandMap; +import org.bukkit.command.SimpleCommandMap; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; @@ -47,7 +50,7 @@ public class ShopChestImpl extends ShopChest { @Override public void onLoad() { - if (!loadConfig()) { + if (!loadConfigData()) { getServer().getPluginManager().disablePlugin(this); return; } @@ -69,26 +72,14 @@ public class ShopChestImpl extends ShopChest { @Override public void onDisable() { - if (configManager != null) { - try { - configManager.save(); - } catch (IOException e) { - Logger.severe("Failed to save configuration file. Config may have been lost"); - Logger.severe(e); - } - } - - if (database != null) { - if (database instanceof SQLite) { - ((SQLite) database).vacuum(); - } - database.disconnect(); - } + unregisterCommand(); + saveConfigData(); + unloadDatabase(); getShopManager().getShops().forEach(shop -> ((ShopImpl) shop).destroy()); } - private boolean loadConfig() { + private boolean loadConfigData() { configManager = ConfigManager.get(this); try { @@ -102,6 +93,17 @@ public class ShopChestImpl extends ShopChest { return true; } + private void saveConfigData() { + if (configManager != null) { + try { + configManager.save(); + } catch (IOException e) { + Logger.severe("Failed to save configuration file. Config may have been lost"); + Logger.severe(e); + } + } + } + private boolean loadEconomy() { RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Economy.class); if (rsp == null) { @@ -138,6 +140,29 @@ public class ShopChestImpl extends ShopChest { } } + private void unregisterCommand() { + try { + Command pluginCommand = ((ShopCommandImpl) command).getPluginCommand(); + Field fieldCommandMap = getServer() .getClass().getDeclaredField("commandMap"); + fieldCommandMap.setAccessible(true); + + CommandMap commandMap = (CommandMap) fieldCommandMap.get(getServer()); + pluginCommand.unregister(commandMap); + + Field fieldKnownCommands = SimpleCommandMap.class.getDeclaredField("knownCommands"); + fieldKnownCommands.setAccessible(true); + + Map knownCommands = (Map) fieldKnownCommands.get(commandMap); + knownCommands.remove("shopchest:" + command.getName()); + if (pluginCommand.equals(knownCommands.get(command.getName()))) { + knownCommands.remove(command.getName()); + } + } catch (ReflectiveOperationException e) { + Logger.severe("Failed to unregister shop command"); + Logger.severe(e); + } + } + private void loadDatabase() { if (Config.DATABASE_TYPE.get() == DatabaseType.SQLITE) { database = new SQLite(this); @@ -157,6 +182,15 @@ public class ShopChestImpl extends ShopChest { } ); } + + private void unloadDatabase() { + if (database != null) { + if (database instanceof SQLite) { + ((SQLite) database).vacuum(); + } + database.disconnect(); + } + } private void checkForUpdates() { if (!Config.CORE_ENABLE_UPDATE_CHECKER.get()) { diff --git a/new-implementation/src/main/java/de/epiceric/shopchest/command/ShopCommandImpl.java b/new-implementation/src/main/java/de/epiceric/shopchest/command/ShopCommandImpl.java index 4ade559..4099ed2 100644 --- a/new-implementation/src/main/java/de/epiceric/shopchest/command/ShopCommandImpl.java +++ b/new-implementation/src/main/java/de/epiceric/shopchest/command/ShopCommandImpl.java @@ -2,6 +2,7 @@ package de.epiceric.shopchest.command; import java.lang.reflect.Constructor; import java.util.List; +import java.util.Locale; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -29,7 +30,7 @@ public class ShopCommandImpl extends ShopCommand { @Override public String getName() { - return Config.CORE_MAIN_COMMAND_NAME.get(); + return Config.CORE_MAIN_COMMAND_NAME.get().toLowerCase(Locale.ENGLISH).trim(); } /**