Updated to work with latest BSB Database

This commit is contained in:
Tastybento 2018-04-15 17:32:09 -07:00
parent 6837218ae4
commit dee5ba55c6
3 changed files with 42 additions and 120 deletions

View File

@ -2,7 +2,7 @@ name: BSkyBlock-Level
main: bskyblock.addon.level.Level main: bskyblock.addon.level.Level
version: 0.1 version: 0.1
authors: [tastybento] authors: tastybento
permissions: permissions:
bskyblock.intopten: bskyblock.intopten:
@ -11,7 +11,7 @@ permissions:
bskyblock.island.level: bskyblock.island.level:
description: Player can use level command description: Player can use level command
default: true default: true
bskyblock.island.topten: bskyblock.island.top:
description: Player can use top ten command description: Player can use top ten command
default: true default: true
bskyblock.admin.level: bskyblock.admin.level:

View File

@ -1,7 +1,5 @@
package bskyblock.addon.level; package bskyblock.addon.level;
import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -17,7 +15,6 @@ import us.tastybento.bskyblock.Constants;
import us.tastybento.bskyblock.api.addons.Addon; import us.tastybento.bskyblock.api.addons.Addon;
import us.tastybento.bskyblock.api.commands.CompositeCommand; import us.tastybento.bskyblock.api.commands.CompositeCommand;
import us.tastybento.bskyblock.api.user.User; import us.tastybento.bskyblock.api.user.User;
import us.tastybento.bskyblock.database.AbstractDatabaseHandler;
import us.tastybento.bskyblock.database.BSBDatabase; import us.tastybento.bskyblock.database.BSBDatabase;
@ -27,15 +24,12 @@ import us.tastybento.bskyblock.database.BSBDatabase;
* *
*/ */
public class Level extends Addon { public class Level extends Addon {
// Settings // Settings
private Settings settings; private Settings settings;
// Database handler for level data // Database handler for level data
private AbstractDatabaseHandler<LevelsData> handler; private BSBDatabase<LevelsData> handler;
// The BSkyBlock database object
private BSBDatabase database;
// A cache of island levels. Island levels are not kept in memory unless required. // A cache of island levels. Island levels are not kept in memory unless required.
// The cache is saved when the server shuts down and the plugin is disabled. // The cache is saved when the server shuts down and the plugin is disabled.
@ -44,7 +38,7 @@ public class Level extends Addon {
// The Top Ten object // The Top Ten object
private TopTen topTen; private TopTen topTen;
// Level calculator // Level calculator
private LevelPresenter levelCalc; private LevelPresenter levelCalc;
@ -58,10 +52,6 @@ public class Level extends Addon {
levelCalc.calculateIslandLevel(user, playerUUID, b); levelCalc.calculateIslandLevel(user, playerUUID, b);
} }
public AbstractDatabaseHandler<LevelsData> getHandler() {
return handler;
}
/** /**
* Get level from cache for a player * Get level from cache for a player
* @param targetPlayer * @param targetPlayer
@ -73,19 +63,13 @@ public class Level extends Addon {
} }
// Get from database // Get from database
LevelsData level; LevelsData level;
try { level = handler.loadObject(targetPlayer.toString());
level = handler.loadObject(targetPlayer.toString()); if (level == null) {
if (level == null) { // We do not know this player, set to zero
// We do not know this player, set to zero return 0;
return 0;
}
levelsCache.put(targetPlayer, level.getLevel());
return level.getLevel();
} catch (InstantiationException | IllegalAccessException | InvocationTargetException
| ClassNotFoundException | IntrospectionException e) {
getLogger().severe("Could not load player's level! " + e.getMessage());
} }
return 0; levelsCache.put(targetPlayer, level.getLevel());
return level.getLevel();
} }
/** /**
@ -94,19 +78,14 @@ public class Level extends Addon {
public final Settings getSettings() { public final Settings getSettings() {
return settings; return settings;
} }
public TopTen getTopTen() { public TopTen getTopTen() {
return topTen; return topTen;
} }
private void load() { private void load() {
try { for (LevelsData level : handler.loadObjects()) {
for (LevelsData level : handler.loadObjects()) { levelsCache.put(UUID.fromString(level.getUniqueId()), level.getLevel());
levelsCache.put(UUID.fromString(level.getUniqueId()), level.getLevel());
}
} catch (InstantiationException | IllegalAccessException | InvocationTargetException
| ClassNotFoundException | IntrospectionException e) {
getLogger().severe("Could not load levels cache data! " + e.getMessage());
} }
} }
@ -118,7 +97,6 @@ public class Level extends Addon {
} }
} }
@SuppressWarnings("unchecked")
@Override @Override
public void onEnable() { public void onEnable() {
// Check if it is enabled - it might be loaded, but not enabled. // Check if it is enabled - it might be loaded, but not enabled.
@ -130,10 +108,9 @@ public class Level extends Addon {
// Load the plugin's config // Load the plugin's config
settings = new Settings(this); settings = new Settings(this);
// Get the BSkyBlock database // Get the BSkyBlock database
database = BSBDatabase.getDatabase();
// Set up the database handler to store and retrieve Island classes // Set up the database handler to store and retrieve Island classes
// Note that these are saved by the BSkyBlock database // Note that these are saved by the BSkyBlock database
handler = (AbstractDatabaseHandler<LevelsData>) database.getHandler(LevelsData.class); handler = new BSBDatabase<>(this, LevelsData.class);
// Initialize the cache // Initialize the cache
levelsCache = new HashMap<>(); levelsCache = new HashMap<>();
// Load all the levels // Load all the levels
@ -159,15 +136,11 @@ public class Level extends Addon {
*/ */
public void save(boolean async){ public void save(boolean async){
Runnable save = () -> { Runnable save = () -> {
try { for (Entry<UUID, Long> en : levelsCache.entrySet()) {
for (Entry<UUID, Long> en : levelsCache.entrySet()) { LevelsData lv = new LevelsData();
LevelsData lv = new LevelsData(); lv.setLevel(en.getValue());
lv.setLevel(en.getValue()); lv.setUniqueId(en.getKey().toString());
lv.setUniqueId(en.getKey().toString()); handler.saveObject(lv);
handler.saveObject(lv);
}
} catch (IllegalAccessException | InvocationTargetException | IntrospectionException e) {
getLogger().severe("Could not save levels async! " + e.getMessage());
} }
}; };
if(async){ if(async){
@ -188,4 +161,8 @@ public class Level extends Addon {
topTen.addEntry(targetPlayer, level); topTen.addEntry(targetPlayer, level);
} }
public BSBDatabase<LevelsData> getHandler() {
return handler;
}
} }

View File

@ -1,7 +1,5 @@
package bskyblock.addon.level; package bskyblock.addon.level;
import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -23,7 +21,6 @@ import us.tastybento.bskyblock.api.panels.PanelItem.ClickHandler;
import us.tastybento.bskyblock.api.panels.builders.PanelBuilder; import us.tastybento.bskyblock.api.panels.builders.PanelBuilder;
import us.tastybento.bskyblock.api.panels.builders.PanelItemBuilder; import us.tastybento.bskyblock.api.panels.builders.PanelItemBuilder;
import us.tastybento.bskyblock.api.user.User; import us.tastybento.bskyblock.api.user.User;
import us.tastybento.bskyblock.database.AbstractDatabaseHandler;
import us.tastybento.bskyblock.database.BSBDatabase; import us.tastybento.bskyblock.database.BSBDatabase;
/** /**
@ -38,17 +35,13 @@ public class TopTen implements Listener {
private TopTenData topTenList; private TopTenData topTenList;
private final int[] SLOTS = new int[] {4, 12, 14, 19, 20, 21, 22, 23, 24, 25}; private final int[] SLOTS = new int[] {4, 12, 14, 19, 20, 21, 22, 23, 24, 25};
private final boolean DEBUG = true; private final boolean DEBUG = true;
private BSBDatabase database; private BSBDatabase<TopTenData> handler;
private AbstractDatabaseHandler<TopTenData> handler;
@SuppressWarnings("unchecked")
public TopTen(Level addon) { public TopTen(Level addon) {
this.addon = addon; this.addon = addon;
// Set up database
database = BSBDatabase.getDatabase();
// Set up the database handler to store and retrieve the TopTenList class // Set up the database handler to store and retrieve the TopTenList class
// Note that these are saved in the BSkyBlock database // Note that these are saved in the BSkyBlock database
handler = (AbstractDatabaseHandler<TopTenData>) database.getHandler(TopTenData.class); handler = new BSBDatabase<>(addon, TopTenData.class);
loadTopTen(); loadTopTen();
} }
@ -79,24 +72,18 @@ public class TopTen implements Listener {
*/ */
public void create() { public void create() {
// Obtain all the levels for each known player // Obtain all the levels for each known player
AbstractDatabaseHandler<LevelsData> levelHandler = addon.getHandler(); BSBDatabase<LevelsData> levelHandler = addon.getHandler();
try { long index = 0;
long index = 0; for (LevelsData lv : levelHandler.loadObjects()) {
for (LevelsData lv : levelHandler.loadObjects()) { if (index++ % 1000 == 0) {
if (index++ % 1000 == 0) { addon.getLogger().info("Processed " + index + " players for top ten");
addon.getLogger().info("Processed " + index + " players for top ten"); }
} // Convert to UUID
// Convert to UUID UUID playerUUID = UUID.fromString(lv.getUniqueId());
UUID playerUUID = UUID.fromString(lv.getUniqueId()); // Check if the player is an owner or team leader
// Check if the player is an owner or team leader if (addon.getIslands().isOwner(playerUUID)) {
if (addon.getIslands().isOwner(playerUUID)) { topTenList.addLevel(playerUUID, lv.getLevel());
topTenList.addLevel(playerUUID, lv.getLevel());
}
} }
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
| SecurityException | ClassNotFoundException | IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
saveTopTen(); saveTopTen();
} }
@ -208,48 +195,12 @@ public class TopTen implements Listener {
* Loads the top ten from the database * Loads the top ten from the database
*/ */
public void loadTopTen() { public void loadTopTen() {
try { topTenList = handler.loadObject("topten");
topTenList = handler.loadObject("topten"); if (topTenList == null) {
if (topTenList == null) { topTenList = new TopTenData();
topTenList = new TopTenData();
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
| SecurityException | ClassNotFoundException | IntrospectionException e) {
e.printStackTrace();
} }
} }
/*
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled=true)
public void onInventoryClick(InventoryClickEvent event) {
Inventory inventory = event.getInventory(); // The inventory that was clicked in
if (inventory.getName() == null) {
return;
}
// The player that clicked the item
Player player = (Player) event.getWhoClicked();
if (!inventory.getTitle().equals("topten.guiTitle")) {
return;
}
event.setCancelled(true);
player.updateInventory();
if(event.getCurrentItem() != null && event.getCurrentItem().getType().equals(Material.SKULL_ITEM) && event.getCurrentItem().hasItemMeta()){
player.closeInventory();
// Fire click event
TopTenClick clickEvent = new TopTenClick(((SkullMeta)event.getCurrentItem().getItemMeta()).getOwningPlayer().getName());
addon.getServer().getPluginManager().callEvent(clickEvent);
return;
}
if (event.getSlotType().equals(SlotType.OUTSIDE)) {
player.closeInventory();
return;
}
if (event.getClick().equals(ClickType.SHIFT_RIGHT)) {
player.closeInventory();
return;
}
}
*/
/** /**
* Removes ownerUUID from the top ten list * Removes ownerUUID from the top ten list
* *
@ -265,13 +216,7 @@ public class TopTen implements Listener {
//plugin.getLogger().info("DEBUG: toptenlist = null!"); //plugin.getLogger().info("DEBUG: toptenlist = null!");
return; return;
} }
try { handler.saveObject(topTenList);
handler.saveObject(topTenList);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | SecurityException
| IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
} }