Players need to have unique objectives

This commit is contained in:
nossr50 2019-01-11 05:26:05 -08:00
parent adc83d29a7
commit f11b98c29d
14 changed files with 262 additions and 90 deletions

View File

@ -15,6 +15,9 @@ Version 2.1.0
+ Added links to mcMMO related websites to various commands + Added links to mcMMO related websites to various commands
+ Certain elements of mcMMO's UI have been restyled + Certain elements of mcMMO's UI have been restyled
+ Added the tagline "Overhaul Era" to various locations until 3.0.0 comes out + Added the tagline "Overhaul Era" to various locations until 3.0.0 comes out
+ (Skills) Tool alerts now are sent to the Action Bar
+ (Skills) Super Ability activation alerts are now sent to the Action Bar
+ (Skills) Certain Skill messages are now sent to the Action Bar
+ (Config) Added option to disable the new URL links to config.yml + (Config) Added option to disable the new URL links to config.yml
+ (Config) New config file added coreskills.yml + (Config) New config file added coreskills.yml
+ (Config) Added rank settings for the new Woodcutting skill + (Config) Added rank settings for the new Woodcutting skill

View File

@ -711,7 +711,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
case SUBSKILL_UNLOCKED: case SUBSKILL_UNLOCKED:
key = "SubSkillUnlocked"; key = "SubSkillUnlocked";
break; break;
case TOOL_READY: case TOOL:
key = "ToolReady"; key = "ToolReady";
break; break;
case SUPER_ABILITY: case SUPER_ABILITY:
@ -781,16 +781,25 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
return config.getBoolean("Style.JSON.Hover.Details.Description.Underlined"); return config.getBoolean("Style.JSON.Hover.Details.Description.Underlined");
} }
public ChatColor getJSONActionBarColor(NotificationType notificationType)
{
return getChatColor(LocaleLoader.getString("Style.JSON.Notification."+notificationType.toString()+".Color"));
}
private ChatColor getChatColorFromKey(String keyLocation) { private ChatColor getChatColorFromKey(String keyLocation) {
String colorName = LocaleLoader.getString(keyLocation); String colorName = LocaleLoader.getString(keyLocation);
return getChatColor(colorName);
}
private ChatColor getChatColor(String configColor) {
for (ChatColor chatColor : ChatColor.values()) { for (ChatColor chatColor : ChatColor.values()) {
if (colorName.equalsIgnoreCase(chatColor.toString())) if (configColor.equalsIgnoreCase(chatColor.getName()))
return chatColor; return chatColor;
} }
//Invalid Color //Invalid Color
System.out.println("[mcMMO] " + colorName + " is an invalid color value for key " + keyLocation); System.out.println("[mcMMO] " + configColor + " is an invalid color value");
return ChatColor.WHITE; return ChatColor.WHITE;
} }

View File

@ -4,10 +4,23 @@ package com.gmail.nossr50.datatypes.interactions;
* This class helps define the types of information interactions we will have with players * This class helps define the types of information interactions we will have with players
*/ */
public enum NotificationType { public enum NotificationType {
XP_GAIN, XP_GAIN("ExperienceGain"),
SUBSKILL_UNLOCKED, SUBSKILL_UNLOCKED("SubSkillUnlocked"),
LEVEL_UP_MESSAGE, LEVEL_UP_MESSAGE("LevelUps"),
SUBSKILL_MESSAGE, SUBSKILL_MESSAGE("SubSkillInteraction"),
TOOL_READY, TOOL("ToolReady"),
SUPER_ABILITY UNSKILLED("LevelRequirementNotMet"),
} ABILITY_COOLDOWN("AbilityCoolDown"),
SUPER_ABILITY("SuperAbilityInteraction");
final String niceName;
NotificationType(String niceName)
{
this.niceName = niceName;
}
@Override
public String toString() {
return niceName;
}}

View File

