This commit is contained in:
nossr50 2022-03-17 13:59:17 -07:00
parent fa33fa3d32
commit 0bf3f98d95
5 changed files with 25 additions and 15 deletions

View File

@ -1,7 +1,9 @@
Version 2.1.210 Version 2.1.210
Fixed a memory leak involving mob metadata Fixed a memory leak involving mob metadata
Fixed a potential null pointer exception in InventoryListener
NOTES: NOTES:
If you're having issues with "immortal players" this is a known plugin incompatibility between mcMMO and another plugin, I need more info on what plugins need to be present to cause it. Please post info to GitHub issues or tag me on discord.
There was a big rewrite in this update relating to how various types of metadata were being tracked/stored/retrieved There was a big rewrite in this update relating to how various types of metadata were being tracked/stored/retrieved
If you run into issues with this version of mcMMO, please post about it on GitHub If you run into issues with this version of mcMMO, please post about it on GitHub

View File

@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.gmail.nossr50.mcMMO</groupId> <groupId>com.gmail.nossr50.mcMMO</groupId>
<artifactId>mcMMO</artifactId> <artifactId>mcMMO</artifactId>
<version>2.1.210-SNAPSHOT</version> <version>2.1.210</version>
<name>mcMMO</name> <name>mcMMO</name>
<url>https://github.com/mcMMO-Dev/mcMMO</url> <url>https://github.com/mcMMO-Dev/mcMMO</url>
<scm> <scm>

View File

