diff --git a/src/main/java/net/Indyuce/mmocore/api/SoundEvent.java b/src/main/java/net/Indyuce/mmocore/api/SoundEvent.java index 47993004..122e0e1e 100644 --- a/src/main/java/net/Indyuce/mmocore/api/SoundEvent.java +++ b/src/main/java/net/Indyuce/mmocore/api/SoundEvent.java @@ -13,7 +13,8 @@ public enum SoundEvent { SELECT_CLASS, LEVEL_ATTRIBUTE, RESET_ATTRIBUTES, - NOT_ENOUGH_POINTS, + RESET_SKILLS + ,NOT_ENOUGH_POINTS, CANCEL_QUEST, START_QUEST, CLOSE_LOOT_CHEST; diff --git a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index f1089397..5ef8df4c 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -66,7 +66,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc */ @Nullable private PlayerClass profess; - private int level, classPoints, skillPoints, attributePoints, attributeReallocationPoints;// skillReallocationPoints, + private int level, classPoints, skillPoints, attributePoints, attributeReallocationPoints, skillReallocationPoints; private double experience; private double mana, stamina, stellium; private Guild guild; @@ -238,6 +238,19 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc return skillPoints; } + public void giveSkillReallocationPoints(int value) { + skillReallocationPoints+=value; + } + + public int countSkillPointsWhenReallocate() { + int sum = 0; + for(ClassSkill skill:getProfess().getSkills()) { + //0 if the skill is level 1(just unlocked) or 0 locked. + sum+=Math.max(0,getSkillLevel(skill.getSkill())-1); + } + return sum; + } + @Override public int getClaims(ExperienceObject object, ExperienceTable table, ExperienceItem item) { @@ -350,6 +363,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc attributeReallocationPoints = Math.max(0, value); } + public void setSkillReallocationPoints(int value) { + skillReallocationPoints = Math.max(0, value); + } + + public int getSkillReallocationPoints() { + return skillReallocationPoints; + } + public void setSkillPoints(int value) { skillPoints = Math.max(0, value); } @@ -851,7 +872,6 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc Validate.notNull(skill, "Skill cannot be null"); - if (boundSkills.size() < getProfess().getMaxBoundSkills()) boundSkills.add(skill); else @@ -875,7 +895,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc * checks if they could potentially upgrade to one of these * * @return If the player can change its current class to - * a subclass + * a subclass */ public boolean canChooseSubclass() { for (Subclass subclass : getProfess().getSubclasses()) diff --git a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/AdminCommandTreeNode.java b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/AdminCommandTreeNode.java index 0d06cb2f..83341125 100644 --- a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/AdminCommandTreeNode.java +++ b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/AdminCommandTreeNode.java @@ -25,6 +25,7 @@ public class AdminCommandTreeNode extends CommandTreeNode { addChild(new PointsCommandTreeNode("class", this, PlayerData::setClassPoints, PlayerData::giveClassPoints, PlayerData::getClassPoints)); addChild(new PointsCommandTreeNode("attribute", this, PlayerData::setAttributePoints, PlayerData::giveAttributePoints, PlayerData::getAttributePoints)); addChild(new PointsCommandTreeNode("attr-realloc", this, PlayerData::setAttributeReallocationPoints, PlayerData::giveAttributeReallocationPoints, PlayerData::getAttributeReallocationPoints)); + addChild(new PointsCommandTreeNode("skill-realloc",this,PlayerData::setSkillReallocationPoints,PlayerData::giveSkillReallocationPoints,PlayerData::getSkillReallocationPoints)); addChild(new SkillCommandTreeNode(this)); for (PlayerResource res : PlayerResource.values()) addChild(new ResourceCommandTreeNode(res.name().toLowerCase(), this, res)); diff --git a/src/main/java/net/Indyuce/mmocore/gui/SkillList.java b/src/main/java/net/Indyuce/mmocore/gui/SkillList.java index 24861a06..e1ab9e6c 100644 --- a/src/main/java/net/Indyuce/mmocore/gui/SkillList.java +++ b/src/main/java/net/Indyuce/mmocore/gui/SkillList.java @@ -4,6 +4,7 @@ import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.api.item.ItemTag; import io.lumine.mythic.lib.api.item.NBTItem; import net.Indyuce.mmocore.MMOCore; +import net.Indyuce.mmocore.api.SoundEvent; import net.Indyuce.mmocore.gui.api.InventoryClickContext; import net.Indyuce.mmocore.gui.api.item.InventoryItem; import net.Indyuce.mmocore.gui.api.item.SimplePlaceholderItem; @@ -14,6 +15,7 @@ import net.Indyuce.mmocore.gui.api.GeneratedInventory; import net.Indyuce.mmocore.gui.api.item.Placeholders; import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skill.RegisteredSkill; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.Sound; @@ -46,6 +48,23 @@ public class SkillList extends EditableInventory { if (function.equals("upgrade")) return new UpgradeItem(config); + if (function.equals("reallocation")) { + + return new InventoryItem(config) { + + @Override + public Placeholders getPlaceholders(GeneratedInventory inv, int n) { + Placeholders holders = new Placeholders(); + holders.register("skill_points", inv.getPlayerData().getSkillPoints()); + holders.register("points", inv.getPlayerData().getSkillReallocationPoints()); + holders.register("total", inv.getPlayerData().countSkillPointsWhenReallocate()); + return holders; + } + }; + } + + + if (function.equals("slot")) return new InventoryItem(config) { private final String none = MythicLib.plugin.parseColors(config.getString("no-skill")); @@ -308,6 +327,35 @@ public class SkillList extends EditableInventory { return; } + if(item.getFunction().equals("reallocation")) { + + + + int spent= getPlayerData().countSkillPointsWhenReallocate(); + + if (spent < 1) { + MMOCore.plugin.configManager.getSimpleMessage("no-skill-points-spent").send(player); + MMOCore.plugin.soundManager.getSound(SoundEvent.NOT_ENOUGH_POINTS).playTo(getPlayer()); + return; + } + + if (playerData.getSkillReallocationPoints() < 1) { + MMOCore.plugin.configManager.getSimpleMessage("not-skill-reallocation-point").send(player); + MMOCore.plugin.soundManager.getSound(SoundEvent.NOT_ENOUGH_POINTS).playTo(getPlayer()); + return; + } + + + for(ClassSkill skill:playerData.getProfess().getSkills()) { + playerData.setSkillLevel(skill.getSkill(), 1); + } + playerData.giveSkillPoints(spent); + playerData.setSkillReallocationPoints(playerData.getSkillReallocationPoints()-1); + MMOCore.plugin.configManager.getSimpleMessage("skill-points-reallocated", "points", "" + playerData.getSkillPoints()).send(player); + MMOCore.plugin.soundManager.getSound(SoundEvent.RESET_SKILLS).playTo(getPlayer()); + open(); + } + if (item.getFunction().equals("previous")) { player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1, 2); page--; diff --git a/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java b/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java index dbd35a15..8e7ce4d9 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/data/PlayerDataManager.java @@ -16,7 +16,7 @@ import java.util.*; public abstract class PlayerDataManager { private final static Map data = Collections.synchronizedMap(new HashMap<>()); - private DefaultPlayerData defaultData = new DefaultPlayerData(1, 0, 0, 0, 0); + private DefaultPlayerData defaultData = new DefaultPlayerData(1, 0, 0, 0, 0,0); public PlayerData get(OfflinePlayer player) { return get(player.getUniqueId()); @@ -134,7 +134,7 @@ public abstract class PlayerDataManager { public abstract void saveData(PlayerData data); public class DefaultPlayerData { - private final int level, classPoints, skillPoints, attributePoints, attrReallocPoints; + private final int level, classPoints, skillPoints, attributePoints, attrReallocPoints,skillReallocPoints; public DefaultPlayerData(ConfigurationSection config) { level = config.getInt("level", 1); @@ -142,14 +142,17 @@ public abstract class PlayerDataManager { skillPoints = config.getInt("skill-points"); attributePoints = config.getInt("attribute-points"); attrReallocPoints = config.getInt("attribute-realloc-points"); + skillReallocPoints=config.getInt("skill-realloc-points",0); } - public DefaultPlayerData(int level, int classPoints, int skillPoints, int attributePoints, int attrReallocPoints) { + public DefaultPlayerData(int level, int classPoints, int skillPoints, int attributePoints, int attrReallocPoints,int skillReallocPoints) { this.level = level; this.classPoints = classPoints; this.skillPoints = skillPoints; this.attributePoints = attributePoints; this.attrReallocPoints = attrReallocPoints; + this.skillReallocPoints=skillReallocPoints; + } public int getLevel() { @@ -172,6 +175,10 @@ public abstract class PlayerDataManager { return attributePoints; } + public int getSkillReallocPoints() { + return skillReallocPoints; + } + public void apply(PlayerData player) { player.setLevel(level); player.setClassPoints(classPoints); diff --git a/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java b/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java index 8fb601f1..bed11ea0 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/data/mysql/MySQLPlayerDataManager.java @@ -60,6 +60,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager { data.setClassPoints(result.getInt("class_points")); data.setSkillPoints(result.getInt("skill_points")); + data.setSkillReallocationPoints(result.getInt("skill_reallocation_points")); data.setAttributePoints(result.getInt("attribute_points")); data.setAttributeReallocationPoints(result.getInt("attribute_realloc_points")); data.setLevel(result.getInt("level")); @@ -126,6 +127,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager { data.setLevel(getDefaultData().getLevel()); data.setClassPoints(getDefaultData().getClassPoints()); data.setSkillPoints(getDefaultData().getSkillPoints()); + data.setSkillReallocationPoints(getDefaultData().getSkillReallocPoints()); data.setAttributePoints(getDefaultData().getAttributePoints()); data.setAttributeReallocationPoints(getDefaultData().getAttrReallocPoints()); data.setExperience(0); @@ -155,6 +157,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager { sql.updateData("class_points", data.getClassPoints()); sql.updateData("skill_points", data.getSkillPoints()); + sql.updateData("skill_reallocation_points",data.getSkillReallocationPoints()); sql.updateData("attribute_points", data.getAttributePoints()); sql.updateData("attribute_realloc_points", data.getAttributeReallocationPoints()); sql.updateData("level", data.getLevel()); diff --git a/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java b/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java index 6e6ddddb..c5872389 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/data/yaml/YAMLPlayerDataManager.java @@ -30,6 +30,7 @@ public class YAMLPlayerDataManager extends PlayerDataManager { data.setClassPoints(config.getInt("class-points", getDefaultData().getClassPoints())); data.setSkillPoints(config.getInt("skill-points", getDefaultData().getSkillPoints())); + data.setSkillReallocationPoints(config.getInt("skill-reallocation-points",getDefaultData().getSkillReallocPoints())); data.setAttributePoints(config.getInt("attribute-points", getDefaultData().getAttributePoints())); data.setAttributeReallocationPoints(config.getInt("attribute-realloc-points", getDefaultData().getAttrReallocPoints())); data.setLevel(config.getInt("level", getDefaultData().getLevel())); @@ -90,6 +91,7 @@ public class YAMLPlayerDataManager extends PlayerDataManager { config.set("class-points", data.getClassPoints()); config.set("skill-points", data.getSkillPoints()); + config.set("skill-reallocation-points",data.getSkillReallocationPoints()); config.set("attribute-points", data.getAttributePoints()); // config.set("skill-realloc-points", skillReallocationPoints); config.set("attribute-realloc-points", data.getAttributeReallocationPoints()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c8e19cb1..54f170b7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -31,9 +31,11 @@ default-playerdata: level: 1 class-points: 0 skill-points: 0 + skill-realloc-points: 0 attribute-points: 0 attribute-realloc-points: 0 + # The list of all conditions which must be met for the # BLOCK REGEN and BLOCK RESTRICTIONS to apply. Set to # 'custom-mine-conditions: []' to disable custom mining entirely. diff --git a/src/main/resources/default/gui/attribute-view.yml b/src/main/resources/default/gui/attribute-view.yml index 444a33e2..4722590d 100644 --- a/src/main/resources/default/gui/attribute-view.yml +++ b/src/main/resources/default/gui/attribute-view.yml @@ -2,6 +2,7 @@ # GUI display name name: Player Attributes + # Number of slots in your inventory. Must be # between 9 and 54 and must be a multiple of 9. slots: 27 @@ -11,70 +12,61 @@ items: slots: [26] function: reallocation item: CAULDRON - name: '&aReallocate Skill Points' + name: '&aAttribute Points' lore: - - '' - - 'You have spent a total of &6{total}&7 skill points.' - - '&7Right click to reallocate them.' - - '' - - '&eCosts 1 attribute reallocation point.' - - '&e◆ Attribute Reallocation Points: &6{points}' + - '' + - 'You have spent a total of &6{total}&7 attribute points.' + - '&7Right click to reallocate them.' + - '' + - '&eCosts 1 attribute reallocation point.' + - '&e◆ Attribute Reallocation Points: &6{points}' str: slots: [11] function: attribute_strength - shift-cost: 10 name: '&a{name}' item: GOLDEN_APPLE lore: # {buffs} returns amount of buffs - - '' - - '&7Points Spent: &6{spent}&7/&6{max}' - - '&7Current {name}: &6&l{current}' - - '' - - '&8When Leveled Up:' - - '&7 +{buff_weapon_damage}% Weapon Damage (&a+{total_weapon_damage}%&7)' - - '&7 +{buff_max_health}% Max Health (&a+{total_max_health}%&7)' - - '' - - '&eClick to level up for 1 attribute point.' - - '&eShift-Click to level up for {shift_points} attribute points.' - - '' - - '&e◆ Current Attribute Points: {attribute_points}' + - '' + - '&7Points Spent: &6{spent}&7/&6{max}' + - '&7Current {name}: &6&l{current}' + - '' + - '&8When Leveled Up:' + - '&7 +{buff_weapon_damage}% Weapon Damage (&a+{total_weapon_damage}%&7)' + - '&7 +{buff_max_health} Max Health (&a+{total_max_health}&7)' + - '' + - '&eClick to level up for 1 attribute point.' + - '&e◆ Current Attribute Points: {attribute_points}' dex: slots: [13] function: attribute_dexterity - shift-cost: 10 name: '&a{name}' item: LEATHER_BOOTS hide-flags: true lore: - - '' - - '&7Points Spent: &6{spent}&7/&6{max}' - - '&7Current {name}: &6&l{current}' - - '' - - '&8When Leveled Up:' - - '&7 +{buff_physical_damage}% Physical Damage (&a+{total_physical_damage}%&7)' - - '&7 +{buff_projectile_damage}% Projectile Damage (&a+{total_projectile_damage}%&7)' - - '&7 +{buff_attack_speed}% Attack Speed (&a+{total_attack_speed}&7)' - - '' - - '&eClick to level up for 1 attribute point.' - - '&eShift-Click to level up for {shift_points} attribute points.' - - '' - - '&e◆ Current Attribute Points: {attribute_points}' + - '' + - '&7Points Spent: &6{spent}&7/&6{max}' + - '&7Current {name}: &6&l{current}' + - '' + - '&8When Leveled Up:' + - '&7 +{buff_physical_damage}% Physical Damage (&a+{total_physical_damage}%&7)' + - '&7 +{buff_projectile_damage}% Projectile Damage (&a+{total_projectile_damage}%&7)' + - '&7 +{buff_attack_speed} Attack Speed (&a+{total_attack_speed}&7)' + - '' + - '&eClick to level up for 1 attribute point.' + - '&e◆ Current Attribute Points: {attribute_points}' int: slots: [15] function: attribute_intelligence - shift-cost: 10 name: '&a{name}' item: BOOK lore: - - '' - - '&7Points Spent: &6{spent}&7/&6{max}' - - '&7Current {name}: &6&l{current}' - - '' - - '&8When Leveled Up:' - - '&7 +{buff_magic_damage}% Magic Damage (&a+{total_magic_damage}%&7)' - - '&7 +{buff_cooldown_reduction}% Cooldown Reduction (&a+{total_cooldown_reduction}%&7)' - - '' - - '&eClick to level up for 1 attribute point.' - - '&eShift-Click to level up for {shift_points} attribute points.' - - '' - - '&e◆ Current Attribute Points: {attribute_points}' + - '' + - '&7Points Spent: &6{spent}&7/&6{max}' + - '&7Current {name}: &6&l{current}' + - '' + - '&8When Leveled Up:' + - '&7 +{buff_magic_damage}% Magic Damage (&a+{total_magic_damage}%&7)' + - '&7 +{buff_cooldown_reduction}% Cooldown Reduction (&a+{total_cooldown_reduction}%&7)' + - '' + - '&eClick to level up for 1 attribute point.' + - '&e◆ Current Attribute Points: {attribute_points}' diff --git a/src/main/resources/default/gui/skill-list.yml b/src/main/resources/default/gui/skill-list.yml index f3c5598c..8aeb0c00 100644 --- a/src/main/resources/default/gui/skill-list.yml +++ b/src/main/resources/default/gui/skill-list.yml @@ -33,6 +33,18 @@ items: name: '&aPrevious' lore: { } + reallocate: + slots: [26] + function: reallocation + item: CAULDRON + name: '&aReallocate Skill Points' + lore: + - '' + - 'You have spent a total of &6{total}&7 skill points.' + - '&7Right click to reallocate them.' + - '' + - '&eCosts 1 skill reallocation point.' + - '&e◆ Skill Reallocation Points: &6{points}' #switch: # @@ -87,11 +99,9 @@ items: upgrade: slots: [ 15 ] function: upgrade - shift-cost: 10 item: GREEN_STAINED_GLASS_PANE name: '&a&lUPGRADE {skill_caps}' lore: - '&7Costs 1 skill point.' - - '&7Shift-Click to spend {shift_points} points' - '' - '&eCurrent Skill Points: {skill_points}' diff --git a/src/main/resources/default/messages.yml b/src/main/resources/default/messages.yml index 0da94fa8..b74f51a5 100644 --- a/src/main/resources/default/messages.yml +++ b/src/main/resources/default/messages.yml @@ -1,30 +1,29 @@ - # Level & Experience level-up: -- '' -- '&eCongratulations, you reached level &6{level}&e!' -- '&eUse &6/p &eto see your new statistics!' -- '' + - '' + - '&eCongratulations, you reached level &6{level}&e!' + - '&eUse &6/p &eto see your new statistics!' + - '' profession-level-up: -- '&eYou are now level &6{level}&e in &6{profession}&e!' + - '&eYou are now level &6{level}&e in &6{profession}&e!' exp-notification: '%&f{profession} &e{progress} &e{ratio}%' exp-hologram: '&e+{exp} EXP!' class-select: '&eYou are now a &6{class}&e!' already-on-class: '&cYou are already a {class}.' death-exp-loss: -- '' -- '&4You died and lost {loss} experience.' -- '' + - '' + - '&4You died and lost {loss} experience.' + - '' # General booster-main: -- '&e' -- '&eA &6{multiplier}x&e EXP multiplier is now active!' -- '&e' + - '&e' + - '&eA &6{multiplier}x&e EXP multiplier is now active!' + - '&e' booster-skill: -- '&e' -- '&eA &6{multiplier}x&e &6{profession} &eEXP multiplier is now active!' -- '&e' + - '&e' + - '&eA &6{multiplier}x&e &6{profession} &eEXP multiplier is now active!' + - '&e' booster-expired: '&cExpired!' # Fishing Profession @@ -34,32 +33,32 @@ fish-out-water-crit: '&aCritical Fish!' # Player Input player-input: - anvil: - friend-request: 'Friend name..' - party-invite: 'Player name..' - guild-invite: 'Player name..' - guild-creation-tag: 'Guild tag..' - guild-creation-name: 'Guild name..' - chat: - friend-request: '&eWrite in the chat the player name.' - party-invite: '&eWrite in the chat the player you want to invite.' - guild-invite: '&eWrite in the chat the player you want to invite.' - guild-creation-tag: '&eWrite in the chat the TAG of the Guild you want to create.' - guild-creation-name: '&eWrite in the chat the name of the Guild you want to create.' - cancel: '&eWrite &c''cancel'' &eto cancel.' + anvil: + friend-request: 'Friend name..' + party-invite: 'Player name..' + guild-invite: 'Player name..' + guild-creation-tag: 'Guild tag..' + guild-creation-name: 'Guild name..' + chat: + friend-request: '&eWrite in the chat the player name.' + party-invite: '&eWrite in the chat the player you want to invite.' + guild-invite: '&eWrite in the chat the player you want to invite.' + guild-creation-tag: '&eWrite in the chat the TAG of the Guild you want to create.' + guild-creation-name: '&eWrite in the chat the name of the Guild you want to create.' + cancel: '&eWrite &c''cancel'' &eto cancel.' # Spell Casting casting: - action-bar: - ready: '&6[{index}] &a&l{skill}' - on-cooldown: '&6[{index}] &c&l{skill} &6(&c{cooldown}&6)' - no-mana: '&6[{index}] &9&l{skill}' - no-stamina: '&6[{index}] &9&l{skill}' - split: '&7 &7 - &7 ' - no-longer: '%&cYou cancelled skill casting.' - no-mana: '&cYou do not have enough {mana}!' - no-stamina: '&cYou do not have enough stamina!' - on-cooldown: '&cThis skill is on cooldown.' + action-bar: + ready: '&6[{index}] &a&l{skill}' + on-cooldown: '&6[{index}] &c&l{skill} &6(&c{cooldown}&6)' + no-mana: '&6[{index}] &9&l{skill}' + no-stamina: '&6[{index}] &9&l{skill}' + split: '&7 &7 - &7 ' + no-longer: '%&cYou cancelled skill casting.' + no-mana: '&cYou do not have enough {mana}!' + no-stamina: '&cYou do not have enough stamina!' + on-cooldown: '&cThis skill is on cooldown.' # Combat Log now-in-combat: '%&cYou are now in combat!' @@ -98,20 +97,20 @@ friend-request-cooldown: '&cPlease wait {cooldown}.' cant-request-to-yourself: '&cYou can''t send a request to yourself.' already-friends: '&cYou are already friends with {player}.' friend-request: -- '{"text":""}' -- '{"text":"&6{player} &ejust sent you a friend request!"}' -- '[{"text":" ","hoverEvent":{}},{"text":"&8[&a&lACCEPT&8]","clickEvent":{"action":"run_command","value":"/friends accept {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to accept!"}},{"text":"&r ","hoverEvent":{}},{"text":"&8[&c&lDENY&8]","clickEvent":{"action":"run_command","value":"/friends deny {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to deny."}}]' -- '{"text":""}' + - '{"text":""}' + - '{"text":"&6{player} &ejust sent you a friend request!"}' + - '[{"text":" ","hoverEvent":{}},{"text":"&8[&a&lACCEPT&8]","clickEvent":{"action":"run_command","value":"/friends accept {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to accept!"}},{"text":"&r ","hoverEvent":{}},{"text":"&8[&c&lDENY&8]","clickEvent":{"action":"run_command","value":"/friends deny {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to deny."}}]' + - '{"text":""}' # Parties party-chat: '&5[Party] {player}: {message}' sent-party-invite: '&eYou sent a party invite to &6{player}&e.' already-in-party: '&c{player} is already in your party.' party-invite: -- '{"text":""}' -- '{"text":"&6{player} &ehas invited you to their party!"}' -- '[{"text":" "},{"text":"&8[&a&lACCEPT&8]","clickEvent":{"action":"run_command","value":"/party accept {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to accept!"}},{"text":"&r "},{"text":"&8[&c&lDENY&8]","clickEvent":{"action":"run_command","value":"/party deny {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to deny."}}]' -- '{"text":""}' + - '{"text":""}' + - '{"text":"&6{player} &ehas invited you to their party!"}' + - '[{"text":" "},{"text":"&8[&a&lACCEPT&8]","clickEvent":{"action":"run_command","value":"/party accept {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to accept!"}},{"text":"&r "},{"text":"&8[&c&lDENY&8]","clickEvent":{"action":"run_command","value":"/party deny {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to deny."}}]' + - '{"text":""}' party-is-full: '&cSorry, your party is full.' party-joined: '&eYou successfully joined &6{owner}&e''s party.' party-joined-other: '&6{player}&e joined your party!' @@ -125,10 +124,10 @@ guild-chat: '&a[{tag}] {player}: {message}' sent-guild-invite: '&eYou sent a guild invite to &6{player}&e.' already-in-guild: '&c{player} is already in your guild.' guild-invite: -- '{"text":""}' -- '{"text":"&6{player} &ehas invited you to their guild!"}' -- '[{"text":" "},{"text":"&8[&a&lACCEPT&8]","clickEvent":{"action":"run_command","value":"/guild accept {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to accept!"}},{"text":"&r "},{"text":"&8[&c&lDENY&8]","clickEvent":{"action":"run_command","value":"/guild deny {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to deny."}}]' -- '{"text":""}' + - '{"text":""}' + - '{"text":"&6{player} &ehas invited you to their guild!"}' + - '[{"text":" "},{"text":"&8[&a&lACCEPT&8]","clickEvent":{"action":"run_command","value":"/guild accept {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to accept!"}},{"text":"&r "},{"text":"&8[&c&lDENY&8]","clickEvent":{"action":"run_command","value":"/guild deny {uuid}"},"hoverEvent":{"action":"show_text","value":"&eClick to deny."}}]' + - '{"text":""}' #guild-is-full: '&cSorry, your guild is full.' -Unused right now guild-joined: '&eYou successfully joined &6{owner}&e''s guild.' guild-joined-other: '&6{player}&e joined your guild!' @@ -136,11 +135,11 @@ transfer-guild-ownership: '&eYou were transfered the guild ownership.' kick-from-guild: '&eYou successfully kicked &6{player}&e from the guild.' guild-invite-cooldown: '&cPlease wait {cooldown} before inviting {player}.' guild-creation: - failed: "&cCouldn't create guild: {reason}" - reasons: - invalid-characters: "&eInvalid character(s)!" - invalid-length: "&eThe length must be between {min} and {max}!" - already-exists: "&eThat guild tag already exists!" + failed: "&cCouldn't create guild: {reason}" + reasons: + invalid-characters: "&eInvalid character(s)!" + invalid-length: "&eThe length must be between {min} and {max}!" + already-exists: "&eThat guild tag already exists!" # Quests already-on-quest: '&cYou are already on a quest.' @@ -151,9 +150,9 @@ quest-cooldown: '&cYou need to wait {delay}.' start-quest: '&eYou successfully started &6{quest}&e.' cant-choose-new-class: -- '&cYou need one class point to perform this action.' + - '&cYou need one class point to perform this action.' no-permission-for-class: -- "&cYou don't have the permission to choose this class." + - "&cYou don't have the permission to choose this class." # Attributes no-attribute-points-spent: '&cYou have not spent any attribute points.' not-attribute-reallocation-point: '&cYou do not have 1 reallocation point.' @@ -173,3 +172,6 @@ no-skill-bound: '&cYou don''t have any skill bound to this slot.' not-active-skill: '&cThis is not an active skill.' skill-max-level-hit: '&cYou already hit the max level for that skill.' no-skill-placeholder: 'No Skill Bound' +not-skill-reallocation-point: '&cYou do not have 1 skill reallocation point.' +no-skill-points-spent: '&cYou have not spent any skill points.' +skill-points-reallocated: '&eYou successfully reset your attributes. You now have &6{points} &eskill points.' diff --git a/src/main/resources/default/sounds.yml b/src/main/resources/default/sounds.yml index d7497c58..c6aafd65 100644 --- a/src/main/resources/default/sounds.yml +++ b/src/main/resources/default/sounds.yml @@ -19,7 +19,7 @@ select-class: UI_TOAST_CHALLENGE_COMPLETE level-attribute: ENTITY_PLAYER_LEVELUP reset-attributes: ENTITY_PLAYER_LEVELUP - +reset-skills: ENTITY_PLAYER_LEVELUP not-enough-points: ENTITY_VILLAGER_NO cancel-quest: ENTITY_VILLAGER_NO