@ -4,6 +4,7 @@ import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.config.experience.ExperienceConfig;
import com.gmail.nossr50.datatypes.chat.ChatMode; import com.gmail.nossr50.datatypes.chat.ChatMode;
import com.gmail.nossr50.datatypes.interactions.NotificationType;
import com.gmail.nossr50.datatypes.mods.CustomTool; import com.gmail.nossr50.datatypes.mods.CustomTool;
import com.gmail.nossr50.datatypes.party.Party; import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyTeleportRecord; import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
@ -11,6 +12,7 @@ import com.gmail.nossr50.datatypes.skills.SuperAbility;
import com.gmail.nossr50.datatypes.skills.PrimarySkill; import com.gmail.nossr50.datatypes.skills.PrimarySkill;
import com.gmail.nossr50.datatypes.skills.ToolType; import com.gmail.nossr50.datatypes.skills.ToolType;
import com.gmail.nossr50.datatypes.skills.XPGainReason; import com.gmail.nossr50.datatypes.skills.XPGainReason;
import com.gmail.nossr50.listeners.InteractionManager;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.party.PartyManager; import com.gmail.nossr50.party.PartyManager;
@ -38,7 +40,6 @@ import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.EventUtils;
import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.StringUtils;
import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.player.UserManager;
import com.gmail.nossr50.util.scoreboards.ScoreboardManager; import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
import com.gmail.nossr50.util.skills.ParticleEffectUtils; import com.gmail.nossr50.util.skills.ParticleEffectUtils;
@ -514,7 +515,8 @@ public class McMMOPlayer {
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, Misc.LEVELUP_VOLUME, Misc.LEVELUP_PITCH); player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, Misc.LEVELUP_VOLUME, Misc.LEVELUP_PITCH);
} }
player.sendMessage(LocaleLoader.getString(StringUtils.getCapitalized(primarySkill.toString()) + ".Skillup", levelsGained, getSkillLevel(primarySkill))); InteractionManager.sendPlayerLevelUpNotification(UserManager.getPlayer(player), primarySkill, profile.getSkillLevel(primarySkill));
//player.sendMessage(LocaleLoader.getString(StringUtils.getCapitalized(primarySkill.toString()) + ".Skillup", levelsGained, getSkillLevel(primarySkill)));
} }
/* /*
@ -729,8 +731,6 @@ public class McMMOPlayer {
ToolType tool = skill.getTool(); ToolType tool = skill.getTool();
SuperAbility ability = skill.getAbility(); SuperAbility ability = skill.getAbility();
setToolPreparationMode(tool, false);
if (getAbilityMode(ability)) { if (getAbilityMode(ability)) {
return; return;
} }
@ -785,6 +785,7 @@ public class McMMOPlayer {
SkillUtils.handleAbilitySpeedIncrease(player); SkillUtils.handleAbilitySpeedIncrease(player);
} }
setToolPreparationMode(tool, false);
new AbilityDisableTask(this, ability).runTaskLater(mcMMO.p, ticks * Misc.TICK_CONVERSION_FACTOR); new AbilityDisableTask(this, ability).runTaskLater(mcMMO.p, ticks * Misc.TICK_CONVERSION_FACTOR);
} }
@ -811,6 +812,7 @@ public class McMMOPlayer {
SuperAbility ability = skill.getAbility(); SuperAbility ability = skill.getAbility();
ToolType tool = skill.getTool(); ToolType tool = skill.getTool();
setToolPreparationMode(tool, true);
/* /*
* Woodcutting & Axes need to be treated differently. * Woodcutting & Axes need to be treated differently.
@ -821,16 +823,15 @@ public class McMMOPlayer {
int timeRemaining = calculateTimeRemaining(ability); int timeRemaining = calculateTimeRemaining(ability);
if (!getAbilityMode(ability) && timeRemaining > 0) { if (!getAbilityMode(ability) && timeRemaining > 0) {
player.sendMessage(LocaleLoader.getString("Skills.TooTired", timeRemaining)); InteractionManager.sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Skills.TooTired", String.valueOf(timeRemaining));
return; return;
} }
} }
if (Config.getInstance().getAbilityMessagesEnabled()) { if (Config.getInstance().getAbilityMessagesEnabled()) {
player.sendMessage(tool.getRaiseTool()); InteractionManager.sendPlayerInformation(player, NotificationType.TOOL, tool.getRaiseTool());
} }
setToolPreparationMode(tool, true);
new ToolLowerTask(this, tool).runTaskLaterAsynchronously(mcMMO.p, 4 * Misc.TICK_CONVERSION_FACTOR); new ToolLowerTask(this, tool).runTaskLaterAsynchronously(mcMMO.p, 4 * Misc.TICK_CONVERSION_FACTOR);
} }
} }

View File

@ -7,12 +7,12 @@ import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.ItemUtils; import com.gmail.nossr50.util.ItemUtils;
public enum ToolType { public enum ToolType {
AXE(LocaleLoader.getString("Axes.Ability.Lower"), LocaleLoader.getString("Axes.Ability.Ready")), AXE("Axes.Ability.Lower", "Axes.Ability.Ready"),
FISTS(LocaleLoader.getString("Unarmed.Ability.Lower"), LocaleLoader.getString("Unarmed.Ability.Ready")), FISTS("Unarmed.Ability.Lower", "Unarmed.Ability.Ready"),
HOE(LocaleLoader.getString("Herbalism.Ability.Lower"), LocaleLoader.getString("Herbalism.Ability.Ready")), HOE("Herbalism.Ability.Lower", "Herbalism.Ability.Ready"),
PICKAXE(LocaleLoader.getString("Mining.Ability.Lower"), LocaleLoader.getString("Mining.Ability.Ready")), PICKAXE("Mining.Ability.Lower", "Mining.Ability.Ready"),
SHOVEL(LocaleLoader.getString("Excavation.Ability.Lower"), LocaleLoader.getString("Excavation.Ability.Ready")), SHOVEL("Excavation.Ability.Lower", "Excavation.Ability.Ready"),
SWORD(LocaleLoader.getString("Swords.Ability.Lower"), LocaleLoader.getString("Swords.Ability.Ready")); SWORD("Swords.Ability.Lower", "Swords.Ability.Ready");
private String lowerTool; private String lowerTool;
private String raiseTool; private String raiseTool;

View File

@ -1,6 +1,8 @@
package com.gmail.nossr50.events.skills; package com.gmail.nossr50.events.skills;
import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.interactions.NotificationType;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
@ -12,13 +14,16 @@ import org.bukkit.event.player.PlayerEvent;
public class McMMOPlayerNotificationEvent extends PlayerEvent implements Cancellable { public class McMMOPlayerNotificationEvent extends PlayerEvent implements Cancellable {
private boolean isCancelled; private boolean isCancelled;
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
protected String notificationMessage; protected ChatMessageType chatMessageType;
protected TextComponent notificationTextComponent;
protected final NotificationType notificationType; protected final NotificationType notificationType;
public McMMOPlayerNotificationEvent(Player who, NotificationType notificationType, String notificationMessage) { public McMMOPlayerNotificationEvent(Player who, NotificationType notificationType, net.md_5.bungee.api.chat.TextComponent notificationTextComponent, ChatMessageType chatMessageType) {
super(who); super(who);
this.notificationType = notificationType; this.notificationType = notificationType;
this.notificationMessage = notificationMessage; this.notificationTextComponent = notificationTextComponent;
this.chatMessageType = chatMessageType;
isCancelled = false; isCancelled = false;
} }
@ -26,6 +31,22 @@ public class McMMOPlayerNotificationEvent extends PlayerEvent implements Cancell
* Getters & Setters * Getters & Setters
*/ */
public TextComponent getNotificationTextComponent() {
return notificationTextComponent;
}
public void setNotificationTextComponent(TextComponent notificationTextComponent) {
this.notificationTextComponent = notificationTextComponent;
}
public ChatMessageType getChatMessageType() {
return chatMessageType;
}
public void setChatMessageType(ChatMessageType chatMessageType) {
this.chatMessageType = chatMessageType;
}
/** /**
* The notification type for this event * The notification type for this event
* @return this event's notification type * @return this event's notification type
@ -34,22 +55,6 @@ public class McMMOPlayerNotificationEvent extends PlayerEvent implements Cancell
return notificationType; return notificationType;
} }
/**
* The message delivered to players by this notification
* @return the message that will be delivered to the player
*/
public String getNotificationMessage() {
return notificationMessage;
}
/**
* Change the notification message
* @param newMessage the new replacement message
*/
public void setNotificationMessage(String newMessage) {
notificationMessage = newMessage;
}
/* /*
* Custom Event Boilerplate * Custom Event Boilerplate
*/ */