@ -35,7 +35,7 @@ public final class ExperienceAPI {
* @param skillType A string that may or may not be a skill * @param skillType A string that may or may not be a skill
* @return true if this is a valid mcMMO skill * @return true if this is a valid mcMMO skill
*/ */
public static boolean isValidSkillType(String skillType) { public static boolean isValidSkillType(@NotNull String skillType) {
return mcMMO.p.getSkillTools().matchSkill(skillType) != null; return mcMMO.p.getSkillTools().matchSkill(skillType) != null;
} }

View File

@ -8,6 +8,8 @@ import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -24,7 +26,7 @@ public final class UserManager {
* *
* @param mcMMOPlayer the player profile to start tracking * @param mcMMOPlayer the player profile to start tracking
*/ */
public static void track(McMMOPlayer mcMMOPlayer) { public static void track(@NotNull McMMOPlayer mcMMOPlayer) {
mcMMOPlayer.getPlayer().setMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA, new FixedMetadataValue(mcMMO.p, mcMMOPlayer)); mcMMOPlayer.getPlayer().setMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA, new FixedMetadataValue(mcMMO.p, mcMMOPlayer));
if(playerDataSet == null) if(playerDataSet == null)
@ -43,8 +45,12 @@ public final class UserManager {
* *
* @param player The Player object * @param player The Player object
*/ */
public static void remove(Player player) { public static void remove(@NotNull Player player) {
McMMOPlayer mcMMOPlayer = getPlayer(player); McMMOPlayer mcMMOPlayer = getPlayer(player);
if(mcMMOPlayer == null)
return;
mcMMOPlayer.cleanup(); mcMMOPlayer.cleanup();
player.removeMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA, mcMMO.p); player.removeMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA, mcMMO.p);
@ -91,7 +97,7 @@ public final class UserManager {
mcMMO.p.getLogger().info("Finished save operation for "+trackedSyncData.size()+" players!"); mcMMO.p.getLogger().info("Finished save operation for "+trackedSyncData.size()+" players!");
} }
public static Collection<McMMOPlayer> getPlayers() { public static @NotNull Collection<McMMOPlayer> getPlayers() {
Collection<McMMOPlayer> playerCollection = new ArrayList<>(); Collection<McMMOPlayer> playerCollection = new ArrayList<>();
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) { for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
@ -109,11 +115,11 @@ public final class UserManager {
* @param playerName The name of the player whose McMMOPlayer to retrieve * @param playerName The name of the player whose McMMOPlayer to retrieve
* @return the player's McMMOPlayer object * @return the player's McMMOPlayer object
*/ */
public static McMMOPlayer getPlayer(String playerName) { public static @Nullable McMMOPlayer getPlayer(String playerName) {
return retrieveMcMMOPlayer(playerName, false); return retrieveMcMMOPlayer(playerName, false);
} }
public static McMMOPlayer getOfflinePlayer(OfflinePlayer player) { public static @Nullable McMMOPlayer getOfflinePlayer(OfflinePlayer player) {
if (player instanceof Player) { if (player instanceof Player) {
return getPlayer((Player) player); return getPlayer((Player) player);
} }
@ -121,7 +127,7 @@ public final class UserManager {
return retrieveMcMMOPlayer(player.getName(), true); return retrieveMcMMOPlayer(player.getName(), true);
} }
public static McMMOPlayer getOfflinePlayer(String playerName) { public static @Nullable McMMOPlayer getOfflinePlayer(String playerName) {
return retrieveMcMMOPlayer(playerName, true); return retrieveMcMMOPlayer(playerName, true);
} }
@ -130,7 +136,7 @@ public final class UserManager {
* @param player target player * @param player target player
* @return McMMOPlayer object for this player, null if Player has not been loaded * @return McMMOPlayer object for this player, null if Player has not been loaded
*/ */
public static McMMOPlayer getPlayer(Player player) { public static @Nullable McMMOPlayer getPlayer(@Nullable Player player) {
//Avoid Array Index out of bounds //Avoid Array Index out of bounds
if(player != null && player.hasMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA)) if(player != null && player.hasMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA))
return (McMMOPlayer) player.getMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA).get(0).value(); return (McMMOPlayer) player.getMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA).get(0).value();
@ -138,7 +144,10 @@ public final class UserManager {
return null; return null;
} }
private static McMMOPlayer retrieveMcMMOPlayer(String playerName, boolean offlineValid) { private static @Nullable McMMOPlayer retrieveMcMMOPlayer(@Nullable String playerName, boolean offlineValid) {
if(playerName == null)
return null;
Player player = mcMMO.p.getServer().getPlayerExact(playerName); Player player = mcMMO.p.getServer().getPlayerExact(playerName);
if (player == null) { if (player == null) {
@ -152,7 +161,7 @@ public final class UserManager {
return getPlayer(player); return getPlayer(player);
} }
public static boolean hasPlayerDataKey(Entity entity) { public static boolean hasPlayerDataKey(@Nullable Entity entity) {
return entity != null && entity.hasMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA); return entity != null && entity.hasMetadata(MetadataConstants.METADATA_KEY_PLAYER_DATA);
} }
} }

View File

@ -320,14 +320,13 @@ public final class CombatUtils {
Entity painSource = event.getDamager(); Entity painSource = event.getDamager();
EntityType entityType = painSource.getType(); EntityType entityType = painSource.getType();
if (target instanceof Player) { if (target instanceof Player player) {
if(ExperienceConfig.getInstance().isNPCInteractionPrevented()) { if(ExperienceConfig.getInstance().isNPCInteractionPrevented()) {
if (Misc.isNPCEntityExcludingVillagers(target)) { if (Misc.isNPCEntityExcludingVillagers(target)) {
return; return;
} }
} }
Player player = (Player) target;
if (!UserManager.hasPlayerDataKey(player)) { if (!UserManager.hasPlayerDataKey(player)) {
return; return;
} }
@ -738,7 +737,7 @@ public final class CombatUtils {
* @param target The defending entity * @param target The defending entity
* @param primarySkillType The skill being used * @param primarySkillType The skill being used
*/ */
public static void processCombatXP(@NotNull McMMOPlayer mcMMOPlayer, LivingEntity target, PrimarySkillType primarySkillType) { public static void processCombatXP(@NotNull McMMOPlayer mcMMOPlayer, @NotNull LivingEntity target, @NotNull PrimarySkillType primarySkillType) {
processCombatXP(mcMMOPlayer, target, primarySkillType, 1.0); processCombatXP(mcMMOPlayer, target, primarySkillType, 1.0);
} }
@ -750,7 +749,7 @@ public final class CombatUtils {
* @param primarySkillType The skill being used * @param primarySkillType The skill being used
* @param multiplier final XP result will be multiplied by this * @param multiplier final XP result will be multiplied by this
*/ */
public static void processCombatXP(@NotNull McMMOPlayer mcMMOPlayer, LivingEntity target, PrimarySkillType primarySkillType, double multiplier) { public static void processCombatXP(@NotNull McMMOPlayer mcMMOPlayer, @NotNull LivingEntity target, @NotNull PrimarySkillType primarySkillType, double multiplier) {
double baseXP = 0; double baseXP = 0;
XPGainReason xpGainReason; XPGainReason xpGainReason;