mcMMO now checks in all places for a loaded profile before executing processing on said profile

This commit is contained in:
nossr50
2019-04-12 15:17:05 -07:00
parent 00cc5f0845
commit 33a68daa9c
62 changed files with 560 additions and 21 deletions

View File

@ -54,6 +54,10 @@ public final class ChimaeraWing {
mcMMOPlayer = UserManager.getPlayer(player);
//Not loaded
if(mcMMOPlayer == null)
return;
if (mcMMOPlayer.getTeleportCommenceLocation() != null) {
return;
}

View File

@ -120,11 +120,16 @@ public class EventUtils {
Player player = (Player) entity;
if (!UserManager.hasPlayerDataKey(player)) {
return false;
return true;
}
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
if(mcMMOPlayer == null)
{
return true;
}
/* Check for invincibility */
if (mcMMOPlayer.getGodMode()) {
entityDamageEvent.setCancelled(true);
@ -242,6 +247,9 @@ public class EventUtils {
public static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
if(mcMMOPlayer == null)
return;
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(teleportingPlayer, targetPlayer, mcMMOPlayer.getParty().getName());
mcMMO.p.getServer().getPluginManager().callEvent(event);
@ -300,6 +308,9 @@ public class EventUtils {
}
public static boolean handleStatsLossEvent(Player player, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
if(UserManager.getPlayer(player) == null)
return true;
McMMOPlayerStatLossEvent event = new McMMOPlayerStatLossEvent(player, levelChanged, experienceChanged);
mcMMO.p.getServer().getPluginManager().callEvent(event);
@ -346,6 +357,15 @@ public class EventUtils {
HashMap<String, Float> experienceChangedVictim = eventVictim.getExperienceChanged();
McMMOPlayer killerPlayer = UserManager.getPlayer(killer);
//Not loaded
if(killerPlayer == null)
return true;
//Not loaded
if(UserManager.getPlayer(victim) == null)
return true;
PlayerProfile victimProfile = UserManager.getPlayer(victim).getProfile();
for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) {

View File

@ -17,6 +17,9 @@ public final class HardcoreManager {
double statLossPercentage = Config.getInstance().getHardcoreDeathStatPenaltyPercentage();
int levelThreshold = Config.getInstance().getHardcoreDeathStatPenaltyLevelThreshold();
if(UserManager.getPlayer(player) == null)
return;
PlayerProfile playerProfile = UserManager.getPlayer(player).getProfile();
int totalLevelsLost = 0;
@ -59,6 +62,9 @@ public final class HardcoreManager {
double vampirismStatLeechPercentage = Config.getInstance().getHardcoreVampirismStatLeechPercentage();
int levelThreshold = Config.getInstance().getHardcoreVampirismLevelThreshold();
if(UserManager.getPlayer(killer) == null || UserManager.getPlayer(victim) == null)
return;
PlayerProfile killerProfile = UserManager.getPlayer(killer).getProfile();
PlayerProfile victimProfile = UserManager.getPlayer(victim).getProfile();
int totalLevelsStolen = 0;

View File

@ -223,6 +223,9 @@ public final class CommandUtils {
}
private static void printGroupedSkillData(Player inspect, CommandSender display, String header, List<PrimarySkillType> skillGroup) {
if(UserManager.getPlayer(inspect) == null)
return;
PlayerProfile profile = UserManager.getPlayer(inspect).getProfile();
List<String> displayData = new ArrayList<String>();

View File

@ -28,7 +28,7 @@ public class NotificationManager {
*/
public static void sendPlayerInformation(Player player, NotificationType notificationType, String key)
{
if(!UserManager.getPlayer(player).useChatNotifications())
if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications())
return;
ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
@ -39,6 +39,15 @@ public class NotificationManager {
sendNotification(player, customEvent);
}
public static boolean doesPlayerUseNotifications(Player player)
{
if(UserManager.getPlayer(player) == null)
return false;
else
return UserManager.getPlayer(player).useChatNotifications();
}
/**
* Sends players notifications from mcMMO
* This does this by sending out an event so other plugins can cancel it
@ -60,7 +69,7 @@ public class NotificationManager {
public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values)
{
if(!UserManager.getPlayer(player).useChatNotifications())
if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications())
return;
ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
@ -108,7 +117,7 @@ public class NotificationManager {
*/
public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkillType skillName, int levelsGained, int newLevel)
{
if(!UserManager.getPlayer(mcMMOPlayer.getPlayer()).useChatNotifications())
if(!mcMMOPlayer.useChatNotifications())
return;
ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
@ -129,7 +138,7 @@ public class NotificationManager {
public static void sendPlayerUnlockNotification(McMMOPlayer mcMMOPlayer, SubSkillType subSkillType)
{
if(!UserManager.getPlayer(mcMMOPlayer.getPlayer()).useChatNotifications())
if(!mcMMOPlayer.useChatNotifications())
return;
//CHAT MESSAGE

View File

@ -1,5 +1,6 @@
package com.gmail.nossr50.util.player;
import com.gmail.nossr50.api.exceptions.McMMOPlayerNotFoundException;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.mcMMO;
import com.google.common.collect.ImmutableList;
@ -95,12 +96,17 @@ public final class UserManager {
return retrieveMcMMOPlayer(playerName, true);
}
public static McMMOPlayer getPlayer(Player player) {
/**
* Gets the McMMOPlayer object for a player, this can be null if the player has not yet been loaded.
* @param player target player
* @return McMMOPlayer object for this player, null if Player has not been loaded
*/
public static McMMOPlayer getPlayer(Player player) throws McMMOPlayerNotFoundException {
//Avoid Array Index out of bounds
if(player.hasMetadata(mcMMO.playerDataKey))
return (McMMOPlayer) player.getMetadata(mcMMO.playerDataKey).get(0).value();
else
return null;
throw new McMMOPlayerNotFoundException(player);
}
private static McMMOPlayer retrieveMcMMOPlayer(String playerName, boolean offlineValid) {

View File

@ -205,6 +205,9 @@ public class ScoreboardWrapper {
// TODO is there any way to do the time that looks acceptable?
// player.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Timer", StringUtils.capitalize(sidebarType.toString().toLowerCase()), ticks / 20F));
if(UserManager.getPlayer(playerName) == null)
return;
PlayerProfile profile = UserManager.getPlayer(player).getProfile();
if (profile.getScoreboardTipsShown() >= Config.getInstance().getTipsAmount()) {
@ -435,6 +438,9 @@ public class ScoreboardWrapper {
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
if(mcMMOPlayer == null)
return;
switch (sidebarType) {
case NONE:
break;

View File

@ -628,6 +628,10 @@ public final class CombatUtils {
if (entity instanceof Player) {
Player defender = (Player) entity;
//TODO: NPC Interaction?
if(UserManager.getPlayer(defender) == null)
return true;
if (!defender.getWorld().getPVP() || defender == player || UserManager.getPlayer(defender).getGodMode()) {
return false;
}

View File

@ -172,6 +172,9 @@ public class RankUtils {
//Get our rank map
HashMap<Integer, Integer> rankMap = subSkillRanks.get(skillName);
if(UserManager.getPlayer(player) == null)
return 0;
//Skill level of parent skill
int currentSkillLevel = UserManager.getPlayer(player).getSkillLevel(subSkillType.getParentSkill());
@ -216,6 +219,9 @@ public class RankUtils {
//Get our rank map
HashMap<Integer, Integer> rankMap = subSkillRanks.get(skillName);
if(UserManager.getPlayer(player) == null)
return 0;
//Skill level of parent skill
int currentSkillLevel = UserManager.getPlayer(player).getSkillLevel(abstractSubSkill.getPrimarySkill());

View File

@ -167,6 +167,11 @@ public class SkillUtils {
}
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
//Not Loaded
if(mcMMOPlayer == null)
return;
PrimarySkillType skill = mcMMOPlayer.getAbilityMode(SuperAbilityType.SUPER_BREAKER) ? PrimarySkillType.MINING : PrimarySkillType.EXCAVATION;
int abilityLengthVar = AdvancedConfig.getInstance().getAbilityLength();