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"?> <?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> <module version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_16"> <component name="FacetManager">
<output url="file://$MODULE_DIR$/target/classes" /> <facet type="minecraft" name="Minecraft">
<output-test url="file://$MODULE_DIR$/target/test-classes" /> <configuration>
<content url="file://$MODULE_DIR$"> <autoDetectTypes>
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <platformType>SPIGOT</platformType>
<excludeFolder url="file://$MODULE_DIR$/target" /> <platformType>MCP</platformType>
</content> <platformType>BUKKIT</platformType>
<orderEntry type="inheritedJdk" /> </autoDetectTypes>
<orderEntry type="sourceFolder" forTests="false" /> </configuration>
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-1.17.1:dev" level="project" /> </facet>
<orderEntry type="library" name="Maven: io.papermc:paperlib:1.0.5" level="project" /> </component>
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.20" level="project" /> <component name="McpModuleSettings">
<orderEntry type="library" scope="PROVIDED" name="Maven: io.lumine:Mythic-Dist:5.0.1" level="project" /> <option name="srgType" value="SRG" />
<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" />
</component> </component>
</module> </module>

View File

@ -2,8 +2,12 @@ package net.Indyuce.mmocore.api.player;
import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.player.MMOPlayerData; 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.cooldown.CooldownMap;
import io.lumine.mythic.lib.player.skill.PassiveSkill; 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.MMOCore;
import net.Indyuce.mmocore.api.ConfigMessage; import net.Indyuce.mmocore.api.ConfigMessage;
import net.Indyuce.mmocore.api.SoundEvent; 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.guild.provided.Guild;
import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect; import net.Indyuce.mmocore.loot.chest.particle.SmallParticleEffect;
import net.Indyuce.mmocore.party.AbstractParty; 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.Unlockable;
import net.Indyuce.mmocore.player.stats.StatInfo;
import net.Indyuce.mmocore.skill.ClassSkill; import net.Indyuce.mmocore.skill.ClassSkill;
import net.Indyuce.mmocore.skill.RegisteredSkill; import net.Indyuce.mmocore.skill.RegisteredSkill;
import net.Indyuce.mmocore.skill.cast.SkillCastingHandler; import net.Indyuce.mmocore.skill.cast.SkillCastingHandler;
@ -58,7 +61,6 @@ import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.*; import java.util.*;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors;
public class PlayerData extends OfflinePlayerData implements Closable, ExperienceTableClaimer { 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 // NON-FINAL player data stuff made public to facilitate field change
public boolean noCooldown; public boolean noCooldown;
private boolean statLoaded;
public CombatRunnable combat; public CombatRunnable combat;
/** /**
@ -132,6 +135,15 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
this.mmoData = mmoData; this.mmoData = mmoData;
questData = new PlayerQuests(this); questData = new PlayerQuests(this);
playerStats = new PlayerStats(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,6 +179,8 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll())
skillTree.setupNodeState(this); skillTree.setupNodeState(this);
if (!statLoaded)
//Stat triggers setup //Stat triggers setup
for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) { for (SkillTree skillTree : MMOCore.plugin.skillTreeManager.getAll()) {
for (SkillTreeNode node : skillTree.getNodes()) { for (SkillTreeNode node : skillTree.getNodes()) {
@ -181,6 +195,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return pointSpent.getOrDefault(skillTree, 0); 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) { public void setSkillTreePoints(String treeId, int points) {
skillTreePoints.put(treeId, 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(); 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() { public Map<String, Integer> getSkillTreePoints() {
return skillTreePoints; return new HashMap(skillTreePoints);
} }
public void clearSkillTreePoints() {
skillTreePoints.clear();
}
public boolean containsSkillPointTreeId(String treeId) { public boolean containsSkillPointTreeId(String treeId) {
return skillTreePoints.containsKey(treeId); return skillTreePoints.containsKey(treeId);
} }
@ -210,8 +240,16 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return nodeLevelsString.entrySet(); return nodeLevelsString.entrySet();
} }
public boolean isStatLoaded() {
return statLoaded;
}
public Map<SkillTreeNode, Integer> getNodeLevels() { public Map<SkillTreeNode, Integer> getNodeLevels() {
return nodeLevels; return new HashMap<>(nodeLevels);
}
public void clearNodeLevels() {
nodeLevels.clear();
} }
public boolean canIncrementNodeLevel(SkillTreeNode node) { public boolean canIncrementNodeLevel(SkillTreeNode node) {
@ -219,7 +257,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
//Check the State of the node //Check the State of the node
if (nodeState != NodeState.UNLOCKED && nodeState != NodeState.UNLOCKABLE) if (nodeState != NodeState.UNLOCKED && nodeState != NodeState.UNLOCKABLE)
return false; 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) { public int getSkillTreePoint(String treeId) {
return skillTreePoints.get(treeId); return skillTreePoints.getOrDefault(treeId, 0);
} }
public void withdrawSkillTreePoints(String treeId, int withdraw) { public void withdrawSkillTreePoints(String treeId, int withdraw) {
@ -301,12 +339,17 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
for (SkillTreeNode node : skillTree.getNodes()) { for (SkillTreeNode node : skillTree.getNodes()) {
node.getExperienceTable().reset(this, node); node.getExperienceTable().reset(this, node);
setNodeLevel(node, 0); setNodeLevel(node, 0);
nodeStates.remove(node);
} }
skillTree.setupNodeState(this); skillTree.setupNodeState(this);
} }
public Map<SkillTreeNode, NodeState> getNodeStates() { public Map<SkillTreeNode, NodeState> getNodeStates() {
return nodeStates; return new HashMap<>(nodeStates);
}
public void clearNodeStates() {
nodeStates.clear();
} }
public Map<String, Integer> getNodeTimesClaimed() { public Map<String, Integer> getNodeTimesClaimed() {
@ -393,6 +436,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return Math.max(1, level); return Math.max(1, level);
} }
@Nullable @Nullable
public AbstractParty getParty() { public AbstractParty getParty() {
return MMOCore.plugin.partyModule.getParty(this); return MMOCore.plugin.partyModule.getParty(this);
@ -446,6 +490,7 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
public int getClaims(String key) { public int getClaims(String key) {
return tableItemClaims.getOrDefault(key, 0); return tableItemClaims.getOrDefault(key, 0);
} }
@Override @Override
@ -455,8 +500,10 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
public void setClaims(String key, int times) { public void setClaims(String key, int times) {
tableItemClaims.put(key, times); tableItemClaims.put(key, times);
} }
public Map<String, Integer> getItemClaims() { public Map<String, Integer> getItemClaims() {
return tableItemClaims; return tableItemClaims;
} }
@ -751,27 +798,21 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
if (value <= 0) if (value <= 0)
return; 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()) { if (hasReachedMaxLevel()) {
setExperience(0); setExperience(0);
return; 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 // Apply buffs AFTER splitting exp
value *= (1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100) * MMOCore.plugin.boosterManager.getMultiplier(null); value *= (1 + getStats().getStat("ADDITIONAL_EXPERIENCE") / 100) * MMOCore.plugin.boosterManager.getMultiplier(null);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -73,6 +73,9 @@ public class SkillBar implements Listener {
*/ */
if (event.getPreviousSlot() == event.getNewSlot()) return; 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); event.setCancelled(true);
int slot = event.getNewSlot() + (event.getNewSlot() >= player.getInventory().getHeldItemSlot() ? -1 : 0); int slot = event.getNewSlot() + (event.getNewSlot() >= player.getInventory().getHeldItemSlot() ? -1 : 0);

