Merge pull request #108 from RealGatt/fix/getPlayerHolo-npe

Fixes a potential NPE when calling getPlayerHologram at the wrong time
This commit is contained in:
Jitse Boonstra 2020-07-28 12:18:51 +02:00 committed by GitHub
commit 0a66b9dcef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 2 deletions

View File

@ -16,6 +16,7 @@ import net.jitse.npclib.api.state.NPCSlot;
import net.jitse.npclib.api.state.NPCState; import net.jitse.npclib.api.state.NPCState;
import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.hologram.Hologram;
import net.jitse.npclib.utilities.MathUtil; import net.jitse.npclib.utilities.MathUtil;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
@ -67,18 +68,21 @@ public abstract class NPCBase implements NPC, NPCPacketHandler {
@Override @Override
public Hologram getPlayerHologram(Player player) { public Hologram getPlayerHologram(Player player) {
Validate.notNull(player, "Player cannot be null.");
Hologram playerHologram = textDisplayHolograms.getOrDefault(player.getUniqueId(), null); Hologram playerHologram = textDisplayHolograms.getOrDefault(player.getUniqueId(), null);
return playerHologram; return playerHologram;
} }
@Override @Override
public NPC setPlayerLines(List<String> uniqueLines, Player targetPlayer) { public NPC setPlayerLines(List<String> uniqueLines, Player targetPlayer) {
Validate.notNull(targetPlayer, "Player cannot be null.");
uniqueText.put(targetPlayer.getUniqueId(), uniqueLines); uniqueText.put(targetPlayer.getUniqueId(), uniqueLines);
return this; return this;
} }
@Override @Override
public NPC setPlayerLines(List<String> uniqueLines, Player targetPlayer, boolean update) { public NPC setPlayerLines(List<String> uniqueLines, Player targetPlayer, boolean update) {
Validate.notNull(targetPlayer, "Player cannot be null.");
List<String> originalLines = getPlayerLines(targetPlayer); List<String> originalLines = getPlayerLines(targetPlayer);
setPlayerLines(uniqueLines, targetPlayer); setPlayerLines(uniqueLines, targetPlayer);
if (update) { if (update) {
@ -99,6 +103,7 @@ public abstract class NPCBase implements NPC, NPCPacketHandler {
@Override @Override
public List<String> getPlayerLines(Player targetPlayer) { public List<String> getPlayerLines(Player targetPlayer) {
Validate.notNull(targetPlayer, "Player cannot be null.");
return uniqueText.getOrDefault(targetPlayer.getUniqueId(), text); return uniqueText.getOrDefault(targetPlayer.getUniqueId(), text);
} }
@ -133,8 +138,10 @@ public abstract class NPCBase implements NPC, NPCPacketHandler {
continue; continue;
} }
Player plyr = Bukkit.getPlayer(uuid); // destroy the per player holograms Player plyr = Bukkit.getPlayer(uuid); // destroy the per player holograms
getPlayerHologram(plyr).hide(plyr); if (plyr != null) {
hide(plyr, true); getPlayerHologram(plyr).hide(plyr);
hide(plyr, true);
}
} }
} }
@ -170,6 +177,7 @@ public abstract class NPCBase implements NPC, NPCPacketHandler {
@Override @Override
public boolean isShown(Player player) { public boolean isShown(Player player) {
if (player == null) return false;
return shown.contains(player.getUniqueId()) && !autoHidden.contains(player.getUniqueId()); return shown.contains(player.getUniqueId()) && !autoHidden.contains(player.getUniqueId());
} }
@ -192,6 +200,7 @@ public abstract class NPCBase implements NPC, NPCPacketHandler {
} }
public boolean inRangeOf(Player player) { public boolean inRangeOf(Player player) {
if (player == null) return false;
if (!player.getWorld().equals(location.getWorld())) { if (!player.getWorld().equals(location.getWorld())) {
// No need to continue our checks, they are in different worlds. // No need to continue our checks, they are in different worlds.
return false; return false;