diff --git a/Changelog.txt b/Changelog.txt index 3fc305deb5..1a5db6a57d 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,8 @@ +Version 2.1.225 + Fixed various bugs with ability text + Updated Adventure dependencies + Added new API McMMOPlayerNotificationEvent.getPlayer + Version 2.1.224 Updated to a new build of ACF to fix NoSuchFieldException locale Improved Folia Support (Thanks HSGamer) diff --git a/pom.xml b/pom.xml index 99cdf9db03..232befc70a 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.225-SNAPSHOT + 2.1.225 mcMMO https://github.com/mcMMO-Dev/mcMMO @@ -150,21 +150,20 @@ net.kyori:examination-api net.kyori:examination-string net.kyori:adventure-text-serializer-legacy + net.kyori:adventure-text-serializer-gson + net.kyori:adventure-text-serializer-json net.kyori:adventure-text-serializer-bungeecord net.kyori:adventure-text-serializer-craftbukkit net.kyori:adventure-text-serializer-gson-legacy-impl + net.kyori:adventure-text-serializer-json-legacy-impl co.aikar:acf-bukkit com.tcoded:FoliaLib - net.kyori.examination - com.gmail.nossr50.mcmmo.kyori.examination - - - net.kyori.adventure - com.gmail.nossr50.mcmmo.kyori.adventure + net.kyori + com.gmail.nossr50.mcmmo.kyori co.aikar.commands @@ -269,41 +268,65 @@ acf-bukkit 0.5.1-SNAPSHOT - + + net.kyori + adventure-text-serializer-bungeecord + 4.3.1 + net.kyori adventure-text-serializer-gson - 4.13.0 + 4.14.0 + + + net.kyori + adventure-text-serializer-gson-legacy-impl + 4.14.0 + + + net.kyori + adventure-text-serializer-json + 4.14.0 + + + net.kyori + adventure-text-serializer-json-legacy-impl + 4.14.0 net.kyori adventure-api - 4.13.0 + 4.14.0 net.kyori adventure-nbt - 4.13.0 + 4.14.0 net.kyori adventure-key - 4.13.0 + 4.14.0 net.kyori - adventure-text-serializer-gson-legacy-impl - 4.13.0 + adventure-platform-api + 4.3.1 net.kyori adventure-platform-bukkit - 4.3.0 + 4.3.1 net.kyori - adventure-platform-api - 4.3.0 + adventure-platform-facet + 4.3.1 + + + net.kyori + adventure-platform-viaversion + 4.3.1 org.apache.maven.scm diff --git a/src/main/java/com/gmail/nossr50/events/skills/McMMOPlayerNotificationEvent.java b/src/main/java/com/gmail/nossr50/events/skills/McMMOPlayerNotificationEvent.java index 1b0c17949a..75d8eae834 100644 --- a/src/main/java/com/gmail/nossr50/events/skills/McMMOPlayerNotificationEvent.java +++ b/src/main/java/com/gmail/nossr50/events/skills/McMMOPlayerNotificationEvent.java @@ -27,8 +27,13 @@ public class McMMOPlayerNotificationEvent extends Event implements Cancellable { protected Component notificationTextComponent; protected final NotificationType notificationType; - public McMMOPlayerNotificationEvent(Player who, NotificationType notificationType, Component notificationTextComponent, McMMOMessageType chatMessageType, boolean isMessageAlsoBeingSentToChat) { + protected final Player player; + + public McMMOPlayerNotificationEvent(Player player, NotificationType notificationType, + Component notificationTextComponent, McMMOMessageType chatMessageType, + boolean isMessageAlsoBeingSentToChat) { super(false); + this.player = player; this.notificationType = notificationType; this.notificationTextComponent = notificationTextComponent; this.chatMessageType = chatMessageType; @@ -48,6 +53,10 @@ public void setMessageAlsoBeingSentToChat(boolean messageAlsoBeingSentToChat) { isMessageAlsoBeingSentToChat = messageAlsoBeingSentToChat; } + public Player getPlayer() { + return player; + } + public Component getNotificationTextComponent() { return notificationTextComponent; } diff --git a/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java b/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java index d7b9afcd05..615ae3fbb8 100644 --- a/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java +++ b/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java @@ -16,7 +16,6 @@ import com.gmail.nossr50.util.text.McMMOMessageType; import com.gmail.nossr50.util.text.TextComponentFactory; import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.audience.MessageType; import net.kyori.adventure.identity.Identity; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.HoverEvent; @@ -49,7 +48,9 @@ public static void sendPlayerInformation(Player player, NotificationType notific if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications()) return; - McMMOMessageType destination = mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(notificationType) ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM; + McMMOMessageType destination + = mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(notificationType) + ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM; Component message = TextComponentFactory.getNotificationTextComponentFromLocale(key); McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message); @@ -75,7 +76,8 @@ public static boolean doesPlayerUseNotifications(Player player) * @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(Player targetPlayer, NotificationType notificationType, String key, + String... values) { sendPlayerInformation(targetPlayer, notificationType, key, values); } @@ -99,7 +101,8 @@ public static void sendPlayerInformationChatOnlyPrefixed(Player player, String k player.sendMessage(prefixFormattedMessage); } - public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values) + public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, + String... values) { if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications()) return; @@ -119,24 +122,28 @@ private static void sendNotification(Player player, McMMOPlayerNotificationEvent final Audience audience = mcMMO.getAudiences().player(player); //If the message is being sent to the action bar we need to check if the copy if a copy is sent to the chat system + Component notificationTextComponent = customEvent.getNotificationTextComponent(); if(customEvent.getChatMessageType() == McMMOMessageType.ACTION_BAR) { - audience.sendActionBar(customEvent.getNotificationTextComponent()); + audience.sendActionBar(notificationTextComponent); if(customEvent.isMessageAlsoBeingSentToChat()) { //Send copy to chat system - audience.sendMessage(Identity.nil(), customEvent.getNotificationTextComponent(), MessageType.SYSTEM); + audience.sendMessage(notificationTextComponent); } } else { - audience.sendMessage(Identity.nil(), customEvent.getNotificationTextComponent(), MessageType.SYSTEM); + audience.sendMessage(notificationTextComponent); } } - private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player, NotificationType notificationType, McMMOMessageType destination, Component message) { + private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player, NotificationType notificationType, + McMMOMessageType destination, + Component message) { //Init event McMMOPlayerNotificationEvent customEvent = new McMMOPlayerNotificationEvent(player, - notificationType, message, destination, mcMMO.p.getAdvancedConfig().doesNotificationSendCopyToChat(notificationType)); + notificationType, message, destination, + mcMMO.p.getAdvancedConfig().doesNotificationSendCopyToChat(notificationType)); //Call event Bukkit.getServer().getPluginManager().callEvent(customEvent); @@ -149,15 +156,23 @@ private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player * @param skillName skill that leveled up * @param newLevel new level of that skill */ - public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkillType skillName, int levelsGained, int newLevel) + public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkillType skillName, + int levelsGained, int newLevel) { if(!mcMMOPlayer.useChatNotifications()) return; - McMMOMessageType destination = mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE) ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM; + McMMOMessageType destination + = mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE) + ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM; - Component levelUpTextComponent = TextComponentFactory.getNotificationLevelUpTextComponent(skillName, levelsGained, newLevel); - McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(mcMMOPlayer.getPlayer(), NotificationType.LEVEL_UP_MESSAGE, destination, levelUpTextComponent); + Component levelUpTextComponent = TextComponentFactory.getNotificationLevelUpTextComponent( + skillName, levelsGained, newLevel); + McMMOPlayerNotificationEvent customEvent = checkNotificationEvent( + mcMMOPlayer.getPlayer(), + NotificationType.LEVEL_UP_MESSAGE, + destination, + levelUpTextComponent); sendNotification(mcMMOPlayer.getPlayer(), customEvent); } @@ -176,17 +191,12 @@ public static void sendPlayerUnlockNotification(McMMOPlayer mcMMOPlayer, SubSkil return; //CHAT MESSAGE - mcMMO.getAudiences().player(mcMMOPlayer.getPlayer()).sendMessage(Identity.nil(), TextComponentFactory.getSubSkillUnlockedNotificationComponents(mcMMOPlayer.getPlayer(), subSkillType)); + mcMMO.getAudiences().player(mcMMOPlayer.getPlayer()).sendMessage(Identity.nil(), + TextComponentFactory.getSubSkillUnlockedNotificationComponents(mcMMOPlayer.getPlayer(), subSkillType)); //Unlock Sound Effect - SoundManager.sendCategorizedSound(mcMMOPlayer.getPlayer(), mcMMOPlayer.getPlayer().getLocation(), SoundType.SKILL_UNLOCKED, SoundCategory.MASTER); - - //ACTION BAR MESSAGE - /*if(mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(NotificationType.SUBSKILL_UNLOCKED)) - mcMMOPlayer.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(LocaleLoader.getString("JSON.SkillUnlockMessage", - subSkillType.getLocaleName(), - String.valueOf(RankUtils.getRank(mcMMOPlayer.getPlayer(), - subSkillType)))));*/ + SoundManager.sendCategorizedSound(mcMMOPlayer.getPlayer(), mcMMOPlayer.getPlayer().getLocation(), + SoundType.SKILL_UNLOCKED, SoundCategory.MASTER); } /** @@ -225,7 +235,8 @@ private static void sendAdminCommandConfirmation(CommandSender commandSender, St * @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(CommandSender commandSender, + SensitiveCommandType sensitiveCommandType, String... args) { /* * Determine the 'identity' of the one who executed the command to pass as a parameters */ @@ -233,19 +244,26 @@ public static void processSensitiveCommandNotification(CommandSender commandSend if(commandSender instanceof Player) { - senderName = ((Player) commandSender).getDisplayName() + ChatColor.RESET + "-" + ((Player) commandSender).getUniqueId(); + senderName = ((Player) commandSender).getDisplayName() + + ChatColor.RESET + "-" + ((Player) commandSender).getUniqueId(); } //Send the notification switch(sensitiveCommandType) { case XPRATE_MODIFY: - sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.Start.Others", addItemToFirstPositionOfArray(senderName, args))); - sendAdminCommandConfirmation(commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.Start.Self", args)); + sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.Start.Others", + addItemToFirstPositionOfArray(senderName, args))); + sendAdminCommandConfirmation( + commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.Start.Self", args)); break; case XPRATE_END: - sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.End.Others", addItemToFirstPositionOfArray(senderName, args))); - sendAdminCommandConfirmation(commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.End.Self", args)); + sendAdminNotification( + LocaleLoader.getString( + "Notifications.Admin.XPRate.End.Others", + addItemToFirstPositionOfArray(senderName, args))); + sendAdminCommandConfirmation(commandSender, + LocaleLoader.getString("Notifications.Admin.XPRate.End.Self", args)); break; } } @@ -266,8 +284,6 @@ public static String[] addItemToFirstPositionOfArray(String itemToAdd, String... return newArray; } - //TODO: Remove the code duplication, am lazy atm - //TODO: Fix broadcasts being skipped for situations where a player skips over the milestone like with the addlevels command public static void processLevelUpBroadcasting(@NotNull McMMOPlayer mmoPlayer, @NotNull PrimarySkillType primarySkillType, int level) { if(level <= 0) return; @@ -290,13 +306,22 @@ public static void processLevelUpBroadcasting(@NotNull McMMOPlayer mmoPlayer, @N .append(Component.newline()) .append(Component.text(LocalDate.now().toString())) .append(Component.newline()) - .append(Component.text(mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType)+" reached level "+level)).color(TextColor.fromHexString(HEX_BEIGE_COLOR)) + .append(Component.text( + mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType) + + " reached level "+level)).color(TextColor.fromHexString(HEX_BEIGE_COLOR)) .asHoverEvent(); - String localeMessage = LocaleLoader.getString("Broadcasts.LevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), level, mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType)); - Component message = LegacyComponentSerializer.legacySection().deserialize(localeMessage).hoverEvent(levelMilestoneHover); - - mcMMO.p.getFoliaLib().getImpl().runNextTick(t -> audience.sendMessage(Identity.nil(), message)); + String localeMessage = LocaleLoader.getString( + "Broadcasts.LevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), level, + mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType)); + Component component = LegacyComponentSerializer + .legacySection() + .deserialize(localeMessage) + .hoverEvent(levelMilestoneHover); + + // TODO: Update system msg API + mcMMO.p.getFoliaLib().getImpl().runNextTick( + t -> audience.sendMessage(component)); } } } @@ -331,7 +356,7 @@ public static void processPowerLevelUpBroadcasting(@NotNull McMMOPlayer mmoPlaye String localeMessage = LocaleLoader.getString("Broadcasts.PowerLevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), powerLevel); Component message = LegacyComponentSerializer.legacySection().deserialize(localeMessage).hoverEvent(levelMilestoneHover); - mcMMO.p.getFoliaLib().getImpl().runNextTick(t -> audience.sendMessage(Identity.nil(), message)); + mcMMO.p.getFoliaLib().getImpl().runNextTick(t -> audience.sendMessage(message)); } } } diff --git a/src/main/java/com/gmail/nossr50/util/skills/RankUtils.java b/src/main/java/com/gmail/nossr50/util/skills/RankUtils.java index ae2f842ad6..ec4d56481e 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/RankUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/RankUtils.java @@ -291,30 +291,12 @@ private static void initMaps(String s) { subSkillRanks.computeIfAbsent(s, k -> new HashMap<>()); } -/* public static int getSubSkillUnlockRequirement(SubSkillType subSkillType) - { - String skillName = subSkillType.toString(); - int numRanks = subSkillType.getNumRanks(); - - if(subSkillRanks == null) - subSkillRanks = new HashMap<>(); - - if(numRanks == 0) - return -1; //-1 Means the skill doesn't have ranks - - if(subSkillRanks.get(skillName) == null && numRanks > 0) - addRanks(subSkillType); - - return subSkillRanks.get(subSkillType.toString()).get(1); - }*/ - /** * Gets the unlock level for a specific rank in a subskill * @param subSkillType The target subskill * @param rank The target rank * @return The level at which this rank unlocks */ - @Deprecated public static int getRankUnlockLevel(SubSkillType subSkillType, int rank) { return RankConfig.getInstance().getSubSkillUnlockLevel(subSkillType, rank); diff --git a/src/main/java/com/gmail/nossr50/util/text/TextComponentFactory.java b/src/main/java/com/gmail/nossr50/util/text/TextComponentFactory.java index e6961de1d9..81ac8da280 100644 --- a/src/main/java/com/gmail/nossr50/util/text/TextComponentFactory.java +++ b/src/main/java/com/gmail/nossr50/util/text/TextComponentFactory.java @@ -12,8 +12,6 @@ import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.skills.RankUtils; import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.audience.MessageType; -import net.kyori.adventure.identity.Identity; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.event.ClickEvent; @@ -35,41 +33,37 @@ 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 + * @param values vars to be passed to the locale loader * @return */ - public static TextComponent getNotificationMultipleValues(String localeKey, String... values) - { + public static TextComponent getNotificationMultipleValues(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(String localeKey) { return getNotificationTextComponent(LocaleLoader.getString(localeKey)); } - public static Component getNotificationLevelUpTextComponent(PrimarySkillType skill, int levelsGained, int currentLevel) - { - return Component.text(LocaleLoader.getString("Overhaul.Levelup", LocaleLoader.getString("Overhaul.Name."+ StringUtils.getCapitalized(skill.toString())), levelsGained, currentLevel)); + public static Component getNotificationLevelUpTextComponent(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(String text) { //textComponent.setColor(getNotificationColor(notificationType)); return Component.text(text); } - public static void sendPlayerSubSkillWikiLink(Player player, String subskillformatted) - { - if(!mcMMO.p.getGeneralConfig().getUrlLinksEnabled()) + public static void sendPlayerSubSkillWikiLink(Player player, String subskillformatted) { + if (!mcMMO.p.getGeneralConfig().getUrlLinksEnabled()) return; TextComponent.Builder wikiLinkComponent = Component.text().content(LocaleLoader.getString("Overhaul.mcMMO.MmoInfo.Wiki")); wikiLinkComponent.decoration(TextDecoration.UNDERLINED, true); - String wikiUrl = "https://wiki.mcmmo.org/"+subskillformatted; + String wikiUrl = "https://wiki.mcmmo.org/" + subskillformatted; wikiLinkComponent.clickEvent(ClickEvent.openUrl(wikiUrl)); @@ -77,39 +71,40 @@ public static void sendPlayerSubSkillWikiLink(Player player, String subskillform wikiLinkComponent.hoverEvent(HoverEvent.showText(componentBuilder.build())); - mcMMO.getAudiences().player(player).sendMessage(Identity.nil(), wikiLinkComponent, MessageType.SYSTEM); + mcMMO.getAudiences().player(player).sendMessage(wikiLinkComponent); } public static void sendPlayerUrlHeader(Player player) { 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")); + TextComponent suffix = Component.text(" " + LocaleLoader.getString("Overhaul.mcMMO.Url.Wrap.Suffix")); /*suffix.setColor(ChatColor.DARK_AQUA);*/ TextComponent emptySpace = Component.space(); - mcMMO.getAudiences().player(player).sendMessage(Identity.nil(),TextComponent.ofChildren( - prefix, - getWebLinkTextComponent(McMMOWebLinks.WEBSITE), - emptySpace, - getWebLinkTextComponent(McMMOWebLinks.DISCORD), - emptySpace, - getWebLinkTextComponent(McMMOWebLinks.PATREON), - emptySpace, - getWebLinkTextComponent(McMMOWebLinks.WIKI), - emptySpace, - getWebLinkTextComponent(McMMOWebLinks.SPIGOT), - emptySpace, - getWebLinkTextComponent(McMMOWebLinks.HELP_TRANSLATE), - suffix - ), MessageType.SYSTEM); + // TODO: Update system msg API + mcMMO.getAudiences().player(player).sendMessage(Component.textOfChildren( + prefix, + getWebLinkTextComponent(McMMOWebLinks.WEBSITE), + emptySpace, + getWebLinkTextComponent(McMMOWebLinks.DISCORD), + emptySpace, + getWebLinkTextComponent(McMMOWebLinks.PATREON), + emptySpace, + getWebLinkTextComponent(McMMOWebLinks.WIKI), + emptySpace, + getWebLinkTextComponent(McMMOWebLinks.SPIGOT), + emptySpace, + getWebLinkTextComponent(McMMOWebLinks.HELP_TRANSLATE), + suffix + )); } /** * Sends a player a bunch of text components that represent a list of sub-skills * Styling and formatting is applied before sending the messages * - * @param player target player + * @param player target player * @param subSkillComponents the text components representing the sub-skills by name */ public static void sendPlayerSubSkillList(@NotNull Player player, @NotNull List subSkillComponents) { @@ -129,17 +124,15 @@ public static void sendPlayerSubSkillList(@NotNull Player player, @NotNull List< } //Send each group - for(Component curLine : individualLinesToSend) { - audience.sendMessage(Identity.nil(), curLine); + for (Component curLine : individualLinesToSend) { + audience.sendMessage(curLine); } } - private static Component getWebLinkTextComponent(McMMOWebLinks webLinks) - { + private static Component getWebLinkTextComponent(McMMOWebLinks webLinks) { TextComponent.Builder webTextComponent; - switch(webLinks) - { + switch (webLinks) { case WEBSITE: webTextComponent = Component.text().content(LocaleLoader.getString("JSON.Hover.AtSymbolURL")); TextUtils.addChildWebComponent(webTextComponent, "Web"); @@ -180,12 +173,10 @@ private static Component getWebLinkTextComponent(McMMOWebLinks webLinks) return webTextComponent.build(); } - private static Component getUrlHoverEvent(McMMOWebLinks webLinks) - { + private static Component getUrlHoverEvent(McMMOWebLinks webLinks) { TextComponent.Builder componentBuilder = Component.text().content(webLinks.getNiceTitle()); - switch(webLinks) - { + switch (webLinks) { case WEBSITE: addUrlHeaderHover(webLinks, componentBuilder); componentBuilder.append(Component.newline()).append(Component.newline()); @@ -223,7 +214,7 @@ private static Component getUrlHoverEvent(McMMOWebLinks webLinks) componentBuilder.append(Component.text(webLinks.getLocaleDescription(), NamedTextColor.GREEN)); componentBuilder.append(Component.newline()); componentBuilder.append(Component.text("You can use this website to help translate mcMMO into your language!" + - "\nIf you want to know more contact me in discord.", NamedTextColor.DARK_GRAY)); + "\nIf you want to know more contact me in discord.", NamedTextColor.DARK_GRAY)); } return componentBuilder.build(); @@ -234,13 +225,11 @@ private static void addUrlHeaderHover(McMMOWebLinks webLinks, TextComponent.Buil componentBuilder.append(Component.text(webLinks.getUrl(), NamedTextColor.GRAY, TextDecoration.ITALIC)); } - private static ClickEvent getUrlClickEvent(String url) - { + private static ClickEvent getUrlClickEvent(String url) { return ClickEvent.openUrl(url); } - private static Component getSubSkillTextComponent(Player player, SubSkillType subSkillType) - { + private static Component getSubSkillTextComponent(Player player, SubSkillType subSkillType) { //Get skill name String skillName = subSkillType.getLocaleName(); @@ -257,8 +246,7 @@ private static Component getSubSkillTextComponent(Player player, SubSkillType su return textComponent.build(); } - private static TextComponent getSubSkillTextComponent(Player player, AbstractSubSkill abstractSubSkill) - { + private static TextComponent getSubSkillTextComponent(Player player, AbstractSubSkill abstractSubSkill) { //String key = abstractSubSkill.getConfigKeyName(); String skillName = abstractSubSkill.getNiceName(); @@ -297,46 +285,37 @@ private static TextComponent.Builder initNewSkillTextComponent(Player player, St return textComponent; } - private static Component getSubSkillHoverComponent(Player player, AbstractSubSkill abstractSubSkill) - { + private static Component getSubSkillHoverComponent(Player player, AbstractSubSkill abstractSubSkill) { return getSubSkillHoverEventJSON(abstractSubSkill, player); } - private static Component getSubSkillHoverComponent(Player player, SubSkillType subSkillType) - { + private static Component getSubSkillHoverComponent(Player player, SubSkillType subSkillType) { return getSubSkillHoverEventJSON(subSkillType, player); } /** * 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 player 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(AbstractSubSkill abstractSubSkill, Player player) { 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; + TextColor ccLocked = NamedTextColor.DARK_GRAY; + TextColor ccLevelRequirement = NamedTextColor.BLUE; + TextColor ccLevelRequired = NamedTextColor.RED; SubSkillType subSkillType = abstractSubSkill.getSubSkillType(); //SubSkillType Name TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, abstractSubSkill)); - if(!RankUtils.hasUnlockedSubskill(player, abstractSubSkill)) - { + if (!RankUtils.hasUnlockedSubskill(player, abstractSubSkill)) { //Skill is not unlocked yet addLocked(abstractSubSkill, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder); } else { @@ -346,12 +325,11 @@ private static Component getSubSkillHoverEventJSON(AbstractSubSkill abstractSubS int curRank = RankUtils.getRank(player, abstractSubSkill); int nextRank = 0; - if(curRank < abstractSubSkill.getNumRanks() && abstractSubSkill.getNumRanks() > 0) - { - nextRank = RankUtils.getRankUnlockLevel(abstractSubSkill, curRank+1); + if (curRank < abstractSubSkill.getNumRanks() && abstractSubSkill.getNumRanks() > 0) { + 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(player, abstractSubSkill), nextRank); componentBuilder.append(Component.text(LocaleLoader.getString("JSON.DescriptionHeader"))); componentBuilder.append(Component.newline()).append(Component.text(abstractSubSkill.getDescription())).append(Component.newline()); @@ -386,17 +364,14 @@ private static TextComponent.Builder getNewComponentBuilder(String skillName) { 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(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()); //Next Rank: x - if(nextRank > rank) + 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);*/ } } @@ -418,47 +393,38 @@ private static void addLocked(TextColor ccLocked, TextColor ccLevelRequirement, componentBuilder.append(Component.text(LocaleLoader.getString("JSON.LevelRequirement") + ": ", ccLevelRequirement)); } - @Deprecated - private static Component getSubSkillHoverEventJSON(SubSkillType subSkillType, Player player) - { + private static Component getSubSkillHoverEventJSON(SubSkillType subSkillType, Player player) { String skillName = subSkillType.getLocaleName(); /* * Hover Event BaseComponent color table */ - TextColor ccSubSkillHeader = NamedTextColor.GOLD; - TextColor ccRank = NamedTextColor.BLUE; - TextColor ccCurRank = NamedTextColor.GREEN; - TextColor ccPossessive = NamedTextColor.WHITE; - TextColor ccDescriptionHeader = NamedTextColor.DARK_PURPLE; - TextColor ccDescription = NamedTextColor.DARK_GRAY; - TextColor ccLocked = NamedTextColor.DARK_GRAY; - TextColor ccLevelRequirement = NamedTextColor.BLUE; - TextColor ccLevelRequired = NamedTextColor.RED; + TextColor ccDescriptionHeader = NamedTextColor.DARK_PURPLE; + TextColor ccDescription = NamedTextColor.DARK_GRAY; + TextColor ccLocked = NamedTextColor.DARK_GRAY; + TextColor ccLevelRequirement = NamedTextColor.BLUE; + TextColor ccLevelRequired = NamedTextColor.RED; //SubSkillType Name TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, subSkillType)); - if(!RankUtils.hasUnlockedSubskill(player, subSkillType)) - { + if (!RankUtils.hasUnlockedSubskill(player, subSkillType)) { //Skill is not unlocked yet addLocked(subSkillType, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder); } else { //addSubSkillTypeToHoverEventJSON(subSkillType, componentBuilder); //RANK - if(subSkillType.getNumRanks() > 0) - { + if (subSkillType.getNumRanks() > 0) { int curRank = RankUtils.getRank(player, subSkillType); int nextRank = 0; - if(curRank < subSkillType.getNumRanks()) - { - nextRank = RankUtils.getRankUnlockLevel(subSkillType, curRank+1); + if (curRank < subSkillType.getNumRanks()) { + 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(player, subSkillType), nextRank); } componentBuilder.append(Component.newline()); @@ -472,55 +438,52 @@ private static Component getSubSkillHoverEventJSON(SubSkillType subSkillType, Pl return componentBuilder.build(); } - private static void addSubSkillTypeToHoverEventJSON(AbstractSubSkill abstractSubSkill, TextComponent.Builder componentBuilder) - { - if(abstractSubSkill.isSuperAbility()) - { - componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.SuperAbility"), NamedTextColor.LIGHT_PURPLE, TextDecoration.BOLD)); - } else if(abstractSubSkill.isActiveUse()) - { - componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Active"), NamedTextColor.DARK_RED, TextDecoration.BOLD)); + private static void addSubSkillTypeToHoverEventJSON(AbstractSubSkill abstractSubSkill, + TextComponent.Builder componentBuilder) { + if (abstractSubSkill.isSuperAbility()) { + componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.SuperAbility"), + NamedTextColor.LIGHT_PURPLE, TextDecoration.BOLD)); + } else if (abstractSubSkill.isActiveUse()) { + componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Active"), + NamedTextColor.DARK_RED, TextDecoration.BOLD)); } else { - componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Passive"), NamedTextColor.GREEN, TextDecoration.BOLD)); + componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Passive"), + NamedTextColor.GREEN, TextDecoration.BOLD)); } componentBuilder.append(Component.newline()); } - public static void getSubSkillTextComponents(Player player, List textComponents, PrimarySkillType parentSkill) { - for(SubSkillType subSkillType : SubSkillType.values()) - { - if(subSkillType.getParentSkill() == parentSkill) - { + public static void getSubSkillTextComponents(Player player, List textComponents, + PrimarySkillType parentSkill) { + for (SubSkillType subSkillType : SubSkillType.values()) { + if (subSkillType.getParentSkill() == parentSkill) { //TODO: Hacky rewrite later //Only some versions of MC have this skill - if(subSkillType == SubSkillType.FISHING_MASTER_ANGLER && mcMMO.getCompatibilityManager().getMasterAnglerCompatibilityLayer() == null) + if (subSkillType == SubSkillType.FISHING_MASTER_ANGLER + && mcMMO.getCompatibilityManager().getMasterAnglerCompatibilityLayer() == null) continue; - if(Permissions.isSubSkillEnabled(player, subSkillType)) - { - if(!InteractionManager.hasSubSkill(subSkillType)) + if (Permissions.isSubSkillEnabled(player, subSkillType)) { + if (!InteractionManager.hasSubSkill(subSkillType)) textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, subSkillType)); } } } /* NEW SKILL SYSTEM */ - for(AbstractSubSkill abstractSubSkill : InteractionManager.getSubSkillList()) - { - if(abstractSubSkill.getPrimarySkill() == parentSkill) - { - if(Permissions.isSubSkillEnabled(player, abstractSubSkill)) + for (AbstractSubSkill abstractSubSkill : InteractionManager.getSubSkillList()) { + if (abstractSubSkill.getPrimarySkill() == parentSkill) { + if (Permissions.isSubSkillEnabled(player, abstractSubSkill)) textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, abstractSubSkill)); } } } - public static TextComponent getSubSkillUnlockedNotificationComponents(Player player, SubSkillType subSkillType) - { + public static TextComponent getSubSkillUnlockedNotificationComponents(Player player, 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))); - unlockMessage.clickEvent(ClickEvent.runCommand("/"+subSkillType.getParentSkill().toString().toLowerCase(Locale.ENGLISH))); + unlockMessage.clickEvent(ClickEvent.runCommand("/" + subSkillType.getParentSkill().toString().toLowerCase(Locale.ENGLISH))); return unlockMessage.build(); } }