mirror of
https://github.com/songoda/FabledSkyBlock.git
synced 2024-09-27 14:13:00 +02:00
Upload progress (See description)
(This is an upload for myself so I can continue coding from different machines because I commute betwen home and university.) Contents: - Rewrite PlayerData. It is done but need to rewrite the usages of this class. - Rewrite Island class. This is still in progress. - First steps to add multiple database support Disclaimer: This upload contains syntax errors, you can't compile it, see the first lines why
This commit is contained in:
parent
cd57ce89e9
commit
f1cafbbb6d
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>com.songoda</groupId>
|
||||
<artifactId>skyblock</artifactId>
|
||||
<version>2.5.0</version>
|
||||
<version>3.0.0-Dev</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
|
@ -6,6 +6,10 @@ import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.compatibility.ServerProject;
|
||||
import com.songoda.core.compatibility.ServerVersion;
|
||||
import com.songoda.core.configuration.Config;
|
||||
import com.songoda.core.database.DataMigrationManager;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
import com.songoda.core.database.MySQLConnector;
|
||||
import com.songoda.core.database.SQLiteConnector;
|
||||
import com.songoda.core.gui.GuiManager;
|
||||
import com.songoda.core.hooks.HologramManager;
|
||||
import com.songoda.core.hooks.LogManager;
|
||||
@ -19,6 +23,15 @@ import com.songoda.skyblock.command.commands.SkyBlockCommand;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.confirmation.ConfirmationTask;
|
||||
import com.songoda.skyblock.cooldown.CooldownManager;
|
||||
import com.songoda.skyblock.database.DataManager;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.database.DatabaseType;
|
||||
import com.songoda.skyblock.database.sources.FlatFileDataProvider;
|
||||
import com.songoda.skyblock.database.sources.MariaDBDataProvider;
|
||||
import com.songoda.skyblock.database.sources.MongoDBDataProvider;
|
||||
import com.songoda.skyblock.database.sources.MySQLDataProvider;
|
||||
import com.songoda.skyblock.database.sources.PostgreSQLDataProvider;
|
||||
import com.songoda.skyblock.database.sources.SQLiteDataProvider;
|
||||
import com.songoda.skyblock.economy.EconomyManager;
|
||||
import com.songoda.skyblock.generator.GeneratorManager;
|
||||
import com.songoda.skyblock.invite.InviteManager;
|
||||
@ -123,6 +136,14 @@ public class SkyBlock extends SongodaPlugin {
|
||||
private FileConfiguration stackables;
|
||||
private FileConfiguration upgrades;
|
||||
|
||||
|
||||
private DataManager dataManager;
|
||||
private DatabaseConnector databaseConnector;
|
||||
private DataMigrationManager dataMigrationManager;
|
||||
|
||||
private DataProvider dataProvider;
|
||||
private DatabaseType databaseType;
|
||||
|
||||
@Override
|
||||
public void onPluginLoad() {
|
||||
INSTANCE = this;
|
||||
@ -165,6 +186,42 @@ public class SkyBlock extends SongodaPlugin {
|
||||
return;
|
||||
}
|
||||
|
||||
//Database stuff
|
||||
databaseType = DatabaseType.FLATFILE;
|
||||
switch (databaseType) {
|
||||
case MYSQL:
|
||||
this.databaseConnector = new MySQLConnector(this, "localhost", 3306, "songoda", "Admin", "pass", false, 10);
|
||||
dataProvider = new MySQLDataProvider(databaseConnector, this);
|
||||
break;
|
||||
case SQLITE:
|
||||
databaseConnector = new SQLiteConnector(this);
|
||||
dataProvider = new SQLiteDataProvider(databaseConnector, this);
|
||||
break;
|
||||
//TODO: Implement more database types
|
||||
case MARIADB:
|
||||
dataProvider = new MariaDBDataProvider();
|
||||
break;
|
||||
case MONGODB:
|
||||
dataProvider = new MongoDBDataProvider();
|
||||
break;
|
||||
case POSTGRESQL:
|
||||
dataProvider = new PostgreSQLDataProvider();
|
||||
break;
|
||||
default:
|
||||
dataProvider = new FlatFileDataProvider();
|
||||
break;
|
||||
}
|
||||
|
||||
dataProvider.init(this);
|
||||
dataManager = new DataManager(dataProvider, databaseType, this);
|
||||
|
||||
//TODO Run migrations for all database types
|
||||
//this.dataMigrationManager = new DataMigrationManager();
|
||||
//this.dataMigrationManager.runMigrations();
|
||||
|
||||
//Database stuff end
|
||||
|
||||
//Init stuff after database is ready to provide data
|
||||
permissionManager = new PermissionManager(this);
|
||||
localizationManager = new LocalizationManager();
|
||||
worldManager.loadWorlds();
|
||||
@ -185,6 +242,7 @@ public class SkyBlock extends SongodaPlugin {
|
||||
structureManager = new StructureManager(this);
|
||||
soundManager = new SoundManager(this);
|
||||
|
||||
|
||||
if (this.config.getBoolean("Island.Generator.Enable")) {
|
||||
generatorManager = new GeneratorManager(this);
|
||||
}
|
||||
@ -294,7 +352,7 @@ public class SkyBlock extends SongodaPlugin {
|
||||
if (this.banManager != null)
|
||||
this.banManager.onDisable();
|
||||
if (this.playerDataManager != null)
|
||||
this.playerDataManager.onDisable();
|
||||
this.playerDataManager.save();
|
||||
if (this.cooldownManager != null)
|
||||
this.cooldownManager.onDisable();
|
||||
if (this.hologramTask != null)
|
||||
@ -345,6 +403,10 @@ public class SkyBlock extends SongodaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getTable(String table) {
|
||||
return "fabledskyblock_"+table;
|
||||
}
|
||||
|
||||
public String formatText(String string) {
|
||||
return ChatColor.translateAlternateColorCodes('&', string);
|
||||
}
|
||||
@ -353,6 +415,18 @@ public class SkyBlock extends SongodaPlugin {
|
||||
return fileManager;
|
||||
}
|
||||
|
||||
public DatabaseConnector getDatabaseConnector() {
|
||||
return databaseConnector;
|
||||
}
|
||||
|
||||
public DataManager getDataManager() {
|
||||
return dataManager;
|
||||
}
|
||||
|
||||
public DatabaseType getdatabaseType() {
|
||||
return databaseType;
|
||||
}
|
||||
|
||||
public WorldManager getWorldManager() {
|
||||
return worldManager;
|
||||
}
|
||||
|
@ -23,11 +23,8 @@ import java.util.UUID;
|
||||
public class Island {
|
||||
|
||||
private com.songoda.skyblock.island.Island handle;
|
||||
private OfflinePlayer player;
|
||||
|
||||
public Island(com.songoda.skyblock.island.Island handle, OfflinePlayer player) {
|
||||
public Island(com.songoda.skyblock.island.Island handle) {
|
||||
this.handle = handle;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -465,7 +462,7 @@ public class Island {
|
||||
*/
|
||||
public void load() {
|
||||
if (this.handle == null) {
|
||||
SkyBlockAPI.getImplementation().getIslandManager().loadIsland(player);
|
||||
SkyBlockAPI.getImplementation().getIslandManager().loadIsland();
|
||||
this.handle = SkyBlockAPI.getImplementation().getIslandManager().getIsland(player);
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ public class CreateCommand extends SubCommand {
|
||||
PlayerDataManager playerDataManager = plugin.getPlayerDataManager();
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
playerDataManager.getPlayerData(player).setViewer(null);
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ public class GeneratorCommand extends SubCommand {
|
||||
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Generator.Disabled.Message"));
|
||||
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
|
||||
} else {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
playerDataManager.getPlayerData(player).setViewer(null);
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ public class UpgradeCommand extends SubCommand {
|
||||
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Upgrade.Disabled.Message"));
|
||||
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
|
||||
} else {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
playerDataManager.getPlayerData(player)
|
||||
.setViewer(new Upgrade.Viewer(Upgrade.Viewer.Type.Upgrades, null));
|
||||
Upgrade.getInstance().open(player);
|
||||
|
@ -22,8 +22,6 @@ import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@ -91,7 +89,8 @@ public class AcceptCommand extends SubCommand {
|
||||
|
||||
playerData.setPlaytime(0);
|
||||
playerData.setOwner(invite.getOwnerUUID());
|
||||
playerData.setMemberSince(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
|
||||
playerData.setMemberSince(System.currentTimeMillis());
|
||||
//playerData.setMemberSince(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
|
||||
playerData.save();
|
||||
|
||||
island.setRole(IslandRole.Member, player.getUniqueId());
|
||||
@ -127,7 +126,7 @@ public class AcceptCommand extends SubCommand {
|
||||
|
||||
for (Player loopPlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (!loopPlayer.getUniqueId().equals(player.getUniqueId())) {
|
||||
if (playerDataManager.hasPlayerData(loopPlayer)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(loopPlayer)) {
|
||||
playerData = playerDataManager.getPlayerData(loopPlayer);
|
||||
|
||||
if (playerData.getOwner() != null
|
||||
|
@ -63,7 +63,7 @@ public class ChatCommand extends SubCommand {
|
||||
soundManager.playSound(player, CompatibleSound.BLOCK_NOTE_BLOCK_PLING.getSound(), 1.0F, 1.0F);
|
||||
}
|
||||
} else {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
if (playerData.getOwner() != null) {
|
||||
island = plugin.getIslandManager().getIsland(player);
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public class ConfirmCommand extends SubCommand {
|
||||
ScoreboardManager scoreboardManager = plugin.getScoreboardManager();
|
||||
Economy economy = plugin.getEconomyManager().getEconomy();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
Config config = fileManager.getConfig(new File(plugin.getDataFolder(), "language.yml"));
|
||||
|
@ -27,7 +27,7 @@ public class InformationCommand extends SubCommand {
|
||||
IslandManager islandManager = plugin.getIslandManager();
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Config config = plugin.getFileManager().getConfig(new File(plugin.getDataFolder(), "language.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
|
@ -152,7 +152,8 @@ public class KickCommand extends SubCommand {
|
||||
|
||||
playerData = playerDataManager.getPlayerData(targetPlayer);
|
||||
playerData.setPlaytime(0);
|
||||
playerData.setMemberSince(null);
|
||||
//playerData.setMemberSince(null);
|
||||
playerData.clearMemberSince();
|
||||
playerData.setOwner(null);
|
||||
playerData.setChat(false);
|
||||
playerData.save();
|
||||
|
@ -26,7 +26,7 @@ public class LeaderboardCommand extends SubCommand {
|
||||
Config config = fileManager.getConfig(new File(plugin.getDataFolder(), "language.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
if (args.length == 0) {
|
||||
if (this.plugin.getConfiguration()
|
||||
.getBoolean("Island.Visitor.Vote")) {
|
||||
|
@ -67,7 +67,8 @@ public class LeaveCommand extends SubCommand {
|
||||
|
||||
playerData.setPlaytime(0);
|
||||
playerData.setOwner(null);
|
||||
playerData.setMemberSince(null);
|
||||
//playerData.setMemberSince(null);
|
||||
playerData.clearMemberSince();
|
||||
playerData.setChat(false);
|
||||
playerData.save();
|
||||
|
||||
|
@ -20,7 +20,7 @@ public class VisitCommand extends SubCommand {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
|
||||
if (args.length == 0) {
|
||||
if (!plugin.getPlayerDataManager().hasPlayerData(player))
|
||||
if (!plugin.getPlayerDataManager().isPlayerDataLoaded(player))
|
||||
plugin.getPlayerDataManager().createPlayerData(player);
|
||||
|
||||
PlayerData playerData = plugin.getPlayerDataManager().getPlayerData(player);
|
||||
|
@ -83,7 +83,7 @@ public class VoteCommand extends SubCommand {
|
||||
messageManager.sendMessage(player,
|
||||
configLoad.getString("Command.Island.Vote.Island.Member.Message"));
|
||||
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
|
||||
} else if (playerDataManager.hasPlayerData(player)) {
|
||||
} else if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getIsland() != null && playerData.getIsland().equals(island.getOwnerUUID())) {
|
||||
|
@ -0,0 +1,71 @@
|
||||
package com.songoda.skyblock.database;
|
||||
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class DataConverter {
|
||||
|
||||
/**
|
||||
* Convert the old flatfile data to the new database system
|
||||
* Replace ownerUUID with islandUUID. New system uses islandUUID instead of ownerUUID
|
||||
*/
|
||||
public static void updateData() {
|
||||
//Load all player data
|
||||
File islandsDirectory = new File(SkyBlock.getInstance().getDataFolder(), "player-data");
|
||||
if (islandsDirectory.exists() && islandsDirectory.isDirectory()) {
|
||||
List<String> players = new ArrayList<>();
|
||||
for (File file : Objects.requireNonNull(islandsDirectory.listFiles())) {
|
||||
if (file.getName().endsWith(".yml")) {
|
||||
players.add(file.getName().split("\\.")[0]);
|
||||
}
|
||||
}
|
||||
|
||||
for (String player : players) {
|
||||
File file = new File(islandsDirectory, player + ".yml");
|
||||
if (file.exists()) {
|
||||
FileConfiguration playerData = YamlConfiguration.loadConfiguration(file);
|
||||
String island = playerData.getString("Island.Owner");
|
||||
if (island != null) {
|
||||
File islandFile = new File(SkyBlock.getInstance().getDataFolder(), "islands/" + island + ".yml");
|
||||
FileConfiguration islandData = YamlConfiguration.loadConfiguration(islandFile);
|
||||
islandData.set("Owner", player);
|
||||
String islandUUID = islandData.getString("UUID");
|
||||
//Delete UUID, File name will be the UUID
|
||||
islandData.set("UUID", null);
|
||||
//Save changes
|
||||
try {
|
||||
islandData.save(new File(SkyBlock.getInstance().getDataFolder(), "island-data/" + islandUUID + ".yml"));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//Rename file
|
||||
file.renameTo(new File(islandsDirectory, islandUUID + ".yml"));
|
||||
|
||||
playerData.set("Island.UUID", islandUUID);
|
||||
playerData.set("Island.Owner", null);
|
||||
playerData.set("Island.Biome", null);
|
||||
//Moved to island data
|
||||
playerData.set("Bank", null);
|
||||
try {
|
||||
playerData.save(file);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Make it async, kick all players and prevent joining until it's done
|
||||
public static void convertTadabase(DatabaseType current, DatabaseType target) {
|
||||
//TODO
|
||||
}
|
||||
|
||||
}
|
56
src/main/java/com/songoda/skyblock/database/DataManager.java
Normal file
56
src/main/java/com/songoda/skyblock/database/DataManager.java
Normal file
@ -0,0 +1,56 @@
|
||||
package com.songoda.skyblock.database;
|
||||
|
||||
import com.eatthepath.uuid.FastUUID;
|
||||
import com.songoda.core.database.DataManagerAbstract;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.island.IslandManager;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import com.songoda.skyblock.playerdata.PlayerDataManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class DataManager {
|
||||
|
||||
private final PlayerDataManager playerDataManager;
|
||||
private final IslandManager islandManager;
|
||||
private final DataProvider dataProvider;
|
||||
|
||||
private final DatabaseType databaseType;
|
||||
|
||||
public DataManager(DataProvider provider, DatabaseType type, Plugin plugin) {
|
||||
this.dataProvider = provider;
|
||||
this.islandManager = new IslandManager((SkyBlock) plugin);
|
||||
this.playerDataManager = new PlayerDataManager((SkyBlock) plugin);
|
||||
this.databaseType = type;
|
||||
}
|
||||
|
||||
public void loadOnline() {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
dataProvider.loadPlayerData(player);
|
||||
dataProvider.loadIsland(playerDataManager.getPlayerData(player).getIsland());
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
islandManager.onDisable();
|
||||
playerDataManager.save();
|
||||
}
|
||||
|
||||
public DataProvider getDataProvider() {
|
||||
return dataProvider;
|
||||
}
|
||||
|
||||
public DatabaseType getDatabaseType() {
|
||||
return databaseType;
|
||||
}
|
||||
}
|
262
src/main/java/com/songoda/skyblock/database/DataProvider.java
Normal file
262
src/main/java/com/songoda/skyblock/database/DataProvider.java
Normal file
@ -0,0 +1,262 @@
|
||||
package com.songoda.skyblock.database;
|
||||
|
||||
import com.bekvon.bukkit.residence.commands.check;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.database.exceptions.NoIslandDataException;
|
||||
import com.songoda.skyblock.database.exceptions.NoPlayerDataException;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface DataProvider {
|
||||
|
||||
void init(SkyBlock plugin);
|
||||
|
||||
/**
|
||||
* Check if a player has data in the database
|
||||
* @param player The player to check
|
||||
*/
|
||||
default boolean hasPlayerData(Player player) {
|
||||
return hasPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a player has data in the database
|
||||
* @param player The player to check
|
||||
*/
|
||||
default boolean hasPlayerData(OfflinePlayer player) {
|
||||
return hasPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a player has data in the database
|
||||
* @param playerUUID The player's UUID to check
|
||||
*/
|
||||
boolean hasPlayerData(UUID playerUUID);
|
||||
|
||||
/**
|
||||
* Load a player's data from the database into memory
|
||||
* @param player The player to load
|
||||
* @throws NoPlayerDataException when the player has no data in the database
|
||||
*/
|
||||
default PlayerData loadPlayerData(Player player) {
|
||||
return loadPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a player's data from the database into memory
|
||||
* @param offlinePlayer The player to load
|
||||
* @throws NoPlayerDataException when the player has no data in the database
|
||||
*/
|
||||
default PlayerData loadPlayerData(OfflinePlayer offlinePlayer) {
|
||||
return loadPlayerData(offlinePlayer.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a player's data from the database into memory
|
||||
* @param playerUUID The player's UUID
|
||||
* @throws NoPlayerDataException when the player has no data in the database
|
||||
*/
|
||||
PlayerData loadPlayerData(UUID playerUUID);
|
||||
|
||||
/**
|
||||
* Check if a player's data is loaded in memory
|
||||
* @param player Player to check
|
||||
* @return true if loaded false otherwise
|
||||
*/
|
||||
default boolean isPlayerDataLoaded(Player player) {
|
||||
return isPlayerDataLoaded(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a player's data is loaded in memory
|
||||
* @param player Player to check
|
||||
* @return true if loaded false otherwise
|
||||
*/
|
||||
default boolean isPlayerDataLoaded(OfflinePlayer player) {
|
||||
return isPlayerDataLoaded(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a player's data is loaded in memory
|
||||
* @param playerUUID Player's UUID to check
|
||||
* @return true if loaded false otherwise
|
||||
*/
|
||||
boolean isPlayerDataLoaded(UUID playerUUID);
|
||||
|
||||
/**
|
||||
* Get a player's data from memory
|
||||
* @param player Player to get its data
|
||||
*/
|
||||
default PlayerData getPlayerData(Player player) {
|
||||
return getPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a player's data from memory
|
||||
* @param player Player to get its data
|
||||
*/
|
||||
default PlayerData getPlayerData(OfflinePlayer player) {
|
||||
return getPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a player's data from memory
|
||||
* @param playerUUID Player's UUID to get its data
|
||||
*/
|
||||
PlayerData getPlayerData(UUID playerUUID);
|
||||
|
||||
/**
|
||||
* unload a player's data from memory without saving
|
||||
* @param player The player to unload its data from memory
|
||||
*/
|
||||
default void unloadPlayerData(Player player) {
|
||||
unloadPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* unload a player's data from memory without saving
|
||||
* @param player The player to unload its data from memory
|
||||
*/
|
||||
default void unloadPlayerData(OfflinePlayer player) {
|
||||
unloadPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* unload a player's data from memory without saving
|
||||
* @param playerUUID The player's UUID to unload its data from memory
|
||||
*/
|
||||
void unloadPlayerData(UUID playerUUID);
|
||||
|
||||
/**
|
||||
* Creates the player's data in the database
|
||||
* @param player The player to create its data
|
||||
*/
|
||||
default void createPlayerData(Player player) {
|
||||
createPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the player's data in the database
|
||||
* @param player The player to create its data
|
||||
*/
|
||||
default void createPlayerData(OfflinePlayer player) {
|
||||
createPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the player's data in the database
|
||||
* @param playerUUID The player to create its data
|
||||
*/
|
||||
void createPlayerData(UUID playerUUID);
|
||||
|
||||
/**
|
||||
* Save a player's data to the database from memory
|
||||
* @param playerData The player's data to save
|
||||
*/
|
||||
void savePlayerData(PlayerData playerData);
|
||||
|
||||
/**
|
||||
* Save a player's data to the database from memory
|
||||
* If the player's data is not cached in memory, it won't save anything
|
||||
* @param player The player to save its data to the database
|
||||
*/
|
||||
default void savePlayerData(Player player) {
|
||||
savePlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a player's data to the database from memory
|
||||
* If the player's data is not cached in memory, it won't save anything
|
||||
* @param offlinePlayer The player to save its data to the database
|
||||
*/
|
||||
default void savePlayerData(OfflinePlayer offlinePlayer) {
|
||||
savePlayerData(offlinePlayer.getUniqueId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a player's data to the database from memory
|
||||
* If the player's data is not cached in memory, it won't save anything
|
||||
* @param playerUUID The player's UUID to save its data to the database
|
||||
*/
|
||||
default void savePlayerData(UUID playerUUID) {
|
||||
if (isPlayerDataLoaded(playerUUID)) {
|
||||
savePlayerData(loadPlayerData(playerUUID));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return all loaded player data
|
||||
*/
|
||||
Set<PlayerData> getLoadedPlayers();
|
||||
|
||||
/**
|
||||
* Check if an island has data in the database
|
||||
* @param islandUUID The island's UUID to check
|
||||
*/
|
||||
boolean hasIslandData(UUID islandUUID);
|
||||
|
||||
/**
|
||||
* Load an island from the database
|
||||
* @param islandUUID The island to load by UUID
|
||||
* @throws NoIslandDataException if the island does not exist in the database
|
||||
*/
|
||||
Island loadIsland(UUID islandUUID);
|
||||
|
||||
/**
|
||||
* Checks if the island is cached in memory
|
||||
* @param islandUUID The island's UUID to check
|
||||
*/
|
||||
boolean isIslandDataLoaded(UUID islandUUID);
|
||||
|
||||
/**
|
||||
* Get an island from memory
|
||||
* @param islandUUID The island's UUID to get
|
||||
* @return The island if it is loaded in memory, null otherwise
|
||||
*/
|
||||
Island getIsland(UUID islandUUID);
|
||||
|
||||
/**
|
||||
* Unload an island from memory without saving
|
||||
* @param island The island to unload
|
||||
*/
|
||||
default void unloadIslandData(Island island) {
|
||||
unloadIslandData(island.getIslandUUID());
|
||||
}
|
||||
|
||||
/**
|
||||
* Unload an island from memory without saving
|
||||
* @param islandUUID The island's UUID to unload
|
||||
*/
|
||||
void unloadIslandData(UUID islandUUID);
|
||||
|
||||
/**
|
||||
* Creates the island's data in the database if it does not exist
|
||||
* @param islandUUID The island's UUID to create
|
||||
*/
|
||||
void createIslandData(UUID islandUUID);
|
||||
|
||||
/**
|
||||
* Save an island to the database from memory
|
||||
* @param island The island to save
|
||||
*/
|
||||
default void saveIsland(Island island) {
|
||||
saveIsland(island.getIslandUUID());
|
||||
}
|
||||
|
||||
/**
|
||||
* Save an island to the database from memory
|
||||
* @param islandUUID The island to save by UUID
|
||||
*/
|
||||
void saveIsland(UUID islandUUID);
|
||||
|
||||
/**
|
||||
* @return all loaded island data
|
||||
*/
|
||||
Set<Island> getLoadedIslands();
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.songoda.skyblock.database;
|
||||
|
||||
public enum DatabaseType {
|
||||
|
||||
POSTGRESQL,
|
||||
MARIADB,
|
||||
MONGODB,
|
||||
MYSQL,
|
||||
SQLITE,
|
||||
FLATFILE
|
||||
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.songoda.skyblock.database.exceptions;
|
||||
|
||||
public class NoIslandDataException extends Exception {
|
||||
|
||||
public NoIslandDataException() {
|
||||
super("Island data does not exist in the database");
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.songoda.skyblock.database.exceptions;
|
||||
|
||||
public class NoPlayerDataException extends Exception {
|
||||
|
||||
public NoPlayerDataException() {
|
||||
super("Player data does not exist in the database");
|
||||
}
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
package com.songoda.skyblock.database.migration;
|
||||
|
||||
import com.songoda.core.database.DataMigration;
|
||||
import com.songoda.core.database.MySQLConnector;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
public class _1_InitialMigration extends DataMigration {
|
||||
|
||||
public _1_InitialMigration() {
|
||||
super(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void migrate(Connection connection, String tablePrefix) throws SQLException {
|
||||
|
||||
// Create islands table
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS " + tablePrefix + " `islands` (" +
|
||||
"`uuid` INT(11) NOT NULL," +
|
||||
"`owner` VARCHAR(36) NOT NULL COLLATE 'utf8mb4_general_ci'," +
|
||||
"`originalOwner` VARCHAR(36) NOT NULL COLLATE 'utf8mb4_general_ci'," +
|
||||
"`structure` VARCHAR(100) NOT NULL DEFAULT 'Default' COLLATE 'utf8mb4_general_ci'," +
|
||||
"`size` INT(11) NOT NULL DEFAULT '51'," +
|
||||
"`biome` VARCHAR(50) NOT NULL DEFAULT 'PLAINS' COLLATE 'utf8mb4_general_ci'," +
|
||||
"`status` VARCHAR(11) NOT NULL DEFAULT 'WHITELISTED' COLLATE 'utf8mb4_general_ci'," +
|
||||
"`border` BIT(1) NOT NULL DEFAULT b'1'," +
|
||||
"`borderColor` VARCHAR(15) NOT NULL DEFAULT 'Blue' COLLATE 'utf8mb4_general_ci'," +
|
||||
"`weatherSync` BIT(1) NOT NULL DEFAULT b'1'," +
|
||||
"`weatherTime` INT(11) NOT NULL DEFAULT '6000'," +
|
||||
"`weatherType` VARCHAR(15) NOT NULL DEFAULT 'CLEAR' COLLATE 'utf8mb4_general_ci'," +
|
||||
"`maxMembers` INT(11) NOT NULL DEFAULT '3'," +
|
||||
"`transactionHistory` BLOB NULL DEFAULT NULL," +
|
||||
"PRIMARY KEY (`uuid`) USING BTREE" +
|
||||
")" +
|
||||
"COLLATE='utf8mb4_general_ci'" +
|
||||
"ENGINE=InnoDB" +
|
||||
";");
|
||||
|
||||
//players table
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS " + tablePrefix + " `players` (" +
|
||||
"`uuid` VARCHAR(36) NOT NULL COLLATE 'utf8mb4_general_ci'," +
|
||||
"`island` VARCHAR(36) NOT NULL COLLATE 'utf8mb4_general_ci'," +
|
||||
"`textureSignature` MEDIUMTEXT NOT NULL DEFAULT 'K9P4tCIENYbNpDuEuuY0shs1x7iIvwXi4jUUVsATJfwsAIZGS+9OZ5T2HB0tWBoxRvZNi73Vr+syRdvTLUWPusVXIg+2fhXmQoaNEtnQvQVGQpjdQP0TkZtYG8PbvRxE6Z75ddq+DVx/65OSNHLWIB/D+Rg4vINh4ukXNYttn9QvauDHh1aW7/IkIb1Bc0tLcQyqxZQ3mdglxJfgIerqnlA++Lt7TxaLdag4y1NhdZyd3OhklF5B0+B9zw/qP8QCzsZU7VzJIcds1+wDWKiMUO7+60OSrIwgE9FPamxOQDFoDvz5BOULQEeNx7iFMB+eBYsapCXpZx0zf1bduppBUbbVC9wVhto/J4tc0iNyUq06/esHUUB5MHzdJ0Y6IZJAD/xIw15OLCUH2ntvs8V9/cy5/n8u3JqPUM2zhUGeQ2p9FubUGk4Q928L56l3omRpKV+5QYTrvF+AxFkuj2hcfGQG3VE2iYZO6omXe7nRPpbJlHkMKhE8Xvd1HP4PKpgivSkHBoZ92QEUAmRzZydJkp8CNomQrZJf+MtPiNsl/Q5RQM+8CQThg3+4uWptUfP5dDFWOgTnMdA0nIODyrjpp+bvIJnsohraIKJ7ZDnj4tIp4ObTNKDFC/8j8JHz4VCrtr45mbnzvB2DcK8EIB3JYT7ElJTHnc5BKMyLy5SKzuw=' COLLATE 'utf8mb4_general_ci'," +
|
||||
"`textureValue` MEDIUMTEXT NOT NULL DEFAULT 'eyJ0aW1lc3RhbXAiOjE1MjkyNTg0MTE4NDksInByb2ZpbGVJZCI6Ijg2NjdiYTcxYjg1YTQwMDRhZjU0NDU3YTk3MzRlZWQ3IiwicHJvZmlsZU5hbWUiOiJTdGV2ZSIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGMxYzc3Y2U4ZTU0OTI1YWI1ODEyNTQ0NmVjNTNiMGNkZDNkMGNhM2RiMjczZWI5MDhkNTQ4Mjc4N2VmNDAxNiJ9LCJDQVBFIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjc2N2Q0ODMyNWVhNTMyNDU2MTQwNmI4YzgyYWJiZDRlMjc1NWYxMTE1M2NkODVhYjA1NDVjYzIifX19' COLLATE 'utf8mb4_general_ci'," +
|
||||
"`playTime` INT(10) UNSIGNED NOT NULL DEFAULT '0'," +
|
||||
"`joinTime` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()," +
|
||||
"`chatSpy` BIT(1) NOT NULL DEFAULT b'0'," +
|
||||
"`spiedIslands` BLOB NULL DEFAULT NULL," +
|
||||
"PRIMARY KEY (`uuid`) USING BTREE" +
|
||||
")" +
|
||||
"COLLATE='utf8mb4_general_ci'" +
|
||||
"ENGINE=InnoDB" +
|
||||
";");
|
||||
|
||||
//Player cache table
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS " + tablePrefix + " `players_cache` (" +
|
||||
"`uuid` VARCHAR(36) NOT NULL COLLATE 'utf8mb4_general_ci'," +
|
||||
"`name` VARCHAR(16) NOT NULL COLLATE 'utf8mb4_general_ci'," +
|
||||
"PRIMARY KEY (`uuid`) USING BTREE" +
|
||||
")" +
|
||||
"COLLATE='utf8mb4_general_ci'" +
|
||||
"ENGINE=InnoDB" +
|
||||
";");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
package com.songoda.skyblock.database.sources;
|
||||
|
||||
import com.eatthepath.uuid.FastUUID;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.database.exceptions.NoPlayerDataException;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class FlatFileDataProvider implements DataProvider {
|
||||
|
||||
private SkyBlock plugin;
|
||||
private Map<UUID, PlayerData> playerDataStorage;
|
||||
private Map<UUID, Island> islandStorage;
|
||||
|
||||
@Override
|
||||
public void init(SkyBlock plugin) {
|
||||
this.plugin = plugin;
|
||||
this.playerDataStorage = new HashMap<>();
|
||||
this.islandStorage = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlayerData(UUID player) {
|
||||
File file = new File(new File(plugin.getDataFolder().toString() + "/player-data"), FastUUID.toString(player) + ".yml");
|
||||
return file.exists();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData loadPlayerData(UUID playerUUID) {
|
||||
File data = new File(new File(plugin.getDataFolder().toString() + "/player-data"), FastUUID.toString(playerUUID) + ".yml");
|
||||
if (data.exists()) {
|
||||
PlayerData playerData = new PlayerData(playerUUID);
|
||||
playerDataStorage.put(playerUUID, playerData);
|
||||
return playerData;
|
||||
}
|
||||
try {
|
||||
throw new NoPlayerDataException();
|
||||
} catch (NoPlayerDataException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerDataLoaded(UUID playerUUID) {
|
||||
return playerDataStorage.containsKey(playerUUID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadPlayerData(UUID playerUUID) {
|
||||
playerDataStorage.remove(playerUUID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void savePlayerData(PlayerData playerData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void savePlayerData(UUID playerUUID) {
|
||||
savePlayerData(playerDataStorage.get(playerUUID));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasIslandData(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<PlayerData> getLoadedPlayers() {
|
||||
return new HashSet<>(playerDataStorage.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island loadIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIslandDataLoaded(UUID islandUUID) {
|
||||
return islandStorage.containsKey(islandUUID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadIslandData(UUID islandUUID) {
|
||||
islandStorage.remove(islandUUID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveIsland(Island island) {
|
||||
saveIsland(island.getIslandUUID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveIsland(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Island> getLoadedIslands() {
|
||||
return new HashSet<>(islandStorage.values());
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
package com.songoda.skyblock.database.sources;
|
||||
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class MariaDBDataProvider implements DataProvider {
|
||||
|
||||
@Override
|
||||
public void init(SkyBlock plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlayerData(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData loadPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerDataLoaded(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData getPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void savePlayerData(PlayerData playerData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<PlayerData> getLoadedPlayers() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasIslandData(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island loadIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIslandDataLoaded(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island getIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveIsland(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Island> getLoadedIslands() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
package com.songoda.skyblock.database.sources;
|
||||
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class MongoDBDataProvider implements DataProvider {
|
||||
|
||||
|
||||
@Override
|
||||
public void init(SkyBlock plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlayerData(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData loadPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerDataLoaded(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData getPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void savePlayerData(PlayerData playerData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<PlayerData> getLoadedPlayers() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasIslandData(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island loadIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIslandDataLoaded(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island getIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveIsland(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Island> getLoadedIslands() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,109 @@
|
||||
package com.songoda.skyblock.database.sources;
|
||||
|
||||
import com.songoda.core.database.DataManagerAbstract;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
import com.songoda.core.database.MySQLConnector;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class MySQLDataProvider extends DataManagerAbstract implements DataProvider {
|
||||
|
||||
|
||||
public MySQLDataProvider(DatabaseConnector databaseConnector, Plugin plugin) {
|
||||
super(databaseConnector, plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(SkyBlock plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlayerData(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData loadPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerDataLoaded(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData getPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void savePlayerData(PlayerData playerData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<PlayerData> getLoadedPlayers() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasIslandData(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island loadIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIslandDataLoaded(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island getIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveIsland(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Island> getLoadedIslands() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
package com.songoda.skyblock.database.sources;
|
||||
|
||||
import com.songoda.core.database.DataManagerAbstract;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PostgreSQLDataProvider implements DataProvider {
|
||||
|
||||
|
||||
@Override
|
||||
public void init(SkyBlock plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlayerData(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData loadPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerDataLoaded(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData getPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void savePlayerData(PlayerData playerData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<PlayerData> getLoadedPlayers() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasIslandData(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island loadIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIslandDataLoaded(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island getIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveIsland(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Island> getLoadedIslands() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,107 @@
|
||||
package com.songoda.skyblock.database.sources;
|
||||
|
||||
import com.songoda.core.database.DataManagerAbstract;
|
||||
import com.songoda.core.database.DatabaseConnector;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class SQLiteDataProvider extends DataManagerAbstract implements DataProvider {
|
||||
|
||||
public SQLiteDataProvider(DatabaseConnector databaseConnector, Plugin plugin) {
|
||||
super(databaseConnector, plugin);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void init(SkyBlock plugin) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlayerData(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData loadPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerDataLoaded(UUID playerUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerData getPlayerData(UUID playerUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createPlayerData(UUID playerUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void savePlayerData(PlayerData playerData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<PlayerData> getLoadedPlayers() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasIslandData(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island loadIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIslandDataLoaded(UUID islandUUID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Island getIsland(UUID islandUUID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unloadIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createIslandData(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveIsland(UUID islandUUID) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Island> getLoadedIslands() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -148,7 +148,7 @@ public class GuiCoop extends Gui {
|
||||
} else {
|
||||
targetPlayerName = targetPlayer.getName();
|
||||
|
||||
if (playerDataManager.hasPlayerData(targetPlayer)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(targetPlayer)) {
|
||||
targetPlayerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
|
||||
} else {
|
||||
targetPlayerTexture = new String[]{null, null};
|
||||
|
@ -106,7 +106,7 @@ public class GuiBans extends Gui {
|
||||
} else {
|
||||
targetPlayerName = targetPlayer.getName();
|
||||
|
||||
if (playerDataManager.hasPlayerData(targetPlayer)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(targetPlayer)) {
|
||||
targetPlayerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
|
||||
} else {
|
||||
targetPlayerTexture = new String[]{null, null};
|
||||
|
@ -11,6 +11,7 @@ import com.songoda.skyblock.api.utils.APIUtil;
|
||||
import com.songoda.skyblock.ban.Ban;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.config.FileManager.Config;
|
||||
import com.songoda.skyblock.database.exceptions.NoIslandDataException;
|
||||
import com.songoda.skyblock.message.MessageManager;
|
||||
import com.songoda.skyblock.permission.BasicPermission;
|
||||
import com.songoda.skyblock.playerdata.PlayerData;
|
||||
@ -26,12 +27,15 @@ import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.WeatherType;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
@ -47,11 +51,65 @@ public class Island {
|
||||
|
||||
private UUID islandUUID;
|
||||
private UUID ownerUUID;
|
||||
//TODO change owner to island UUID
|
||||
private final IslandLevel level;
|
||||
private IslandStatus status;
|
||||
private int size;
|
||||
private int maxMembers;
|
||||
private boolean deleted = false;
|
||||
private Biome biome;
|
||||
|
||||
private boolean isWeatherSynced;
|
||||
private int islandTime;
|
||||
private FileConfiguration islandData;
|
||||
|
||||
public Island(UUID islandUUID) {
|
||||
this.plugin = SkyBlock.getInstance();
|
||||
this.islandUUID = islandUUID;
|
||||
|
||||
switch (plugin.getDataManager().getDatabaseType()) {
|
||||
case POSTGRESQL:
|
||||
case MARIADB:
|
||||
case MYSQL:
|
||||
case SQLITE:
|
||||
|
||||
try (Connection connection = plugin.getDatabaseConnector().getConnection()) {
|
||||
PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + SkyBlock.getTable("islands")+ " WHERE uuid = ?");
|
||||
statement.setString(1, FastUUID.toString(islandUUID));
|
||||
ResultSet data = statement.executeQuery();
|
||||
if (data.next()) {
|
||||
this.ownerUUID = FastUUID.parseUUID(data.getString("owner"));
|
||||
this.status = IslandStatus.valueOf(data.getString("status"));
|
||||
this.size = data.getInt("size");
|
||||
this.maxMembers = data.getInt("maxMembers");
|
||||
this.biome = CompatibleBiome.getBiome(data.getString("biome")).getBiome();
|
||||
} else {
|
||||
throw new NoIslandDataException();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case MONGODB:
|
||||
throw new RuntimeException("MongoDB is not supported yet");
|
||||
//Flatfile
|
||||
default:
|
||||
File dataFile = new File(new File(plugin.getDataFolder().toString() + "/island-data"), FastUUID.toString(islandUUID) + ".yml");
|
||||
this.islandData = YamlConfiguration.loadConfiguration(dataFile);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
this.ownerUUID = FastUUID.parseUUID(data.getString("owner"));
|
||||
this.size = data.getInt("size");
|
||||
if (size > 1000 || size < 0) {
|
||||
size = 51;
|
||||
}
|
||||
this.level = new IslandLevel(ownerUUID, plugin);
|
||||
this.apiWrapper = new com.songoda.skyblock.api.island.Island(this);
|
||||
}
|
||||
|
||||
public Island(@Nonnull OfflinePlayer player) {
|
||||
this.plugin = SkyBlock.getInstance();
|
||||
@ -64,7 +122,7 @@ public class Island {
|
||||
this.maxMembers = this.plugin.getConfiguration().getInt("Island.Member.Capacity", 3);
|
||||
|
||||
if (this.size > 1000) {
|
||||
this.size = 50;
|
||||
this.size = 51;
|
||||
}
|
||||
|
||||
if (player.isOnline()) {
|
||||
@ -254,14 +312,15 @@ public class Island {
|
||||
|
||||
Player onlinePlayer = Bukkit.getServer().getPlayer(ownerUUID);
|
||||
|
||||
if (!plugin.getPlayerDataManager().hasPlayerData(onlinePlayer)) {
|
||||
if (!plugin.getPlayerDataManager().isPlayerDataLoaded(onlinePlayer)) {
|
||||
plugin.getPlayerDataManager().createPlayerData(onlinePlayer);
|
||||
}
|
||||
|
||||
PlayerData playerData = plugin.getPlayerDataManager().getPlayerData(onlinePlayer);
|
||||
playerData.setPlaytime(0);
|
||||
playerData.setOwner(ownerUUID);
|
||||
playerData.setMemberSince(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
|
||||
//playerData.setMemberSince(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
|
||||
playerData.setMemberSince(System.currentTimeMillis());
|
||||
playerData.save();
|
||||
}
|
||||
|
||||
@ -283,7 +342,7 @@ public class Island {
|
||||
|
||||
save();
|
||||
|
||||
this.apiWrapper = new com.songoda.skyblock.api.island.Island(this, player);
|
||||
this.apiWrapper = new com.songoda.skyblock.api.island.Island(this);
|
||||
}
|
||||
|
||||
public UUID getIslandUUID() {
|
||||
|
@ -100,6 +100,14 @@ public class IslandManager {
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void addIsland(Island island) {
|
||||
islandStorage.put(island.getOwnerUUID(), island);
|
||||
}
|
||||
|
||||
public synchronized void removeIsland(Island island) {
|
||||
islandStorage.remove(island.getOwnerUUID());
|
||||
}
|
||||
|
||||
public synchronized void saveNextAvailableLocation(IslandWorld world) {
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
Config config = fileManager.getConfig(new File(plugin.getDataFolder(), "worlds.yml"));
|
||||
@ -201,7 +209,7 @@ public class IslandManager {
|
||||
|
||||
PlayerData data = plugin.getPlayerDataManager().getPlayerData(player);
|
||||
|
||||
long amt = 0;
|
||||
int amt = 0;
|
||||
|
||||
if (data != null) {
|
||||
final int highest = PlayerUtil.getNumberFromPermission(player, "fabledskyblock.limit.create", true, 2);
|
||||
@ -541,13 +549,13 @@ public class IslandManager {
|
||||
|
||||
if (player != null) {
|
||||
|
||||
long amt = 0;
|
||||
int amt = 0;
|
||||
final int highest = PlayerUtil.getNumberFromPermission(player, "fabledskyblock.limit.delete", true, 1);
|
||||
|
||||
if ((amt = data.getIslandDeletionCount()) >= highest) return false;
|
||||
|
||||
data.setIslandDeletionCount(amt + 1);
|
||||
data.deleteTransactions();
|
||||
//data.deleteTransactions();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -574,10 +582,11 @@ public class IslandManager {
|
||||
if ((island.hasRole(IslandRole.Member, player.getUniqueId()) ||
|
||||
island.hasRole(IslandRole.Operator, player.getUniqueId()) ||
|
||||
island.hasRole(IslandRole.Owner, player.getUniqueId())) &&
|
||||
playerDataManager.hasPlayerData(player)) {
|
||||
playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
playerData.setOwner(null);
|
||||
playerData.setMemberSince(null);
|
||||
//playerData.setMemberSince(null);
|
||||
playerData.clearMemberSince();
|
||||
playerData.setChat(false);
|
||||
playerData.save();
|
||||
|
||||
@ -1293,7 +1302,7 @@ public class IslandManager {
|
||||
Player player = offlinePlayer.getPlayer();
|
||||
if (offlinePlayer.isOnline() && player != null) {
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getOwner() != null && islandStorage.containsKey(playerData.getOwner())) {
|
||||
@ -1413,7 +1422,7 @@ public class IslandManager {
|
||||
|
||||
PlayerDataManager playerDataManager = plugin.getPlayerDataManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getIsland() != null) {
|
||||
@ -1430,7 +1439,7 @@ public class IslandManager {
|
||||
public boolean isPlayerAtAnIsland(Player player) {
|
||||
PlayerDataManager playerDataManager = plugin.getPlayerDataManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
return playerData.getIsland() != null;
|
||||
|
@ -34,7 +34,7 @@ public class ChatListeners implements Listener {
|
||||
|
||||
PlayerDataManager playerDataManager = plugin.getPlayerDataManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
Island island = null;
|
||||
|
||||
|
@ -3,8 +3,6 @@ package com.songoda.skyblock.listeners;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.config.FileManager.Config;
|
||||
import com.songoda.skyblock.cooldown.CooldownManager;
|
||||
import com.songoda.skyblock.cooldown.CooldownType;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
@ -24,7 +22,6 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class JoinListeners implements Listener {
|
||||
@ -74,7 +71,7 @@ public class JoinListeners implements Listener {
|
||||
|
||||
playerDataManager.loadPlayerData(player);
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
String[] playerTexture;
|
||||
|
||||
try {
|
||||
|
@ -3,8 +3,6 @@ package com.songoda.skyblock.listeners;
|
||||
import com.songoda.core.compatibility.CompatibleSound;
|
||||
import com.songoda.core.compatibility.ServerVersion;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.config.FileManager.Config;
|
||||
import com.songoda.skyblock.island.*;
|
||||
import com.songoda.skyblock.message.MessageManager;
|
||||
import com.songoda.skyblock.permission.PermissionManager;
|
||||
@ -15,7 +13,6 @@ import com.songoda.skyblock.utils.world.LocationUtil;
|
||||
import com.songoda.skyblock.world.WorldManager;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
@ -28,7 +25,6 @@ import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Objects;
|
||||
|
||||
public class MoveListeners implements Listener {
|
||||
@ -68,7 +64,7 @@ public class MoveListeners implements Listener {
|
||||
|
||||
messageManager.sendMessage(player, configLoad.getString("Island.World.Message").replace(configLoad.getString("Island.World.Word." + world.name()), world.name()));
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getIsland() != null) {
|
||||
@ -87,7 +83,7 @@ public class MoveListeners implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getIsland() != null) {
|
||||
|
@ -51,7 +51,8 @@ public class QuitListeners implements Listener {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
try {
|
||||
playerData.setLastOnline(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
|
||||
//playerData.setLastOnline(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
|
||||
playerData.setLastOnline(System.currentTimeMillis());
|
||||
} catch (Exception ignored) {}
|
||||
|
||||
Island island = islandManager.getIsland(player);
|
||||
|
@ -7,8 +7,6 @@ import com.songoda.skyblock.api.event.player.PlayerIslandEnterEvent;
|
||||
import com.songoda.skyblock.api.event.player.PlayerIslandExitEvent;
|
||||
import com.songoda.skyblock.api.event.player.PlayerIslandSwitchEvent;
|
||||
import com.songoda.skyblock.api.island.Island;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.config.FileManager.Config;
|
||||
import com.songoda.skyblock.island.IslandManager;
|
||||
import com.songoda.skyblock.island.IslandStatus;
|
||||
import com.songoda.skyblock.island.IslandWorld;
|
||||
@ -30,7 +28,6 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityPortalEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.UUID;
|
||||
|
||||
public class TeleportListeners implements Listener {
|
||||
@ -88,7 +85,7 @@ public class TeleportListeners implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
com.songoda.skyblock.island.Island island = islandManager.getIslandAtLocation(event.getTo());
|
||||
|
@ -48,14 +48,14 @@ public class Bans {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
Island island = plugin.getIslandManager().getIsland(player);
|
||||
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData1 = playerDataManager.getPlayerData(player);
|
||||
Island island1 = islandManager.getIsland(player);
|
||||
|
||||
@ -206,7 +206,7 @@ public class Bans {
|
||||
} else {
|
||||
targetPlayerName = targetPlayer.getName();
|
||||
|
||||
if (playerDataManager.hasPlayerData(targetPlayer)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(targetPlayer)) {
|
||||
targetPlayerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
|
||||
} else {
|
||||
targetPlayerTexture = new String[]{null, null};
|
||||
|
@ -15,7 +15,6 @@ import com.songoda.skyblock.permission.PermissionManager;
|
||||
import com.songoda.skyblock.placeholder.Placeholder;
|
||||
import com.songoda.skyblock.playerdata.PlayerDataManager;
|
||||
import com.songoda.skyblock.sound.SoundManager;
|
||||
import com.songoda.core.utils.NumberUtils;
|
||||
import com.songoda.skyblock.utils.NumberUtil;
|
||||
import com.songoda.skyblock.utils.item.nInventoryUtil;
|
||||
import com.songoda.skyblock.utils.version.SBiome;
|
||||
@ -28,8 +27,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class Biome {
|
||||
|
||||
private static Biome instance;
|
||||
@ -53,7 +50,7 @@ public class Biome {
|
||||
BiomeManager biomeManager = plugin.getBiomeManager();
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
FileConfiguration langConfig = plugin.getLanguage();
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
|
@ -51,7 +51,7 @@ public class Information {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getViewer() != null) {
|
||||
@ -110,7 +110,7 @@ public class Information {
|
||||
|
||||
if (viewer.getType() == Information.Viewer.Type.Categories) {
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData13 = playerDataManager.getPlayerData(player);
|
||||
ItemStack is = event.getItem();
|
||||
|
||||
@ -260,7 +260,7 @@ public class Information {
|
||||
Bukkit.getServer().getScheduler().runTask(plugin, () -> nInv.open());
|
||||
} else if (viewer.getType() == Information.Viewer.Type.Members) {
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData1 = playerDataManager.getPlayerData(player);
|
||||
ItemStack is = event.getItem();
|
||||
|
||||
@ -419,7 +419,7 @@ public class Information {
|
||||
Bukkit.getServer().getScheduler().runTask(plugin, () -> nInv.open());
|
||||
} else if (viewer.getType() == Information.Viewer.Type.Visitors) {
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData12 = playerDataManager.getPlayerData(player);
|
||||
ItemStack is = event.getItem();
|
||||
|
||||
|
@ -52,7 +52,7 @@ public class Leaderboard {
|
||||
PlayerDataManager playerDataManager = plugin.getPlayerDataManager();
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
Viewer viewer = (Viewer) playerDataManager.getPlayerData(player).getViewer();
|
||||
@ -60,7 +60,7 @@ public class Leaderboard {
|
||||
nInventoryUtil nInv;
|
||||
if (viewer.getType() == Viewer.Type.Browse) {
|
||||
nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
ItemStack is = event.getItem();
|
||||
|
||||
if ((is.getType() == CompatibleMaterial.OAK_FENCE_GATE.getMaterial()) && (is.hasItemMeta())
|
||||
@ -148,7 +148,7 @@ public class Leaderboard {
|
||||
|
||||
} else {
|
||||
nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
ItemStack is = event.getItem();
|
||||
|
||||
if ((is.getType() == CompatibleMaterial.OAK_FENCE_GATE.getMaterial()) && (is.hasItemMeta())) {
|
||||
@ -255,7 +255,7 @@ public class Leaderboard {
|
||||
} else {
|
||||
playerName = targetPlayer.getName();
|
||||
|
||||
if (playerDataManager.hasPlayerData(targetPlayer)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(targetPlayer)) {
|
||||
playerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
|
||||
} else {
|
||||
playerTexture = new String[] {null, null};
|
||||
|
@ -60,7 +60,7 @@ public class Levelling {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
|
||||
if (!playerDataManager.hasPlayerData(player))
|
||||
if (!playerDataManager.isPlayerDataLoaded(player))
|
||||
return;
|
||||
|
||||
PlayerData playerData = plugin.getPlayerDataManager().getPlayerData(player);
|
||||
@ -74,7 +74,7 @@ public class Levelling {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!playerDataManager.hasPlayerData(player))
|
||||
if (!playerDataManager.isPlayerDataLoaded(player))
|
||||
return;
|
||||
|
||||
ItemStack is = event.getItem();
|
||||
|
@ -52,11 +52,11 @@ public class Members {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getType() == null || playerData.getSort() == null) {
|
||||
|
@ -47,11 +47,11 @@ public class Ownership {
|
||||
IslandManager islandManager = plugin.getIslandManager();
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = plugin.getPlayerDataManager().getPlayerData(player);
|
||||
Island island = islandManager.getIsland(player);
|
||||
|
||||
@ -102,7 +102,7 @@ public class Ownership {
|
||||
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> {
|
||||
AnvilGui gui = new AnvilGui(player);
|
||||
gui.setAction(event1 -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island1 = islandManager.getIsland(player);
|
||||
|
||||
if (island1 == null) {
|
||||
@ -176,7 +176,7 @@ public class Ownership {
|
||||
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> {
|
||||
AnvilGui gui = new AnvilGui(player);
|
||||
gui.setAction(event1 -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island12 = islandManager.getIsland(player);
|
||||
|
||||
if (island12 == null) {
|
||||
|
@ -54,7 +54,7 @@ public class Settings {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island = islandManager.getIsland(player);
|
||||
|
||||
FileConfiguration mainConfig = plugin.getConfiguration();
|
||||
@ -62,7 +62,7 @@ public class Settings {
|
||||
|
||||
if (menuType == Settings.Type.Categories) {
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island13 = islandManager.getIsland(player);
|
||||
|
||||
if (island13 == null) {
|
||||
@ -226,7 +226,7 @@ public class Settings {
|
||||
Bukkit.getServer().getScheduler().runTask(plugin, () -> nInv.open());
|
||||
} else if (menuType == Settings.Type.Role && role != null) {
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island14 = islandManager.getIsland(player);
|
||||
|
||||
if (island14 == null) {
|
||||
@ -1032,7 +1032,7 @@ public class Settings {
|
||||
} else if (menuType == Settings.Type.Panel) {
|
||||
if (panel == Settings.Panel.Welcome) {
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island15 = islandManager.getIsland(player);
|
||||
|
||||
if (island15 == null) {
|
||||
@ -1279,7 +1279,7 @@ public class Settings {
|
||||
Bukkit.getServer().getScheduler().runTask(plugin, () -> nInv.open());
|
||||
} else if (panel == Settings.Panel.Signature) {
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island12 = islandManager.getIsland(player);
|
||||
|
||||
if (island12 == null) {
|
||||
|
@ -7,7 +7,6 @@ import com.songoda.core.hooks.economies.Economy;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.api.event.island.IslandUpgradeEvent;
|
||||
import com.songoda.skyblock.api.utils.APIUtil;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.island.IslandManager;
|
||||
import com.songoda.skyblock.message.MessageManager;
|
||||
@ -31,7 +30,6 @@ import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
public class Upgrade {
|
||||
@ -65,7 +63,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player) && playerDataManager.getPlayerData(player).getOwner() != null) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player) && playerDataManager.getPlayerData(player).getOwner() != null) {
|
||||
Island island = islandManager.getIsland(player);
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
@ -76,7 +74,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getOwner() == null) {
|
||||
|
@ -55,7 +55,7 @@ public class Visit {
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
|
||||
if (playerData.getType() == null || playerData.getSort() == null) {
|
||||
@ -402,7 +402,7 @@ public class Visit {
|
||||
} else {
|
||||
targetPlayerName = targetPlayer.getName();
|
||||
|
||||
if (playerDataManager.hasPlayerData(targetPlayer)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(targetPlayer)) {
|
||||
targetPlayerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
|
||||
} else {
|
||||
targetPlayerTexture = new String[]{null, null};
|
||||
|
@ -46,11 +46,11 @@ public class Visitors {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = plugin.getPlayerDataManager().getPlayerData(player);
|
||||
Island island = islandManager.getIsland(player);
|
||||
|
||||
|
@ -3,7 +3,6 @@ package com.songoda.skyblock.menus;
|
||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||
import com.songoda.core.compatibility.CompatibleSound;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.config.FileManager;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.island.IslandManager;
|
||||
import com.songoda.skyblock.island.IslandRole;
|
||||
@ -23,8 +22,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class Weather {
|
||||
|
||||
private static Weather instance;
|
||||
@ -46,11 +43,11 @@ public class Weather {
|
||||
PermissionManager permissionManager = plugin.getPermissionManager();
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Island island = islandManager.getIsland(player);
|
||||
|
||||
if (island == null) {
|
||||
|
@ -1250,7 +1250,7 @@ public class Creator implements Listener {
|
||||
if (inventoryName.equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Creator.Title")))) {
|
||||
PlayerDataManager playerDataManager = plugin.getPlayerDataManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
Creator.Viewer viewer = (Viewer) playerDataManager.getPlayerData(player).getViewer();
|
||||
|
||||
if (viewer != null) {
|
||||
|
@ -53,7 +53,7 @@ public class Upgrade {
|
||||
SoundManager soundManager = plugin.getSoundManager();
|
||||
FileManager fileManager = plugin.getFileManager();
|
||||
|
||||
if (playerDataManager.hasPlayerData(player) && playerDataManager.getPlayerData(player).getViewer() != null) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player) && playerDataManager.getPlayerData(player).getViewer() != null) {
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
Viewer viewer = (Upgrade.Viewer) playerDataManager.getPlayerData(player).getViewer();
|
||||
|
||||
@ -138,7 +138,7 @@ public class Upgrade {
|
||||
if (event.getClick() == ClickType.LEFT) {
|
||||
upgrade.setEnabled(!upgrade.isEnabled());
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
com.songoda.skyblock.upgrade.Upgrade.Type upgradeType = ((Viewer) playerDataManager
|
||||
.getPlayerData(player).getViewer()).getUpgrade();
|
||||
|
||||
@ -193,7 +193,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
double upgradeCost = Double.valueOf(gui.getInputText());
|
||||
com.songoda.skyblock.upgrade.Upgrade.Type upgradeType = ((Viewer) playerDataManager
|
||||
.getPlayerData(player).getViewer()).getUpgrade();
|
||||
@ -372,7 +372,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
ItemStack is = event.getItem();
|
||||
|
||||
@ -405,7 +405,7 @@ public class Upgrade {
|
||||
AnvilGui gui = new AnvilGui(player);
|
||||
gui.setAction(event1 -> {
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)
|
||||
if (playerDataManager.isPlayerDataLoaded(player)
|
||||
&& playerDataManager
|
||||
.getPlayerData(player) != null) {
|
||||
if (!gui.getInputText().matches("[0-9]+")) {
|
||||
@ -531,7 +531,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)
|
||||
if (playerDataManager.isPlayerDataLoaded(player)
|
||||
&& playerDataManager
|
||||
.getPlayerData(player) != null) {
|
||||
if (!gui.getInputText().matches("[0-9]+")) {
|
||||
@ -650,7 +650,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)
|
||||
if (playerDataManager.isPlayerDataLoaded(player)
|
||||
&& playerDataManager
|
||||
.getPlayerData(player) != null) {
|
||||
if (!(gui.getInputText().matches("[0-9]+")
|
||||
@ -791,7 +791,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)) {
|
||||
if (playerDataManager.isPlayerDataLoaded(player)) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(player);
|
||||
ItemStack is = event.getItem();
|
||||
|
||||
@ -824,7 +824,7 @@ public class Upgrade {
|
||||
AnvilGui gui = new AnvilGui(player);
|
||||
gui.setAction(event1 -> {
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)
|
||||
if (playerDataManager.isPlayerDataLoaded(player)
|
||||
&& playerDataManager
|
||||
.getPlayerData(player) != null) {
|
||||
if (!gui.getInputText().matches("[0-9]+")) {
|
||||
@ -952,7 +952,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)
|
||||
if (playerDataManager.isPlayerDataLoaded(player)
|
||||
&& playerDataManager
|
||||
.getPlayerData(player) != null) {
|
||||
if (!gui.getInputText().matches("[0-9]+")) {
|
||||
@ -1071,7 +1071,7 @@ public class Upgrade {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerDataManager.hasPlayerData(player)
|
||||
if (playerDataManager.isPlayerDataLoaded(player)
|
||||
&& playerDataManager
|
||||
.getPlayerData(player) != null) {
|
||||
if (!(gui.getInputText().matches("[0-9]+")
|
||||
|
@ -5,23 +5,30 @@ import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.bank.Transaction;
|
||||
import com.songoda.skyblock.config.FileManager.Config;
|
||||
import com.songoda.skyblock.confirmation.Confirmation;
|
||||
import com.songoda.skyblock.database.exceptions.NoPlayerDataException;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.island.IslandRole;
|
||||
import com.songoda.skyblock.menus.MenuType;
|
||||
import com.songoda.skyblock.utils.structure.Area;
|
||||
import org.apache.commons.lang.SerializationUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
public class PlayerData {
|
||||
|
||||
private final SkyBlock plugin;
|
||||
private final UUID uuid;
|
||||
private UUID islandOwnerUUID;
|
||||
private UUID ownershipUUID;
|
||||
private UUID islandUUID;
|
||||
private long firstJoin;
|
||||
|
||||
private final List<MenuPage> pages;
|
||||
private int playTime;
|
||||
@ -43,52 +50,91 @@ public class PlayerData {
|
||||
|
||||
private Object viewer;
|
||||
|
||||
//TODO move this to island data
|
||||
@Deprecated
|
||||
private List<Transaction> transactions;
|
||||
private Config playerConfig;
|
||||
|
||||
public PlayerData(Player player) {
|
||||
private boolean scoreboard;
|
||||
private String[] texture;
|
||||
private long lastOnline;
|
||||
private long islandJoinTime;
|
||||
private int islandCreationCount;
|
||||
private int islandDeleteCount;
|
||||
private IslandRole islandRole;
|
||||
|
||||
public PlayerData(UUID playerUUID) {
|
||||
this.plugin = SkyBlock.getInstance();
|
||||
|
||||
uuid = player.getUniqueId();
|
||||
islandOwnerUUID = null;
|
||||
|
||||
this.uuid = playerUUID;
|
||||
pages = new ArrayList<>();
|
||||
|
||||
confirmationTime = 0;
|
||||
playTime = getConfig().getFileConfiguration().getInt("Statistics.Island.Playtime");
|
||||
|
||||
area = new Area();
|
||||
|
||||
chatSpy = getConfig().getFileConfiguration().getBoolean("ChatSpy", false);
|
||||
spiedIslands = new HashSet<>();
|
||||
|
||||
if (getConfig().getFileConfiguration().getString("ChatSpiedIslands") != null) {
|
||||
for (String islandUUID : getConfig().getFileConfiguration().getStringList("ChatSpiedIslands")) {
|
||||
spiedIslands.add(FastUUID.parseUUID(islandUUID));
|
||||
}
|
||||
}
|
||||
|
||||
chat = false;
|
||||
preview = false;
|
||||
transactions = new ArrayList<>();
|
||||
FileConfiguration configLoad = getConfig().getFileConfiguration();
|
||||
for (int i = 0;i< configLoad.getInt("Bank.Transactions.Size");i++) {
|
||||
Transaction t = new Transaction();
|
||||
t.action = Transaction.Type.valueOf(configLoad.getString("Bank.Transactions."+i+".Action"));
|
||||
t.amount = Float.parseFloat(Objects.requireNonNull(configLoad.getString("Bank.Transactions." + i + ".Amount")));
|
||||
t.player = Bukkit.getOfflinePlayer(FastUUID.parseUUID(Objects.requireNonNull(configLoad.getString("Bank.Transactions." + i + ".Player"))));
|
||||
Date d = new Date();
|
||||
d.setTime(configLoad.getLong("Bank.Transactions."+i+".Date"));
|
||||
t.timestamp = d;
|
||||
String visibility = configLoad.getString("Bank.Transactions."+i+".Visibility");
|
||||
if(visibility != null){
|
||||
t.visibility = Transaction.Visibility.valueOf(visibility);
|
||||
} else {
|
||||
t.visibility = Transaction.Visibility.USER; // Defaulting this as it's a new field
|
||||
}
|
||||
transactions.add(t);
|
||||
|
||||
switch (plugin.getDataManager().getDatabaseType()) {
|
||||
case POSTGRESQL:
|
||||
case MARIADB:
|
||||
case MYSQL:
|
||||
case SQLITE:
|
||||
try (Connection connection = plugin.getDatabaseConnector().getConnection()) {
|
||||
PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + SkyBlock.getTable("players") +" WHERE uuid = ?");
|
||||
statement.setString(1, FastUUID.toString(playerUUID));
|
||||
ResultSet data = statement.executeQuery();
|
||||
if (data.next()) {
|
||||
playTime = data.getInt("playTime");
|
||||
firstJoin = data.getLong("joinTime");
|
||||
this.islandRole = IslandRole.valueOf(data.getString("islandRole"));
|
||||
chatSpy = data.getBoolean("chatSpy");
|
||||
byte[] spiedIslands = data.getBytes("spiedIslands");
|
||||
if (spiedIslands != null) {
|
||||
this.spiedIslands.addAll((List<UUID>) SerializationUtils.deserialize(spiedIslands));
|
||||
}
|
||||
this.scoreboard = data.getBoolean("scoreboard");
|
||||
this.texture = new String[]{data.getString("textureSignature"), data.getString("textureValue")};
|
||||
this.islandCreationCount = data.getInt("islandCreationCount");
|
||||
this.islandDeleteCount = data.getInt("islandDeleteCount");
|
||||
this.islandJoinTime = data.getLong("islandJoinTime");
|
||||
} else {
|
||||
throw new NoPlayerDataException();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
break;
|
||||
case MONGODB:
|
||||
throw new RuntimeException("MongoDB is not supported yet");
|
||||
//Flatfile
|
||||
default:
|
||||
playerConfig = plugin.getFileManager().getConfig(new File(new File(plugin.getDataFolder().toString() + "/player-data"), FastUUID.toString(playerUUID) + ".yml"));
|
||||
chatSpy = getConfig().getFileConfiguration().getBoolean("ChatSpy", false);
|
||||
if (getConfig().getFileConfiguration().getString("ChatSpiedIslands") != null) {
|
||||
for (String islandUUID : getConfig().getFileConfiguration().getStringList("ChatSpiedIslands")) {
|
||||
spiedIslands.add(FastUUID.parseUUID(islandUUID));
|
||||
}
|
||||
}
|
||||
this.scoreboard = getConfig().getFileConfiguration().getBoolean("Scoreboard", true);
|
||||
String island = getConfig().getFileConfiguration().getString("Island.UUID");
|
||||
String islandOwner = getConfig().getFileConfiguration().getString("Island.Owner");
|
||||
this.islandRole = IslandRole.valueOf(getConfig().getFileConfiguration().getString("Island.Role", "Member"));
|
||||
this.islandUUID = island == null ? null : FastUUID.parseUUID(island);
|
||||
this.texture = new String[] { getConfig().getFileConfiguration().getString("Texture.Signature"), getConfig().getFileConfiguration().getString("Texture.Value") };
|
||||
//TODO convert from string to timestamp
|
||||
this.lastOnline = getConfig().getFileConfiguration().getLong("Statistics.Island.LastOnline");
|
||||
this.islandCreationCount = getConfig().getFileConfiguration().getInt("Statistics.Island.CreationCount");
|
||||
this.islandDeleteCount = getConfig().getFileConfiguration().getInt("Statistics.Island.DeleteCount");
|
||||
this.islandJoinTime = getConfig().getFileConfiguration().getLong("Statistics.Island.Join", 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public PlayerData(Player player) {
|
||||
this(player.getUniqueId());
|
||||
}
|
||||
|
||||
public int getPage(MenuType type) {
|
||||
for(MenuPage menu : pages){
|
||||
if(menu.getType().equals(type)){
|
||||
@ -125,19 +171,11 @@ public class PlayerData {
|
||||
}
|
||||
|
||||
public UUID getIsland() {
|
||||
return islandOwnerUUID;
|
||||
return islandUUID;
|
||||
}
|
||||
|
||||
public void setIsland(UUID islandOwnerUUID) {
|
||||
this.islandOwnerUUID = islandOwnerUUID;
|
||||
}
|
||||
|
||||
public UUID getOwnership() {
|
||||
return ownershipUUID;
|
||||
}
|
||||
|
||||
public void setOwnership(UUID ownershipUUID) {
|
||||
this.ownershipUUID = ownershipUUID;
|
||||
public void setIsland(UUID islandUUID) {
|
||||
this.islandUUID = islandUUID;
|
||||
}
|
||||
|
||||
public int getConfirmationTime() {
|
||||
@ -168,12 +206,20 @@ public class PlayerData {
|
||||
this.playTime = playTime;
|
||||
}
|
||||
|
||||
public long getFirstJoin() {
|
||||
return firstJoin;
|
||||
}
|
||||
|
||||
public void setFirstJoin(long firstJoin) {
|
||||
this.firstJoin = firstJoin;
|
||||
}
|
||||
|
||||
public boolean isScoreboard() {
|
||||
return getConfig().getFileConfiguration().getBoolean("Scoreboard", true);
|
||||
return scoreboard;
|
||||
}
|
||||
|
||||
public void setScoreboard(boolean scoreboard) {
|
||||
getConfig().getFileConfiguration().set("Scoreboard", scoreboard);
|
||||
this.scoreboard = true;
|
||||
}
|
||||
|
||||
public boolean isPreview() {
|
||||
@ -192,63 +238,50 @@ public class PlayerData {
|
||||
this.visitTime = visitTime;
|
||||
}
|
||||
|
||||
public String getMemberSince() {
|
||||
return getConfig().getFileConfiguration().getString("Statistics.Island.Join");
|
||||
public long getMemberSince() {
|
||||
return islandJoinTime;
|
||||
}
|
||||
|
||||
public void setMemberSince(String date) {
|
||||
getConfig().getFileConfiguration().set("Statistics.Island.Join", date);
|
||||
public void setMemberSince(long timestamp) {
|
||||
this.islandJoinTime = timestamp;
|
||||
}
|
||||
|
||||
public UUID getOwner() {
|
||||
String islandOwnerUUID = getConfig().getFileConfiguration().getString("Island.Owner");
|
||||
return (islandOwnerUUID == null) ? null : FastUUID.parseUUID(islandOwnerUUID);
|
||||
}
|
||||
|
||||
public void setOwner(UUID islandOwnerUUID) {
|
||||
if (islandOwnerUUID == null) {
|
||||
getConfig().getFileConfiguration().set("Island.Owner", null);
|
||||
} else {
|
||||
getConfig().getFileConfiguration().set("Island.Owner", islandOwnerUUID.toString());
|
||||
}
|
||||
public void clearMemberSince() {
|
||||
this.islandJoinTime = 0;
|
||||
}
|
||||
|
||||
public String[] getTexture() {
|
||||
FileConfiguration configLoad = getConfig().getFileConfiguration();
|
||||
|
||||
return new String[] { configLoad.getString("Texture.Signature"), configLoad.getString("Texture.Value") };
|
||||
return texture;
|
||||
}
|
||||
|
||||
public void setTexture(String signature, String value) {
|
||||
getConfig().getFileConfiguration().set("Texture.Signature", signature);
|
||||
getConfig().getFileConfiguration().set("Texture.Value", value);
|
||||
this.texture = new String[] { signature, value };
|
||||
}
|
||||
|
||||
public String getLastOnline() {
|
||||
return getConfig().getFileConfiguration().getString("Statistics.Island.LastOnline");
|
||||
public long getLastOnline() {
|
||||
return this.lastOnline;
|
||||
}
|
||||
|
||||
public void setLastOnline(String date) {
|
||||
getConfig().getFileConfiguration().set("Statistics.Island.LastOnline", date);
|
||||
public void setLastOnline(long timestamp) {
|
||||
this.lastOnline = timestamp;
|
||||
}
|
||||
|
||||
public long getIslandCreationCount() {
|
||||
return getConfig().getFileConfiguration().getLong("Statistics.Island.IslandCreationCount");
|
||||
public int getIslandCreationCount() {
|
||||
return islandCreationCount;
|
||||
}
|
||||
|
||||
public long getIslandDeletionCount() {
|
||||
return getConfig().getFileConfiguration().getLong("Statistics.Island.IslandDeleteCount");
|
||||
public int getIslandDeletionCount() {
|
||||
return islandDeleteCount;
|
||||
}
|
||||
|
||||
public void setIslandCreationCount(long newNumber) {
|
||||
getConfig().getFileConfiguration().set("Statistics.Island.IslandCreationCount", newNumber);
|
||||
public void setIslandCreationCount(int newNumber) {
|
||||
this.islandCreationCount = newNumber;
|
||||
}
|
||||
|
||||
public void setIslandDeletionCount(long newNumber) {
|
||||
getConfig().getFileConfiguration().set("Statistics.Island.IslandDeleteCount", newNumber);
|
||||
public void setIslandDeletionCount(int newNumber) {
|
||||
this.islandDeleteCount = newNumber;
|
||||
}
|
||||
|
||||
|
||||
public Area getArea() {
|
||||
return area;
|
||||
}
|
||||
@ -269,6 +302,7 @@ public class PlayerData {
|
||||
this.viewer = viewer;
|
||||
}
|
||||
|
||||
//ToDo move this to island data
|
||||
public void deleteTransactions() {
|
||||
Config config = getConfig();
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
@ -281,42 +315,21 @@ public class PlayerData {
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void save() {
|
||||
transactions = plugin.getBankManager().getTransactionList(getPlayerUUID());
|
||||
Config config = getConfig();
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
configLoad.set("Statistics.Island.Playtime", getPlaytime());
|
||||
if (transactions != null) {
|
||||
configLoad.set("Bank.Transactions.Size", transactions.size());
|
||||
for (int i = 0; i < transactions.size(); i++) {
|
||||
Transaction t = transactions.get(i);
|
||||
configLoad.set("Bank.Transactions." + i + ".Action", t.action.name());
|
||||
configLoad.set("Bank.Transactions." + i + ".Amount", t.amount);
|
||||
configLoad.set("Bank.Transactions." + i + ".Player", t.player.getUniqueId().toString());
|
||||
configLoad.set("Bank.Transactions." + i + ".Date", t.timestamp.getTime());
|
||||
configLoad.set("Bank.Transactions." + i + ".Visibility", t.visibility.name());
|
||||
}
|
||||
}else {
|
||||
configLoad.set("Bank.Transactions.Size", 0);
|
||||
}
|
||||
|
||||
configLoad.set("ChatSpy", chatSpy);
|
||||
List<String> tempSpiedIslands = new ArrayList<>();
|
||||
for(UUID uuid : spiedIslands){
|
||||
tempSpiedIslands.add(FastUUID.toString(uuid));
|
||||
}
|
||||
configLoad.set("ChatSpiedIslands", tempSpiedIslands);
|
||||
|
||||
try {
|
||||
configLoad.save(config.getFile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//TODO move this to island data
|
||||
public List<Transaction> getTransactions() {
|
||||
return transactions;
|
||||
}
|
||||
|
||||
public synchronized void save() {
|
||||
plugin.getDataManager().getDataProvider().savePlayerData(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Only used when DatabaseType is FlatFile
|
||||
* @return the player's config if DatabaseType is FlatFile otherwise null
|
||||
*/
|
||||
private Config getConfig() {
|
||||
SkyBlock plugin = SkyBlock.getInstance();
|
||||
return plugin.getFileManager().getConfig(new File(new File(plugin.getDataFolder().toString() + "/player-data"), FastUUID.toString(uuid) + ".yml"));
|
||||
return playerConfig;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
@ -327,22 +340,16 @@ public class PlayerData {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public List<Transaction> getTransactions() {
|
||||
return transactions;
|
||||
}
|
||||
|
||||
public boolean isChatSpy() {
|
||||
return chatSpy;
|
||||
}
|
||||
|
||||
public void setChatSpy(boolean chatSpy) {
|
||||
this.chatSpy = chatSpy;
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, this::save);
|
||||
}
|
||||
|
||||
public void addChatSpyIsland(UUID uuid) {
|
||||
spiedIslands.add(uuid);
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, this::save);
|
||||
}
|
||||
|
||||
public boolean isChatSpyIsland(UUID uuid) {
|
||||
@ -351,7 +358,6 @@ public class PlayerData {
|
||||
|
||||
public void removeChatSpyIsland(UUID uuid) {
|
||||
spiedIslands.remove(uuid);
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, this::save);
|
||||
}
|
||||
|
||||
public Set<UUID> getChatSpyIslands() {
|
||||
@ -376,6 +382,13 @@ public class PlayerData {
|
||||
|
||||
public void enableGlobalChatSpy() {
|
||||
spiedIslands.clear();
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, this::save);
|
||||
}
|
||||
|
||||
public IslandRole getIslandRole() {
|
||||
return islandRole;
|
||||
}
|
||||
|
||||
public void setIslandRole(IslandRole islandRole) {
|
||||
this.islandRole = islandRole;
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,9 @@
|
||||
package com.songoda.skyblock.playerdata;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
import com.songoda.skyblock.SkyBlock;
|
||||
import com.songoda.skyblock.ban.BanManager;
|
||||
import com.songoda.skyblock.config.FileManager.Config;
|
||||
import com.songoda.skyblock.database.DataProvider;
|
||||
import com.songoda.skyblock.island.Island;
|
||||
import com.songoda.skyblock.island.IslandLocation;
|
||||
import com.songoda.skyblock.island.IslandManager;
|
||||
@ -23,88 +22,52 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PlayerDataManager {
|
||||
private final SkyBlock plugin;
|
||||
private final Map<UUID, PlayerData> playerDataStorage = new HashMap<>();
|
||||
|
||||
private final DataProvider dataProvider;
|
||||
public PlayerDataManager(SkyBlock plugin) {
|
||||
this.plugin = plugin;
|
||||
|
||||
for (Player all : Bukkit.getOnlinePlayers()) {
|
||||
loadPlayerData(all);
|
||||
|
||||
if (!hasPlayerData(all)) {
|
||||
createPlayerData(all);
|
||||
loadPlayerData(all);
|
||||
}
|
||||
|
||||
storeIsland(all);
|
||||
}
|
||||
this.dataProvider = plugin.getDataManager().getDataProvider();
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
for (PlayerData data : playerDataStorage.values()) {
|
||||
data.save();
|
||||
}
|
||||
public void save() {
|
||||
|
||||
}
|
||||
|
||||
public synchronized void addData(PlayerData data) {
|
||||
playerDataStorage.put(data.getPlayerUUID(), data);
|
||||
}
|
||||
|
||||
public synchronized void removeData(PlayerData data) {
|
||||
playerDataStorage.remove(data.getPlayerUUID());
|
||||
}
|
||||
|
||||
public void createPlayerData(Player player) {
|
||||
Config config = plugin.getFileManager().getConfig(new File(new File(plugin.getDataFolder().toString() + "/player-data"), player.getUniqueId() + ".yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
String[] playerTexture;
|
||||
|
||||
try {
|
||||
Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player);
|
||||
Method getProfileMethod = entityPlayer.getClass().getMethod("getProfile");
|
||||
GameProfile gameProfile = (GameProfile) getProfileMethod.invoke(entityPlayer);
|
||||
Property property = gameProfile.getProperties().get("textures").iterator().next();
|
||||
playerTexture = new String[] {property.getSignature(), property.getValue()};
|
||||
} catch (Exception e) {
|
||||
playerTexture = new String[] {
|
||||
"K9P4tCIENYbNpDuEuuY0shs1x7iIvwXi4jUUVsATJfwsAIZGS+9OZ5T2HB0tWBoxRvZNi73Vr+syRdvTLUWPusVXIg+2fhXmQoaNEtnQvQVGQpjdQP0TkZtYG8PbvRxE6Z75ddq+DVx/65OSNHLWIB/D+Rg4vINh4ukXNYttn9QvauDHh1aW7/IkIb1Bc0tLcQyqxZQ3mdglxJfgIerqnlA++Lt7TxaLdag4y1NhdZyd3OhklF5B0+B9zw/qP8QCzsZU7VzJIcds1+wDWKiMUO7+60OSrIwgE9FPamxOQDFoDvz5BOULQEeNx7iFMB+eBYsapCXpZx0zf1bduppBUbbVC9wVhto/J4tc0iNyUq06/esHUUB5MHzdJ0Y6IZJAD/xIw15OLCUH2ntvs8V9/cy5/n8u3JqPUM2zhUGeQ2p9FubUGk4Q928L56l3omRpKV+5QYTrvF+AxFkuj2hcfGQG3VE2iYZO6omXe7nRPpbJlHkMKhE8Xvd1HP4PKpgivSkHBoZ92QEUAmRzZydJkp8CNomQrZJf+MtPiNsl/Q5RQM+8CQThg3+4uWptUfP5dDFWOgTnMdA0nIODyrjpp+bvIJnsohraIKJ7ZDnj4tIp4ObTNKDFC/8j8JHz4VCrtr45mbnzvB2DcK8EIB3JYT7ElJTHnc5BKMyLy5SKzuw=",
|
||||
"eyJ0aW1lc3RhbXAiOjE1MjkyNTg0MTE4NDksInByb2ZpbGVJZCI6Ijg2NjdiYTcxYjg1YTQwMDRhZjU0NDU3YTk3MzRlZWQ3IiwicHJvZmlsZU5hbWUiOiJTdGV2ZSIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGMxYzc3Y2U4ZTU0OTI1YWI1ODEyNTQ0NmVjNTNiMGNkZDNkMGNhM2RiMjczZWI5MDhkNTQ4Mjc4N2VmNDAxNiJ9LCJDQVBFIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjc2N2Q0ODMyNWVhNTMyNDU2MTQwNmI4YzgyYWJiZDRlMjc1NWYxMTE1M2NkODVhYjA1NDVjYzIifX19"};
|
||||
}
|
||||
|
||||
configLoad.set("Texture.Signature", playerTexture[0]);
|
||||
configLoad.set("Texture.Value", playerTexture[1]);
|
||||
configLoad.set("Statistics.Island.Playtime", 0);
|
||||
|
||||
try {
|
||||
configLoad.save(config.getFile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
if (dataProvider.hasPlayerData(player)) {
|
||||
throw new RuntimeException("Player data already exists for " + player.getName());
|
||||
}
|
||||
plugin.getDataManager().getDataProvider().createPlayerData(player);
|
||||
}
|
||||
|
||||
public void loadPlayerData(Player player) {
|
||||
if (plugin.getFileManager().isFileExist(new File(plugin.getDataFolder().toString() + "/player-data", player.getUniqueId().toString() + ".yml"))) {
|
||||
PlayerData playerData = new PlayerData(player);
|
||||
playerDataStorage.put(player.getUniqueId(), playerData);
|
||||
}
|
||||
if (dataProvider.hasPlayerData(player)) {
|
||||
addData(dataProvider.loadPlayerData(player));
|
||||
}
|
||||
}
|
||||
|
||||
public void unloadPlayerData(Player player) {
|
||||
if (hasPlayerData(player)) {
|
||||
plugin.getFileManager().unloadConfig(new File(new File(plugin.getDataFolder().toString() + "/player-data"), player.getUniqueId().toString() + ".yml"));
|
||||
playerDataStorage.remove(player.getUniqueId());
|
||||
if (isPlayerDataLoaded(player)) {
|
||||
dataProvider.unloadPlayerData(player);
|
||||
}
|
||||
}
|
||||
|
||||
public void savePlayerData(Player player) {
|
||||
if (hasPlayerData(player)) {
|
||||
Config config = plugin.getFileManager().getConfig(new File(new File(plugin.getDataFolder().toString() + "/player-data"), player.getUniqueId().toString() + ".yml"));
|
||||
|
||||
try {
|
||||
config.getFileConfiguration().save(config.getFile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (isPlayerDataLoaded(player)) {
|
||||
dataProvider.savePlayerData(player);
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,7 +79,7 @@ public class PlayerDataManager {
|
||||
return playerDataStorage.get(uuid);
|
||||
}
|
||||
|
||||
public boolean hasPlayerData(UUID uuid) {
|
||||
public boolean isPlayerDataLoaded(UUID uuid) {
|
||||
return playerDataStorage.containsKey(uuid);
|
||||
}
|
||||
|
||||
@ -124,8 +87,8 @@ public class PlayerDataManager {
|
||||
return getPlayerData(player.getUniqueId());
|
||||
}
|
||||
|
||||
public boolean hasPlayerData(Player player) {
|
||||
return hasPlayerData(player.getUniqueId());
|
||||
public boolean isPlayerDataLoaded(Player player) {
|
||||
return isPlayerDataLoaded(player.getUniqueId());
|
||||
}
|
||||
|
||||
public void storeIsland(Player player) {
|
||||
@ -136,7 +99,7 @@ public class PlayerDataManager {
|
||||
|
||||
FileConfiguration configLoad = plugin.getLanguage();
|
||||
|
||||
if (hasPlayerData(player)) {
|
||||
if (isPlayerDataLoaded(player)) {
|
||||
if (worldManager.isIslandWorld(player.getWorld())) {
|
||||
IslandWorld world = worldManager.getIslandWorld(player.getWorld());
|
||||
Island island = islandManager.getIslandAtLocation(player.getLocation());
|
||||
|
@ -20,7 +20,7 @@ public class PlaytimeTask extends BukkitRunnable {
|
||||
@Override
|
||||
public void run() {
|
||||
for (Player all : Bukkit.getOnlinePlayers()) {
|
||||
if (playerDataManager.hasPlayerData(all) && islandManager.getIsland(all) != null) {
|
||||
if (playerDataManager.isPlayerDataLoaded(all) && islandManager.getIsland(all) != null) {
|
||||
PlayerData playerData = playerDataManager.getPlayerData(all);
|
||||
playerData.setPlaytime(playerData.getPlaytime() + 1);
|
||||
}
|
||||
|
@ -1,3 +1,26 @@
|
||||
# Valid types in recommended order: POSTGRESQL, MARIADB, MONGODB, MYSQL, SQLITE, FLATFILE
|
||||
Database:
|
||||
Type: FLATFILE
|
||||
|
||||
#Only in POSTGRESQL, MARIADB, MYSQL, MONGODB
|
||||
Connection:
|
||||
Host: localhost
|
||||
Port: 3306
|
||||
Database: fabledskyblock
|
||||
Username: root
|
||||
Password: root
|
||||
|
||||
Settings:
|
||||
# Only in POSTGRESQL, MARIADB, MYSQL
|
||||
ConnectionMaxLifetime: 1800000 # 30 minutes
|
||||
ConnectionTimeout: 5000 # 5 seconds
|
||||
MinPoolSize: 10
|
||||
MaxPoolSize: 10
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Command:
|
||||
Help:
|
||||
# Lists all commands rather than pages.
|
||||
|
Loading…
Reference in New Issue
Block a user