diff --git a/pom.xml b/pom.xml
index 6c6197fb4..e53dd08c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
me.blackvein.quests
quests
- 3.1.3
+ 3.1.4
quests
https://github.com/FlyingPikachu/Quests/
jar
diff --git a/src/main/java/me/blackvein/quests/PlayerListener.java b/src/main/java/me/blackvein/quests/PlayerListener.java
index be50061e1..06beee8d0 100644
--- a/src/main/java/me/blackvein/quests/PlayerListener.java
+++ b/src/main/java/me/blackvein/quests/PlayerListener.java
@@ -15,6 +15,7 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Sheep;
import org.bukkit.entity.TNTPrimed;
+import org.bukkit.entity.Wolf;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@@ -407,98 +408,69 @@ public class PlayerListener implements Listener {
@EventHandler
public void onEntityDeath(EntityDeathEvent evt) {
- System.out.println("1");
- // NPCs count as a Player so we check for them through Citizens
- boolean isTargetNPC = false;
- if (plugin.citizens != null) {
- if (CitizensAPI.getNPCRegistry().isNPC(evt.getEntity())) {
- isTargetNPC = true;
+ if (evt.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) {
+ EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getEntity().getLastDamageCause();
+ Entity damager = damageEvent.getDamager();
+
+ if (damager != null) {
+ if (damager instanceof Projectile) {
+ Projectile projectile = (Projectile) damager;
+ ProjectileSource source = projectile.getShooter();
+ if (source instanceof Entity) {
+ killMob((Entity)source, evt.getEntity());
+ }
+ } else if (damager instanceof TNTPrimed) {
+ TNTPrimed tnt = (TNTPrimed) damager;
+ Entity source = tnt.getSource();
+ if (source.isValid()) {
+ killMob(source, evt.getEntity());
+ }
+ } else if (damager instanceof Wolf) {
+ Wolf wolf = (Wolf) damager;
+ if (wolf.isTamed()) {
+ Quester quester = plugin.getQuester(wolf.getOwner().getUniqueId());
+ killPlayer(quester.getPlayer(), evt.getEntity());
+ }
+ } else {
+ killMob(damager, evt.getEntity());
+ }
}
}
- //if (/*evt.getEntity() instanceof Player == false ||*/ isTargetNPC) {
- System.out.println("2");
- if (evt.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) {
- System.out.println("3");
- EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getEntity().getLastDamageCause();
- Entity damager = damageEvent.getDamager();
- if (damager != null) {
- System.out.println("4");
- if (damager instanceof Projectile) {
- Projectile projectile = (Projectile) damager;
- ProjectileSource source = projectile.getShooter();
- if (source instanceof Player) {
- Player player = (Player) source;
- boolean okay = true;
- if (plugin.citizens != null) {
- if (CitizensAPI.getNPCRegistry().isNPC(player)) {
- okay = false;
- }
- }
- System.out.println("5");
- if (okay) {
- if (isTargetNPC) {
- System.out.println("6");
- Quester quester = plugin.getQuester(player.getUniqueId());
- for (Quest quest : quester.currentQuests.keySet()) {
- if (quester.hasObjective(quest, "killNPC")) {
- System.out.println("7");
- quester.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(evt.getEntity()));
- }
- }
- } else {
- Quester quester = plugin.getQuester(player.getUniqueId());
- for (Quest quest : quester.currentQuests.keySet()) {
- if (quester.hasObjective(quest, "killMob")) {
- System.out.println("7-2");
- quester.killMob(quest, evt.getEntity().getLocation(), evt.getEntity().getType());
- }
- }
- }
- }
- }
- } else if (damager instanceof TNTPrimed) {
- TNTPrimed tnt = (TNTPrimed) damager;
- Entity source = tnt.getSource();
- if (source instanceof Player) {
- Player player = (Player) source;
- boolean okay = true;
- if (plugin.citizens != null) {
- if (CitizensAPI.getNPCRegistry().isNPC(player)) {
- okay = false;
- }
- }
- if (okay) {
- Quester quester = plugin.getQuester(player.getUniqueId());
- for (Quest quest : quester.currentQuests.keySet()) {
- if (quester.hasObjective(quest, "killMob")) {
- quester.killMob(quest, evt.getEntity().getLocation(), evt.getEntity().getType());
- }
- }
- }
- }
- } else if (damager instanceof Player) {
- System.out.println("7-3");
- boolean okay = true;
- if (plugin.citizens != null) {
- if (CitizensAPI.getNPCRegistry().isNPC(damager)) {
- okay = false;
- }
- }
- if (okay) {
- System.out.println("7-4");
- Player player = (Player) damager;
- Quester quester = plugin.getQuester(player.getUniqueId());
- for (Quest quest : quester.currentQuests.keySet()) {
- if (quester.hasObjective(quest, "killMob")) {
- System.out.println("7-5");
- quester.killMob(quest, evt.getEntity().getLocation(), evt.getEntity().getType());
- }
- }
- }
+ }
+
+ /**
+ * Checks if damager is blacklisted
+ * Ensures damager is Player and not NPC
+ * Kills target mob/NPC if objective exists
+ *
+ * @param damager the attacking entity
+ * @param target the entity being attacked
+ * @since 3.1.4
+ */
+ public void killMob(Entity damager, Entity target) {
+ if (plugin.checkQuester(damager.getUniqueId()) == false) {
+ return;
+ }
+ //Ensure damager is Player AND not an NPC
+ if (damager instanceof Player && !CitizensAPI.getNPCRegistry().isNPC(damager)) {
+ //If target is an NPC...
+ if (CitizensAPI.getNPCRegistry().isNPC(target)) {
+ Quester quester = plugin.getQuester(damager.getUniqueId());
+ for (Quest quest : quester.currentQuests.keySet()) {
+ if (quester.hasObjective(quest, "killNPC")) {
+ quester.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target));
+ }
+ }
+ //No? Must be a mob...
+ } else {
+ Quester quester = plugin.getQuester(damager.getUniqueId());
+ for (Quest quest : quester.currentQuests.keySet()) {
+ if (quester.hasObjective(quest, "killMob")) {
+ quester.killMob(quest, target.getLocation(), target.getType());
}
}
}
- //}
+ }
}
@EventHandler
@@ -506,57 +478,39 @@ public class PlayerListener implements Listener {
if (evt.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) evt.getEntity().getLastDamageCause();
Entity damager = damageEvent.getDamager();
+
if (damager != null) {
+ //Ignore suicide
+ if (evt.getEntity().getUniqueId().equals(damager.getUniqueId())) {
+ return;
+ }
if (damager instanceof Projectile) {
- if (evt.getEntity().getLastDamageCause().getEntity() instanceof Player) {
- Player player = (Player) evt.getEntity().getLastDamageCause().getEntity();
- if (plugin.checkQuester(player.getUniqueId()) == false) {
- boolean okay = true;
- if (plugin.citizens != null) {
- if (CitizensAPI.getNPCRegistry().isNPC(player) || CitizensAPI.getNPCRegistry().isNPC(evt.getEntity())) {
- okay = false;
- }
- }
- if (evt.getEntity().getUniqueId().equals(player.getUniqueId())) {
- okay = false;
- }
- if (okay) {
- Quester quester = plugin.getQuester(player.getUniqueId());
- for (Quest quest : quester.currentQuests.keySet()) {
- if (quester.hasObjective(quest, "killPlayer")) {
- quester.killPlayer(quest, evt.getEntity());
- }
- }
- }
- }
+ Projectile projectile = (Projectile) damager;
+ ProjectileSource source = projectile.getShooter();
+ if (source instanceof Entity) {
+ killPlayer((Entity)source, evt.getEntity());
}
- } else if (damager instanceof Player) {
- Player player = (Player) damager;
- if (plugin.checkQuester(player.getUniqueId()) == false) {
- boolean okay = true;
- if (plugin.citizens != null) {
- if (CitizensAPI.getNPCRegistry().isNPC(player) || CitizensAPI.getNPCRegistry().isNPC(evt.getEntity())) {
- okay = false;
- }
- }
- if (evt.getEntity().getUniqueId().equals(player.getUniqueId())) {
- okay = false;
- }
- if (okay) {
- Quester quester = plugin.getQuester(player.getUniqueId());
- for (Quest quest : quester.currentQuests.keySet()) {
- if (quester.hasObjective(quest, "killPlayer")) {
- quester.killPlayer(quest, evt.getEntity());
- }
- }
- }
+ } else if (damager instanceof TNTPrimed) {
+ TNTPrimed tnt = (TNTPrimed) damager;
+ Entity source = tnt.getSource();
+ if (source.isValid()) {
+ killPlayer(source, evt.getEntity());
}
+ } else if (damager instanceof Wolf) {
+ Wolf wolf = (Wolf) damager;
+ if (wolf.isTamed()) {
+ Quester quester = plugin.getQuester(wolf.getOwner().getUniqueId());
+ killPlayer(quester.getPlayer(), evt.getEntity());
+ }
+ } else {
+ killPlayer(damager, evt.getEntity());
}
}
}
- Player player = evt.getEntity();
- if (plugin.checkQuester(player.getUniqueId()) == false) {
- Quester quester = plugin.getQuester(player.getUniqueId());
+
+ Player target = evt.getEntity();
+ if (plugin.checkQuester(target.getUniqueId()) == false) {
+ Quester quester = plugin.getQuester(target.getUniqueId());
for (Quest quest : quester.currentQuests.keySet()) {
Stage stage = quester.getCurrentStage(quest);
if (stage != null && stage.deathEvent != null) {
@@ -572,11 +526,38 @@ public class PlayerListener implements Listener {
}
}
if (found != null) {
- Quester quester = plugin.getQuester(player.getUniqueId());
+ Quester quester = plugin.getQuester(target.getUniqueId());
evt.getDrops().remove(found);
quester.hasJournal = false;
}
}
+
+ /**
+ * Checks if damager is blacklisted
+ * Ensures damager is Player and not NPC
+ * Kills target Player if objective exists
+ *
+ * @param damager the attacking entity
+ * @param target the entity being attacked
+ * @since 3.1.4
+ */
+ public void killPlayer(Entity damager, Entity target) {
+ if (plugin.checkQuester(damager.getUniqueId()) == false) {
+ return;
+ }
+ //Ensure damager is player AND not an NPC
+ if (damager instanceof Player && !CitizensAPI.getNPCRegistry().isNPC(damager)) {
+ //If target is player AND not an NPC...
+ if (target instanceof Player && !CitizensAPI.getNPCRegistry().isNPC(target)) {
+ Quester quester = plugin.getQuester(damager.getUniqueId());
+ for (Quest quest : quester.currentQuests.keySet()) {
+ if (quester.hasObjective(quest, "killPlayer")) {
+ quester.killPlayer(quest, (Player)target);
+ }
+ }
+ }
+ }
+ }
@EventHandler
public void onPlayerFish(PlayerFishEvent evt) {
diff --git a/src/main/java/me/blackvein/quests/Quests.java b/src/main/java/me/blackvein/quests/Quests.java
index 10e20df3e..c798ac713 100644
--- a/src/main/java/me/blackvein/quests/Quests.java
+++ b/src/main/java/me/blackvein/quests/Quests.java
@@ -3646,6 +3646,12 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
return false;
}
+ /**
+ * Checks whether player has been blacklisted from Quests
+ *
+ * @param uuid the entity UUID to be checked
+ * @return {@code true} if UUID is blacklisted
+ */
public boolean checkQuester(UUID uuid) {
for (String s : questerBlacklist) {
try {
diff --git a/src/main/java/me/blackvein/quests/prompts/CreateStagePrompt.java b/src/main/java/me/blackvein/quests/prompts/CreateStagePrompt.java
index 53ec04035..e2fbc92e5 100644
--- a/src/main/java/me/blackvein/quests/prompts/CreateStagePrompt.java
+++ b/src/main/java/me/blackvein/quests/prompts/CreateStagePrompt.java
@@ -111,10 +111,10 @@ public class CreateStagePrompt extends FixedSetPrompt {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "6 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorCatchFish") + " " + ChatColor.GRAY + "(" + ChatColor.AQUA + fish + " " + Lang.get("stageEditorFish") + ChatColor.GRAY + ")\n";
}
if (context.getSessionData(pref + CK.S_PLAYER_KILL) == null) {
- text += ChatColor.YELLOW + "DEPRECATED" + ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "7 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillPlayers") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
+ text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "7 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillPlayers") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
Integer players = (Integer) context.getSessionData(pref + CK.S_PLAYER_KILL);
- text += ChatColor.YELLOW + "DEPRECATED" + ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "7 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillPlayers") + ChatColor.GRAY + " (" + ChatColor.AQUA + players + " " + Lang.get("stageEditorPlayers") + ChatColor.GRAY + ")\n";
+ text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "7 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillPlayers") + ChatColor.GRAY + " (" + ChatColor.AQUA + players + " " + Lang.get("stageEditorPlayers") + ChatColor.GRAY + ")\n";
}
if (context.getSessionData(pref + CK.S_ENCHANT_TYPES) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "8 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorEnchantItems") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";