Added placeholder for skill modifiers relative to ticket #829.

This commit is contained in:
Ka0rX 2023-05-13 11:46:29 +01:00
parent 15a8e6e796
commit 0627c73378

View File

@ -12,6 +12,7 @@ import net.Indyuce.mmocore.api.quest.PlayerQuests;
import net.Indyuce.mmocore.experience.PlayerProfessions; import net.Indyuce.mmocore.experience.PlayerProfessions;
import net.Indyuce.mmocore.experience.Profession; import net.Indyuce.mmocore.experience.Profession;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.skill.ClassSkill;
import net.Indyuce.mmocore.skill.RegisteredSkill; import net.Indyuce.mmocore.skill.RegisteredSkill;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -26,122 +27,124 @@ import java.util.UUID;
public class RPGPlaceholders extends PlaceholderExpansion { public class RPGPlaceholders extends PlaceholderExpansion {
@Override @Override
public boolean persist() { public boolean persist() {
return true; return true;
} }
@Override @Override
public boolean canRegister() { public boolean canRegister() {
return true; return true;
} }
@Override @Override
public String getAuthor() { public String getAuthor() {
return "Indyuce"; return "Indyuce";
} }
@Override @Override
public String getIdentifier() { public String getIdentifier() {
return "mmocore"; return "mmocore";
} }
@Override @Override
public String getVersion() { public String getVersion() {
return MMOCore.plugin.getDescription().getVersion(); return MMOCore.plugin.getDescription().getVersion();
} }
private static final String ERROR_PLACEHOLDER = " "; private static final String ERROR_PLACEHOLDER = " ";
@SuppressWarnings("DuplicateExpressions") @SuppressWarnings("DuplicateExpressions")
@Override @Override
public String onRequest(OfflinePlayer player, String identifier) { public String onRequest(OfflinePlayer player, String identifier) {
if (!PlayerData.has(player.getUniqueId())) if (!PlayerData.has(player.getUniqueId()))
return null; return null;
PlayerData playerData = PlayerData.get(player); PlayerData playerData = PlayerData.get(player);
if (identifier.equals("mana_icon")) if (identifier.equals("mana_icon"))
return playerData.getProfess().getManaDisplay().getIcon(); return playerData.getProfess().getManaDisplay().getIcon();
if (identifier.equals("mana_name")) if (identifier.equals("mana_name"))
return playerData.getProfess().getManaDisplay().getName(); return playerData.getProfess().getManaDisplay().getName();
if (identifier.equals("level")) if (identifier.equals("level"))
return String.valueOf(playerData.getLevel()); return String.valueOf(playerData.getLevel());
else if (identifier.startsWith("skill_level_")) { else if (identifier.startsWith("skill_level_")) {
String id = identifier.substring(12); String id = identifier.substring(12);
RegisteredSkill skill = Objects.requireNonNull(MMOCore.plugin.skillManager.getSkill(id), "Could not find skill with ID '" + id + "'"); RegisteredSkill skill = Objects.requireNonNull(MMOCore.plugin.skillManager.getSkill(id), "Could not find skill with ID '" + id + "'");
return String.valueOf(playerData.getSkillLevel(skill)); return String.valueOf(playerData.getSkillLevel(skill));
} } else if (identifier.startsWith("skill_modifier_")) {
else if(identifier.startsWith("mmocore_attribute_points_spent_")){ String[] ids = identifier.substring(15).split(":");
String attributeId=identifier.substring(31); String modifierId = ids[0];
PlayerAttributes.AttributeInstance attributeInstance=Objects.requireNonNull(playerData.getAttributes().getInstance(attributeId),"Could not find attribute with ID '"+attributeId+"'"); String skillId = ids[1];
return String.valueOf(attributeInstance.getSpent()); RegisteredSkill skill = Objects.requireNonNull(MMOCore.plugin.skillManager.getSkill(skillId), "Could not find skill with ID '" + skillId + "'");
} ClassSkill classSkill = playerData.getProfess().getSkill(skill);
double value = classSkill.toCastable(playerData).getModifier(modifierId);
return MythicLib.plugin.getMMOConfig().decimal.format(value);
} 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.equals("level_percent")) {
double current = playerData.getExperience(), next = playerData.getLevelUpExperience();
return MythicLib.plugin.getMMOConfig().decimal.format(current / next * 100);
} else if (identifier.equals("health"))
return StatManager.format("MAX_HEALTH", player.getPlayer().getHealth());
else if (identifier.equals("max_health"))
return StatManager.format("MAX_HEALTH", player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
else if (identifier.equals("level_percent")) { else if (identifier.equals("health_bar") && player.isOnline()) {
double current = playerData.getExperience(), next = playerData.getLevelUpExperience(); StringBuilder format = new StringBuilder();
return MythicLib.plugin.getMMOConfig().decimal.format(current / next * 100); double ratio = 20 * player.getPlayer().getHealth() / player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
} else if (identifier.equals("health")) for (double j = 1; j < 20; j++)
return StatManager.format("MAX_HEALTH", player.getPlayer().getHealth()); format.append(ratio >= j ? ChatColor.RED : ratio >= j - .5 ? ChatColor.DARK_RED : ChatColor.DARK_GRAY).append(AltChar.listSquare);
return format.toString();
} else if (identifier.equals("class"))
return playerData.getProfess().getName();
else if (identifier.equals("max_health")) else if (identifier.startsWith("profession_percent_")) {
return StatManager.format("MAX_HEALTH", player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); PlayerProfessions professions = playerData.getCollectionSkills();
String name = identifier.substring(19).replace(" ", "-").replace("_", "-").toLowerCase();
Profession profession = MMOCore.plugin.professionManager.get(name);
double current = professions.getExperience(profession), next = professions.getLevelUpExperience(profession);
return MythicLib.plugin.getMMOConfig().decimal.format(current / next * 100);
else if (identifier.equals("health_bar") && player.isOnline()) { } else if (identifier.equals("is_casting"))
StringBuilder format = new StringBuilder(); return String.valueOf(playerData.isCasting());
double ratio = 20 * player.getPlayer().getHealth() / player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
for (double j = 1; j < 20; j++)
format.append(ratio >= j ? ChatColor.RED : ratio >= j - .5 ? ChatColor.DARK_RED : ChatColor.DARK_GRAY).append(AltChar.listSquare);
return format.toString();
} else if (identifier.equals("class"))
return playerData.getProfess().getName();
else if (identifier.startsWith("profession_percent_")) { else if (identifier.equals("in_combat"))
PlayerProfessions professions = playerData.getCollectionSkills(); return String.valueOf(playerData.isInCombat());
String name = identifier.substring(19).replace(" ", "-").replace("_", "-").toLowerCase();
Profession profession = MMOCore.plugin.professionManager.get(name);
double current = professions.getExperience(profession), next = professions.getLevelUpExperience(profession);
return MythicLib.plugin.getMMOConfig().decimal.format(current / next * 100);
} else if (identifier.equals("is_casting")) else if (identifier.equals("pvp_mode"))
return String.valueOf(playerData.isCasting()); return String.valueOf(playerData.getCombat().isInPvpMode());
else if (identifier.equals("in_combat")) else if (identifier.startsWith("since_enter_combat"))
return String.valueOf(playerData.isInCombat()); return playerData.isInCombat() ? MythicLib.plugin.getMMOConfig().decimal.format((System.currentTimeMillis() - playerData.getCombat().getLastEntry()) / 1000.) : "-1";
else if (identifier.equals("pvp_mode")) else if (identifier.startsWith("invulnerability_left"))
return String.valueOf(playerData.getCombat().isInPvpMode()); return MythicLib.plugin.getMMOConfig().decimal.format(Math.max(0, (playerData.getCombat().getInvulnerableTill() - System.currentTimeMillis()) / 1000.));
else if (identifier.startsWith("since_enter_combat")) else if (identifier.startsWith("since_last_hit"))
return playerData.isInCombat() ? MythicLib.plugin.getMMOConfig().decimal.format((System.currentTimeMillis() - playerData.getCombat().getLastEntry()) / 1000.) : "-1"; return playerData.isInCombat() ? MythicLib.plugin.getMMOConfig().decimal.format((System.currentTimeMillis() - playerData.getCombat().getLastHit()) / 1000.) : "-1";
else if (identifier.startsWith("invulnerability_left")) else if (identifier.startsWith("bound_")) {
return MythicLib.plugin.getMMOConfig().decimal.format(Math.max(0, (playerData.getCombat().getInvulnerableTill() - System.currentTimeMillis()) / 1000.)); int slot = Math.max(0, Integer.parseInt(identifier.substring(6)));
return playerData.hasSkillBound(slot) ? playerData.getBoundSkill(slot).getSkill().getName()
: MMOCore.plugin.configManager.noSkillBoundPlaceholder;
else if (identifier.startsWith("since_last_hit")) } else if (identifier.startsWith("profession_experience_"))
return playerData.isInCombat() ? MythicLib.plugin.getMMOConfig().decimal.format((System.currentTimeMillis() - playerData.getCombat().getLastHit()) / 1000.) : "-1"; return MythicLib.plugin.getMMOConfig().decimal.format(
playerData.getCollectionSkills().getExperience(identifier.substring(22).replace(" ", "-").replace("_", "-").toLowerCase()));
else if (identifier.startsWith("bound_")) { else if (identifier.startsWith("profession_next_level_"))
int slot = Math.max(0, Integer.parseInt(identifier.substring(6))); return String.valueOf(PlayerData.get(player).getCollectionSkills()
return playerData.hasSkillBound(slot) ? playerData.getBoundSkill(slot).getSkill().getName() .getLevelUpExperience(identifier.substring(22).replace(" ", "-").replace("_", "-").toLowerCase()));
: MMOCore.plugin.configManager.noSkillBoundPlaceholder;
} else if (identifier.startsWith("profession_experience_")) else if (identifier.startsWith("party_count")) {
return MythicLib.plugin.getMMOConfig().decimal.format( final @Nullable AbstractParty party = playerData.getParty();
playerData.getCollectionSkills().getExperience(identifier.substring(22).replace(" ", "-").replace("_", "-").toLowerCase())); return party == null ? "0" : String.valueOf(party.countMembers());
} else if (identifier.startsWith("party_member_")) {
else if (identifier.startsWith("profession_next_level_"))
return String.valueOf(PlayerData.get(player).getCollectionSkills()
.getLevelUpExperience(identifier.substring(22).replace(" ", "-").replace("_", "-").toLowerCase()));
else if (identifier.startsWith("party_count")) {
final @Nullable AbstractParty party = playerData.getParty();
return party == null ? "0" : String.valueOf(party.countMembers());
}
else if (identifier.startsWith("party_member_")) {
final int n = Integer.parseInt(identifier.substring(13)) - 1; final int n = Integer.parseInt(identifier.substring(13)) - 1;
final @Nullable AbstractParty party = playerData.getParty(); final @Nullable AbstractParty party = playerData.getParty();
if (party == null) return ERROR_PLACEHOLDER; if (party == null) return ERROR_PLACEHOLDER;
@ -149,129 +152,107 @@ public class RPGPlaceholders extends PlaceholderExpansion {
final @Nullable PlayerData member = party.getMember(n); final @Nullable PlayerData member = party.getMember(n);
if (member == null) return ERROR_PLACEHOLDER; if (member == null) return ERROR_PLACEHOLDER;
return member.getPlayer().getName(); return member.getPlayer().getName();
} } else if (identifier.equals("online_friends")) {
else if (identifier.equals("online_friends")) {
int count = 0; int count = 0;
for (UUID friendId : playerData.getFriends()) for (UUID friendId : playerData.getFriends())
if (Bukkit.getPlayer(friendId) != null) count++; if (Bukkit.getPlayer(friendId) != null) count++;
return String.valueOf(count); return String.valueOf(count);
} } else if (identifier.startsWith("online_friend_")) {
else if (identifier.startsWith("online_friend_")) {
final int n = Integer.parseInt(identifier.substring(14)) - 1; final int n = Integer.parseInt(identifier.substring(14)) - 1;
if (n >= playerData.getFriends().size()) return ERROR_PLACEHOLDER; if (n >= playerData.getFriends().size()) return ERROR_PLACEHOLDER;
final @Nullable Player friend = Bukkit.getPlayer(playerData.getFriends().get(n)); final @Nullable Player friend = Bukkit.getPlayer(playerData.getFriends().get(n));
if (friend == null) return ERROR_PLACEHOLDER; if (friend == null) return ERROR_PLACEHOLDER;
return friend.getName(); return friend.getName();
} else if (identifier.startsWith("profession_"))
return String
.valueOf(playerData.getCollectionSkills().getLevel(identifier.substring(11).replace(" ", "-").replace("_", "-").toLowerCase()));
else if (identifier.equals("experience"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getExperience());
else if (identifier.equals("next_level"))
return String.valueOf(playerData.getLevelUpExperience());
else if (identifier.equals("class_points"))
return String.valueOf(playerData.getClassPoints());
else if (identifier.equals("skill_points"))
return String.valueOf(playerData.getSkillPoints());
else if (identifier.equals("attribute_points"))
return String.valueOf(playerData.getAttributePoints());
else if (identifier.equals("attribute_reallocation_points"))
return String.valueOf(playerData.getAttributeReallocationPoints());
else if (identifier.startsWith("attribute_"))
return String.valueOf(playerData.getAttributes()
.getAttribute(MMOCore.plugin.attributeManager.get(identifier.substring(10).toLowerCase().replace("_", "-"))));
else if (identifier.equals("mana"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getMana());
else if (identifier.equals("mana_bar"))
return playerData.getProfess().getManaDisplay().generateBar(playerData.getMana(), playerData.getStats().getStat("MAX_MANA"));
else if (identifier.startsWith("exp_multiplier_")) {
String format = identifier.substring(15).toLowerCase().replace("_", "-").replace(" ", "-");
Profession profession = format.equals("main") ? null : MMOCore.plugin.professionManager.get(format);
return MythicLib.plugin.getMMOConfig().decimal.format(MMOCore.plugin.boosterManager.getMultiplier(profession) * 100);
} else if (identifier.startsWith("exp_boost_")) {
String format = identifier.substring(10).toLowerCase().replace("_", "-").replace(" ", "-");
Profession profession = format.equals("main") ? null : MMOCore.plugin.professionManager.get(format);
return MythicLib.plugin.getMMOConfig().decimal.format((MMOCore.plugin.boosterManager.getMultiplier(profession) - 1) * 100);
} else if (identifier.equals("stamina"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getStamina());
else if (identifier.equals("stamina_bar")) {
StringBuilder format = new StringBuilder();
double ratio = 20 * playerData.getStamina() / playerData.getStats().getStat("MAX_STAMINA");
for (double j = 1; j < 20; j++)
format.append(ratio >= j ? MMOCore.plugin.configManager.staminaFull
: ratio >= j - .5 ? MMOCore.plugin.configManager.staminaHalf : MMOCore.plugin.configManager.staminaEmpty)
.append(AltChar.listSquare);
return format.toString();
} else if (identifier.startsWith("stat_")) {
final String stat = UtilityMethods.enumName(identifier.substring(5));
return StatManager.format(stat, playerData.getMMOPlayerData());
} else if (identifier.equals("stellium"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getStellium());
else if (identifier.equals("stellium_bar")) {
StringBuilder format = new StringBuilder();
double ratio = 20 * playerData.getStellium() / playerData.getStats().getStat("MAX_STELLIUM");
for (double j = 1; j < 20; j++)
format.append(ratio >= j ? ChatColor.BLUE : ratio >= j - .5 ? ChatColor.AQUA : ChatColor.WHITE).append(AltChar.listSquare);
return format.toString();
} else if (identifier.equals("quest")) {
PlayerQuests data = playerData.getQuestData();
return data.hasCurrent() ? data.getCurrent().getQuest().getName() : "None";
} else if (identifier.equals("quest_progress")) {
PlayerQuests data = playerData.getQuestData();
return data.hasCurrent() ? MythicLib.plugin.getMMOConfig().decimal
.format((double) data.getCurrent().getObjectiveNumber() / data.getCurrent().getQuest().getObjectives().size() * 100L) : "0";
} else if (identifier.equals("quest_objective")) {
PlayerQuests data = playerData.getQuestData();
return data.hasCurrent() ? data.getCurrent().getFormattedLore() : "None";
} else if (identifier.startsWith("guild_")) {
String placeholder = identifier.substring(6);
if (playerData.getGuild() == null)
return "";
if (placeholder.equalsIgnoreCase("name"))
return playerData.getGuild().getName();
else if (placeholder.equalsIgnoreCase("tag"))
return playerData.getGuild().getTag();
else if (placeholder.equalsIgnoreCase("leader"))
return Bukkit.getOfflinePlayer(playerData.getGuild().getOwner()).getName();
else if (placeholder.equalsIgnoreCase("members"))
return String.valueOf(playerData.getGuild().countMembers());
else if (placeholder.equalsIgnoreCase("online_members"))
return String.valueOf(playerData.getGuild().countOnlineMembers());
} }
else if (identifier.startsWith("profession_")) return null;
return String }
.valueOf(playerData.getCollectionSkills().getLevel(identifier.substring(11).replace(" ", "-").replace("_", "-").toLowerCase()));
else if (identifier.equals("experience"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getExperience());
else if (identifier.equals("next_level"))
return String.valueOf(playerData.getLevelUpExperience());
else if (identifier.equals("class_points"))
return String.valueOf(playerData.getClassPoints());
else if (identifier.equals("skill_points"))
return String.valueOf(playerData.getSkillPoints());
else if (identifier.equals("attribute_points"))
return String.valueOf(playerData.getAttributePoints());
else if (identifier.equals("attribute_reallocation_points"))
return String.valueOf(playerData.getAttributeReallocationPoints());
else if (identifier.startsWith("attribute_"))
return String.valueOf(playerData.getAttributes()
.getAttribute(MMOCore.plugin.attributeManager.get(identifier.substring(10).toLowerCase().replace("_", "-"))));
else if (identifier.equals("mana"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getMana());
else if (identifier.equals("mana_bar"))
return playerData.getProfess().getManaDisplay().generateBar(playerData.getMana(), playerData.getStats().getStat("MAX_MANA"));
else if (identifier.startsWith("exp_multiplier_")) {
String format = identifier.substring(15).toLowerCase().replace("_", "-").replace(" ", "-");
Profession profession = format.equals("main") ? null : MMOCore.plugin.professionManager.get(format);
return MythicLib.plugin.getMMOConfig().decimal.format(MMOCore.plugin.boosterManager.getMultiplier(profession) * 100);
}
else if (identifier.startsWith("exp_boost_")) {
String format = identifier.substring(10).toLowerCase().replace("_", "-").replace(" ", "-");
Profession profession = format.equals("main") ? null : MMOCore.plugin.professionManager.get(format);
return MythicLib.plugin.getMMOConfig().decimal.format((MMOCore.plugin.boosterManager.getMultiplier(profession) - 1) * 100);
}
else if (identifier.equals("stamina"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getStamina());
else if (identifier.equals("stamina_bar")) {
StringBuilder format = new StringBuilder();
double ratio = 20 * playerData.getStamina() / playerData.getStats().getStat("MAX_STAMINA");
for (double j = 1; j < 20; j++)
format.append(ratio >= j ? MMOCore.plugin.configManager.staminaFull
: ratio >= j - .5 ? MMOCore.plugin.configManager.staminaHalf : MMOCore.plugin.configManager.staminaEmpty)
.append(AltChar.listSquare);
return format.toString();
}
else if (identifier.startsWith("stat_")) {
final String stat = UtilityMethods.enumName(identifier.substring(5));
return StatManager.format(stat, playerData.getMMOPlayerData());
}
else if (identifier.equals("stellium"))
return MythicLib.plugin.getMMOConfig().decimal.format(playerData.getStellium());
else if (identifier.equals("stellium_bar")) {
StringBuilder format = new StringBuilder();
double ratio = 20 * playerData.getStellium() / playerData.getStats().getStat("MAX_STELLIUM");
for (double j = 1; j < 20; j++)
format.append(ratio >= j ? ChatColor.BLUE : ratio >= j - .5 ? ChatColor.AQUA : ChatColor.WHITE).append(AltChar.listSquare);
return format.toString();
}
else if (identifier.equals("quest")) {
PlayerQuests data = playerData.getQuestData();
return data.hasCurrent() ? data.getCurrent().getQuest().getName() : "None";
}
else if (identifier.equals("quest_progress")) {
PlayerQuests data = playerData.getQuestData();
return data.hasCurrent() ? MythicLib.plugin.getMMOConfig().decimal
.format( (double) data.getCurrent().getObjectiveNumber() / data.getCurrent().getQuest().getObjectives().size() * 100L) : "0";
}
else if (identifier.equals("quest_objective")) {
PlayerQuests data = playerData.getQuestData();
return data.hasCurrent() ? data.getCurrent().getFormattedLore() : "None";
}
else if (identifier.startsWith("guild_")) {
String placeholder = identifier.substring(6);
if (playerData.getGuild() == null)
return "";
if (placeholder.equalsIgnoreCase("name"))
return playerData.getGuild().getName();
else if (placeholder.equalsIgnoreCase("tag"))
return playerData.getGuild().getTag();
else if (placeholder.equalsIgnoreCase("leader"))
return Bukkit.getOfflinePlayer(playerData.getGuild().getOwner()).getName();
else if (placeholder.equalsIgnoreCase("members"))
return String.valueOf(playerData.getGuild().countMembers());
else if (placeholder.equalsIgnoreCase("online_members"))
return String.valueOf(playerData.getGuild().countOnlineMembers());
}
return null;
}
} }