diff --git a/MMOCore-API/pom.xml b/MMOCore-API/pom.xml index e06a0583..4de78a2a 100644 --- a/MMOCore-API/pom.xml +++ b/MMOCore-API/pom.xml @@ -139,6 +139,14 @@ provided + + fr.phoenixdevt + MMOProfiles-Dist + 1.0-SNAPSHOT + provided + true + + me.clip placeholderapi diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java index 634c741d..03ccdf50 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/MMOCore.java @@ -259,7 +259,7 @@ public class MMOCore extends JavaPlugin { * recognize what profess the player has and professes will be lost */ playerDataManager.setupAll(); - playerDataManager.registerEvents(EventPriority.NORMAL); + playerDataManager.registerEvents(EventPriority.NORMAL, EventPriority.NORMAL); // load guild data after loading player data dataProvider.getGuildManager().load(); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java index 352c9c97..53738674 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/player/attribute/PlayerAttributes.java @@ -128,6 +128,11 @@ public class PlayerAttributes { return spent; } + @Deprecated + public int getSpent() { + return getBase(); + } + public void setBase(int value) { spent = Math.max(0, value); @@ -165,10 +170,6 @@ public class PlayerAttributes { return (int) d; } - public int getSpent() { - return spent; - } - public AttributeModifier getModifier(String key) { return map.get(key); } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/PlayerQuests.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/PlayerQuests.java index 6acbd3b4..6e866a80 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/PlayerQuests.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/api/quest/PlayerQuests.java @@ -38,6 +38,7 @@ public class PlayerQuests implements Closable { bossbarNamespacedKey = new NamespacedKey(MMOCore.plugin, "mmocore_quest_progress_" + playerData.getUniqueId().toString()); bossbar = Bukkit.createBossBar(bossbarNamespacedKey, "", BarColor.PURPLE, BarStyle.SEGMENTED_20); bossbar.addPlayer(playerData.getPlayer()); + bossbar.setVisible(false); // Safety // Bossbar is disabled } else { diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java index 639c922d..c9c506cd 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java @@ -17,7 +17,6 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -73,12 +72,12 @@ public class RPGPlaceholders extends PlaceholderExpansion { RegisteredSkill skill = Objects.requireNonNull(MMOCore.plugin.skillManager.getSkill(id), "Could not find skill with ID '" + id + "'"); return String.valueOf(playerData.getSkillLevel(skill)); } - else if(identifier.startsWith("mmocore_attribute_points_spent_")){ - String attributeId=identifier.substring(31); - PlayerAttributes.AttributeInstance attributeInstance=Objects.requireNonNull(playerData.getAttributes().getInstance(attributeId),"Could not find attribute with ID '"+attributeId+"'"); - return String.valueOf(attributeInstance.getSpent()); - } + else if (identifier.startsWith("mmocore_attribute_points_spent_")) { + String attributeId = identifier.substring(31); + PlayerAttributes.AttributeInstance attributeInstance = Objects.requireNonNull(playerData.getAttributes().getInstance(attributeId), "Could not find attribute with ID '" + attributeId + "'"); + return String.valueOf(attributeInstance.getBase()); + } else if (identifier.equals("level_percent")) { double current = playerData.getExperience(), next = playerData.getLevelUpExperience(); diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/profile/MMOCoreProfileDataModule.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/profile/MMOCoreProfileDataModule.java new file mode 100644 index 00000000..1f410f74 --- /dev/null +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/profile/MMOCoreProfileDataModule.java @@ -0,0 +1,46 @@ +package net.Indyuce.mmocore.comp.profile; + +import fr.phoenixdevt.profile.placeholder.PlaceholderRequest; +import io.lumine.mythic.lib.MythicLib; +import io.lumine.mythic.lib.api.player.MMOPlayerData; +import io.lumine.mythic.lib.comp.profile.ProfileDataModuleImpl; +import net.Indyuce.mmocore.MMOCore; +import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.api.player.attribute.PlayerAttribute; +import net.Indyuce.mmocore.experience.Profession; + +public class MMOCoreProfileDataModule extends ProfileDataModuleImpl { + public MMOCoreProfileDataModule() { + super(MMOCore.plugin); + } + + @Override + public boolean hasPlaceholders() { + return true; + } + + @Override + public String getIdentifier() { + return "mmocore"; + } + + @Override + public void processPlaceholderRequest(PlaceholderRequest placeholderRequest) { + final PlayerData fictiveData = new PlayerData(new MMOPlayerData(placeholderRequest.getProfile().getUniqueId())); + MMOCore.plugin.playerDataManager.getDataHandler().loadData(fictiveData).thenRun(() -> { + placeholderRequest.addPlaceholder("class", fictiveData.getProfess().getName()); + placeholderRequest.addPlaceholder("level", fictiveData.getLevel()); + + for (PlayerAttribute attribute : MMOCore.plugin.attributeManager.getAll()) + placeholderRequest.addPlaceholder("attribute_" + attribute.getId().replace("-", "_"), fictiveData.getAttributes().getInstance(attribute).getBase()); + + for (Profession profession : MMOCore.plugin.professionManager.getAll()) + placeholderRequest.addPlaceholder("profession_" + profession.getId().replace("-", "_"), fictiveData.getCollectionSkills().getLevel(profession)); + + placeholderRequest.addPlaceholder("exp", MythicLib.plugin.getMMOConfig().decimal.format(fictiveData.getExperience())); + placeholderRequest.addPlaceholder("exp_next_level", MythicLib.plugin.getMMOConfig().decimal.format(fictiveData.getLevelUpExperience())); + + placeholderRequest.validate(); + }); + } +} diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/vault/VaultEconomy.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/vault/VaultEconomy.java index efa2c729..c00d0a2f 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/vault/VaultEconomy.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/comp/vault/VaultEconomy.java @@ -26,7 +26,9 @@ public class VaultEconomy { /** * @return If an economy plugin was found + * @deprecated Not needed. {@link MMOCore#economy} could be null and that's all */ + @Deprecated public boolean isValid() { return economy != null; } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/AbstractOfflinePlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/AbstractOfflinePlayerData.java deleted file mode 100644 index 7e5455c1..00000000 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/AbstractOfflinePlayerData.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.Indyuce.mmocore.manager.data; - -import net.Indyuce.mmocore.api.player.profess.PlayerClass; - -import java.util.UUID; - -public interface AbstractOfflinePlayerData { - - - public abstract void removeFriend(UUID uuid); - - public abstract boolean hasFriend(UUID uuid); - - public abstract PlayerClass getProfess(); - - public abstract int getLevel(); - - public abstract long getLastLogin(); -} diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java index 167569c8..a84bf5d5 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java @@ -1,9 +1,11 @@ package net.Indyuce.mmocore.manager.data; import io.lumine.mythic.lib.api.player.MMOPlayerData; +import io.lumine.mythic.lib.comp.profile.ProfileDataModuleImpl; import io.lumine.mythic.lib.data.SynchronizedDataManager; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.comp.profile.MMOCoreProfileDataModule; import net.Indyuce.mmocore.manager.data.yaml.YAMLPlayerDataHandler; import net.Indyuce.mmocore.player.DefaultPlayerData; import org.bukkit.configuration.ConfigurationSection; @@ -20,6 +22,11 @@ public class PlayerDataManager extends SynchronizedDataManager friends; - - @Deprecated - public MySQLOfflinePlayerData(UUID uuid) { - this.uuid = uuid; -/* - provider.getResult("SELECT * FROM mmocore_playerdata WHERE uuid = '" + uuid + "';", (result) -> { - try { - MythicLib.debug("MMOCoreSQL", "Loading OFFLINE data for '" + uuid + "'."); - if (!result.next()) { - level = 0; - lastLogin = 0; - profess = MMOCore.plugin.classManager.getDefaultClass(); - friends = new ArrayList<>(); - MythicLib.debug("MMOCoreSQL", "Default OFFLINE data loaded."); - } else { - level = result.getInt("level"); - lastLogin = result.getLong("last_login"); - profess = isEmpty(result.getString("class")) ? MMOCore.plugin.classManager.getDefaultClass() : MMOCore.plugin.classManager.get(result.getString("class")); - if (!isEmpty(result.getString("friends"))) - MMOCoreUtils.jsonArrayToList(result.getString("friends")).forEach(str -> friends.add(UUID.fromString(str))); - else friends = new ArrayList<>(); - MythicLib.debug("MMOCoreSQL", "Saved OFFLINE data loaded."); - } - } catch (SQLException e) { - e.printStackTrace(); - } - }); */ - } - - @Override - @NotNull - public UUID getUniqueId() { - return uuid; - } - - @Override - public void removeFriend(UUID uuid) { - // TODO recode - // friends.remove(uuid); - // new PlayerDataTableUpdater(provider, uuid).updateData("friends", friends.stream().map(UUID::toString).collect(Collectors.toList())); - } - - @Override - public boolean hasFriend(UUID uuid) { - return friends.contains(uuid); - } - - @Override - public PlayerClass getProfess() { - return profess; - } - - @Override - public int getLevel() { - return level; - } - - @Override - public long getLastLogin() { - return lastLogin; - } + return new SQLOfflinePlayerData(uuid); } } diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/SQLOfflinePlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/SQLOfflinePlayerData.java new file mode 100644 index 00000000..0dd2ae9c --- /dev/null +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/sql/SQLOfflinePlayerData.java @@ -0,0 +1,81 @@ +package net.Indyuce.mmocore.manager.data.sql; + +import net.Indyuce.mmocore.api.player.profess.PlayerClass; +import net.Indyuce.mmocore.manager.data.OfflinePlayerData; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.UUID; + +/** + * @deprecated Not implemented yet + */ +@Deprecated +public class SQLOfflinePlayerData implements OfflinePlayerData { + private final UUID uuid; + private int level; + private long lastLogin; + private PlayerClass profess; + private List friends; + + @Deprecated + public SQLOfflinePlayerData(UUID uuid) { + this.uuid = uuid; +/* + provider.getResult("SELECT * FROM mmocore_playerdata WHERE uuid = '" + uuid + "';", (result) -> { + try { + MythicLib.debug("MMOCoreSQL", "Loading OFFLINE data for '" + uuid + "'."); + if (!result.next()) { + level = 0; + lastLogin = 0; + profess = MMOCore.plugin.classManager.getDefaultClass(); + friends = new ArrayList<>(); + MythicLib.debug("MMOCoreSQL", "Default OFFLINE data loaded."); + } else { + level = result.getInt("level"); + lastLogin = result.getLong("last_login"); + profess = isEmpty(result.getString("class")) ? MMOCore.plugin.classManager.getDefaultClass() : MMOCore.plugin.classManager.get(result.getString("class")); + if (!isEmpty(result.getString("friends"))) + MMOCoreUtils.jsonArrayToList(result.getString("friends")).forEach(str -> friends.add(UUID.fromString(str))); + else friends = new ArrayList<>(); + MythicLib.debug("MMOCoreSQL", "Saved OFFLINE data loaded."); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); */ + } + + @Override + @NotNull + public UUID getUniqueId() { + return uuid; + } + + @Override + public void removeFriend(UUID uuid) { + // TODO recode + // friends.remove(uuid); + // new PlayerDataTableUpdater(provider, uuid).updateData("friends", friends.stream().map(UUID::toString).collect(Collectors.toList())); + } + + @Override + public boolean hasFriend(UUID uuid) { + return friends.contains(uuid); + } + + @Override + public PlayerClass getProfess() { + return profess; + } + + @Override + public int getLevel() { + return level; + } + + @Override + public long getLastLogin() { + return lastLogin; + } +} diff --git a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLOfflinePlayerData.java b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLOfflinePlayerData.java index 06e593f4..0ce81e67 100644 --- a/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLOfflinePlayerData.java +++ b/MMOCore-API/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLOfflinePlayerData.java @@ -9,6 +9,9 @@ import net.Indyuce.mmocore.api.ConfigFile; import net.Indyuce.mmocore.manager.data.OfflinePlayerData; import org.jetbrains.annotations.NotNull; +/** + * @deprecated Not implemented yet + */ @Deprecated public class YAMLOfflinePlayerData implements OfflinePlayerData { private final UUID uuid; diff --git a/MMOCore-Dist/src/main/resources/plugin.yml b/MMOCore-Dist/src/main/resources/plugin.yml index 0b937b09..73f9f2c2 100644 --- a/MMOCore-Dist/src/main/resources/plugin.yml +++ b/MMOCore-Dist/src/main/resources/plugin.yml @@ -5,7 +5,7 @@ author: Indyuce description: ${project.description} loadbefore: [ MMOItems,MythicDungeons ] depend: [ MythicLib ] -softdepend: [ Vault,MythicMobs,PlaceholderAPI,Residence,Citizens,ProtocolLib,OBTeam ] +softdepend: [ Vault,MythicMobs,MMOProfiles,PlaceholderAPI,Residence,Citizens,ProtocolLib,OBTeam ] api-version: 1.13 commands: mmocore: