Merge remote-tracking branch 'origin/master'

# Conflicts:
#	MMOCore-API/MMOCore-API.iml
#	MMOCore-Dist/MMOCore-Dist.iml
This commit is contained in:
Indyuce 2022-10-29 01:40:52 +02:00
commit a82f19ca3b
25 changed files with 2538 additions and 610 deletions

View File

@ -1,103 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_16">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-1.17.1:dev" level="project" />
<orderEntry type="library" name="Maven: io.papermc:paperlib:1.0.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.20" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.lumine:Mythic-Dist:5.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: me.clip:placeholderapi:2.9.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.MilkBowl:VaultAPI:1.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13.1-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.21" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-bukkit:7.0.2-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-bukkit:7.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-core:7.0.2-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard.worldguard-libs:core:7.0.2-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-core:7.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit.worldedit-libs:core:7.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.schlichtherle:truezip:6.8.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-default_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scala-lang:scala-library:2.13.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-http:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-spec:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-annotations:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:annotations:3.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-cio:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-io:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-services:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-logging:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.inject:javax.inject:1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpclient:4.5.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpcore:4.4.12" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-codec:commons-codec:1.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:jcl-over-slf4j:1.7.28" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-odf:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zipdriver:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bouncycastle:bcprov-jdk15on:1.63" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-tardriver:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-bzip2:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-gzip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-xz:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.tukaani:xz:1.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip-raes:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-base_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access-swing:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-file:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-jar:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-ibm437:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-impl_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-console:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-default:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-swing:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-macosx:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-spec:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-shed:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.dev.jna:jna:4.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mozilla:rhino:1.7.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: it.unimi.dsi:fastutil:8.2.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.flywaydb:flyway-core:3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q:commandbook:2.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bstats:bstats-bukkit:1.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.comphenix.protocol:ProtocolLib:4.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.bytebuddy:byte-buddy:1.12.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.citizensnpcs:Citizens:2.0.25" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.simonsator:DevelopmentPAFSpigot:1.0.65" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.simonsator:Party-and-Friends-MySQL-Edition-Spigot-API:1.5.4-RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.simonsator:spigot-party-api-for-party-and-friends:1.0.4-RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.alessiodp:Parties:3.1.14" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.gmail.nossr50:mcMMO:2.1.209" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.erethon:DungeonsXL:0.18-PRE-02" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.denizen:Dungeons:1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: me.blackvein:Quests:4.4.1-b340" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: fr.skytasul.quests:BeautyQuests:0.19.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.guillaumevdn:QuestCreator:6.39.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.guillaumevdn:GCore:8.39.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.massivecraft:Factions:1.6.9.5-2.9.8-RC" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: me.ulrich:UltimateClans:4.2.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: me.glaremasters:Guilds:3.5.6.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.kingdoms.main:Kingdoms:1.11.15.0.0.0.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.lumine:MythicLib-dist:1.4.3-SNAPSHOT" level="project" />
<module version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>SPIGOT</platformType>
<platformType>MCP</platformType>
<platformType>BUKKIT</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="McpModuleSettings">
<option name="srgType" value="SRG" />
</component>
</module>

View File

