mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 02:53:43 +01:00 
			
		
		
		
	Put McMMOPlayer to use where it made sense
It's basically a wrapper for anything related to players, as a consequence Users.getProfile() is now depreciated. Also removed SkillTools.xpProcessing() because of some redundancy with McMMOPlayer.addXp(). + some cleanup for consistency sake.
This commit is contained in:
		@@ -34,7 +34,7 @@ public final class ExperienceAPI {
 | 
			
		||||
     * @param XP The amount of XP to add
 | 
			
		||||
     */
 | 
			
		||||
    public static void addRawXP(Player player, SkillType skillType, int XP) {
 | 
			
		||||
        Users.getPlayer(player).addXPOverride(skillType, XP);
 | 
			
		||||
        Users.getPlayer(player).addXpOverride(skillType, XP);
 | 
			
		||||
        checkXP(player, skillType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -48,7 +48,7 @@ public final class ExperienceAPI {
 | 
			
		||||
     * @param XP The amount of XP to add
 | 
			
		||||
     */
 | 
			
		||||
    public static void addMultipliedXP(Player player, SkillType skillType, int XP) {
 | 
			
		||||
        Users.getPlayer(player).addXPOverrideBonus(skillType, XP);
 | 
			
		||||
        Users.getPlayer(player).addXpOverrideBonus(skillType, XP);
 | 
			
		||||
        checkXP(player, skillType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -62,7 +62,7 @@ public final class ExperienceAPI {
 | 
			
		||||
     * @param XP The amount of XP to add
 | 
			
		||||
     */
 | 
			
		||||
    public static void addXP(Player player, SkillType skillType, int XP) {
 | 
			
		||||
        Users.getPlayer(player).addXP(skillType, XP);
 | 
			
		||||
        Users.getPlayer(player).addXp(skillType, XP);
 | 
			
		||||
        checkXP(player, skillType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -158,7 +158,7 @@ public final class ExperienceAPI {
 | 
			
		||||
     * @param newValue The value to set the XP to
 | 
			
		||||
     */
 | 
			
		||||
    public static void setXP(Player player, SkillType skillType, int newValue) {
 | 
			
		||||
        Users.getProfile(player).setSkillXPLevel(skillType, newValue);
 | 
			
		||||
        Users.getProfile(player).setSkillXpLevel(skillType, newValue);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -171,6 +171,6 @@ public final class ExperienceAPI {
 | 
			
		||||
     * @param xp The amount of XP to remove
 | 
			
		||||
     */
 | 
			
		||||
    public static void removeXP(Player player, SkillType skillType, int xp) {
 | 
			
		||||
        Users.getProfile(player).removeXP(skillType, xp);
 | 
			
		||||
        Users.getProfile(player).removeXp(skillType, xp);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ public class AddxpCommand implements CommandExecutor {
 | 
			
		||||
 | 
			
		||||
                    PlayerProfile profile = Users.getProfile(modifiedPlayer);
 | 
			
		||||
                    McMMOPlayer mcMMOPlayer = Users.getPlayer(modifiedPlayer);
 | 
			
		||||
                    mcMMOPlayer.addXPOverride(skill, xp);
 | 
			
		||||
                    mcMMOPlayer.addXpOverride(skill, xp);
 | 
			
		||||
 | 
			
		||||
                    if (skill.equals(SkillType.ALL)) {
 | 
			
		||||
                        modifiedPlayer.sendMessage(LocaleLoader.getString("Commands.addxp.AwardAll", new Object[] {xp}));
 | 
			
		||||
@@ -95,7 +95,7 @@ public class AddxpCommand implements CommandExecutor {
 | 
			
		||||
                xp = Integer.valueOf(args[2]);
 | 
			
		||||
                skill = SkillTools.getSkillType(args[1]);
 | 
			
		||||
 | 
			
		||||
                mcMMOPlayer.addXPOverride(skill, xp);
 | 
			
		||||
                mcMMOPlayer.addXpOverride(skill, xp);
 | 
			
		||||
 | 
			
		||||
                if (skill.equals(SkillType.ALL)) {
 | 
			
		||||
                    sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", new Object[] {playerName}));
 | 
			
		||||
 
 | 
			
		||||
@@ -11,14 +11,16 @@ import com.gmail.nossr50.mods.ModChecks;
 | 
			
		||||
import com.gmail.nossr50.mods.datatypes.CustomTool;
 | 
			
		||||
import com.gmail.nossr50.party.Party;
 | 
			
		||||
import com.gmail.nossr50.party.PartyManager;
 | 
			
		||||
import com.gmail.nossr50.party.ShareHandler;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.spout.huds.SpoutHud;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
 | 
			
		||||
public class McMMOPlayer {
 | 
			
		||||
    private Player player;
 | 
			
		||||
    private PlayerProfile profile;
 | 
			
		||||
 | 
			
		||||
    private Party party;
 | 
			
		||||
    private Party invite;
 | 
			
		||||
 | 
			
		||||
@@ -38,7 +40,10 @@ public class McMMOPlayer {
 | 
			
		||||
        int powerLevel = 0;
 | 
			
		||||
 | 
			
		||||
        for (SkillType type : SkillType.values()) {
 | 
			
		||||
            if (type.isChildSkill()) continue;
 | 
			
		||||
            if (type.isChildSkill()) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (type.getPermissions(player)) {
 | 
			
		||||
                powerLevel += profile.getSkillLevel(type);
 | 
			
		||||
            }
 | 
			
		||||
@@ -48,12 +53,12 @@ public class McMMOPlayer {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds XP to the player, doesn't calculate for XP Rate
 | 
			
		||||
     * Adds Xp to the player, doesn't calculate for Xp Rate
 | 
			
		||||
     *
 | 
			
		||||
     * @param skillType The skill to add XP to
 | 
			
		||||
     * @param xp The amount of XP to add
 | 
			
		||||
     * @param skillType The skill to add Xp to
 | 
			
		||||
     * @param xp The amount of Xp to add
 | 
			
		||||
     */
 | 
			
		||||
    public void addXPOverride(SkillType skillType, int xp) {
 | 
			
		||||
    public void addXpOverride(SkillType skillType, int xp) {
 | 
			
		||||
        if (skillType.equals(SkillType.ALL)) {
 | 
			
		||||
            for (SkillType type : SkillType.values()) {
 | 
			
		||||
                if (type.equals(SkillType.ALL) || type.isChildSkill()) {
 | 
			
		||||
@@ -61,12 +66,12 @@ public class McMMOPlayer {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerXpGainEvent(player, type, xp));
 | 
			
		||||
                profile.setSkillXPLevel(type, profile.getSkillXpLevel(type) + xp);
 | 
			
		||||
                profile.setSkillXpLevel(type, profile.getSkillXpLevel(type) + xp);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerXpGainEvent(player, skillType, xp));
 | 
			
		||||
            profile.setSkillXPLevel(skillType, profile.getSkillXpLevel(skillType) + xp);
 | 
			
		||||
            profile.setSkillXpLevel(skillType, profile.getSkillXpLevel(skillType) + xp);
 | 
			
		||||
 | 
			
		||||
            SpoutHud spoutHud = profile.getSpoutHud();
 | 
			
		||||
 | 
			
		||||
@@ -77,33 +82,36 @@ public class McMMOPlayer {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds XP to the player, this ignores skill modifiers.
 | 
			
		||||
     * Adds Xp to the player, this ignores skill modifiers.
 | 
			
		||||
     *
 | 
			
		||||
     * @param skillType The skill to add XP to
 | 
			
		||||
     * @param xp The amount of XP to add
 | 
			
		||||
     * @param skillType The skill to add Xp to
 | 
			
		||||
     * @param xp The amount of Xp to add
 | 
			
		||||
     */
 | 
			
		||||
    public void addXPOverrideBonus(SkillType skillType, int xp) {
 | 
			
		||||
        int modifiedXp = (int)Math.floor(xp * Config.getInstance().getExperienceGainsGlobalMultiplier());
 | 
			
		||||
        addXPOverride(skillType, modifiedXp);
 | 
			
		||||
    public void addXpOverrideBonus(SkillType skillType, int xp) {
 | 
			
		||||
        int modifiedXp = (int) Math.floor(xp * Config.getInstance().getExperienceGainsGlobalMultiplier());
 | 
			
		||||
        addXpOverride(skillType, modifiedXp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds XP to the player, this is affected by skill modifiers and XP Rate and Permissions
 | 
			
		||||
     * Adds experience to the player, this is affected by skill modifiers, rate and permissions
 | 
			
		||||
     *
 | 
			
		||||
     * @param skillType The skill to add XP to
 | 
			
		||||
     * @param xp The amount of XP to add
 | 
			
		||||
     * @param skillType The skill to add Xp to
 | 
			
		||||
     * @param xp The amount of Xp to add
 | 
			
		||||
     */
 | 
			
		||||
    public void addXP(SkillType skillType, int xp) {
 | 
			
		||||
        if (player == null)
 | 
			
		||||
            return;
 | 
			
		||||
        else if (player.getGameMode() == null)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (player.getGameMode().equals(GameMode.CREATIVE)) {
 | 
			
		||||
    public void addXp(SkillType skillType, int xp) {
 | 
			
		||||
        if ((skillType.getMaxLevel() < profile.getSkillLevel(skillType) + 1) || (Misc.getPowerLevelCap() < getPowerLevel() + 1)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        xp = (int)Math.floor((xp / skillType.getXpModifier()) * Config.getInstance().getExperienceGainsGlobalMultiplier());
 | 
			
		||||
        if (player.getGameMode() == GameMode.CREATIVE) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (party != null && !ShareHandler.isRunning()) {
 | 
			
		||||
            ShareHandler.handleEqualXpShare(xp, player, party, skillType);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        xp = (int) (xp / skillType.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier());
 | 
			
		||||
 | 
			
		||||
        if (Config.getInstance().getToolModsEnabled()) {
 | 
			
		||||
            ItemStack item = player.getItemInHand();
 | 
			
		||||
@@ -114,30 +122,33 @@ public class McMMOPlayer {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // TODO: find a better way to do this, if possible
 | 
			
		||||
        if (Permissions.xpQuadruple(player)) {
 | 
			
		||||
            xp = xp * 4;
 | 
			
		||||
            xp *= 4;
 | 
			
		||||
        }
 | 
			
		||||
        else if (Permissions.xpTriple(player)) {
 | 
			
		||||
            xp = xp * 3;
 | 
			
		||||
            xp *= 3;
 | 
			
		||||
        }
 | 
			
		||||
        else if (Permissions.xpDoubleAndOneHalf(player)) {
 | 
			
		||||
            xp = (int) (xp * 2.5);
 | 
			
		||||
            xp *= 2.5;
 | 
			
		||||
        }
 | 
			
		||||
        else if (Permissions.xpDouble(player)) {
 | 
			
		||||
            xp = xp * 2;
 | 
			
		||||
            xp *= 2;
 | 
			
		||||
        }
 | 
			
		||||
        else if (Permissions.xpOneAndOneHalf(player)) {
 | 
			
		||||
            xp = (int) (xp * 1.5);
 | 
			
		||||
            xp *= 1.5;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerXpGainEvent(player, skillType, xp));
 | 
			
		||||
        profile.setSkillXPLevel(skillType, profile.getSkillXpLevel(skillType) + xp);
 | 
			
		||||
        profile.setSkillXpLevel(skillType, profile.getSkillXpLevel(skillType) + xp);
 | 
			
		||||
 | 
			
		||||
        SpoutHud spoutHud = profile.getSpoutHud();
 | 
			
		||||
 | 
			
		||||
        if (spoutHud != null) {
 | 
			
		||||
            spoutHud.setLastGained(skillType);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpCheckSkill(skillType, player, profile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Players & Profiles
 | 
			
		||||
 
 | 
			
		||||
@@ -26,20 +26,19 @@ public class PlayerProfile {
 | 
			
		||||
 | 
			
		||||
    private String playerName;
 | 
			
		||||
 | 
			
		||||
    /* HUD */
 | 
			
		||||
    // HUD
 | 
			
		||||
    private SpoutHud spoutHud;
 | 
			
		||||
    private HudType hudType;
 | 
			
		||||
 | 
			
		||||
    /* Party Stuff */
 | 
			
		||||
    // Party Stuff
 | 
			
		||||
    private Party party;
 | 
			
		||||
    private Party invite;
 | 
			
		||||
    private Player ptpRequest;
 | 
			
		||||
    private boolean ptpEnabled = true;
 | 
			
		||||
    private boolean ptpConfirmRequired = Config.getInstance().getPTPCommandConfirmRequired();
 | 
			
		||||
 | 
			
		||||
    /* Toggles */
 | 
			
		||||
    // Toggles
 | 
			
		||||
    private boolean loaded;
 | 
			
		||||
 | 
			
		||||
    private boolean placedAnvil;
 | 
			
		||||
    private boolean placedSalvageAnvil;
 | 
			
		||||
    private boolean partyChatMode, adminChatMode;
 | 
			
		||||
@@ -51,17 +50,17 @@ public class PlayerProfile {
 | 
			
		||||
    pickaxePreparationMode, axePreparationMode;
 | 
			
		||||
    private boolean abilityUse = true;
 | 
			
		||||
 | 
			
		||||
    /* Timestamps */
 | 
			
		||||
    // Timestamps
 | 
			
		||||
    private long recentlyHurt;
 | 
			
		||||
    private int respawnATS;
 | 
			
		||||
    private long lastSave = 0L;
 | 
			
		||||
    private long ptpTimeout;
 | 
			
		||||
 | 
			
		||||
    /* mySQL STUFF */
 | 
			
		||||
    // mySQL STUFF
 | 
			
		||||
    private int userId;
 | 
			
		||||
 | 
			
		||||
    private HashMap<SkillType, Integer> skills = new HashMap<SkillType, Integer>(); //Skills and Levels
 | 
			
		||||
    HashMap<SkillType, Integer> skillsXp = new HashMap<SkillType, Integer>(); //Skills and XP
 | 
			
		||||
    HashMap<SkillType, Integer> skillsXp = new HashMap<SkillType, Integer>(); //Skills and Xp
 | 
			
		||||
    HashMap<AbilityType, Integer> skillsDATS = new HashMap<AbilityType, Integer>();
 | 
			
		||||
    HashMap<ToolType, Integer> toolATS = new HashMap<ToolType, Integer>();
 | 
			
		||||
 | 
			
		||||
@@ -209,13 +208,13 @@ public class PlayerProfile {
 | 
			
		||||
 | 
			
		||||
    public boolean load() {
 | 
			
		||||
        try {
 | 
			
		||||
            //Open the user file
 | 
			
		||||
            // Open the user file
 | 
			
		||||
            FileReader file = new FileReader(location);
 | 
			
		||||
            BufferedReader in = new BufferedReader(file);
 | 
			
		||||
            String line;
 | 
			
		||||
 | 
			
		||||
            while ((line = in.readLine()) != null) {
 | 
			
		||||
                //Find if the line contains the player we want.
 | 
			
		||||
                // Find if the line contains the player we want.
 | 
			
		||||
                String[] character = line.split(":");
 | 
			
		||||
 | 
			
		||||
                if (!character[0].equals(playerName)) {
 | 
			
		||||
@@ -316,7 +315,7 @@ public class PlayerProfile {
 | 
			
		||||
        if (timestamp < (lastSave + ((long) Config.getInstance().getSaveInterval() * 60000)) && !override)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        // if we are using mysql save to database
 | 
			
		||||
        // If we are using mysql save to database
 | 
			
		||||
        if (Config.getInstance().getUseMySQL()) {
 | 
			
		||||
            String tablePrefix = Config.getInstance().getMySQLTablePrefix();
 | 
			
		||||
 | 
			
		||||
@@ -362,23 +361,23 @@ public class PlayerProfile {
 | 
			
		||||
                    + " WHERE user_id = " + userId);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            // otherwise save to flatfile
 | 
			
		||||
            // Otherwise save to flatfile
 | 
			
		||||
            try {
 | 
			
		||||
                //Open the file
 | 
			
		||||
                // Open the file
 | 
			
		||||
                FileReader file = new FileReader(location);
 | 
			
		||||
                BufferedReader in = new BufferedReader(file);
 | 
			
		||||
                StringBuilder writer = new StringBuilder();
 | 
			
		||||
                String line;
 | 
			
		||||
 | 
			
		||||
                //While not at the end of the file
 | 
			
		||||
                // While not at the end of the file
 | 
			
		||||
                while ((line = in.readLine()) != null) {
 | 
			
		||||
                    //Read the line in and copy it to the output it's not the player
 | 
			
		||||
                    //we want to edit
 | 
			
		||||
                    // Read the line in and copy it to the output it's not the player
 | 
			
		||||
                    // we want to edit
 | 
			
		||||
                    if (!line.split(":")[0].equals(playerName)) {
 | 
			
		||||
                        writer.append(line).append("\r\n");
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        //Otherwise write the new player information
 | 
			
		||||
                        // Otherwise write the new player information
 | 
			
		||||
                        writer.append(playerName).append(":");
 | 
			
		||||
                        writer.append(skills.get(SkillType.MINING)).append(":");
 | 
			
		||||
                        writer.append(":");
 | 
			
		||||
@@ -405,8 +404,8 @@ public class PlayerProfile {
 | 
			
		||||
                        writer.append(":");
 | 
			
		||||
                        writer.append(skills.get(SkillType.TAMING)).append(":");
 | 
			
		||||
                        writer.append(skillsXp.get(SkillType.TAMING)).append(":");
 | 
			
		||||
                        //Need to store the DATS of abilities nao
 | 
			
		||||
                        //Berserk, Gigadrillbreaker, Tree Feller, Green Terra, Serrated Strikes, Skull Splitter, Super Breaker
 | 
			
		||||
                        // Need to store the DATS of abilities nao
 | 
			
		||||
                        // Berserk, Gigadrillbreaker, Tree Feller, Green Terra, Serrated Strikes, Skull Splitter, Super Breaker
 | 
			
		||||
                        writer.append(String.valueOf(skillsDATS.get(AbilityType.BERSERK))).append(":");
 | 
			
		||||
                        writer.append(String.valueOf(skillsDATS.get(AbilityType.GIGA_DRILL_BREAKER))).append(":");
 | 
			
		||||
                        writer.append(String.valueOf(skillsDATS.get(AbilityType.TREE_FELLER))).append(":");
 | 
			
		||||
@@ -423,7 +422,7 @@ public class PlayerProfile {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                in.close();
 | 
			
		||||
                //Write the new file
 | 
			
		||||
                // Write the new file
 | 
			
		||||
                FileWriter out = new FileWriter(location);
 | 
			
		||||
                out.write(writer.toString());
 | 
			
		||||
                out.close();
 | 
			
		||||
@@ -437,50 +436,50 @@ public class PlayerProfile {
 | 
			
		||||
 | 
			
		||||
    public void addPlayer() {
 | 
			
		||||
        try {
 | 
			
		||||
            //Open the file to write the player
 | 
			
		||||
            // Open the file to write the player
 | 
			
		||||
            FileWriter file = new FileWriter(location, true);
 | 
			
		||||
            BufferedWriter out = new BufferedWriter(file);
 | 
			
		||||
 | 
			
		||||
            //Add the player to the end
 | 
			
		||||
            // Add the player to the end
 | 
			
		||||
            out.append(playerName).append(":");
 | 
			
		||||
            out.append("0:"); //mining
 | 
			
		||||
            out.append("0:"); // mining
 | 
			
		||||
            out.append(":");
 | 
			
		||||
            out.append(":");
 | 
			
		||||
            out.append("0:"); //XP
 | 
			
		||||
            out.append("0:"); //woodcutting
 | 
			
		||||
            out.append("0:"); //woodCuttingXP
 | 
			
		||||
            out.append("0:"); //repair
 | 
			
		||||
            out.append("0:"); //unarmed
 | 
			
		||||
            out.append("0:"); //herbalism
 | 
			
		||||
            out.append("0:"); //excavation
 | 
			
		||||
            out.append("0:"); //archery
 | 
			
		||||
            out.append("0:"); //swords
 | 
			
		||||
            out.append("0:"); //axes
 | 
			
		||||
            out.append("0:"); //acrobatics
 | 
			
		||||
            out.append("0:"); //repairXP
 | 
			
		||||
            out.append("0:"); //unarmedXP
 | 
			
		||||
            out.append("0:"); //herbalismXP
 | 
			
		||||
            out.append("0:"); //excavationXP
 | 
			
		||||
            out.append("0:"); //archeryXP
 | 
			
		||||
            out.append("0:"); //swordsXP
 | 
			
		||||
            out.append("0:"); //axesXP
 | 
			
		||||
            out.append("0:"); //acrobaticsXP
 | 
			
		||||
            out.append("0:"); // Xp
 | 
			
		||||
            out.append("0:"); // woodcutting
 | 
			
		||||
            out.append("0:"); // woodCuttingXp
 | 
			
		||||
            out.append("0:"); // repair
 | 
			
		||||
            out.append("0:"); // unarmed
 | 
			
		||||
            out.append("0:"); // herbalism
 | 
			
		||||
            out.append("0:"); // excavation
 | 
			
		||||
            out.append("0:"); // archery
 | 
			
		||||
            out.append("0:"); // swords
 | 
			
		||||
            out.append("0:"); // axes
 | 
			
		||||
            out.append("0:"); // acrobatics
 | 
			
		||||
            out.append("0:"); // repairXp
 | 
			
		||||
            out.append("0:"); // unarmedXp
 | 
			
		||||
            out.append("0:"); // herbalismXp
 | 
			
		||||
            out.append("0:"); // excavationXp
 | 
			
		||||
            out.append("0:"); // archeryXp
 | 
			
		||||
            out.append("0:"); // swordsXp
 | 
			
		||||
            out.append("0:"); // axesXp
 | 
			
		||||
            out.append("0:"); // acrobaticsXp
 | 
			
		||||
            out.append(":");
 | 
			
		||||
            out.append("0:"); //taming
 | 
			
		||||
            out.append("0:"); //tamingXP
 | 
			
		||||
            out.append("0:"); //DATS
 | 
			
		||||
            out.append("0:"); //DATS
 | 
			
		||||
            out.append("0:"); //DATS
 | 
			
		||||
            out.append("0:"); //DATS
 | 
			
		||||
            out.append("0:"); //DATS
 | 
			
		||||
            out.append("0:"); //DATS
 | 
			
		||||
            out.append("0:"); //DATS
 | 
			
		||||
            out.append(hudType.toString()).append(":");//HUD
 | 
			
		||||
            out.append("0:"); //Fishing
 | 
			
		||||
            out.append("0:"); //FishingXP
 | 
			
		||||
            out.append("0:"); //Blast Mining
 | 
			
		||||
            out.append("0:"); // taming
 | 
			
		||||
            out.append("0:"); // tamingXp
 | 
			
		||||
            out.append("0:"); // DATS
 | 
			
		||||
            out.append("0:"); // DATS
 | 
			
		||||
            out.append("0:"); // DATS
 | 
			
		||||
            out.append("0:"); // DATS
 | 
			
		||||
            out.append("0:"); // DATS
 | 
			
		||||
            out.append("0:"); // DATS
 | 
			
		||||
            out.append("0:"); // DATS
 | 
			
		||||
            out.append(hudType.toString()).append(":"); // HUD
 | 
			
		||||
            out.append("0:"); // Fishing
 | 
			
		||||
            out.append("0:"); // FishingXp
 | 
			
		||||
            out.append("0:"); // Blast Mining
 | 
			
		||||
 | 
			
		||||
            //Add more in the same format as the line above
 | 
			
		||||
            // Add more in the same format as the line above
 | 
			
		||||
 | 
			
		||||
            out.newLine();
 | 
			
		||||
            out.close();
 | 
			
		||||
@@ -918,7 +917,7 @@ public class PlayerProfile {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * XP Functions
 | 
			
		||||
     * Xp Functions
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    public int getSkillLevel(SkillType skillType) {
 | 
			
		||||
@@ -943,7 +942,7 @@ public class PlayerProfile {
 | 
			
		||||
        return skillsXp.get(skillType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSkillXPLevel(SkillType skillType, int newValue) {
 | 
			
		||||
    public void setSkillXpLevel(SkillType skillType, int newValue) {
 | 
			
		||||
        skillsXp.put(skillType, newValue);
 | 
			
		||||
        save(false);
 | 
			
		||||
    }
 | 
			
		||||
@@ -954,12 +953,12 @@ public class PlayerProfile {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //    /**
 | 
			
		||||
    //     * Adds XP to the player, doesn't calculate for XP Rate
 | 
			
		||||
    //     * Adds Xp to the player, doesn't calculate for Xp Rate
 | 
			
		||||
    //     *
 | 
			
		||||
    //     * @param skillType The skill to add XP to
 | 
			
		||||
    //     * @param newValue The amount of XP to add
 | 
			
		||||
    //     * @param skillType The skill to add Xp to
 | 
			
		||||
    //     * @param newValue The amount of Xp to add
 | 
			
		||||
    //     */
 | 
			
		||||
    //    public void addXPOverride(SkillType skillType, int newValue) {
 | 
			
		||||
    //    public void addXpOverride(SkillType skillType, int newValue) {
 | 
			
		||||
    //        if (skillType.equals(SkillType.ALL)) {
 | 
			
		||||
    //            for (SkillType x : SkillType.values()) {
 | 
			
		||||
    //                if (x.equals(SkillType.ALL)) {
 | 
			
		||||
@@ -978,23 +977,23 @@ public class PlayerProfile {
 | 
			
		||||
    //    }
 | 
			
		||||
 | 
			
		||||
    //    /**
 | 
			
		||||
    //     * Adds XP to the player, this ignores skill modifiers.
 | 
			
		||||
    //     * Adds Xp to the player, this ignores skill modifiers.
 | 
			
		||||
    //     *
 | 
			
		||||
    //     * @param skillType The skill to add XP to
 | 
			
		||||
    //     * @param newValue The amount of XP to add
 | 
			
		||||
    //     * @param skillType The skill to add Xp to
 | 
			
		||||
    //     * @param newValue The amount of Xp to add
 | 
			
		||||
    //     */
 | 
			
		||||
    //    public void addXPOverrideBonus(SkillType skillType, int newValue) {
 | 
			
		||||
    //    public void addXpOverrideBonus(SkillType skillType, int newValue) {
 | 
			
		||||
    //        int xp = newValue * Config.getInstance().xpGainMultiplier;
 | 
			
		||||
    //        addXPOverride(skillType, xp);
 | 
			
		||||
    //        addXpOverride(skillType, xp);
 | 
			
		||||
    //    }
 | 
			
		||||
 | 
			
		||||
    //    /**
 | 
			
		||||
    //     * Adds XP to the player, this is affected by skill modifiers and XP Rate and Permissions
 | 
			
		||||
    //     * Adds Xp to the player, this is affected by skill modifiers and Xp Rate and Permissions
 | 
			
		||||
    //     *
 | 
			
		||||
    //     * @param skillType The skill to add XP to
 | 
			
		||||
    //     * @param newvalue The amount of XP to add
 | 
			
		||||
    //     * @param skillType The skill to add Xp to
 | 
			
		||||
    //     * @param newvalue The amount of Xp to add
 | 
			
		||||
    //     */
 | 
			
		||||
    //    public void addXP(SkillType skillType, int newValue) {
 | 
			
		||||
    //    public void addXp(SkillType skillType, int newValue) {
 | 
			
		||||
    //        if (player.getGameMode().equals(GameMode.CREATIVE)) {
 | 
			
		||||
    //            return;
 | 
			
		||||
    //        }
 | 
			
		||||
@@ -1048,12 +1047,12 @@ public class PlayerProfile {
 | 
			
		||||
    //    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Remove XP from a skill.
 | 
			
		||||
     * Remove Xp from a skill.
 | 
			
		||||
     *
 | 
			
		||||
     * @param skillType Type of skill to modify
 | 
			
		||||
     * @param xp Amount of xp to remove
 | 
			
		||||
     */
 | 
			
		||||
    public void removeXP(SkillType skillType, int xp) {
 | 
			
		||||
    public void removeXp(SkillType skillType, int xp) {
 | 
			
		||||
        if (skillType.isChildSkill()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -1130,10 +1129,10 @@ public class PlayerProfile {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the amount of XP remaining before the next level.
 | 
			
		||||
     * Get the amount of Xp remaining before the next level.
 | 
			
		||||
     *
 | 
			
		||||
     * @param skillType Type of skill to check
 | 
			
		||||
     * @return the XP remaining until next level
 | 
			
		||||
     * @return the Xp remaining until next level
 | 
			
		||||
     */
 | 
			
		||||
    public int getXpToLevel(SkillType skillType) {
 | 
			
		||||
        return 1020 + (skills.get(skillType) *  Config.getInstance().getFormulaMultiplierCurve());
 | 
			
		||||
@@ -1157,7 +1156,7 @@ public class PlayerProfile {
 | 
			
		||||
    //    }
 | 
			
		||||
 | 
			
		||||
    //    /**
 | 
			
		||||
    //     * Calculate the party XP modifier.
 | 
			
		||||
    //     * Calculate the party Xp modifier.
 | 
			
		||||
    //     *
 | 
			
		||||
    //     * @param skillType Type of skill to check
 | 
			
		||||
    //     * @return the party bonus multiplier
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ import org.bukkit.metadata.FixedMetadataValue;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakeBlockDamageEvent;
 | 
			
		||||
@@ -137,9 +138,10 @@ public class BlockListener implements Listener {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Player player = event.getPlayer();
 | 
			
		||||
        PlayerProfile profile = Users.getProfile(player);
 | 
			
		||||
        McMMOPlayer mcMMOPlayer = Users.getPlayer(player);
 | 
			
		||||
        PlayerProfile profile = mcMMOPlayer.getProfile();
 | 
			
		||||
 | 
			
		||||
        if (Misc.isNPCPlayer(player, profile)) {
 | 
			
		||||
        if (Misc.isNPCPlayer(player, mcMMOPlayer.getProfile())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -158,10 +160,10 @@ public class BlockListener implements Listener {
 | 
			
		||||
             * Instead, we check it inside the drops handler.
 | 
			
		||||
             */
 | 
			
		||||
            if (Permissions.herbalism(player)) {
 | 
			
		||||
                Herbalism.herbalismProcCheck(block, player, event, plugin); //Double drops
 | 
			
		||||
                Herbalism.herbalismProcCheck(block, mcMMOPlayer, event, plugin); //Double drops
 | 
			
		||||
 | 
			
		||||
                if (profile.getAbilityMode(AbilityType.GREEN_TERRA)) {
 | 
			
		||||
                    Herbalism.herbalismProcCheck(block, player, event, plugin); //Triple drops
 | 
			
		||||
                    Herbalism.herbalismProcCheck(block, mcMMOPlayer, event, plugin); //Triple drops
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -170,12 +172,12 @@ public class BlockListener implements Listener {
 | 
			
		||||
        else if (BlockChecks.canBeSuperBroken(block) && Permissions.mining(player) && !mcMMO.placeStore.isTrue(block)) {
 | 
			
		||||
            if (Mining.requiresTool) {
 | 
			
		||||
                if (ItemChecks.isPickaxe(heldItem)) {
 | 
			
		||||
                    MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
                    MiningManager miningManager = new MiningManager(mcMMOPlayer);
 | 
			
		||||
                    miningManager.miningBlockCheck(block);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
                MiningManager miningManager = new MiningManager(mcMMOPlayer);
 | 
			
		||||
                miningManager.miningBlockCheck(block);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -183,16 +185,16 @@ public class BlockListener implements Listener {
 | 
			
		||||
        /* WOOD CUTTING */
 | 
			
		||||
        else if (BlockChecks.isLog(block) && Permissions.woodcutting(player) && !mcMMO.placeStore.isTrue(block)) {
 | 
			
		||||
            if (profile.getAbilityMode(AbilityType.TREE_FELLER) && Permissions.treeFeller(player) && ItemChecks.isAxe(heldItem)) {
 | 
			
		||||
                Woodcutting.beginTreeFeller(event);
 | 
			
		||||
                Woodcutting.beginTreeFeller(mcMMOPlayer, block);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                if (Config.getInstance().getWoodcuttingRequiresTool()) {
 | 
			
		||||
                    if (ItemChecks.isAxe(heldItem)) {
 | 
			
		||||
                        Woodcutting.beginWoodcutting(player, block);
 | 
			
		||||
                        Woodcutting.beginWoodcutting(mcMMOPlayer, block);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    Woodcutting.beginWoodcutting(player, block);
 | 
			
		||||
                    Woodcutting.beginWoodcutting(mcMMOPlayer, block);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -201,11 +203,11 @@ public class BlockListener implements Listener {
 | 
			
		||||
        else if (BlockChecks.canBeGigaDrillBroken(block) && Permissions.excavation(player) && !mcMMO.placeStore.isTrue(block)) {
 | 
			
		||||
            if (Excavation.requiresTool) {
 | 
			
		||||
                if (ItemChecks.isShovel(heldItem)) {
 | 
			
		||||
                    Excavation.excavationProcCheck(block, player);
 | 
			
		||||
                    Excavation.excavationProcCheck(block, mcMMOPlayer);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                Excavation.excavationProcCheck(block, player);
 | 
			
		||||
                Excavation.excavationProcCheck(block, mcMMOPlayer);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -239,7 +241,7 @@ public class BlockListener implements Listener {
 | 
			
		||||
            Herbalism.hylianLuck(block, player, event);
 | 
			
		||||
        }
 | 
			
		||||
        else if (BlockChecks.canBeFluxMined(block) && ItemChecks.isPickaxe(heldItem) && !heldItem.containsEnchantment(Enchantment.SILK_TOUCH) && Permissions.fluxMining(player) && !mcMMO.placeStore.isTrue(block)) {
 | 
			
		||||
            SmeltingManager smeltingManager = new SmeltingManager(player);
 | 
			
		||||
            SmeltingManager smeltingManager = new SmeltingManager(Users.getPlayer(player));
 | 
			
		||||
            smeltingManager.fluxMining(event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -311,7 +313,8 @@ public class BlockListener implements Listener {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Player player = event.getPlayer();
 | 
			
		||||
        PlayerProfile profile = Users.getProfile(player);
 | 
			
		||||
        McMMOPlayer mcMMOPlayer = Users.getPlayer(player);
 | 
			
		||||
        PlayerProfile profile = mcMMOPlayer.getProfile();
 | 
			
		||||
 | 
			
		||||
        if (Misc.isNPCPlayer(player, profile)) {
 | 
			
		||||
            return;
 | 
			
		||||
@@ -332,12 +335,12 @@ public class BlockListener implements Listener {
 | 
			
		||||
            if (Excavation.requiresTool) {
 | 
			
		||||
                if (ItemChecks.isShovel(heldItem)) {
 | 
			
		||||
                    event.setInstaBreak(true);
 | 
			
		||||
                    Excavation.gigaDrillBreaker(player, block);
 | 
			
		||||
                    Excavation.gigaDrillBreaker(mcMMOPlayer, block);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                event.setInstaBreak(true);
 | 
			
		||||
                Excavation.gigaDrillBreaker(player, block);
 | 
			
		||||
                Excavation.gigaDrillBreaker(mcMMOPlayer, block);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else if (profile.getAbilityMode(AbilityType.BERSERK) && SkillTools.triggerCheck(player, block, AbilityType.BERSERK)) {
 | 
			
		||||
@@ -351,7 +354,7 @@ public class BlockListener implements Listener {
 | 
			
		||||
            player.playSound(block.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.POP_PITCH);
 | 
			
		||||
        }
 | 
			
		||||
        else if (profile.getAbilityMode(AbilityType.SUPER_BREAKER) && SkillTools.triggerCheck(player, block, AbilityType.SUPER_BREAKER)) {
 | 
			
		||||
            MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
            MiningManager miningManager = new MiningManager(mcMMOPlayer);
 | 
			
		||||
 | 
			
		||||
            if (Mining.requiresTool) {
 | 
			
		||||
                if (ItemChecks.isPickaxe(heldItem)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ import org.bukkit.event.entity.ExplosionPrimeEvent;
 | 
			
		||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
 | 
			
		||||
@@ -153,7 +154,8 @@ public class EntityListener implements Listener {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            PlayerProfile profile = Users.getProfile(player);
 | 
			
		||||
            McMMOPlayer mcMMOPlayer = Users.getPlayer(player);
 | 
			
		||||
            PlayerProfile profile = mcMMOPlayer.getProfile();
 | 
			
		||||
 | 
			
		||||
            if (Misc.isNPCPlayer(player, profile)) {
 | 
			
		||||
                return;
 | 
			
		||||
@@ -167,11 +169,11 @@ public class EntityListener implements Listener {
 | 
			
		||||
 | 
			
		||||
            if (!Misc.isInvincible(player, event)) {
 | 
			
		||||
                if (cause == DamageCause.FALL && player.getItemInHand().getType() != Material.ENDER_PEARL && !(Acrobatics.afkLevelingDisabled && player.isInsideVehicle()) && Permissions.roll(player)) {
 | 
			
		||||
                    AcrobaticsManager acroManager = new AcrobaticsManager(player);
 | 
			
		||||
                    acroManager.rollCheck(event);
 | 
			
		||||
                    AcrobaticsManager acrobaticsManager = new AcrobaticsManager(mcMMOPlayer);
 | 
			
		||||
                    acrobaticsManager.rollCheck(event);
 | 
			
		||||
                }
 | 
			
		||||
                else if (cause == DamageCause.BLOCK_EXPLOSION && Permissions.demolitionsExpertise(player)) {
 | 
			
		||||
                    MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
                    MiningManager miningManager = new MiningManager(mcMMOPlayer);
 | 
			
		||||
                    miningManager.demolitionsExpertise(event);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@@ -185,7 +187,7 @@ public class EntityListener implements Listener {
 | 
			
		||||
            AnimalTamer owner = pet.getOwner();
 | 
			
		||||
 | 
			
		||||
            if ((!Misc.isInvincible(livingEntity, event)) && pet.isTamed() && owner instanceof Player && pet instanceof Wolf) {
 | 
			
		||||
                TamingManager tamingManager = new TamingManager((Player) owner);
 | 
			
		||||
                TamingManager tamingManager = new TamingManager(Users.getPlayer((Player) owner));
 | 
			
		||||
                tamingManager.preventDamage(event);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -244,7 +246,7 @@ public class EntityListener implements Listener {
 | 
			
		||||
                Player player = plugin.getTNTPlayer(id);
 | 
			
		||||
 | 
			
		||||
                if (Permissions.biggerBombs(player)) {
 | 
			
		||||
                    MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
                    MiningManager miningManager = new MiningManager(Users.getPlayer(player));
 | 
			
		||||
                    miningManager.biggerBombs(event);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -266,7 +268,7 @@ public class EntityListener implements Listener {
 | 
			
		||||
            if (plugin.tntIsTracked(id)) {
 | 
			
		||||
                Player player = plugin.getTNTPlayer(id);
 | 
			
		||||
 | 
			
		||||
                MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
                MiningManager miningManager = new MiningManager(Users.getPlayer(player));
 | 
			
		||||
                miningManager.blastMiningDropProcessing(event);
 | 
			
		||||
 | 
			
		||||
                plugin.removeFromTNTTracker(id);
 | 
			
		||||
@@ -347,7 +349,7 @@ public class EntityListener implements Listener {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        TamingManager tamingManager = new TamingManager(player);
 | 
			
		||||
        TamingManager tamingManager = new TamingManager(Users.getPlayer(player));
 | 
			
		||||
        tamingManager.awardTamingXP(event);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.skills.smelting.SmeltingManager;
 | 
			
		||||
import com.gmail.nossr50.util.ItemChecks;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public class InventoryListener implements Listener{
 | 
			
		||||
    private final mcMMO plugin;
 | 
			
		||||
@@ -80,7 +81,7 @@ public class InventoryListener implements Listener{
 | 
			
		||||
                Player player = plugin.getFurnacePlayer(furnaceBlock);
 | 
			
		||||
    
 | 
			
		||||
                if (player != null) {
 | 
			
		||||
                    SmeltingManager smeltingManager = new SmeltingManager(player);
 | 
			
		||||
                    SmeltingManager smeltingManager = new SmeltingManager(Users.getPlayer(player));
 | 
			
		||||
                    smeltingManager.fuelEfficiency(event);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -100,7 +101,7 @@ public class InventoryListener implements Listener{
 | 
			
		||||
                Player player = plugin.getFurnacePlayer(furnaceBlock);
 | 
			
		||||
    
 | 
			
		||||
                if (player != null) {
 | 
			
		||||
                    SmeltingManager smeltingManager = new SmeltingManager(player);
 | 
			
		||||
                    SmeltingManager smeltingManager = new SmeltingManager(Users.getPlayer(player));
 | 
			
		||||
                    smeltingManager.smeltProcessing(event);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -117,7 +118,7 @@ public class InventoryListener implements Listener{
 | 
			
		||||
            ItemStack result = inventory.getResult();
 | 
			
		||||
    
 | 
			
		||||
            if (plugin.furnaceIsTracked(furnaceBlock) && result != null && ItemChecks.isSmelted(result)) {
 | 
			
		||||
                SmeltingManager smeltingManager = new SmeltingManager(plugin.getFurnacePlayer(furnaceBlock));
 | 
			
		||||
                SmeltingManager smeltingManager = new SmeltingManager(Users.getPlayer(plugin.getFurnacePlayer(furnaceBlock)));
 | 
			
		||||
                smeltingManager.vanillaXPBoost(event);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -91,7 +91,7 @@ public class PlayerListener implements Listener {
 | 
			
		||||
 | 
			
		||||
        switch (event.getState()) {
 | 
			
		||||
        case CAUGHT_FISH:
 | 
			
		||||
            Fishing.beginFishing(player, skillLevel, event);
 | 
			
		||||
            Fishing.beginFishing(Users.getPlayer(player), skillLevel, event);
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case CAUGHT_ENTITY:
 | 
			
		||||
@@ -200,31 +200,28 @@ public class PlayerListener implements Listener {
 | 
			
		||||
 | 
			
		||||
            /* REPAIR CHECKS */
 | 
			
		||||
            if (blockID == Repair.anvilID && Permissions.repair(player) && mcMMO.repairManager.isRepairable(heldItem)) {
 | 
			
		||||
                mcMMO.repairManager.handleRepair(player, heldItem);
 | 
			
		||||
                mcMMO.repairManager.handleRepair(Users.getPlayer(player), heldItem);
 | 
			
		||||
                event.setCancelled(true);
 | 
			
		||||
                player.updateInventory();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* SALVAGE CHECKS */
 | 
			
		||||
            else if (blockID == Salvage.anvilID && Permissions.salvage(player) && Salvage.isSalvageable(heldItem)) {
 | 
			
		||||
                Salvage.handleSalvage(player, block.getLocation(), heldItem);
 | 
			
		||||
                event.setCancelled(true);
 | 
			
		||||
                player.updateInventory();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* BLAST MINING CHECK */
 | 
			
		||||
            else if (player.isSneaking() && Permissions.blastMining(player) && heldItem.getTypeId() == BlastMining.detonatorID) {
 | 
			
		||||
                MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
                MiningManager miningManager = new MiningManager(Users.getPlayer(player));
 | 
			
		||||
                miningManager.detonate(event);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case RIGHT_CLICK_AIR:
 | 
			
		||||
 | 
			
		||||
            /* BLAST MINING CHECK */
 | 
			
		||||
            if (player.isSneaking() && Permissions.blastMining(player) && heldItem.getTypeId() == BlastMining.detonatorID) {
 | 
			
		||||
                MiningManager miningManager = new MiningManager(player);
 | 
			
		||||
                MiningManager miningManager = new MiningManager(Users.getPlayer(player));
 | 
			
		||||
                miningManager.detonate(event);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -305,11 +302,11 @@ public class PlayerListener implements Listener {
 | 
			
		||||
                Material type = heldItem.getType();
 | 
			
		||||
 | 
			
		||||
                if (type == Material.RAW_FISH) {
 | 
			
		||||
                    TamingManager tamingManager = new TamingManager(player);
 | 
			
		||||
                    TamingManager tamingManager = new TamingManager(Users.getPlayer(player));
 | 
			
		||||
                    tamingManager.summonOcelot();
 | 
			
		||||
                }
 | 
			
		||||
                else if (type == Material.BONE) {
 | 
			
		||||
                    TamingManager tamingManager = new TamingManager(player);
 | 
			
		||||
                    TamingManager tamingManager = new TamingManager(Users.getPlayer(player));
 | 
			
		||||
                    tamingManager.summonWolf();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ public class Party {
 | 
			
		||||
    private String name;
 | 
			
		||||
    private String password;
 | 
			
		||||
    private boolean locked;
 | 
			
		||||
    private String expShareMode;
 | 
			
		||||
    private ShareHandler.XpShareMode xpShareMode;
 | 
			
		||||
 | 
			
		||||
    public List<String> getMembers() {
 | 
			
		||||
        return members;
 | 
			
		||||
@@ -64,11 +64,11 @@ public class Party {
 | 
			
		||||
        this.locked = locked;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setExpShareMode(String expShareMode) {
 | 
			
		||||
        this.expShareMode = expShareMode;
 | 
			
		||||
    public void setXpShareMode(ShareHandler.XpShareMode xpShareMode) {
 | 
			
		||||
        this.xpShareMode = xpShareMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getExpShareMode() {
 | 
			
		||||
        return expShareMode;
 | 
			
		||||
    public ShareHandler.XpShareMode getXpShareMode() {
 | 
			
		||||
        return xpShareMode;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -244,7 +244,7 @@ public final class PartyManager {
 | 
			
		||||
 | 
			
		||||
            party.setName(partyName);
 | 
			
		||||
            party.setLeader(playerName);
 | 
			
		||||
            party.setExpShareMode("NO_SHARE");
 | 
			
		||||
            party.setXpShareMode(ShareHandler.XpShareMode.NONE);
 | 
			
		||||
            party.setLocked(true);//Parties are now invite-only by default, can be set to open with /party unlock
 | 
			
		||||
 | 
			
		||||
            if (password != null) {
 | 
			
		||||
@@ -259,7 +259,7 @@ public final class PartyManager {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        player.sendMessage(LocaleLoader.getString("Commands.Party.Create", new Object[]{party.getName()}));
 | 
			
		||||
        player.sendMessage(LocaleLoader.getString("Commands.Party.Create", new Object[] {party.getName()}));
 | 
			
		||||
        addToParty(player.getName(), playerProfile, party);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -459,7 +459,7 @@ public final class PartyManager {
 | 
			
		||||
            party.setLeader(partiesFile.getString(partyName + ".Leader"));
 | 
			
		||||
            party.setPassword(partiesFile.getString(partyName + ".Password"));
 | 
			
		||||
            party.setLocked(partiesFile.getBoolean(partyName + ".Locked"));
 | 
			
		||||
            party.setExpShareMode(partiesFile.getString(partyName + ".ExpShareMode"));
 | 
			
		||||
            party.setXpShareMode(ShareHandler.XpShareMode.getFromString(partiesFile.getString(partyName + ".ExpShareMode")));
 | 
			
		||||
            party.getMembers().addAll(partiesFile.getStringList(partyName + ".Members"));
 | 
			
		||||
 | 
			
		||||
            parties.add(party);
 | 
			
		||||
@@ -484,7 +484,7 @@ public final class PartyManager {
 | 
			
		||||
            partiesFile.set(partyName + ".Leader", party.getLeader());
 | 
			
		||||
            partiesFile.set(partyName + ".Password", party.getPassword());
 | 
			
		||||
            partiesFile.set(partyName + ".Locked", party.isLocked());
 | 
			
		||||
            partiesFile.set(partyName + ".ExpShareMode", party.getExpShareMode());
 | 
			
		||||
            partiesFile.set(partyName + ".ExpShareMode", party.getXpShareMode().toString());
 | 
			
		||||
            partiesFile.set(partyName + ".Members", party.getMembers());
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,68 +9,51 @@ import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public class ShareHandler {
 | 
			
		||||
public final class ShareHandler {
 | 
			
		||||
    public enum XpShareMode {
 | 
			
		||||
        NONE,
 | 
			
		||||
        EQUAL;
 | 
			
		||||
 | 
			
		||||
    public static boolean expShareEnabled = Config.getInstance().getExpShareEnabled();
 | 
			
		||||
    public static boolean itemShareEnabled = Config.getInstance().getItemShareEnabled();
 | 
			
		||||
    public static double partyShareRange = Config.getInstance().getPartyShareRange();
 | 
			
		||||
    public static double partyShareBonus = Config.getInstance().getPartyShareBonus();
 | 
			
		||||
 | 
			
		||||
//    protected enum PartyShareType {
 | 
			
		||||
//        NO_SHARE,
 | 
			
		||||
//        RANDOM,
 | 
			
		||||
//        EQUAL,
 | 
			
		||||
//    };
 | 
			
		||||
 | 
			
		||||
    public static double checkXpSharing(int oldExp, Player player, Party party) {
 | 
			
		||||
        int newExp = oldExp;
 | 
			
		||||
 | 
			
		||||
        if (party.getExpShareMode() == null) {
 | 
			
		||||
            party.setExpShareMode("NO_SHARE");
 | 
			
		||||
        public static XpShareMode getFromString(String string) {
 | 
			
		||||
            try {
 | 
			
		||||
                return valueOf(string);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        if (party.getExpShareMode().equals("NO_SHARE")) {
 | 
			
		||||
            return newExp;
 | 
			
		||||
            catch (IllegalArgumentException exception) {
 | 
			
		||||
                return NONE;
 | 
			
		||||
            }
 | 
			
		||||
        else if (party.getExpShareMode().equals("EQUAL")) {
 | 
			
		||||
            newExp = (int) calculateSharedExp(oldExp, player, party);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
        return newExp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Calculate the party XP.
 | 
			
		||||
     *
 | 
			
		||||
     * @param oldExp XP without party sharing
 | 
			
		||||
     * @return the party shared XP
 | 
			
		||||
     */
 | 
			
		||||
    public static double calculateSharedExp(int oldExp, Player player, Party party) {
 | 
			
		||||
        int newExp = oldExp;
 | 
			
		||||
        List<Player> nearMembers = PartyManager.getNearMembers(player, party, partyShareRange);
 | 
			
		||||
 | 
			
		||||
        if (nearMembers.size() > 0) {
 | 
			
		||||
            newExp = (int) ((oldExp / (nearMembers.size() + 1)) * partyShareBonus);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return newExp;
 | 
			
		||||
    }
 | 
			
		||||
    private static boolean running; // Used to prevent permanent sharing, McMMOPlayer.addXp() uses it
 | 
			
		||||
 | 
			
		||||
    private ShareHandler() {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Distribute XP amongst party members.
 | 
			
		||||
     *
 | 
			
		||||
     * @param xp XP without party sharing
 | 
			
		||||
     */
 | 
			
		||||
    public static void handleEqualExpShare(int xp, Player player, Party party, SkillType skillType) {
 | 
			
		||||
        List<Player> nearMembers = PartyManager.getNearMembers(player, party, partyShareRange);
 | 
			
		||||
    public static void handleEqualXpShare(int xp, Player player, Party party, SkillType skillType) {
 | 
			
		||||
        running = true;
 | 
			
		||||
        int newExp = xp;
 | 
			
		||||
 | 
			
		||||
        if (party.getXpShareMode() == XpShareMode.EQUAL) {
 | 
			
		||||
            List<Player> nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
 | 
			
		||||
 | 
			
		||||
            if (nearMembers.size() > 0) {
 | 
			
		||||
                newExp = (int) ((xp / (nearMembers.size() + 1)) * Config.getInstance().getPartyShareBonus());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            for (Player member : nearMembers) {
 | 
			
		||||
            if (nearMembers.size() > 0) {
 | 
			
		||||
                Users.getPlayer(member).addXP(skillType, xp);
 | 
			
		||||
 | 
			
		||||
                Users.getPlayer(member).addXp(skillType, newExp);
 | 
			
		||||
                SkillTools.xpCheckSkill(skillType, member, Users.getProfile(member));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        running = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isRunning() {
 | 
			
		||||
        return running;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -9,6 +9,7 @@ import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.commands.CommandHelper;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent;
 | 
			
		||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
 | 
			
		||||
@@ -110,7 +111,7 @@ public class PartyCommand implements CommandExecutor {
 | 
			
		||||
            String leader = party.getLeader();
 | 
			
		||||
            StringBuilder tempList = new StringBuilder();
 | 
			
		||||
 | 
			
		||||
            int membersNear = PartyManager.getNearMembers(player, party, ShareHandler.partyShareRange).size();
 | 
			
		||||
            int membersNear = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange()).size();
 | 
			
		||||
            int membersOnline = party.getOnlineMembers().size() - 1;
 | 
			
		||||
 | 
			
		||||
            String ItemShare = "";
 | 
			
		||||
@@ -139,16 +140,22 @@ public class PartyCommand implements CommandExecutor {
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Commands.Party.Header"));
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Commands.Party.Status", new Object[] {party.getName(), status}));
 | 
			
		||||
 | 
			
		||||
            if (ShareHandler.expShareEnabled) {
 | 
			
		||||
                ExpShare = LocaleLoader.getString("Commands.Party.ExpShare", new Object[] { party.getExpShareMode() });
 | 
			
		||||
            boolean xpShareEnabled = Config.getInstance().getExpShareEnabled();
 | 
			
		||||
            boolean itemShareEnabled = Config.getInstance().getItemShareEnabled();
 | 
			
		||||
 | 
			
		||||
            if (xpShareEnabled) {
 | 
			
		||||
                ExpShare = LocaleLoader.getString("Commands.Party.ExpShare", new Object[] { party.getXpShareMode().toString() });
 | 
			
		||||
            }
 | 
			
		||||
            if (ShareHandler.itemShareEnabled) {
 | 
			
		||||
 | 
			
		||||
            if (itemShareEnabled) {
 | 
			
		||||
                ItemShare = LocaleLoader.getString("Commands.Party.ItemShare", new Object[] { itemShareMode });
 | 
			
		||||
            }
 | 
			
		||||
            if (ShareHandler.expShareEnabled && ShareHandler.itemShareEnabled) {
 | 
			
		||||
 | 
			
		||||
            if (xpShareEnabled && itemShareEnabled) {
 | 
			
		||||
                Split = ChatColor.DARK_GRAY + " || ";
 | 
			
		||||
            }
 | 
			
		||||
            if (ShareHandler.expShareEnabled || ShareHandler.itemShareEnabled) {
 | 
			
		||||
 | 
			
		||||
            if (xpShareEnabled || itemShareEnabled) {
 | 
			
		||||
                player.sendMessage(LocaleLoader.getString("Commands.Party.ShareMode") + ExpShare + Split + ItemShare);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -350,8 +357,10 @@ public class PartyCommand implements CommandExecutor {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean shareExp(String[] args) {
 | 
			
		||||
        if (CommandHelper.noCommandPermissions(player, "mcmmo.commands.party.expshare"))
 | 
			
		||||
        if (CommandHelper.noCommandPermissions(player, "mcmmo.commands.party.expshare")) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String playerName = player.getName();
 | 
			
		||||
        PlayerProfile playerProfile = Users.getProfile(player);
 | 
			
		||||
        Party party = playerProfile.getParty();
 | 
			
		||||
@@ -362,18 +371,21 @@ public class PartyCommand implements CommandExecutor {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (party.getLeader().equals(playerName)) {
 | 
			
		||||
            if(args[1].equalsIgnoreCase("noshare") || args[1].equalsIgnoreCase("none") || args[1].equalsIgnoreCase("false")) {
 | 
			
		||||
                party.setExpShareMode("NONE");
 | 
			
		||||
            if (args[1].equalsIgnoreCase("none") || args[1].equalsIgnoreCase("false")) {
 | 
			
		||||
                party.setXpShareMode(ShareHandler.XpShareMode.getFromString("NONE"));
 | 
			
		||||
 | 
			
		||||
                for (Player onlineMembers : party.getOnlineMembers()) {
 | 
			
		||||
                    onlineMembers.sendMessage(LocaleLoader.getString("Commands.Party.SetSharing", new Object[] {LocaleLoader.getString("Party.ShareType.Exp"), LocaleLoader.getString("Party.ShareMode.NoShare")}));
 | 
			
		||||
                }
 | 
			
		||||
            } else if(args[1].equalsIgnoreCase("equal") || args[1].equalsIgnoreCase("even")) {
 | 
			
		||||
                party.setExpShareMode("EQUAL");
 | 
			
		||||
            } else if (args[1].equalsIgnoreCase("equal") || args[1].equalsIgnoreCase("even")) {
 | 
			
		||||
                party.setXpShareMode(ShareHandler.XpShareMode.getFromString("EQUAL"));
 | 
			
		||||
 | 
			
		||||
                for (Player onlineMembers : party.getOnlineMembers()) {
 | 
			
		||||
                    onlineMembers.sendMessage(LocaleLoader.getString("Commands.Party.SetSharing", new Object[] {LocaleLoader.getString("Party.ShareType.Exp"), LocaleLoader.getString("Party.ShareMode.Equal")}));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,32 +1,23 @@
 | 
			
		||||
package com.gmail.nossr50.skills;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public abstract class SkillManager {
 | 
			
		||||
    protected Player player;
 | 
			
		||||
    protected PlayerProfile profile;
 | 
			
		||||
    protected McMMOPlayer mcMMOPlayer;
 | 
			
		||||
    protected int skillLevel;
 | 
			
		||||
    protected int activationChance;
 | 
			
		||||
 | 
			
		||||
    public SkillManager(Player player, SkillType skill) {
 | 
			
		||||
        this.player = player;
 | 
			
		||||
        this.profile = Users.getProfile(player);
 | 
			
		||||
        this.skillLevel = profile.getSkillLevel(skill);
 | 
			
		||||
        this.activationChance = Misc.calculateActivationChance(Permissions.lucky(player, skill));
 | 
			
		||||
    public SkillManager(McMMOPlayer mcMMOPlayer, SkillType skill) {
 | 
			
		||||
        this.mcMMOPlayer = mcMMOPlayer;
 | 
			
		||||
        this.skillLevel = mcMMOPlayer.getProfile().getSkillLevel(skill);
 | 
			
		||||
        this.activationChance = Misc.calculateActivationChance(Permissions.lucky(mcMMOPlayer.getPlayer(), skill));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Player getPlayer() {
 | 
			
		||||
        return player;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public PlayerProfile getProfile() {
 | 
			
		||||
        return profile;
 | 
			
		||||
    public McMMOPlayer getMcMMOPlayer() {
 | 
			
		||||
        return mcMMOPlayer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getSkillLevel() {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public abstract class AcrobaticsEventHandler {
 | 
			
		||||
    protected AcrobaticsManager manager;
 | 
			
		||||
    protected Player player;
 | 
			
		||||
 | 
			
		||||
    protected EntityDamageEvent event;
 | 
			
		||||
    protected int damage;
 | 
			
		||||
@@ -16,7 +15,6 @@ public abstract class AcrobaticsEventHandler {
 | 
			
		||||
 | 
			
		||||
    protected AcrobaticsEventHandler(AcrobaticsManager manager, EntityDamageEvent event) {
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
        this.event = event;
 | 
			
		||||
        this.damage = event.getDamage();
 | 
			
		||||
    }
 | 
			
		||||
@@ -42,9 +40,9 @@ public abstract class AcrobaticsEventHandler {
 | 
			
		||||
    protected abstract void sendAbilityMessage();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Process XP gain from this event.
 | 
			
		||||
     * Process Xp gain from this event.
 | 
			
		||||
     */
 | 
			
		||||
    protected abstract void processXPGain(int xp);
 | 
			
		||||
    protected abstract void processXpGain(int xp);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check to ensure you're not gaining XP after you die.
 | 
			
		||||
@@ -53,6 +51,8 @@ public abstract class AcrobaticsEventHandler {
 | 
			
		||||
     * @return true if the damage is fatal, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    protected boolean isFatal(int damage) {
 | 
			
		||||
        Player player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Misc.isNPCPlayer(player) || player.getHealth() - damage < 1) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,15 @@
 | 
			
		||||
package com.gmail.nossr50.skills.acrobatics;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class AcrobaticsManager extends SkillManager {
 | 
			
		||||
    public AcrobaticsManager (Player player) {
 | 
			
		||||
        super(player, SkillType.ACROBATICS);
 | 
			
		||||
    public AcrobaticsManager (McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.ACROBATICS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -32,10 +32,10 @@ public class AcrobaticsManager extends SkillManager {
 | 
			
		||||
        if (chance > Misc.getRandom().nextInt(activationChance) && !eventHandler.isFatal(eventHandler.modifiedDamage)) {
 | 
			
		||||
            eventHandler.modifyEventDamage();
 | 
			
		||||
            eventHandler.sendAbilityMessage();
 | 
			
		||||
            eventHandler.processXPGain(eventHandler.damage * Acrobatics.rollXpModifier);
 | 
			
		||||
            eventHandler.processXpGain(eventHandler.damage * Acrobatics.rollXpModifier);
 | 
			
		||||
        }
 | 
			
		||||
        else if (!eventHandler.isFatal(event.getDamage())) {
 | 
			
		||||
            eventHandler.processXPGain(eventHandler.damage * Acrobatics.fallXpModifier);
 | 
			
		||||
            eventHandler.processXpGain(eventHandler.damage * Acrobatics.fallXpModifier);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -52,7 +52,7 @@ public class AcrobaticsManager extends SkillManager {
 | 
			
		||||
        if (chance > Misc.getRandom().nextInt(activationChance) && !eventHandler.isFatal(eventHandler.modifiedDamage)) {
 | 
			
		||||
            eventHandler.modifyEventDamage();
 | 
			
		||||
            eventHandler.sendAbilityMessage();
 | 
			
		||||
            eventHandler.processXPGain(eventHandler.damage * Acrobatics.dodgeXpModifier);
 | 
			
		||||
            eventHandler.processXpGain(eventHandler.damage * Acrobatics.dodgeXpModifier);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,8 @@ package com.gmail.nossr50.skills.acrobatics;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
@@ -39,15 +38,15 @@ public class DodgeEventHandler extends AcrobaticsEventHandler {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void sendAbilityMessage() {
 | 
			
		||||
        player.sendMessage(LocaleLoader.getString("Acrobatics.Combat.Proc"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Acrobatics.Combat.Proc"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void processXPGain(int xp) {
 | 
			
		||||
        PlayerProfile profile = manager.getProfile();
 | 
			
		||||
    protected void processXpGain(int xp) {
 | 
			
		||||
        McMMOPlayer mcMMOPlayer = manager.getMcMMOPlayer();
 | 
			
		||||
 | 
			
		||||
        if (System.currentTimeMillis() >= profile.getRespawnATS() + Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS) {
 | 
			
		||||
            SkillTools.xpProcessing(player, profile, SkillType.ACROBATICS, xp);
 | 
			
		||||
        if (System.currentTimeMillis() >= mcMMOPlayer.getProfile().getRespawnATS() + Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS) {
 | 
			
		||||
            manager.getMcMMOPlayer().addXp(SkillType.ACROBATICS, xp);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
package com.gmail.nossr50.skills.acrobatics;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
@@ -56,6 +56,8 @@ public class RollEventHandler extends AcrobaticsEventHandler {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void sendAbilityMessage() {
 | 
			
		||||
        Player player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (isGraceful) {
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
 | 
			
		||||
        }
 | 
			
		||||
@@ -66,14 +68,16 @@ public class RollEventHandler extends AcrobaticsEventHandler {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void processXPGain(int xpGain) {
 | 
			
		||||
        SkillTools.xpProcessing(player, manager.getProfile(), SkillType.ACROBATICS, xpGain);
 | 
			
		||||
    protected void processXpGain(int xp) {
 | 
			
		||||
        manager.getMcMMOPlayer().addXp(SkillType.ACROBATICS, xp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if this is a graceful roll.
 | 
			
		||||
     */
 | 
			
		||||
    private void isGracefulRoll() {
 | 
			
		||||
        Player player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Permissions.gracefulRoll(player)) {
 | 
			
		||||
            this.isGraceful = player.isSneaking();
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -5,24 +5,25 @@ import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
 | 
			
		||||
public class ArcheryManager extends SkillManager {
 | 
			
		||||
    public ArcheryManager (Player player) {
 | 
			
		||||
        super(player, SkillType.ARCHERY);
 | 
			
		||||
    public ArcheryManager (McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.ARCHERY);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void distanceXpBonus(LivingEntity target) {
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
        Location shooterLocation = player.getEyeLocation();
 | 
			
		||||
        Location targetLocation = target.getLocation();
 | 
			
		||||
        double squaredDistance = shooterLocation.distanceSquared(targetLocation);
 | 
			
		||||
 | 
			
		||||
        int bonusXp = (int) (squaredDistance * Archery.distanceXpModifer);
 | 
			
		||||
        SkillTools.xpProcessing(player, profile, SkillType.ARCHERY, bonusXp);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.ARCHERY, bonusXp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -63,7 +64,7 @@ public class ArcheryManager extends SkillManager {
 | 
			
		||||
     * @param event The event to modify.
 | 
			
		||||
     */
 | 
			
		||||
    public void skillShot(EntityDamageEvent event) {
 | 
			
		||||
        if (skillLevel >= Archery.skillShotIncreaseLevel && Permissions.archeryBonus(player)) {
 | 
			
		||||
        if (skillLevel >= Archery.skillShotIncreaseLevel && Permissions.archeryBonus(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            SkillShotEventHandler eventHandler = new SkillShotEventHandler(this, event);
 | 
			
		||||
 | 
			
		||||
            eventHandler.calculateDamageBonus();
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,6 @@ public class DazeEventHandler {
 | 
			
		||||
 | 
			
		||||
    protected void sendAbilityMessages() {
 | 
			
		||||
        defender.sendMessage(LocaleLoader.getString("Combat.TouchedFuzzy"));
 | 
			
		||||
        manager.getPlayer().sendMessage(LocaleLoader.getString("Combat.TargetDazed"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Combat.TargetDazed"));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,16 @@
 | 
			
		||||
package com.gmail.nossr50.skills.axes;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class AxeManager extends SkillManager {
 | 
			
		||||
    public AxeManager(Player player) {
 | 
			
		||||
        super(player, SkillType.AXES);
 | 
			
		||||
    public AxeManager(McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.AXES);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -64,7 +64,7 @@ public class AxeManager extends SkillManager {
 | 
			
		||||
     * @param damage The base damage to deal
 | 
			
		||||
     */
 | 
			
		||||
    public void skullSplitter(LivingEntity target, int damage) {
 | 
			
		||||
        SkullSplitterEventHandler eventHandler = new SkullSplitterEventHandler(player, damage, target);
 | 
			
		||||
        SkullSplitterEventHandler eventHandler = new SkullSplitterEventHandler(mcMMOPlayer.getPlayer(), damage, target);
 | 
			
		||||
        eventHandler.applyAbilityEffects();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ public class CriticalHitEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendAbilityMessages() {
 | 
			
		||||
        manager.getPlayer().sendMessage(LocaleLoader.getString("Axes.Combat.CriticalHit"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Axes.Combat.CriticalHit"));
 | 
			
		||||
 | 
			
		||||
        if (defender instanceof Player) {
 | 
			
		||||
            ((Player) defender).sendMessage(LocaleLoader.getString("Axes.Combat.CritStruck"));
 | 
			
		||||
 
 | 
			
		||||
@@ -18,12 +18,11 @@ public class ImpactEventHandler {
 | 
			
		||||
    private short durabilityDamage = 1;
 | 
			
		||||
    private EntityEquipment equipment;
 | 
			
		||||
    private ItemStack[] armorContents;
 | 
			
		||||
 | 
			
		||||
    protected LivingEntity defender;
 | 
			
		||||
 | 
			
		||||
    public ImpactEventHandler(AxeManager manager, EntityDamageByEntityEvent event, LivingEntity defender) {
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
        this.player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
        this.event = event;
 | 
			
		||||
        this.defender = defender;
 | 
			
		||||
        this.equipment = defender.getEquipment();
 | 
			
		||||
@@ -31,7 +30,7 @@ public class ImpactEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void damageArmor() {
 | 
			
		||||
        /* Every 50 Skill Levels you gain 1 durability damage (default values) */
 | 
			
		||||
        // Every 50 Skill Levels you gain 1 durability damage (default values)
 | 
			
		||||
        durabilityDamage += (short) (manager.getSkillLevel() / Axes.impactIncreaseLevel);
 | 
			
		||||
 | 
			
		||||
        for (ItemStack armor : armorContents) {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,12 +8,11 @@ import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.Sound;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.config.TreasuresConfig;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
 | 
			
		||||
import com.gmail.nossr50.mods.ModChecks;
 | 
			
		||||
@@ -21,7 +20,6 @@ import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public class Excavation {
 | 
			
		||||
    public static boolean requiresTool = Config.getInstance().getExcavationRequiresTool();
 | 
			
		||||
@@ -30,21 +28,13 @@ public class Excavation {
 | 
			
		||||
     * Check to see if treasures were found.
 | 
			
		||||
     *
 | 
			
		||||
     * @param block The block to check
 | 
			
		||||
     * @param player The player who broke the block
 | 
			
		||||
     * @param mcMMOPlayer The player who broke the block
 | 
			
		||||
     */
 | 
			
		||||
    public static void excavationProcCheck(Block block, Player player) {
 | 
			
		||||
        Material type = block.getType();
 | 
			
		||||
        Location location = block.getLocation();
 | 
			
		||||
 | 
			
		||||
        PlayerProfile profile = Users.getProfile(player);
 | 
			
		||||
        int skillLevel = profile.getSkillLevel(SkillType.EXCAVATION);
 | 
			
		||||
        ArrayList<ItemStack> is = new ArrayList<ItemStack>();
 | 
			
		||||
 | 
			
		||||
        List<ExcavationTreasure> treasures = new ArrayList<ExcavationTreasure>();
 | 
			
		||||
 | 
			
		||||
    public static void excavationProcCheck(Block block, McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        Material material = block.getType();
 | 
			
		||||
        int xp;
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
        switch (material) {
 | 
			
		||||
        case CLAY:
 | 
			
		||||
            xp = Config.getInstance().getExcavationClayXP();
 | 
			
		||||
            break;
 | 
			
		||||
@@ -78,8 +68,11 @@ public class Excavation {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
        List<ExcavationTreasure> treasures = new ArrayList<ExcavationTreasure>();
 | 
			
		||||
 | 
			
		||||
        if (Permissions.excavationTreasures(player)) {
 | 
			
		||||
            switch (type) {
 | 
			
		||||
            switch (material) {
 | 
			
		||||
            case DIRT:
 | 
			
		||||
                treasures = TreasuresConfig.getInstance().excavationFromDirt;
 | 
			
		||||
                break;
 | 
			
		||||
@@ -112,43 +105,40 @@ public class Excavation {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Location location = block.getLocation();
 | 
			
		||||
 | 
			
		||||
            for (ExcavationTreasure treasure : treasures) {
 | 
			
		||||
                if (skillLevel >= treasure.getDropLevel()) {
 | 
			
		||||
                if (mcMMOPlayer.getProfile().getSkillLevel(SkillType.EXCAVATION) >= treasure.getDropLevel()) {
 | 
			
		||||
                    int activationChance = Misc.calculateActivationChance(Permissions.luckyExcavation(player));
 | 
			
		||||
 | 
			
		||||
                    if (Misc.getRandom().nextDouble() * activationChance <= treasure.getDropChance()) {
 | 
			
		||||
                        xp += treasure.getXp();
 | 
			
		||||
                        is.add(treasure.getDrop());
 | 
			
		||||
                        Misc.dropItem(location, treasure.getDrop());
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
            //Drop items
 | 
			
		||||
            for (ItemStack x : is) {
 | 
			
		||||
                if (x != null) {
 | 
			
		||||
                    Misc.dropItem(location, x);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player, profile, SkillType.EXCAVATION, xp);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.EXCAVATION, xp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle triple drops from Giga Drill Breaker.
 | 
			
		||||
     *
 | 
			
		||||
     * @param player The player using the ability
 | 
			
		||||
     * @param mcMMOPlayer The player using the ability
 | 
			
		||||
     * @param block The block to check
 | 
			
		||||
     */
 | 
			
		||||
    public static void gigaDrillBreaker(Player player, Block block) {
 | 
			
		||||
    public static void gigaDrillBreaker(McMMOPlayer mcMMOplayer, Block block) {
 | 
			
		||||
        Player player = mcMMOplayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        SkillTools.abilityDurabilityLoss(player.getItemInHand(), Misc.toolDurabilityLoss);
 | 
			
		||||
 | 
			
		||||
        if (!mcMMO.placeStore.isTrue(block) && Misc.blockBreakSimulate(block, player, true)) {
 | 
			
		||||
            FakePlayerAnimationEvent armswing = new FakePlayerAnimationEvent(player);
 | 
			
		||||
            mcMMO.p.getServer().getPluginManager().callEvent(armswing);
 | 
			
		||||
 | 
			
		||||
            Excavation.excavationProcCheck(block, player);
 | 
			
		||||
            Excavation.excavationProcCheck(block, player);
 | 
			
		||||
            Excavation.excavationProcCheck(block, mcMMOplayer);
 | 
			
		||||
            Excavation.excavationProcCheck(block, mcMMOplayer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        player.playSound(block.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.POP_PITCH);
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.config.TreasuresConfig;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
@@ -22,7 +23,6 @@ import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.ItemChecks;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public final class Fishing {
 | 
			
		||||
    static final AdvancedConfig ADVANCED_CONFIG = AdvancedConfig.getInstance();
 | 
			
		||||
@@ -103,12 +103,13 @@ public final class Fishing {
 | 
			
		||||
    /**
 | 
			
		||||
     * Begins Fishing
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player fishing
 | 
			
		||||
     * @param mcMMOPlayer Player fishing
 | 
			
		||||
     * @param skillLevel Fishing level of the player
 | 
			
		||||
     * @param event Event to process
 | 
			
		||||
     */
 | 
			
		||||
    public static void beginFishing(Player player, int skillLevel, PlayerFishEvent event) {
 | 
			
		||||
    public static void beginFishing(McMMOPlayer mcMMOPlayer, int skillLevel, PlayerFishEvent event) {
 | 
			
		||||
        int treasureXp = 0;
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
        FishingTreasure treasure = checkForTreasure(player, skillLevel);
 | 
			
		||||
 | 
			
		||||
        if (treasure != null) {
 | 
			
		||||
@@ -127,7 +128,7 @@ public final class Fishing {
 | 
			
		||||
            caught.setItemStack(treasureDrop);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player, Users.getProfile(player), SkillType.FISHING, Config.getInstance().getFishingBaseXP() + treasureXp);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.FISHING, Config.getInstance().getFishingBaseXP() + treasureXp);
 | 
			
		||||
        event.setExpToDrop(event.getExpToDrop() * getVanillaXpMultiplier(skillLevel));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.config.TreasuresConfig;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
@@ -141,11 +142,13 @@ public class Herbalism {
 | 
			
		||||
     * Check for extra Herbalism drops.
 | 
			
		||||
     *
 | 
			
		||||
     * @param block The block to check for extra drops
 | 
			
		||||
     * @param player The player getting extra drops
 | 
			
		||||
     * @param mcMMOPlayer The player getting extra drops
 | 
			
		||||
     * @param event The event to use for Green Thumb
 | 
			
		||||
     * @param plugin mcMMO plugin instance
 | 
			
		||||
     */
 | 
			
		||||
    public static void herbalismProcCheck(final Block block, Player player, BlockBreakEvent event, mcMMO plugin) {
 | 
			
		||||
    public static void herbalismProcCheck(final Block block, McMMOPlayer mcMMOPlayer, BlockBreakEvent event, mcMMO plugin) {
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Config.getInstance().getHerbalismAFKDisabled() && player.isInsideVehicle()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -209,7 +212,7 @@ public class Herbalism {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player, profile, SkillType.HERBALISM, xp);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.HERBALISM, xp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -10,21 +10,19 @@ import org.bukkit.event.entity.EntityExplodeEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.util.BlockChecks;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class BlastMiningDropEventHandler {
 | 
			
		||||
    private MiningManager manager;
 | 
			
		||||
    private int skillLevel;
 | 
			
		||||
 | 
			
		||||
    private EntityExplodeEvent event;
 | 
			
		||||
    private float yield;
 | 
			
		||||
    private List<Block> blocks;
 | 
			
		||||
 | 
			
		||||
    private List<Block> ores = new ArrayList<Block>();
 | 
			
		||||
    private List<Block> debris = new ArrayList<Block>();
 | 
			
		||||
    private List<Block> droppedOres = new ArrayList<Block>();
 | 
			
		||||
 | 
			
		||||
    private float oreBonus;
 | 
			
		||||
    private float debrisReduction;
 | 
			
		||||
    private int dropMultiplier;
 | 
			
		||||
@@ -36,7 +34,6 @@ public class BlastMiningDropEventHandler {
 | 
			
		||||
        this.event = event;
 | 
			
		||||
        this.yield = event.getYield();
 | 
			
		||||
        this.blocks = event.blockList();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sortExplosionBlocks() {
 | 
			
		||||
@@ -51,9 +48,11 @@ public class BlastMiningDropEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void processXPGain() {
 | 
			
		||||
        McMMOPlayer mcMMOPlayer = manager.getMcMMOPlayer();
 | 
			
		||||
 | 
			
		||||
        for (Block block : droppedOres) {
 | 
			
		||||
            if (!mcMMO.placeStore.isTrue(block)) {
 | 
			
		||||
                Mining.miningXP(manager.getPlayer(), manager.getProfile(), block, block.getType());
 | 
			
		||||
                Mining.miningXP(mcMMOPlayer, block, block.getType());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
 | 
			
		||||
public class DemoltionsExpertiseEventHandler {
 | 
			
		||||
    private int skillLevel;
 | 
			
		||||
 | 
			
		||||
    private EntityDamageEvent event;
 | 
			
		||||
    private int damage;
 | 
			
		||||
    private double damageModifier;
 | 
			
		||||
 
 | 
			
		||||
@@ -5,16 +5,14 @@ import org.bukkit.DyeColor;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.material.MaterialData;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.mods.ModChecks;
 | 
			
		||||
import com.gmail.nossr50.mods.datatypes.CustomBlock;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
@@ -35,10 +33,10 @@ public class Mining {
 | 
			
		||||
    /**
 | 
			
		||||
     * Award XP for Mining blocks.
 | 
			
		||||
     *
 | 
			
		||||
     * @param player The player to award XP to
 | 
			
		||||
     * @param mcMMOPlayer The player to award XP to
 | 
			
		||||
     * @param block The block to award XP for
 | 
			
		||||
     */
 | 
			
		||||
    protected static void miningXP(Player player, PlayerProfile profile, Block block, Material type) {
 | 
			
		||||
    protected static void miningXP(McMMOPlayer mcMMOPlayer, Block block, Material type) {
 | 
			
		||||
        int xp = 0;
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
@@ -106,7 +104,7 @@ public class Mining {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player, profile, SkillType.MINING, xp);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.MINING, xp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -4,24 +4,18 @@ import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.enchantments.Enchantment;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class MiningBlockEventHandler {
 | 
			
		||||
    private MiningManager manager;
 | 
			
		||||
    private Player player;
 | 
			
		||||
 | 
			
		||||
    private Block block;
 | 
			
		||||
    private Location blockLocation;
 | 
			
		||||
    private Material blockType;
 | 
			
		||||
 | 
			
		||||
    protected int skillModifier;
 | 
			
		||||
 | 
			
		||||
    protected MiningBlockEventHandler(MiningManager manager, Block block) {
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
 | 
			
		||||
        this.block = block;
 | 
			
		||||
        this.blockLocation = block.getLocation();
 | 
			
		||||
        this.blockType = block.getType();
 | 
			
		||||
@@ -37,7 +31,7 @@ public class MiningBlockEventHandler {
 | 
			
		||||
     * Process Mining block drops.
 | 
			
		||||
     */
 | 
			
		||||
    protected void processDrops() {
 | 
			
		||||
        if (player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
 | 
			
		||||
        if (manager.getMcMMOPlayer().getPlayer().getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
 | 
			
		||||
            Mining.silkTouchDrops(block, blockLocation, blockType);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
@@ -46,6 +40,6 @@ public class MiningBlockEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void processXPGain() {
 | 
			
		||||
        Mining.miningXP(player, manager.getProfile(), block, blockType);
 | 
			
		||||
        Mining.miningXP(manager.getMcMMOPlayer(), block, blockType);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,21 +2,21 @@ package com.gmail.nossr50.skills.mining;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
import org.bukkit.event.entity.EntityExplodeEvent;
 | 
			
		||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerInteractEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
 | 
			
		||||
public class MiningManager extends SkillManager{
 | 
			
		||||
    public MiningManager (Player player) {
 | 
			
		||||
        super(player, SkillType.MINING);
 | 
			
		||||
    public MiningManager (McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.MINING);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -33,11 +33,11 @@ public class MiningManager extends SkillManager{
 | 
			
		||||
 | 
			
		||||
        eventHandler.targetTNT();
 | 
			
		||||
 | 
			
		||||
        if (eventHandler.block.getType() != Material.TNT) {
 | 
			
		||||
        if (eventHandler.getBlock().getType() != Material.TNT) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!Misc.blockBreakSimulate(eventHandler.block, player, true)) {
 | 
			
		||||
        if (!Misc.blockBreakSimulate(eventHandler.getBlock(), mcMMOPlayer.getPlayer(), true)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,7 @@ public class MiningManager extends SkillManager{
 | 
			
		||||
     * @param event Event whose explosion is being processed
 | 
			
		||||
     */
 | 
			
		||||
    public void blastMiningDropProcessing(EntityExplodeEvent event) {
 | 
			
		||||
        if (Misc.isNPCPlayer(player)) {
 | 
			
		||||
        if (Misc.isNPCPlayer(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -93,7 +93,7 @@ public class MiningManager extends SkillManager{
 | 
			
		||||
     * @param event Event whose explosion radius is being changed
 | 
			
		||||
     */
 | 
			
		||||
    public void biggerBombs(ExplosionPrimeEvent event) {
 | 
			
		||||
        if (Misc.isNPCPlayer(player)) {
 | 
			
		||||
        if (Misc.isNPCPlayer(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -112,7 +112,7 @@ public class MiningManager extends SkillManager{
 | 
			
		||||
        MiningBlockEventHandler eventHandler = new MiningBlockEventHandler(this, block);
 | 
			
		||||
        eventHandler.processXPGain();
 | 
			
		||||
 | 
			
		||||
        if (!Permissions.miningDoubleDrops(player)) {
 | 
			
		||||
        if (!Permissions.miningDoubleDrops(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -129,7 +129,7 @@ public class MiningManager extends SkillManager{
 | 
			
		||||
     * @param block The block being affected
 | 
			
		||||
     */
 | 
			
		||||
    public void superBreakerBlockCheck(Block block) {
 | 
			
		||||
        if (mcMMO.placeStore.isTrue(block) || !Misc.blockBreakSimulate(block, player, true)) {
 | 
			
		||||
        if (mcMMO.placeStore.isTrue(block) || !Misc.blockBreakSimulate(block, mcMMOPlayer.getPlayer(), true)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ import org.bukkit.entity.TNTPrimed;
 | 
			
		||||
import org.bukkit.event.player.PlayerInteractEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.AbilityType;
 | 
			
		||||
@@ -16,18 +17,13 @@ import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class RemoteDetonationEventHandler {
 | 
			
		||||
    private Player player;
 | 
			
		||||
    private PlayerProfile profile;
 | 
			
		||||
 | 
			
		||||
    private MiningManager manager;
 | 
			
		||||
    private PlayerInteractEvent event;
 | 
			
		||||
    protected Block block;
 | 
			
		||||
 | 
			
		||||
    private Block block;
 | 
			
		||||
    private HashSet<Byte> transparentBlocks = new HashSet<Byte>();
 | 
			
		||||
 | 
			
		||||
    public RemoteDetonationEventHandler(MiningManager manager, PlayerInteractEvent event) {
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
        this.profile = manager.getProfile();
 | 
			
		||||
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.event = event;
 | 
			
		||||
        this.block = event.getClickedBlock();
 | 
			
		||||
    }
 | 
			
		||||
@@ -35,7 +31,7 @@ public class RemoteDetonationEventHandler {
 | 
			
		||||
    protected void targetTNT() {
 | 
			
		||||
        if (block == null || block.getType() != Material.TNT) {
 | 
			
		||||
            generateTransparentBlockList();
 | 
			
		||||
            block = player.getTargetBlock(transparentBlocks, BlastMining.MAXIMUM_REMOTE_DETONATION_DISTANCE);
 | 
			
		||||
            block = manager.getMcMMOPlayer().getPlayer().getTargetBlock(transparentBlocks, BlastMining.MAXIMUM_REMOTE_DETONATION_DISTANCE);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            event.setCancelled(true); // This is the only way I know to avoid the original TNT to be triggered (in case the player is close to it)
 | 
			
		||||
@@ -43,6 +39,10 @@ public class RemoteDetonationEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected boolean cooldownOver() {
 | 
			
		||||
        McMMOPlayer mcMMOPlayer = manager.getMcMMOPlayer();
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
        PlayerProfile profile = mcMMOPlayer.getProfile();
 | 
			
		||||
 | 
			
		||||
        if (!SkillTools.cooldownOver(profile.getSkillDATS(AbilityType.BLAST_MINING) * Misc.TIME_CONVERSION_FACTOR, AbilityType.BLAST_MINING.getCooldown(), player)) {
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Skills.TooTired", new Object[] { SkillTools.calculateTimeLeft(profile.getSkillDATS(AbilityType.BLAST_MINING) * Misc.TIME_CONVERSION_FACTOR, AbilityType.BLAST_MINING.getCooldown(), player) }));
 | 
			
		||||
 | 
			
		||||
@@ -53,19 +53,24 @@ public class RemoteDetonationEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendMessages() {
 | 
			
		||||
        Player player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
 | 
			
		||||
        Misc.sendSkillMessage(player, AbilityType.BLAST_MINING.getAbilityPlayer(player));
 | 
			
		||||
        player.sendMessage(LocaleLoader.getString("Mining.Blast.Boom"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void handleDetonation() {
 | 
			
		||||
        Player player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
        TNTPrimed tnt = player.getWorld().spawn(block.getLocation(), TNTPrimed.class);
 | 
			
		||||
 | 
			
		||||
        mcMMO.p.addToTNTTracker(tnt.getEntityId(), player.getName());
 | 
			
		||||
        tnt.setFuseTicks(0);
 | 
			
		||||
 | 
			
		||||
        block.setType(Material.AIR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void setProfileData() {
 | 
			
		||||
        PlayerProfile profile = manager.getMcMMOPlayer().getProfile();
 | 
			
		||||
 | 
			
		||||
        profile.setSkillDATS(AbilityType.BLAST_MINING, System.currentTimeMillis());
 | 
			
		||||
        profile.setAbilityInformed(AbilityType.BLAST_MINING, false);
 | 
			
		||||
    }
 | 
			
		||||
@@ -77,4 +82,8 @@ public class RemoteDetonationEventHandler {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected Block getBlock() {
 | 
			
		||||
        return block;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,29 +14,22 @@ import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class SuperBreakerEventHandler {
 | 
			
		||||
    private MiningManager manager;
 | 
			
		||||
    private Player player;
 | 
			
		||||
 | 
			
		||||
    private Block block;
 | 
			
		||||
    private Material blockType;
 | 
			
		||||
    private boolean customBlock;
 | 
			
		||||
 | 
			
		||||
    private ItemStack heldItem;
 | 
			
		||||
    private int tier;
 | 
			
		||||
 | 
			
		||||
    private int durabilityLoss;
 | 
			
		||||
    private FakePlayerAnimationEvent armswing;
 | 
			
		||||
 | 
			
		||||
    protected SuperBreakerEventHandler (MiningManager manager, Block block) {
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
 | 
			
		||||
        this.block = block;
 | 
			
		||||
        this.blockType = block.getType();
 | 
			
		||||
        this.customBlock = ModChecks.isCustomMiningBlock(block);
 | 
			
		||||
 | 
			
		||||
        Player player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
        this.heldItem = player.getItemInHand();
 | 
			
		||||
        this.tier = Misc.getTier(heldItem);
 | 
			
		||||
 | 
			
		||||
        this.armswing = new FakePlayerAnimationEvent(player);
 | 
			
		||||
 | 
			
		||||
        calculateDurabilityLoss();
 | 
			
		||||
@@ -55,7 +48,7 @@ public class SuperBreakerEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void playSound() {
 | 
			
		||||
        player.playSound(block.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.POP_PITCH);
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().playSound(block.getLocation(), Sound.ITEM_PICKUP, Misc.POP_VOLUME, Misc.POP_PITCH);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -14,20 +14,19 @@ import org.getspout.spoutapi.player.SpoutPlayer;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public class Repair {
 | 
			
		||||
    static AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
 | 
			
		||||
    private static final AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
 | 
			
		||||
 | 
			
		||||
    public static final double REPAIR_MASTERY_CHANCE_MAX = advancedConfig.getRepairMasteryMaxBonus();
 | 
			
		||||
    public static final int REPAIR_MASTERY_MAX_BONUS_LEVEL = advancedConfig.getRepairMasteryMaxLevel();
 | 
			
		||||
 | 
			
		||||
    public static final double SUPER_REPAIR_CHANCE_MAX = advancedConfig.getSuperRepairChanceMax();
 | 
			
		||||
    public static final int SUPER_REPAIR_MAX_BONUS_LEVEL = advancedConfig.getSuperRepairMaxLevel();
 | 
			
		||||
 | 
			
		||||
@@ -38,22 +37,18 @@ public class Repair {
 | 
			
		||||
    public static int anvilID = Config.getInstance().getRepairAnvilId();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle the XP gain for repair events.
 | 
			
		||||
     * Handle the Xp gain for repair events.
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player repairing the item
 | 
			
		||||
     * @param profile PlayerProfile of the repairing player
 | 
			
		||||
     * @param mcMMOPlayer Player repairing the item
 | 
			
		||||
     * @param durabilityBefore Durability of the item before repair
 | 
			
		||||
     * @param modify Amount to modify the durability by
 | 
			
		||||
     */
 | 
			
		||||
    protected static void xpHandler(Player player, PlayerProfile profile, short durabilityBefore, short durabilityAfter, double modify) {
 | 
			
		||||
        short dif = (short) (durabilityBefore - durabilityAfter);
 | 
			
		||||
    protected static void xpHandler(McMMOPlayer mcMMOPlayer, short durabilityBefore, short durabilityAfter, double modify) {
 | 
			
		||||
        short dif = (short) ((durabilityBefore - durabilityAfter) * modify);
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        dif = (short) (dif * modify);
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player, profile, SkillType.REPAIR, dif * 10);
 | 
			
		||||
 | 
			
		||||
        //CLANG CLANG
 | 
			
		||||
        player.playSound(player.getLocation(), Sound.ANVIL_USE, Misc.ANVIL_USE_VOLUME, Misc.ANVIL_USE_PITCH);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.REPAIR, dif * 10);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,10 @@ package com.gmail.nossr50.skills.repair;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
 | 
			
		||||
public interface RepairManager {
 | 
			
		||||
    /**
 | 
			
		||||
     * Register a repairable with the RepairManager
 | 
			
		||||
@@ -47,8 +48,8 @@ public interface RepairManager {
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle the repairing of this object
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player that is repairing an item
 | 
			
		||||
     * @param mcMMOPlayer Player that is repairing an item
 | 
			
		||||
     * @param item ItemStack that is being repaired
 | 
			
		||||
     */
 | 
			
		||||
    public void handleRepair(Player player, ItemStack item);
 | 
			
		||||
    public void handleRepair(McMMOPlayer mcMMOPlayer, ItemStack item);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,13 +9,13 @@ import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.PlayerInventory;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.events.skills.McMMOPlayerRepairCheckEvent;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public class SimpleRepairManager implements RepairManager {
 | 
			
		||||
    private HashMap<Integer, Repairable> repairables;
 | 
			
		||||
@@ -57,12 +57,8 @@ public class SimpleRepairManager implements RepairManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void handleRepair(Player player, ItemStack item) {
 | 
			
		||||
        // Load some variables for use
 | 
			
		||||
        PlayerProfile profile = Users.getProfile(player);
 | 
			
		||||
        short startDurability = item.getDurability();
 | 
			
		||||
        PlayerInventory inventory = player.getInventory();
 | 
			
		||||
        int skillLevel = profile.getSkillLevel(SkillType.REPAIR);
 | 
			
		||||
    public void handleRepair(McMMOPlayer mcMMOPlayer, ItemStack item) {
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
        Repairable repairable = repairables.get(item.getTypeId());
 | 
			
		||||
 | 
			
		||||
        // Permissions checks on material and item types
 | 
			
		||||
@@ -76,12 +72,16 @@ public class SimpleRepairManager implements RepairManager {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        int skillLevel = mcMMOPlayer.getProfile().getSkillLevel(SkillType.REPAIR);
 | 
			
		||||
 | 
			
		||||
        // Level check
 | 
			
		||||
        if (skillLevel < repairable.getMinimumLevel()) {
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Repair.Skills.Adept", new Object[] { String.valueOf(repairable.getMinimumLevel()), Misc.prettyItemString(item.getTypeId()) } ));
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        PlayerInventory inventory = player.getInventory();
 | 
			
		||||
 | 
			
		||||
        // Check if they have the proper material to repair with
 | 
			
		||||
        if (!inventory.contains(repairable.getRepairMaterialId())) {
 | 
			
		||||
            String message = LocaleLoader.getString("Skills.NeedMore", new Object[] { Misc.prettyItemString(repairable.getRepairMaterialId()) });
 | 
			
		||||
@@ -95,6 +95,8 @@ public class SimpleRepairManager implements RepairManager {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        short startDurability = item.getDurability();
 | 
			
		||||
 | 
			
		||||
        // Do not repair if at full durability
 | 
			
		||||
        if (startDurability <= 0) {
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Repair.Skills.FullDurability"));
 | 
			
		||||
@@ -137,7 +139,7 @@ public class SimpleRepairManager implements RepairManager {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Handle the enchants
 | 
			
		||||
        if (Repair.advancedConfig.getArcaneForgingEnchantLossEnabled() && !Permissions.arcaneBypass(player)) {
 | 
			
		||||
        if (AdvancedConfig.getInstance().getArcaneForgingEnchantLossEnabled() && !Permissions.arcaneBypass(player)) {
 | 
			
		||||
            // Generalize away enchantment work
 | 
			
		||||
            Repair.addEnchants(player, item);
 | 
			
		||||
        }
 | 
			
		||||
@@ -146,7 +148,7 @@ public class SimpleRepairManager implements RepairManager {
 | 
			
		||||
        removeOneFrom(inventory, repairItemLocation);
 | 
			
		||||
 | 
			
		||||
        // Give out XP like candy
 | 
			
		||||
        Repair.xpHandler(player, profile, startDurability, newDurability, repairable.getXpMultiplier());
 | 
			
		||||
        Repair.xpHandler(mcMMOPlayer, startDurability, newDurability, repairable.getXpMultiplier());
 | 
			
		||||
 | 
			
		||||
        // Repair the item!
 | 
			
		||||
        item.setDurability(newDurability);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +1,19 @@
 | 
			
		||||
package com.gmail.nossr50.skills.runnables;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
 | 
			
		||||
public class GainXp implements Runnable {
 | 
			
		||||
    private Player player;
 | 
			
		||||
    private PlayerProfile profile;
 | 
			
		||||
public class CombatXpGiver implements Runnable {
 | 
			
		||||
    private McMMOPlayer mcMMOPlayer;
 | 
			
		||||
    private double baseXp;
 | 
			
		||||
    private SkillType skillType;
 | 
			
		||||
    private LivingEntity target;
 | 
			
		||||
    private int baseHealth;
 | 
			
		||||
 | 
			
		||||
    public GainXp(Player player, PlayerProfile profile, SkillType skillType, double baseXp, LivingEntity target) {
 | 
			
		||||
        this.player = player;
 | 
			
		||||
        this.profile = profile;
 | 
			
		||||
    public CombatXpGiver(McMMOPlayer mcMMOPlayer, SkillType skillType, double baseXp, LivingEntity target) {
 | 
			
		||||
        this.mcMMOPlayer = mcMMOPlayer;
 | 
			
		||||
        this.skillType = skillType;
 | 
			
		||||
        this.baseXp = baseXp;
 | 
			
		||||
        this.target = target;
 | 
			
		||||
@@ -39,6 +35,6 @@ public class GainXp implements Runnable {
 | 
			
		||||
            damage += health;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player, profile, skillType, (int) (damage * baseXp));
 | 
			
		||||
        mcMMOPlayer.addXp(skillType, (int) (damage * baseXp));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -3,10 +3,10 @@ package com.gmail.nossr50.skills.smelting;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.block.BlockBreakEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.skills.mining.Mining;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
@@ -15,13 +15,11 @@ import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
 | 
			
		||||
public class FluxMiningEventHandler {
 | 
			
		||||
    private SmeltingManager manager;
 | 
			
		||||
    private Player player;
 | 
			
		||||
    private BlockBreakEvent event;
 | 
			
		||||
    private Block block;
 | 
			
		||||
 | 
			
		||||
    protected FluxMiningEventHandler(SmeltingManager manager, BlockBreakEvent event) {
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
        this.event = event;
 | 
			
		||||
        this.block = event.getBlock();
 | 
			
		||||
    }
 | 
			
		||||
@@ -47,10 +45,13 @@ public class FluxMiningEventHandler {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Location location = block.getLocation();
 | 
			
		||||
 | 
			
		||||
        Misc.dropItem(location, item);
 | 
			
		||||
 | 
			
		||||
        if (Permissions.secondSmelt(player)) {
 | 
			
		||||
            int chance = (int) ((Mining.doubleDropsMaxChance / Mining.doubleDropsMaxLevel) * (Misc.skillCheck(manager.getProfile().getSkillLevel(SkillType.MINING), Mining.doubleDropsMaxLevel)));
 | 
			
		||||
        McMMOPlayer mcMMOPlayer = manager.getMcMMOPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Permissions.secondSmelt(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            int chance = (int) ((Mining.doubleDropsMaxChance / Mining.doubleDropsMaxLevel) * (Misc.skillCheck(mcMMOPlayer.getProfile().getSkillLevel(SkillType.MINING), Mining.doubleDropsMaxLevel)));
 | 
			
		||||
            Misc.randomDropItem(location, item, chance);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -61,6 +62,6 @@ public class FluxMiningEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendAbilityMessage() {
 | 
			
		||||
        player.sendMessage(LocaleLoader.getString("Smelting.FluxMining.Success"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Smelting.FluxMining.Success"));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,7 @@ import org.bukkit.event.inventory.FurnaceSmeltEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
@@ -28,8 +27,6 @@ public class SmeltResourceEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void handleXPGain() {
 | 
			
		||||
        Player player = manager.getPlayer();
 | 
			
		||||
        PlayerProfile profile = manager.getProfile();
 | 
			
		||||
        Material sourceType = event.getSource().getType();
 | 
			
		||||
        int xp = 0;
 | 
			
		||||
 | 
			
		||||
@@ -67,12 +64,15 @@ public class SmeltResourceEventHandler {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        McMMOPlayer mcMMOPlayer = manager.getMcMMOPlayer();
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Permissions.mining(player)) {
 | 
			
		||||
            SkillTools.xpProcessing(player, profile, SkillType.MINING, xp / 2);
 | 
			
		||||
            mcMMOPlayer.addXp(SkillType.MINING, xp / 2);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (Permissions.repair(player)) {
 | 
			
		||||
            SkillTools.xpProcessing(player, profile, SkillType.REPAIR, xp / 2);
 | 
			
		||||
            mcMMOPlayer.addXp(SkillType.REPAIR, xp / 2);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import org.bukkit.event.inventory.FurnaceBurnEvent;
 | 
			
		||||
import org.bukkit.event.inventory.FurnaceExtractEvent;
 | 
			
		||||
import org.bukkit.event.inventory.FurnaceSmeltEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
@@ -13,8 +14,8 @@ import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
 | 
			
		||||
public class SmeltingManager extends SkillManager {
 | 
			
		||||
 | 
			
		||||
    public SmeltingManager(Player player) {
 | 
			
		||||
        super(player, SkillType.SMELTING);
 | 
			
		||||
    public SmeltingManager(McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.SMELTING);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -23,6 +24,8 @@ public class SmeltingManager extends SkillManager {
 | 
			
		||||
     * @param event The {@link FurnaceBurnEvent} to modify.
 | 
			
		||||
     */
 | 
			
		||||
    public void fuelEfficiency(FurnaceBurnEvent event) {
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Misc.isNPCPlayer(player) || !Permissions.fuelEfficiency(player)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -33,6 +36,8 @@ public class SmeltingManager extends SkillManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void smeltProcessing(FurnaceSmeltEvent event) {
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Misc.isNPCPlayer(player)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -69,7 +74,7 @@ public class SmeltingManager extends SkillManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void vanillaXPBoost(FurnaceExtractEvent event) {
 | 
			
		||||
        if (skillLevel < Smelting.vanillaXPBoostRank1Level || !Permissions.smeltingVanillaXPBoost(player)) {
 | 
			
		||||
        if (skillLevel < Smelting.vanillaXPBoostRank1Level || !Permissions.smeltingVanillaXPBoost(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,6 @@ public class BleedEventHandler {
 | 
			
		||||
    private SwordsManager manager;
 | 
			
		||||
    private int skillLevel;
 | 
			
		||||
    private LivingEntity defender;
 | 
			
		||||
 | 
			
		||||
    protected int skillModifier;
 | 
			
		||||
 | 
			
		||||
    protected BleedEventHandler(SwordsManager manager, LivingEntity defender) {
 | 
			
		||||
@@ -40,7 +39,7 @@ public class BleedEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendAbilityMessages() {
 | 
			
		||||
        manager.getPlayer().sendMessage(LocaleLoader.getString("Swords.Combat.Bleeding"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Swords.Combat.Bleeding"));
 | 
			
		||||
 | 
			
		||||
        if (defender instanceof Player) {
 | 
			
		||||
            ((Player) defender).sendMessage(LocaleLoader.getString("Swords.Combat.Bleeding.Started"));
 | 
			
		||||
 
 | 
			
		||||
@@ -9,15 +9,12 @@ import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class CounterAttackEventHandler {
 | 
			
		||||
    private SwordsManager manager;
 | 
			
		||||
    private Player player;
 | 
			
		||||
    private LivingEntity attacker;
 | 
			
		||||
    private int damage;
 | 
			
		||||
 | 
			
		||||
    protected int skillModifier;
 | 
			
		||||
 | 
			
		||||
    protected CounterAttackEventHandler(SwordsManager manager, LivingEntity attacker, int damage) {
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
        this.attacker = attacker;
 | 
			
		||||
        this.damage = damage;
 | 
			
		||||
    }
 | 
			
		||||
@@ -31,10 +28,7 @@ public class CounterAttackEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendAbilityMessages() {
 | 
			
		||||
        if (player == null)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        player.sendMessage(LocaleLoader.getString("Swords.Combat.Countered"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Swords.Combat.Countered"));
 | 
			
		||||
 | 
			
		||||
        if (attacker instanceof Player) {
 | 
			
		||||
            ((Player) attacker).sendMessage(LocaleLoader.getString("Swords.Combat.Counter.Hit"));
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,24 @@
 | 
			
		||||
package com.gmail.nossr50.skills.swords;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.skills.runnables.BleedTimer;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.CombatTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
 | 
			
		||||
public class SerratedStrikesEventHandler {
 | 
			
		||||
    private Player player;
 | 
			
		||||
    private SwordsManager manager;
 | 
			
		||||
    private LivingEntity target;
 | 
			
		||||
    private int damage;
 | 
			
		||||
 | 
			
		||||
    protected SerratedStrikesEventHandler(SwordsManager manager, LivingEntity target, int damage) {
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
        this.manager = manager;
 | 
			
		||||
        this.target = target;
 | 
			
		||||
        this.damage = damage;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void applyAbilityEffects() {
 | 
			
		||||
        CombatTools.applyAbilityAoE(player, target, damage / Swords.serratedStrikesModifier, SkillType.SWORDS);
 | 
			
		||||
        CombatTools.applyAbilityAoE(manager.getMcMMOPlayer().getPlayer(), target, damage / Swords.serratedStrikesModifier, SkillType.SWORDS);
 | 
			
		||||
        BleedTimer.add(target, Swords.serratedStrikesBleedTicks);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,15 @@
 | 
			
		||||
package com.gmail.nossr50.skills.swords;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
 | 
			
		||||
public class SwordsManager extends SkillManager {
 | 
			
		||||
    public SwordsManager (Player player) {
 | 
			
		||||
        super(player, SkillType.SWORDS);
 | 
			
		||||
    public SwordsManager(McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.SWORDS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ public class BeastLoreEventHandler {
 | 
			
		||||
    private LivingEntity livingEntity;
 | 
			
		||||
    private Tameable beast;
 | 
			
		||||
 | 
			
		||||
    protected BeastLoreEventHandler (Player player, LivingEntity livingEntity) {
 | 
			
		||||
    protected BeastLoreEventHandler(Player player, LivingEntity livingEntity) {
 | 
			
		||||
        this.player = player;
 | 
			
		||||
        this.livingEntity = livingEntity;
 | 
			
		||||
        this.beast = (Tameable) livingEntity;
 | 
			
		||||
@@ -45,7 +45,7 @@ public class BeastLoreEventHandler {
 | 
			
		||||
            return ((Player) tamer).getName();
 | 
			
		||||
        }
 | 
			
		||||
        else if (tamer instanceof OfflinePlayer) {
 | 
			
		||||
            return ((OfflinePlayer)tamer).getName();
 | 
			
		||||
            return ((OfflinePlayer) tamer).getName();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return "Unknown Master";
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ public class EnvironmentallyAwareEventHandler {
 | 
			
		||||
    private Wolf wolf;
 | 
			
		||||
 | 
			
		||||
    protected EnvironmentallyAwareEventHandler(TamingManager manager, EntityDamageEvent event) {
 | 
			
		||||
        this.player = manager.getPlayer();
 | 
			
		||||
        this.player = manager.getMcMMOPlayer().getPlayer();
 | 
			
		||||
        this.event = event;
 | 
			
		||||
        this.wolf = (Wolf) event.getEntity();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ public class GoreEventHandler {
 | 
			
		||||
            ((Player) entity).sendMessage(LocaleLoader.getString("Combat.StruckByGore"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        manager.getPlayer().sendMessage(LocaleLoader.getString("Combat.Gore"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Combat.Gore"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void applyBleed() {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,8 @@ public class Taming {
 | 
			
		||||
    public static int thickFurUnlockLevel = AdvancedConfig.getInstance().getThickFurUnlock();
 | 
			
		||||
    public static int thickFurModifier = AdvancedConfig.getInstance().getThickFurModifier();
 | 
			
		||||
 | 
			
		||||
    public static int wolfXP = Config.getInstance().getTamingXPWolf();
 | 
			
		||||
    public static int ocelotXP = Config.getInstance().getTamingXPOcelot();
 | 
			
		||||
    public static int wolfXp = Config.getInstance().getTamingXPWolf();
 | 
			
		||||
    public static int ocelotXp = Config.getInstance().getTamingXPOcelot();
 | 
			
		||||
 | 
			
		||||
    public static boolean pvpEnabled = Config.getInstance().getTamingPVP();
 | 
			
		||||
    public static boolean pveEnabled = Config.getInstance().getTamingPVE();
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package com.gmail.nossr50.skills.taming;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.EntityType;
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.entity.Wolf;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
 | 
			
		||||
@@ -11,18 +10,15 @@ import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
 | 
			
		||||
public class TamingManager extends SkillManager {
 | 
			
		||||
    private Config configInstance;
 | 
			
		||||
 | 
			
		||||
    public TamingManager (Player player) {
 | 
			
		||||
        super(player, SkillType.TAMING);
 | 
			
		||||
        this.configInstance = Config.getInstance();
 | 
			
		||||
    public TamingManager(McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.TAMING);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -37,11 +33,11 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
 | 
			
		||||
        switch (event.getEntityType()) {
 | 
			
		||||
        case WOLF:
 | 
			
		||||
            SkillTools.xpProcessing(player, profile, SkillType.TAMING, Taming.wolfXP);
 | 
			
		||||
            mcMMOPlayer.addXp(SkillType.TAMING, Taming.wolfXp);
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case OCELOT:
 | 
			
		||||
            SkillTools.xpProcessing(player, profile, SkillType.TAMING, Taming.ocelotXP);
 | 
			
		||||
            mcMMOPlayer.addXp(SkillType.TAMING, Taming.ocelotXp);
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
@@ -128,14 +124,14 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
     * Summon an ocelot to your side.
 | 
			
		||||
     */
 | 
			
		||||
    public void summonOcelot() {
 | 
			
		||||
        callOfTheWild(EntityType.OCELOT, configInstance.getTamingCOTWOcelotCost());
 | 
			
		||||
        callOfTheWild(EntityType.OCELOT, Config.getInstance().getTamingCOTWOcelotCost());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Summon a wolf to your side.
 | 
			
		||||
     */
 | 
			
		||||
    public void summonWolf() {
 | 
			
		||||
        callOfTheWild(EntityType.WOLF, configInstance.getTamingCOTWWolfCost());
 | 
			
		||||
        callOfTheWild(EntityType.WOLF, Config.getInstance().getTamingCOTWWolfCost());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -144,7 +140,7 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
     * @param livingEntity The entity to examine
 | 
			
		||||
     */
 | 
			
		||||
    public void beastLore(LivingEntity livingEntity) {
 | 
			
		||||
        BeastLoreEventHandler eventHandler = new BeastLoreEventHandler(player, livingEntity);
 | 
			
		||||
        BeastLoreEventHandler eventHandler = new BeastLoreEventHandler(mcMMOPlayer.getPlayer(), livingEntity);
 | 
			
		||||
        eventHandler.sendInspectMessage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -155,11 +151,11 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
     * @param summonAmount The amount of material needed to summon the entity
 | 
			
		||||
     */
 | 
			
		||||
    private void callOfTheWild(EntityType type, int summonAmount) {
 | 
			
		||||
        if (!Permissions.callOfTheWild(player)) {
 | 
			
		||||
        if (!Permissions.callOfTheWild(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        CallOfTheWildEventHandler eventHandler = new CallOfTheWildEventHandler(player, type, summonAmount);
 | 
			
		||||
        CallOfTheWildEventHandler eventHandler = new CallOfTheWildEventHandler(mcMMOPlayer.getPlayer(), type, summonAmount);
 | 
			
		||||
 | 
			
		||||
        ItemStack inHand = eventHandler.inHand;
 | 
			
		||||
        int inHandAmount = inHand.getAmount();
 | 
			
		||||
@@ -186,7 +182,7 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
     * @param cause The damage cause of the event
 | 
			
		||||
     */
 | 
			
		||||
    private void environmentallyAware(EntityDamageEvent event, DamageCause cause) {
 | 
			
		||||
        if (skillLevel >= Taming.environmentallyAwareUnlockLevel && Permissions.environmentallyAware(player)) {
 | 
			
		||||
        if (skillLevel >= Taming.environmentallyAwareUnlockLevel && Permissions.environmentallyAware(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            EnvironmentallyAwareEventHandler eventHandler = new EnvironmentallyAwareEventHandler(this, event);
 | 
			
		||||
 | 
			
		||||
            switch (cause) {
 | 
			
		||||
@@ -214,7 +210,7 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
     * @param cause The damage cause of the event
 | 
			
		||||
     */
 | 
			
		||||
    private void thickFur(EntityDamageEvent event, DamageCause cause) {
 | 
			
		||||
        if (skillLevel >= Taming.thickFurUnlockLevel && Permissions.thickFur(player)) {
 | 
			
		||||
        if (skillLevel >= Taming.thickFurUnlockLevel && Permissions.thickFur(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            ThickFurEventHandler eventHandler = new ThickFurEventHandler(event, cause);
 | 
			
		||||
            eventHandler.modifyEventDamage();
 | 
			
		||||
        }
 | 
			
		||||
@@ -226,7 +222,7 @@ public class TamingManager extends SkillManager {
 | 
			
		||||
     * @param event The event to modify
 | 
			
		||||
     */
 | 
			
		||||
    private void shockProof(EntityDamageEvent event) {
 | 
			
		||||
        if (skillLevel >= Taming.shockProofUnlockLevel && Permissions.shockProof(player)) {
 | 
			
		||||
        if (skillLevel >= Taming.shockProofUnlockLevel && Permissions.shockProof(mcMMOPlayer.getPlayer())) {
 | 
			
		||||
            ShockProofEventHandler eventHandler = new ShockProofEventHandler(event);
 | 
			
		||||
            eventHandler.modifyEventDamage();
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ public class DeflectEventHandler {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendAbilityMessage() {
 | 
			
		||||
        manager.getPlayer().sendMessage(LocaleLoader.getString("Combat.ArrowDeflect"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Combat.ArrowDeflect"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void cancelEvent() {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,6 @@ public class IronGripEventHandler {
 | 
			
		||||
 | 
			
		||||
    protected void sendAbilityMessages() {
 | 
			
		||||
        defender.sendMessage(LocaleLoader.getString("Unarmed.Ability.IronGrip.Defender"));
 | 
			
		||||
        manager.getPlayer().sendMessage(LocaleLoader.getString("Unarmed.Ability.IronGrip.Attacker"));
 | 
			
		||||
        manager.getMcMMOPlayer().getPlayer().sendMessage(LocaleLoader.getString("Unarmed.Ability.IronGrip.Attacker"));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,14 +4,15 @@ import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
 | 
			
		||||
public class UnarmedManager extends SkillManager {
 | 
			
		||||
    public UnarmedManager (Player player) {
 | 
			
		||||
        super(player, SkillType.UNARMED);
 | 
			
		||||
    public UnarmedManager(McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        super(mcMMOPlayer, SkillType.UNARMED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
 | 
			
		||||
@@ -33,7 +34,7 @@ import com.gmail.nossr50.skills.archery.ArcheryManager;
 | 
			
		||||
import com.gmail.nossr50.skills.axes.AxeManager;
 | 
			
		||||
import com.gmail.nossr50.skills.axes.Axes;
 | 
			
		||||
import com.gmail.nossr50.skills.runnables.BleedTimer;
 | 
			
		||||
import com.gmail.nossr50.skills.runnables.GainXp;
 | 
			
		||||
import com.gmail.nossr50.skills.runnables.CombatXpGiver;
 | 
			
		||||
import com.gmail.nossr50.skills.swords.Swords;
 | 
			
		||||
import com.gmail.nossr50.skills.swords.SwordsManager;
 | 
			
		||||
import com.gmail.nossr50.skills.taming.Taming;
 | 
			
		||||
@@ -80,8 +81,9 @@ public final class CombatTools {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (Permissions.swords(player)) {
 | 
			
		||||
                    SwordsManager swordsManager = new SwordsManager(player);
 | 
			
		||||
                    PlayerProfile profile = swordsManager.getProfile();
 | 
			
		||||
                    McMMOPlayer mcMMOPlayer = Users.getPlayer(player);
 | 
			
		||||
                    PlayerProfile profile = mcMMOPlayer.getProfile();
 | 
			
		||||
                    SwordsManager swordsManager = new SwordsManager(mcMMOPlayer);
 | 
			
		||||
                    boolean canSerratedStrike = Permissions.serratedStrikes(player); //So we don't have to check the same permission twice
 | 
			
		||||
 | 
			
		||||
                    if (profile.getToolPreparationMode(ToolType.SWORD) && canSerratedStrike) {
 | 
			
		||||
@@ -96,7 +98,7 @@ public final class CombatTools {
 | 
			
		||||
                        swordsManager.serratedStrikes(target, event.getDamage());
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    startGainXp(player, profile, target, SkillType.SWORDS);
 | 
			
		||||
                    startGainXp(mcMMOPlayer, target, SkillType.SWORDS);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (ItemChecks.isAxe(heldItem)) {
 | 
			
		||||
@@ -110,8 +112,9 @@ public final class CombatTools {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (Permissions.axes(player)) {
 | 
			
		||||
                    AxeManager axeManager = new AxeManager(player);
 | 
			
		||||
                    PlayerProfile profile = axeManager.getProfile();
 | 
			
		||||
                    McMMOPlayer mcMMOPlayer = Users.getPlayer(player);
 | 
			
		||||
                    PlayerProfile profile = mcMMOPlayer.getProfile();
 | 
			
		||||
                    AxeManager axeManager = new AxeManager(mcMMOPlayer);
 | 
			
		||||
                    boolean canSkullSplit = Permissions.skullSplitter(player); //So we don't have to check the same permission twice
 | 
			
		||||
                    if (profile.getToolPreparationMode(ToolType.AXE) && canSkullSplit) {
 | 
			
		||||
                        SkillTools.abilityCheck(player, SkillType.AXES);
 | 
			
		||||
@@ -133,7 +136,7 @@ public final class CombatTools {
 | 
			
		||||
                        axeManager.skullSplitter(target, event.getDamage());
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    startGainXp(player, profile, target, SkillType.AXES);
 | 
			
		||||
                    startGainXp(mcMMOPlayer, target, SkillType.AXES);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (heldItemType == Material.AIR) {
 | 
			
		||||
@@ -147,8 +150,9 @@ public final class CombatTools {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (Permissions.unarmed(player)) {
 | 
			
		||||
                    UnarmedManager unarmedManager = new UnarmedManager(player);
 | 
			
		||||
                    PlayerProfile profile = unarmedManager.getProfile();
 | 
			
		||||
                    McMMOPlayer mcMMOPlayer = Users.getPlayer(player);
 | 
			
		||||
                    PlayerProfile profile = mcMMOPlayer.getProfile();
 | 
			
		||||
                    UnarmedManager unarmedManager = new UnarmedManager(mcMMOPlayer);
 | 
			
		||||
                    boolean canBerserk = Permissions.berserk(player); //So we don't have to check the same permission twice
 | 
			
		||||
 | 
			
		||||
                    if (profile.getToolPreparationMode(ToolType.FISTS) && canBerserk) {
 | 
			
		||||
@@ -167,11 +171,11 @@ public final class CombatTools {
 | 
			
		||||
                        unarmedManager.disarmCheck(target);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    startGainXp(player, unarmedManager.getProfile(), target, SkillType.UNARMED);
 | 
			
		||||
                    startGainXp(mcMMOPlayer, target, SkillType.UNARMED);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (heldItemType == Material.BONE && target instanceof Tameable && Permissions.beastLore(player)) {
 | 
			
		||||
                TamingManager tamingManager = new TamingManager(player);
 | 
			
		||||
                TamingManager tamingManager = new TamingManager(Users.getPlayer(player));
 | 
			
		||||
                tamingManager.beastLore(target);
 | 
			
		||||
                event.setCancelled(true);
 | 
			
		||||
            }
 | 
			
		||||
@@ -200,7 +204,8 @@ public final class CombatTools {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (Permissions.taming(master)) {
 | 
			
		||||
                    TamingManager tamingManager = new TamingManager(master);
 | 
			
		||||
                    McMMOPlayer mcMMOPlayer = Users.getPlayer(master);
 | 
			
		||||
                    TamingManager tamingManager = new TamingManager(mcMMOPlayer);
 | 
			
		||||
                    int skillLevel = tamingManager.getSkillLevel();
 | 
			
		||||
 | 
			
		||||
                    if (skillLevel >= Taming.fastFoodServiceUnlockLevel && Permissions.fastFoodService(master)) {
 | 
			
		||||
@@ -216,7 +221,7 @@ public final class CombatTools {
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (target != master) {
 | 
			
		||||
                        startGainXp(master, tamingManager.getProfile(), target, SkillType.TAMING);
 | 
			
		||||
                        startGainXp(mcMMOPlayer, target, SkillType.TAMING);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -258,28 +263,28 @@ public final class CombatTools {
 | 
			
		||||
 | 
			
		||||
            if (damager instanceof Player) {
 | 
			
		||||
                if (Swords.pvpEnabled && ItemChecks.isSword(heldItem) && Permissions.counterAttack(player)) {
 | 
			
		||||
                    SwordsManager swordsManager = new SwordsManager(player);
 | 
			
		||||
                    SwordsManager swordsManager = new SwordsManager(Users.getPlayer(player));
 | 
			
		||||
                    swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage());
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (Acrobatics.pvpEnabled && Permissions.dodge(player)) {
 | 
			
		||||
                    AcrobaticsManager acrobaticsManager = new AcrobaticsManager(player);
 | 
			
		||||
                    AcrobaticsManager acrobaticsManager = new AcrobaticsManager(Users.getPlayer(player));
 | 
			
		||||
                    acrobaticsManager.dodgeCheck(event);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (Unarmed.pvpEnabled && heldItem.getType() == Material.AIR && Permissions.deflect(player)) {
 | 
			
		||||
                    UnarmedManager unarmedManager = new UnarmedManager(player);
 | 
			
		||||
                    UnarmedManager unarmedManager = new UnarmedManager(Users.getPlayer(player));
 | 
			
		||||
                    unarmedManager.deflectCheck(event);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                if (Swords.pveEnabled && damager instanceof LivingEntity && ItemChecks.isSword(heldItem) && Permissions.counterAttack(player)) {
 | 
			
		||||
                    SwordsManager swordsManager = new SwordsManager(player);
 | 
			
		||||
                    SwordsManager swordsManager = new SwordsManager(Users.getPlayer(player));
 | 
			
		||||
                    swordsManager.counterAttackChecks((LivingEntity) damager, event.getDamage());
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (Acrobatics.pveEnabled && !(damager instanceof LightningStrike && Acrobatics.dodgeLightningDisabled) && Permissions.dodge(player)) {
 | 
			
		||||
                    AcrobaticsManager acrobaticsManager = new AcrobaticsManager(player);
 | 
			
		||||
                    AcrobaticsManager acrobaticsManager = new AcrobaticsManager(Users.getPlayer(player));
 | 
			
		||||
                    acrobaticsManager.dodgeCheck(event);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -299,7 +304,8 @@ public final class CombatTools {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (Permissions.archery(shooter)) {
 | 
			
		||||
            ArcheryManager archeryManager = new ArcheryManager(shooter);
 | 
			
		||||
            McMMOPlayer mcMMOPlayer = Users.getPlayer(shooter);
 | 
			
		||||
            ArcheryManager archeryManager = new ArcheryManager(mcMMOPlayer);
 | 
			
		||||
            archeryManager.skillShot(event);
 | 
			
		||||
 | 
			
		||||
            if (target instanceof Player && Permissions.daze(shooter)) {
 | 
			
		||||
@@ -312,7 +318,7 @@ public final class CombatTools {
 | 
			
		||||
 | 
			
		||||
            if (target != shooter) {
 | 
			
		||||
                archeryManager.distanceXpBonus(target);
 | 
			
		||||
                startGainXp(shooter, archeryManager.getProfile(), target, SkillType.ARCHERY);
 | 
			
		||||
                startGainXp(mcMMOPlayer, target, SkillType.ARCHERY);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -430,12 +436,11 @@ public final class CombatTools {
 | 
			
		||||
    /**
 | 
			
		||||
     * Start the task that gives combat XP.
 | 
			
		||||
     *
 | 
			
		||||
     * @param attacker The attacking player
 | 
			
		||||
     * @param profile The player's PlayerProfile
 | 
			
		||||
     * @param mcMMOPlayer The attacking player
 | 
			
		||||
     * @param target The defending entity
 | 
			
		||||
     * @param skillType The skill being used
 | 
			
		||||
     */
 | 
			
		||||
    public static void startGainXp(Player attacker, PlayerProfile profile, LivingEntity target, SkillType skillType) {
 | 
			
		||||
    public static void startGainXp(McMMOPlayer mcMMOPlayer, LivingEntity target, SkillType skillType) {
 | 
			
		||||
        double baseXP = 0;
 | 
			
		||||
 | 
			
		||||
        if (target instanceof Player) {
 | 
			
		||||
@@ -546,7 +551,7 @@ public final class CombatTools {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (baseXP != 0) {
 | 
			
		||||
            mcMMO.p.getServer().getScheduler().scheduleSyncDelayedTask(mcMMO.p, new GainXp(attacker, profile, skillType, baseXP, target), 0);
 | 
			
		||||
            mcMMO.p.getServer().getScheduler().scheduleSyncDelayedTask(mcMMO.p, new CombatXpGiver(mcMMOPlayer, skillType, baseXP, target), 0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@ import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
			
		||||
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.mods.ModChecks;
 | 
			
		||||
import com.gmail.nossr50.party.ShareHandler;
 | 
			
		||||
import com.gmail.nossr50.spout.SpoutConfig;
 | 
			
		||||
import com.gmail.nossr50.spout.SpoutTools;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
@@ -230,7 +229,7 @@ public class SkillTools {
 | 
			
		||||
 | 
			
		||||
            while (profile.getSkillXpLevel(skillType) >= profile.getXpToLevel(skillType)) {
 | 
			
		||||
                if ((skillType.getMaxLevel() >= profile.getSkillLevel(skillType) + 1) && (Misc.getPowerLevelCap() >= Users.getPlayer(player).getPowerLevel() + 1)) {
 | 
			
		||||
                    profile.removeXP(skillType, profile.getXpToLevel(skillType));
 | 
			
		||||
                    profile.removeXp(skillType, profile.getXpToLevel(skillType));
 | 
			
		||||
                    skillups++;
 | 
			
		||||
                    profile.skillUp(skillType, 1);
 | 
			
		||||
 | 
			
		||||
@@ -510,26 +509,4 @@ public class SkillTools {
 | 
			
		||||
 | 
			
		||||
        return activate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle the processing of XP gain from individual skills.
 | 
			
		||||
     *
 | 
			
		||||
     * @param player The player that gained XP
 | 
			
		||||
     * @param profile The profile of the player gaining XP
 | 
			
		||||
     * @param type The type of skill to gain XP from
 | 
			
		||||
     * @param xp the amount of XP to gain
 | 
			
		||||
     */
 | 
			
		||||
    public static void xpProcessing(Player player, PlayerProfile profile, SkillType type, int xp) {
 | 
			
		||||
        if ((type.getMaxLevel() < profile.getSkillLevel(type) + 1) || (Misc.getPowerLevelCap() < Users.getPlayer(player).getPowerLevel() + 1)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (profile.inParty()) {
 | 
			
		||||
            xp = (int) ShareHandler.checkXpSharing(xp, player, profile.getParty());
 | 
			
		||||
            ShareHandler.handleEqualExpShare(xp, player, profile.getParty(), type);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Users.getPlayer(player).addXP(type, xp);
 | 
			
		||||
        xpCheckSkill(type, player, profile);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,16 +12,15 @@ import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
import com.gmail.nossr50.mods.ModChecks;
 | 
			
		||||
import com.gmail.nossr50.mods.datatypes.CustomBlock;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.CombatTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.skills.woodcutting.Woodcutting.ExperienceGainMethod;
 | 
			
		||||
import com.gmail.nossr50.util.BlockChecks;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Users;
 | 
			
		||||
 | 
			
		||||
public final class TreeFeller {
 | 
			
		||||
    private static boolean treeFellerReachedThreshold = false;
 | 
			
		||||
@@ -31,10 +30,10 @@ public final class TreeFeller {
 | 
			
		||||
    /**
 | 
			
		||||
     * Begins Tree Feller
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player using Tree Feller
 | 
			
		||||
     * @param mcMMOPlayer Player using Tree Feller
 | 
			
		||||
     * @param block Block being broken
 | 
			
		||||
     */
 | 
			
		||||
    public static void process(Player player, Block block) {
 | 
			
		||||
    public static void process(McMMOPlayer mcMMOPlayer, Block block) {
 | 
			
		||||
        List<Block> treeFellerBlocks = new ArrayList<Block>();
 | 
			
		||||
 | 
			
		||||
        processRecursively(block, treeFellerBlocks);
 | 
			
		||||
@@ -43,13 +42,15 @@ public final class TreeFeller {
 | 
			
		||||
        if (treeFellerReachedThreshold) {
 | 
			
		||||
            treeFellerReachedThreshold = false;
 | 
			
		||||
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Woodcutting.Skills.TreeFellerThreshold"));
 | 
			
		||||
            mcMMOPlayer.getPlayer().sendMessage(LocaleLoader.getString("Woodcutting.Skills.TreeFellerThreshold"));
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        // If the tool can't sustain the durability loss
 | 
			
		||||
        if (!handleDurabilityLoss(treeFellerBlocks, player)) {
 | 
			
		||||
            player.sendMessage(LocaleLoader.getString("Woodcutting.Skills.TreeFeller.Splinter"));
 | 
			
		||||
        if (!handleDurabilityLoss(treeFellerBlocks, player.getItemInHand())) {
 | 
			
		||||
            mcMMOPlayer.getPlayer().sendMessage(LocaleLoader.getString("Woodcutting.Skills.TreeFeller.Splinter"));
 | 
			
		||||
 | 
			
		||||
            int health = player.getHealth();
 | 
			
		||||
 | 
			
		||||
@@ -60,7 +61,7 @@ public final class TreeFeller {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dropBlocks(treeFellerBlocks, player);
 | 
			
		||||
        dropBlocks(treeFellerBlocks, mcMMOPlayer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -129,11 +130,10 @@ public final class TreeFeller {
 | 
			
		||||
     * Handles the durability loss
 | 
			
		||||
     *
 | 
			
		||||
     * @param treeFellerBlocks List of blocks to be removed
 | 
			
		||||
     * @param player Player using the ability
 | 
			
		||||
     * @param inHand tool being used
 | 
			
		||||
     * @return True if the tool can sustain the durability loss
 | 
			
		||||
     */
 | 
			
		||||
    private static boolean handleDurabilityLoss(List<Block> treeFellerBlocks, Player player) {
 | 
			
		||||
        ItemStack inHand = player.getItemInHand();
 | 
			
		||||
    private static boolean handleDurabilityLoss(List<Block> treeFellerBlocks, ItemStack inHand) {
 | 
			
		||||
        Material inHandMaterial = inHand.getType();
 | 
			
		||||
 | 
			
		||||
        if (inHandMaterial != Material.AIR) {
 | 
			
		||||
@@ -164,19 +164,19 @@ public final class TreeFeller {
 | 
			
		||||
     * Handles the dropping of blocks
 | 
			
		||||
     *
 | 
			
		||||
     * @param treeFellerBlocks List of blocks to be dropped
 | 
			
		||||
     * @param player Player using the ability
 | 
			
		||||
     * @param mcMMOPlayer Player using the ability
 | 
			
		||||
     */
 | 
			
		||||
    private static void dropBlocks(List<Block> treeFellerBlocks, Player player) {
 | 
			
		||||
    private static void dropBlocks(List<Block> treeFellerBlocks, McMMOPlayer mcMMOPlayer) {
 | 
			
		||||
        int xp = 0;
 | 
			
		||||
 | 
			
		||||
        for (Block block : treeFellerBlocks) {
 | 
			
		||||
            if (!Misc.blockBreakSimulate(block, player, true)) {
 | 
			
		||||
            if (!Misc.blockBreakSimulate(block, mcMMOPlayer.getPlayer(), true)) {
 | 
			
		||||
                break; // TODO: Shouldn't we use continue instead?
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            switch (block.getType()) {
 | 
			
		||||
            case LOG:
 | 
			
		||||
                Woodcutting.checkForDoubleDrop(player, block);
 | 
			
		||||
                Woodcutting.checkForDoubleDrop(mcMMOPlayer, block);
 | 
			
		||||
 | 
			
		||||
                try {
 | 
			
		||||
                    xp += Woodcutting.getExperienceFromLog(block, ExperienceGainMethod.TREE_FELLER);
 | 
			
		||||
@@ -192,7 +192,7 @@ public final class TreeFeller {
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                if (ModChecks.isCustomLogBlock(block)) {
 | 
			
		||||
                    Woodcutting.checkForDoubleDrop(player, block);
 | 
			
		||||
                    Woodcutting.checkForDoubleDrop(mcMMOPlayer, block);
 | 
			
		||||
 | 
			
		||||
                    CustomBlock customBlock = ModChecks.getCustomBlock(block);
 | 
			
		||||
                    xp = customBlock.getXpGain();
 | 
			
		||||
@@ -220,6 +220,6 @@ public final class TreeFeller {
 | 
			
		||||
            block.setType(Material.AIR);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player, Users.getProfile(player), SkillType.WOODCUTTING, xp);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.WOODCUTTING, xp);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,16 +6,15 @@ import org.bukkit.Sound;
 | 
			
		||||
import org.bukkit.TreeSpecies;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.block.BlockBreakEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
 | 
			
		||||
import com.gmail.nossr50.mods.ModChecks;
 | 
			
		||||
import com.gmail.nossr50.mods.datatypes.CustomBlock;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillTools;
 | 
			
		||||
import com.gmail.nossr50.skills.utilities.SkillType;
 | 
			
		||||
import com.gmail.nossr50.util.Misc;
 | 
			
		||||
import com.gmail.nossr50.util.Permissions;
 | 
			
		||||
@@ -35,10 +34,11 @@ public final class Woodcutting {
 | 
			
		||||
    /**
 | 
			
		||||
     * Begins the Tree Feller ability
 | 
			
		||||
     *
 | 
			
		||||
     * @param event Event to process
 | 
			
		||||
     * @param mcMMOPlayer Player using the ability
 | 
			
		||||
     * @param block Block being broken
 | 
			
		||||
     */
 | 
			
		||||
    public static void beginTreeFeller(BlockBreakEvent event) {
 | 
			
		||||
        TreeFeller.process(event.getPlayer(), event.getBlock());
 | 
			
		||||
    public static void beginTreeFeller(McMMOPlayer mcMMOPlayer, Block block) {
 | 
			
		||||
        TreeFeller.process(mcMMOPlayer, block);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -56,10 +56,10 @@ public final class Woodcutting {
 | 
			
		||||
    /**
 | 
			
		||||
     * Begins Woodcutting
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player breaking the block
 | 
			
		||||
     * @param mcMMOPlayer Player breaking the block
 | 
			
		||||
     * @param block Block being broken
 | 
			
		||||
     */
 | 
			
		||||
    public static void beginWoodcutting(Player player, Block block) {
 | 
			
		||||
    public static void beginWoodcutting(McMMOPlayer mcMMOPlayer, Block block) {
 | 
			
		||||
        int xp = 0;
 | 
			
		||||
 | 
			
		||||
        if (Config.getInstance().getBlockModsEnabled() && ModChecks.isCustomLogBlock(block)) {
 | 
			
		||||
@@ -74,11 +74,13 @@ public final class Woodcutting {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        if (Permissions.woodcuttingDoubleDrops(player)) {
 | 
			
		||||
            checkForDoubleDrop(player, block);
 | 
			
		||||
            checkForDoubleDrop(mcMMOPlayer, block);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SkillTools.xpProcessing(player,  Users.getProfile(player), SkillType.WOODCUTTING, xp);
 | 
			
		||||
        mcMMOPlayer.addXp(SkillType.WOODCUTTING, xp);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -122,13 +124,13 @@ public final class Woodcutting {
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks for double drops
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player breaking the block
 | 
			
		||||
     * @param mcMMOPlayer Player breaking the block
 | 
			
		||||
     * @param block Block being broken
 | 
			
		||||
     */
 | 
			
		||||
    protected static void checkForDoubleDrop(Player player, Block block) {
 | 
			
		||||
    protected static void checkForDoubleDrop(McMMOPlayer mcMMOPlayer, Block block) {
 | 
			
		||||
        Player player = mcMMOPlayer.getPlayer();
 | 
			
		||||
        double configDoubleDropChance = ADVANCED_CONFIG.getWoodcuttingDoubleDropChance();
 | 
			
		||||
        int configDoubleDropMaxLevel = ADVANCED_CONFIG.getWoodcuttingDoubleDropMaxLevel();
 | 
			
		||||
 | 
			
		||||
        int probability = (int) ((configDoubleDropChance / configDoubleDropMaxLevel) * Users.getProfile(player).getSkillLevel(SkillType.WOODCUTTING));
 | 
			
		||||
        int activationChance = Misc.calculateActivationChance(Permissions.luckyWoodcutting(player));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -87,6 +87,7 @@ public final class Users {
 | 
			
		||||
     * @param player The player whose profile to retrieve
 | 
			
		||||
     * @return the player's profile
 | 
			
		||||
     */
 | 
			
		||||
    @Deprecated
 | 
			
		||||
    public static PlayerProfile getProfile(OfflinePlayer player) {
 | 
			
		||||
        return getProfile(player.getName());
 | 
			
		||||
    }
 | 
			
		||||
@@ -97,6 +98,7 @@ public final class Users {
 | 
			
		||||
     * @param playerName The name of the player whose profile to retrieve
 | 
			
		||||
     * @return the player's profile
 | 
			
		||||
     */
 | 
			
		||||
    @Deprecated
 | 
			
		||||
    public static PlayerProfile getProfile(String playerName) {
 | 
			
		||||
        McMMOPlayer mcmmoPlayer = players.get(playerName);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user