mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 11:03:43 +01:00 
			
		
		
		
	annotate messaging classes + update more things to use mmoPlayer
This commit is contained in:
		@@ -43,7 +43,7 @@ public class ExcavationCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
    protected @NotNull List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
        List<String> messages = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        ExcavationManager excavationManager = mmoPlayer.getExcavationManager();
 | 
			
		||||
@@ -67,7 +67,7 @@ public class ExcavationCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
    protected @NotNull List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
        List<Component> textComponents = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        TextComponentFactory.getSubSkillTextComponents(mmoPlayer, textComponents, PrimarySkillType.EXCAVATION);
 | 
			
		||||
 
 | 
			
		||||
@@ -107,7 +107,7 @@ public class FishingCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
    protected @NotNull List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
        List<String> messages = new ArrayList<>();
 | 
			
		||||
        
 | 
			
		||||
        if (canFishermansDiet) {
 | 
			
		||||
@@ -152,7 +152,7 @@ public class FishingCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
    protected @NotNull List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
        List<Component> textComponents = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        TextComponentFactory.getSubSkillTextComponents(mmoPlayer, textComponents, PrimarySkillType.FISHING);
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ public class MiningCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
    protected @NotNull List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
        List<String> messages = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        if (canBiggerBombs) {
 | 
			
		||||
@@ -111,7 +111,7 @@ public class MiningCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
    protected @NotNull List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
        List<Component> textComponents = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        TextComponentFactory.getSubSkillTextComponents(mmoPlayer, textComponents, PrimarySkillType.MINING);
 | 
			
		||||
 
 | 
			
		||||
@@ -91,7 +91,7 @@ public class RepairCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
    protected @NotNull List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
        List<String> messages = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        if (canArcaneForge) {
 | 
			
		||||
@@ -122,7 +122,7 @@ public class RepairCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
    protected @NotNull List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
        List<Component> textComponents = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        TextComponentFactory.getSubSkillTextComponents(mmoPlayer, textComponents, PrimarySkillType.REPAIR);
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ public class SalvageCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
    protected @NotNull List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
        List<String> messages = new ArrayList<>();
 | 
			
		||||
        SalvageManager salvageManager = mmoPlayer.getSalvageManager();
 | 
			
		||||
 | 
			
		||||
@@ -65,7 +65,7 @@ public class SalvageCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
    protected @NotNull List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
        List<Component> textComponents = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        TextComponentFactory.getSubSkillTextComponents(mmoPlayer, textComponents, PrimarySkillType.SALVAGE);
 | 
			
		||||
 
 | 
			
		||||
@@ -67,7 +67,7 @@ public abstract class SkillCommand implements TabExecutor {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (args.length == 0) {
 | 
			
		||||
            Player player = (Player) sender;
 | 
			
		||||
            Player player = mmoPlayer.getPlayer();
 | 
			
		||||
 | 
			
		||||
            boolean isLucky = Permissions.lucky(player, skill);
 | 
			
		||||
            boolean hasEndurance = (PerksUtils.handleActivationPerks(player, 0, 0) != 0);
 | 
			
		||||
@@ -79,7 +79,7 @@ public abstract class SkillCommand implements TabExecutor {
 | 
			
		||||
                    player.sendMessage("");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            permissionsCheck(player);
 | 
			
		||||
            permissionsCheck(mmoPlayer);
 | 
			
		||||
            dataCalculations(mmoPlayer, skillValue);
 | 
			
		||||
 | 
			
		||||
            sendSkillCommandHeader(player, mmoPlayer, (int) skillValue);
 | 
			
		||||
@@ -209,7 +209,7 @@ public abstract class SkillCommand implements TabExecutor {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) {
 | 
			
		||||
    public @NotNull List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) {
 | 
			
		||||
        if (args.length == 1) {
 | 
			
		||||
            return ImmutableList.of("?");
 | 
			
		||||
        }
 | 
			
		||||
@@ -220,11 +220,11 @@ public abstract class SkillCommand implements TabExecutor {
 | 
			
		||||
        return Math.min((int) skillValue, maxLevel) / rankChangeLevel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected String[] getAbilityDisplayValues(@NotNull SkillActivationType skillActivationType, @NotNull McMMOPlayer mmoPlayer, @NotNull SubSkillType subSkill) {
 | 
			
		||||
    protected @NotNull String[] getAbilityDisplayValues(@NotNull SkillActivationType skillActivationType, @NotNull McMMOPlayer mmoPlayer, @NotNull SubSkillType subSkill) {
 | 
			
		||||
        return RandomChanceUtil.calculateAbilityDisplayValues(skillActivationType, mmoPlayer.getPlayer(), subSkill);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected String[] calculateLengthDisplayValues(@NotNull McMMOPlayer mmoPlayer, float skillValue) {
 | 
			
		||||
    protected @NotNull String[] calculateLengthDisplayValues(@NotNull McMMOPlayer mmoPlayer, float skillValue) {
 | 
			
		||||
        int maxLength = skill.getSuperAbilityType().getMaxLength();
 | 
			
		||||
        int abilityLengthVar = AdvancedConfig.getInstance().getAbilityLength();
 | 
			
		||||
        int abilityLengthCap = AdvancedConfig.getInstance().getAbilityLengthCap();
 | 
			
		||||
@@ -248,12 +248,12 @@ public abstract class SkillCommand implements TabExecutor {
 | 
			
		||||
        return new String[] { String.valueOf(length), String.valueOf(enduranceLength) };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected String getStatMessage(SubSkillType subSkillType, String... vars)
 | 
			
		||||
    protected @NotNull String getStatMessage(SubSkillType subSkillType, String... vars)
 | 
			
		||||
    {
 | 
			
		||||
        return getStatMessage(false, false, subSkillType, vars);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected String getStatMessage(boolean isExtra, boolean isCustom, SubSkillType subSkillType, String... vars)
 | 
			
		||||
    protected @NotNull String getStatMessage(boolean isExtra, boolean isCustom, SubSkillType subSkillType, String... vars)
 | 
			
		||||
    {
 | 
			
		||||
        String templateKey = isCustom ? "Ability.Generic.Template.Custom" : "Ability.Generic.Template";
 | 
			
		||||
        String statDescriptionKey = !isExtra ? subSkillType.getLocaleKeyStatDescription() : subSkillType.getLocaleKeyStatExtraDescription();
 | 
			
		||||
@@ -277,13 +277,13 @@ public abstract class SkillCommand implements TabExecutor {
 | 
			
		||||
 | 
			
		||||
    protected abstract void dataCalculations(@NotNull McMMOPlayer mmoPlayer, float skillValue);
 | 
			
		||||
 | 
			
		||||
    protected abstract void permissionsCheck(@NotNull Player player);
 | 
			
		||||
    protected abstract void permissionsCheck(@NotNull McMMOPlayer mmoPlayer);
 | 
			
		||||
 | 
			
		||||
    //protected abstract List<String> effectsDisplay();
 | 
			
		||||
 | 
			
		||||
    protected abstract List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky);
 | 
			
		||||
    protected abstract @NotNull List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky);
 | 
			
		||||
 | 
			
		||||
    protected abstract List<Component> getTextComponents(@NotNull McMMOPlayer player);
 | 
			
		||||
    protected abstract @NotNull List<Component> getTextComponents(@NotNull McMMOPlayer player);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if a player can use a skill
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ public class SmeltingCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
    protected @NotNull List<String> statsDisplay(@NotNull McMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) {
 | 
			
		||||
        List<String> messages = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        /*if (canFluxMine) {
 | 
			
		||||
@@ -88,7 +88,7 @@ public class SmeltingCommand extends SkillCommand {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
    protected @NotNull List<Component> getTextComponents(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
        List<Component> textComponents = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        TextComponentFactory.getSubSkillTextComponents(mmoPlayer, textComponents, PrimarySkillType.SMELTING);
 | 
			
		||||
 
 | 
			
		||||
@@ -38,15 +38,20 @@ import net.kyori.adventure.identity.Identity;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.metadata.FixedMetadataValue;
 | 
			
		||||
import org.bukkit.permissions.Permissible;
 | 
			
		||||
import org.bukkit.permissions.Permission;
 | 
			
		||||
import org.bukkit.permissions.PermissionAttachment;
 | 
			
		||||
import org.bukkit.permissions.PermissionAttachmentInfo;
 | 
			
		||||
import org.bukkit.plugin.Plugin;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
public class McMMOPlayer extends PlayerProfile implements Identified {
 | 
			
		||||
public class McMMOPlayer extends PlayerProfile implements Identified, Permissible {
 | 
			
		||||
    private final @NotNull Player player;
 | 
			
		||||
    private final @NotNull Identity identity;
 | 
			
		||||
    private @Nullable Party playerPartyRef;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
package com.gmail.nossr50.datatypes.skills.subskills.interfaces;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.interfaces.Skill;
 | 
			
		||||
import net.kyori.adventure.text.TextComponent;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
public interface SubSkill extends Skill {
 | 
			
		||||
    /**
 | 
			
		||||
@@ -59,9 +61,9 @@ public interface SubSkill extends Skill {
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds detailed stats specific to this skill
 | 
			
		||||
     * @param componentBuilder target component builder
 | 
			
		||||
     * @param player owner of this skill
 | 
			
		||||
     * @param mmoPlayer owner of this skill
 | 
			
		||||
     */
 | 
			
		||||
    void addStats(TextComponent.Builder componentBuilder, Player player);
 | 
			
		||||
    void addStats(TextComponent.Builder componentBuilder, @NotNull McMMOPlayer mmoPlayer);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Whether or not this subskill is enabled
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ import org.bukkit.Server;
 | 
			
		||||
import org.bukkit.SoundCategory;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
public class NotificationManager {
 | 
			
		||||
    /**
 | 
			
		||||
@@ -34,9 +35,11 @@ public class NotificationManager {
 | 
			
		||||
     * @param notificationType notifications defined type
 | 
			
		||||
     * @param key the locale key for the notifications defined message
 | 
			
		||||
     */
 | 
			
		||||
    public static void sendPlayerInformation(Player player, NotificationType notificationType, String key)
 | 
			
		||||
    public static void sendPlayerInformation(@NotNull Player player, @NotNull NotificationType notificationType, @NotNull String key)
 | 
			
		||||
    {
 | 
			
		||||
        if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
 | 
			
		||||
        McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
 | 
			
		||||
 | 
			
		||||
        if(mmoPlayer == null || !mmoPlayer.hasSkillChatNotifications())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        McMMOMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM;
 | 
			
		||||
@@ -48,40 +51,47 @@ public class NotificationManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static boolean doesPlayerUseNotifications(Player player)
 | 
			
		||||
    public static boolean doesPlayerUseNotifications(@NotNull Player player)
 | 
			
		||||
    {
 | 
			
		||||
        if(mcMMO.getUserManager().queryPlayer(player) == null)
 | 
			
		||||
        McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
 | 
			
		||||
 | 
			
		||||
        if(mmoPlayer == null)
 | 
			
		||||
            return false;
 | 
			
		||||
        else
 | 
			
		||||
            return mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications();
 | 
			
		||||
            return mmoPlayer.hasSkillChatNotifications();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sends players notifications from mcMMO
 | 
			
		||||
     * This does this by sending out an event so other plugins can cancel it
 | 
			
		||||
     * This event in particular is provided with a source player, and players near the source player are sent the information
 | 
			
		||||
     *
 | 
			
		||||
     * @param targetPlayer the recipient player for this message
 | 
			
		||||
     * @param notificationType type of notification
 | 
			
		||||
     * @param key Locale Key for the string to use with this event
 | 
			
		||||
     * @param values values to be injected into the locale string
 | 
			
		||||
     */
 | 
			
		||||
    public static void sendNearbyPlayersInformation(Player targetPlayer, NotificationType notificationType, String key, String... values)
 | 
			
		||||
    public static void sendNearbyPlayersInformation(@NotNull Player targetPlayer, @NotNull NotificationType notificationType, @NotNull String key, String... values)
 | 
			
		||||
    {
 | 
			
		||||
        sendPlayerInformation(targetPlayer, notificationType, key, values);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void sendPlayerInformationChatOnly(Player player, String key, String... values)
 | 
			
		||||
    public static void sendPlayerInformationChatOnly(@NotNull Player player, @NotNull String key, String... values)
 | 
			
		||||
    {
 | 
			
		||||
        if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
 | 
			
		||||
        McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
 | 
			
		||||
 | 
			
		||||
        if(mmoPlayer == null || !mmoPlayer.hasSkillChatNotifications())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        String preColoredString = LocaleLoader.getString(key, (Object[]) values);
 | 
			
		||||
        player.sendMessage(preColoredString);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void sendPlayerInformationChatOnlyPrefixed(Player player, String key, String... values)
 | 
			
		||||
    public static void sendPlayerInformationChatOnlyPrefixed(@NotNull Player player, @NotNull String key, String... values)
 | 
			
		||||
    {
 | 
			
		||||
        if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
 | 
			
		||||
        McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
 | 
			
		||||
 | 
			
		||||
        if(mmoPlayer == null || !mmoPlayer.hasSkillChatNotifications())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        String preColoredString = LocaleLoader.getString(key, (Object[]) values);
 | 
			
		||||
@@ -89,7 +99,7 @@ public class NotificationManager {
 | 
			
		||||
        player.sendMessage(prefixFormattedMessage);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values)
 | 
			
		||||
    public static void sendPlayerInformation(@NotNull Player player, @NotNull NotificationType notificationType, @NotNull String key, String... values)
 | 
			
		||||
    {
 | 
			
		||||
        if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
 | 
			
		||||
            return;
 | 
			
		||||
@@ -102,7 +112,7 @@ public class NotificationManager {
 | 
			
		||||
        sendNotification(player, customEvent);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void sendNotification(Player player, McMMOPlayerNotificationEvent customEvent) {
 | 
			
		||||
    private static void sendNotification(@NotNull Player player, @NotNull McMMOPlayerNotificationEvent customEvent) {
 | 
			
		||||
        if (customEvent.isCancelled())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
@@ -152,7 +162,7 @@ public class NotificationManager {
 | 
			
		||||
        sendNotification(mmoPlayer.getPlayer(), customEvent);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void broadcastTitle(Server server, String title, String subtitle, int i1, int i2, int i3)
 | 
			
		||||
    public static void broadcastTitle(@NotNull Server server, @NotNull String title, @NotNull String subtitle, int i1, int i2, int i3)
 | 
			
		||||
    {
 | 
			
		||||
        for(Player player : server.getOnlinePlayers())
 | 
			
		||||
        {
 | 
			
		||||
@@ -160,13 +170,13 @@ public class NotificationManager {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void sendPlayerUnlockNotification(McMMOPlayer mmoPlayer, SubSkillType subSkillType)
 | 
			
		||||
    public static void sendPlayerUnlockNotification(@NotNull McMMOPlayer mmoPlayer, @NotNull SubSkillType subSkillType)
 | 
			
		||||
    {
 | 
			
		||||
        if(!mmoPlayer.hasSkillChatNotifications())
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        //CHAT MESSAGE
 | 
			
		||||
        mcMMO.getAudiences().player(mmoPlayer.getPlayer()).sendMessage(Identity.nil(), TextComponentFactory.getSubSkillUnlockedNotificationComponents(mmoPlayer.getPlayer(), subSkillType));
 | 
			
		||||
        mcMMO.getAudiences().player(mmoPlayer.getPlayer()).sendMessage(Identity.nil(), TextComponentFactory.getSubSkillUnlockedNotificationComponents(mmoPlayer, subSkillType));
 | 
			
		||||
 | 
			
		||||
        //Unlock Sound Effect
 | 
			
		||||
        SoundManager.sendCategorizedSound(mmoPlayer.getPlayer(), mmoPlayer.getPlayer().getLocation(), SoundType.SKILL_UNLOCKED, SoundCategory.MASTER);
 | 
			
		||||
@@ -184,7 +194,7 @@ public class NotificationManager {
 | 
			
		||||
     * Admins are currently players with either Operator status or Admin Chat permission
 | 
			
		||||
     * @param msg message fetched from locale
 | 
			
		||||
     */
 | 
			
		||||
    private static void sendAdminNotification(String msg) {
 | 
			
		||||
    private static void sendAdminNotification(@NotNull String msg) {
 | 
			
		||||
        //If its not enabled exit
 | 
			
		||||
        if(!Config.getInstance().adminNotifications())
 | 
			
		||||
            return;
 | 
			
		||||
@@ -206,7 +216,7 @@ public class NotificationManager {
 | 
			
		||||
     * @param commandSender target command sender
 | 
			
		||||
     * @param msg message fetched from locale
 | 
			
		||||
     */
 | 
			
		||||
    private static void sendAdminCommandConfirmation(CommandSender commandSender, String msg) {
 | 
			
		||||
    private static void sendAdminCommandConfirmation(@NotNull CommandSender commandSender, @NotNull String msg) {
 | 
			
		||||
        commandSender.sendMessage(LocaleLoader.getString("Notifications.Admin.Format.Self", msg));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -215,7 +225,7 @@ public class NotificationManager {
 | 
			
		||||
     * @param commandSender the command user
 | 
			
		||||
     * @param sensitiveCommandType type of command issued
 | 
			
		||||
     */
 | 
			
		||||
    public static void processSensitiveCommandNotification(CommandSender commandSender, SensitiveCommandType sensitiveCommandType, String... args) {
 | 
			
		||||
    public static void processSensitiveCommandNotification(@NotNull CommandSender commandSender, @NotNull SensitiveCommandType sensitiveCommandType, String... args) {
 | 
			
		||||
        /*
 | 
			
		||||
         * Determine the 'identity' of the one who executed the command to pass as a parameters
 | 
			
		||||
         */
 | 
			
		||||
@@ -247,7 +257,7 @@ public class NotificationManager {
 | 
			
		||||
     * @param existingArray the existing array to be copied to the new array at position [0]+1 relative to their original index
 | 
			
		||||
     * @return the new array combining itemToAdd at the start and existing array elements following while retaining their order
 | 
			
		||||
     */
 | 
			
		||||
    public static String[] addItemToFirstPositionOfArray(String itemToAdd, String... existingArray) {
 | 
			
		||||
    public static @NotNull String[] addItemToFirstPositionOfArray(@NotNull String itemToAdd, @NotNull String... existingArray) {
 | 
			
		||||
        String[] newArray = new String[existingArray.length + 1];
 | 
			
		||||
        newArray[0] = itemToAdd;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package com.gmail.nossr50.util.random;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
 | 
			
		||||
@@ -327,7 +328,7 @@ public class RandomChanceUtil
 | 
			
		||||
        return displayValues;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String[] calculateAbilityDisplayValuesStatic(Player player, PrimarySkillType primarySkillType, double chance) {
 | 
			
		||||
    public static String[] calculateAbilityDisplayValuesStatic(@NotNull McMMOPlayer mmoPlayer, PrimarySkillType primarySkillType, double chance) {
 | 
			
		||||
        RandomChanceStatic rcs = new RandomChanceStatic(chance, false);
 | 
			
		||||
        double successChance = getRandomChanceExecutionChance(rcs);
 | 
			
		||||
 | 
			
		||||
@@ -336,7 +337,7 @@ public class RandomChanceUtil
 | 
			
		||||
 | 
			
		||||
        String[] displayValues = new String[2];
 | 
			
		||||
 | 
			
		||||
        boolean isLucky = Permissions.lucky(player, primarySkillType);
 | 
			
		||||
        boolean isLucky = Permissions.lucky(mmoPlayer.getPlayer(), primarySkillType);
 | 
			
		||||
 | 
			
		||||
        displayValues[0] = percent.format(Math.min(successChance, 100.0D) / 100.0D);
 | 
			
		||||
        displayValues[1] = isLucky ? percent.format(Math.min(successChance_lucky, 100.0D) / 100.0D) : null;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.config.RankConfig;
 | 
			
		||||
import com.gmail.nossr50.datatypes.json.McMMOUrl;
 | 
			
		||||
import com.gmail.nossr50.datatypes.json.McMMOWebLinks;
 | 
			
		||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
 | 
			
		||||
@@ -38,31 +39,31 @@ public class TextComponentFactory {
 | 
			
		||||
     * Makes a text component using strings from a locale and supports passing an undefined number of variables to the LocaleLoader
 | 
			
		||||
     * @param localeKey target locale string address
 | 
			
		||||
     * @param values vars to be passed to the locale loader
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public static TextComponent getNotificationMultipleValues(String localeKey, String... values)
 | 
			
		||||
    public static TextComponent getNotificationMultipleValues(@NotNull String localeKey, String... values)
 | 
			
		||||
    {
 | 
			
		||||
        String preColoredString = LocaleLoader.getString(localeKey, (Object[]) values);
 | 
			
		||||
        return Component.text(preColoredString);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Component getNotificationTextComponentFromLocale(String localeKey)
 | 
			
		||||
    public static Component getNotificationTextComponentFromLocale(@NotNull String localeKey)
 | 
			
		||||
    {
 | 
			
		||||
        return getNotificationTextComponent(LocaleLoader.getString(localeKey));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Component getNotificationLevelUpTextComponent(PrimarySkillType skill, int levelsGained, int currentLevel)
 | 
			
		||||
    public static Component getNotificationLevelUpTextComponent(@NotNull PrimarySkillType skill, int levelsGained, int currentLevel)
 | 
			
		||||
    {
 | 
			
		||||
        return Component.text(LocaleLoader.getString("Overhaul.Levelup", LocaleLoader.getString("Overhaul.Name."+ StringUtils.getCapitalized(skill.toString())), levelsGained, currentLevel));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static TextComponent getNotificationTextComponent(String text)
 | 
			
		||||
    private static TextComponent getNotificationTextComponent(@NotNull String text)
 | 
			
		||||
    {
 | 
			
		||||
        //textComponent.setColor(getNotificationColor(notificationType));
 | 
			
		||||
        return Component.text(text);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void sendPlayerSubSkillWikiLink(Player player, String subskillformatted)
 | 
			
		||||
    public static void sendPlayerSubSkillWikiLink(McMMOPlayer mmoPlayer, String subskillformatted)
 | 
			
		||||
    {
 | 
			
		||||
        if(!Config.getInstance().getUrlLinksEnabled())
 | 
			
		||||
            return;
 | 
			
		||||
@@ -78,10 +79,10 @@ public class TextComponentFactory {
 | 
			
		||||
 | 
			
		||||
        wikiLinkComponent.hoverEvent(HoverEvent.showText(componentBuilder.build()));
 | 
			
		||||
 | 
			
		||||
        mcMMO.getAudiences().player(player).sendMessage(Identity.nil(), wikiLinkComponent, MessageType.SYSTEM);
 | 
			
		||||
        mcMMO.getAudiences().player(mmoPlayer.getPlayer()).sendMessage(Identity.nil(), wikiLinkComponent, MessageType.SYSTEM);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void sendPlayerUrlHeader(Player player) {
 | 
			
		||||
    public static void sendPlayerUrlHeader(@NotNull McMMOPlayer mmoPlayer) {
 | 
			
		||||
        TextComponent prefix = Component.text(LocaleLoader.getString("Overhaul.mcMMO.Url.Wrap.Prefix") + " ");
 | 
			
		||||
        /*prefix.setColor(ChatColor.DARK_AQUA);*/
 | 
			
		||||
        TextComponent suffix = Component.text(" "+LocaleLoader.getString("Overhaul.mcMMO.Url.Wrap.Suffix"));
 | 
			
		||||
@@ -89,7 +90,7 @@ public class TextComponentFactory {
 | 
			
		||||
 | 
			
		||||
        TextComponent emptySpace = Component.space();
 | 
			
		||||
 | 
			
		||||
        mcMMO.getAudiences().player(player).sendMessage(Identity.nil(),TextComponent.ofChildren(
 | 
			
		||||
        mcMMO.getAudiences().player(mmoPlayer.getPlayer()).sendMessage(Identity.nil(),TextComponent.ofChildren(
 | 
			
		||||
          prefix,
 | 
			
		||||
          getWebLinkTextComponent(McMMOWebLinks.WEBSITE),
 | 
			
		||||
          emptySpace,
 | 
			
		||||
@@ -135,7 +136,7 @@ public class TextComponentFactory {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Component getWebLinkTextComponent(McMMOWebLinks webLinks)
 | 
			
		||||
    private static Component getWebLinkTextComponent(@NotNull McMMOWebLinks webLinks)
 | 
			
		||||
    {
 | 
			
		||||
        TextComponent.Builder webTextComponent;
 | 
			
		||||
 | 
			
		||||
@@ -181,7 +182,7 @@ public class TextComponentFactory {
 | 
			
		||||
        return webTextComponent.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Component getUrlHoverEvent(McMMOWebLinks webLinks)
 | 
			
		||||
    private static Component getUrlHoverEvent(@NotNull McMMOWebLinks webLinks)
 | 
			
		||||
    {
 | 
			
		||||
        TextComponent.Builder componentBuilder = Component.text().content(webLinks.getNiceTitle());
 | 
			
		||||
 | 
			
		||||
@@ -230,7 +231,7 @@ public class TextComponentFactory {
 | 
			
		||||
        return componentBuilder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void addUrlHeaderHover(McMMOWebLinks webLinks, TextComponent.Builder componentBuilder) {
 | 
			
		||||
    private static void addUrlHeaderHover(@NotNull McMMOWebLinks webLinks, @NotNull TextComponent.Builder componentBuilder) {
 | 
			
		||||
        componentBuilder.append(Component.newline());
 | 
			
		||||
        componentBuilder.append(Component.text(webLinks.getUrl(), NamedTextColor.GRAY, TextDecoration.ITALIC));
 | 
			
		||||
    }
 | 
			
		||||
@@ -240,17 +241,17 @@ public class TextComponentFactory {
 | 
			
		||||
        return ClickEvent.openUrl(url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Component getSubSkillTextComponent(Player player, SubSkillType subSkillType)
 | 
			
		||||
    private static Component getSubSkillTextComponent(@NotNull McMMOPlayer mmoPlayer, @NotNull SubSkillType subSkillType)
 | 
			
		||||
    {
 | 
			
		||||
        //Get skill name
 | 
			
		||||
        String skillName = subSkillType.getLocaleName();
 | 
			
		||||
 | 
			
		||||
        boolean skillUnlocked = RankUtils.hasUnlockedSubskill(player, subSkillType);
 | 
			
		||||
        boolean skillUnlocked = RankUtils.hasUnlockedSubskill(mmoPlayer, subSkillType);
 | 
			
		||||
 | 
			
		||||
        TextComponent.Builder textComponent = initNewSkillTextComponent(player, skillName, subSkillType, skillUnlocked);
 | 
			
		||||
        TextComponent.Builder textComponent = initNewSkillTextComponent(mmoPlayer, skillName, subSkillType, skillUnlocked);
 | 
			
		||||
 | 
			
		||||
        //Hover Event
 | 
			
		||||
        TextUtils.addNewHoverComponentToTextComponent(textComponent, getSubSkillHoverComponent(player, subSkillType));
 | 
			
		||||
        TextUtils.addNewHoverComponentToTextComponent(textComponent, getSubSkillHoverComponent(mmoPlayer, subSkillType));
 | 
			
		||||
 | 
			
		||||
        //Insertion
 | 
			
		||||
        textComponent.insertion(skillName);
 | 
			
		||||
@@ -258,7 +259,7 @@ public class TextComponentFactory {
 | 
			
		||||
        return textComponent.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static TextComponent getSubSkillTextComponent(Player player, AbstractSubSkill abstractSubSkill)
 | 
			
		||||
    private static TextComponent getSubSkillTextComponent(@NotNull McMMOPlayer mmoPlayer, @NotNull AbstractSubSkill abstractSubSkill)
 | 
			
		||||
    {
 | 
			
		||||
        //String key = abstractSubSkill.getConfigKeyName();
 | 
			
		||||
        String skillName = abstractSubSkill.getNiceName();
 | 
			
		||||
@@ -266,12 +267,12 @@ public class TextComponentFactory {
 | 
			
		||||
        //Setup Text Component
 | 
			
		||||
        SubSkillType subSkillType = abstractSubSkill.getSubSkillType();
 | 
			
		||||
 | 
			
		||||
        boolean skillUnlocked = RankUtils.hasUnlockedSubskill(player, subSkillType);
 | 
			
		||||
        boolean skillUnlocked = RankUtils.hasUnlockedSubskill(mmoPlayer, subSkillType);
 | 
			
		||||
 | 
			
		||||
        TextComponent.Builder textComponent = initNewSkillTextComponent(player, skillName, subSkillType, skillUnlocked);
 | 
			
		||||
        TextComponent.Builder textComponent = initNewSkillTextComponent(mmoPlayer, skillName, subSkillType, skillUnlocked);
 | 
			
		||||
 | 
			
		||||
        //Hover Event
 | 
			
		||||
        TextUtils.addNewHoverComponentToTextComponent(textComponent, getSubSkillHoverComponent(player, abstractSubSkill));
 | 
			
		||||
        TextUtils.addNewHoverComponentToTextComponent(textComponent, getSubSkillHoverComponent(mmoPlayer, abstractSubSkill));
 | 
			
		||||
 | 
			
		||||
        //Insertion
 | 
			
		||||
        textComponent.insertion(skillName);
 | 
			
		||||
@@ -279,10 +280,10 @@ public class TextComponentFactory {
 | 
			
		||||
        return textComponent.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static TextComponent.Builder initNewSkillTextComponent(Player player, String skillName, SubSkillType subSkillType, boolean skillUnlocked) {
 | 
			
		||||
    private static TextComponent.Builder initNewSkillTextComponent(@NotNull McMMOPlayer mmoPlayer, @NotNull String skillName, @NotNull SubSkillType subSkillType, boolean skillUnlocked) {
 | 
			
		||||
        TextComponent.Builder textComponent;
 | 
			
		||||
        if (skillUnlocked) {
 | 
			
		||||
            if (RankUtils.getHighestRank(subSkillType) == RankUtils.getRank(player, subSkillType) && subSkillType.getNumRanks() > 1)
 | 
			
		||||
            if (RankUtils.getHighestRank(subSkillType) == RankUtils.getRank(mmoPlayer, subSkillType) && subSkillType.getNumRanks() > 1)
 | 
			
		||||
                textComponent = Component.text().content(LocaleLoader.getString("JSON.Hover.MaxRankSkillName", skillName));
 | 
			
		||||
            else
 | 
			
		||||
                textComponent = Component.text().content(LocaleLoader.getString("JSON.Hover.SkillName", skillName));
 | 
			
		||||
@@ -298,35 +299,29 @@ public class TextComponentFactory {
 | 
			
		||||
        return textComponent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Component getSubSkillHoverComponent(Player player, AbstractSubSkill abstractSubSkill)
 | 
			
		||||
    private static Component getSubSkillHoverComponent(@NotNull McMMOPlayer mmoPlayer, @NotNull AbstractSubSkill abstractSubSkill)
 | 
			
		||||
    {
 | 
			
		||||
        return getSubSkillHoverEventJSON(abstractSubSkill, player);
 | 
			
		||||
        return getSubSkillHoverEventJSON(abstractSubSkill, mmoPlayer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Component getSubSkillHoverComponent(Player player, SubSkillType subSkillType)
 | 
			
		||||
    private static Component getSubSkillHoverComponent(@NotNull McMMOPlayer mmoPlayer, SubSkillType subSkillType)
 | 
			
		||||
    {
 | 
			
		||||
        return getSubSkillHoverEventJSON(subSkillType, player);
 | 
			
		||||
        return getSubSkillHoverEventJSON(subSkillType, mmoPlayer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Used for the skill in the new skill system (Deriving from AbstractSubSkill)
 | 
			
		||||
     * @param abstractSubSkill this subskill
 | 
			
		||||
     * @param player the player who owns this subskill
 | 
			
		||||
     * @param mmoPlayer the player who owns this subskill
 | 
			
		||||
     * @return the hover basecomponent object for this subskill
 | 
			
		||||
     */
 | 
			
		||||
    private static Component getSubSkillHoverEventJSON(AbstractSubSkill abstractSubSkill, Player player)
 | 
			
		||||
    private static Component getSubSkillHoverEventJSON(@NotNull AbstractSubSkill abstractSubSkill, @NotNull McMMOPlayer mmoPlayer)
 | 
			
		||||
    {
 | 
			
		||||
        String skillName = abstractSubSkill.getNiceName();
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * Hover Event BaseComponent color table
 | 
			
		||||
         */
 | 
			
		||||
        TextColor ccSubSkillHeader      = NamedTextColor.GOLD;
 | 
			
		||||
        TextColor ccRank                = NamedTextColor.BLUE;
 | 
			
		||||
        TextColor ccCurRank             = NamedTextColor.GREEN;
 | 
			
		||||
        TextColor ccPossessive          = NamedTextColor.WHITE;
 | 
			
		||||
        //ChatColor ccDescriptionHeader   = ChatColor.DARK_PURPLE;
 | 
			
		||||
        //ChatColor ccDescription         = ChatColor.WHITE;
 | 
			
		||||
        TextColor ccLocked              = NamedTextColor.DARK_GRAY;
 | 
			
		||||
        TextColor ccLevelRequirement    = NamedTextColor.BLUE;
 | 
			
		||||
        TextColor ccLevelRequired       = NamedTextColor.RED;
 | 
			
		||||
@@ -334,9 +329,9 @@ public class TextComponentFactory {
 | 
			
		||||
        SubSkillType subSkillType = abstractSubSkill.getSubSkillType();
 | 
			
		||||
 | 
			
		||||
        //SubSkillType Name
 | 
			
		||||
        TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, abstractSubSkill));
 | 
			
		||||
        TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(mmoPlayer, skillName, subSkillType, RankUtils.hasUnlockedSubskill(mmoPlayer, abstractSubSkill));
 | 
			
		||||
 | 
			
		||||
        if(!RankUtils.hasUnlockedSubskill(player, abstractSubSkill))
 | 
			
		||||
        if(!RankUtils.hasUnlockedSubskill(mmoPlayer, abstractSubSkill))
 | 
			
		||||
        {
 | 
			
		||||
            //Skill is not unlocked yet
 | 
			
		||||
            addLocked(abstractSubSkill, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder);
 | 
			
		||||
@@ -344,7 +339,7 @@ public class TextComponentFactory {
 | 
			
		||||
            addSubSkillTypeToHoverEventJSON(abstractSubSkill, componentBuilder);
 | 
			
		||||
 | 
			
		||||
            //RANK
 | 
			
		||||
            int curRank = RankUtils.getRank(player, abstractSubSkill);
 | 
			
		||||
            int curRank = RankUtils.getRank(mmoPlayer, abstractSubSkill);
 | 
			
		||||
            int nextRank = 0;
 | 
			
		||||
 | 
			
		||||
            if(curRank < abstractSubSkill.getNumRanks() && abstractSubSkill.getNumRanks() > 0)
 | 
			
		||||
@@ -352,7 +347,7 @@ public class TextComponentFactory {
 | 
			
		||||
                nextRank = RankUtils.getRankUnlockLevel(abstractSubSkill, curRank+1);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            addRanked(ccRank, ccCurRank, ccPossessive, ccCurRank, componentBuilder, abstractSubSkill.getNumRanks(), RankUtils.getRank(player, abstractSubSkill), nextRank);
 | 
			
		||||
            addRanked(componentBuilder, abstractSubSkill.getNumRanks(), RankUtils.getRank(mmoPlayer, abstractSubSkill), nextRank);
 | 
			
		||||
 | 
			
		||||
            componentBuilder.append(Component.text(LocaleLoader.getString("JSON.DescriptionHeader")));
 | 
			
		||||
            componentBuilder.append(Component.newline()).append(Component.text(abstractSubSkill.getDescription())).append(Component.newline());
 | 
			
		||||
@@ -362,16 +357,16 @@ public class TextComponentFactory {
 | 
			
		||||
            componentBuilder.append(Component.newline());
 | 
			
		||||
 | 
			
		||||
            //Finally, add details to the tooltip
 | 
			
		||||
            abstractSubSkill.addStats(componentBuilder, player);
 | 
			
		||||
            abstractSubSkill.addStats(componentBuilder, mmoPlayer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return componentBuilder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static TextComponent.Builder setupSkillComponentNameStyle(Player player, String skillName, SubSkillType subSkillType, boolean skillUnlocked) {
 | 
			
		||||
    private static TextComponent.Builder setupSkillComponentNameStyle(@NotNull McMMOPlayer mmoPlayer, @NotNull String skillName, @NotNull SubSkillType subSkillType, boolean skillUnlocked) {
 | 
			
		||||
        TextComponent.Builder componentBuilder;
 | 
			
		||||
        if (skillUnlocked) {
 | 
			
		||||
            if (RankUtils.getHighestRank(subSkillType) == RankUtils.getRank(player, subSkillType) && subSkillType.getNumRanks() > 1)
 | 
			
		||||
            if (RankUtils.getHighestRank(subSkillType) == RankUtils.getRank(mmoPlayer, subSkillType) && subSkillType.getNumRanks() > 1)
 | 
			
		||||
                componentBuilder = getNewComponentBuilder(LocaleLoader.getString("JSON.Hover.MaxRankSkillName", skillName));
 | 
			
		||||
            else
 | 
			
		||||
                componentBuilder = getNewComponentBuilder(LocaleLoader.getString("JSON.Hover.SkillName", skillName));
 | 
			
		||||
@@ -381,13 +376,13 @@ public class TextComponentFactory {
 | 
			
		||||
        return componentBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static TextComponent.Builder getNewComponentBuilder(String skillName) {
 | 
			
		||||
    private static TextComponent.Builder getNewComponentBuilder(@NotNull String skillName) {
 | 
			
		||||
        TextComponent.Builder componentBuilder = Component.text().content(skillName);
 | 
			
		||||
        componentBuilder.append(Component.newline());
 | 
			
		||||
        return componentBuilder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void addRanked(TextColor ccRank, TextColor ccCurRank, TextColor ccPossessive, TextColor ccNumRanks, TextComponent.Builder componentBuilder, int numRanks, int rank, int nextRank) {
 | 
			
		||||
    private static void addRanked(@NotNull TextComponent.Builder componentBuilder, int numRanks, int rank, int nextRank) {
 | 
			
		||||
        if (numRanks > 0) {
 | 
			
		||||
            //Rank: x
 | 
			
		||||
            componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Hover.Rank", String.valueOf(rank)))).append(Component.newline());
 | 
			
		||||
@@ -395,32 +390,34 @@ public class TextComponentFactory {
 | 
			
		||||
            //Next Rank: x
 | 
			
		||||
            if(nextRank > rank)
 | 
			
		||||
                componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Hover.NextRank", String.valueOf(nextRank)))).append(Component.newline());
 | 
			
		||||
 | 
			
		||||
            /*componentBuilder.append(" " + LocaleLoader.getString("JSON.RankPossesive") + " ").color(ccPossessive);
 | 
			
		||||
            componentBuilder.append(String.valueOf(numRanks)).color(ccNumRanks);*/
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void addLocked(SubSkillType subSkillType, TextColor ccLocked, TextColor ccLevelRequirement, TextColor ccLevelRequired, TextComponent.Builder componentBuilder) {
 | 
			
		||||
    private static void addLocked(@NotNull SubSkillType subSkillType, @NotNull TextColor ccLocked, @NotNull TextColor ccLevelRequirement,
 | 
			
		||||
                                  @NotNull TextColor ccLevelRequired, @NotNull TextComponent.Builder componentBuilder) {
 | 
			
		||||
        addLocked(ccLocked, ccLevelRequirement, componentBuilder);
 | 
			
		||||
        componentBuilder.append(Component.text(String.valueOf(RankConfig.getInstance().getSubSkillUnlockLevel(subSkillType, 1)), ccLevelRequired));
 | 
			
		||||
        //componentBuilder.append(Component.newline());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void addLocked(AbstractSubSkill abstractSubSkill, TextColor ccLocked, TextColor ccLevelRequirement, TextColor ccLevelRequired, TextComponent.Builder componentBuilder) {
 | 
			
		||||
    private static void addLocked(@NotNull AbstractSubSkill abstractSubSkill, @NotNull TextColor ccLocked,
 | 
			
		||||
                                  @NotNull TextColor ccLevelRequirement, @NotNull TextColor ccLevelRequired,
 | 
			
		||||
                                  @NotNull TextComponent.Builder componentBuilder) {
 | 
			
		||||
        addLocked(ccLocked, ccLevelRequirement, componentBuilder);
 | 
			
		||||
        componentBuilder.append(Component.text(String.valueOf(RankConfig.getInstance().getSubSkillUnlockLevel(abstractSubSkill, 1)), ccLevelRequired));
 | 
			
		||||
        //componentBuilder.append(Component.newline());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void addLocked(TextColor ccLocked, TextColor ccLevelRequirement, TextComponent.Builder componentBuilder) {
 | 
			
		||||
    private static void addLocked(@NotNull TextColor ccLocked,
 | 
			
		||||
                                  @NotNull TextColor ccLevelRequirement,
 | 
			
		||||
                                  @NotNull TextComponent.Builder componentBuilder) {
 | 
			
		||||
        componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Locked"), ccLocked, TextDecoration.BOLD));
 | 
			
		||||
        componentBuilder.append(Component.newline()).append(Component.newline());
 | 
			
		||||
        componentBuilder.append(Component.text(LocaleLoader.getString("JSON.LevelRequirement") + ": ", ccLevelRequirement));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Deprecated
 | 
			
		||||
    private static Component getSubSkillHoverEventJSON(SubSkillType subSkillType, Player player)
 | 
			
		||||
    private static @NotNull Component getSubSkillHoverEventJSON(@NotNull SubSkillType subSkillType, @NotNull McMMOPlayer mmoPlayer)
 | 
			
		||||
    {
 | 
			
		||||
        String skillName = subSkillType.getLocaleName();
 | 
			
		||||
 | 
			
		||||
@@ -438,9 +435,9 @@ public class TextComponentFactory {
 | 
			
		||||
        TextColor ccLevelRequired       = NamedTextColor.RED;
 | 
			
		||||
 | 
			
		||||
        //SubSkillType Name
 | 
			
		||||
        TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, subSkillType));
 | 
			
		||||
        TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(mmoPlayer, skillName, subSkillType, RankUtils.hasUnlockedSubskill(mmoPlayer, subSkillType));
 | 
			
		||||
 | 
			
		||||
        if(!RankUtils.hasUnlockedSubskill(player, subSkillType))
 | 
			
		||||
        if(!RankUtils.hasUnlockedSubskill(mmoPlayer, subSkillType))
 | 
			
		||||
        {
 | 
			
		||||
            //Skill is not unlocked yet
 | 
			
		||||
            addLocked(subSkillType, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder);
 | 
			
		||||
@@ -450,7 +447,7 @@ public class TextComponentFactory {
 | 
			
		||||
            //RANK
 | 
			
		||||
            if(subSkillType.getNumRanks() > 0)
 | 
			
		||||
            {
 | 
			
		||||
                int curRank = RankUtils.getRank(player, subSkillType);
 | 
			
		||||
                int curRank = RankUtils.getRank(mmoPlayer, subSkillType);
 | 
			
		||||
                int nextRank = 0;
 | 
			
		||||
 | 
			
		||||
                if(curRank < subSkillType.getNumRanks())
 | 
			
		||||
@@ -458,7 +455,7 @@ public class TextComponentFactory {
 | 
			
		||||
                    nextRank = RankUtils.getRankUnlockLevel(subSkillType, curRank+1);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                addRanked(ccRank, ccCurRank, ccPossessive, ccCurRank, componentBuilder, subSkillType.getNumRanks(), RankUtils.getRank(player, subSkillType), nextRank);
 | 
			
		||||
                addRanked(componentBuilder, subSkillType.getNumRanks(), RankUtils.getRank(mmoPlayer, subSkillType), nextRank);
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -473,7 +470,7 @@ public class TextComponentFactory {
 | 
			
		||||
        return componentBuilder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void addSubSkillTypeToHoverEventJSON(AbstractSubSkill abstractSubSkill, TextComponent.Builder componentBuilder)
 | 
			
		||||
    private static void addSubSkillTypeToHoverEventJSON(@NotNull AbstractSubSkill abstractSubSkill, @NotNull TextComponent.Builder componentBuilder)
 | 
			
		||||
    {
 | 
			
		||||
        if(abstractSubSkill.isSuperAbility())
 | 
			
		||||
        {
 | 
			
		||||
@@ -488,7 +485,7 @@ public class TextComponentFactory {
 | 
			
		||||
        componentBuilder.append(Component.newline());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void getSubSkillTextComponents(Player player, List<Component> textComponents, PrimarySkillType parentSkill) {
 | 
			
		||||
    public static void getSubSkillTextComponents(@NotNull McMMOPlayer mmoPlayer, @NotNull List<Component> textComponents, @NotNull PrimarySkillType parentSkill) {
 | 
			
		||||
        for(SubSkillType subSkillType : SubSkillType.values())
 | 
			
		||||
        {
 | 
			
		||||
            if(subSkillType.getParentSkill() == parentSkill)
 | 
			
		||||
@@ -498,10 +495,10 @@ public class TextComponentFactory {
 | 
			
		||||
                if(subSkillType == SubSkillType.FISHING_MASTER_ANGLER && mcMMO.getCompatibilityManager().getMasterAnglerCompatibilityLayer() == null)
 | 
			
		||||
                    continue;
 | 
			
		||||
 | 
			
		||||
                if(Permissions.isSubSkillEnabled(player, subSkillType))
 | 
			
		||||
                if(Permissions.isSubSkillEnabled(mmoPlayer, subSkillType))
 | 
			
		||||
                {
 | 
			
		||||
                    if(!InteractionManager.hasSubSkill(subSkillType))
 | 
			
		||||
                        textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, subSkillType));
 | 
			
		||||
                        textComponents.add(TextComponentFactory.getSubSkillTextComponent(mmoPlayer, subSkillType));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -511,16 +508,16 @@ public class TextComponentFactory {
 | 
			
		||||
        {
 | 
			
		||||
            if(abstractSubSkill.getPrimarySkill() == parentSkill)
 | 
			
		||||
            {
 | 
			
		||||
                if(Permissions.isSubSkillEnabled(player, abstractSubSkill))
 | 
			
		||||
                    textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, abstractSubSkill));
 | 
			
		||||
                if(Permissions.isSubSkillEnabled(mmoPlayer, abstractSubSkill))
 | 
			
		||||
                    textComponents.add(TextComponentFactory.getSubSkillTextComponent(mmoPlayer, abstractSubSkill));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static TextComponent getSubSkillUnlockedNotificationComponents(Player player, SubSkillType subSkillType)
 | 
			
		||||
    public static @NotNull TextComponent getSubSkillUnlockedNotificationComponents(@NotNull McMMOPlayer mmoPlayer, @NotNull SubSkillType subSkillType)
 | 
			
		||||
    {
 | 
			
		||||
        TextComponent.Builder unlockMessage = Component.text().content(LocaleLoader.getString("JSON.SkillUnlockMessage", subSkillType.getLocaleName(), RankUtils.getRank(player, subSkillType)));
 | 
			
		||||
        unlockMessage.hoverEvent(HoverEvent.showText(getSubSkillHoverComponent(player, subSkillType)));
 | 
			
		||||
        TextComponent.Builder unlockMessage = Component.text().content(LocaleLoader.getString("JSON.SkillUnlockMessage", subSkillType.getLocaleName(), RankUtils.getRank(mmoPlayer, subSkillType)));
 | 
			
		||||
        unlockMessage.hoverEvent(HoverEvent.showText(getSubSkillHoverComponent(mmoPlayer, subSkillType)));
 | 
			
		||||
        unlockMessage.clickEvent(ClickEvent.runCommand("/"+subSkillType.getParentSkill().toString().toLowerCase(Locale.ENGLISH)));
 | 
			
		||||
        return unlockMessage.build();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user