mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-24 22:26:46 +01:00
tridents/xbows WIP part 1
This commit is contained in:
parent
919907f46a
commit
ea448dfa47
@ -1,3 +1,34 @@
|
|||||||
|
Version 2.1.133
|
||||||
|
New Skill - Tridents
|
||||||
|
New Skill - Crossbows
|
||||||
|
|
||||||
|
New config file named 'tridents.yml'
|
||||||
|
|
||||||
|
New command /tridents - Skill Info for Tridents
|
||||||
|
New command /crossbows - Skill Info for Crossbows
|
||||||
|
|
||||||
|
Added Sub-Skill named Multi Tasking to Tridents
|
||||||
|
Added Sub-Skill named Cone of Death to Crossbows
|
||||||
|
|
||||||
|
(These permissions are all included in the mcmmo.defaults node)
|
||||||
|
New permission node 'mcmmo.commands.tridents'
|
||||||
|
New permission node 'mcmmo.skills.tridents'
|
||||||
|
New permission node 'mcmmo.ability.tridents.all'
|
||||||
|
New permission node 'mcmmo.ability.tridents.multitasking'
|
||||||
|
New permission node 'mcmmo.commands.crossbows'
|
||||||
|
New permission node 'mcmmo.skills.crossbows'
|
||||||
|
New permission node 'mcmmo.ability.crossbows.all'
|
||||||
|
|
||||||
|
Added new locale string 'Overhaul.Name.Tridents'
|
||||||
|
Added new locale string 'Overhaul.Name.Crossbows'
|
||||||
|
|
||||||
|
Added XP bar settings for Tridents & Crossbows to experience.yml
|
||||||
|
Changed some debug level logging to info level for convenience
|
||||||
|
XP Bar settings (set by /mmoxpbar command) are now saved per player
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
These are the first new skills that I've written for mcMMO in about 9 years, I'll be listening closely to feedback and tweaking them often.
|
||||||
|
|
||||||
Version 2.1.132
|
Version 2.1.132
|
||||||
A fix is in place to prevent an exploit from working that is due to a yet to be patched Spigot server software bug
|
A fix is in place to prevent an exploit from working that is due to a yet to be patched Spigot server software bug
|
||||||
Fixed a NPE that could happen when players swapped items from their hotbar
|
Fixed a NPE that could happen when players swapped items from their hotbar
|
||||||
|
2
pom.xml
2
pom.xml
@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||||
<artifactId>mcMMO</artifactId>
|
<artifactId>mcMMO</artifactId>
|
||||||
<version>2.1.132</version>
|
<version>2.1.133-SNAPSHOT</version>
|
||||||
<name>mcMMO</name>
|
<name>mcMMO</name>
|
||||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||||
<scm>
|
<scm>
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CrossbowsCommand extends SkillCommand {
|
||||||
|
public CrossbowsCommand() {
|
||||||
|
super(PrimarySkillType.CROSSBOWS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dataCalculations(Player player, float skillValue) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void permissionsCheck(Player player) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<TextComponent> getTextComponents(Player player) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TridentsCommand extends SkillCommand {
|
||||||
|
public TridentsCommand() {
|
||||||
|
super(PrimarySkillType.TRIDENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dataCalculations(Player player, float skillValue) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void permissionsCheck(Player player) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<TextComponent> getTextComponents(Player player) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -101,7 +101,7 @@ public class PotionConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.p.debug("Loaded " + pass + " Alchemy potions, skipped " + fail + ".");
|
mcMMO.p.getLogger().info("Loaded " + pass + " Alchemy potions, skipped " + fail + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,14 +13,14 @@ public class DatabaseManagerFactory {
|
|||||||
return createDefaultCustomDatabaseManager();
|
return createDefaultCustomDatabaseManager();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
mcMMO.p.debug("Could not create custom database manager");
|
mcMMO.p.getLogger().info("Could not create custom database manager");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
catch (Throwable e) {
|
catch (Throwable e) {
|
||||||
mcMMO.p.debug("Failed to create custom database manager");
|
mcMMO.p.getLogger().info("Failed to create custom database manager");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
mcMMO.p.debug("Falling back on " + (Config.getInstance().getUseMySQL() ? "SQL" : "Flatfile") + " database");
|
mcMMO.p.getLogger().info("Falling back on " + (Config.getInstance().getUseMySQL() ? "SQL" : "Flatfile") + " database");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Config.getInstance().getUseMySQL() ? new SQLDatabaseManager() : new FlatfileDatabaseManager();
|
return Config.getInstance().getUseMySQL() ? new SQLDatabaseManager() : new FlatfileDatabaseManager();
|
||||||
|
@ -14,6 +14,8 @@ import com.gmail.nossr50.mcMMO;
|
|||||||
import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask;
|
import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@ -360,6 +362,55 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
writer.append(uuid != null ? uuid.toString() : "NULL").append(":");
|
writer.append(uuid != null ? uuid.toString() : "NULL").append(":");
|
||||||
writer.append(profile.getScoreboardTipsShown()).append(":");
|
writer.append(profile.getScoreboardTipsShown()).append(":");
|
||||||
writer.append(profile.getUniqueData(UniqueDataType.CHIMAERA_WING_DATS)).append(":");
|
writer.append(profile.getUniqueData(UniqueDataType.CHIMAERA_WING_DATS)).append(":");
|
||||||
|
|
||||||
|
/*
|
||||||
|
public static int SKILLS_TRIDENTS = 44;
|
||||||
|
public static int EXP_TRIDENTS = 45;
|
||||||
|
public static int SKILLS_CROSSBOWS = 46;
|
||||||
|
public static int EXP_CROSSBOWS = 47;
|
||||||
|
public static int BARSTATE_ACROBATICS = 48;
|
||||||
|
public static int BARSTATE_ALCHEMY = 49;
|
||||||
|
public static int BARSTATE_ARCHERY = 50;
|
||||||
|
public static int BARSTATE_AXES = 51;
|
||||||
|
public static int BARSTATE_EXCAVATION = 52;
|
||||||
|
public static int BARSTATE_FISHING = 53;
|
||||||
|
public static int BARSTATE_HERBALISM = 54;
|
||||||
|
public static int BARSTATE_MINING = 55;
|
||||||
|
public static int BARSTATE_REPAIR = 56;
|
||||||
|
public static int BARSTATE_SALVAGE = 57;
|
||||||
|
public static int BARSTATE_SMELTING = 58;
|
||||||
|
public static int BARSTATE_SWORDS = 59;
|
||||||
|
public static int BARSTATE_TAMING = 60;
|
||||||
|
public static int BARSTATE_UNARMED = 61;
|
||||||
|
public static int BARSTATE_WOODCUTTING = 62;
|
||||||
|
public static int BARSTATE_TRIDENTS = 63;
|
||||||
|
public static int BARSTATE_CROSSBOWS = 64;
|
||||||
|
*/
|
||||||
|
|
||||||
|
writer.append(profile.getSkillLevel(PrimarySkillType.TRIDENTS)).append(":");
|
||||||
|
writer.append(profile.getSkillXpLevel(PrimarySkillType.TRIDENTS)).append(":");
|
||||||
|
writer.append(profile.getSkillLevel(PrimarySkillType.CROSSBOWS)).append(":");
|
||||||
|
writer.append(profile.getSkillXpLevel(PrimarySkillType.CROSSBOWS)).append(":");
|
||||||
|
|
||||||
|
//XPBar States
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.ACROBATICS).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.ALCHEMY).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.ARCHERY).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.AXES).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.EXCAVATION).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.FISHING).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.HERBALISM).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.MINING).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.REPAIR).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.SALVAGE).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.SMELTING).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.SWORDS).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.TAMING).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.UNARMED).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.WOODCUTTING).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.TRIDENTS).toString()).append(":");
|
||||||
|
writer.append(profile.getXpBarStateMap().get(PrimarySkillType.CROSSBOWS).toString()).append(":");
|
||||||
|
|
||||||
writer.append("\r\n");
|
writer.append("\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,6 +489,27 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
out.append("0:"); // AlchemyXp
|
out.append("0:"); // AlchemyXp
|
||||||
out.append(uuid != null ? uuid.toString() : "NULL").append(":"); // UUID
|
out.append(uuid != null ? uuid.toString() : "NULL").append(":"); // UUID
|
||||||
out.append("0:"); // Scoreboard tips shown
|
out.append("0:"); // Scoreboard tips shown
|
||||||
|
out.append("0:"); // Chimaera Wing Dats
|
||||||
|
|
||||||
|
//Barstates for the 15 currently existing skills by ordinal value
|
||||||
|
out.append("NORMAL:"); // Acrobatics
|
||||||
|
out.append("NORMAL:"); // Alchemy
|
||||||
|
out.append("NORMAL:"); // Archery
|
||||||
|
out.append("NORMAL:"); // Axes
|
||||||
|
out.append("NORMAL:"); // Excavation
|
||||||
|
out.append("NORMAL:"); // Fishing
|
||||||
|
out.append("NORMAL:"); // Herbalism
|
||||||
|
out.append("NORMAL:"); // Mining
|
||||||
|
out.append("NORMAL:"); // Repair
|
||||||
|
out.append("NORMAL:"); // Salvage
|
||||||
|
out.append("NORMAL:"); // Smelting
|
||||||
|
out.append("NORMAL:"); // Swords
|
||||||
|
out.append("NORMAL:"); // Taming
|
||||||
|
out.append("NORMAL:"); // Unarmed
|
||||||
|
out.append("NORMAL:"); // Woodcutting
|
||||||
|
out.append("NORMAL:"); // Tridents
|
||||||
|
out.append("NORMAL:"); // Crossbows
|
||||||
|
|
||||||
// Add more in the same format as the line above
|
// Add more in the same format as the line above
|
||||||
|
|
||||||
out.newLine();
|
out.newLine();
|
||||||
@ -495,7 +567,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
// Update playerName in database after name change
|
// Update playerName in database after name change
|
||||||
if (!character[USERNAME].equalsIgnoreCase(playerName)) {
|
if (!character[USERNAME].equalsIgnoreCase(playerName)) {
|
||||||
mcMMO.p.debug("Name change detected: " + character[USERNAME] + " => " + playerName);
|
mcMMO.p.getLogger().info("Name change detected: " + character[USERNAME] + " => " + playerName);
|
||||||
character[USERNAME] = playerName;
|
character[USERNAME] = playerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -902,6 +974,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: If new skills are added this needs to be rewritten
|
||||||
if (Config.getInstance().getTruncateSkills()) {
|
if (Config.getInstance().getTruncateSkills()) {
|
||||||
for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) {
|
for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) {
|
||||||
int index = getSkillIndex(skill);
|
int index = getSkillIndex(skill);
|
||||||
@ -909,7 +982,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int cap = Config.getInstance().getLevelCap(skill);
|
int cap = Config.getInstance().getLevelCap(skill);
|
||||||
if (Integer.valueOf(character[index]) > cap) {
|
if (Integer.parseInt(character[index]) > cap) {
|
||||||
mcMMO.p.getLogger().warning("Truncating " + skill.getName() + " to configured max level for player " + character[USERNAME]);
|
mcMMO.p.getLogger().warning("Truncating " + skill.getName() + " to configured max level for player " + character[USERNAME]);
|
||||||
character[index] = cap + "";
|
character[index] = cap + "";
|
||||||
updated = true;
|
updated = true;
|
||||||
@ -999,15 +1072,85 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
// Version 1.5.02
|
// Version 1.5.02
|
||||||
character = Arrays.copyOf(character, character.length + 1);
|
character = Arrays.copyOf(character, character.length + 1);
|
||||||
character[character.length - 1] = "0";
|
character[character.length - 1] = "0";
|
||||||
|
|
||||||
if (oldVersion == null) {
|
if (oldVersion == null) {
|
||||||
oldVersion = "1.5.02";
|
oldVersion = "1.5.02";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(character.length <= 43) {
|
||||||
|
// Addition of Chimaera wing DATS
|
||||||
|
character = Arrays.copyOf(character, character.length + 1);
|
||||||
|
character[character.length - 1] = "0";
|
||||||
|
|
||||||
|
if (oldVersion == null) {
|
||||||
|
oldVersion = "2.1.133";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(character.length <= 65) {
|
||||||
|
|
||||||
|
if (oldVersion == null) {
|
||||||
|
oldVersion = "2.1.133";
|
||||||
|
}
|
||||||
|
|
||||||
|
character = Arrays.copyOf(character, 64); // new array size
|
||||||
|
|
||||||
|
/*
|
||||||
|
public static int SKILLS_TRIDENTS = 44;
|
||||||
|
public static int EXP_TRIDENTS = 45;
|
||||||
|
public static int SKILLS_CROSSBOWS = 46;
|
||||||
|
public static int EXP_CROSSBOWS = 47;
|
||||||
|
public static int BARSTATE_ACROBATICS = 48;
|
||||||
|
public static int BARSTATE_ALCHEMY = 49;
|
||||||
|
public static int BARSTATE_ARCHERY = 50;
|
||||||
|
public static int BARSTATE_AXES = 51;
|
||||||
|
public static int BARSTATE_EXCAVATION = 52;
|
||||||
|
public static int BARSTATE_FISHING = 53;
|
||||||
|
public static int BARSTATE_HERBALISM = 54;
|
||||||
|
public static int BARSTATE_MINING = 55;
|
||||||
|
public static int BARSTATE_REPAIR = 56;
|
||||||
|
public static int BARSTATE_SALVAGE = 57;
|
||||||
|
public static int BARSTATE_SMELTING = 58;
|
||||||
|
public static int BARSTATE_SWORDS = 59;
|
||||||
|
public static int BARSTATE_TAMING = 60;
|
||||||
|
public static int BARSTATE_UNARMED = 61;
|
||||||
|
public static int BARSTATE_WOODCUTTING = 62;
|
||||||
|
public static int BARSTATE_TRIDENTS = 63;
|
||||||
|
public static int BARSTATE_CROSSBOWS = 64;
|
||||||
|
*/
|
||||||
|
|
||||||
|
character[44-1] = "0"; //trident skill lvl
|
||||||
|
character[45-1] = "0"; //trident xp value
|
||||||
|
character[46-1] = "0"; //xbow skill lvl
|
||||||
|
character[47-1] = "0"; //xbow xp lvl
|
||||||
|
|
||||||
|
//Barstates 48-64
|
||||||
|
character[48-1] = "NORMAL";
|
||||||
|
character[49-1] = "NORMAL";
|
||||||
|
character[50-1] = "NORMAL";
|
||||||
|
character[51-1] = "NORMAL";
|
||||||
|
character[52-1] = "NORMAL";
|
||||||
|
character[53-1] = "NORMAL";
|
||||||
|
character[54-1] = "NORMAL";
|
||||||
|
character[55-1] = "NORMAL";
|
||||||
|
character[56-1] = "NORMAL";
|
||||||
|
character[57-1] = "DISABLED"; //Child skills
|
||||||
|
character[58-1] = "DISABLED"; //Child skills
|
||||||
|
character[59-1] = "NORMAL";
|
||||||
|
character[60-1] = "NORMAL";
|
||||||
|
character[61-1] = "NORMAL";
|
||||||
|
character[62-1] = "NORMAL";
|
||||||
|
character[63-1] = "NORMAL";
|
||||||
|
character[64-1] = "NORMAL";
|
||||||
|
}
|
||||||
|
|
||||||
boolean corrupted = false;
|
boolean corrupted = false;
|
||||||
|
|
||||||
for (int i = 0; i < character.length; i++) {
|
for (int i = 0; i < character.length; i++) {
|
||||||
|
//Sigh... this code
|
||||||
if (character[i].isEmpty() && !(i == 2 || i == 3 || i == 23 || i == 33 || i == 41)) {
|
if (character[i].isEmpty() && !(i == 2 || i == 3 || i == 23 || i == 33 || i == 41)) {
|
||||||
|
mcMMO.p.getLogger().info("Player data at index "+i+" appears to be empty, possible corruption of data has occurred.");
|
||||||
corrupted = true;
|
corrupted = true;
|
||||||
if (i == 37) {
|
if (i == 37) {
|
||||||
character[i] = String.valueOf(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
character[i] = String.valueOf(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||||
@ -1032,11 +1175,11 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (corrupted) {
|
if (corrupted) {
|
||||||
mcMMO.p.debug("Updating corrupted database line for player " + character[USERNAME]);
|
mcMMO.p.getLogger().info("Updating corrupted database line for player " + character[USERNAME]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldVersion != null) {
|
if (oldVersion != null) {
|
||||||
mcMMO.p.debug("Updating database line from before version " + oldVersion + " for player " + character[USERNAME]);
|
mcMMO.p.getLogger().info("Updating database line from before version " + oldVersion + " for player " + character[USERNAME]);
|
||||||
}
|
}
|
||||||
|
|
||||||
updated |= corrupted;
|
updated |= corrupted;
|
||||||
@ -1099,7 +1242,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
usersFile.getParentFile().mkdir();
|
usersFile.getParentFile().mkdir();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mcMMO.p.debug("Creating mcmmo.users file...");
|
mcMMO.p.getLogger().info("Creating mcmmo.users file...");
|
||||||
new File(mcMMO.getUsersFilePath()).createNewFile();
|
new File(mcMMO.getUsersFilePath()).createNewFile();
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
@ -1142,6 +1285,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
Map<PrimarySkillType, Float> skillsXp = new EnumMap<PrimarySkillType, Float>(PrimarySkillType.class); // Skill & XP
|
Map<PrimarySkillType, Float> skillsXp = new EnumMap<PrimarySkillType, Float>(PrimarySkillType.class); // Skill & XP
|
||||||
Map<SuperAbilityType, Integer> skillsDATS = new EnumMap<SuperAbilityType, Integer>(SuperAbilityType.class); // Ability & Cooldown
|
Map<SuperAbilityType, Integer> skillsDATS = new EnumMap<SuperAbilityType, Integer>(SuperAbilityType.class); // Ability & Cooldown
|
||||||
Map<UniqueDataType, Integer> uniquePlayerDataMap = new EnumMap<UniqueDataType, Integer>(UniqueDataType.class);
|
Map<UniqueDataType, Integer> uniquePlayerDataMap = new EnumMap<UniqueDataType, Integer>(UniqueDataType.class);
|
||||||
|
Map<PrimarySkillType, ExperienceBarManager.BarState> xpBarStateMap = new EnumMap<PrimarySkillType, ExperienceBarManager.BarState>(PrimarySkillType.class);
|
||||||
MobHealthbarType mobHealthbarType;
|
MobHealthbarType mobHealthbarType;
|
||||||
int scoreboardTipsShown;
|
int scoreboardTipsShown;
|
||||||
|
|
||||||
@ -1160,6 +1304,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
skillsXp.put(PrimarySkillType.ACROBATICS, (float) Integer.valueOf(character[EXP_ACROBATICS]));
|
skillsXp.put(PrimarySkillType.ACROBATICS, (float) Integer.valueOf(character[EXP_ACROBATICS]));
|
||||||
skillsXp.put(PrimarySkillType.FISHING, (float) Integer.valueOf(character[EXP_FISHING]));
|
skillsXp.put(PrimarySkillType.FISHING, (float) Integer.valueOf(character[EXP_FISHING]));
|
||||||
skillsXp.put(PrimarySkillType.ALCHEMY, (float) Integer.valueOf(character[EXP_ALCHEMY]));
|
skillsXp.put(PrimarySkillType.ALCHEMY, (float) Integer.valueOf(character[EXP_ALCHEMY]));
|
||||||
|
skillsXp.put(PrimarySkillType.TRIDENTS, (float) Integer.valueOf(character[EXP_TRIDENTS]));
|
||||||
|
skillsXp.put(PrimarySkillType.CROSSBOWS, (float) Integer.valueOf(character[EXP_CROSSBOWS]));
|
||||||
|
|
||||||
// Taming - Unused
|
// Taming - Unused
|
||||||
skillsDATS.put(SuperAbilityType.SUPER_BREAKER, Integer.valueOf(character[COOLDOWN_SUPER_BREAKER]));
|
skillsDATS.put(SuperAbilityType.SUPER_BREAKER, Integer.valueOf(character[COOLDOWN_SUPER_BREAKER]));
|
||||||
@ -1190,7 +1336,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
scoreboardTipsShown = Integer.valueOf(character[SCOREBOARD_TIPS]);
|
scoreboardTipsShown = Integer.parseInt(character[SCOREBOARD_TIPS]);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
scoreboardTipsShown = 0;
|
scoreboardTipsShown = 0;
|
||||||
@ -1203,7 +1349,30 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
uniquePlayerDataMap.put(UniqueDataType.CHIMAERA_WING_DATS, 0);
|
uniquePlayerDataMap.put(UniqueDataType.CHIMAERA_WING_DATS, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new PlayerProfile(character[USERNAME], uuid, skills, skillsXp, skillsDATS, mobHealthbarType, scoreboardTipsShown, uniquePlayerDataMap);
|
try {
|
||||||
|
xpBarStateMap.put(PrimarySkillType.ACROBATICS, SkillUtils.asBarState(character[BARSTATE_ACROBATICS]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.ALCHEMY, SkillUtils.asBarState(character[BARSTATE_ALCHEMY]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.ARCHERY, SkillUtils.asBarState(character[BARSTATE_ARCHERY]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.AXES, SkillUtils.asBarState(character[BARSTATE_AXES]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.EXCAVATION, SkillUtils.asBarState(character[BARSTATE_EXCAVATION]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.FISHING, SkillUtils.asBarState(character[BARSTATE_FISHING]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.HERBALISM, SkillUtils.asBarState(character[BARSTATE_HERBALISM]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.MINING, SkillUtils.asBarState(character[BARSTATE_MINING]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.REPAIR, SkillUtils.asBarState(character[BARSTATE_REPAIR]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.SALVAGE, SkillUtils.asBarState(character[BARSTATE_SALVAGE]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.SMELTING, SkillUtils.asBarState(character[BARSTATE_SMELTING]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.SWORDS, SkillUtils.asBarState(character[BARSTATE_SWORDS]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.TAMING, SkillUtils.asBarState(character[BARSTATE_TAMING]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.UNARMED, SkillUtils.asBarState(character[BARSTATE_UNARMED]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.WOODCUTTING, SkillUtils.asBarState(character[BARSTATE_WOODCUTTING]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.TRIDENTS, SkillUtils.asBarState(character[BARSTATE_TRIDENTS]));
|
||||||
|
xpBarStateMap.put(PrimarySkillType.CROSSBOWS, SkillUtils.asBarState(character[BARSTATE_CROSSBOWS]));
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
xpBarStateMap = SkillUtils.generateDefaultBarStateMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PlayerProfile(character[USERNAME], uuid, skills, skillsXp, skillsDATS, mobHealthbarType, scoreboardTipsShown, uniquePlayerDataMap, xpBarStateMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<PrimarySkillType, Integer> getSkillMapFromLine(String[] character) {
|
private Map<PrimarySkillType, Integer> getSkillMapFromLine(String[] character) {
|
||||||
@ -1222,6 +1391,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
skills.put(PrimarySkillType.ACROBATICS, Integer.valueOf(character[SKILLS_ACROBATICS]));
|
skills.put(PrimarySkillType.ACROBATICS, Integer.valueOf(character[SKILLS_ACROBATICS]));
|
||||||
skills.put(PrimarySkillType.FISHING, Integer.valueOf(character[SKILLS_FISHING]));
|
skills.put(PrimarySkillType.FISHING, Integer.valueOf(character[SKILLS_FISHING]));
|
||||||
skills.put(PrimarySkillType.ALCHEMY, Integer.valueOf(character[SKILLS_ALCHEMY]));
|
skills.put(PrimarySkillType.ALCHEMY, Integer.valueOf(character[SKILLS_ALCHEMY]));
|
||||||
|
skills.put(PrimarySkillType.TRIDENTS, Integer.valueOf(character[SKILLS_TRIDENTS]));
|
||||||
|
skills.put(PrimarySkillType.CROSSBOWS, Integer.valueOf(character[SKILLS_CROSSBOWS]));
|
||||||
|
|
||||||
return skills;
|
return skills;
|
||||||
}
|
}
|
||||||
@ -1261,6 +1432,10 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
return SKILLS_UNARMED;
|
return SKILLS_UNARMED;
|
||||||
case WOODCUTTING:
|
case WOODCUTTING:
|
||||||
return SKILLS_WOODCUTTING;
|
return SKILLS_WOODCUTTING;
|
||||||
|
case TRIDENTS:
|
||||||
|
return SKILLS_TRIDENTS;
|
||||||
|
case CROSSBOWS:
|
||||||
|
return SKILLS_CROSSBOWS;
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("Primary Skills only");
|
throw new RuntimeException("Primary Skills only");
|
||||||
|
|
||||||
@ -1307,6 +1482,27 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
public static int UUID_INDEX = 41;
|
public static int UUID_INDEX = 41;
|
||||||
public static int SCOREBOARD_TIPS = 42;
|
public static int SCOREBOARD_TIPS = 42;
|
||||||
public static int COOLDOWN_CHIMAERA_WING = 43;
|
public static int COOLDOWN_CHIMAERA_WING = 43;
|
||||||
|
public static int SKILLS_TRIDENTS = 44;
|
||||||
|
public static int EXP_TRIDENTS = 45;
|
||||||
|
public static int SKILLS_CROSSBOWS = 46;
|
||||||
|
public static int EXP_CROSSBOWS = 47;
|
||||||
|
public static int BARSTATE_ACROBATICS = 48;
|
||||||
|
public static int BARSTATE_ALCHEMY = 49;
|
||||||
|
public static int BARSTATE_ARCHERY = 50;
|
||||||
|
public static int BARSTATE_AXES = 51;
|
||||||
|
public static int BARSTATE_EXCAVATION = 52;
|
||||||
|
public static int BARSTATE_FISHING = 53;
|
||||||
|
public static int BARSTATE_HERBALISM = 54;
|
||||||
|
public static int BARSTATE_MINING = 55;
|
||||||
|
public static int BARSTATE_REPAIR = 56;
|
||||||
|
public static int BARSTATE_SALVAGE = 57;
|
||||||
|
public static int BARSTATE_SMELTING = 58;
|
||||||
|
public static int BARSTATE_SWORDS = 59;
|
||||||
|
public static int BARSTATE_TAMING = 60;
|
||||||
|
public static int BARSTATE_UNARMED = 61;
|
||||||
|
public static int BARSTATE_WOODCUTTING = 62;
|
||||||
|
public static int BARSTATE_TRIDENTS = 63;
|
||||||
|
public static int BARSTATE_CROSSBOWS = 64;
|
||||||
|
|
||||||
public void resetMobHealthSettings() {
|
public void resetMobHealthSettings() {
|
||||||
BufferedReader in = null;
|
BufferedReader in = null;
|
||||||
@ -1328,7 +1524,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
character[HEALTHBAR] = Config.getInstance().getMobHealthbarDefault().toString();
|
character[HEALTHBAR] = Config.getInstance().getMobHealthbarDefault().toString();
|
||||||
|
|
||||||
line = new StringBuilder(org.apache.commons.lang.StringUtils.join(character, ":")).append(":").toString();
|
line = org.apache.commons.lang.StringUtils.join(character, ":") + ":";
|
||||||
|
|
||||||
writer.append(line).append("\r\n");
|
writer.append(line).append("\r\n");
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask;
|
import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||||
import org.apache.tomcat.jdbc.pool.DataSource;
|
import org.apache.tomcat.jdbc.pool.DataSource;
|
||||||
import org.apache.tomcat.jdbc.pool.PoolProperties;
|
import org.apache.tomcat.jdbc.pool.PoolProperties;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
@ -963,7 +964,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
|||||||
*/
|
*/
|
||||||
private void checkDatabaseStructure(Connection connection, UpgradeType upgrade) {
|
private void checkDatabaseStructure(Connection connection, UpgradeType upgrade) {
|
||||||
if (!mcMMO.getUpgradeManager().shouldUpgrade(upgrade)) {
|
if (!mcMMO.getUpgradeManager().shouldUpgrade(upgrade)) {
|
||||||
mcMMO.p.debug("Skipping " + upgrade.name() + " upgrade (unneeded)");
|
mcMMO.p.getLogger().info("Skipping " + upgrade.name() + " upgrade (unneeded)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1074,6 +1075,8 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
|||||||
Map<PrimarySkillType, Float> skillsXp = new EnumMap<PrimarySkillType, Float>(PrimarySkillType.class); // Skill & XP
|
Map<PrimarySkillType, Float> skillsXp = new EnumMap<PrimarySkillType, Float>(PrimarySkillType.class); // Skill & XP
|
||||||
Map<SuperAbilityType, Integer> skillsDATS = new EnumMap<SuperAbilityType, Integer>(SuperAbilityType.class); // Ability & Cooldown
|
Map<SuperAbilityType, Integer> skillsDATS = new EnumMap<SuperAbilityType, Integer>(SuperAbilityType.class); // Ability & Cooldown
|
||||||
Map<UniqueDataType, Integer> uniqueData = new EnumMap<UniqueDataType, Integer>(UniqueDataType.class); //Chimaera wing cooldown and other misc info
|
Map<UniqueDataType, Integer> uniqueData = new EnumMap<UniqueDataType, Integer>(UniqueDataType.class); //Chimaera wing cooldown and other misc info
|
||||||
|
Map<PrimarySkillType, ExperienceBarManager.BarState> xpBarStateMap = new EnumMap<PrimarySkillType, ExperienceBarManager.BarState>(PrimarySkillType.class);
|
||||||
|
|
||||||
MobHealthbarType mobHealthbarType;
|
MobHealthbarType mobHealthbarType;
|
||||||
UUID uuid;
|
UUID uuid;
|
||||||
int scoreboardTipsShown;
|
int scoreboardTipsShown;
|
||||||
@ -1148,7 +1151,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
|||||||
uuid = null;
|
uuid = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new PlayerProfile(playerName, uuid, skills, skillsXp, skillsDATS, mobHealthbarType, scoreboardTipsShown, uniqueData);
|
return new PlayerProfile(playerName, uuid, skills, skillsXp, skillsDATS, mobHealthbarType, scoreboardTipsShown, uniqueData, xpBarStateMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printErrors(SQLException ex) {
|
private void printErrors(SQLException ex) {
|
||||||
@ -1515,7 +1518,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
mcMMO.p.debug("Releasing connection pool resource...");
|
mcMMO.p.getLogger().info("Releasing connection pool resource...");
|
||||||
miscPool.close();
|
miscPool.close();
|
||||||
loadPool.close();
|
loadPool.close();
|
||||||
savePool.close();
|
savePool.close();
|
||||||
|
@ -27,6 +27,7 @@ import com.gmail.nossr50.skills.alchemy.AlchemyManager;
|
|||||||
import com.gmail.nossr50.skills.archery.ArcheryManager;
|
import com.gmail.nossr50.skills.archery.ArcheryManager;
|
||||||
import com.gmail.nossr50.skills.axes.AxesManager;
|
import com.gmail.nossr50.skills.axes.AxesManager;
|
||||||
import com.gmail.nossr50.skills.child.FamilyTree;
|
import com.gmail.nossr50.skills.child.FamilyTree;
|
||||||
|
import com.gmail.nossr50.skills.crossbows.CrossbowManager;
|
||||||
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
||||||
import com.gmail.nossr50.skills.fishing.FishingManager;
|
import com.gmail.nossr50.skills.fishing.FishingManager;
|
||||||
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
||||||
@ -36,6 +37,7 @@ import com.gmail.nossr50.skills.salvage.SalvageManager;
|
|||||||
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
||||||
import com.gmail.nossr50.skills.swords.SwordsManager;
|
import com.gmail.nossr50.skills.swords.SwordsManager;
|
||||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||||
|
import com.gmail.nossr50.skills.tridents.TridentManager;
|
||||||
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||||
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
@ -140,7 +142,7 @@ public class McMMOPlayer {
|
|||||||
toolMode.put(toolType, false);
|
toolMode.put(toolType, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
experienceBarManager = new ExperienceBarManager(this);
|
experienceBarManager = new ExperienceBarManager(this, profile.getXpBarStateMap());
|
||||||
|
|
||||||
debugMode = false; //Debug mode helps solve support issues, players can toggle it on or off
|
debugMode = false; //Debug mode helps solve support issues, players can toggle it on or off
|
||||||
attackStrength = 1.0D;
|
attackStrength = 1.0D;
|
||||||
@ -266,6 +268,14 @@ public class McMMOPlayer {
|
|||||||
return (UnarmedManager) skillManagers.get(PrimarySkillType.UNARMED);
|
return (UnarmedManager) skillManagers.get(PrimarySkillType.UNARMED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TridentManager getTridentManager() {
|
||||||
|
return (TridentManager) skillManagers.get(PrimarySkillType.TRIDENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CrossbowManager getCrossbowManager() {
|
||||||
|
return (CrossbowManager) skillManagers.get(PrimarySkillType.CROSSBOWS);
|
||||||
|
}
|
||||||
|
|
||||||
public WoodcuttingManager getWoodcuttingManager() {
|
public WoodcuttingManager getWoodcuttingManager() {
|
||||||
return (WoodcuttingManager) skillManagers.get(PrimarySkillType.WOODCUTTING);
|
return (WoodcuttingManager) skillManagers.get(PrimarySkillType.WOODCUTTING);
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,9 @@ import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.runnables.player.PlayerProfileSaveTask;
|
import com.gmail.nossr50.runnables.player.PlayerProfileSaveTask;
|
||||||
import com.gmail.nossr50.skills.child.FamilyTree;
|
import com.gmail.nossr50.skills.child.FamilyTree;
|
||||||
|
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -36,6 +38,7 @@ public class PlayerProfile {
|
|||||||
private final Map<PrimarySkillType, Float> skillsXp = new HashMap<PrimarySkillType, Float>(); // Skill & XP
|
private final Map<PrimarySkillType, Float> skillsXp = new HashMap<PrimarySkillType, Float>(); // Skill & XP
|
||||||
private final Map<SuperAbilityType, Integer> abilityDATS = new HashMap<SuperAbilityType, Integer>(); // Ability & Cooldown
|
private final Map<SuperAbilityType, Integer> abilityDATS = new HashMap<SuperAbilityType, Integer>(); // Ability & Cooldown
|
||||||
private final Map<UniqueDataType, Integer> uniquePlayerData = new HashMap<>(); //Misc data that doesn't fit into other categories (chimaera wing, etc..)
|
private final Map<UniqueDataType, Integer> uniquePlayerData = new HashMap<>(); //Misc data that doesn't fit into other categories (chimaera wing, etc..)
|
||||||
|
private Map<PrimarySkillType, ExperienceBarManager.BarState> xpBarState = new HashMap<>();
|
||||||
|
|
||||||
// Store previous XP gains for diminished returns
|
// Store previous XP gains for diminished returns
|
||||||
private DelayQueue<SkillXpGain> gainedSkillsXp = new DelayQueue<SkillXpGain>();
|
private DelayQueue<SkillXpGain> gainedSkillsXp = new DelayQueue<SkillXpGain>();
|
||||||
@ -70,14 +73,16 @@ public class PlayerProfile {
|
|||||||
public PlayerProfile(String playerName, boolean isLoaded) {
|
public PlayerProfile(String playerName, boolean isLoaded) {
|
||||||
this(playerName);
|
this(playerName);
|
||||||
this.loaded = isLoaded;
|
this.loaded = isLoaded;
|
||||||
|
this.xpBarState = SkillUtils.generateDefaultBarStateMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerProfile(String playerName, UUID uuid, boolean isLoaded) {
|
public PlayerProfile(String playerName, UUID uuid, boolean isLoaded) {
|
||||||
this(playerName, uuid);
|
this(playerName, uuid);
|
||||||
this.loaded = isLoaded;
|
this.loaded = isLoaded;
|
||||||
|
this.xpBarState = SkillUtils.generateDefaultBarStateMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerProfile(String playerName, UUID uuid, Map<PrimarySkillType, Integer> levelData, Map<PrimarySkillType, Float> xpData, Map<SuperAbilityType, Integer> cooldownData, MobHealthbarType mobHealthbarType, int scoreboardTipsShown, Map<UniqueDataType, Integer> uniqueProfileData) {
|
public PlayerProfile(String playerName, UUID uuid, Map<PrimarySkillType, Integer> levelData, Map<PrimarySkillType, Float> xpData, Map<SuperAbilityType, Integer> cooldownData, MobHealthbarType mobHealthbarType, int scoreboardTipsShown, Map<UniqueDataType, Integer> uniqueProfileData, Map<PrimarySkillType, ExperienceBarManager.BarState> barStateMap) {
|
||||||
this.playerName = playerName;
|
this.playerName = playerName;
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.mobHealthbarType = mobHealthbarType;
|
this.mobHealthbarType = mobHealthbarType;
|
||||||
@ -87,6 +92,7 @@ public class PlayerProfile {
|
|||||||
skillsXp.putAll(xpData);
|
skillsXp.putAll(xpData);
|
||||||
abilityDATS.putAll(cooldownData);
|
abilityDATS.putAll(cooldownData);
|
||||||
uniquePlayerData.putAll(uniqueProfileData);
|
uniquePlayerData.putAll(uniqueProfileData);
|
||||||
|
xpBarState.putAll(barStateMap);
|
||||||
|
|
||||||
loaded = true;
|
loaded = true;
|
||||||
}
|
}
|
||||||
@ -115,7 +121,7 @@ public class PlayerProfile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO should this part be synchronized?
|
// TODO should this part be synchronized?
|
||||||
PlayerProfile profileCopy = new PlayerProfile(playerName, uuid, ImmutableMap.copyOf(skills), ImmutableMap.copyOf(skillsXp), ImmutableMap.copyOf(abilityDATS), mobHealthbarType, scoreboardTipsShown, ImmutableMap.copyOf(uniquePlayerData));
|
PlayerProfile profileCopy = new PlayerProfile(playerName, uuid, ImmutableMap.copyOf(skills), ImmutableMap.copyOf(skillsXp), ImmutableMap.copyOf(abilityDATS), mobHealthbarType, scoreboardTipsShown, ImmutableMap.copyOf(uniquePlayerData), ImmutableMap.copyOf(xpBarState));
|
||||||
changed = !mcMMO.getDatabaseManager().saveUser(profileCopy);
|
changed = !mcMMO.getDatabaseManager().saveUser(profileCopy);
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
@ -439,4 +445,8 @@ public class PlayerProfile {
|
|||||||
|
|
||||||
return sum / parents.size();
|
return sum / parents.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HashMap<PrimarySkillType, ExperienceBarManager.BarState> getXpBarStateMap() {
|
||||||
|
return (HashMap<PrimarySkillType, ExperienceBarManager.BarState>) xpBarState;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager;
|
|||||||
import com.gmail.nossr50.skills.alchemy.AlchemyManager;
|
import com.gmail.nossr50.skills.alchemy.AlchemyManager;
|
||||||
import com.gmail.nossr50.skills.archery.ArcheryManager;
|
import com.gmail.nossr50.skills.archery.ArcheryManager;
|
||||||
import com.gmail.nossr50.skills.axes.AxesManager;
|
import com.gmail.nossr50.skills.axes.AxesManager;
|
||||||
|
import com.gmail.nossr50.skills.crossbows.CrossbowManager;
|
||||||
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
||||||
import com.gmail.nossr50.skills.fishing.FishingManager;
|
import com.gmail.nossr50.skills.fishing.FishingManager;
|
||||||
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
||||||
@ -18,6 +19,7 @@ import com.gmail.nossr50.skills.salvage.SalvageManager;
|
|||||||
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
||||||
import com.gmail.nossr50.skills.swords.SwordsManager;
|
import com.gmail.nossr50.skills.swords.SwordsManager;
|
||||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||||
|
import com.gmail.nossr50.skills.tridents.TridentManager;
|
||||||
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||||
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@ -63,7 +65,9 @@ public enum PrimarySkillType {
|
|||||||
UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS,
|
UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS,
|
||||||
ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)),
|
ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)),
|
||||||
WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ToolType.AXE,
|
WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ToolType.AXE,
|
||||||
ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER));
|
ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER)),
|
||||||
|
TRIDENTS(TridentManager.class, Color.TEAL, ImmutableList.of(SubSkillType.TRIDENTS_MULTI_TASKING)),
|
||||||
|
CROSSBOWS(CrossbowManager.class, Color.ORANGE, ImmutableList.of(SubSkillType.CROSSBOWS_CONE_OF_DEATH));
|
||||||
|
|
||||||
private Class<? extends SkillManager> managerClass;
|
private Class<? extends SkillManager> managerClass;
|
||||||
private Color skillColor;
|
private Color skillColor;
|
||||||
@ -77,7 +81,7 @@ public enum PrimarySkillType {
|
|||||||
public static final List<PrimarySkillType> CHILD_SKILLS;
|
public static final List<PrimarySkillType> CHILD_SKILLS;
|
||||||
public static final List<PrimarySkillType> NON_CHILD_SKILLS;
|
public static final List<PrimarySkillType> NON_CHILD_SKILLS;
|
||||||
|
|
||||||
public static final List<PrimarySkillType> COMBAT_SKILLS = ImmutableList.of(ARCHERY, AXES, SWORDS, TAMING, UNARMED);
|
public static final List<PrimarySkillType> COMBAT_SKILLS = ImmutableList.of(ARCHERY, AXES, SWORDS, TAMING, UNARMED, TRIDENTS, CROSSBOWS);
|
||||||
public static final List<PrimarySkillType> GATHERING_SKILLS = ImmutableList.of(EXCAVATION, FISHING, HERBALISM, MINING, WOODCUTTING);
|
public static final List<PrimarySkillType> GATHERING_SKILLS = ImmutableList.of(EXCAVATION, FISHING, HERBALISM, MINING, WOODCUTTING);
|
||||||
public static final List<PrimarySkillType> MISC_SKILLS = ImmutableList.of(ACROBATICS, ALCHEMY, REPAIR, SALVAGE, SMELTING);
|
public static final List<PrimarySkillType> MISC_SKILLS = ImmutableList.of(ACROBATICS, ALCHEMY, REPAIR, SALVAGE, SMELTING);
|
||||||
|
|
||||||
|
@ -105,7 +105,15 @@ public enum SubSkillType {
|
|||||||
WOODCUTTING_LEAF_BLOWER(1),
|
WOODCUTTING_LEAF_BLOWER(1),
|
||||||
/* WOODCUTTING_NATURES_BOUNTY(3),
|
/* WOODCUTTING_NATURES_BOUNTY(3),
|
||||||
WOODCUTTING_SPLINTER(3),*/
|
WOODCUTTING_SPLINTER(3),*/
|
||||||
WOODCUTTING_TREE_FELLER(1);
|
WOODCUTTING_TREE_FELLER(1),
|
||||||
|
|
||||||
|
/* TRIDENTS */
|
||||||
|
TRIDENTS_MULTI_TASKING(5),
|
||||||
|
|
||||||
|
/* CROSSBOWS */
|
||||||
|
|
||||||
|
CROSSBOWS_CONE_OF_DEATH(8);
|
||||||
|
|
||||||
|
|
||||||
private final int numRanks;
|
private final int numRanks;
|
||||||
//TODO: SuperAbilityType should also contain flags for active by default? Not sure if it should work that way.
|
//TODO: SuperAbilityType should also contain flags for active by default? Not sure if it should work that way.
|
||||||
|
@ -628,7 +628,7 @@ public final class PartyManager {
|
|||||||
parties.add(party);
|
parties.add(party);
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.p.debug("Loaded (" + parties.size() + ") Parties...");
|
mcMMO.p.getLogger().info("Loaded (" + parties.size() + ") Parties...");
|
||||||
|
|
||||||
for (Party party : hasAlly) {
|
for (Party party : hasAlly) {
|
||||||
party.setAlly(PartyManager.getParty(partiesFile.getString(party.getName() + ".Ally")));
|
party.setAlly(PartyManager.getParty(partiesFile.getString(party.getName() + ".Ally")));
|
||||||
@ -653,7 +653,7 @@ public final class PartyManager {
|
|||||||
|
|
||||||
YamlConfiguration partiesFile = new YamlConfiguration();
|
YamlConfiguration partiesFile = new YamlConfiguration();
|
||||||
|
|
||||||
mcMMO.p.debug("Saving Parties... (" + parties.size() + ")");
|
mcMMO.p.getLogger().info("Saving Parties... (" + parties.size() + ")");
|
||||||
for (Party party : parties) {
|
for (Party party : parties) {
|
||||||
String partyName = party.getName();
|
String partyName = party.getName();
|
||||||
PartyLeader leader = party.getLeader();
|
PartyLeader leader = party.getLeader();
|
||||||
@ -751,7 +751,7 @@ public final class PartyManager {
|
|||||||
parties.add(party);
|
parties.add(party);
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.p.debug("Loaded (" + parties.size() + ") Parties...");
|
mcMMO.p.getLogger().info("Loaded (" + parties.size() + ") Parties...");
|
||||||
|
|
||||||
for (Party party : hasAlly) {
|
for (Party party : hasAlly) {
|
||||||
party.setAlly(PartyManager.getParty(partiesFile.getString(party.getName() + ".Ally")));
|
party.setAlly(PartyManager.getParty(partiesFile.getString(party.getName() + ".Ally")));
|
||||||
|
@ -38,7 +38,7 @@ public class CleanBackupsTask extends BukkitRunnable {
|
|||||||
Date date = getDate(fileName.split("[.]")[0]);
|
Date date = getDate(fileName.split("[.]")[0]);
|
||||||
|
|
||||||
if (!fileName.contains(".zip") || date == null) {
|
if (!fileName.contains(".zip") || date == null) {
|
||||||
mcMMO.p.debug("Could not determine date for file: " + fileName);
|
mcMMO.p.getLogger().info("Could not determine date for file: " + fileName);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ public class CleanBackupsTask extends BukkitRunnable {
|
|||||||
|
|
||||||
for (File file : toDelete) {
|
for (File file : toDelete) {
|
||||||
if (file.delete()) {
|
if (file.delete()) {
|
||||||
mcMMO.p.debug("Deleted: " + file.getName());
|
mcMMO.p.getLogger().info("Deleted: " + file.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.gmail.nossr50.skills.crossbows;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import com.gmail.nossr50.skills.SkillManager;
|
||||||
|
|
||||||
|
public class CrossbowManager extends SkillManager {
|
||||||
|
public CrossbowManager(McMMOPlayer mcMMOPlayer) {
|
||||||
|
super(mcMMOPlayer, PrimarySkillType.CROSSBOWS);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.gmail.nossr50.skills.tridents;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import com.gmail.nossr50.skills.SkillManager;
|
||||||
|
|
||||||
|
public class TridentManager extends SkillManager {
|
||||||
|
public TridentManager(McMMOPlayer mcMMOPlayer) {
|
||||||
|
super(mcMMOPlayer, PrimarySkillType.TRIDENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -25,6 +25,11 @@ public final class ItemUtils {
|
|||||||
return mcMMO.getMaterialMapStore().isBow(item.getType().getKey().getKey());
|
return mcMMO.getMaterialMapStore().isBow(item.getType().getKey().getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isCrossbow(ItemStack itemStack) {
|
||||||
|
return mcMMO.getMaterialMapStore().isCrossbow(itemStack.getType().getKey().getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static boolean hasItemInEitherHand(Player player, Material material) {
|
public static boolean hasItemInEitherHand(Player player, Material material) {
|
||||||
return player.getInventory().getItemInMainHand().getType() == material || player.getInventory().getItemInOffHand().getType() == material;
|
return player.getInventory().getItemInMainHand().getType() == material || player.getInventory().getItemInOffHand().getType() == material;
|
||||||
}
|
}
|
||||||
@ -39,6 +44,11 @@ public final class ItemUtils {
|
|||||||
return mcMMO.getMaterialMapStore().isSword(item.getType().getKey().getKey());
|
return mcMMO.getMaterialMapStore().isSword(item.getType().getKey().getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isTrident(ItemStack itemStack) {
|
||||||
|
return mcMMO.getMaterialMapStore().isTrident(itemStack.getType().getKey().getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the item is a hoe.
|
* Checks if the item is a hoe.
|
||||||
*
|
*
|
||||||
|
@ -48,6 +48,7 @@ public class MaterialMapStore {
|
|||||||
private HashSet<String> pickAxes;
|
private HashSet<String> pickAxes;
|
||||||
private HashSet<String> tridents;
|
private HashSet<String> tridents;
|
||||||
private HashSet<String> bows;
|
private HashSet<String> bows;
|
||||||
|
private HashSet<String> xbows;
|
||||||
private HashSet<String> tools;
|
private HashSet<String> tools;
|
||||||
|
|
||||||
private HashSet<String> enchantables;
|
private HashSet<String> enchantables;
|
||||||
@ -85,6 +86,7 @@ public class MaterialMapStore {
|
|||||||
diamondTools = new HashSet<>();
|
diamondTools = new HashSet<>();
|
||||||
netheriteTools = new HashSet<>();
|
netheriteTools = new HashSet<>();
|
||||||
bows = new HashSet<>();
|
bows = new HashSet<>();
|
||||||
|
xbows = new HashSet<>();
|
||||||
stringTools = new HashSet<>();
|
stringTools = new HashSet<>();
|
||||||
tools = new HashSet<>();
|
tools = new HashSet<>();
|
||||||
|
|
||||||
@ -255,6 +257,7 @@ public class MaterialMapStore {
|
|||||||
fillTridents();
|
fillTridents();
|
||||||
fillStringTools();
|
fillStringTools();
|
||||||
fillBows();
|
fillBows();
|
||||||
|
fillCrossBows();
|
||||||
|
|
||||||
//Tools collection
|
//Tools collection
|
||||||
tools.addAll(woodTools);
|
tools.addAll(woodTools);
|
||||||
@ -266,12 +269,17 @@ public class MaterialMapStore {
|
|||||||
tools.addAll(tridents);
|
tools.addAll(tridents);
|
||||||
tools.addAll(stringTools);
|
tools.addAll(stringTools);
|
||||||
tools.addAll(bows);
|
tools.addAll(bows);
|
||||||
|
tools.addAll(xbows);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillBows() {
|
private void fillBows() {
|
||||||
bows.add("bow");
|
bows.add("bow");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fillCrossBows() {
|
||||||
|
xbows.add("crossbow");
|
||||||
|
}
|
||||||
|
|
||||||
private void fillStringTools() {
|
private void fillStringTools() {
|
||||||
stringTools.add("bow");
|
stringTools.add("bow");
|
||||||
stringTools.add("fishing_rod");
|
stringTools.add("fishing_rod");
|
||||||
@ -598,6 +606,15 @@ public class MaterialMapStore {
|
|||||||
return bows.contains(id);
|
return bows.contains(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isCrossbow(Material material) {
|
||||||
|
return isCrossbow(material.getKey().getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCrossbow(String id) {
|
||||||
|
return xbows.contains(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isLeatherArmor(Material material) {
|
public boolean isLeatherArmor(Material material) {
|
||||||
return isLeatherArmor(material.getKey().getKey());
|
return isLeatherArmor(material.getKey().getKey());
|
||||||
}
|
}
|
||||||
@ -686,6 +703,10 @@ public class MaterialMapStore {
|
|||||||
return diamondTools.contains(id);
|
return diamondTools.contains(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTrident(Material material) { return isTrident(material.getKey().getKey()); }
|
||||||
|
|
||||||
|
public boolean isTrident(String id) { return tridents.contains(id); }
|
||||||
|
|
||||||
public boolean isSword(Material material) {
|
public boolean isSword(Material material) {
|
||||||
return isSword(material.getKey().getKey());
|
return isSword(material.getKey().getKey());
|
||||||
}
|
}
|
||||||
|
@ -6,12 +6,14 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.runnables.skills.ExperienceBarHideTask;
|
import com.gmail.nossr50.runnables.skills.ExperienceBarHideTask;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ExperienceBarManager handles displaying and updating mcMMO experience bars for players
|
* ExperienceBarManager handles displaying and updating mcMMO experience bars for players
|
||||||
@ -24,12 +26,16 @@ public class ExperienceBarManager {
|
|||||||
private HashMap<PrimarySkillType, ExperienceBarWrapper> experienceBars;
|
private HashMap<PrimarySkillType, ExperienceBarWrapper> experienceBars;
|
||||||
private HashMap<PrimarySkillType, ExperienceBarHideTask> experienceBarHideTaskHashMap;
|
private HashMap<PrimarySkillType, ExperienceBarHideTask> experienceBarHideTaskHashMap;
|
||||||
|
|
||||||
|
private final HashMap<PrimarySkillType, BarState> barStateMap;
|
||||||
|
|
||||||
private HashSet<PrimarySkillType> alwaysVisible;
|
private HashSet<PrimarySkillType> alwaysVisible;
|
||||||
private HashSet<PrimarySkillType> disabledBars;
|
private HashSet<PrimarySkillType> disabledBars;
|
||||||
|
|
||||||
public ExperienceBarManager(McMMOPlayer mcMMOPlayer)
|
public ExperienceBarManager(McMMOPlayer mcMMOPlayer, HashMap<PrimarySkillType, BarState> barStateMap)
|
||||||
{
|
{
|
||||||
this.mcMMOPlayer = mcMMOPlayer;
|
this.mcMMOPlayer = mcMMOPlayer;
|
||||||
|
this.barStateMap = barStateMap;
|
||||||
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,6 +47,28 @@ public class ExperienceBarManager {
|
|||||||
//Init sets
|
//Init sets
|
||||||
alwaysVisible = new HashSet<>();
|
alwaysVisible = new HashSet<>();
|
||||||
disabledBars = new HashSet<>();
|
disabledBars = new HashSet<>();
|
||||||
|
|
||||||
|
syncBarStates();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void syncBarStates() {
|
||||||
|
for(Map.Entry<PrimarySkillType, BarState> entry : barStateMap.entrySet()) {
|
||||||
|
PrimarySkillType key = entry.getKey();
|
||||||
|
BarState barState = entry.getValue();
|
||||||
|
|
||||||
|
switch(barState) {
|
||||||
|
case NORMAL:
|
||||||
|
break;
|
||||||
|
case ALWAYS_ON:
|
||||||
|
xpBarSettingToggle(XPBarSettingTarget.SHOW, key);
|
||||||
|
case DISABLED:
|
||||||
|
xpBarSettingToggle(XPBarSettingTarget.HIDE, key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetBarStateMap() {
|
||||||
|
SkillUtils.setBarStateDefaults(barStateMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateExperienceBar(PrimarySkillType primarySkillType, Plugin plugin)
|
public void updateExperienceBar(PrimarySkillType primarySkillType, Plugin plugin)
|
||||||
@ -112,6 +140,7 @@ public class ExperienceBarManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateExperienceBar(skillType, mcMMO.p);
|
updateExperienceBar(skillType, mcMMO.p);
|
||||||
|
barStateMap.put(skillType, BarState.ALWAYS_ON);
|
||||||
break;
|
break;
|
||||||
case HIDE:
|
case HIDE:
|
||||||
alwaysVisible.remove(skillType);
|
alwaysVisible.remove(skillType);
|
||||||
@ -123,6 +152,7 @@ public class ExperienceBarManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hideExperienceBar(skillType);
|
hideExperienceBar(skillType);
|
||||||
|
barStateMap.put(skillType, BarState.DISABLED);
|
||||||
break;
|
break;
|
||||||
case RESET:
|
case RESET:
|
||||||
resetBarSettings();
|
resetBarSettings();
|
||||||
@ -138,12 +168,14 @@ public class ExperienceBarManager {
|
|||||||
hideExperienceBar(permanent);
|
hideExperienceBar(permanent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetBarStateMap();
|
||||||
|
|
||||||
alwaysVisible.clear();
|
alwaysVisible.clear();
|
||||||
disabledBars.clear();
|
disabledBars.clear();
|
||||||
|
|
||||||
//Hide child skills by default
|
//Hide child skills by default
|
||||||
disabledBars.add(PrimarySkillType.SALVAGE);
|
xpBarSettingToggle(XPBarSettingTarget.HIDE, PrimarySkillType.SALVAGE);
|
||||||
disabledBars.add(PrimarySkillType.SMELTING);
|
xpBarSettingToggle(XPBarSettingTarget.HIDE, PrimarySkillType.SMELTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void informPlayer(@NotNull ExperienceBarManager.@NotNull XPBarSettingTarget settingTarget, @Nullable PrimarySkillType skillType) {
|
private void informPlayer(@NotNull ExperienceBarManager.@NotNull XPBarSettingTarget settingTarget, @Nullable PrimarySkillType skillType) {
|
||||||
@ -156,4 +188,6 @@ public class ExperienceBarManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enum XPBarSettingTarget { SHOW, HIDE, RESET, DISABLE }
|
public enum XPBarSettingTarget { SHOW, HIDE, RESET, DISABLE }
|
||||||
|
|
||||||
|
public enum BarState { NORMAL, ALWAYS_ON, DISABLED }
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ public class ScoreboardWrapper {
|
|||||||
oldBoard = null;
|
oldBoard = null;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mcMMO.p.debug("Not reverting targetBoard for " + playerName + " - targetBoard was changed by another plugin (Consider disabling the mcMMO scoreboards if you don't want them!)");
|
mcMMO.p.getLogger().info("Not reverting targetBoard for " + playerName + " - targetBoard was changed by another plugin (Consider disabling the mcMMO scoreboards if you don't want them!)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ import com.gmail.nossr50.skills.archery.ArcheryManager;
|
|||||||
import com.gmail.nossr50.skills.axes.AxesManager;
|
import com.gmail.nossr50.skills.axes.AxesManager;
|
||||||
import com.gmail.nossr50.skills.swords.SwordsManager;
|
import com.gmail.nossr50.skills.swords.SwordsManager;
|
||||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||||
|
import com.gmail.nossr50.skills.tridents.TridentManager;
|
||||||
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||||
import com.gmail.nossr50.util.*;
|
import com.gmail.nossr50.util.*;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
@ -90,6 +91,26 @@ public final class CombatUtils {
|
|||||||
processCombatXP(mcMMOPlayer, target, PrimarySkillType.SWORDS);
|
processCombatXP(mcMMOPlayer, target, PrimarySkillType.SWORDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void processTridentCombat(LivingEntity target, Player player, EntityDamageByEntityEvent entityDamageByEntityEvent) {
|
||||||
|
if (entityDamageByEntityEvent.getCause() == DamageCause.THORNS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
|
//Make sure the profiles been loaded
|
||||||
|
if(mcMMOPlayer == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TridentManager tridentManager = mcMMOPlayer.getTridentManager();
|
||||||
|
// double initialDamage = entityDamageByEntityEvent.getDamage();
|
||||||
|
// double finalDamage = initialDamage;
|
||||||
|
|
||||||
|
processCombatXP(mcMMOPlayer, target, PrimarySkillType.TRIDENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// public static void strengthDebug(Player player) {
|
// public static void strengthDebug(Player player) {
|
||||||
// BukkitPlatform bukkitPlatform = (BukkitPlatform) mcMMO.getPlatformManager().getPlatform();
|
// BukkitPlatform bukkitPlatform = (BukkitPlatform) mcMMO.getPlatformManager().getPlatform();
|
||||||
// Bukkit.broadcastMessage("Strength: "+bukkitPlatform.getPlayerAttackStrength(player));
|
// Bukkit.broadcastMessage("Strength: "+bukkitPlatform.getPlayerAttackStrength(player));
|
||||||
@ -387,6 +408,15 @@ public final class CombatUtils {
|
|||||||
processUnarmedCombat(target, player, event);
|
processUnarmedCombat(target, player, event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (ItemUtils.isTrident(heldItem)) {
|
||||||
|
if(!PrimarySkillType.TRIDENTS.shouldProcess(target)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(PrimarySkillType.TRIDENTS.getPermissions(player)) {
|
||||||
|
processTridentCombat(target, player, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (entityType == EntityType.WOLF) {
|
else if (entityType == EntityType.WOLF) {
|
||||||
|
@ -15,6 +15,7 @@ import com.gmail.nossr50.mcMMO;
|
|||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -31,6 +32,7 @@ import org.bukkit.potion.PotionEffect;
|
|||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -44,6 +46,34 @@ public class SkillUtils {
|
|||||||
mcMMOPlayer.beginXpGain(skill, xp, xpGainReason, xpGainSource);
|
mcMMOPlayer.beginXpGain(skill, xp, xpGainReason, xpGainSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static HashMap<PrimarySkillType, ExperienceBarManager.BarState> generateDefaultBarStateMap() {
|
||||||
|
HashMap<PrimarySkillType, ExperienceBarManager.BarState> barStateHashMap = new HashMap<>();
|
||||||
|
|
||||||
|
setBarStateDefaults(barStateHashMap);
|
||||||
|
|
||||||
|
return barStateHashMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ExperienceBarManager.BarState asBarState(String str) {
|
||||||
|
for(ExperienceBarManager.BarState barState : ExperienceBarManager.BarState.values()) {
|
||||||
|
if(barState.toString().equalsIgnoreCase(str)) {
|
||||||
|
return barState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ExperienceBarManager.BarState.NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setBarStateDefaults(HashMap<PrimarySkillType, ExperienceBarManager.BarState> barStateHashMap) {
|
||||||
|
for(PrimarySkillType skillType : PrimarySkillType.values()) {
|
||||||
|
if(skillType.isChildSkill()) {
|
||||||
|
barStateHashMap.put(skillType, ExperienceBarManager.BarState.DISABLED);
|
||||||
|
} else {
|
||||||
|
barStateHashMap.put(skillType, ExperienceBarManager.BarState.NORMAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skill Stat Calculations
|
* Skill Stat Calculations
|
||||||
*/
|
*/
|
||||||
|
@ -28,13 +28,13 @@ public class ZipLibrary {
|
|||||||
|
|
||||||
public static void mcMMOBackup() throws IOException {
|
public static void mcMMOBackup() throws IOException {
|
||||||
if (Config.getInstance().getUseMySQL()) {
|
if (Config.getInstance().getUseMySQL()) {
|
||||||
mcMMO.p.debug("This server is running in SQL Mode.");
|
mcMMO.p.getLogger().info("This server is running in SQL Mode.");
|
||||||
mcMMO.p.debug("Only config files will be backed up.");
|
mcMMO.p.getLogger().info("Only config files will be backed up.");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (BACKUP_DIR.mkdir()) {
|
if (BACKUP_DIR.mkdir()) {
|
||||||
mcMMO.p.debug("Created Backup Directory.");
|
mcMMO.p.getLogger().info("Created Backup Directory.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
@ -61,7 +61,7 @@ public class ZipLibrary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actually do something
|
// Actually do something
|
||||||
mcMMO.p.debug("Backing up your mcMMO Configuration... ");
|
mcMMO.p.getLogger().info("Backing up your mcMMO Configuration... ");
|
||||||
|
|
||||||
packZip(fileZip, sources);
|
packZip(fileZip, sources);
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ public class ZipLibrary {
|
|||||||
|
|
||||||
zipOut.flush();
|
zipOut.flush();
|
||||||
zipOut.close();
|
zipOut.close();
|
||||||
mcMMO.p.debug("Backup Completed.");
|
mcMMO.p.getLogger().info("Backup Completed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String buildPath(String path, String file) {
|
private static String buildPath(String path, String file) {
|
||||||
|
@ -191,6 +191,8 @@ Hardcore:
|
|||||||
Taming: false
|
Taming: false
|
||||||
Unarmed: false
|
Unarmed: false
|
||||||
Woodcutting: false
|
Woodcutting: false
|
||||||
|
Tridents: false
|
||||||
|
Crossbows: false
|
||||||
Vampirism:
|
Vampirism:
|
||||||
Leech_Percentage: 5.0
|
Leech_Percentage: 5.0
|
||||||
Level_Threshold: 0
|
Level_Threshold: 0
|
||||||
@ -208,6 +210,8 @@ Hardcore:
|
|||||||
Taming: false
|
Taming: false
|
||||||
Unarmed: false
|
Unarmed: false
|
||||||
Woodcutting: false
|
Woodcutting: false
|
||||||
|
Tridents: false
|
||||||
|
Crossbows: false
|
||||||
|
|
||||||
#
|
#
|
||||||
# Settings for SMP Mods
|
# Settings for SMP Mods
|
||||||
@ -415,6 +419,15 @@ Skills:
|
|||||||
Woodcutting:
|
Woodcutting:
|
||||||
Tree_Feller_Sounds: true
|
Tree_Feller_Sounds: true
|
||||||
Level_Cap: 0
|
Level_Cap: 0
|
||||||
|
Tridents:
|
||||||
|
Enabled_For_PVP: true
|
||||||
|
Enabled_For_PVE: true
|
||||||
|
Level_Cap: 0
|
||||||
|
Crossbows:
|
||||||
|
Enabled_For_PVP: true
|
||||||
|
Enabled_For_PVE: true
|
||||||
|
Level_Cap: 0
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Settings for Double Drops
|
# Settings for Double Drops
|
||||||
|
@ -110,6 +110,14 @@ Experience_Bars:
|
|||||||
Enable: true
|
Enable: true
|
||||||
Color: GREEN
|
Color: GREEN
|
||||||
BarStyle: SEGMENTED_6
|
BarStyle: SEGMENTED_6
|
||||||
|
Tridents:
|
||||||
|
Enable: true
|
||||||
|
Color: BLUE
|
||||||
|
BarStyle: SEGMENTED_6
|
||||||
|
Crossbows:
|
||||||
|
Enable: true
|
||||||
|
Color: BLUE
|
||||||
|
BarStyle: SEGMENTED_6
|
||||||
#
|
#
|
||||||
# Settings for XP formula
|
# Settings for XP formula
|
||||||
###
|
###
|
||||||
@ -159,6 +167,8 @@ Experience_Formula:
|
|||||||
Repair: 1.0
|
Repair: 1.0
|
||||||
Fishing: 1.0
|
Fishing: 1.0
|
||||||
Alchemy: 1.0
|
Alchemy: 1.0
|
||||||
|
Tridents: 1.0
|
||||||
|
Crossbows: 1.0
|
||||||
|
|
||||||
# XP earned by players with the permission mcmmo.perks.xp.customboost.<skillname> will get multiplied
|
# XP earned by players with the permission mcmmo.perks.xp.customboost.<skillname> will get multiplied
|
||||||
# with 1.25 by default, resulting in a 25% XP boost
|
# with 1.25 by default, resulting in a 25% XP boost
|
||||||
@ -191,6 +201,8 @@ Diminished_Returns:
|
|||||||
Repair: 20000
|
Repair: 20000
|
||||||
Fishing: 20000
|
Fishing: 20000
|
||||||
Alchemy: 20000
|
Alchemy: 20000
|
||||||
|
Tridents: 20000
|
||||||
|
Crossbows: 20000
|
||||||
|
|
||||||
Time_Interval: 10
|
Time_Interval: 10
|
||||||
|
|
||||||
|
@ -98,6 +98,8 @@ Overhaul.Name.Swords=Swords
|
|||||||
Overhaul.Name.Taming=Taming
|
Overhaul.Name.Taming=Taming
|
||||||
Overhaul.Name.Unarmed=Unarmed
|
Overhaul.Name.Unarmed=Unarmed
|
||||||
Overhaul.Name.Woodcutting=Woodcutting
|
Overhaul.Name.Woodcutting=Woodcutting
|
||||||
|
Overhaul.Name.Tridents=Tridents
|
||||||
|
Overhaul.Name.Crossbows=Crossbows
|
||||||
# /mcMMO Command Style Stuff
|
# /mcMMO Command Style Stuff
|
||||||
Commands.mcc.Header=[[RED]]---[][[GREEN]]mcMMO Commands[[RED]][]---
|
Commands.mcc.Header=[[RED]]---[][[GREEN]]mcMMO Commands[[RED]][]---
|
||||||
Commands.Other=[[RED]]---[][[GREEN]]SPECIAL COMMANDS[[RED]][]---
|
Commands.Other=[[RED]]---[][[GREEN]]SPECIAL COMMANDS[[RED]][]---
|
||||||
@ -122,6 +124,8 @@ XPBar.Swords=Swords Lv.[[GOLD]]{0}
|
|||||||
XPBar.Taming=Taming Lv.[[GOLD]]{0}
|
XPBar.Taming=Taming Lv.[[GOLD]]{0}
|
||||||
XPBar.Unarmed=Unarmed Lv.[[GOLD]]{0}
|
XPBar.Unarmed=Unarmed Lv.[[GOLD]]{0}
|
||||||
XPBar.Woodcutting=Woodcutting Lv.[[GOLD]]{0}
|
XPBar.Woodcutting=Woodcutting Lv.[[GOLD]]{0}
|
||||||
|
XPBar.Tridents=Tridents Lv.[[GOLD]]{0}
|
||||||
|
XPBar.Crossbows=Crossbows Lv.[[GOLD]]{0}
|
||||||
#This is just a preset template that gets used if the 'ExtraDetails' setting is turned on in experience.yml (off by default), you can ignore this template and just edit the strings above
|
#This is just a preset template that gets used if the 'ExtraDetails' setting is turned on in experience.yml (off by default), you can ignore this template and just edit the strings above
|
||||||
XPBar.Complex.Template={0} [[DARK_AQUA]] {4}[[WHITE]]% [[DARK_AQUA]]([[WHITE]]{1}[[DARK_AQUA]]/[[WHITE]]{2}[[DARK_AQUA]])
|
XPBar.Complex.Template={0} [[DARK_AQUA]] {4}[[WHITE]]% [[DARK_AQUA]]([[WHITE]]{1}[[DARK_AQUA]]/[[WHITE]]{2}[[DARK_AQUA]])
|
||||||
# XP BAR Allows for the following variables -- {0} = Skill Level, {1} Current XP, {2} XP Needed for next level, {3} Power Level, {4} Percentage of Level
|
# XP BAR Allows for the following variables -- {0} = Skill Level, {1} Current XP, {2} XP Needed for next level, {3} Power Level, {4} Percentage of Level
|
||||||
|
@ -146,6 +146,12 @@ commands:
|
|||||||
salvage:
|
salvage:
|
||||||
description: Detailed mcMMO skill info
|
description: Detailed mcMMO skill info
|
||||||
permission: mcmmo.commands.salvage
|
permission: mcmmo.commands.salvage
|
||||||
|
tridents:
|
||||||
|
description: Detailed mcMMO skill info
|
||||||
|
permission: mcmmo.commands.tridents
|
||||||
|
crossbows:
|
||||||
|
description: Detailed mcMMO skill info
|
||||||
|
permission: mcmmo.commands.crossbows
|
||||||
adminchat:
|
adminchat:
|
||||||
aliases: [ac, a]
|
aliases: [ac, a]
|
||||||
description: Toggle Admin chat or send admin chat messages
|
description: Toggle Admin chat or send admin chat messages
|
||||||
@ -222,6 +228,8 @@ permissions:
|
|||||||
mcmmo.ability.taming.all: true
|
mcmmo.ability.taming.all: true
|
||||||
mcmmo.ability.unarmed.all: true
|
mcmmo.ability.unarmed.all: true
|
||||||
mcmmo.ability.woodcutting.all: true
|
mcmmo.ability.woodcutting.all: true
|
||||||
|
mcmmo.ability.tridents.all: true
|
||||||
|
mcmmo.ability.crossbows.all: true
|
||||||
mcmmo.ability.acrobatics.*:
|
mcmmo.ability.acrobatics.*:
|
||||||
default: false
|
default: false
|
||||||
description: Allows access to all Acrobatics abilities
|
description: Allows access to all Acrobatics abilities
|
||||||
@ -709,6 +717,28 @@ permissions:
|
|||||||
description: Allows access to Leaf Blower ability
|
description: Allows access to Leaf Blower ability
|
||||||
mcmmo.ability.woodcutting.treefeller:
|
mcmmo.ability.woodcutting.treefeller:
|
||||||
description: Allows access to Tree Feller ability
|
description: Allows access to Tree Feller ability
|
||||||
|
mcmmo.ability.tridents.*:
|
||||||
|
default: false
|
||||||
|
description: Allows access to all Tridents abilities
|
||||||
|
children:
|
||||||
|
mcmmo.ability.tridents.all: true
|
||||||
|
mcmmo.ability.tridents.all:
|
||||||
|
description: Allows access to all Tridents abilities
|
||||||
|
children:
|
||||||
|
mcmmo.ability.tridents.multitasking: true
|
||||||
|
mcmmo.ability.tridents.multitasking:
|
||||||
|
description: Allows access to Multitasking Trident sub-skill
|
||||||
|
mcmmo.ability.crossbows.*:
|
||||||
|
default: false
|
||||||
|
description: Allows access to Crossbow sub-skills
|
||||||
|
children:
|
||||||
|
mcmmo.ability.crossbows.all: true
|
||||||
|
mcmmo.ability.crossbows.all:
|
||||||
|
description: Allows access to Crossbow sub-skills
|
||||||
|
children:
|
||||||
|
mcmmo.ability.crossbows.coneofdeath: true
|
||||||
|
mcmmo.ability.crossbows.coneofdeath:
|
||||||
|
description: Allows access to Cone of Death sub-skill
|
||||||
mcmmo.admin:
|
mcmmo.admin:
|
||||||
default: false
|
default: false
|
||||||
description: Implies access to everything in mcMMO
|
description: Implies access to everything in mcMMO
|
||||||
@ -795,6 +825,8 @@ permissions:
|
|||||||
mcmmo.commands.taming: true
|
mcmmo.commands.taming: true
|
||||||
mcmmo.commands.unarmed: true
|
mcmmo.commands.unarmed: true
|
||||||
mcmmo.commands.woodcutting: true
|
mcmmo.commands.woodcutting: true
|
||||||
|
mcmmo.commands.tridents: true
|
||||||
|
mcmmo.commands.crossbows: true
|
||||||
mcmmo.commands.defaultsop:
|
mcmmo.commands.defaultsop:
|
||||||
description: Implies all default op mcmmo.commands permissions.
|
description: Implies all default op mcmmo.commands permissions.
|
||||||
children:
|
children:
|
||||||
@ -2007,6 +2039,8 @@ permissions:
|
|||||||
mcmmo.skills.taming: true
|
mcmmo.skills.taming: true
|
||||||
mcmmo.skills.unarmed: true
|
mcmmo.skills.unarmed: true
|
||||||
mcmmo.skills.woodcutting: true
|
mcmmo.skills.woodcutting: true
|
||||||
|
mcmmo.skills.tridents: true
|
||||||
|
mcmmo.skills.crossbows: true
|
||||||
mcmmo.skills.acrobatics:
|
mcmmo.skills.acrobatics:
|
||||||
description: Allows access to the Acrobatics skill
|
description: Allows access to the Acrobatics skill
|
||||||
children:
|
children:
|
||||||
@ -2082,6 +2116,16 @@ permissions:
|
|||||||
children:
|
children:
|
||||||
mcmmo.ability.woodcutting.all: true
|
mcmmo.ability.woodcutting.all: true
|
||||||
mcmmo.commands.woodcutting: true
|
mcmmo.commands.woodcutting: true
|
||||||
|
mcmmo.skills.tridents:
|
||||||
|
description: Allows access to the Tridents skill
|
||||||
|
children:
|
||||||
|
mcmmo.ability.tridents.all: true
|
||||||
|
mcmmo.commands.tridents: true
|
||||||
|
mcmmo.skills.crossbows:
|
||||||
|
description: Allows access to the Crossbows skill
|
||||||
|
children:
|
||||||
|
mcmmo.ability.crossbows.all: true
|
||||||
|
mcmmo.commands.crossbows: true
|
||||||
mcmmo.showversion:
|
mcmmo.showversion:
|
||||||
default: true
|
default: true
|
||||||
description: Show mcMMO version number in /mcmmo and motd
|
description: Show mcMMO version number in /mcmmo and motd
|
||||||
|
@ -670,3 +670,37 @@ Repair:
|
|||||||
Rank_6: 750
|
Rank_6: 750
|
||||||
Rank_7: 850
|
Rank_7: 850
|
||||||
Rank_8: 1000
|
Rank_8: 1000
|
||||||
|
Tridents:
|
||||||
|
MultiTasking:
|
||||||
|
Standard:
|
||||||
|
Rank_1: 5
|
||||||
|
Rank_2: 20
|
||||||
|
Rank_3: 30
|
||||||
|
Rank_4: 60
|
||||||
|
Rank_5: 100
|
||||||
|
RetroMode:
|
||||||
|
Rank_1: 50
|
||||||
|
Rank_2: 200
|
||||||
|
Rank_3: 300
|
||||||
|
Rank_4: 600
|
||||||
|
Rank_5: 1000
|
||||||
|
Crossbows:
|
||||||
|
ConeOfDeath:
|
||||||
|
Standard:
|
||||||
|
Rank_1: 10
|
||||||
|
Rank_2: 25
|
||||||
|
Rank_3: 35
|
||||||
|
Rank_4: 50
|
||||||
|
Rank_5: 65
|
||||||
|
Rank_6: 75
|
||||||
|
Rank_7: 85
|
||||||
|
Rank_8: 100
|
||||||
|
RetroMode:
|
||||||
|
Rank_1: 100
|
||||||
|
Rank_2: 250
|
||||||
|
Rank_3: 350
|
||||||
|
Rank_4: 500
|
||||||
|
Rank_5: 650
|
||||||
|
Rank_6: 750
|
||||||
|
Rank_7: 850
|
||||||
|
Rank_8: 1000
|
2
src/main/resources/tridents.yml
Normal file
2
src/main/resources/tridents.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# In the Java version of Minecraft, Tridents are pretty rare to come by. Considering we have a whole skill around it, I added this setting to make it more viable.
|
||||||
|
Craftable_Tridents: true
|
Loading…
Reference in New Issue
Block a user