more work on parties and user data

This commit is contained in:
nossr50
2020-12-08 15:34:16 -08:00
parent 0bb65e66e8
commit 3cb63202a3
54 changed files with 341 additions and 323 deletions

View File

@@ -51,7 +51,7 @@ public final class ChimaeraWing {
return;
}
mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Not loaded
if(mmoPlayer == null)

View File

@@ -96,7 +96,7 @@ public final class EventUtils {
*/
public static McMMOPlayer getMcMMOPlayer(@NotNull Entity entity)
{
return mcMMO.getUserManager().queryMcMMOPlayer((Player)entity);
return mcMMO.getUserManager().queryPlayer((Player)entity);
}
/**
@@ -144,7 +144,7 @@ public final class EventUtils {
return true;
}
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
if(mmoPlayer == null)
{
@@ -222,7 +222,7 @@ public final class EventUtils {
boolean isCancelled = event.isCancelled();
if (isCancelled) {
PlayerProfile profile = mcMMO.getUserManager().queryMcMMOPlayer(player);
PlayerProfile profile = mcMMO.getUserManager().queryPlayer(player);
profile.getExperienceManager().setSkillLevel(skill, profile.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged));
profile.addXp(skill, xpRemoved);
@@ -238,7 +238,7 @@ public final class EventUtils {
boolean isCancelled = event.isCancelled();
if (isCancelled) {
PlayerProfile profile = mcMMO.getUserManager().queryMcMMOPlayer(player);
PlayerProfile profile = mcMMO.getUserManager().queryPlayer(player);
profile.modifySkill(skill, profile.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged));
profile.addXp(skill, xpRemoved);
@@ -273,7 +273,7 @@ public final class EventUtils {
}
public static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(teleportingPlayer);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(teleportingPlayer);
if(mmoPlayer == null)
return;
@@ -328,15 +328,15 @@ public final class EventUtils {
boolean isCancelled = event.isCancelled();
if (!isCancelled) {
mcMMO.getUserManager().queryMcMMOPlayer(player).addXp(skill, event.getRawXpGained());
mcMMO.getUserManager().queryMcMMOPlayer(player).registerXpGain(skill, event.getRawXpGained());
mcMMO.getUserManager().queryPlayer(player).addXp(skill, event.getRawXpGained());
mcMMO.getUserManager().queryPlayer(player).registerXpGain(skill, event.getRawXpGained());
}
return !isCancelled;
}
public static boolean handleStatsLossEvent(Player player, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
if(mcMMO.getUserManager().queryMcMMOPlayer(player) == null)
if(mcMMO.getUserManager().queryPlayer(player) == null)
return true;
McMMOPlayerStatLossEvent event = new McMMOPlayerStatLossEvent(player, levelChanged, experienceChanged);
@@ -347,7 +347,7 @@ public final class EventUtils {
if (!isCancelled) {
levelChanged = event.getLevelChanged();
experienceChanged = event.getExperienceChanged();
PlayerProfile playerProfile = mcMMO.getUserManager().queryMcMMOPlayer(player);
PlayerProfile playerProfile = mcMMO.getUserManager().queryPlayer(player);
for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) {
String skillName = primarySkillType.toString();
@@ -386,17 +386,17 @@ public final class EventUtils {
HashMap<String, Integer> levelChangedVictim = eventVictim.getLevelChanged();
HashMap<String, Float> experienceChangedVictim = eventVictim.getExperienceChanged();
McMMOPlayer killerPlayer = mcMMO.getUserManager().queryMcMMOPlayer(killer);
McMMOPlayer killerPlayer = mcMMO.getUserManager().queryPlayer(killer);
//Not loaded
if(killerPlayer == null)
return true;
//Not loaded
if(mcMMO.getUserManager().queryMcMMOPlayer(victim) == null)
if(mcMMO.getUserManager().queryPlayer(victim) == null)
return true;
PlayerProfile victimProfile = mcMMO.getUserManager().queryMcMMOPlayer(victim);
PlayerProfile victimProfile = mcMMO.getUserManager().queryPlayer(victim);
for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) {
String skillName = primarySkillType.toString();

View File

@@ -25,10 +25,10 @@ public final class HardcoreManager {
double statLossPercentage = Config.getInstance().getHardcoreDeathStatPenaltyPercentage();
int levelThreshold = Config.getInstance().getHardcoreDeathStatPenaltyLevelThreshold();
if(mcMMO.getUserManager().queryMcMMOPlayer(player) == null)
if(mcMMO.getUserManager().queryPlayer(player) == null)
return;
PlayerProfile playerProfile = mcMMO.getUserManager().queryMcMMOPlayer(player);
PlayerProfile playerProfile = mcMMO.getUserManager().queryPlayer(player);
int totalLevelsLost = 0;
HashMap<String, Integer> levelChanged = new HashMap<>();
@@ -76,11 +76,11 @@ public final class HardcoreManager {
double vampirismStatLeechPercentage = Config.getInstance().getHardcoreVampirismStatLeechPercentage();
int levelThreshold = Config.getInstance().getHardcoreVampirismLevelThreshold();
if(mcMMO.getUserManager().queryMcMMOPlayer(killer) == null || mcMMO.getUserManager().queryMcMMOPlayer(victim) == null)
if(mcMMO.getUserManager().queryPlayer(killer) == null || mcMMO.getUserManager().queryPlayer(victim) == null)
return;
PlayerProfile killerProfile = mcMMO.getUserManager().queryMcMMOPlayer(killer);
PlayerProfile victimProfile = mcMMO.getUserManager().queryMcMMOPlayer(victim);
PlayerProfile killerProfile = mcMMO.getUserManager().queryPlayer(killer);
PlayerProfile victimProfile = mcMMO.getUserManager().queryPlayer(victim);
int totalLevelsStolen = 0;
HashMap<String, Integer> levelChanged = new HashMap<>();

View File

@@ -368,7 +368,7 @@ public final class HolidayManager {
if(!Config.getInstance().isAprilFoolsAllowed())
return;
final McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
final McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
if (mmoPlayer == null) return;
int levelTotal = Misc.getRandom().nextInt(1 + mmoPlayer.getSkillLevel(PrimarySkillType.MINING)) + 1;

View File

@@ -215,10 +215,10 @@ public final class CommandUtils {
}
private static void printGroupedSkillData(Player inspect, CommandSender display, String header, List<PrimarySkillType> skillGroup) {
if(mcMMO.getUserManager().queryMcMMOPlayer(inspect) == null)
if(mcMMO.getUserManager().queryPlayer(inspect) == null)
return;
PlayerProfile profile = mcMMO.getUserManager().queryMcMMOPlayer(inspect);
PlayerProfile profile = mcMMO.getUserManager().queryPlayer(inspect);
List<String> displayData = new ArrayList<>();
displayData.add(header);

View File

@@ -36,7 +36,7 @@ public class NotificationManager {
*/
public static void sendPlayerInformation(Player player, NotificationType notificationType, String key)
{
if(mcMMO.getUserManager().queryMcMMOPlayer(player) == null || !mcMMO.getUserManager().queryMcMMOPlayer(player).hasSkillChatNotifications())
if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
return;
McMMOMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM;
@@ -50,10 +50,10 @@ public class NotificationManager {
public static boolean doesPlayerUseNotifications(Player player)
{
if(mcMMO.getUserManager().queryMcMMOPlayer(player) == null)
if(mcMMO.getUserManager().queryPlayer(player) == null)
return false;
else
return mcMMO.getUserManager().queryMcMMOPlayer(player).hasSkillChatNotifications();
return mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications();
}
/**
@@ -72,7 +72,7 @@ public class NotificationManager {
public static void sendPlayerInformationChatOnly(Player player, String key, String... values)
{
if(mcMMO.getUserManager().queryMcMMOPlayer(player) == null || !mcMMO.getUserManager().queryMcMMOPlayer(player).hasSkillChatNotifications())
if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
return;
String preColoredString = LocaleLoader.getString(key, (Object[]) values);
@@ -81,7 +81,7 @@ public class NotificationManager {
public static void sendPlayerInformationChatOnlyPrefixed(Player player, String key, String... values)
{
if(mcMMO.getUserManager().queryMcMMOPlayer(player) == null || !mcMMO.getUserManager().queryMcMMOPlayer(player).hasSkillChatNotifications())
if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
return;
String preColoredString = LocaleLoader.getString(key, (Object[]) values);
@@ -91,7 +91,7 @@ public class NotificationManager {
public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values)
{
if(mcMMO.getUserManager().queryMcMMOPlayer(player) == null || !mcMMO.getUserManager().queryMcMMOPlayer(player).hasSkillChatNotifications())
if(mcMMO.getUserManager().queryPlayer(player) == null || !mcMMO.getUserManager().queryPlayer(player).hasSkillChatNotifications())
return;
McMMOMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM;

View File

@@ -4,6 +4,7 @@ import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.player.MMODataSnapshot;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PersistentPlayerData;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.runnables.player.PersistentPlayerDataSaveTask;
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
@@ -42,20 +43,43 @@ public final class UserManager {
playerDataSet.add(mmoPlayer); //for sync saves on shutdown
}
/**
* Cleanup player data
*
* @param mmoPlayer target player
*/
public void cleanupPlayer(@NotNull McMMOPlayer mmoPlayer) {
playerDataSet.remove(mmoPlayer);
}
/**
* 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 @Nullable McMMOPlayer queryPlayer(@Nullable Player player) {
if(player == null)
return null;
if(player.hasMetadata(mcMMO.playerDataKey))
return (McMMOPlayer) player.getMetadata(mcMMO.playerDataKey).get(0).value();
else
return null;
}
/**
* Remove a user.
*
* @param player The Player object
*/
public void remove(@NotNull Player player) {
McMMOPlayer mmoPlayer = queryMcMMOPlayer(player);
mmoPlayer.cleanup();
player.removeMetadata(mcMMO.playerDataKey, mcMMO.p);
McMMOPlayer mmoPlayer = queryPlayer(player);
if(mmoPlayer != null) {
mmoPlayer.cleanup();
}
player.removeMetadata(mcMMO.playerDataKey, mcMMO.p);
playerDataSet.remove(mmoPlayer); //Clear sync save tracking
}
@@ -75,83 +99,13 @@ public final class UserManager {
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
if (hasPlayerDataKey(player)) {
playerCollection.add(queryMcMMOPlayer(player));
playerCollection.add(queryPlayer(player));
}
}
return playerCollection;
}
/**
* Get the McMMOPlayer of a player by name.
*
* @param playerName The name of the player whose McMMOPlayer to retrieve
* @return the player's McMMOPlayer object
*/
public @Nullable McMMOPlayer queryMcMMOPlayer(@NotNull UUID playerUUID) {
return retrieveMcMMOPlayer(playerName, false);
}
/**
* Attempts to find a player in the database by name alone
* @param playerName target player name
* @return will return a valid McMMOPlayer if one is found, otherwise returns null
*/
public @Nullable OfflinePlayer findPlayer(@NotNull String playerName) {
}
public @Nullable McMMOPlayer queryMcMMOPlayer(@NotNull OfflinePlayer offlinePlayer) {
return queryMcMMOPlayer(offlinePlayer.getUniqueId());
}
/**
* Used to grab a player by name alone
* @param playerName
* @return
*/
@Deprecated
public @Nullable McMMOPlayer queryMcMMOPlayer(@NotNull String playerName) {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerName);
if(offlinePlayer != null) {
return retrieveMcMMOPlayer(offlinePlayer);
} else {
return null;
}
}
public @Nullable McMMOPlayer getOfflinePlayer(String playerName) {
return retrieveMcMMOPlayer(playerName, true);
}
/**
* 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 @Nullable McMMOPlayer queryMcMMOPlayer(@NotNull Player player) {
//Avoid Array Index out of bounds
if(player != null && player.hasMetadata(mcMMO.playerDataKey))
return (McMMOPlayer) player.getMetadata(mcMMO.playerDataKey).get(0).value();
else
return null;
}
private @Nullable McMMOPlayer retrieveMcMMOPlayer(@NotNull String playerName, boolean offlineValid) {
Player player = mcMMO.p.getServer().getPlayerExact(playerName);
if (player == null) {
if (!offlineValid) {
mcMMO.p.getLogger().warning("A valid mmoPlayer object could not be found for " + playerName + ".");
}
return null;
}
return queryMcMMOPlayer(player);
}
public boolean hasPlayerDataKey(Entity entity) {
return entity != null && entity.hasMetadata(mcMMO.playerDataKey);
}

View File

@@ -205,7 +205,7 @@ public class ScoreboardWrapper {
if(mcMMO.getUserManager().getPlayer(playerName) == null)
return;
PlayerProfile profile = mcMMO.getUserManager().queryMcMMOPlayer(player);
PlayerProfile profile = mcMMO.getUserManager().queryPlayer(player);
if (profile.getScoreboardTipsShown() >= Config.getInstance().getTipsAmount()) {
return;
@@ -433,7 +433,7 @@ public class ScoreboardWrapper {
return;
}
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
if(mmoPlayer == null)
return;

View File

@@ -75,7 +75,7 @@ public final class CombatUtils {
return;
}
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Make sure the profiles been loaded
if(mmoPlayer == null) {
@@ -125,7 +125,7 @@ public final class CombatUtils {
return;
}
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Make sure the profiles been loaded
if(mmoPlayer == null) {
@@ -161,7 +161,7 @@ public final class CombatUtils {
double finalDamage = initialDamage;
Map<DamageModifier, Double> modifiers = getModifiers(event);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Make sure the profiles been loaded
if(mmoPlayer == null) {
@@ -212,7 +212,7 @@ public final class CombatUtils {
double initialDamage = event.getDamage();
double finalDamage = initialDamage;
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Make sure the profiles been loaded
if(mmoPlayer == null) {
@@ -253,7 +253,7 @@ public final class CombatUtils {
double finalDamage = initialDamage;
if(master != null && master.isOnline() && master.isValid()) {
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(master);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(master);
//Make sure the profiles been loaded
if(mmoPlayer == null) {
@@ -285,7 +285,7 @@ public final class CombatUtils {
private static void processArcheryCombat(@NotNull LivingEntity target, @NotNull Player player, @NotNull EntityDamageByEntityEvent event, @NotNull Projectile arrow) {
double initialDamage = event.getDamage();
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Make sure the profiles been loaded
if(mmoPlayer == null) {
@@ -334,7 +334,7 @@ public final class CombatUtils {
private static void processCrossbowCombat(LivingEntity target, Player player, EntityDamageByEntityEvent event, Projectile arrow) {
double initialDamage = event.getDamage();
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Make sure the profiles been loaded
if(mmoPlayer == null) {
@@ -346,7 +346,7 @@ public final class CombatUtils {
double finalDamage = event.getDamage();
if (target instanceof Player && PrimarySkillType.UNARMED.getPVPEnabled()) {
UnarmedManager unarmedManager = mcMMO.getUserManager().queryMcMMOPlayer((Player) target).getUnarmedManager();
UnarmedManager unarmedManager = mcMMO.getUserManager().queryPlayer((Player) target).getUnarmedManager();
if (unarmedManager.canDeflect()) {
event.setCancelled(unarmedManager.deflectCheck());
@@ -393,7 +393,7 @@ public final class CombatUtils {
return;
}
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
AcrobaticsManager acrobaticsManager = mmoPlayer.getAcrobaticsManager();
if (acrobaticsManager.canDodge(target)) {
@@ -424,7 +424,7 @@ public final class CombatUtils {
if (target instanceof Tameable) {
if (heldItem.getType() == Material.BONE) {
TamingManager tamingManager = mcMMO.getUserManager().queryMcMMOPlayer(player).getTamingManager();
TamingManager tamingManager = mcMMO.getUserManager().queryPlayer(player).getTamingManager();
if (tamingManager.canUseBeastLore()) {
tamingManager.beastLore(target);
@@ -514,7 +514,7 @@ public final class CombatUtils {
}
if (target.getType() != EntityType.CREEPER && !Misc.isNPCEntityExcludingVillagers(player) && PrimarySkillType.TAMING.getPermissions(player)) {
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
if(mmoPlayer == null) {
return;
@@ -769,7 +769,7 @@ public final class CombatUtils {
NotificationManager.sendPlayerInformation((Player)entity, NotificationType.SUBSKILL_MESSAGE, "Swords.Combat.SS.Struck");
}
mcMMO.getUserManager().queryMcMMOPlayer(attacker).getSwordsManager().ruptureCheck(target);
mcMMO.getUserManager().queryPlayer(attacker).getSwordsManager().ruptureCheck(target);
break;
case AXES:
@@ -895,10 +895,10 @@ public final class CombatUtils {
Player defender = (Player) entity;
//TODO: NPC Interaction?
if(mcMMO.getUserManager().queryMcMMOPlayer(defender) == null)
if(mcMMO.getUserManager().queryPlayer(defender) == null)
return true;
if (!defender.getWorld().getPVP() || defender == player || mcMMO.getUserManager().queryMcMMOPlayer(defender).getGodMode()) {
if (!defender.getWorld().getPVP() || defender == player || mcMMO.getUserManager().queryPlayer(defender).getGodMode()) {
return false;
}

View File

@@ -50,7 +50,7 @@ public final class PerksUtils {
double modifier = 1.0F;
if (Permissions.customXpBoost(player, skill)) {
if(mcMMO.getUserManager().queryMcMMOPlayer(player) != null && mcMMO.getUserManager().queryMcMMOPlayer(player).isDebugMode()) {
if(mcMMO.getUserManager().queryPlayer(player) != null && mcMMO.getUserManager().queryPlayer(player).isDebugMode()) {
player.sendMessage(ChatColor.GOLD + "[DEBUG] " + ChatColor.DARK_GRAY + "XP Perk Multiplier IS CUSTOM! ");
}
@@ -77,7 +77,7 @@ public final class PerksUtils {
float modifiedXP = (float) (xp * modifier);
if(mcMMO.getUserManager().queryMcMMOPlayer(player) != null && mcMMO.getUserManager().queryMcMMOPlayer(player).isDebugMode()) {
if(mcMMO.getUserManager().queryPlayer(player) != null && mcMMO.getUserManager().queryPlayer(player).isDebugMode()) {
player.sendMessage(ChatColor.GOLD + "[DEBUG] " + ChatColor.RESET + "XP Perk Multiplier - " + ChatColor.GOLD + modifier);
player.sendMessage(ChatColor.GOLD + "[DEBUG] " + ChatColor.RESET + "Original XP before perk boosts " + ChatColor.RED + (double) xp);
player.sendMessage(ChatColor.GOLD + "[DEBUG] " + ChatColor.RESET + "XP AFTER PERKS " + ChatColor.DARK_RED + modifiedXP);

View File

@@ -186,7 +186,7 @@ public final class SkillUtils {
}
}
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
//Not Loaded
if(mmoPlayer == null)

View File

@@ -21,7 +21,7 @@ public class SmeltingTracker {
private void changeFurnaceOwnership(Furnace furnace, Player player) {
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryMcMMOPlayer(player);
McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
/*
Debug output
@@ -52,7 +52,7 @@ public class SmeltingTracker {
OfflinePlayer furnaceOwner = getFurnaceOwner(furnace);
if(furnaceOwner != null && furnaceOwner.isOnline()) {
McMMOPlayer furnaceOwnerProfile = mcMMO.getUserManager().queryMcMMOPlayer(furnaceOwner.getPlayer());
McMMOPlayer furnaceOwnerProfile = mcMMO.getUserManager().queryPlayer(furnaceOwner.getPlayer());
if(furnaceOwnerProfile != null) {
if(furnaceOwnerProfile.isDebugMode()) {