From f1842e2141a46e148c615e868124684ea1ec1896 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 21 Oct 2017 23:09:21 -0700 Subject: [PATCH] Added storage of levels in the BSkyBlock database --- Level/src/bskyblock/addin/level/Level.java | 98 ++++++++++++++----- Level/src/bskyblock/addin/level/TopTen.java | 1 + .../addin/level/database/object/Levels.java | 40 ++++++++ .../addin/level/{ => util}/MapUtil.java | 2 +- 4 files changed, 114 insertions(+), 27 deletions(-) create mode 100644 Level/src/bskyblock/addin/level/database/object/Levels.java rename Level/src/bskyblock/addin/level/{ => util}/MapUtil.java (98%) diff --git a/Level/src/bskyblock/addin/level/Level.java b/Level/src/bskyblock/addin/level/Level.java index 075f604..d6fb0aa 100644 --- a/Level/src/bskyblock/addin/level/Level.java +++ b/Level/src/bskyblock/addin/level/Level.java @@ -1,5 +1,8 @@ package bskyblock.addin.level; +import java.beans.IntrospectionException; +import java.lang.reflect.InvocationTargetException; +import java.sql.SQLException; import java.util.Calendar; import java.util.HashMap; import java.util.Set; @@ -13,18 +16,22 @@ import org.bukkit.scheduler.BukkitTask; import bskyblock.addin.level.config.LocaleManager; import bskyblock.addin.level.config.PluginConfig; +import bskyblock.addin.level.database.object.Levels; import us.tastybento.bskyblock.BSkyBlock; import us.tastybento.bskyblock.api.commands.ArgumentHandler; import us.tastybento.bskyblock.api.commands.CanUseResp; import us.tastybento.bskyblock.config.BSBLocale; import us.tastybento.bskyblock.config.Settings; +import us.tastybento.bskyblock.database.BSBDatabase; +import us.tastybento.bskyblock.database.managers.AbstractDatabaseHandler; +import us.tastybento.bskyblock.database.objects.Island; import us.tastybento.bskyblock.util.Util; import us.tastybento.bskyblock.util.VaultHelper; public class Level extends JavaPlugin { - + private BSkyBlock bSkyBlock; - + // Level calc cool down private HashMap levelWaitTime = new HashMap(); @@ -37,12 +44,30 @@ public class Level extends JavaPlugin { private HashMap islandLevel; - + private AbstractDatabaseHandler handler; + + private BSBDatabase database; + + private Levels levelsDatabase; + + @Override public void onEnable() { new PluginConfig(this); bSkyBlock = BSkyBlock.getPlugin(); islandLevel = new HashMap<>(); + // Set up database + database = BSBDatabase.getDatabase(); + // Set up the database handler to store and retrieve Island classes + handler = (AbstractDatabaseHandler) database.getHandler(bSkyBlock, Levels.class); + try { + levelsDatabase = handler.loadObject("addon-levels"); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException + | InvocationTargetException | SecurityException | ClassNotFoundException | IntrospectionException + | SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } new TopTen(this); // Local locales localeManager = new LocaleManager(this); @@ -58,19 +83,19 @@ public class Level extends JavaPlugin { if (sender instanceof Player) { Player player = (Player)sender; UUID playerUUID = player.getUniqueId(); - - if (VaultHelper.hasPerm(player, Settings.PERMPREFIX + "island.info")) { - if (!bSkyBlock.getPlayers().inTeam(playerUUID) && !bSkyBlock.getPlayers().hasIsland(playerUUID)) { - Util.sendMessage(player, ChatColor.RED + bSkyBlock.getLocale(sender).get("error.noisland")); - return; + + if (VaultHelper.hasPerm(player, Settings.PERMPREFIX + "island.info")) { + if (!bSkyBlock.getPlayers().inTeam(playerUUID) && !bSkyBlock.getPlayers().hasIsland(playerUUID)) { + Util.sendMessage(player, ChatColor.RED + bSkyBlock.getLocale(sender).get("error.noisland")); + return; + } else { + calculateIslandLevel(player, playerUUID); + return; + } } else { - calculateIslandLevel(player, playerUUID); + //Util.sendMessage(player, ChatColor.RED + bSkyBlock.myLocale(playerUUID).errorNoPermission); return; } - } else { - //Util.sendMessage(player, ChatColor.RED + bSkyBlock.myLocale(playerUUID).errorNoPermission); - return; - } } } @@ -84,13 +109,36 @@ public class Level extends JavaPlugin { return new String[]{null, "Calculate your island's level"}; } }.alias("level")); - - + + } - + @Override public void onDisable(){ - + if (levelsDatabase != null) { + save(false); + } + } + + /** + * Save the levels to the database + * @param async - if true, saving will be done async + */ + public void save(boolean async){ + Runnable save = () -> { + try { + handler.saveObject(levelsDatabase); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | SecurityException + | InstantiationException | NoSuchMethodException | IntrospectionException | SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + }; + if(async){ + getServer().getScheduler().runTaskAsynchronously(this, save); + } else { + save.run(); + } } /** @@ -138,7 +186,7 @@ public class Level extends JavaPlugin { } return true; } - + /** * Sets cool down for the level command * @@ -147,7 +195,7 @@ public class Level extends JavaPlugin { private void setLevelWaitTime(final Player player) { levelWaitTime.put(player.getUniqueId(), Long.valueOf(Calendar.getInstance().getTimeInMillis() + levelWait * 1000)); } - + public boolean onLevelWaitTime(final Player player) { if (levelWaitTime.containsKey(player.getUniqueId())) { if (levelWaitTime.get(player.getUniqueId()).longValue() > Calendar.getInstance().getTimeInMillis()) { @@ -159,7 +207,7 @@ public class Level extends JavaPlugin { return false; } - + private long getLevelWaitTime(final Player player) { if (levelWaitTime.containsKey(player.getUniqueId())) { if (levelWaitTime.get(player.getUniqueId()).longValue() > Calendar.getInstance().getTimeInMillis()) { @@ -172,17 +220,15 @@ public class Level extends JavaPlugin { return 0L; } - public long getIslandLevel(UUID targetPlayer) { + public Long getIslandLevel(UUID targetPlayer) { //getLogger().info("DEBUG: getting island level for " + bSkyBlock.getPlayers().getName(targetPlayer)); - if (islandLevel.containsKey(targetPlayer)) - return islandLevel.get(targetPlayer); - return 0; + return levelsDatabase.getLevel(targetPlayer); } public void setIslandLevel(UUID targetPlayer, long level) { //getLogger().info("DEBUG: set island level to " + level + " for " + bSkyBlock.getPlayers().getName(targetPlayer)); - islandLevel.put(targetPlayer, level); - + levelsDatabase.addLevel(targetPlayer, level); + save(true); } /** diff --git a/Level/src/bskyblock/addin/level/TopTen.java b/Level/src/bskyblock/addin/level/TopTen.java index 597019f..90e019e 100644 --- a/Level/src/bskyblock/addin/level/TopTen.java +++ b/Level/src/bskyblock/addin/level/TopTen.java @@ -43,6 +43,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; import bskyblock.addin.level.config.Settings; +import bskyblock.addin.level.util.MapUtil; import us.tastybento.bskyblock.BSkyBlock; /** diff --git a/Level/src/bskyblock/addin/level/database/object/Levels.java b/Level/src/bskyblock/addin/level/database/object/Levels.java new file mode 100644 index 0000000..352003a --- /dev/null +++ b/Level/src/bskyblock/addin/level/database/object/Levels.java @@ -0,0 +1,40 @@ +package bskyblock.addin.level.database.object; + +import java.util.HashMap; +import java.util.UUID; + +import us.tastybento.bskyblock.database.objects.DataObject; + +public class Levels extends DataObject { + + private String uniqueId = "addon-levels"; + private HashMap islandLevel = new HashMap<>(); + + @Override + public String getUniqueId() { + return "addon-levels"; + } + + @Override + public void setUniqueId(String uniqueId) { + // do nothing + } + + public HashMap getIslandLevel() { + return islandLevel; + } + + public void setIslandLevel(HashMap islandLevel) { + this.islandLevel = islandLevel; + } + + public void addLevel(UUID uuid, Long level) { + this.islandLevel.put(uuid, level); + } + + public Long getLevel(UUID uuid) { + if (islandLevel.containsKey(uuid)) + return (long)islandLevel.get(uuid); + return 0L; + } +} diff --git a/Level/src/bskyblock/addin/level/MapUtil.java b/Level/src/bskyblock/addin/level/util/MapUtil.java similarity index 98% rename from Level/src/bskyblock/addin/level/MapUtil.java rename to Level/src/bskyblock/addin/level/util/MapUtil.java index 0116a77..5d7f65c 100644 --- a/Level/src/bskyblock/addin/level/MapUtil.java +++ b/Level/src/bskyblock/addin/level/util/MapUtil.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with ASkyBlock. If not, see . *******************************************************************************/ -package bskyblock.addin.level; +package bskyblock.addin.level.util; import java.util.Collections; import java.util.Comparator;