View File

@ -2,6 +2,8 @@ package com.gmail.nossr50.listeners;
import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.interactions.NotificationType;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkill;
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill; import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
import com.gmail.nossr50.datatypes.skills.subskills.interfaces.InteractType; import com.gmail.nossr50.datatypes.skills.subskills.interfaces.InteractType;
import com.gmail.nossr50.datatypes.skills.subskills.interfaces.Interaction; import com.gmail.nossr50.datatypes.skills.subskills.interfaces.Interaction;
@ -10,10 +12,12 @@ import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.TextComponentFactory; import com.gmail.nossr50.util.TextComponentFactory;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -91,25 +95,61 @@ public class InteractionManager {
* This does this by sending out an event so other plugins can cancel it * This does this by sending out an event so other plugins can cancel it
* @param player target player * @param player target player
* @param notificationType notifications defined type * @param notificationType notifications defined type
* @param localeKey the locale key for the notifications defined message * @param key the locale key for the notifications defined message
*/ */
public static void sendPlayerInformation(Player player, NotificationType notificationType, String localeKey) public static void sendPlayerInformation(Player player, NotificationType notificationType, String key)
{ {
ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
TextComponent message = TextComponentFactory.getNotificationTextComponentFromLocale(key, notificationType);
McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
sendNotification(player, customEvent);
}
public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values)
{
ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
TextComponent message = TextComponentFactory.getNotificationTextComponentFromLocale(key, notificationType, values);
McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
sendNotification(player, customEvent);
}
private static void sendNotification(Player player, McMMOPlayerNotificationEvent customEvent) {
if (customEvent.isCancelled())
return;
player.spigot().sendMessage(customEvent.getChatMessageType(), customEvent.getNotificationTextComponent());
}
private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player, NotificationType notificationType, ChatMessageType destination, TextComponent message) {
//Init event //Init event
McMMOPlayerNotificationEvent customEvent = new McMMOPlayerNotificationEvent(player, notificationType, LocaleLoader.getString(localeKey)); McMMOPlayerNotificationEvent customEvent = new McMMOPlayerNotificationEvent(player,
notificationType, message, destination);
//Call event //Call event
Bukkit.getServer().getPluginManager().callEvent(customEvent); Bukkit.getServer().getPluginManager().callEvent(customEvent);
return customEvent;
}
//Check to see if our custom event is cancelled /**
if(!customEvent.isCancelled()) * Handles sending level up notifications to a mcMMOPlayer
{ * @param mcMMOPlayer target mcMMOPlayer
if(AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType)) * @param skillName skill that leveled up
{ * @param newLevel new level of that skill
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponentFactory.getNotificationTextComponent(customEvent.getNotificationMessage(), notificationType)); */
} else { public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkill skillName, int newLevel)
player.spigot().sendMessage(ChatMessageType.SYSTEM, TextComponentFactory.getNotificationTextComponent(customEvent.getNotificationMessage(), notificationType)); {
} ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
}
TextComponent levelUpTextComponent = TextComponentFactory.getNotificationLevelUpTextComponent(mcMMOPlayer, skillName, newLevel);
McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(mcMMOPlayer.getPlayer(), NotificationType.LEVEL_UP_MESSAGE, destination, levelUpTextComponent);
sendNotification(mcMMOPlayer.getPlayer(), customEvent);
} }
/** /**

View File

@ -1,5 +1,7 @@
package com.gmail.nossr50.runnables.skills; package com.gmail.nossr50.runnables.skills;
import com.gmail.nossr50.datatypes.interactions.NotificationType;
import com.gmail.nossr50.listeners.InteractionManager;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
@ -24,7 +26,7 @@ public class ToolLowerTask extends BukkitRunnable {
mcMMOPlayer.setToolPreparationMode(tool, false); mcMMOPlayer.setToolPreparationMode(tool, false);
if (Config.getInstance().getAbilityMessagesEnabled()) { if (Config.getInstance().getAbilityMessagesEnabled()) {
mcMMOPlayer.getPlayer().sendMessage(tool.getLowerTool()); InteractionManager.sendPlayerInformation(mcMMOPlayer.getPlayer(), NotificationType.TOOL, tool.getLowerTool());
} }
} }
} }

View File

@ -5,6 +5,7 @@ import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.interactions.NotificationType;
import com.gmail.nossr50.datatypes.json.McMMOUrl; import com.gmail.nossr50.datatypes.json.McMMOUrl;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.PrimarySkill; import com.gmail.nossr50.datatypes.skills.PrimarySkill;
import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.datatypes.skills.SubSkillType;
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill; import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
@ -26,12 +27,68 @@ public class TextComponentFactory {
public static BaseComponent[] webComponents; public static BaseComponent[] webComponents;
public static TextComponent getNotificationTextComponent(String localeKey, NotificationType notificationType) /**
* This one is a bit simple
* @param localeKey
* @param notificationType
* @param values
* @return
*/
public static TextComponent getNotificationTextComponentFromLocale(String localeKey, NotificationType notificationType, String... values)
{ {
TextComponent textComponent = new TextComponent(LocaleLoader.getString(localeKey)); //TODO: Make this colored
return new TextComponent(LocaleLoader.getString(localeKey, values));
}
public static TextComponent getNotificationTextComponentFromLocale(String localeKey, NotificationType notificationType)
{
return getNotificationTextComponent(LocaleLoader.getString(localeKey), notificationType);
}
public static TextComponent getNotificationLevelUpTextComponent(McMMOPlayer player, PrimarySkill skill, int currentLevel)
{
//player.sendMessage(LocaleLoader.getString(StringUtils.getCapitalized(primarySkill.toString()) + ".Skillup", levelsGained, getSkillLevel(primarySkill)));
TextComponent textComponent = new TextComponent(LocaleLoader.getString("JSON."+StringUtils.getCapitalized(skill.toString()))
+" "+LocaleLoader.getString("JSON.LevelUp"));
textComponent.setColor(AdvancedConfig.getInstance().getJSONActionBarColor(NotificationType.LEVEL_UP_MESSAGE));
TextComponent childComponent = new TextComponent(" "+currentLevel);
//TODO: Config
childComponent.setColor(ChatColor.GREEN);
childComponent.setBold(true);
textComponent.addExtra(childComponent);
return textComponent; return textComponent;
} }
public static TextComponent getNotificationTextComponent(String text, NotificationType notificationType)
{
System.out.println("Test");
TextComponent textComponent = new TextComponent(text);
textComponent.setColor(getNotificationColor(notificationType));
return textComponent;
}
public static ChatColor getNotificationColor(NotificationType notificationType)
{
ChatColor color = ChatColor.WHITE;
switch(notificationType)
{
case SUPER_ABILITY:
break;
case TOOL:
break;
case SUBSKILL_UNLOCKED:
break;
case SUBSKILL_MESSAGE:
break;
case LEVEL_UP_MESSAGE:
break;
case XP_GAIN:
break;
}
return color;
}
public static void sendPlayerUrlHeader(Player player) { public static void sendPlayerUrlHeader(Player player) {
if(!Config.getInstance().getUrlLinksEnabled()) if(!Config.getInstance().getUrlLinksEnabled())
return; return;

View File

@ -0,0 +1,6 @@
package com.gmail.nossr50.util.scoreboards;
public enum ObjectiveType {
SIDEBAR,
POWER
}

View File

@ -32,8 +32,9 @@ import com.google.common.collect.Lists;
public class ScoreboardManager { public class ScoreboardManager {
static final Map<String, ScoreboardWrapper> PLAYER_SCOREBOARDS = new HashMap<String, ScoreboardWrapper>(); static final Map<String, ScoreboardWrapper> PLAYER_SCOREBOARDS = new HashMap<String, ScoreboardWrapper>();
// do not localize; these are internal identifiers // do not localize; these are internal identifiers
static final String SIDEBAR_OBJECTIVE = "mcmmo_sidebar"; //static final String SIDEBAR_OBJECTIVE = "mcmmo_sidebar";
static final String POWER_OBJECTIVE = "mcmmo_pwrlvl"; static final String POWER_OBJECTIVE = "mcmmo_pwrlvl";
static final String HEADER_STATS = LocaleLoader.getString("Scoreboard.Header.PlayerStats"); static final String HEADER_STATS = LocaleLoader.getString("Scoreboard.Header.PlayerStats");
@ -401,7 +402,7 @@ public class ScoreboardManager {
Objective powerObjective = mcMMO.p.getServer().getScoreboardManager().getMainScoreboard().getObjective(POWER_OBJECTIVE); Objective powerObjective = mcMMO.p.getServer().getScoreboardManager().getMainScoreboard().getObjective(POWER_OBJECTIVE);
if (powerObjective == null) { if (powerObjective == null) {
powerObjective = mcMMO.p.getServer().getScoreboardManager().getMainScoreboard().registerNewObjective(POWER_OBJECTIVE, "dummy"); powerObjective = mcMMO.p.getServer().getScoreboardManager().getMainScoreboard().registerNewObjective(POWER_OBJECTIVE, "dummy");
powerObjective.setDisplayName(TAG_POWER_LEVEL); powerObjective.setDisplayName(TAG_POWER_LEVEL);
powerObjective.setDisplaySlot(DisplaySlot.BELOW_NAME); powerObjective.setDisplaySlot(DisplaySlot.BELOW_NAME);
} }

View File

@ -2,6 +2,7 @@ package com.gmail.nossr50.util.scoreboards;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -30,6 +31,7 @@ import org.apache.commons.lang.Validate;
public class ScoreboardWrapper { public class ScoreboardWrapper {
// Initialization variables // Initialization variables
public final String playerName; public final String playerName;
public final UUID playerUUID;
private final Scoreboard scoreboard; private final Scoreboard scoreboard;
private boolean tippedKeep = false; private boolean tippedKeep = false;
private boolean tippedClear = false; private boolean tippedClear = false;
@ -46,12 +48,24 @@ public class ScoreboardWrapper {
private PlayerProfile targetProfile = null; private PlayerProfile targetProfile = null;
public int leaderboardPage = -1; public int leaderboardPage = -1;
private ScoreboardWrapper(String playerName, Scoreboard scoreboard) { private ScoreboardWrapper(Player player, Scoreboard scoreboard) {
this.playerName = playerName; this.playerName = player.getName();
this.scoreboard = scoreboard; this.scoreboard = scoreboard;
this.playerUUID = player.getUniqueId();
sidebarType = SidebarType.NONE; sidebarType = SidebarType.NONE;
sidebarObjective = this.scoreboard.registerNewObjective(ScoreboardManager.SIDEBAR_OBJECTIVE, "dummy");
powerObjective = this.scoreboard.registerNewObjective(ScoreboardManager.POWER_OBJECTIVE, "dummy"); if(this.scoreboard.getObjective(getObjective(ObjectiveType.SIDEBAR)) == null)
sidebarObjective = this.scoreboard.registerNewObjective(getObjective(ObjectiveType.SIDEBAR), "dummy");
else
{
this.scoreboard.getObjective(getObjective(ObjectiveType.SIDEBAR)).unregister();
sidebarObjective = this.scoreboard.registerNewObjective(getObjective(ObjectiveType.SIDEBAR), "dummy");
}
if(this.scoreboard.getObjective(getObjective(ObjectiveType.POWER)) == null)
powerObjective = this.scoreboard.registerNewObjective(getObjective(ObjectiveType.POWER), "dummy");
else
powerObjective = this.scoreboard.getObjective(getObjective(ObjectiveType.POWER));
if (Config.getInstance().getPowerLevelTagsEnabled()) { if (Config.getInstance().getPowerLevelTagsEnabled()) {
powerObjective.setDisplayName(ScoreboardManager.TAG_POWER_LEVEL); powerObjective.setDisplayName(ScoreboardManager.TAG_POWER_LEVEL);
@ -63,8 +77,22 @@ public class ScoreboardWrapper {
} }
} }
public String getObjective(ObjectiveType objectiveType)
{
switch(objectiveType)
{
case POWER:
return ScoreboardManager.POWER_OBJECTIVE;
case SIDEBAR:
return playerName;
default:
return playerName;
}
}
public static ScoreboardWrapper create(Player player) { public static ScoreboardWrapper create(Player player) {
return new ScoreboardWrapper(player.getName(), mcMMO.p.getServer().getScoreboardManager().getMainScoreboard()); return new ScoreboardWrapper(player, mcMMO.p.getServer().getScoreboardManager().getMainScoreboard());
} }
public BukkitTask updateTask = null; public BukkitTask updateTask = null;
@ -372,7 +400,7 @@ public class ScoreboardWrapper {
// Setup for after a board type change // Setup for after a board type change
protected void loadObjective(String displayName) { protected void loadObjective(String displayName) {
sidebarObjective.unregister(); sidebarObjective.unregister();
sidebarObjective = scoreboard.registerNewObjective(ScoreboardManager.SIDEBAR_OBJECTIVE, "dummy"); sidebarObjective = scoreboard.registerNewObjective(getObjective(ObjectiveType.SIDEBAR), "dummy");
if (displayName.length() > 32) { if (displayName.length() > 32) {
displayName = displayName.substring(0, 32); displayName = displayName.substring(0, 32);

View File

@ -671,30 +671,22 @@ Skills:
Style: Style:
JSON: JSON:
Notification: Notification:
LevelUps: LevelRequirementNotMet:
Bold: true Color: RED
Italics: false AbilityCoolDown:
Underline: false Color: RED
ToolReady: LevelUps:
Bold: false Color: GOLD
Italics: true ToolReady:
Underline: false Color: GREEN
SubSkillInteraction: SubSkillInteraction:
Bold: false Color: YELLOW
Italics: true SubSkillUnlocked:
Underline: false Color: PURPLE
SubSkillUnlocked: SuperAbilityInteraction:
Bold: true Color: DARK_AQUA
Italics: false ExperienceGain:
Underline: false Color: WHITE
SuperAbilityInteraction:
Bold: true
Italics: false
Underline: false
ExperienceGain:
Bold: true
Italics: false
Underline: false
Hover: Hover:
Details: Details:
Header: Header:

View File

@ -25,6 +25,21 @@ JSON.JWrapper.Target.Mobs=Mobs
JSON.JWrapper.Perks.Header=[[GOLD]]Lucky Perks JSON.JWrapper.Perks.Header=[[GOLD]]Lucky Perks
JSON.JWrapper.Perks.Lucky={0}% Better Odds JSON.JWrapper.Perks.Lucky={0}% Better Odds
JSON.Hover.Tips=Tips JSON.Hover.Tips=Tips
JSON.Acrobatics=Acrobatics
JSON.Alchemy=Alchemy
JSON.Archery=Archery
JSON.Axes=Axes
JSON.Excavation=Excavation
JSON.Fishing=Fishing
JSON.Herbalism=Herbalism
JSON.Mining=Mining
JSON.Repair=Repair
JSON.Salvage=Salvage
JSON.Swords=Swords
JSON.Taming=Taming
JSON.Unarmed=Unarmed
JSON.Woodcutting=Woodcutting
JSON.LevelUp=increased to
#This is the message sent to players when an ability is activated #This is the message sent to players when an ability is activated
JSON.Notification.SuperAbility={0} JSON.Notification.SuperAbility={0}