@ -2,8 +2,12 @@ package net.Indyuce.mmocore.api.player;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.player.MMOPlayerData;
import io.lumine.mythic.lib.api.stat.StatInstance;
import io.lumine.mythic.lib.api.stat.modifier.StatModifier;
import io.lumine.mythic.lib.player.cooldown.CooldownMap;
import io.lumine.mythic.lib.player.skill.PassiveSkill;
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
import net.Indyuce.mmocore.party.provided.Party;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.ConfigMessage;
import net.Indyuce.mmocore.api.SoundEvent;
@ -30,9 +34,8 @@ import net.Indyuce.mmocore.experience.droptable.ExperienceTable;
import net.Indyuce.mmocore.guild.provided.Guild;
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
import net.Indyuce.mmocore.party.provided.Party;
import net.Indyuce.mmocore.player.Unlockable;
import net.Indyuce.mmocore.player.stats.StatInfo;
import net.Indyuce.mmocore.skill.ClassSkill;
import net.Indyuce.mmocore.skill.RegisteredSkill;
import net.Indyuce.mmocore.skill.cast.SkillCastingHandler;
@ -58,7 +61,6 @@ import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;
import java.util.*;
import java.util.logging.Level;
import java.util.stream.Collectors;
public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer {
@ -118,6 +120,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
// NON-FINAL player data stuff made public to facilitate field change
public boolean noCooldown;
private boolean statLoaded;
public CombatRunnable combat;
/**
@ -132,6 +135,15 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
this.mmoData = mmoData;
questData = new PlayerQuests(this);
playerStats = new PlayerStats(this);
//Used to see if the triggers need to be applied
boolean statLoaded = false;
for (StatInstance instance : mmoData.getStatMap().getInstances())
for (StatModifier modifier : instance.getModifiers())
if (modifier.getKey().startsWith("trigger"))
statLoaded = true;
this.statLoaded = statLoaded;
}
/**
@ -167,12 +179,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll())
skillTree.setupNodeState(this);
//Stat triggers setup
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) {
for (SkillTreeNode node : skillTree.getNodes()) {
node.getExperienceTable().claimStatTriggers(this, node);
if (!statLoaded)
//Stat triggers setup
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) {
for (SkillTreeNode node : skillTree.getNodes()) {
node.getExperienceTable().claimStatTriggers(this, node);
}
}
}
}
@ -181,6 +195,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return pointSpent.getOrDefault(skillTree, 0);
}
public HashMap<SkillTree, Integer> getPointsSpent() {
return new HashMap<>(pointSpent);
}
public void clearPointsSpent() {
pointSpent.clear();
}
public void setSkillTreePoints(String treeId, int points) {
skillTreePoints.put(treeId, points);
@ -194,10 +216,18 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return nodeLevels.keySet().stream().filter(node -> node.getTree().equals(skillTree)).mapToInt(nodeLevels::get).sum();
}
/**
* We make a copy to assure that the object created is independent of the state of playerData.
*/
public Map<String, Integer> getSkillTreePoints() {
return skillTreePoints;
return new HashMap(skillTreePoints);
}
public void clearSkillTreePoints() {
skillTreePoints.clear();
}
public boolean containsSkillPointTreeId(String treeId) {
return skillTreePoints.containsKey(treeId);
}
@ -210,8 +240,16 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return nodeLevelsString.entrySet();
}
public boolean isStatLoaded() {
return statLoaded;
}
public Map<SkillTreeNode, Integer> getNodeLevels() {
return nodeLevels;
return new HashMap<>(nodeLevels);
}
public void clearNodeLevels() {
nodeLevels.clear();
}
public boolean canIncrementNodeLevel(SkillTreeNode node) {
@ -219,7 +257,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
//Check the State of the node
if (nodeState != NodeState.UNLOCKED && nodeState != NodeState.UNLOCKABLE)
return false;
return getNodeLevel(node) < node.getMaxLevel() && (skillTreePoints.get(node.getTree().getId()) > 0 || skillTreePoints.get("global") > 0);
return getNodeLevel(node) < node.getMaxLevel() && (skillTreePoints.getOrDefault(node.getTree().getId(), 0) > 0 || skillTreePoints.getOrDefault("global", 0) > 0);
}
/**
@ -268,7 +306,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
}
public int getSkillTreePoint(String treeId) {
return skillTreePoints.get(treeId);
return skillTreePoints.getOrDefault(treeId, 0);
}
public void withdrawSkillTreePoints(String treeId, int withdraw) {
@ -301,12 +339,17 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
for (SkillTreeNode node : skillTree.getNodes()) {
node.getExperienceTable().reset(this, node);
setNodeLevel(node, 0);
nodeStates.remove(node);
}
skillTree.setupNodeState(this);
}
public Map<SkillTreeNode, NodeState> getNodeStates() {
return nodeStates;
return new HashMap<>(nodeStates);
}
public void clearNodeStates() {
nodeStates.clear();
}
public Map<String, Integer> getNodeTimesClaimed() {
@ -393,6 +436,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return Math.max(1, level);
}
@Nullable
public AbstractParty getParty() {
return MMOCore.plugin.partyModule.getParty(this);
@ -446,6 +490,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
public int getClaims(String key) {
return tableItemClaims.getOrDefault(key, 0);
}
@Override
@ -455,8 +500,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
public void setClaims(String key, int times) {
tableItemClaims.put(key, times);
}
public Map<String, Integer> getItemClaims() {
return tableItemClaims;
}
@ -716,9 +763,9 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
final double r = Math.sin((double) t / warpTime * Math.PI);
for (double j = 0; j < Math.PI * 2; j += Math.PI / 4)
getPlayer().getLocation().getWorld().spawnParticle(Particle.REDSTONE, getPlayer().getLocation().add(
Math.cos((double) 5 * t / warpTime + j) * r,
(double) 2 * t / warpTime,
Math.sin((double) 5 * t / warpTime + j) * r),
Math.cos((double) 5 * t / warpTime + j) * r,
(double) 2 * t / warpTime,
Math.sin((double) 5 * t / warpTime + j) * r),
1, new Particle.DustOptions(Color.PURPLE, 1.25f));
}
}.runTaskTimer(MMOCore.plugin, 0, 1);
@ -751,27 +798,21 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
if (value <= 0)
return;
// Splitting exp through party members
AbstractParty party;
if (splitExp && (party = getParty()) != null) {
final List<PlayerData> nearbyMembers = party.getOnlineMembers().stream()
.filter(pd -> {
if (equals(pd))
return false;
final double maxDis = MMOCore.plugin.configManager.partyMaxExpSplitRange;
return maxDis <= 0 || pd.getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) < maxDis * maxDis;
}).collect(Collectors.toList());
value /= (nearbyMembers.size() + 1);
for (PlayerData member : nearbyMembers)
member.giveExperience(value, source, null, false);
}
// Must be placed after exp spliting
if (hasReachedMaxLevel()) {
setExperience(0);
return;
}
// Splitting exp through party members
AbstractParty party;
if (splitExp && (party = getParty()) != null) {
List<PlayerData> onlineMembers = party.getOnlineMembers();
value /= onlineMembers.size();
for (PlayerData member : onlineMembers)
if (!equals(member))
member.giveExperience(value, source, null, false);
}
// Apply buffs AFTER splitting exp
value *= (1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100) * MMOCore.plugin.boosterManager.getMultiplier(null);
@ -1131,7 +1172,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
*/
@Deprecated
public boolean canChooseSubclass() {

View File

@ -9,6 +9,7 @@ import net.Indyuce.mmocore.manager.data.PlayerDataManager;
import net.Indyuce.mmocore.skill.RegisteredSkill;
import net.Indyuce.mmocore.tree.SkillTreeNode;
import net.Indyuce.mmocore.tree.skilltree.SkillTree;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import java.util.HashMap;
@ -26,7 +27,7 @@ public class SavedClassInformation {
/**
* Stores the tableItemsClaims values but only for skill tree node as it is class based.
*/
private final Map<String,Integer> nodeTimesClaimed;
private final Map<String, Integer> nodeTimesClaimed;
public SavedClassInformation(ConfigurationSection config) {
level = config.getInt("level");
@ -78,7 +79,7 @@ public class SavedClassInformation {
if (json.has("node-levels"))
for (Entry<String, JsonElement> entry : json.getAsJsonObject("node-levels").entrySet())
nodeLevels.put(MMOCore.plugin.skillTreeManager.getNode(entry.getKey()), entry.getValue().getAsInt());
nodeTimesClaimed=new HashMap<>();
nodeTimesClaimed = new HashMap<>();
if (json.has("node-times-claimed"))
for (Entry<String, JsonElement> entry : json.getAsJsonObject("node-times-claimed").entrySet())
nodeTimesClaimed.put(entry.getKey(), entry.getValue().getAsInt());
@ -89,7 +90,7 @@ public class SavedClassInformation {
public SavedClassInformation(PlayerData player) {
this(player.getLevel(), player.getExperience(), player.getSkillPoints(), player.getAttributePoints(), player.getAttributeReallocationPoints()
, player.getSkillTreeReallocationPoints(), player.getSkillReallocationPoints(),
player.getAttributes().mapPoints(), player.mapSkillLevels(), player.getSkillTreePoints(), player.getNodeLevels(),player.getNodeTimesClaimed());
player.getAttributes().mapPoints(), player.mapSkillLevels(), player.getSkillTreePoints(), player.getNodeLevels(), player.getNodeTimesClaimed());
}
public SavedClassInformation(PlayerDataManager.DefaultPlayerData data) {
@ -97,11 +98,12 @@ public class SavedClassInformation {
}
public SavedClassInformation(int level, double experience, int skillPoints, int attributePoints, int attributeReallocationPoints, int skillTreeReallocationPoints, int skillReallocationPoints) {
this(level, experience, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),new HashMap<>());
this(level, experience, skillPoints, attributePoints, attributeReallocationPoints, skillTreeReallocationPoints, skillReallocationPoints, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>());
}
public SavedClassInformation(int level, double experience, int skillPoints, int attributePoints, int attributeReallocationPoints, int skillTreeReallocationPoints, int skillReallocationPoints,
Map<String, Integer> attributes, Map<String, Integer> skills, Map<String, Integer> skillTreePoints, Map<SkillTreeNode, Integer> nodeLevels,Map<String, Integer> nodeTimesClaimed) {
Map<String, Integer> attributes, Map<String, Integer> skills, Map<String, Integer> skillTreePoints, Map<SkillTreeNode, Integer> nodeLevels, Map<String, Integer> nodeTimesClaimed) {
this.level = level;
this.skillPoints = skillPoints;
this.attributePoints = attributePoints;
@ -113,7 +115,7 @@ public class SavedClassInformation {
this.skills = skills;
this.skillTreePoints = skillTreePoints;
this.nodeLevels = nodeLevels;
this.nodeTimesClaimed=nodeTimesClaimed;
this.nodeTimesClaimed = nodeTimesClaimed;
}
public int getLevel() {
@ -173,6 +175,7 @@ public class SavedClassInformation {
return nodeLevels.get(node);
}
public Set<String> getSkillTreePointsKeys() {
return skillTreePoints.keySet();
}
@ -186,7 +189,7 @@ public class SavedClassInformation {
}
public int getAttributeLevel(String id) {
return attributes.getOrDefault(id,0);
return attributes.getOrDefault(id, 0);
}
public void registerAttributeLevel(PlayerAttribute attribute, int level) {
@ -212,13 +215,18 @@ public class SavedClassInformation {
player.mapSkillLevels().forEach((skill, level) -> player.resetSkillLevel(skill));
player.getAttributes().getInstances().forEach(ins -> ins.setBase(0));
player.clearSkillTreePoints();
player.clearNodeLevels();
player.clearNodeStates();
player.clearPointsSpent();
// We reset the experience table for each skill tree node to remove the perm stat.
for (SkillTree skillTree : player.getProfess().getSkillTrees())
for (SkillTree skillTree : player.getProfess().getSkillTrees()) {
for (SkillTreeNode node : skillTree.getNodes())
node.getExperienceTable().reset(player, node);
player.getNodeLevels().clear();
player.getNodeStates().clear();
}
while (player.hasPassiveSkillBound(0))
player.unbindPassiveSkill(0);
while (player.hasSkillBound(0))
player.unbindSkill(0);
@ -238,18 +246,24 @@ public class SavedClassInformation {
(skills).forEach(player::setSkillLevel);
attributes.forEach((id, pts) -> player.getAttributes().setBaseAttribute(id, pts));
skillTreePoints.forEach((skillTree, point) -> player.setSkillTreePoints(skillTree, point));
//Setup node levels and node state.
nodeLevels.forEach((node, level) -> player.setNodeLevel(node, level));
for(SkillTree skillTree: profess.getSkillTrees())
//Careful, the global points must not be forgotten.
player.setSkillTreePoints("global", skillTreePoints.getOrDefault("global", 0));
for (SkillTree skillTree : profess.getSkillTrees()) {
player.setSkillTreePoints(skillTree.getId(), skillTreePoints.getOrDefault(skillTree.getId(), 0));
for (SkillTreeNode node : skillTree.getNodes()) {
player.setNodeLevel(node, nodeLevels.getOrDefault(node, 0));
}
skillTree.setupNodeState(player);
}
//Add the values to the times claimed table and claims the corresponding stat triggers.
nodeTimesClaimed.forEach((str,val)->player.setClaims(str,val));
nodeTimesClaimed.forEach((str, val) -> player.setClaims(str, val));
//We claim back the stats triggers for all the skill tree nodes of the new class.
for(SkillTree skillTree:profess.getSkillTrees())
for(SkillTreeNode node:skillTree.getNodes())
node.getExperienceTable().claimStatTriggers(player,node);
for (SkillTree skillTree : profess.getSkillTrees())
for (SkillTreeNode node : skillTree.getNodes())
node.getExperienceTable().claimStatTriggers(player, node);
/*
* unload current class information and set the new profess once

View File

@ -100,10 +100,11 @@ public class PlayerProfessions {
for (Entry<String, JsonElement> entry : obj.getAsJsonObject("timesClaimed").entrySet())
playerData.getItemClaims().put("profession." + entry.getKey(), entry.getValue().getAsInt());
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
if (profession.hasExperienceTable())
profession.getExperienceTable().claimStatTriggers(playerData, profession);
}
if (!playerData.isStatLoaded())
for (Profession profession : MMOCore.plugin.professionManager.getAll()) {
if (profession.hasExperienceTable())
profession.getExperienceTable().claimStatTriggers(playerData, profession);
}
}

View File

@ -337,6 +337,9 @@ public class SkillTreeViewer extends EditableInventory {
@Override
public void whenClicked(InventoryClickContext event, InventoryItem item) {
if(event.getClickedItem()==null)
return;
if (item.getFunction().equals("next-tree-list-page")) {
treeListPage++;
open();

View File

@ -75,13 +75,17 @@ public class ConfigManager {
loadDefaultFile("expcurves", "levels.txt");
loadDefaultFile("expcurves", "mining.txt");
}
/*
if(!new File(MMOCore.plugin.getDataFolder()+"/skilltree").exists()) {
loadDefaultFile("skilltree","combat.yml");
loadDefaultFile("skilltree","autocombat.yml");
loadDefaultFile("skilltree","customcombat.yml");
loadDefaultFile("skilltree","mage-arcane-mage.yml");
loadDefaultFile("skilltree","rogue-marksman.yml");
loadDefaultFile("skilltree","warrior-paladin.yml");
loadDefaultFile("skilltree","general.yml");
}
*/
loadDefaultFile("attributes.yml");
loadDefaultFile("items.yml");
loadDefaultFile("messages.yml");

View File

@ -57,7 +57,7 @@ public class SkillTreeManager extends MMOCoreRegister<SkillTree> {
public void initialize(boolean clearBefore) {
if (clearBefore)
registered.clear();
File file = new File(MMOCore.plugin.getDataFolder() + "/skillTree");
File file = new File(MMOCore.plugin.getDataFolder() + "/skilltree");
if (!file.exists())
file.mkdirs();
load(file);

View File

@ -73,6 +73,9 @@ public class SkillBar implements Listener {
*/
if (event.getPreviousSlot() == event.getNewSlot()) return;
//If the player is sneaking, we don't trigger the casting mode (used to avoid conflicts with other plugins using shift+F to open GUI.
if(player.isSneaking()) return;
event.setCancelled(true);
int slot = event.getNewSlot() + (event.getNewSlot() >= player.getInventory().getHeldItemSlot() ? -1 : 0);

View File

@ -1,17 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_16">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="MMOCore-API" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-1.17.1:dev" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.lumine:MythicLib-dist:1.4.1-SNAPSHOT" level="project" />
<module version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>SPIGOT</platformType>
<platformType>MCP</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="McpModuleSettings">
<option name="srgType" value="SRG" />
</component>
</module>

View File

@ -39,7 +39,7 @@ public class PlayerListener implements Listener {
*/
@EventHandler
public void b(InventoryClickEvent event) {
if (event.getInventory().getHolder() instanceof PluginInventory)
if (event.getInventory().getHolder() instanceof PluginInventory&&event.getCurrentItem()!=null)
((PluginInventory) event.getInventory().getHolder())
.whenClicked(new InventoryClickContext(event.getRawSlot(), event.getCurrentItem(), event.getClick(), event, event.getInventory()));
}

View File

@ -34,6 +34,10 @@ exp-curve: levels
# The maximum level players can reach
max-level: 100
skill-trees:
- 'general'
- 'mage-arcane-mage'
# This class must not display in /class
# because it is a subclass of mage
options:

View File

@ -32,6 +32,10 @@ exp-curve: levels
# The maximum level players can reach
max-level: 100
skill-trees:
- 'general'
- 'mage-arcane-mage'
exp-table: class_exp_table
# This is the default mana display options, however it is not mandatory

View File

@ -33,7 +33,9 @@ max-level: 100
exp-table: class_exp_table
skill-trees:
- 'general'
- 'rogue-marksman'
# Particles displayed around the player
# when he enters the casting mode.

View File

@ -31,6 +31,10 @@ display:
exp-curve: levels
skill-trees:
- 'general'
- 'warrior-paladin'
- 'combat'
# The maximum level players can reach
max-level: 100

View File

@ -34,6 +34,11 @@ max-level: 100
exp-table: class_exp_table
skill-trees:
- 'general'
- 'rogue-marksman'
options:
# Mana and health regen only applies when out of combat
off-combat-mana-regen: true

View File

@ -36,6 +36,12 @@ exp-curve: levels
# The maximum level players can reach
max-level: 100
skill-trees:
- 'general'
- 'warrior-paladin'
- 'combat'
# Warrior has rage which he gains while casting spells
# Rage increase its skill damage. Use <mmocore.rage>
# to get the player's rage (MythicMobs formulas)

View File

@ -51,4 +51,286 @@ second_exp_table:
some_other_item:
period: 3
triggers:
- 'exp{amount=100}'
- 'exp{amount=100}'
### Skill Tree
## MANA_REGENERATION
skilltree_mana_regeneration1:
mana_regeneration:
triggers:
- 'stat{stat="MANA_REGENERATION";amount=1;type="FLAT"}'
skilltree_mana_regeneration2:
mana_regeneration:
triggers:
- 'stat{stat="MANA_REGENERATION";amount=2;type="FLAT"}'
## HEALTH_REGENERATION
skilltree_health_regeneration1:
health_regeneration:
triggers:
- 'stat{stat="HEALTH_REGENERATION";amount=1;type="FLAT"}'
skilltree_health_regeneration2:
health_regeneration:
triggers:
- 'stat{stat="HEALTH_REGENERATION";amount=2;type="FLAT"}'
## COOLDOWN_REDUCTION
skilltree_cooldown_reduction5:
cooldown_reduction:
triggers:
- 'stat{stat="COOLDOWN_REDUCTION";amount=5;type="FLAT"}'
skilltree_cooldown_reduction10:
cooldown_reduction:
triggers:
- 'stat{stat="COOLDOWN_REDUCTION";amount=10;type="FLAT"}'
skilltree_cooldown_reduction15:
cooldown_reduction:
triggers:
- 'stat{stat="COOLDOWN_REDUCTION";amount=15;type="FLAT"}'
## CRITICAL_STRIKE_CHANCE
skilltree_critical_strike_chance1:
critical_strike_chance:
triggers:
- 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=1;type="FLAT"}'
skilltree_critical_strike_chance2:
critical_strike_chance:
triggers:
- 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=2;type="FLAT"}'
skilltree_critical_strike_chance3:
critical_strike_chance:
triggers:
- 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=3;type="FLAT"}'
skilltree_critical_strike_chance5:
critical_strike_chance:
triggers:
- 'stat{stat="CRITICAL_STRIKE_CHANCE";amount=5;type="FLAT"}'
## WEAPON_DAMAGE
skilltree_weapon_damage1:
weapon_damage:
triggers:
- 'stat{stat="WEAPON_DAMAGE";amount=1;type="FLAT"}'
skilltree_weapon_damage2:
weapon_damage:
triggers:
- 'stat{stat="WEAPON_DAMAGE";amount=2;type="FLAT"}'
skilltree_weapon_damage4:
weapon_damage:
triggers:
- 'stat{stat="WEAPON_DAMAGE";amount=4;type="FLAT"}'
## DAMAGE_REDUCTION
skilltree_damage_reduction1:
weapon_damage:
triggers:
- 'stat{stat="DAMAGE_REDUCTION";amount=1;type="FLAT"}'
skilltree_damage_reduction2:
weapon_damage:
triggers:
- 'stat{stat="DAMAGE_REDUCTION";amount=2;type="FLAT"}'
## LIFESTEAL
skilltree_lifesteal1:
lifesteal:
triggers:
- 'stat{stat="LIFESTEAL";amount=1;type="FLAT"}'
skilltree_lifesteal2:
lifesteal:
triggers:
- 'stat{stat="LIFESTEAL";amount=2;type="FLAT"}'
skilltree_lifesteal3:
lifesteal:
triggers:
- 'stat{stat="LIFESTEAL";amount=3;type="FLAT"}'
## MAX_HEALTH
skilltree_max_health1:
max_health:
triggers:
- 'stat{stat="MAX_HEALTH";amount=1;type="FLAT"}'
skilltree_max_health2:
max_health:
triggers:
- 'stat{stat="MAX_HEALTH";amount=2;type="FLAT"}'
skilltree_max_health4:
max_health:
triggers:
- 'stat{stat="MAX_HEALTH";amount=4;type="FLAT"}'
skilltree_max_health5:
max_health:
triggers:
- 'stat{stat="MAX_HEALTH";amount=5;type="FLAT"}'
## MAGIC_DAMAGE
skilltree_magic_damage1:
magic_damage:
triggers:
- 'stat{stat="MAGIC_DAMAGE";amount=1;type="FLAT"}'
skilltree_magic_damage2:
magic_damage:
triggers:
- 'stat{stat="MAGIC_DAMAGE";amount=2;type="FLAT"}'
skilltree_magic_damage3:
magic_damage:
triggers:
- 'stat{stat="MAGIC_DAMAGE";amount=3;type="FLAT"}'
## ATTACK_SPEED
skilltree_attack_speed5:
attack_speed:
triggers:
- 'stat{stat="ATTACK_SPEED";amount=5;type="RELATIVE"}'
skilltree_attack_speed10:
attack_speed:
triggers:
- 'stat{stat="ATTACK_SPEED";amount=10;type="RELATIVE"}'
skilltree_attack_speed15:
attack_speed:
triggers:
- 'stat{stat="ATTACK_SPEED";amount=15;type="RELATIVE"}'
## PHYSICAL_DAMAGE_REDUCTION
skilltree_physical_damage_reduction5:
physical_damage_reduction:
triggers:
- 'stat{stat="PHYSICAL_DAMAGE_REDUCTION";amount=5;type="FLAT"}'
skilltree_physical_damage_reduction10:
physical_damage_reduction:
triggers:
- 'stat{stat="PHYSICAL_DAMAGE_REDUCTION";amount=10;type="FLAT"}'
skilltree_physical_damage_reduction15:
physical_damage_reduction:
triggers:
- 'stat{stat="PHYSICAL_DAMAGE_REDUCTION";amount=15;type="FLAT"}'
## PARRY_RATING
skilltree_parry_rating5:
parry_rating:
triggers:
- 'stat{stat="PARRY_RATING";amount=5;type="FLAT"}'
skilltree_parry_rating10:
parry_ratingn:
triggers:
- 'stat{stat="PARRY_RATING";amount=10;type="FLAT"}'
## KNOCKBACK_RESISTANCE
skilltree_knockback_resistance5:
knockback_resistance:
triggers:
- 'stat{stat="KNOCKBACK_RESISTANCE";amount=0.05;type="FLAT"}'
skilltree_knockback_resistance10:
knockback_resistance:
triggers:
- 'stat{stat="KNOCKBACK_RESISTANCE";amount=0.1;type="FLAT"}'
## DODGE_RATING
skilltree_dodge_rating2:
dodge_rating:
triggers:
- 'stat{stat="DODGE_RATING";amount=2;type="FLAT"}'
skilltree_dodge_rating3:
dodge_rating:
triggers:
- 'stat{stat="DODGE_RATING";amount=3;type="FLAT"}'
skilltree_dodge_rating5:
dodge_rating:
triggers:
- 'stat{stat="DODGE_RATING";amount=100;type="FLAT"}'
## SKILL_DAMAGE
skilltree_skill_damage5:
skill_damage:
triggers:
- 'stat{stat="SKILL_DAMAGE";amount=5;type="FLAT"}'
skilltree_skill_damage10:
skill_damage:
triggers:
- 'stat{stat="SKILL_DAMAGE";amount=10;type="FLAT"}'
## SPELL_VAMPIRISM
skilltree_spell_vampirism2:
spell_vampirism:
triggers:
- 'stat{stat="SPELL_VAMPIRISM";amount=2;type="FLAT"}'
skilltree_spell_vampirism6:
spell_vampirism:
triggers:
- 'stat{stat="SPELL_VAMPIRISM";amount=6;type="FLAT"}'
## ADDITIONAL_EXPERIENCE
skilltree_additional_experience2:
additional_experience:
triggers:
- 'stat{stat="ADDITIONAL_EXPERIENCE";amount=2;type="FLAT"}'
skilltree_additional_experience3:
additional_experience:
triggers:
- 'stat{stat="ADDITIONAL_EXPERIENCE";amount=3;type="FLAT"}'
skilltree_additional_experience5:
additional_experience:
triggers:
- 'stat{stat="ADDITIONAL_EXPERIENCE";amount=5;type="FLAT"}'
## MAGIC_DAMAGE_REDUCTION
skilltree_magic_damage_reduction5:
magic_damage_reduction:
triggers:
- 'stat{stat="MAGIC_DAMAGE_REDUCTION";amount=5;type="FLAT"}'
skilltree_magic_damage_reduction10:
magic_damage_reduction:
triggers:
- 'stat{stat="MAGIC_DAMAGE_REDUCTION";amount=10;type="FLAT"}'
## SKILL_CRITICAL_STRIKE_CHANCE
skilltree_skill_critical_strike_chance5:
skill_critical_strike_chance:
triggers:
- 'stat{stat="SKILL_CRITICAL_STRIKE_CHANCE";amount=5;type="FLAT"}'
skilltree_skill_critical_strike_chance10:
skill_critical_strike_chance:
triggers:
- 'stat{stat="SKILL_CRITICAL_STRIKE_CHANCE";amount=10;type="FLAT"}'
skilltree_skill_critical_strike_chance15:
skill_critical_strike_chance:
triggers:
- 'stat{stat="SKILL_CRITICAL_STRIKE_CHANCE";amount=15;type="FLAT"}'
## ARROW_VELOCITY
skilltree_arrow_velocity10:
arrow_velocity:
triggers:
- 'stat{stat="ARROW_VELOCITY";amount=10;type="RELATIVE"}'
skilltree_arrow_velocity15:
arrow_velocity:
triggers:
- 'stat{stat="ARROW_VELOCITY";amount=15;type="RELATIVE"}'
skilltree_arrow_velocity25:
arrow_velocity:
triggers:
- 'stat{stat="ARROW_VELOCITY";amount=25;type="RELATIVE"}'
## MOVEMENT_SPEED
skilltree_movement_speed2:
movement_speed:
triggers:
- 'stat{stat="MOVEMENT_SPEED";amount=10;type="RELATIVE"}'
skilltree_movement_speed6:
movement_speed:
triggers:
- 'stat{stat="MOVEMENT_SPEED";amount=10;type="RELATIVE"}'
## PROJECTILE_DAMAGE
skilltree_projectile_damage2:
projectile_damage:
triggers:
- 'stat{stat="PROJECTILE_DAMAGE";amount=10;type="FLAT"}'
skilltree_projectile_damage6:
projectile_damage:
triggers:
- 'stat{stat="PROJECTILE_DAMAGE";amount=6;type="FLAT"}'

View File

@ -1,179 +0,0 @@
id: autocombat
name: AutoCombat
type: automatic
item: GOLDEN_AXE
lore:
- '&6This autoskill tree is used for combat abilities!'
nodes:
strength:
name: 'Combat strength'
children:
strong:
force: 2
agility: 1
wisdom: 3
experience-table: class_exp_table
max-level: 3
size: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
wisdom:
name: 'Wisdom'
size: 1
max-children: 2
max-level: 2
experience-table: class_exp_table
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
agility:
name: 'Agility'
size: 1
max-children: 2
max-level: 2
experience-table: class_exp_table
children:
strong:
agility2: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
agility2:
name: 'Agility2'
size: 1
max-children: 2
max-level: 2
experience-table: class_exp_table
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
force:
name: 'Force'
size: 1
max-children: 1
max-level: 2
experience-table: class_exp_table
children:
strong:
weaponry: 1
archery: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
weaponry:
name: 'Weaponry'
max-level: 2
experience-table: class_exp_table
size: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery:
name: 'Archery'
experience-table: class_exp_table
max-level: 2
size: 1
children:
strong:
archery2: 2
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery2:
name: 'Archery2'
experience-table: class_exp_table
max-level: 2
size: 1
children:
strong:
archery3: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery3:
name: 'Archery3'
experience-table: class_exp_table
max-level: 2
size: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
icons:
unlocked:
1:
item: 'GREEN_DYE'
locked:
1:
item: "BROWN_DYE"
unlockable:
1:
item: "BLUE_DYE"
fully-locked:
1:
item: "BLACK_DYE"
path:
item: "WHITE_DYE"

View File

@ -4,117 +4,408 @@ lore:
- '&6This skill tree is used for combat abilities!'
type: 'linked'
item: 'DIAMOND_AXE'
max-point-spent: 20
nodes:
strength:
name: 'Combat strength'
a1:
name: 'Cooldown Reduction'
coordinates:
x: -3
y: -2
max-level: 1
is-root: true
size: 1
experience-table: skilltree_cooldown_reduction5
lores:
0:
- "&eReduces cooldowns of item and player skills (5%)"
1:
- "&eReduces cooldowns of item and player skills (5%)"
a2:
name: 'Cooldown Reduction'
size: 1
max-children: 1
experience-table: skilltree_cooldown_reduction10
coordinates:
x: -2
y: -2
lores:
0:
- "&eReduces cooldowns of item and player skills (10%)"
1:
- "&eReduces cooldowns of item and player skills (10%)"
a3:
name: 'Cooldown Reduction'
size: 1
max-children: 1
experience-table: skilltree_cooldown_reduction15
coordinates:
x: -1
y: -2
lores:
0:
- "&eReduces cooldowns of item and player skills (15%)"
1:
- "&eReduces cooldowns of item and player skills (15%)"
### B
b1:
name: 'Critical Strike Chance'
size: 1
max-children: 1
experience-table: skilltree_critical_strike_chance1
coordinates:
x: 0
y: -2
lores:
0:
- "&eCritical Strikes deal more damage in % chance"
1:
- "&eCritical Strikes deal more damage in +%2 chance"
b2:
name: 'Critical Strike Chance'
size: 1
max-children: 1
experience-table: skilltree_critical_strike_chance2
coordinates:
x: 0
y: -1
lores:
0:
- "&eCritical Strikes deal more damage in % chance"
1:
- "&eCritical Strikes deal more damage in +%3 chance"
b3:
name: 'Critical Strike Chance'
size: 1
max-children: 2
experience-table: skilltree_critical_strike_chance3
coordinates:
x: 0
y: 0
max-level: 2
is-root: true
size: 1
experience-table: class_exp_table
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
- "&eCritical Strikes deal more damage in % chance"
1:
- "&eCritical Strikes deal more damage in +%5 chance"
## C
force:
name: 'Force'
c1:
name: 'Life Steal'
size: 1
max-children: 1
experience-table: class_exp_table
experience-table: skilltree_lifesteal1
coordinates:
x: 1
x: -1
y: 0
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
weaponry:
name: 'Weaponry'
coordinates:
x: 2
y: 0
experience-table: class_exp_table
max-level: 2
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%1"
1:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%1"
c2:
name: 'Life Steal'
size: 1
max-children: 1
experience-table: skilltree_lifesteal2
coordinates:
x: -2
y: 0
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery:
name: 'Archery'
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
1:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
c3:
name: 'Life Steal'
size: 1
max-children: 1
experience-table: skilltree_lifesteal2
coordinates:
x: 1
x: -3
y: 0
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%3"
1:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%3"
## D
d1:
name: 'Damage Reduction'
size: 1
max-children: 1
experience-table: skilltree_damage_reduction1
coordinates:
x: 0
y: 1
experience-table: class_exp_table
max-level: 2
size: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery2:
name: 'Archery2'
- "&eReduces damage from any source in +%1"
1:
- "&eReduces damage from any source in +%1"
d2:
name: 'Damage Reduction'
size: 1
max-children: 2
experience-table: skilltree_damage_reduction2
coordinates:
x: 0
y: 2
lores:
0:
- "&eReduces damage from any source in +%2"
1:
- "&eReduces damage from any source in +%2"
d3:
name: 'Damage Reduction'
size: 1
max-children: 1
experience-table: skilltree_damage_reduction2
coordinates:
x: -1
y: 2
lores:
0:
- "&eReduces damage from any source in +%2"
1:
- "&eReduces damage from any source in +%2"
## E
e1:
name: 'Health Regeneration'
size: 1
max-children: 1
experience-table: skilltree_health_regeneration1
coordinates:
x: -2
y: 2
lores:
0:
- "&eHealth regen in pts/sec +1"
1:
- "&eHealth regen in pts/sec +1"
e2:
name: 'Health Regeneration'
size: 1
max-children: 1
experience-table: skilltree_health_regeneration2
coordinates:
x: -3
y: 2
lores:
0:
- "&eHealth regen in pts/sec +2"
1:
- "&eHealth regen in pts/sec +2"
e3:
name: 'Health Regeneration'
size: 1
max-children: 1
experience-table: skilltree_health_regeneration2
coordinates:
x: -3
y: 1
lores:
0:
- "&eHealth regen in pts/sec +2"
1:
- "&eHealth regen in pts/sec +2"
## F
f1:
name: 'Mana Regeneration'
size: 1
max-children: 1
experience-table: skilltree_mana_regeneration1
coordinates:
x: 1
y: 2
experience-table: class_exp_table
max-level: 2
size: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery3:
name: 'Archery3'
- "&eMana regen in pts/sec +1"
1:
- "&eMana regen in pts/sec +1"
f2:
name: 'Mana Regeneration'
size: 1
max-children: 1
experience-table: skilltree_mana_regeneration2
coordinates:
x: 1
y: 3
max-level: 2
size: 1
x: 2
y: 2
lores:
0:
- "&eThis lore will be shown when level 0"
1 :
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
- "&eMana regen in pts/sec +2"
1:
- "&eMana regen in pts/sec +2"
f3:
name: 'Mana Regeneration'
size: 1
max-children: 1
experience-table: skilltree_mana_regeneration2
coordinates:
x: 3
y: 2
lores:
0:
- "&eMana regen in pts/sec +2"
1:
- "&eMana regen in pts/sec +2"
## G
g1:
name: 'Magic Damage'
size: 1
max-children: 1
experience-table: skilltree_magic_damage1
coordinates:
x: 3
y: 1
lores:
0:
- "&eAdditional magic skill damage in +%1"
1:
- "&eAdditional magic skill damage in +%1"
g2:
name: 'Magic Damage'
size: 1
max-children: 1
experience-table: skilltree_magic_damage2
coordinates:
x: 4
y: 1
lores:
0:
- "&eAdditional magic skill damage in +%2"
1:
- "&eAdditional magic skill damage in +%2"
g3:
name: 'Magic Damage'
size: 1
max-children: 1
experience-table: skilltree_magic_damage2
coordinates:
x: 4
y: 0
lores:
0:
- "&eAdditional magic skill damage in +%2"
1:
- "&eAdditional magic skill damage in +%2"
## H
h1:
name: 'Max Health'
size: 1
max-children: 1
experience-table: skilltree_max_health2
coordinates:
x: 4
y: -1
lores:
0:
- "&eAdditional amount of health in +%2"
1:
- "&eAdditional amount of health in +%2"
h2:
name: 'Max Health'
size: 1
max-children: 1
experience-table: skilltree_max_health4
coordinates:
x: 4
y: -2
lores:
0:
- "&eAdditional amount of health in +%4"
1:
- "&eAdditional amount of health in +%4"
h3:
name: 'Max Health'
size: 1
max-children: 1
experience-table: skilltree_max_health4
coordinates:
x: 3
y: -2
lores:
0:
- "&eAdditional amount of health in +%4"
1:
- "&eAdditional amount of health in +%4"
## J
j1:
name: 'Weapon Damage'
size: 1
max-children: 1
experience-table: skilltree_weapon_damage2
coordinates:
x: 2
y: -2
lores:
0:
- "&eAdditional on-hit weapon damage in +%2."
1:
- "&eAdditional on-hit weapon damage in +%2."
j2:
name: 'Weapon Damage'
size: 1
max-children: 1
experience-table: skilltree_weapon_damage4
coordinates:
x: 2
y: -1
lores:
0:
- "&eAdditional on-hit weapon damage in +%4"
1:
- "&eAdditional on-hit weapon damage in +%4"
j3:
name: 'Weapon Damage'
size: 1
max-children: 1
experience-table: skilltree_weapon_damage4
coordinates:
x: 2
y: 0
lores:
0:
- "&eAdditional on-hit weapon damage in +%4"
1:
- "&eAdditional on-hit weapon damage in +%4"
paths:
path1:

View File

@ -1,170 +0,0 @@
id: customcombat
name: CustomCombat
type: custom
item: GOLDEN_AXE
lore:
- '&6This autoskill tree is used for combat abilities!'
nodes:
strength:
name: 'Combat strength'
children:
strong:
force: 2
agility: 1
wisdom: 3
experience-table: class_exp_table
max-level: 3
size: 1
coordinates:
x: 0
y: 0
lores:
0:
- "&eThis lore will be shown when level 0"
1:
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
wisdom:
name: 'Wisdom'
size: 1
max-children: 2
max-level: 2
coordinates:
x: -1
y: 0
experience-table: class_exp_table
lores:
0:
- "&eThis lore will be shown when level 0"
1:
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
agility:
name: 'Agility'
size: 1
max-children: 2
max-level: 2
experience-table: class_exp_table
coordinates:
x: 1
y: 0
children:
strong:
agility2: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1:
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
agility2:
name: 'Agility2'
size: 1
max-children: 2
max-level: 2
experience-table: class_exp_table
coordinates:
x: 1
y: -1
lores:
0:
- "&eThis lore will be shown when level 0"
1:
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
force:
name: 'Force'
size: 1
max-children: 1
max-level: 2
children:
strong:
weaponry: 1
archery: 1
experience-table: class_exp_table
coordinates:
x: 0
y: 1
lores:
0:
- "&eThis lore will be shown when level 0"
1:
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
weaponry:
name: 'Weaponry'
max-level: 2
size: 1
coordinates:
x: 1
y: 1
experience-table: class_exp_table
lores:
0:
- "&eThis lore will be shown when level 0"
1:
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery:
name: 'Archery'
max-level: 2
size: 1
experience-table: class_exp_table
coordinates:
x: 0
y: -1
lores:
0:
- "&eThis lore will be shown when level 0"
1:
- "&eThis lore will be shown when level 1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
icons:
unlocked:
1:
item: 'YELLOW_DYE'
model-data: 1
2:
item: 'ORANGE_DYE'
model-data: 0
locked:
1:
item: "BROWN_DYE"
unlockable:
1:
item: "BLUE_DYE"
fully-locked:
1:
item: "BLACK_DYE"
path:
item: "WHITE_DYE"

View File

@ -0,0 +1,428 @@
id: 'general'
name: '&4General'
type: 'custom'
item: 'DIAMOND_AXE'
lore:
- '&6This skill tree is used for combat abilities!'
max-point-spent: 11
nodes:
#### A
a1:
name: 'Mana Regeneration'
coordinates:
x: -3
y: -2
max-level: 1
is-root: true
size: 1
experience-table: skilltree_mana_regeneration1
lores:
0:
- "&eMana regen in pts/sec +1"
1:
- "&eMana regen in pts/sec +1"
a2:
name: 'Mana Regeneration'
coordinates:
x: -2
y: -2
parents:
strong:
a1: 1
max-level: 1
size: 1
experience-table: skilltree_mana_regeneration2
lores:
0:
- "&eMana regen in pts/sec +2"
1:
- "&eMana regen in pts/sec +2"
a3:
name: 'Mana Regeneration'
coordinates:
x: -1
y: -1
parents:
strong:
a2: 1
max-level: 1
size: 1
experience-table: skilltree_mana_regeneration2
lores:
0:
- "&eMana regen in pts/sec +2"
1:
- "&eMana regen in pts/sec +2"
#### B
b1:
name: 'Health Regeneration'
coordinates:
x: -3
y: -0
max-level: 1
is-root: true
size: 1
experience-table: skilltree_health_regeneration1
lores:
0:
- "&eHealth regen in pts/sec +1"
1:
- "&eHealth regen in pts/sec +1"
b2:
name: 'Health Regeneration'
coordinates:
x: -2
y: -0
parents:
strong:
b1: 1
max-level: 1
size: 1
experience-table: skilltree_health_regeneration2
lores:
0:
- "&eHealth regen in pts/sec +2"
1:
- "&eHealth regen in pts/sec +2"
b3:
name: 'Health Regeneration'
coordinates:
x: -1
y: -0
parents:
strong:
b2: 1
max-level: 1
size: 1
experience-table: skilltree_health_regeneration2
lores:
0:
- "&eHealth regen in pts/sec +2"
1:
- "&eHealth regen in pts/sec +2"
#### C
c1:
name: 'Cooldown Reduction'
coordinates:
x: -3
y: 2
max-level: 1
is-root: true
size: 1
experience-table: skilltree_cooldown_reduction5
lores:
0:
- "&eReduces cooldowns of item and player skills (5%)"
1:
- "&eReduces cooldowns of item and player skills (5%)"
c2:
name: 'Cooldown Reduction'
coordinates:
x: -2
y: 2
parents:
strong:
c1: 1
max-level: 1
size: 1
experience-table: skilltree_cooldown_reduction10
lores:
0:
- "&eReduces cooldowns of item and player skills (10%)"
1:
- "&eReduces cooldowns of item and player skills (10%)"
c3:
name: 'Cooldown Reduction'
coordinates:
x: -1
y: 1
parents:
strong:
c2: 1
max-level: 1
size: 1
experience-table: skilltree_cooldown_reduction15
lores:
0:
- "&eReduces cooldowns of item and player skills (15%)"
1:
- "&eReduces cooldowns of item and player skills (15%)"
#### D
d1:
name: 'Critical Strike Chance'
coordinates:
x: 0
y: 0
parents:
soft:
a3: 1
b3: 1
c3: 1
max-level: 1
size: 1
experience-table: skilltree_critical_strike_chance1
lores:
0:
- "&eCritical Strikes deal more damage in +%2 chance"
1:
- "&eCritical Strikes deal more damage in +%2 chance"
d2:
name: 'Critical Strike Chance'
coordinates:
x: 1
y: 0
parents:
strong:
d1: 1
max-level: 1
size: 1
experience-table: skilltree_critical_strike_chance2
lores:
0:
- "&eCritical Strikes deal more damage in % chance"
1:
- "&eCritical Strikes deal more damage in +%3 chance"
d3:
name: 'Critical Strike Chance'
coordinates:
x: 2
y: 0
parents:
strong:
d2: 1
max-level: 1
size: 1
experience-table: skilltree_critical_strike_chance5
lores:
0:
- "&eCritical Strikes deal more damage in % chance"
1:
- "&eCritical Strikes deal more damage in +%5 chance"
#### E
e1:
name: 'Damage Reduction'
coordinates:
x: 2
y: 1
parents:
strong:
d3: 1
max-level: 1
size: 1
experience-table: skilltree_damage_reduction1
lores:
0:
- "&eReduces damage from any source in %."
1:
- "&eReduces damage from any source in +%1."
e2:
name: 'Damage Reduction'
coordinates:
x: 2
y: 2
parents:
strong:
e1: 1
max-level: 1
size: 1
experience-table: skilltree_damage_reduction2
lores:
0:
- "&eReduces damage from any source in %."
1:
- "&eReduces damage from any source in +%2."
e3:
name: 'Damage Reduction'
coordinates:
x: 3
y: 2
parents:
strong:
e2: 1
max-level: 1
size: 1
experience-table: skilltree_damage_reduction2
lores:
0:
- "&eReduces damage from any source in %."
1:
- "&eReduces damage from any source in +%2."
#### F
f1:
name: 'Weapon Damage'
coordinates:
x: 2
y: -1
parents:
strong:
d3: 1
max-level: 1
size: 1
experience-table: skilltree_weapon_damage1
lores:
0:
- "&eAdditional on-hit weapon damage in +%1."
1:
- "&eAdditional on-hit weapon damage in +%1."
f2:
name: 'Weapon Damage'
coordinates:
x: 2
y: -2
parents:
strong:
f1: 1
max-level: 1
size: 1
experience-table: skilltree_weapon_damage2
lores:
0:
- "&eAdditional on-hit weapon damage in +%2."
1:
- "&eAdditional on-hit weapon damage in +%2."
f3:
name: 'Weapon Damage'
coordinates:
x: 3
y: -2
parents:
strong:
f2: 1
max-level: 1
size: 1
experience-table: skilltree_weapon_damage2
lores:
0:
- "&eAdditional on-hit weapon damage in +%2."
1:
- "&eAdditional on-hit weapon damage in +%2."
##last line
g1:
name: 'Life Steal'
coordinates:
x: 4
y: -1
parents:
strong:
f3: 1
max-level: 1
size: 1
experience-table: skilltree_lifesteal3
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting weapon damage."
1:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%3"
j1:
name: 'Max Health'
coordinates:
x: 4
y: 0
parents:
soft:
g1: 1
h1: 1
max-level: 1
size: 1
experience-table: skilltree_max_health5
lores:
0:
- "&eAdditional amount of health in +%5"
1:
- "&eAdditional amount of health in +%5"
h1:
name: 'Magic Damage'
coordinates:
x: 4
y: 1
parents:
strong:
e3: 1
max-level: 1
size: 1
experience-table: skilltree_magic_damage3
lores:
0:
- "&eAdditional magic skill damage in +%3"
1:
- "&eAdditional magic skill damage in +%3"
icons:
unlocked:
1:
item: 'GREEN_DYE'
locked:
1:
item: "BROWN_DYE"
unlockable:
1:
item: "BLUE_DYE"
fully-locked:
1:
item: "BLACK_DYE"
path:
item: "WHITE_DYE"

View File

@ -0,0 +1,426 @@
id: 'mage-arcane-mage'
name: '&4Mage'
type: 'custom'
item: 'DIAMOND_AXE'
lore:
- '&6This skill tree is used for Mage & Arcane Mage class only!'
max-point-spent: 21
nodes:
#### A
a1:
name: 'Mana Regeneration'
coordinates:
x: 1
y: -2
max-level: 1
is-root: true
size: 1
experience-table: skilltree_mana_regeneration1
lores:
0:
- "&eMana regen in pts/sec +1"
1:
- "&eMana regen in pts/sec +1"
a2:
name: 'Mana Regeneration'
coordinates:
x: 0
y: -2
parents:
strong:
a1: 1
max-level: 1
size: 1
experience-table: skilltree_mana_regeneration2
lores:
0:
- "&eMana regen in pts/sec +2"
1:
- "&eMana regen in pts/sec +2"
a3:
name: 'Mana Regeneration'
coordinates:
x: -1
y: -2
parents:
strong:
a2: 1
max-level: 1
size: 1
experience-table: skilltree_mana_regeneration2
lores:
0:
- "&eMana regen in pts/sec +2"
1:
- "&eMana regen in pts/sec +2"
## B
b1:
name: 'Skill Damage'
coordinates:
x: -2
y: -1
parents:
strong:
a3: 1
max-level: 1
size: 1
experience-table: skilltree_skill_damage5
lores:
0:
- "&eAdditional ability damage in +%5"
1:
- "&eAdditional ability damage in +%5"
b2:
name: 'Skill Damage'
coordinates:
x: -3
y: 0
parents:
strong:
b1: 1
max-level: 1
size: 1
experience-table: skilltree_skill_damage5
lores:
0:
- "&eAdditional ability damage in +%5"
1:
- "&eAdditional ability damage in +%5"
b3:
name: 'Skill Damage'
coordinates:
x: -2
y: 1
parents:
strong:
b2: 1
max-level: 1
size: 1
experience-table: skilltree_skill_damage10
lores:
0:
- "&eAdditional ability damage in +%10"
1:
- "&eAdditional ability damage in +%10"
## C
c1:
name: 'Spell Vampirism'
coordinates:
x: -2
y: 2
parents:
strong:
b3: 1
max-level: 1
size: 1
experience-table: skilltree_spell_vampirism2
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting skill damage +%2"
1:
- "&ePercentage of damage you gain back as health when inflicting skill damage +%2"
c2:
name: 'Spell Vampirism'
coordinates:
x: -1
y: 2
parents:
strong:
c1: 1
max-level: 1
size: 1
experience-table: skilltree_spell_vampirism2
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting skill damage +%2"
1:
- "&ePercentage of damage you gain back as health when inflicting skill damage +%2"
c3:
name: 'Spell Vampirism'
coordinates:
x: 0
y: 2
parents:
strong:
c2: 1
max-level: 1
size: 1
experience-table: skilltree_spell_vampirism6
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting skill damage +%6"
1:
- "&ePercentage of damage you gain back as health when inflicting skill damage +%6"
## D
d1:
name: 'Additional Experience'
coordinates:
x: 0
y: 1
parents:
strong:
c3: 1
max-level: 1
size: 1
experience-table: skilltree_additional_experience2
lores:
0:
- "&eAdditional MMOCore main class experience +%2"
1:
- "&eAdditional MMOCore main class experience +%2"
d2:
name: 'Additional Experience'
coordinates:
x: 0
y: 0
parents:
strong:
d1: 1
max-level: 1
size: 1
experience-table: skilltree_additional_experience3
lores:
0:
- "&eAdditional MMOCore main class experience +%3"
1:
- "&eAdditional MMOCore main class experience +%3"
d3:
name: 'Additional Experience'
coordinates:
x: 1
y: 0
parents:
strong:
d2: 1
max-level: 1
size: 1
experience-table: skilltree_additional_experience5
lores:
0:
- "&eAdditional MMOCore main class experience +%5"
1:
- "&eAdditional MMOCore main class experience +%5"
## E
e1:
name: 'Magic Damage Reduction'
coordinates:
x: 2
y: 0
parents:
strong:
d3: 1
max-level: 1
size: 1
experience-table: skilltree_magic_damage_reduction5
lores:
0:
- "&eReduce magic damage dealt by potions %5"
1:
- "&eReduce magic damage dealt by potions %5"
e2:
name: 'Magic Damage Reduction'
coordinates:
x: 2
y: 1
parents:
strong:
e1: 1
max-level: 1
size: 1
experience-table: skilltree_magic_damage_reduction5
lores:
0:
- "&eReduce magic damage dealt by potions %5"
1:
- "&eReduce magic damage dealt by potions %5"
e3:
name: 'Magic Damage Reduction'
coordinates:
x: 2
y: 2
parents:
strong:
e2: 1
max-level: 1
size: 1
experience-table: skilltree_magic_damage_reduction10
lores:
0:
- "&eReduce magic damage dealt by potions %10"
1:
- "&eReduce magic damage dealt by potions %10"
## F
f1:
name: 'Skill Critical Strike Chance'
coordinates:
x: 3
y: 2
parents:
strong:
e3: 1
max-level: 1
size: 1
experience-table: skilltree_skill_critical_strike_chance5
lores:
0:
- "&eIncreases the chance of dealing skill crits +%5"
1:
- "&eIncreases the chance of dealing skill crits +%5"
f2:
name: 'Skill Critical Strike Chance'
coordinates:
x: 4
y: 2
parents:
strong:
f1: 1
max-level: 1
size: 1
experience-table: skilltree_skill_critical_strike_chance10
lores:
0:
- "&eIncreases the chance of dealing skill crits +%10"
1:
- "&eIncreases the chance of dealing skill crits +%10"
f3:
name: 'Skill Critical Strike Chance'
coordinates:
x: 4
y: 1
parents:
strong:
f2: 1
max-level: 1
size: 1
experience-table: skilltree_skill_critical_strike_chance15
lores:
0:
- "&eIncreases the chance of dealing skill crits +%15"
1:
- "&eIncreases the chance of dealing skill crits +%15"
## G
g1:
name: 'Magic Damage'
coordinates:
x: 4
y: 0
parents:
strong:
f3: 1
max-level: 1
size: 1
experience-table: skilltree_magic_damage1
lores:
0:
- "&eAdditional magic skill damage in +%1"
1:
- "&eAdditional magic skill damage in +%1"
g2:
name: 'Magic Damage'
coordinates:
x: 4
y: -1
parents:
strong:
g1: 1
max-level: 1
size: 1
experience-table: skilltree_magic_damage2
lores:
0:
- "&eAdditional magic skill damage in +%2"
1:
- "&eAdditional magic skill damage in +%2"
g3:
name: 'Magic Damage'
coordinates:
x: 4
y: -2
parents:
strong:
g2: 1
max-level: 1
size: 1
experience-table: skilltree_magic_damage2
lores:
0:
- "&eAdditional magic skill damage in +%2"
1:
- "&eAdditional magic skill damage in +%2"
icons:
unlocked:
1:
item: 'GREEN_DYE'
locked:
1:
item: "BROWN_DYE"
unlockable:
1:
item: "BLUE_DYE"
fully-locked:
1:
item: "BLACK_DYE"
path:
item: "WHITE_DYE"

View File

@ -0,0 +1,422 @@
id: 'rogue-marksman'
name: '&4Rogue&Marksman'
type: 'custom'
item: 'DIAMOND_AXE'
lore:
- '&6This skill tree is used for Rogue & Marksman class only!'
max-point-spent: 21
nodes:
#### A
a1:
name: 'Additional Experience'
coordinates:
x: -3
y: 0
max-level: 1
is-root: true
size: 1
experience-table: skilltree_additional_experience2
lores:
0:
- "&eAdditional MMOCore main class experience +%2"
1:
- "&eAdditional MMOCore main class experience +%2"
a2:
name: 'Additional Experience'
coordinates:
x: -2
y: 0
parents:
strong:
a1: 1
max-level: 1
size: 1
experience-table: skilltree_additional_experience3
lores:
0:
- "&eAdditional MMOCore main class experience +%3"
1:
- "&eAdditional MMOCore main class experience +%3"
a3:
name: 'Additional Experience'
coordinates:
x: -1
y: 0
parents:
strong:
a2: 1
max-level: 1
size: 1
experience-table: skilltree_additional_experience5
lores:
0:
- "&eAdditional MMOCore main class experience +%5"
1:
- "&eAdditional MMOCore main class experience +%5"
## B
b1:
name: 'Arrow Velocity'
coordinates:
x: -1
y: -1
parents:
strong:
a3: 1
max-level: 1
size: 1
experience-table: skilltree_arrow_velocity10
lores:
0:
- "&eDetermines how far your weapon can shoot +%10"
1:
- "&eDetermines how far your weapon can shoot +%10"
b2:
name: 'Arrow Velocity'
coordinates:
x: -1
y: -2
parents:
strong:
b1: 1
max-level: 1
size: 1
experience-table: skilltree_arrow_velocity15
lores:
0:
- "&eDetermines how far your weapon can shoot +%15"
1:
- "&eDetermines how far your weapon can shoot +%15"
b3:
name: 'Arrow Velocity'
coordinates:
x: 0
y: -2
parents:
strong:
b2: 1
max-level: 1
size: 1
experience-table: skilltree_arrow_velocity25
lores:
0:
- "&eDetermines how far your weapon can shoot +%25"
1:
- "&eDetermines how far your weapon can shoot +%25"
## C
c1:
name: 'Life Steal'
coordinates:
x: 1
y: -2
parents:
strong:
b3: 1
max-level: 1
size: 1
experience-table: skilltree_lifesteal1
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%1"
1:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%1"
c2:
name: 'Life Steal'
coordinates:
x: 2
y: -2
parents:
strong:
c1: 1
max-level: 1
size: 1
experience-table: skilltree_lifesteal2
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
1:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
c3:
name: 'Life Steal'
coordinates:
x: 3
y: -2
parents:
strong:
c2: 1
max-level: 1
size: 1
experience-table: skilltree_lifesteal2
lores:
0:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
1:
- "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
## D
d1:
name: 'Knockback Resistance'
coordinates:
x: 3
y: -1
parents:
strong:
c3: 1
max-level: 1
size: 1
experience-table: skilltree_knockback_resistance5
lores:
0:
- "&eThe chance of you to block the knockback +%5"
1:
- "&eThe chance of you to block the knockback +%5"
d2:
name: 'Knockback Resistance'
coordinates:
x: 4
y: -1
parents:
strong:
d1: 1
max-level: 1
size: 1
experience-table: skilltree_knockback_resistance5
lores:
0:
- "&eThe chance of you to block the knockback +%5"
1:
- "&eThe chance of you to block the knockback +%5"
d3:
name: 'Knockback Resistance'
coordinates:
x: 4
y: 0
parents:
strong:
d2: 1
max-level: 1
size: 1
experience-table: skilltree_knockback_resistance10
lores:
0:
- "&eThe chance of you to block the knockback +%5"
1:
- "&eThe chance of you to block the knockback +%5"
## E
e1:
name: 'Critical Strike Chance'
coordinates:
x: 4
y: 1
parents:
strong:
d3: 1
max-level: 1
size: 1
experience-table: skilltree_critical_strike_chance2
lores:
0:
- "&eCritical Strikes deal more damage in +%2 chance"
1:
- "&eCritical Strikes deal more damage in +%2 chance"
e2:
name: 'Critical Strike Chance'
coordinates:
x: 4
y: 2
parents:
strong:
e1: 1
max-level: 1
size: 1
experience-table: skilltree_critical_strike_chance3
lores:
0:
- "&eCritical Strikes deal more damage in +%3 chance"
1:
- "&eCritical Strikes deal more damage in +%3 chance"
e3:
name: 'Critical Strike Chance'
coordinates:
x: 3
y: 2
parents:
strong:
e2: 1
max-level: 1
size: 1
experience-table: skilltree_critical_strike_chance5
lores:
0:
- "&eCritical Strikes deal more damage in +%5 chance"
1:
- "&eCritical Strikes deal more damage in +%5 chance"
## F
f1:
name: 'Movement Speed'
coordinates:
x: 2
y: 2
parents:
strong:
e3: 1
max-level: 1
size: 1
experience-table: skilltree_movement_speed2
lores:
0:
- "&eMovement Speed increase walk speed. +%2"
1:
- "&eMovement Speed increase walk speed. +%2"
f2:
name: 'Movement Speed'
coordinates:
x: 2
y: 1
parents:
strong:
f1: 1
max-level: 1
size: 1
experience-table: skilltree_movement_speed2
lores:
0:
- "&eMovement Speed increase walk speed. +%2"
1:
- "&eMovement Speed increase walk speed. +%2"
f3:
name: 'Movement Speed'
coordinates:
x: 1
y: 1
parents:
strong:
f2: 1
max-level: 1
size: 1
experience-table: skilltree_movement_speed6
lores:
0:
- "&eMovement Speed increase walk speed. +%6"
1:
- "&eMovement Speed increase walk speed. +%6"
## G
g1:
name: 'Projectile Damage'
coordinates:
x: 0
y: 1
parents:
strong:
f3: 1
max-level: 1
size: 1
experience-table: skilltree_projectile_damage2
lores:
0:
- "&eAdditional skill/weapon projectile damage +%2"
1:
- "&eAdditional skill/weapon projectile damage +%2"
g2:
name: 'Projectile Damage'
coordinates:
x: 0
y: 2
parents:
strong:
g1: 1
max-level: 1
size: 1
experience-table: skilltree_projectile_damage2
lores:
0:
- "&eAdditional skill/weapon projectile damage +%2"
1:
- "&eAdditional skill/weapon projectile damage +%2"
g3:
name: 'Projectile Damage'
coordinates:
x: -1
y: 2
parents:
strong:
g2: 1
max-level: 1
size: 1
experience-table: skilltree_projectile_damage6
lores:
0:
- "&eAdditional skill/weapon projectile damage +%6"
1:
- "&eAdditional skill/weapon projectile damage +%6"
icons:
unlocked:
1:
item: 'GREEN_DYE'
locked:
1:
item: "BROWN_DYE"
unlockable:
1:
item: "BLUE_DYE"
fully-locked:
1:
item: "BLACK_DYE"
path:
item: "WHITE_DYE"

View File

@ -0,0 +1,424 @@
id: 'warrior-paladin'
name: '&4Warrior&Paladin'
type: 'custom'
item: 'DIAMOND_AXE'
lore:
- '&6This skill tree is used for Warrior and Paladin class only!'
max-point-spent: 21
nodes:
#### A
a1:
name: 'Attack Speed'
coordinates:
x: -1
y: 2
max-level: 1
is-root: true
size: 1
experience-table: skilltree_attack_speed5
lores:
0:
- "&eThe speed at which your weapon strikes. +%5"
1:
- "&eThe speed at which your weapon strikes. +%5"
a2:
name: 'Attack Speed'
coordinates:
x: -2
y: 1
parents:
strong:
a1: 1
max-level: 1
size: 1
experience-table: skilltree_attack_speed10
lores:
0:
- "&eThe speed at which your weapon strikes. +%10"
1:
- "&eThe speed at which your weapon strikes. +%10"
a3:
name: 'Attack Speed'
coordinates:
x: -3
y: 0
parents:
strong:
a2: 1
max-level: 1
size: 1
experience-table: skilltree_attack_speed15
lores:
0:
- "&eThe speed at which your weapon strikes. +%15"
1:
- "&eThe speed at which your weapon strikes. +%15"
## B
b1:
name: 'Health Regeneration'
coordinates:
x: -2
y: -1
parents:
strong:
a3: 1
max-level: 1
size: 1
experience-table: skilltree_health_regeneration1
lores:
0:
- "&eCCC"
1:
- "&eCCC"
b2:
name: 'Health Regeneration'
coordinates:
x: -1
y: -2
parents:
strong:
b1: 1
max-level: 1
size: 1
experience-table: skilltree_health_regeneration2
lores:
0:
- "&eCCC"
1:
- "&eCCC"
b3:
name: 'Health Regeneration'
coordinates:
x: 0
y: -2
parents:
strong:
b2: 1
max-level: 1
size: 1
experience-table: skilltree_health_regeneration2
lores:
0:
- "&eCCC"
1:
- "&eCCC"
## C
c1:
name: 'Physical Damage Reduction'
coordinates:
x: 0
y: -1
parents:
strong:
b3: 1
max-level: 1
size: 1
experience-table: skilltree_physical_damage_reduction5
lores:
0:
- "&eReduces physical damage In -%5"
1:
- "&eReduces physical damage In -%5"
c2:
name: 'Physical Damage Reduction'
coordinates:
x: -1
y: 0
parents:
strong:
c1: 1
max-level: 1
size: 1
experience-table: skilltree_physical_damage_reduction10
lores:
0:
- "&eReduces physical damage In -%10"
1:
- "&eReduces physical damage In -%10"
c3:
name: 'Physical Damage Reduction'
coordinates:
x: 0
y: 1
parents:
strong:
c2: 1
max-level: 1
size: 1
experience-table: skilltree_physical_damage_reduction15
lores:
0:
- "&eReduces physical damage In -%15"
1:
- "&eReduces physical damage In -%15"
## D
d1:
name: 'Parry Rating'
coordinates:
x: 1
y: 1
parents:
strong:
c3: 1
max-level: 1
size: 1
experience-table: skilltree_parry_rating5
lores:
0:
- "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5"
1:
- "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5"
d2:
name: 'Parry Rating'
coordinates:
x: 2
y: 1
parents:
strong:
d1: 1
max-level: 1
size: 1
experience-table: skilltree_parry_rating5
lores:
0:
- "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5"
1:
- "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%5"
d3:
name: 'Parry Rating'
coordinates:
x: 2
y: 2
parents:
strong:
d2: 1
max-level: 1
size: 1
experience-table: skilltree_parry_rating10
lores:
0:
- "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%10"
1:
- "&eThe chance to parry an attack. Parrying negates the damage and knocks the attacker back +%10"
## E
e1:
name: 'Knockback Resistance'
coordinates:
x: 3
y: 2
parents:
strong:
d3: 1
max-level: 1
size: 1
experience-table: skilltree_knockback_resistance5
lores:
0:
- "&eThe chance of you to block the knockback +%5"
1:
- "&eThe chance of you to block the knockback +%5"
e2:
name: 'Knockback Resistance'
coordinates:
x: 4
y: 2
parents:
strong:
e1: 1
max-level: 1
size: 1
experience-table: skilltree_knockback_resistance5
lores:
0:
- "&eThe chance of you to block the knockback +%5"
1:
- "&eThe chance of you to block the knockback +%5"
e3:
name: 'Knockback Resistance'
coordinates:
x: 4
y: 1
parents:
strong:
e2: 1
max-level: 1
size: 1
experience-table: skilltree_knockback_resistance10
lores:
0:
- "&eThe chance of you to block the knockback +%10"
1:
- "&eThe chance of you to block the knockback +%10"
## F
f1:
name: 'Dodge Rating'
coordinates:
x: 4
y: 0
parents:
strong:
e3: 1
max-level: 1
size: 1
experience-table: skilltree_dodge_rating2
lores:
0:
- "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%2"
1:
- "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%2"
f2:
name: 'Dodge Rating'
coordinates:
x: 4
y: -1
parents:
strong:
f1: 1
max-level: 1
size: 1
experience-table: skilltree_dodge_rating3
lores:
0:
- "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%3"
1:
- "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%3"
f3:
name: 'Dodge Rating'
coordinates:
x: 4
y: -2
parents:
strong:
f2: 1
max-level: 1
size: 1
experience-table: skilltree_dodge_rating5
lores:
0:
- "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%5"
1:
- "&eThe change to dodge an attack. Dodging completely negates the attack damage. +%5"
## G
g1:
name: 'Weapon Damage'
coordinates:
x: 3
y: -2
parents:
strong:
f3: 1
max-level: 1
size: 1
experience-table: skilltree_weapon_damage1
lores:
0:
- "&eAdditional on-hit weapon damage in +%1."
1:
- "&eAdditional on-hit weapon damage in +%1."
g2:
name: 'Weapon Damage'
coordinates:
x: 2
y: -2
parents:
strong:
g1: 1
max-level: 1
size: 1
experience-table: skilltree_weapon_damage2
lores:
0:
- "&eAdditional on-hit weapon damage in +%1."
1:
- "&eAdditional on-hit weapon damage in +%1."
g3:
name: 'Weapon Damage'
coordinates:
x: 2
y: -1
parents:
strong:
g2: 1
max-level: 1
size: 1
experience-table: skilltree_weapon_damage2
lores:
0:
- "&eAdditional on-hit weapon damage in +%1."
1:
- "&eAdditional on-hit weapon damage in +%1."
icons:
unlocked:
1:
item: 'GREEN_DYE'
locked:
1:
item: "BROWN_DYE"
unlockable:
1:
item: "BLUE_DYE"
fully-locked:
1:
item: "BLACK_DYE"
path:
item: "WHITE_DYE"

View File

@ -16,7 +16,7 @@
<description>Offer your players a brand new RPG experience!!</description>
<properties>
<revision>1.10.3-SNAPSHOT</revision>
<revision>1.11.0-SNAPSHOT</revision>
<downloadSources>false</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>