forked from Upstream/mmocore
Merged OfflinePlayerData and OfflinePlayerValues
This commit is contained in:
parent
2df5d86f25
commit
54ed7d8fdb
@ -1,40 +1,31 @@
|
||||
package net.Indyuce.mmocore.api.player;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.Indyuce.mmocore.api.ConfigFile;
|
||||
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
|
||||
|
||||
public class OfflinePlayerData {
|
||||
public abstract class OfflinePlayerData {
|
||||
private final UUID uuid;
|
||||
private final PlayerData data;
|
||||
|
||||
/*
|
||||
* supports offline player data operations like friend removals which can't
|
||||
* be handled when their player data is not loaded in the data map.
|
||||
*/
|
||||
public OfflinePlayerData(UUID uuid) {
|
||||
data = PlayerData.isLoaded(this.uuid = uuid) ? PlayerData.get(uuid) : null;
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
public boolean isLoaded() {
|
||||
return data != null;
|
||||
public UUID getUniqueId() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public void removeFriend(UUID uuid) {
|
||||
if (isLoaded()) {
|
||||
data.removeFriend(uuid);
|
||||
return;
|
||||
}
|
||||
public abstract void removeFriend(UUID uuid);
|
||||
|
||||
ConfigFile config = new ConfigFile(this.uuid);
|
||||
List<String> friends = config.getConfig().getStringList("friends");
|
||||
friends.remove(uuid.toString());
|
||||
config.getConfig().set("friends", friends);
|
||||
config.save();
|
||||
}
|
||||
public abstract boolean hasFriend(UUID uuid);
|
||||
|
||||
public boolean hasFriend(UUID uuid) {
|
||||
return isLoaded() ? data.hasFriend(uuid) : new ConfigFile(this.uuid).getConfig().getStringList("friends").contains(uuid.toString());
|
||||
public abstract PlayerClass getProfess();
|
||||
|
||||
public abstract int getLevel();
|
||||
|
||||
public abstract long getLastLogin();
|
||||
|
||||
public static OfflinePlayerData get(UUID uuid) {
|
||||
return PlayerData.isLoaded(uuid) ? PlayerData.get(uuid) : new SimpleOfflinePlayerData(uuid);
|
||||
}
|
||||
}
|
||||
|
@ -55,9 +55,7 @@ import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.version.VersionSound;
|
||||
|
||||
public class PlayerData {
|
||||
|
||||
private final UUID uuid;
|
||||
public class PlayerData extends OfflinePlayerData {
|
||||
|
||||
/*
|
||||
* is updated everytime the player joins the server. it is kept when the
|
||||
@ -96,7 +94,8 @@ public class PlayerData {
|
||||
private static Map<UUID, PlayerData> playerData = new HashMap<>();
|
||||
|
||||
private PlayerData(Player player) {
|
||||
uuid = player.getUniqueId();
|
||||
super(player.getUniqueId());
|
||||
|
||||
setPlayer(player);
|
||||
playerStats = new PlayerStats(this);
|
||||
|
||||
@ -115,7 +114,8 @@ public class PlayerData {
|
||||
this.mana = getStats().getStat(StatType.MAX_MANA);
|
||||
this.stamina = getStats().getStat(StatType.MAX_STAMINA);
|
||||
this.stellium = getStats().getStat(StatType.MAX_STELLIUM);
|
||||
if (config.contains("guild")) this.guild = MMOCore.plugin.guildManager.stillInGuild(getUniqueId(), config.getString("guild"));
|
||||
if (config.contains("guild"))
|
||||
this.guild = MMOCore.plugin.guildManager.stillInGuild(getUniqueId(), config.getString("guild"));
|
||||
if (config.contains("attribute"))
|
||||
attributes.load(config.getConfigurationSection("attribute"));
|
||||
if (config.contains("profession"))
|
||||
@ -162,9 +162,11 @@ public class PlayerData {
|
||||
config.set("waypoints", new ArrayList<>(waypoints));
|
||||
config.set("friends", toStringList(friends));
|
||||
config.set("last-login", lastLogin);
|
||||
if(guild != null) config.set("guild", guild.getId());
|
||||
else config.set("guild", null);
|
||||
|
||||
if (guild != null)
|
||||
config.set("guild", guild.getId());
|
||||
else
|
||||
config.set("guild", null);
|
||||
|
||||
config.set("skill", null);
|
||||
skills.entrySet().forEach(entry -> config.set("skill." + entry.getKey(), entry.getValue()));
|
||||
|
||||
@ -246,44 +248,6 @@ public class PlayerData {
|
||||
return playerData.values();
|
||||
}
|
||||
|
||||
/**
|
||||
* START OF EXPERIMENTAL CODE
|
||||
*
|
||||
* This must be more simple to do than my 2AM brain could think of...
|
||||
* - Aria
|
||||
*/
|
||||
|
||||
private static Map<UUID, PlayerDataOfflineValues> offlineValues = new HashMap<>();
|
||||
public static PlayerDataOfflineValues getOfflineValues(UUID uuid) {
|
||||
if(!offlineValues.containsKey(uuid))
|
||||
offlineValues.put(uuid, new PlayerDataOfflineValues(uuid));
|
||||
return offlineValues.get(uuid) ;
|
||||
}
|
||||
|
||||
public static class PlayerDataOfflineValues {
|
||||
// Values can be added as they are needed
|
||||
private final PlayerClass profess;
|
||||
private final int level;
|
||||
private final long lastLogin;
|
||||
|
||||
public PlayerDataOfflineValues(UUID uuid) {
|
||||
FileConfiguration config = new ConfigFile(uuid).getConfig();
|
||||
this.profess = MMOCore.plugin.classManager.get(config.getString("class"));
|
||||
this.level = config.getInt("level");
|
||||
this.lastLogin = config.getLong("last-login");
|
||||
}
|
||||
|
||||
public PlayerClass getProfess()
|
||||
{ return profess; }
|
||||
public int getLevel()
|
||||
{ return level; }
|
||||
public long getLastLogin()
|
||||
{ return lastLogin; }
|
||||
}
|
||||
/**
|
||||
* END OF EXPERIMENTAL CODE
|
||||
*/
|
||||
|
||||
private PlayerData setPlayer(Player player) {
|
||||
this.player = player;
|
||||
this.lastLogin = System.currentTimeMillis();
|
||||
@ -306,10 +270,7 @@ public class PlayerData {
|
||||
return player;
|
||||
}
|
||||
|
||||
public UUID getUniqueId() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLastLogin() {
|
||||
return lastLogin;
|
||||
}
|
||||
@ -318,6 +279,7 @@ public class PlayerData {
|
||||
return lastFriendRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLevel() {
|
||||
return Math.max(1, level);
|
||||
}
|
||||
@ -446,10 +408,12 @@ public class PlayerData {
|
||||
friends.add(uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFriend(UUID uuid) {
|
||||
friends.remove(uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasFriend(UUID uuid) {
|
||||
return friends.contains(uuid);
|
||||
}
|
||||
@ -518,13 +482,13 @@ public class PlayerData {
|
||||
public void giveExperience(int value) {
|
||||
giveExperience(value, null);
|
||||
}
|
||||
|
||||
|
||||
public void giveExperience(int value, Location loc) {
|
||||
if (profess == null || hasReachedMaxLevel()) {
|
||||
setExperience(0);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// display hologram
|
||||
if (MMOItems.plugin.getConfig().getBoolean("game-indicators.exp.enabled")) {
|
||||
if (loc != null && MMOCore.plugin.hologramSupport != null)
|
||||
@ -570,6 +534,7 @@ public class PlayerData {
|
||||
return experience;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerClass getProfess() {
|
||||
return profess == null ? MMOCore.plugin.classManager.getDefaultClass() : profess;
|
||||
}
|
||||
@ -637,7 +602,7 @@ public class PlayerData {
|
||||
public boolean canSeeActionBar() {
|
||||
return actionBarTimeOut < System.currentTimeMillis();
|
||||
}
|
||||
|
||||
|
||||
public void setActionBarTimeOut(long timeOut) {
|
||||
actionBarTimeOut = System.currentTimeMillis() + (timeOut * 50);
|
||||
}
|
||||
@ -824,6 +789,6 @@ public class PlayerData {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj != null && obj instanceof PlayerData && ((PlayerData) obj).uuid.equals(uuid);
|
||||
return obj != null && obj instanceof PlayerData && ((PlayerData) obj).getUniqueId().equals(getUniqueId());
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,50 @@
|
||||
package net.Indyuce.mmocore.api.player;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.ConfigFile;
|
||||
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
|
||||
|
||||
public class SimpleOfflinePlayerData extends OfflinePlayerData {
|
||||
private final ConfigFile config;
|
||||
|
||||
/*
|
||||
* supports offline player data operations like friend removals which can't
|
||||
* be handled when their player data is not loaded in the data map.
|
||||
*/
|
||||
public SimpleOfflinePlayerData(UUID uuid) {
|
||||
super(uuid);
|
||||
|
||||
config = new ConfigFile(uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFriend(UUID uuid) {
|
||||
List<String> friends = config.getConfig().getStringList("friends");
|
||||
friends.remove(uuid.toString());
|
||||
config.getConfig().set("friends", friends);
|
||||
config.save();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasFriend(UUID uuid) {
|
||||
return config.getConfig().getStringList("friends").contains(uuid.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayerClass getProfess() {
|
||||
return config.getConfig().contains("class") ? MMOCore.plugin.classManager.get(config.getConfig().getString("class")) : MMOCore.plugin.classManager.getDefaultClass();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLevel() {
|
||||
return config.getConfig().getInt("level");
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLastLogin() {
|
||||
return config.getConfig().getLong("last-login");
|
||||
}
|
||||
}
|
@ -47,7 +47,7 @@ public class FriendsCommand extends BukkitCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (new OfflinePlayerData(((Player) sender).getUniqueId()).hasFriend(uuid)) {
|
||||
if (OfflinePlayerData.get(((Player) sender).getUniqueId()).hasFriend(uuid)) {
|
||||
MMOCore.plugin.requestManager.unregisterRequest(uuid);
|
||||
return true;
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ public class EditableFriendRemoval extends EditableInventory {
|
||||
public void whenClicked(InventoryClickEvent event, InventoryItem item) {
|
||||
if (item.getFunction().equals("yes")) {
|
||||
playerData.removeFriend(friend.getUniqueId());
|
||||
new OfflinePlayerData(friend.getUniqueId()).removeFriend(playerData.getUniqueId());
|
||||
OfflinePlayerData.get(friend.getUniqueId()).removeFriend(playerData.getUniqueId());
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
MMOCore.plugin.configManager.getSimpleMessage("no-longer-friends", "unfriend", friend.getName()).send(player);
|
||||
last.open();
|
||||
|
@ -17,8 +17,8 @@ import org.bukkit.inventory.meta.SkullMeta;
|
||||
import net.Indyuce.mmocore.MMOCore;
|
||||
import net.Indyuce.mmocore.api.input.PlayerInput.InputType;
|
||||
import net.Indyuce.mmocore.api.math.format.DelayFormat;
|
||||
import net.Indyuce.mmocore.api.player.OfflinePlayerData;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||
import net.Indyuce.mmocore.api.player.PlayerData.PlayerDataOfflineValues;
|
||||
import net.Indyuce.mmocore.gui.api.EditableInventory;
|
||||
import net.Indyuce.mmocore.gui.api.GeneratedInventory;
|
||||
import net.Indyuce.mmocore.gui.api.PluginInventory;
|
||||
@ -36,8 +36,7 @@ public class EditableGuildView extends EditableInventory {
|
||||
|
||||
@Override
|
||||
public InventoryItem load(String function, ConfigurationSection config) {
|
||||
return function.equals("member") ? new MemberItem(config) : (function.equals("next") || function.equals("previous")
|
||||
|| function.equals("disband") || function.equals("invite")) ? new ConditionalItem(function, config) : new NoPlaceholderItem(config);
|
||||
return function.equals("member") ? new MemberItem(config) : (function.equals("next") || function.equals("previous") || function.equals("disband") || function.equals("invite")) ? new ConditionalItem(function, config) : new NoPlaceholderItem(config);
|
||||
}
|
||||
|
||||
public class MemberDisplayItem extends InventoryPlaceholderItem {
|
||||
@ -49,25 +48,16 @@ public class EditableGuildView extends EditableInventory {
|
||||
public Placeholders getPlaceholders(PluginInventory inv, int n) {
|
||||
UUID uuid = inv.getPlayerData().getGuild().getMembers().get(n);
|
||||
Placeholders holders = new Placeholders();
|
||||
/**
|
||||
* Will never be null since a players name
|
||||
* will always be recorded if they've been in a guild
|
||||
*/
|
||||
/*
|
||||
* Will never be null since a players name will always be recorded
|
||||
* if they've been in a guild
|
||||
*/
|
||||
holders.register("name", Bukkit.getOfflinePlayer(uuid).getName());
|
||||
|
||||
if(PlayerData.get(uuid) == null) {
|
||||
PlayerDataOfflineValues pdov = PlayerData.getOfflineValues(uuid);
|
||||
holders.register("class", pdov.getProfess().getName());
|
||||
holders.register("level", "" + pdov.getLevel());
|
||||
holders.register("since", new DelayFormat(2).format(System.currentTimeMillis() - pdov.getLastLogin()));
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayerData member = PlayerData.get(uuid);
|
||||
holders.register("class", member.getProfess().getName());
|
||||
holders.register("level", "" + member.getLevel());
|
||||
holders.register("since", new DelayFormat(2).format(System.currentTimeMillis() - member.getLastLogin()));
|
||||
}
|
||||
|
||||
OfflinePlayerData offline = OfflinePlayerData.get(uuid);
|
||||
holders.register("class", offline.getProfess().getName());
|
||||
holders.register("level", offline.getLevel());
|
||||
holders.register("since", new DelayFormat(2).format(System.currentTimeMillis() - offline.getLastLogin()));
|
||||
|
||||
return holders;
|
||||
}
|
||||
@ -121,10 +111,10 @@ public class EditableGuildView extends EditableInventory {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class ConditionalItem extends NoPlaceholderItem {
|
||||
private final String function;
|
||||
|
||||
|
||||
public ConditionalItem(String func, ConfigurationSection config) {
|
||||
super(config);
|
||||
this.function = func;
|
||||
@ -133,14 +123,13 @@ public class EditableGuildView extends EditableInventory {
|
||||
@Override
|
||||
public ItemStack display(GeneratedInventory invpar, int n) {
|
||||
GuildViewInventory inv = (GuildViewInventory) invpar;
|
||||
|
||||
if(function.equals("next"))
|
||||
if(inv.getPage() == (int) Math.ceil((inv.getPlayerData().getGuild().getMembers().count() + 20) / inv.getByFunction("member").getSlots().size()))
|
||||
|
||||
if (function.equals("next"))
|
||||
if (inv.getPage() == (int) Math.ceil((inv.getPlayerData().getGuild().getMembers().count() + 20) / inv.getByFunction("member").getSlots().size()))
|
||||
return null;
|
||||
if(function.equals("previous") && inv.getPage() == 1)
|
||||
if (function.equals("previous") && inv.getPage() == 1)
|
||||
return null;
|
||||
if((function.equals("disband") || function.equals("invite")) && !inv.getPlayerData()
|
||||
.getGuild().getOwner().equals(inv.getPlayer().getUniqueId()))
|
||||
if ((function.equals("disband") || function.equals("invite")) && !inv.getPlayerData().getGuild().getOwner().equals(inv.getPlayer().getUniqueId()))
|
||||
return null;
|
||||
return super.display(inv, n);
|
||||
}
|
||||
@ -157,19 +146,12 @@ public class EditableGuildView extends EditableInventory {
|
||||
public GuildViewInventory(PlayerData playerData, EditableInventory editable) {
|
||||
super(playerData, editable);
|
||||
|
||||
maxpages = (int) Math.ceil((playerData.getGuild().getMembers().count() + 20) /
|
||||
editable.getByFunction("member").getSlots().size());
|
||||
maxpages = (int) Math.ceil((playerData.getGuild().getMembers().count() + 20) / editable.getByFunction("member").getSlots().size());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String calculateName() {
|
||||
return getName()
|
||||
.replace("{online_players}", "" + getPlayerData().getGuild().getMembers().countOnline())
|
||||
.replace("{page}", "" + page)
|
||||
.replace("{maxpages}", "" + maxpages)
|
||||
.replace("{players}", "" + getPlayerData().getGuild().getMembers().count())
|
||||
.replace("{tag}", getPlayerData().getGuild().getTag())
|
||||
.replace("{name}", getPlayerData().getGuild().getName());
|
||||
return getName().replace("{online_players}", "" + getPlayerData().getGuild().getMembers().countOnline()).replace("{page}", "" + page).replace("{maxpages}", "" + maxpages).replace("{players}", "" + getPlayerData().getGuild().getMembers().count()).replace("{tag}", getPlayerData().getGuild().getTag()).replace("{name}", getPlayerData().getGuild().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -180,12 +162,18 @@ public class EditableGuildView extends EditableInventory {
|
||||
player.closeInventory();
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.getFunction().equals("next") && page != maxpages)
|
||||
{ page++; open(); return; }
|
||||
|
||||
if (item.getFunction().equals("previous") && page != 1)
|
||||
{ page--; open(); return; }
|
||||
if (item.getFunction().equals("next") && page != maxpages) {
|
||||
page++;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.getFunction().equals("previous") && page != 1) {
|
||||
page--;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.getFunction().equals("disband")) {
|
||||
if (!playerData.getGuild().getOwner().equals(playerData.getUniqueId()))
|
||||
@ -195,16 +183,17 @@ public class EditableGuildView extends EditableInventory {
|
||||
player.closeInventory();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (item.getFunction().equals("invite")) {
|
||||
if (!playerData.getGuild().getOwner().equals(playerData.getUniqueId()))
|
||||
return;
|
||||
|
||||
/**if (playerData.getGuild().getMembers().count() >= max) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("guild-is-full").send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
return;
|
||||
}*/
|
||||
|
||||
/**
|
||||
* if (playerData.getGuild().getMembers().count() >= max) {
|
||||
* MMOCore.plugin.configManager.getSimpleMessage("guild-is-full").send(player);
|
||||
* player.playSound(player.getLocation(),
|
||||
* Sound.ENTITY_VILLAGER_NO, 1, 1); return; }
|
||||
*/
|
||||
|
||||
MMOCore.plugin.configManager.newPlayerInput(player, InputType.GUILD_INVITE, (input) -> {
|
||||
Player target = Bukkit.getPlayer(input);
|
||||
@ -240,7 +229,7 @@ public class EditableGuildView extends EditableInventory {
|
||||
if (item.getFunction().equals("member") && event.getAction() == InventoryAction.PICKUP_HALF && !NBTItem.get(event.getCurrentItem()).getString("uuid").isEmpty()) {
|
||||
if (!playerData.getGuild().getOwner().equals(playerData.getUniqueId()))
|
||||
return;
|
||||
|
||||
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(UUID.fromString(NBTItem.get(event.getCurrentItem()).getString("uuid")));
|
||||
if (target.equals(player))
|
||||
return;
|
||||
@ -250,8 +239,9 @@ public class EditableGuildView extends EditableInventory {
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public int getPage()
|
||||
{ return page; }
|
||||
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user