View File

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

View File

@ -39,7 +39,7 @@ public class PlayerListener implements Listener {
*/ */
@EventHandler @EventHandler
public void b(InventoryClickEvent event) { public void b(InventoryClickEvent event) {
if (event.getInventory().getHolder() instanceof PluginInventory) if (event.getInventory().getHolder() instanceof PluginInventory&&event.getCurrentItem()!=null)
((PluginInventory) event.getInventory().getHolder()) ((PluginInventory) event.getInventory().getHolder())
.whenClicked(new InventoryClickContext(event.getRawSlot(), event.getCurrentItem(), event.getClick(), event, event.getInventory())); .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 # The maximum level players can reach
max-level: 100 max-level: 100
skill-trees:
- 'general'
- 'mage-arcane-mage'
# This class must not display in /class # This class must not display in /class
# because it is a subclass of mage # because it is a subclass of mage
options: options:

View File

@ -32,6 +32,10 @@ exp-curve: levels
# The maximum level players can reach # The maximum level players can reach
max-level: 100 max-level: 100
skill-trees:
- 'general'
- 'mage-arcane-mage'
exp-table: class_exp_table exp-table: class_exp_table
# This is the default mana display options, however it is not mandatory # 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 exp-table: class_exp_table
skill-trees:
- 'general'
- 'rogue-marksman'
# Particles displayed around the player # Particles displayed around the player
# when he enters the casting mode. # when he enters the casting mode.

View File

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

View File

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

View File

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

View File

@ -52,3 +52,285 @@ second_exp_table:
period: 3 period: 3
triggers: 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,116 +4,407 @@ lore:
- '&6This skill tree is used for combat abilities!' - '&6This skill tree is used for combat abilities!'
type: 'linked' type: 'linked'
item: 'DIAMOND_AXE' item: 'DIAMOND_AXE'
max-point-spent: 20
nodes: nodes:
strength: a1:
name: 'Combat strength' 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: coordinates:
x: 0 x: 0
y: 0 y: 0
max-level: 2
is-root: true
size: 1
experience-table: class_exp_table
lores: lores:
0: 0:
- "&eThis lore will be shown when level 0" - "&eCritical Strikes deal more damage in % chance"
1 : 1:
- "&eThis lore will be shown when level 1" - "&eCritical Strikes deal more damage in +%5 chance"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
## C
c1:
force: name: 'Life Steal'
name: 'Force'
size: 1 size: 1
max-children: 1 max-children: 1
experience-table: class_exp_table experience-table: skilltree_lifesteal1
coordinates: coordinates:
x: 1 x: -1
y: 0 y: 0
lores: lores:
0: 0:
- "&eThis lore will be shown when level 0" - "&ePercentage of damage you gain back as health when inflicting weapon damage +%1"
1 : 1:
- "&eThis lore will be shown when level 1" - "&ePercentage of damage you gain back as health when inflicting weapon damage +%1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
weaponry: c2:
name: 'Weaponry' name: 'Life Steal'
coordinates:
x: 2
y: 0
experience-table: class_exp_table
max-level: 2
size: 1 size: 1
max-children: 1
experience-table: skilltree_lifesteal2
coordinates:
x: -2
y: 0
lores: lores:
0: 0:
- "&eThis lore will be shown when level 0" - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
1 : 1:
- "&eThis lore will be shown when level 1" - "&ePercentage of damage you gain back as health when inflicting weapon damage +%2"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery: c3:
name: 'Archery' name: 'Life Steal'
size: 1
max-children: 1
experience-table: skilltree_lifesteal2
coordinates: 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 y: 1
experience-table: class_exp_table
max-level: 2
size: 1
lores: lores:
0: 0:
- "&eThis lore will be shown when level 0" - "&eReduces damage from any source in +%1"
1 : 1:
- "&eThis lore will be shown when level 1" - "&eReduces damage from any source in +%1"
2:
- "&eThis lore will be shown when level 2" d2:
3: name: 'Damage Reduction'
- "&eThis lore will be shown when level 3" size: 1
archery2: max-children: 2
name: 'Archery2' 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: coordinates:
x: 1 x: 1
y: 2 y: 2
experience-table: class_exp_table
max-level: 2
size: 1
lores: lores:
0: 0:
- "&eThis lore will be shown when level 0" - "&eMana regen in pts/sec +1"
1 : 1:
- "&eThis lore will be shown when level 1" - "&eMana regen in pts/sec +1"
2:
- "&eThis lore will be shown when level 2"
3:
- "&eThis lore will be shown when level 3"
archery3:
name: 'Archery3'
coordinates:
x: 1
y: 3
max-level: 2 f2:
name: 'Mana Regeneration'
size: 1 size: 1
max-children: 1
experience-table: skilltree_mana_regeneration2
coordinates:
x: 2
y: 2
lores: lores:
0: 0:
- "&eThis lore will be shown when level 0" - "&eMana regen in pts/sec +2"
1 : 1:
- "&eThis lore will be shown when level 1" - "&eMana regen in pts/sec +2"
2:
- "&eThis lore will be shown when level 2" f3:
3: name: 'Mana Regeneration'
- "&eThis lore will be shown when level 3" 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: paths:

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> <description>Offer your players a brand new RPG experience!!</description>
<properties> <properties>
<revision>1.10.3-SNAPSHOT</revision> <revision>1.11.0-SNAPSHOT</revision>
<downloadSources>false</downloadSources> <downloadSources>false</downloadSources>
<downloadJavadocs>false</downloadJavadocs> <downloadJavadocs>false</downloadJavadocs>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>