TextComponents will no longer use a cache

This will increase the cost of TextComponents by a negligible amount but in exchange I will be able to put player-specific data into them.
This commit is contained in:
nossr50 2019-01-12 19:29:06 -08:00
parent 85fd0a79bc
commit c8ee5099e0
2 changed files with 39 additions and 97 deletions

View File

@ -15,6 +15,7 @@ Version 2.1.0
+ Added links to mcMMO related websites to various commands
+ Certain elements of mcMMO's UI have been restyled
+ Added the tagline "Overhaul Era" to various locations until 3.0.0 comes out
+ (Sound) Volume and Pitch of sounds can now be configured in the new sounds.yml file
+ (MySQL) Added support for SSL for MySQL/MariaDB (On by default)
+ (Skills) Tool alerts now are sent to the Action Bar
+ (Skills) Super Ability activation alerts are now sent to the Action Bar

View File

@ -19,19 +19,22 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* This class handles many of the JSON components that mcMMO makes and uses
*/
public class TextComponentFactory {
public static HashMap<String, TextComponent> subSkillTextComponents;
//public static HashMap<String, TextComponent> subSkillTextComponents;
//Yeah there's probably a better way to do this
public static HashMap<String, BaseComponent[]> lockedComponentMap;
//public static HashMap<String, BaseComponent[]> lockedComponentMap;
public static BaseComponent[] webComponents;
//public static BaseComponent[] webComponents;
/**
* This one is a bit simple
* @param localeKey
* @param notificationType
* @param values
* 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 notificationType type of notification
* @param values vars to be passed to the locale loader
* @return
*/
public static TextComponent getNotificationMultipleValues(String localeKey, NotificationType notificationType, String... values)
@ -69,11 +72,11 @@ public class TextComponentFactory {
public static TextComponent getNotificationTextComponent(String text, NotificationType notificationType)
{
TextComponent textComponent = new TextComponent(text);
textComponent.setColor(getNotificationColor(notificationType));
//textComponent.setColor(getNotificationColor(notificationType));
return textComponent;
}
public static ChatColor getNotificationColor(NotificationType notificationType)
/*public static ChatColor getNotificationColor(NotificationType notificationType)
{
ChatColor color = ChatColor.WHITE;
switch(notificationType)
@ -93,7 +96,7 @@ public class TextComponentFactory {
}
return color;
}
}*/
public static void sendPlayerUrlHeader(Player player) {
if(!Config.getInstance().getUrlLinksEnabled())
@ -101,11 +104,11 @@ public class TextComponentFactory {
Player.Spigot spigotPlayer = player.spigot();
if(webComponents != null)
/*if(webComponents != null)
{
player.spigot().sendMessage(webComponents);
return;
}
}*/
TextComponent prefix = new TextComponent("[| ");
prefix.setColor(ChatColor.DARK_AQUA);
@ -128,9 +131,7 @@ public class TextComponentFactory {
getWebLinkTextComponent(McMMOWebLinks.HELP_TRANSLATE),
new TextComponent(suffix)};
//Cache into memory since the links wont change
webComponents = baseComponents;
spigotPlayer.sendMessage(webComponents);
spigotPlayer.sendMessage(baseComponents);
}
public static void sendPlayerSubSkillList(Player player, List<TextComponent> textComponents)
@ -296,70 +297,42 @@ public class TextComponentFactory {
public static TextComponent getSubSkillTextComponent(Player player, SubSkillType subSkillType)
{
//Init our maps
if (subSkillTextComponents == null)
{
subSkillTextComponents = new HashMap<>();
lockedComponentMap = new HashMap<>();
//hoverComponentOuterMap = new HashMap<>();
}
//Get skill name & description from our locale file
String key = subSkillType.toString();
//String key = subSkillType.toString();
String skillName = subSkillType.getLocaleName();
if(subSkillTextComponents.get(key) == null)
{
//Setup Text Component
TextComponent textComponent = new TextComponent(skillName);
//textComponent.setColor(ChatColor.DARK_AQUA);
//Setup Text Component
TextComponent textComponent = new TextComponent(skillName);
//textComponent.setColor(ChatColor.DARK_AQUA);
//Hover Event
textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, getBaseComponent(player, subSkillType)));
//Hover Event
textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, getBaseComponent(player, subSkillType)));
//Insertion
textComponent.setInsertion(skillName);
textComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mmoinfo "+subSkillType.getNiceNameNoSpaces(subSkillType)));
//Insertion
textComponent.setInsertion(skillName);
textComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mmoinfo "+subSkillType.getNiceNameNoSpaces(subSkillType)));
subSkillTextComponents.put(key, textComponent);
return subSkillTextComponents.get(key);
} else {
return subSkillTextComponents.get(key);
}
return textComponent;
}
public static TextComponent getSubSkillTextComponent(Player player, AbstractSubSkill abstractSubSkill)
{
//Init our maps
if (subSkillTextComponents == null)
{
subSkillTextComponents = new HashMap<>();
lockedComponentMap = new HashMap<>();
//hoverComponentOuterMap = new HashMap<>();
}
//Get skill name & description from our locale file
String key = abstractSubSkill.getConfigKeyName();
//String key = abstractSubSkill.getConfigKeyName();
String skillName = abstractSubSkill.getNiceName();
if(subSkillTextComponents.get(key) == null)
{
//Setup Text Component
TextComponent textComponent = new TextComponent(skillName);
textComponent.setColor(ChatColor.DARK_AQUA);
//Setup Text Component
TextComponent textComponent = new TextComponent(skillName);
textComponent.setColor(ChatColor.DARK_AQUA);
//Hover Event
textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, getBaseComponent(player, abstractSubSkill)));
//Hover Event
textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, getBaseComponent(player, abstractSubSkill)));
//Insertion
textComponent.setInsertion(skillName);
textComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mmoinfo "+abstractSubSkill.getConfigKeyName()));
//Insertion
textComponent.setInsertion(skillName);
textComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mmoinfo "+abstractSubSkill.getConfigKeyName()));
subSkillTextComponents.put(key, textComponent);
return subSkillTextComponents.get(key);
} else {
return subSkillTextComponents.get(key);
}
return textComponent;
}
private static BaseComponent[] getBaseComponent(Player player, AbstractSubSkill abstractSubSkill)
@ -370,25 +343,10 @@ public class TextComponentFactory {
//If the player hasn't unlocked this skill yet we use a different JSON template
if(abstractSubSkill.getNumRanks() > 0 && curRank == 0)
{
//If the JSON component already exists
if(lockedComponentMap.get(key) != null)
return lockedComponentMap.get(key);
BaseComponent[] newComponents = getSubSkillHoverEventJSON(abstractSubSkill, player, curRank);
lockedComponentMap.put(key, newComponents);
return lockedComponentMap.get(key);
return newComponents;
}
//If the inner hashmap for this rank isn't made yet
/*if(hoverComponentOuterMap.get(curRank) == null)
hoverComponentOuterMap.put(curRank, new HashMap<>());*/
//Inner Hashmap for current rank
//HashMap<String, BaseComponent[]> innerMap = hoverComponentOuterMap.get(curRank);
/*if(innerMap.get(key) == null)
innerMap.put(key, getSubSkillHoverEventJSON(abstractSubSkill, player, curRank));*/
return getSubSkillHoverEventJSON(abstractSubSkill, player, curRank);
}
@ -400,27 +358,10 @@ public class TextComponentFactory {
//If the player hasn't unlocked this skill yet we use a different JSON template
if(subSkillType.getNumRanks() > 0 && curRank == 0)
{
//If the JSON component already exists
if(lockedComponentMap.get(key) != null)
return lockedComponentMap.get(key);
BaseComponent[] newComponents = getSubSkillHoverEventJSON(subSkillType, player, curRank);
lockedComponentMap.put(key, newComponents);
return lockedComponentMap.get(key);
return newComponents;
}
//If the inner hashmap for this rank isn't made yet
/*if(hoverComponentOuterMap.get(curRank) == null)
hoverComponentOuterMap.put(curRank, new HashMap<>());
//Inner Hashmap for current rank
HashMap<String, BaseComponent[]> innerMap = hoverComponentOuterMap.get(curRank);*/
/*if(innerMap.get(key) == null)
innerMap.put(key, getSubSkillHoverEventJSON(subSkillType, player, curRank));
return innerMap.get(key);*/
return getSubSkillHoverEventJSON(subSkillType, player, curRank);
}