forked from Upstream/mmocore
Added max-point-spent for Skill Trees + Debug
This commit is contained in:
parent
647865bdd3
commit
f11caa17d4
@ -93,7 +93,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
private final PlayerAttributes attributes = new PlayerAttributes(this);
|
private final PlayerAttributes attributes = new PlayerAttributes(this);
|
||||||
private final Map<String, SavedClassInformation> classSlots = new HashMap<>();
|
private final Map<String, SavedClassInformation> classSlots = new HashMap<>();
|
||||||
private final Map<PlayerActivity, Long> lastActivity = new HashMap<>();
|
private final Map<PlayerActivity, Long> lastActivity = new HashMap<>();
|
||||||
|
/**
|
||||||
|
* Maps each skill tree to the number of points spent in it. Just in cache memory.
|
||||||
|
*/
|
||||||
|
private final HashMap<SkillTree,Integer> pointSpent= new HashMap<>();
|
||||||
private final Map<SkillTreeNode, Integer> nodeLevels = new HashMap<>();
|
private final Map<SkillTreeNode, Integer> nodeLevels = new HashMap<>();
|
||||||
private final Map<SkillTreeNode, NodeState> nodeStates = new HashMap<>();
|
private final Map<SkillTreeNode, NodeState> nodeStates = new HashMap<>();
|
||||||
private final Map<String, Integer> skillTreePoints = new HashMap<>();
|
private final Map<String, Integer> skillTreePoints = new HashMap<>();
|
||||||
@ -176,9 +179,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
public void setupNodeState() {
|
public void setupNodeState() {
|
||||||
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll())
|
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll())
|
||||||
skillTree.setupNodeState(this);
|
skillTree.setupNodeState(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getPointSpent(SkillTree skillTree) {
|
||||||
|
return pointSpent.get(skillTree);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setSkillTreePoints(String treeId, int points) {
|
public void setSkillTreePoints(String treeId, int points) {
|
||||||
skillTreePoints.put(treeId, points);
|
skillTreePoints.put(treeId, points);
|
||||||
}
|
}
|
||||||
@ -288,6 +296,8 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setNodeLevel(SkillTreeNode node, int nodeLevel) {
|
public void setNodeLevel(SkillTreeNode node, int nodeLevel) {
|
||||||
|
int delta=nodeLevel-nodeLevels.getOrDefault(node,0);
|
||||||
|
pointSpent.put(node.getTree(),pointSpent.getOrDefault(node.getTree(),0)+delta);
|
||||||
nodeLevels.put(node, nodeLevel);
|
nodeLevels.put(node, nodeLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,10 @@ public class SkillTreeViewer extends EditableInventory {
|
|||||||
holders.register("skill-tree-points", inv.getPlayerData().getSkillTreePoint(inv.getSkillTree().getId()));
|
holders.register("skill-tree-points", inv.getPlayerData().getSkillTreePoint(inv.getSkillTree().getId()));
|
||||||
holders.register("global-points", inv.getPlayerData().getSkillTreePoint("global"));
|
holders.register("global-points", inv.getPlayerData().getSkillTreePoint("global"));
|
||||||
holders.register("realloc-points", inv.getPlayerData().getSkillTreeReallocationPoints());
|
holders.register("realloc-points", inv.getPlayerData().getSkillTreeReallocationPoints());
|
||||||
holders.register("total", inv.getPlayerData().countSkillTreePoints(inv.getSkillTree()));
|
int maxPointSpent=inv.getSkillTree().getMaxPointSpent();
|
||||||
|
holders.register("max-point-spent",maxPointSpent==Integer.MAX_VALUE?"∞":maxPointSpent);
|
||||||
|
holders.register("point-spent",inv.getPlayerData().getPointSpent(inv.getSkillTree()));
|
||||||
|
|
||||||
return holders;
|
return holders;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -131,6 +134,9 @@ public class SkillTreeViewer extends EditableInventory {
|
|||||||
Placeholders holders = new Placeholders();
|
Placeholders holders = new Placeholders();
|
||||||
holders.register("name", skillTree.getName());
|
holders.register("name", skillTree.getName());
|
||||||
holders.register("id", skillTree.getId());
|
holders.register("id", skillTree.getId());
|
||||||
|
int maxPointSpent=inv.getSkillTree().getMaxPointSpent();
|
||||||
|
holders.register("max-point-spent",maxPointSpent==Integer.MAX_VALUE?"∞":maxPointSpent);
|
||||||
|
holders.register("point-spent",inv.getPlayerData().getPointSpent(inv.getSkillTree()));
|
||||||
holders.register("skill-tree-points", inv.getPlayerData().getSkillTreePoint(inv.getSkillTree().getId()));
|
holders.register("skill-tree-points", inv.getPlayerData().getSkillTreePoint(inv.getSkillTree().getId()));
|
||||||
holders.register("global-points", inv.getPlayerData().getSkillTreePoint("global"));
|
holders.register("global-points", inv.getPlayerData().getSkillTreePoint("global"));
|
||||||
return holders;
|
return holders;
|
||||||
@ -244,6 +250,9 @@ public class SkillTreeViewer extends EditableInventory {
|
|||||||
holders.register("max-children", node.getMaxChildren());
|
holders.register("max-children", node.getMaxChildren());
|
||||||
holders.register("size", node.getSize());
|
holders.register("size", node.getSize());
|
||||||
}
|
}
|
||||||
|
int maxPointSpent=inv.getSkillTree().getMaxPointSpent();
|
||||||
|
holders.register("max-point-spent",maxPointSpent==Integer.MAX_VALUE?"∞":maxPointSpent);
|
||||||
|
holders.register("point-spent",inv.getPlayerData().getPointSpent(inv.getSkillTree()));
|
||||||
holders.register("skill-tree-points", inv.getPlayerData().getSkillTreePoint(inv.getSkillTree().getId()));
|
holders.register("skill-tree-points", inv.getPlayerData().getSkillTreePoint(inv.getSkillTree().getId()));
|
||||||
holders.register("global-points", inv.getPlayerData().getSkillTreePoint("global"));
|
holders.register("global-points", inv.getPlayerData().getSkillTreePoint("global"));
|
||||||
return holders;
|
return holders;
|
||||||
@ -408,6 +417,14 @@ public class SkillTreeViewer extends EditableInventory {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SkillTreeNode node = skillTree.getNode(new IntegerCoordinates(x, y));
|
SkillTreeNode node = skillTree.getNode(new IntegerCoordinates(x, y));
|
||||||
|
if(playerData.getPointSpent(skillTree)>= skillTree.getMaxPointSpent()) {
|
||||||
|
MMOCore.plugin.configManager.getSimpleMessage("max-points-reached").send(player);
|
||||||
|
MMOCore.plugin.soundManager.getSound(SoundEvent.NOT_ENOUGH_POINTS).playTo(getPlayer());
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (playerData.canIncrementNodeLevel(node)) {
|
if (playerData.canIncrementNodeLevel(node)) {
|
||||||
playerData.incrementNodeLevel(node);
|
playerData.incrementNodeLevel(node);
|
||||||
MMOCore.plugin.configManager.getSimpleMessage("upgrade-skill-node", "skill-node", node.getName(), "level", "" + playerData.getNodeLevel(node)).send(player);
|
MMOCore.plugin.configManager.getSimpleMessage("upgrade-skill-node", "skill-node", node.getName(), "level", "" + playerData.getNodeLevel(node)).send(player);
|
||||||
|
@ -12,7 +12,6 @@ import net.Indyuce.mmocore.tree.skilltree.display.Icon;
|
|||||||
import net.Indyuce.mmocore.tree.IntegerCoordinates;
|
import net.Indyuce.mmocore.tree.IntegerCoordinates;
|
||||||
import net.Indyuce.mmocore.tree.SkillTreeNode;
|
import net.Indyuce.mmocore.tree.SkillTreeNode;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -48,6 +47,7 @@ public abstract class SkillTree extends PostLoadObject implements RegisteredObje
|
|||||||
//Represents all the nodes
|
//Represents all the nodes
|
||||||
protected final Map<IntegerCoordinates, SkillTreeNode> coordinatesNodes = new HashMap<>();
|
protected final Map<IntegerCoordinates, SkillTreeNode> coordinatesNodes = new HashMap<>();
|
||||||
protected final Map<String, SkillTreeNode> nodes = new HashMap<>();
|
protected final Map<String, SkillTreeNode> nodes = new HashMap<>();
|
||||||
|
protected final int maxPointSpent;
|
||||||
//Caches the height of the skill tree
|
//Caches the height of the skill tree
|
||||||
protected int minX, minY, maxX, maxY;
|
protected int minX, minY, maxX, maxY;
|
||||||
protected final HashMap<DisplayInfo, Icon> icons = new HashMap<>();
|
protected final HashMap<DisplayInfo, Icon> icons = new HashMap<>();
|
||||||
@ -61,7 +61,7 @@ public abstract class SkillTree extends PostLoadObject implements RegisteredObje
|
|||||||
Objects.requireNonNull(config.getStringList("lore"), "Could not find skill tree lore").forEach(str -> lore.add(MythicLib.plugin.parseColors(str)));
|
Objects.requireNonNull(config.getStringList("lore"), "Could not find skill tree lore").forEach(str -> lore.add(MythicLib.plugin.parseColors(str)));
|
||||||
this.item = Material.valueOf(UtilityMethods.enumName(Objects.requireNonNull(config.getString("item"))));
|
this.item = Material.valueOf(UtilityMethods.enumName(Objects.requireNonNull(config.getString("item"))));
|
||||||
Validate.isTrue(config.isConfigurationSection("nodes"), "Could not find any nodes in the tree");
|
Validate.isTrue(config.isConfigurationSection("nodes"), "Could not find any nodes in the tree");
|
||||||
|
this.maxPointSpent =config.getInt("max-point-spent",Integer.MAX_VALUE);
|
||||||
for (String key : config.getConfigurationSection("nodes").getKeys(false)) {
|
for (String key : config.getConfigurationSection("nodes").getKeys(false)) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
@ -147,6 +147,10 @@ public abstract class SkillTree extends PostLoadObject implements RegisteredObje
|
|||||||
return lore;
|
return lore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMaxPointSpent() {
|
||||||
|
return maxPointSpent;
|
||||||
|
}
|
||||||
|
|
||||||
public static SkillTree loadSkillTree(ConfigurationSection config) {
|
public static SkillTree loadSkillTree(ConfigurationSection config) {
|
||||||
SkillTree skillTree = null;
|
SkillTree skillTree = null;
|
||||||
|
|
||||||
@ -222,7 +226,7 @@ public abstract class SkillTree extends PostLoadObject implements RegisteredObje
|
|||||||
|
|
||||||
|
|
||||||
for (SkillTreeNode softParent : node.getSoftParents()) {
|
for (SkillTreeNode softParent : node.getSoftParents()) {
|
||||||
if (playerData.getNodeLevel(softParent) > node.getParentNeededLevel(softParent)) {
|
if (playerData.getNodeLevel(softParent) >= node.getParentNeededLevel(softParent)) {
|
||||||
isUnlockableFromSoftParent = true;
|
isUnlockableFromSoftParent = true;
|
||||||
}
|
}
|
||||||
//We count the number of children the parent
|
//We count the number of children the parent
|
||||||
|
@ -6,6 +6,32 @@ name: '&eCurrent Skill Tree: &6{skill-tree-name}'
|
|||||||
slots: 54
|
slots: 54
|
||||||
|
|
||||||
items:
|
items:
|
||||||
|
|
||||||
|
up:
|
||||||
|
function: up
|
||||||
|
item: PLAYER_HEAD
|
||||||
|
name: "Up"
|
||||||
|
texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTk5YWFmMjQ1NmE2MTIyZGU4ZjZiNjI2ODNmMmJjMmVlZDlhYmI4MWZkNWJlYTFiNGMyM2E1ODE1NmI2NjkifX19
|
||||||
|
slots: [ 52 ]
|
||||||
|
down:
|
||||||
|
function: down
|
||||||
|
item: PLAYER_HEAD
|
||||||
|
name: "Down"
|
||||||
|
texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzkxMmQ0NWIxYzc4Y2MyMjQ1MjcyM2VlNjZiYTJkMTU3NzdjYzI4ODU2OGQ2YzFiNjJhNTQ1YjI5YzcxODcifX19
|
||||||
|
slots: [ 51 ]
|
||||||
|
right:
|
||||||
|
function: right
|
||||||
|
item: PLAYER_HEAD
|
||||||
|
name: "Right"
|
||||||
|
texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTNmYzUyMjY0ZDhhZDllNjU0ZjQxNWJlZjAxYTIzOTQ3ZWRiY2NjY2Y2NDkzNzMyODliZWE0ZDE0OTU0MWY3MCJ9fX0=
|
||||||
|
slots: [ 50 ]
|
||||||
|
left:
|
||||||
|
function: left
|
||||||
|
item: PLAYER_HEAD
|
||||||
|
name: "Left"
|
||||||
|
texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWYxMzNlOTE5MTlkYjBhY2VmZGMyNzJkNjdmZDg3YjRiZTg4ZGM0NGE5NTg5NTg4MjQ0NzRlMjFlMDZkNTNlNiJ9fX0=
|
||||||
|
slots: [ 49 ]
|
||||||
|
|
||||||
skill-tree:
|
skill-tree:
|
||||||
name: '{skill-tree-node}'
|
name: '{skill-tree-node}'
|
||||||
function: skill-tree
|
function: skill-tree
|
||||||
@ -16,17 +42,21 @@ items:
|
|||||||
- '{tree-lore}'
|
- '{tree-lore}'
|
||||||
- ''
|
- ''
|
||||||
- '--------------------'
|
- '--------------------'
|
||||||
|
- '&e◆Max points&e: &6{max-point-spent}'
|
||||||
|
- '&e◆Points spent&e:&6 {point-spent}'
|
||||||
- '&e◆Current {name} &epoints: &6{skill-tree-points}'
|
- '&e◆Current {name} &epoints: &6{skill-tree-points}'
|
||||||
- '&e◆Current Global points: &6{global-points}'
|
- '&e◆Current Global points: &6{global-points}'
|
||||||
|
|
||||||
next-tree-list-page:
|
next-tree-list-page:
|
||||||
function: 'next-tree-list-page'
|
function: 'next-tree-list-page'
|
||||||
item: ARROW
|
item: ARROW
|
||||||
|
name: "Next Page"
|
||||||
slots: [ 36 ]
|
slots: [ 36 ]
|
||||||
|
|
||||||
previous-tree-list-page:
|
previous-tree-list-page:
|
||||||
function: 'previous-tree-list-page'
|
function: 'previous-tree-list-page'
|
||||||
item: 'ARROW'
|
item: 'ARROW'
|
||||||
|
name: "Previous Page"
|
||||||
slots: [ 0 ]
|
slots: [ 0 ]
|
||||||
|
|
||||||
reallocation:
|
reallocation:
|
||||||
@ -36,7 +66,8 @@ items:
|
|||||||
name: '&aReallocate Skill Tree Points'
|
name: '&aReallocate Skill Tree Points'
|
||||||
lore:
|
lore:
|
||||||
- ''
|
- ''
|
||||||
- 'You have spent a total of &6{total}&7 skill tree points.'
|
- '&7You have spent a total of &6{point-spent}&7 skill tree points.'
|
||||||
|
- '&7The maximum points that can be spent is: &6{max-point-spent}'
|
||||||
- '&7Right click to reallocate them.'
|
- '&7Right click to reallocate them.'
|
||||||
- ''
|
- ''
|
||||||
- '&eCosts 1 attribute reallocation point.'
|
- '&eCosts 1 attribute reallocation point.'
|
||||||
@ -63,6 +94,8 @@ items:
|
|||||||
- '--------------------'
|
- '--------------------'
|
||||||
- '{node-lore}'
|
- '{node-lore}'
|
||||||
- '--------------------'
|
- '--------------------'
|
||||||
- '&eCurrent {skill-tree} &epoints: &6{skill-tree-points}'
|
- '&e◆Max points for {skill-tree}&e: &6{max-point-spent}'
|
||||||
- '&eCurrent global points: &6{global-points}'
|
- '&e◆Points spent for {skill-tree}&e:&6 {point-spent}'
|
||||||
|
- '&e◆Current {skill-tree} &epoints: &6{skill-tree-points}'
|
||||||
|
- '&e◆Current &6global&e points: &6{global-points}'
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ no-skill-placeholder: 'No Skill Bound'
|
|||||||
not-skill-reallocation-point: '&cYou do not have 1 skill reallocation point.'
|
not-skill-reallocation-point: '&cYou do not have 1 skill reallocation point.'
|
||||||
no-skill-points-spent: '&cYou have not spent any skill points.'
|
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.'
|
skill-points-reallocated: '&eYou successfully reset your attributes. You now have &6{points} &eskill points.'
|
||||||
|
max-points-reached: '&cYou reached the maximum points you can spend. You need to reallocate your points to rollback.'
|
||||||
# Skill Trees
|
# Skill Trees
|
||||||
no-skill-tree-points-spent: '&cYou have not spent any skill tree points.'
|
no-skill-tree-points-spent: '&cYou have not spent any skill tree points.'
|
||||||
locked-node: '&cThis skill is locked!'
|
locked-node: '&cThis skill is locked!'
|
||||||
|
Loading…
Reference in New Issue
Block a user