mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 02:53:43 +01:00 
			
		
		
		
	2.1.210
This commit is contained in:
		@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user