mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 11:03:43 +01:00 
			
		
		
		
	more work on migrating the API
This commit is contained in:
		@@ -1,7 +1,9 @@
 | 
			
		||||
package com.gmail.nossr50.commands.player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.util.commands.CommandUtils;
 | 
			
		||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
 | 
			
		||||
import com.google.common.collect.ImmutableList;
 | 
			
		||||
@@ -25,12 +27,14 @@ public class McstatsCommand implements TabExecutor {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (args.length == 0) {
 | 
			
		||||
            if (mcMMO.getUserManager().getPlayer((Player) sender) == null) {
 | 
			
		||||
            Player player = (Player) sender;
 | 
			
		||||
 | 
			
		||||
            if (mcMMO.getUserManager().queryPlayer(player) == null) {
 | 
			
		||||
                sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad"));
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Player player = (Player) sender;
 | 
			
		||||
            McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
 | 
			
		||||
 | 
			
		||||
            if (Config.getInstance().getStatsUseBoard() && Config.getInstance().getScoreboardsEnabled()) {
 | 
			
		||||
                ScoreboardManager.enablePlayerStatsScoreboard(player);
 | 
			
		||||
@@ -50,9 +54,9 @@ public class McstatsCommand implements TabExecutor {
 | 
			
		||||
            int powerLevelCap = Config.getInstance().getPowerLevelCap();
 | 
			
		||||
 | 
			
		||||
            if (powerLevelCap != Integer.MAX_VALUE) {
 | 
			
		||||
                player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", mcMMO.getUserManager().getPlayer(player).getPowerLevel(), powerLevelCap));
 | 
			
		||||
                player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", mmoPlayer.getPowerLevel(), powerLevelCap));
 | 
			
		||||
            } else {
 | 
			
		||||
                player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", mcMMO.getUserManager().getPlayer(player).getPowerLevel()));
 | 
			
		||||
                player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", mmoPlayer.getPowerLevel()));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,52 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.experience.ExperienceManager;
 | 
			
		||||
import com.neetgames.mcmmo.player.MMOPlayer;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
public abstract class AbstractMMOPlayer implements MMOPlayer {
 | 
			
		||||
    /* All of the persistent data for a player that gets saved and loaded from DB */
 | 
			
		||||
    protected final @NotNull PersistentPlayerData persistentPlayerData; //All persistent data is kept here
 | 
			
		||||
 | 
			
		||||
    /* Managers */
 | 
			
		||||
    protected final @NotNull ExperienceManager experienceManager;
 | 
			
		||||
    protected final @NotNull CooldownManager cooldownManager;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new AbstractMMOPlayer for a {@link Player} with default values
 | 
			
		||||
     *
 | 
			
		||||
     * @param player target player
 | 
			
		||||
     */
 | 
			
		||||
    public AbstractMMOPlayer(@NotNull Player player) {
 | 
			
		||||
        /* New Data */
 | 
			
		||||
        this(player.getUniqueId(), player.getName());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new AbstractMMOPlayer for a {@link Player} with default values
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerUUID target player's UUID
 | 
			
		||||
     * @param playerName target player's name
 | 
			
		||||
     */
 | 
			
		||||
    public AbstractMMOPlayer(@NotNull UUID playerUUID, @NotNull String playerName) {
 | 
			
		||||
        /* New Data */
 | 
			
		||||
        this.persistentPlayerData = new PersistentPlayerData(playerUUID, playerName);
 | 
			
		||||
        this.experienceManager = new ExperienceManager(persistentPlayerData);
 | 
			
		||||
        this.cooldownManager = new CooldownManager(persistentPlayerData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize an AbstractMMOPlayer for {@link PersistentPlayerData}
 | 
			
		||||
     * This will be used for existing data
 | 
			
		||||
     *
 | 
			
		||||
     * @param persistentPlayerData target persistent player data
 | 
			
		||||
     */
 | 
			
		||||
    public AbstractMMOPlayer(@NotNull PersistentPlayerData persistentPlayerData) {
 | 
			
		||||
        this.persistentPlayerData = persistentPlayerData;
 | 
			
		||||
        this.experienceManager = new ExperienceManager(persistentPlayerData);
 | 
			
		||||
        this.cooldownManager = new CooldownManager(persistentPlayerData);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.neetgames.mcmmo.UniqueDataType;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
@@ -22,7 +23,7 @@ public class CooldownManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void actualizeChimeraWingLastUse() {
 | 
			
		||||
        playerProfile.setChimaeraWingDATS((int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR));
 | 
			
		||||
        playerDataRef.setChimaeraWingDATS((int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public @Nullable Location getTeleportCommenceLocation() {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 | 
			
		||||
import com.google.common.collect.ImmutableMap;
 | 
			
		||||
import com.neetgames.mcmmo.MobHealthBarType;
 | 
			
		||||
import com.neetgames.mcmmo.UniqueDataType;
 | 
			
		||||
import com.neetgames.mcmmo.skill.RootSkill;
 | 
			
		||||
import com.neetgames.mcmmo.skill.SkillBossBarState;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
@@ -22,8 +23,8 @@ public class MMODataSnapshot {
 | 
			
		||||
    private final @NotNull MobHealthBarType mobHealthBarType;
 | 
			
		||||
 | 
			
		||||
    /* Skill Data */
 | 
			
		||||
    private final @NotNull ImmutableMap<PrimarySkillType, Integer> skillLevelValues;
 | 
			
		||||
    private final @NotNull ImmutableMap<PrimarySkillType, Float> skillExperienceValues;
 | 
			
		||||
    private final @NotNull ImmutableMap<RootSkill, Integer> skillLevelValues;
 | 
			
		||||
    private final @NotNull ImmutableMap<RootSkill, Float> skillExperienceValues;
 | 
			
		||||
    private final @NotNull ImmutableMap<SuperAbilityType, Integer> abilityDeactivationTimestamps; // Ability & Cooldown
 | 
			
		||||
    private final @NotNull ImmutableMap<UniqueDataType, Integer> uniquePlayerData; //Misc data that doesn't fit into other categories (chimaera wing, etc..)
 | 
			
		||||
    private final @NotNull ImmutableMap<PrimarySkillType, SkillBossBarState> barStateMap;
 | 
			
		||||
@@ -36,7 +37,7 @@ public class MMODataSnapshot {
 | 
			
		||||
    private final @NotNull Integer scoreboardTipsShown;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public MMODataSnapshot(PersistentPlayerData persistentPlayerData) {
 | 
			
		||||
    public MMODataSnapshot(@NotNull PersistentPlayerData persistentPlayerData) {
 | 
			
		||||
        playerName = persistentPlayerData.getPlayerName();
 | 
			
		||||
        playerUUID = persistentPlayerData.getPlayerUUID();
 | 
			
		||||
        lastLogin = persistentPlayerData.getLastLogin();
 | 
			
		||||
@@ -71,11 +72,11 @@ public class MMODataSnapshot {
 | 
			
		||||
        return mobHealthBarType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public @NotNull ImmutableMap<PrimarySkillType, Integer> getSkillLevelValues() {
 | 
			
		||||
    public @NotNull ImmutableMap<RootSkill, Integer> getSkillLevelValues() {
 | 
			
		||||
        return skillLevelValues;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public @NotNull ImmutableMap<PrimarySkillType, Float> getSkillExperienceValues() {
 | 
			
		||||
    public @NotNull ImmutableMap<RootSkill, Float> getSkillExperienceValues() {
 | 
			
		||||
        return skillExperienceValues;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -87,7 +88,7 @@ public class MMODataSnapshot {
 | 
			
		||||
        return uniquePlayerData;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public @NotNull ImmutableMap<PrimarySkillType, SkillBossBarState> getBarStateMap() {
 | 
			
		||||
    public @NotNull ImmutableMap<RootSkill, SkillBossBarState> getBarStateMap() {
 | 
			
		||||
        return barStateMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
public class McMMOPlayer implements OnlineMMOPlayer, Identified {
 | 
			
		||||
public class McMMOPlayer extends PlayerProfile implements OnlineMMOPlayer, Identified {
 | 
			
		||||
    private final @NotNull Player player;
 | 
			
		||||
    private final @NotNull Identity identity;
 | 
			
		||||
    private @Nullable Party playerPartyRef;
 | 
			
		||||
@@ -605,7 +605,17 @@ public class McMMOPlayer implements OnlineMMOPlayer, Identified {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public UUID getUUID() {
 | 
			
		||||
        return ;
 | 
			
		||||
    public boolean inParty() {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isGodMode() {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isChatSpying() {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,19 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.validation.NonNullRule;
 | 
			
		||||
import com.gmail.nossr50.datatypes.validation.PositiveIntegerRule;
 | 
			
		||||
import com.gmail.nossr50.datatypes.validation.Validator;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.util.experience.MMOExperienceBarManager;
 | 
			
		||||
import com.google.common.collect.ImmutableMap;
 | 
			
		||||
import com.neetgames.mcmmo.MobHealthBarType;
 | 
			
		||||
import com.neetgames.mcmmo.UniqueDataType;
 | 
			
		||||
import com.neetgames.mcmmo.exceptions.UnexpectedValueException;
 | 
			
		||||
import com.neetgames.mcmmo.skill.Skill;
 | 
			
		||||
import com.neetgames.mcmmo.skill.SkillBossBarState;
 | 
			
		||||
import com.neetgames.mcmmo.skill.*;
 | 
			
		||||
import com.neetgames.mcmmo.player.MMOPlayerData;
 | 
			
		||||
import com.neetgames.mcmmo.skill.SuperSkill;
 | 
			
		||||
import com.neetgames.neetlib.dirtydata.DirtyData;
 | 
			
		||||
import com.neetgames.neetlib.dirtydata.DirtyMap;
 | 
			
		||||
import com.neetgames.neetlib.mutableprimitives.MutableBoolean;
 | 
			
		||||
@@ -25,6 +23,7 @@ import com.neetgames.neetlib.mutableprimitives.MutableString;
 | 
			
		||||
import org.apache.commons.lang.NullArgumentException;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import java.util.EnumMap;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
@@ -39,15 +38,12 @@ public class PersistentPlayerData implements MMOPlayerData {
 | 
			
		||||
    /* Records */
 | 
			
		||||
    private final DirtyData<MutableLong> lastLogin;
 | 
			
		||||
 | 
			
		||||
    /* HUDs */
 | 
			
		||||
    private final @NotNull DirtyData<MobHealthBarType> mobHealthBarType;
 | 
			
		||||
 | 
			
		||||
    /* Skill Data */
 | 
			
		||||
    private final @NotNull DirtyMap<PrimarySkillType, Integer> skillLevelValues;
 | 
			
		||||
    private final @NotNull DirtyMap<PrimarySkillType, Float> skillExperienceValues;
 | 
			
		||||
    private final @NotNull DirtyMap<SuperAbilityType, Integer> abilityDeactivationTimestamps; // Ability & Cooldown
 | 
			
		||||
    private final @NotNull DirtyMap<SkillIdentity, Integer> skillLevelValues;
 | 
			
		||||
    private final @NotNull DirtyMap<SkillIdentity, Float> skillExperienceValues;
 | 
			
		||||
    private final @NotNull DirtyMap<SkillIdentity, Integer> abilityDeactivationTimestamps; // Ability & Cooldown
 | 
			
		||||
    private final @NotNull DirtyMap<UniqueDataType, Integer> uniquePlayerData; //Misc data that doesn't fit into other categories (chimaera wing, etc..)
 | 
			
		||||
    private final @NotNull DirtyMap<PrimarySkillType, SkillBossBarState> barStateMap;
 | 
			
		||||
    private final @NotNull DirtyMap<SkillIdentity, SkillBossBarState> barStateMap;
 | 
			
		||||
 | 
			
		||||
    /* Special Flags */
 | 
			
		||||
    private final @NotNull DirtyData<MutableBoolean> partyChatSpying;
 | 
			
		||||
@@ -59,6 +55,7 @@ public class PersistentPlayerData implements MMOPlayerData {
 | 
			
		||||
    /**
 | 
			
		||||
     * Create new persistent player data for a player
 | 
			
		||||
     * Initialized with default values
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerUUID target player's UUID
 | 
			
		||||
     * @param playerName target player's name
 | 
			
		||||
     * @throws NullArgumentException thrown when never null arguments are null
 | 
			
		||||
@@ -71,16 +68,15 @@ public class PersistentPlayerData implements MMOPlayerData {
 | 
			
		||||
        this.playerUUID = playerUUID;
 | 
			
		||||
        this.playerName = new DirtyData<>(new MutableString(playerName), dirtyFlag);
 | 
			
		||||
 | 
			
		||||
        this.skillLevelValues = new DirtyMap<>(new EnumMap<>(PrimarySkillType.class), dirtyFlag);
 | 
			
		||||
        this.skillExperienceValues = new DirtyMap<>(new EnumMap<>(PrimarySkillType.class), dirtyFlag);
 | 
			
		||||
        this.abilityDeactivationTimestamps = new DirtyMap<>(new EnumMap<>(SuperAbilityType.class), dirtyFlag);
 | 
			
		||||
        this.skillLevelValues = new DirtyMap<>(new HashMap<>(SkillIdentity.class), dirtyFlag);
 | 
			
		||||
        this.skillExperienceValues = new DirtyMap<>(new HashMap<>(SkillIdentity.class), dirtyFlag);
 | 
			
		||||
        this.abilityDeactivationTimestamps = new DirtyMap<>(new EnumMap<>(SkillIdentity.class), dirtyFlag);
 | 
			
		||||
        this.uniquePlayerData = new DirtyMap<>(new EnumMap<>(UniqueDataType.class), dirtyFlag);
 | 
			
		||||
        this.mobHealthBarType = new DirtyData<>(Config.getInstance().getMobHealthbarDefault(), dirtyFlag);
 | 
			
		||||
 | 
			
		||||
        this.scoreboardTipsShown = new DirtyData<>(new MutableInteger(0), dirtyFlag);
 | 
			
		||||
 | 
			
		||||
        for(SuperAbilityType superAbilityType : SuperAbilityType.values()) {
 | 
			
		||||
            abilityDeactivationTimestamps.put(superAbilityType, 0);
 | 
			
		||||
        for(RootSkill rootSkill : mcMMO.p.getSkillRegister().getRootSkills()) {
 | 
			
		||||
            abilityDeactivationTimestamps.put(rootSkill.getSkillIdentity(), 0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for(PrimarySkillType primarySkillType : PrimarySkillType.values()) {
 | 
			
		||||
@@ -192,12 +188,12 @@ public class PersistentPlayerData implements MMOPlayerData {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setSkillLevel(Skill skill, int i) {
 | 
			
		||||
    public void setSkillLevel(@NotNull RootSkill rootSkill, int i) {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int getSkillLevel(Skill skill) {
 | 
			
		||||
    public int getSkillLevel(@NotNull RootSkill rootSkill) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,51 +13,42 @@ import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
public class PlayerProfile implements OfflineMMOPlayer {
 | 
			
		||||
 | 
			
		||||
    /* All of the persistent data for a player that gets saved and loaded from DB */
 | 
			
		||||
    private final @NotNull PersistentPlayerData persistentPlayerData; //All persistent data is kept here
 | 
			
		||||
 | 
			
		||||
    /* Managers */
 | 
			
		||||
    private final @NotNull ExperienceManager experienceManager;
 | 
			
		||||
    private final @NotNull CooldownManager cooldownManager;
 | 
			
		||||
public class PlayerProfile extends AbstractMMOPlayer {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new PlayerProfile for a {@link Player}
 | 
			
		||||
     * Create a new {@link PlayerProfile} for a {@link Player} with default values
 | 
			
		||||
     *
 | 
			
		||||
     * @param player target player
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerProfile(@NotNull Player player) {
 | 
			
		||||
        /* New Data */
 | 
			
		||||
        this(player.getUniqueId(), player.getName());
 | 
			
		||||
        super(player);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new PlayerProfile for a {@link Player}
 | 
			
		||||
     * Create a new {@link PlayerProfile} for a {@link Player} with default values
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerUUID target player's UUID
 | 
			
		||||
     * @param playerName target player's name
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerProfile(@NotNull UUID playerUUID, @NotNull String playerName) {
 | 
			
		||||
        /* New Data */
 | 
			
		||||
        this.persistentPlayerData = new PersistentPlayerData(playerUUID, playerName);
 | 
			
		||||
        this.experienceManager = new ExperienceManager(persistentPlayerData);
 | 
			
		||||
        this.cooldownManager = new CooldownManager(persistentPlayerData);
 | 
			
		||||
        super(playerUUID, playerName);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a PlayerProfile for {@link PersistentPlayerData}
 | 
			
		||||
     * Initialize an {@link PlayerProfile} for {@link PersistentPlayerData}
 | 
			
		||||
     * This will be used for existing data
 | 
			
		||||
     *
 | 
			
		||||
     * @param persistentPlayerData target persistent player data
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerProfile(@NotNull PersistentPlayerData persistentPlayerData) {
 | 
			
		||||
        this.persistentPlayerData = persistentPlayerData;
 | 
			
		||||
        this.experienceManager = new ExperienceManager(persistentPlayerData);
 | 
			
		||||
        this.cooldownManager = new CooldownManager(persistentPlayerData);
 | 
			
		||||
        super(persistentPlayerData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the saved player name for this profile
 | 
			
		||||
     * @return the saved player name for this profile
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull String getPlayerName() {
 | 
			
		||||
        return getPersistentPlayerData().getPlayerName();
 | 
			
		||||
    }
 | 
			
		||||
@@ -162,7 +153,7 @@ public class PlayerProfile implements OfflineMMOPlayer {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int getPowerLevel() {
 | 
			
		||||
        return persistentPlayerData
 | 
			
		||||
        return experienceManager.getPowerLevel();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -171,8 +162,8 @@ public class PlayerProfile implements OfflineMMOPlayer {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int getSkillExperience() {
 | 
			
		||||
        return 0;
 | 
			
		||||
    public int getSkillExperience(@NotNull Skill skill) {
 | 
			
		||||
        return persistentPlayerData;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -181,12 +172,12 @@ public class PlayerProfile implements OfflineMMOPlayer {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void savePlayerData() {
 | 
			
		||||
 | 
			
		||||
    public boolean isOnline() {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull MMOPlayerData getMMOPlayerData() {
 | 
			
		||||
        return null;
 | 
			
		||||
        return persistentPlayerData;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.util.text.StringUtils;
 | 
			
		||||
import com.neetgames.mcmmo.skill.RootSkillImpl;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
class CoreRootSkill extends RootSkillImpl {
 | 
			
		||||
    public CoreRootSkill(@NotNull String skillName) {
 | 
			
		||||
        super(mcMMO.p.getName(), StringUtils.getCapitalized(skillName), "mcmmo.skills." + skillName.toLowerCase(Locale.ENGLISH));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,69 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills;
 | 
			
		||||
 | 
			
		||||
import com.google.common.collect.ImmutableSet;
 | 
			
		||||
import com.neetgames.mcmmo.skill.SkillIdentity;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public class CoreSkillConstants {
 | 
			
		||||
 | 
			
		||||
    private static final @NotNull ImmutableSet<CoreRootSkill> immutableCoreRootSkillSet;
 | 
			
		||||
 | 
			
		||||
    public static @NotNull CoreRootSkill ACROBATICS, ALCHEMY, ARCHERY, AXES, EXCAVATION,
 | 
			
		||||
            FISHING, HERBALISM, MINING, REPAIR, SALVAGE, SMELTING, SWORDS, TAMING, UNARMED,
 | 
			
		||||
            WOODCUTTING, TRIDENTS, CROSSBOWS;
 | 
			
		||||
 | 
			
		||||
    static {
 | 
			
		||||
        HashSet<CoreRootSkill> rootSkillSet = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        ACROBATICS = new CoreRootSkill("acrobatics");
 | 
			
		||||
        ALCHEMY = new CoreRootSkill("alchemy");
 | 
			
		||||
        ARCHERY = new CoreRootSkill("archery");
 | 
			
		||||
        AXES = new CoreRootSkill("axes");
 | 
			
		||||
        EXCAVATION = new CoreRootSkill("excavation");
 | 
			
		||||
        FISHING = new CoreRootSkill("fishing");
 | 
			
		||||
        HERBALISM = new CoreRootSkill("herbalism");
 | 
			
		||||
        MINING = new CoreRootSkill("mining");
 | 
			
		||||
        REPAIR = new CoreRootSkill("repair");
 | 
			
		||||
        SALVAGE = new CoreRootSkill("salvage");
 | 
			
		||||
        SMELTING = new CoreRootSkill("smelting");
 | 
			
		||||
        SWORDS = new CoreRootSkill("swords");
 | 
			
		||||
        TAMING = new CoreRootSkill("taming");
 | 
			
		||||
        UNARMED = new CoreRootSkill("unarmed");
 | 
			
		||||
        WOODCUTTING = new CoreRootSkill("woodcutting");
 | 
			
		||||
        TRIDENTS = new CoreRootSkill("tridents");
 | 
			
		||||
        CROSSBOWS = new CoreRootSkill("crossbows");
 | 
			
		||||
 | 
			
		||||
        rootSkillSet.add(ACROBATICS);
 | 
			
		||||
        rootSkillSet.add(ALCHEMY);
 | 
			
		||||
        rootSkillSet.add(ARCHERY);
 | 
			
		||||
        rootSkillSet.add(AXES);
 | 
			
		||||
        rootSkillSet.add(EXCAVATION);
 | 
			
		||||
        rootSkillSet.add(FISHING);
 | 
			
		||||
        rootSkillSet.add(HERBALISM);
 | 
			
		||||
        rootSkillSet.add(MINING);
 | 
			
		||||
        rootSkillSet.add(REPAIR);
 | 
			
		||||
        rootSkillSet.add(SALVAGE);
 | 
			
		||||
        rootSkillSet.add(SMELTING);
 | 
			
		||||
        rootSkillSet.add(SWORDS);
 | 
			
		||||
        rootSkillSet.add(TAMING);
 | 
			
		||||
        rootSkillSet.add(UNARMED);
 | 
			
		||||
        rootSkillSet.add(WOODCUTTING);
 | 
			
		||||
        rootSkillSet.add(TRIDENTS);
 | 
			
		||||
        rootSkillSet.add(CROSSBOWS);
 | 
			
		||||
 | 
			
		||||
        immutableCoreRootSkillSet = ImmutableSet.copyOf(rootSkillSet);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a set of built in skills for mcMMO
 | 
			
		||||
     * No guarantees for whether or not the skills are registered or active or inactive
 | 
			
		||||
     *
 | 
			
		||||
     * @return a set of all root skills built into mcMMO
 | 
			
		||||
     */
 | 
			
		||||
    public static @NotNull Set<CoreRootSkill> getImmutableCoreRootSkillSet() {
 | 
			
		||||
        return immutableCoreRootSkillSet;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,76 +0,0 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills;
 | 
			
		||||
 | 
			
		||||
import com.google.common.base.Objects;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
//TODO: This documentation is a rough draft and will be rewritten
 | 
			
		||||
/**
 | 
			
		||||
 * Used to identify skills
 | 
			
		||||
 * The goal of this class is to avoid namespace conflicts and clearly identify a skill with its established relationship to other skills as needed
 | 
			
		||||
 *
 | 
			
		||||
 * This class will include representation of the relationship between skills, which includes whether or not one skill is parented by another
 | 
			
		||||
 * Skills are not aware of their children, but they can be aware of their parents
 | 
			
		||||
 * You will be able to use the skill register to grab all children of a skill, but no SkillIdentity will be defined with children, the burden of the relationship declaration is on the children
 | 
			
		||||
 *
 | 
			
		||||
 * Any skill with a null parent skill within its SkillIdentity will be considered the skill at the top of the food chain, which at this point has been referred to as a {@link PrimarySkill}
 | 
			
		||||
 * Any skill with a parent will be considered a SubSkill and treated completely differently
 | 
			
		||||
 *
 | 
			
		||||
 * Skills with parents do not gain experience, and instead their intended effects will be based on the strength of the parent skill (its level)
 | 
			
		||||
 * Skills are registered, no two skills can share the same fully qualified name (in this case, a combination of the namespace and skill name)
 | 
			
		||||
 *
 | 
			
		||||
 * A fully qualified name is generated based on the namespace and skill name
 | 
			
		||||
 * @see #genFullyQualifiedName()
 | 
			
		||||
 */
 | 
			
		||||
public class SkillIdentity {
 | 
			
		||||
    @NotNull private final String nameSpace;
 | 
			
		||||
    @NotNull private final String skillName;
 | 
			
		||||
    @Nullable private final SkillIdentity parentSkill;
 | 
			
		||||
 | 
			
		||||
    @NotNull private final String fullyQualifiedName;
 | 
			
		||||
 | 
			
		||||
    public SkillIdentity(@NotNull String nameSpace, @NotNull String skillName, @Nullable SkillIdentity parentSkill) {
 | 
			
		||||
        this.nameSpace = nameSpace;
 | 
			
		||||
        this.skillName = skillName;
 | 
			
		||||
        this.parentSkill = parentSkill;
 | 
			
		||||
 | 
			
		||||
        fullyQualifiedName = genFullyQualifiedName();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SkillIdentity(@NotNull String nameSpace, @NotNull String skillName) {
 | 
			
		||||
        this.nameSpace = nameSpace;
 | 
			
		||||
        this.skillName = skillName;
 | 
			
		||||
        this.parentSkill = null;
 | 
			
		||||
 | 
			
		||||
        fullyQualifiedName = genFullyQualifiedName();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a fully qualified name for this skill
 | 
			
		||||
     * @return the fully qualified name for this skill
 | 
			
		||||
     */
 | 
			
		||||
    private String genFullyQualifiedName() {
 | 
			
		||||
        return nameSpace + ":" + "skillName";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Whether or not this skill has a parent
 | 
			
		||||
     * @return true if this skill has a parent
 | 
			
		||||
     */
 | 
			
		||||
    public boolean hasParent() {
 | 
			
		||||
        return parentSkill != null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object o) {
 | 
			
		||||
        if (this == o) return true;
 | 
			
		||||
        if (o == null || getClass() != o.getClass()) return false;
 | 
			
		||||
        SkillIdentity that = (SkillIdentity) o;
 | 
			
		||||
        return Objects.equal(nameSpace, that.nameSpace) && Objects.equal(skillName, that.skillName) && Objects.equal(parentSkill, that.parentSkill) && Objects.equal(fullyQualifiedName, that.fullyQualifiedName);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hashCode(nameSpace, skillName, parentSkill, fullyQualifiedName);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,156 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.neetgames.mcmmo.api.SkillRegister;
 | 
			
		||||
import com.neetgames.mcmmo.skill.*;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Skills mcMMO is aware of are registered here
 | 
			
		||||
 * The skill register will be used for a few things in mcMMO
 | 
			
		||||
 * Removing a skill from the register doesn't mean it isn't doing anything as the register is simply for mcMMO's own awareness
 | 
			
		||||
 * When a player uses certain commands, such as checking their skill levels, if the skill isn't registered it won't be added to the resulting output of that command
 | 
			
		||||
 */
 | 
			
		||||
public class SkillRegisterImpl implements SkillRegister {
 | 
			
		||||
    //TODO: Move maps and collections to their own container
 | 
			
		||||
    private final @NotNull HashMap<String, Skill> skillNameMap;
 | 
			
		||||
    private final @NotNull Set<Skill> registeredSkills;
 | 
			
		||||
    private final @NotNull Set<SuperSkill> superSkills;
 | 
			
		||||
    private final @NotNull Set<RankedSkill> rankedSkills;
 | 
			
		||||
    private final @NotNull Set<RootSkill> rootSkills; //Can include not-official root skills
 | 
			
		||||
    private final @NotNull Set<RootSkill> coreRootSkills; //Only includes official root skills
 | 
			
		||||
 | 
			
		||||
    public SkillRegisterImpl() {
 | 
			
		||||
        skillNameMap = new HashMap<>();
 | 
			
		||||
        registeredSkills = new HashSet<>();
 | 
			
		||||
        rootSkills = new HashSet<>();
 | 
			
		||||
        superSkills = new HashSet<>();
 | 
			
		||||
        rankedSkills = new HashSet<>();
 | 
			
		||||
        coreRootSkills = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        //TODO: allow config to turn off certain core skills
 | 
			
		||||
        registerCoreSkills();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @Nullable Skill getSkill(@NotNull String fullyQualifiedName) {
 | 
			
		||||
        return skillNameMap.get(fullyQualifiedName);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @Nullable Skill getSkill(@NotNull SkillIdentity skillIdentity) {
 | 
			
		||||
        return skillNameMap.get(skillIdentity.getFullyQualifiedName());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull Set<SuperSkill> getSuperSkills() {
 | 
			
		||||
        return superSkills;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull Set<RankedSkill> getRankedSkills() {
 | 
			
		||||
        return rankedSkills;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull Set<RootSkill> getRootSkills() {
 | 
			
		||||
        return rootSkills;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isSkillRegistered(@NotNull Skill skill) {
 | 
			
		||||
        return registeredSkills.contains(skill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerSkill(@NotNull Skill skill) {
 | 
			
		||||
        registeredSkills.add(skill);
 | 
			
		||||
        addedSkillRegisterProcessing(skill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerSkill(@NotNull Skill skill, boolean override) {
 | 
			
		||||
        if(isSkillRegistered(skill) && override) {
 | 
			
		||||
            registeredSkills.remove(skill);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        registeredSkills.add(skill);
 | 
			
		||||
        addedSkillRegisterProcessing(skill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull Set<Skill> getRegisteredSkills() {
 | 
			
		||||
        return registeredSkills;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void postRemovalSkillRegisterProcessing(@NotNull Skill skill) {
 | 
			
		||||
        removeSkillNameLookup(skill);
 | 
			
		||||
        removeCollectionCache(skill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void removeCollectionCache(@NotNull Skill skill) {
 | 
			
		||||
        //Add to collections for cached lookups
 | 
			
		||||
        if(skill instanceof RootSkill) {
 | 
			
		||||
            rootSkills.remove(skill);
 | 
			
		||||
        } else if (skill instanceof SuperSkill) {
 | 
			
		||||
            superSkills.remove(skill);
 | 
			
		||||
        } else if(skill instanceof RankedSkill) {
 | 
			
		||||
            rankedSkills.remove( skill);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void removeSkillNameLookup(@NotNull Skill skill) {
 | 
			
		||||
        skillNameMap.remove(skill.getSkillIdentity().getFullyQualifiedName());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void addedSkillRegisterProcessing(@NotNull Skill skill) {
 | 
			
		||||
        addSkillNameLookup(skill);
 | 
			
		||||
        addCollectionCache(skill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void addCollectionCache(@NotNull Skill skill) {
 | 
			
		||||
        //Add to various collections for cached lookups
 | 
			
		||||
        if(skill instanceof CoreRootSkill) {
 | 
			
		||||
            coreRootSkills.add((CoreRootSkill) skill);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(skill instanceof RootSkill) {
 | 
			
		||||
            rootSkills.add((RootSkill) skill);
 | 
			
		||||
        } else if (skill instanceof SuperSkill) {
 | 
			
		||||
            superSkills.add((SuperSkill) skill);
 | 
			
		||||
        } else if(skill instanceof RankedSkill) {
 | 
			
		||||
            rankedSkills.add((RankedSkill) skill);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void addSkillNameLookup(@NotNull Skill skill) {
 | 
			
		||||
        skillNameMap.put(skill.getSkillIdentity().getFullyQualifiedName(), skill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void unregisterSkill(@NotNull Skill skill) {
 | 
			
		||||
        mcMMO.p.getLogger().info("Skill "+skill.toString()+" has been removed from the skill register.");
 | 
			
		||||
        registeredSkills.remove(skill);
 | 
			
		||||
        skillNameMap.remove(skill.getSkillIdentity().getFullyQualifiedName());
 | 
			
		||||
 | 
			
		||||
        //Collection cache cleanup
 | 
			
		||||
        postRemovalSkillRegisterProcessing(skill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void registerCoreSkills() {
 | 
			
		||||
        for(CoreRootSkill coreRootSkill : CoreSkillConstants.getImmutableCoreRootSkillSet()) {
 | 
			
		||||
            mcMMO.p.getLogger().info("Registering core skill: "+coreRootSkill.getSkillName());
 | 
			
		||||
            registerSkill(coreRootSkill);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public @NotNull Set<RootSkill> getCoreRootSkills() {
 | 
			
		||||
        return coreRootSkills;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills.interfaces;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
 | 
			
		||||
public interface ChildSkill extends Skill {
 | 
			
		||||
    /**
 | 
			
		||||
     * Get's the other parent for this Skill
 | 
			
		||||
     * @return the other parent
 | 
			
		||||
     */
 | 
			
		||||
    PrimarySkillType getSecondParent();
 | 
			
		||||
}
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills.interfaces;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This interface is mostly here to maintain backwards compatibility with other mcMMO plugins
 | 
			
		||||
 * Only Core Skills will make use of this
 | 
			
		||||
 * Previously in mcMMO subskills were basically defined by the SecondaryAbility ENUM
 | 
			
		||||
 * In the new system which I'm gradually converting all the existing skills to, skills instead are unique instances of AbstractSubSkill
 | 
			
		||||
 */
 | 
			
		||||
public interface CoreSkill {
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the associated SubSkillType for this subskill
 | 
			
		||||
     * @return the associated SubSkillType ENUM definition
 | 
			
		||||
     */
 | 
			
		||||
    SubSkillType getSubSkillType();
 | 
			
		||||
}
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills.interfaces;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Localized interface represents skills which have localizations
 | 
			
		||||
 * Skills with localizations will use their localization names/descriptions when being printed
 | 
			
		||||
 */
 | 
			
		||||
public interface Localized {
 | 
			
		||||
    /**
 | 
			
		||||
     * The translated name for this locale
 | 
			
		||||
     * @return the translated name for this locale
 | 
			
		||||
     */
 | 
			
		||||
    String getLocaleName();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The translated name for this subskill description
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    String getLocaleDescription();
 | 
			
		||||
}
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills.interfaces;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
 | 
			
		||||
public interface Skill {
 | 
			
		||||
    /**
 | 
			
		||||
     * The primary skill
 | 
			
		||||
     * @return this primary skill
 | 
			
		||||
     */
 | 
			
		||||
    PrimarySkillType getPrimarySkill();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the key name used for this skill in conjunction with config files
 | 
			
		||||
     * @return config file key name
 | 
			
		||||
     */
 | 
			
		||||
    String getPrimaryKeyName();
 | 
			
		||||
}
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills.interfaces;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
 | 
			
		||||
public interface Toolable {
 | 
			
		||||
    /**
 | 
			
		||||
     * Whether or not this Skill requires a tool
 | 
			
		||||
     * Not all skills will require a tool
 | 
			
		||||
     * @return true if tool is required
 | 
			
		||||
     */
 | 
			
		||||
     boolean requiresTool();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The tools associated with this Skill
 | 
			
		||||
     * @return the tools
 | 
			
		||||
     */
 | 
			
		||||
    Collection<ItemStack> getTools();
 | 
			
		||||
}
 | 
			
		||||
@@ -11,6 +11,7 @@ import com.gmail.nossr50.config.treasure.TreasureConfig;
 | 
			
		||||
import com.gmail.nossr50.database.DatabaseManager;
 | 
			
		||||
import com.gmail.nossr50.database.DatabaseManagerFactory;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.SkillRegisterImpl;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.subskills.acrobatics.Roll;
 | 
			
		||||
import com.gmail.nossr50.listeners.*;
 | 
			
		||||
import com.gmail.nossr50.party.PartyManager;
 | 
			
		||||
@@ -48,6 +49,7 @@ import com.gmail.nossr50.util.skills.SmeltingTracker;
 | 
			
		||||
import com.gmail.nossr50.util.upgrade.UpgradeManager;
 | 
			
		||||
import com.gmail.nossr50.worldguard.WorldGuardManager;
 | 
			
		||||
import com.google.common.base.Charsets;
 | 
			
		||||
import com.neetgames.mcmmo.api.SkillRegister;
 | 
			
		||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
 | 
			
		||||
import net.shatteredlands.shatt.backup.ZipLibrary;
 | 
			
		||||
import org.bstats.bukkit.Metrics;
 | 
			
		||||
@@ -86,6 +88,7 @@ public class mcMMO extends JavaPlugin {
 | 
			
		||||
    private static TransientMetadataTools transientMetadataTools;
 | 
			
		||||
    private static ChatManager chatManager;
 | 
			
		||||
    private static CommandManager commandManager; //ACF
 | 
			
		||||
    private static SkillRegister skillRegister;
 | 
			
		||||
 | 
			
		||||
    /* Adventure */
 | 
			
		||||
    private static BukkitAudiences audiences;
 | 
			
		||||
@@ -154,6 +157,9 @@ public class mcMMO extends JavaPlugin {
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onEnable() {
 | 
			
		||||
        try {
 | 
			
		||||
            //Skill Register
 | 
			
		||||
            skillRegister = new SkillRegisterImpl();
 | 
			
		||||
 | 
			
		||||
            //Platform Manager
 | 
			
		||||
            platformManager = new PlatformManager();
 | 
			
		||||
 | 
			
		||||
@@ -182,7 +188,6 @@ public class mcMMO extends JavaPlugin {
 | 
			
		||||
            //Store this value so other plugins can check it
 | 
			
		||||
            isRetroModeEnabled = Config.getInstance().getIsRetroMode();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if(projectKorraEnabled) {
 | 
			
		||||
                getLogger().info("ProjectKorra was detected, this can cause some issues with weakness potions and combat skills for mcMMO");
 | 
			
		||||
            }
 | 
			
		||||
@@ -694,4 +699,6 @@ public class mcMMO extends JavaPlugin {
 | 
			
		||||
    public CommandManager getCommandManager() {
 | 
			
		||||
        return commandManager;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SkillRegister getSkillRegister() { return skillRegister; }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,13 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.util.player.PlayerLevelUtils;
 | 
			
		||||
import com.gmail.nossr50.util.text.StringUtils;
 | 
			
		||||
import com.neetgames.mcmmo.player.MMOPlayerData;
 | 
			
		||||
import com.neetgames.mcmmo.player.OnlineMMOPlayer;
 | 
			
		||||
import org.bukkit.boss.BarColor;
 | 
			
		||||
import org.bukkit.boss.BarStyle;
 | 
			
		||||
import org.bukkit.boss.BossBar;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@@ -18,9 +21,9 @@ import java.util.List;
 | 
			
		||||
 */
 | 
			
		||||
public class ExperienceBarWrapper {
 | 
			
		||||
 | 
			
		||||
    private final PrimarySkillType primarySkillType; //Primary Skill
 | 
			
		||||
    private BossBar bossBar;
 | 
			
		||||
    protected final PersistentPlayerData persistentPlayerData;
 | 
			
		||||
    private final @NotNull PrimarySkillType primarySkillType; //Primary Skill
 | 
			
		||||
    private @NotNull BossBar bossBar;
 | 
			
		||||
    protected final @NotNull MMOPlayerData mmoPlayerData;
 | 
			
		||||
    private int lastLevelUpdated;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
@@ -29,9 +32,8 @@ public class ExperienceBarWrapper {
 | 
			
		||||
    protected String niceSkillName;
 | 
			
		||||
    protected String title;
 | 
			
		||||
 | 
			
		||||
    public ExperienceBarWrapper(PrimarySkillType primarySkillType, PersistentPlayerData persistentPlayerData)
 | 
			
		||||
    {
 | 
			
		||||
        this.persistentPlayerData = persistentPlayerData;
 | 
			
		||||
    public ExperienceBarWrapper(@NotNull PrimarySkillType primarySkillType, @NotNull OnlineMMOPlayer mmoPlayer) {
 | 
			
		||||
        this.mmoPlayerData = mmoPlayer.getMMOPlayerData();
 | 
			
		||||
        this.primarySkillType = primarySkillType;
 | 
			
		||||
        title = "";
 | 
			
		||||
        lastLevelUpdated = 0;
 | 
			
		||||
@@ -43,8 +45,7 @@ public class ExperienceBarWrapper {
 | 
			
		||||
        initBar();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void initBar()
 | 
			
		||||
    {
 | 
			
		||||
    private void initBar() {
 | 
			
		||||
        title = getTitleTemplate();
 | 
			
		||||
        createBossBar();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,34 +3,10 @@ package com.gmail.nossr50.util.player;
 | 
			
		||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
public class PlayerLevelUtils {
 | 
			
		||||
//    HashMap<PrimarySkillType, Integer> earlyGameBoostCutoffs;
 | 
			
		||||
//
 | 
			
		||||
//    public PlayerLevelUtils()
 | 
			
		||||
//    {
 | 
			
		||||
//        earlyGameBoostCutoffs = new HashMap<>();
 | 
			
		||||
//        calculateEarlyGameBoostCutoffs();
 | 
			
		||||
//    }
 | 
			
		||||
//    private void calculateEarlyGameBoostCutoffs()
 | 
			
		||||
//    {
 | 
			
		||||
//        for(PrimarySkillType primarySkillType : PrimarySkillType.values())
 | 
			
		||||
//        {
 | 
			
		||||
//            int levelCap = Config.getInstance().getLevelCap(primarySkillType);
 | 
			
		||||
//            int cap;
 | 
			
		||||
//
 | 
			
		||||
//            if(levelCap == Integer.MAX_VALUE || levelCap <= 0)
 | 
			
		||||
//            {
 | 
			
		||||
//                cap = Config.getInstance().getIsRetroMode() ? 50 : 5;
 | 
			
		||||
//            } else {
 | 
			
		||||
//                cap = (int) (levelCap * ExperienceConfig.getInstance().getEarlyGameBoostMultiplier());
 | 
			
		||||
//            }
 | 
			
		||||
//
 | 
			
		||||
//            earlyGameBoostCutoffs.put(primarySkillType, cap);
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    public int getEarlyGameCutoff(PrimarySkillType primarySkillType)
 | 
			
		||||
    public int getEarlyGameCutoff(@NotNull PrimarySkillType primarySkillType)
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
@@ -42,7 +18,7 @@ public class PlayerLevelUtils {
 | 
			
		||||
     * @param primarySkillType target skill
 | 
			
		||||
     * @return if the player would qualify for the XP boost if its enabled
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean qualifiesForEarlyGameBoost(McMMOPlayer mmoPlayer, PrimarySkillType primarySkillType) {
 | 
			
		||||
    public static boolean qualifiesForEarlyGameBoost(@NotNull McMMOPlayer mmoPlayer, @NotNull PrimarySkillType primarySkillType) {
 | 
			
		||||
        return mmoPlayer.getSkillLevel(primarySkillType) < mcMMO.getPlayerLevelUtils().getEarlyGameCutoff(primarySkillType);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user