From a9809dbccb801e1d657566f0b6ccbe55e18cef42 Mon Sep 17 00:00:00 2001 From: Jules Date: Sun, 10 Oct 2021 17:39:56 +0200 Subject: [PATCH] fixed NPE when interacting with NPC's --- .../Indyuce/mmocore/api/player/PlayerData.java | 16 ++++++++++++++++ .../mmocore/comp/MMOCoreTargetRestriction.java | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java index 3fe3c74b..927dedf1 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/PlayerData.java @@ -883,6 +883,22 @@ public class PlayerData extends OfflinePlayerData { return MMOCore.plugin.dataProvider.getDataManager().get(uuid); } + /** + * This is used to check if the player data is loaded for a + * specific player. This might seem redundant because the given + * Player instance is linked to an online player, and data + * is always loaded for an online player. + *

+ * In fact a Player instance can be attached to a Citizens NPC + * which has no player data loaded hence this method + * + * @param player Either a real player or an NPC + * @return If player data for that player is loaded + */ + public static boolean has(Player player) { + return MMOCore.plugin.dataProvider.getDataManager().isLoaded(player.getUniqueId()); + } + public static Collection getAll() { return MMOCore.plugin.dataProvider.getDataManager().getLoaded(); } diff --git a/src/main/java/net/Indyuce/mmocore/comp/MMOCoreTargetRestriction.java b/src/main/java/net/Indyuce/mmocore/comp/MMOCoreTargetRestriction.java index 44dc5470..24c4ae8a 100644 --- a/src/main/java/net/Indyuce/mmocore/comp/MMOCoreTargetRestriction.java +++ b/src/main/java/net/Indyuce/mmocore/comp/MMOCoreTargetRestriction.java @@ -11,7 +11,7 @@ public class MMOCoreTargetRestriction implements TargetRestriction { @Override public boolean canTarget(Player player, LivingEntity target, InteractionType interaction) { - if (interaction.isOffense() && target instanceof Player) { + if (interaction.isOffense() && target instanceof Player && PlayerData.has((Player) target)) { PlayerData targetData = PlayerData.get(target.getUniqueId()); // Check for the same party