294 lines
15 KiB
Java
294 lines
15 KiB
Java
package com.craftaro.skyblock.playerdata;
|
|
|
|
import com.craftaro.skyblock.SkyBlock;
|
|
import com.craftaro.skyblock.ban.BanManager;
|
|
import com.craftaro.skyblock.config.FileManager;
|
|
import com.craftaro.skyblock.island.Island;
|
|
import com.craftaro.skyblock.island.IslandLocation;
|
|
import com.craftaro.skyblock.island.IslandManager;
|
|
import com.craftaro.skyblock.island.IslandRole;
|
|
import com.craftaro.skyblock.island.IslandStatus;
|
|
import com.craftaro.skyblock.island.IslandWorld;
|
|
import com.craftaro.skyblock.message.MessageManager;
|
|
import com.craftaro.skyblock.scoreboard.ScoreboardManager;
|
|
import com.craftaro.skyblock.utils.player.OfflinePlayer;
|
|
import com.craftaro.skyblock.utils.world.LocationUtil;
|
|
import com.craftaro.skyblock.visit.Visit;
|
|
import com.craftaro.skyblock.world.WorldManager;
|
|
import com.mojang.authlib.GameProfile;
|
|
import com.mojang.authlib.properties.Property;
|
|
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.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<>();
|
|
|
|
public PlayerDataManager(SkyBlock plugin) {
|
|
this.plugin = plugin;
|
|
|
|
for (Player all : Bukkit.getOnlinePlayers()) {
|
|
loadPlayerData(all);
|
|
|
|
if (!hasPlayerData(all)) {
|
|
createPlayerData(all);
|
|
loadPlayerData(all);
|
|
}
|
|
|
|
storeIsland(all);
|
|
}
|
|
}
|
|
|
|
public void onDisable() {
|
|
for (PlayerData data : this.playerDataStorage.values()) {
|
|
data.save();
|
|
}
|
|
}
|
|
|
|
public void createPlayerData(Player player) {
|
|
FileManager.Config config = this.plugin.getFileManager().getConfig(new File(new File(this.plugin.getDataFolder(), "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 ex) {
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
|
|
public void loadPlayerData(Player player) {
|
|
if (this.plugin.getFileManager().isFileExist(new File(this.plugin.getDataFolder().toString() + "/player-data", player.getUniqueId().toString() + ".yml"))) {
|
|
PlayerData playerData = new PlayerData(player);
|
|
this.playerDataStorage.put(player.getUniqueId(), playerData);
|
|
}
|
|
}
|
|
|
|
public void unloadPlayerData(Player player) {
|
|
if (hasPlayerData(player)) {
|
|
this.plugin.getFileManager().unloadConfig(new File(new File(this.plugin.getDataFolder().toString() + "/player-data"), player.getUniqueId().toString() + ".yml"));
|
|
this.playerDataStorage.remove(player.getUniqueId());
|
|
}
|
|
}
|
|
|
|
public void savePlayerData(Player player) {
|
|
if (hasPlayerData(player)) {
|
|
FileManager.Config config = this.plugin.getFileManager().getConfig(new File(new File(this.plugin.getDataFolder().toString() + "/player-data"), player.getUniqueId().toString() + ".yml"));
|
|
|
|
try {
|
|
config.getFileConfiguration().save(config.getFile());
|
|
} catch (IOException ex) {
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
public Map<UUID, PlayerData> getPlayerData() {
|
|
return this.playerDataStorage;
|
|
}
|
|
|
|
public PlayerData getPlayerData(UUID uuid) {
|
|
return this.playerDataStorage.get(uuid);
|
|
}
|
|
|
|
public boolean hasPlayerData(UUID uuid) {
|
|
return this.playerDataStorage.containsKey(uuid);
|
|
}
|
|
|
|
public PlayerData getPlayerData(Player player) {
|
|
return getPlayerData(player.getUniqueId());
|
|
}
|
|
|
|
public boolean hasPlayerData(Player player) {
|
|
return hasPlayerData(player.getUniqueId());
|
|
}
|
|
|
|
public void storeIsland(Player player) {
|
|
MessageManager messageManager = this.plugin.getMessageManager();
|
|
IslandManager islandManager = this.plugin.getIslandManager();
|
|
WorldManager worldManager = this.plugin.getWorldManager();
|
|
BanManager banManager = this.plugin.getBanManager();
|
|
|
|
FileConfiguration configLoad = this.plugin.getLanguage();
|
|
|
|
if (hasPlayerData(player)) {
|
|
if (worldManager.isIslandWorld(player.getWorld())) {
|
|
IslandWorld world = worldManager.getIslandWorld(player.getWorld());
|
|
Island island = islandManager.getIslandAtLocation(player.getLocation());
|
|
|
|
if (island != null) {
|
|
Player targetPlayer = Bukkit.getServer().getPlayer(island.getOwnerUUID());
|
|
String targetPlayerName;
|
|
|
|
if (targetPlayer == null) {
|
|
targetPlayerName = new OfflinePlayer(island.getOwnerUUID()).getName();
|
|
} else {
|
|
targetPlayerName = targetPlayer.getName();
|
|
}
|
|
|
|
if (banManager.hasIsland(island.getOwnerUUID()) && this.plugin.getConfiguration().getBoolean("Island.Visitor.Banning")
|
|
&& banManager.getIsland(island.getOwnerUUID()).isBanned(player.getUniqueId())) {
|
|
if (messageManager != null) {
|
|
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Banned.Island.Message").replace("%player", targetPlayerName));
|
|
}
|
|
} else {
|
|
if (island.hasRole(IslandRole.MEMBER, player.getUniqueId()) || island.hasRole(IslandRole.OPERATOR, player.getUniqueId()) || island.hasRole(IslandRole.OWNER, player.getUniqueId())) {
|
|
PlayerData playerData = getPlayerData(player);
|
|
playerData.setIsland(island.getOwnerUUID());
|
|
|
|
if (world == IslandWorld.NORMAL) {
|
|
if (!island.isWeatherSynchronized()) {
|
|
player.setPlayerTime(island.getTime(), this.plugin.getConfiguration().getBoolean("Island.Weather.Time.Cycle"));
|
|
player.setPlayerWeather(island.getWeather());
|
|
}
|
|
}
|
|
|
|
islandManager.updateFlight(player);
|
|
|
|
return;
|
|
} else if (island.getStatus() != IslandStatus.CLOSED || island.isCoopPlayer(player.getUniqueId())) {
|
|
if (island.getStatus() == IslandStatus.CLOSED && island.isCoopPlayer(player.getUniqueId())) {
|
|
if (islandManager.removeCoopPlayers(island, null)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
PlayerData playerData = getPlayerData(player);
|
|
playerData.setIsland(island.getOwnerUUID());
|
|
|
|
if (world == IslandWorld.NORMAL) {
|
|
if (!island.isWeatherSynchronized()) {
|
|
player.setPlayerTime(island.getTime(), this.plugin.getConfiguration().getBoolean("Island.Weather.Time.Cycle"));
|
|
player.setPlayerWeather(island.getWeather());
|
|
}
|
|
}
|
|
|
|
islandManager.updateFlight(player);
|
|
|
|
ScoreboardManager scoreboardManager = this.plugin.getScoreboardManager();
|
|
if (scoreboardManager != null) {
|
|
Island finalIsland = island;
|
|
Bukkit.getScheduler().runTask(this.plugin, () -> {
|
|
|
|
for (Player loopPlayer : Bukkit.getOnlinePlayers()) {
|
|
PlayerData targetPlayerData = getPlayerData(loopPlayer);
|
|
if (targetPlayerData == null) {
|
|
continue;
|
|
}
|
|
|
|
if (targetPlayerData.getOwner() != null &&
|
|
targetPlayerData.getOwner().equals(finalIsland.getOwnerUUID())) {
|
|
scoreboardManager.updatePlayerScoreboardType(loopPlayer);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
return;
|
|
} else {
|
|
if (messageManager != null) {
|
|
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", targetPlayerName));
|
|
}
|
|
}
|
|
}
|
|
|
|
LocationUtil.teleportPlayerToSpawn(player);
|
|
|
|
return;
|
|
}
|
|
|
|
HashMap<UUID, Visit> visitIslands = this.plugin.getVisitManager().getIslands();
|
|
|
|
for (UUID visitIslandList : visitIslands.keySet()) {
|
|
Visit visit = visitIslands.get(visitIslandList);
|
|
IslandLocation location = visit.getLocation(world);
|
|
|
|
if (location != null && LocationUtil.isLocationInLocationRadius(player.getLocation(), location.getLocation(), visit.getRadius())) {
|
|
Player targetPlayer = Bukkit.getServer().getPlayer(visitIslandList);
|
|
String targetPlayerName;
|
|
|
|
if (targetPlayer == null) {
|
|
targetPlayerName = new OfflinePlayer(visitIslandList).getName();
|
|
} else {
|
|
targetPlayerName = targetPlayer.getName();
|
|
}
|
|
|
|
if (banManager.hasIsland(visitIslandList) && this.plugin.getConfiguration().getBoolean("Island.Visitor.Banning")
|
|
&& banManager.getIsland(visitIslandList).isBanned(player.getUniqueId())) {
|
|
if (messageManager != null) {
|
|
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Banned.Island.Message").replace("%player", targetPlayerName));
|
|
}
|
|
} else {
|
|
org.bukkit.OfflinePlayer offlinePlayer = Bukkit.getServer().getOfflinePlayer(visitIslandList);
|
|
|
|
islandManager.loadIsland(offlinePlayer);
|
|
island = islandManager.getIsland(offlinePlayer);
|
|
|
|
if (island != null) {
|
|
if (island.getStatus() != IslandStatus.CLOSED || island.isCoopPlayer(player.getUniqueId())) {
|
|
if (island.getStatus() == IslandStatus.CLOSED && island.isCoopPlayer(player.getUniqueId())) {
|
|
if (islandManager.removeCoopPlayers(island, null)) {
|
|
islandManager.unloadIsland(island, Bukkit.getServer().getOfflinePlayer(visitIslandList));
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
PlayerData playerData = getPlayerData(player);
|
|
playerData.setIsland(visitIslandList);
|
|
|
|
if (world == IslandWorld.NORMAL) {
|
|
if (!island.isWeatherSynchronized()) {
|
|
player.setPlayerTime(island.getTime(), this.plugin.getConfiguration().getBoolean("Island.Weather.Time.Cycle"));
|
|
player.setPlayerWeather(island.getWeather());
|
|
}
|
|
}
|
|
|
|
islandManager.updateFlight(player);
|
|
|
|
return;
|
|
} else {
|
|
islandManager.unloadIsland(island, Bukkit.getServer().getOfflinePlayer(visitIslandList));
|
|
if (messageManager != null) {
|
|
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", targetPlayerName));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
LocationUtil.teleportPlayerToSpawn(player);
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|