From 99d0085d967bff00bd2a2472cd5b34d5b8840158 Mon Sep 17 00:00:00 2001 From: bloodshot Date: Sat, 1 Feb 2020 12:31:43 -0500 Subject: [PATCH] Fix NPE when checking player options on NPC. --- .../listener/CommonEntityEventHandler.java | 30 +++++++++++++++++++ .../listener/CommonEntityEventHandler.java | 30 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java b/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java index cb21ca5..9229362 100644 --- a/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java +++ b/bukkit/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java @@ -338,6 +338,11 @@ public boolean onEntityMove(Event event, Location fromLocation, Location toLocat private void runPlayerCommands(GDClaim claim, GDPermissionUser user, boolean enter) { final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely Citizens NPC + return; + } + List rawCommandList = new ArrayList<>(); Set contexts = new HashSet<>(); if (player.getUniqueId().equals(claim.getOwnerUniqueId())) { @@ -406,6 +411,11 @@ private String replacePlaceHolders(GDClaim claim, Player player, String command) private void checkPlayerFlight(GDPermissionUser user, GDClaim fromClaim, GDClaim toClaim) { final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely Citizens NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final GameMode gameMode = player.getGameMode(); if (gameMode == GameMode.CREATIVE || gameMode == GameMode.SPECTATOR) { @@ -432,6 +442,11 @@ private void checkPlayerFlight(GDPermissionUser user, GDClaim fromClaim, GDClaim private void checkPlayerGodMode(GDPermissionUser user, GDClaim fromClaim, GDClaim toClaim) { final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely Citizens NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final GameMode gameMode = player.getGameMode(); if (gameMode == GameMode.CREATIVE || gameMode == GameMode.SPECTATOR || !player.isInvulnerable()) { @@ -456,6 +471,11 @@ private void checkPlayerGameMode(GDPermissionUser user, GDClaim fromClaim, GDCla } final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely Citizens NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final GameMode currentGameMode = player.getGameMode(); final GameModeType gameModeType = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(GameModeType.class), playerData.getSubject(), Options.PLAYER_GAMEMODE, toClaim); @@ -478,6 +498,11 @@ private void checkPlayerWalkSpeed(GDPermissionUser user, GDClaim fromClaim, GDCl } final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely Citizens NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final float currentWalkSpeed = player.getWalkSpeed(); final double walkSpeed = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), playerData.getSubject(), Options.PLAYER_WALK_SPEED, toClaim); @@ -499,6 +524,11 @@ public void checkPlayerWeather(GDPermissionUser user, GDClaim fromClaim, GDClaim } final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely Citizens NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final WeatherType weatherType = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(WeatherType.class), playerData.getSubject(), Options.PLAYER_WEATHER, toClaim); if (weatherType != null && weatherType != WeatherTypes.UNDEFINED) { diff --git a/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java b/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java index c7f1d78..e708592 100644 --- a/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java +++ b/sponge/src/main/java/com/griefdefender/listener/CommonEntityEventHandler.java @@ -383,6 +383,11 @@ public boolean onEntityMove(MoveEntityEvent event, Location fromLocation, private void runPlayerCommands(GDClaim claim, GDPermissionUser user, boolean enter) { final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely NPC + return; + } + List rawCommandList = new ArrayList<>(); Set contexts = new HashSet<>(); if (player.getUniqueId().equals(claim.getOwnerUniqueId())) { @@ -451,6 +456,11 @@ private String replacePlaceHolders(GDClaim claim, Player player, String command) private void checkPlayerFlight(GDPermissionUser user, GDClaim fromClaim, GDClaim toClaim) { final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final GameMode gameMode = player.get(Keys.GAME_MODE).orElse(null); if (gameMode == null || gameMode == GameModes.CREATIVE || gameMode == GameModes.SPECTATOR) { @@ -478,6 +488,11 @@ private void checkPlayerFlight(GDPermissionUser user, GDClaim fromClaim, GDClaim private void checkPlayerGodMode(GDPermissionUser user, GDClaim fromClaim, GDClaim toClaim) { final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final GameMode gameMode = player.get(Keys.GAME_MODE).get(); if (gameMode == GameModes.CREATIVE || gameMode == GameModes.SPECTATOR || !player.get(Keys.INVULNERABLE).get()) { @@ -502,6 +517,11 @@ private void checkPlayerGameMode(GDPermissionUser user, GDClaim fromClaim, GDCla } final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final GameMode currentGameMode = player.get(Keys.GAME_MODE).get(); final GameModeType gameModeType = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(GameModeType.class), playerData.getSubject(), Options.PLAYER_GAMEMODE, toClaim); @@ -524,6 +544,11 @@ private void checkPlayerWalkSpeed(GDPermissionUser user, GDClaim fromClaim, GDCl } final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final double currentWalkSpeed = player.get(Keys.WALKING_SPEED).get(); final double walkSpeed = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), playerData.getSubject(), Options.PLAYER_WALK_SPEED, toClaim); @@ -544,6 +569,11 @@ public void checkPlayerWeather(GDPermissionUser user, GDClaim fromClaim, GDClaim } final Player player = user.getOnlinePlayer(); + if (player == null) { + // Most likely NPC + return; + } + final GDPlayerData playerData = user.getInternalPlayerData(); final WeatherType weatherType = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(WeatherType.class), playerData.getSubject(), Options.PLAYER_WEATHER, toClaim); if (weatherType != null) {