aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src/main/java/com')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java21
1 files changed, 19 insertions, 2 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java
index fef815ec..06db1410 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java
@@ -9,6 +9,7 @@ import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
import com.leonardobishop.quests.common.quest.Quest;
import com.leonardobishop.quests.common.quest.Task;
import org.bukkit.entity.Creature;
+import org.bukkit.entity.Damageable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -25,11 +26,12 @@ public final class DealDamageTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
+ super.addConfigValidator(TaskUtils.useEntityListConfigValidator(this, "mob", "mobs"));
super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "allow-only-creatures"));
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onDamage(EntityDamageByEntityEvent event) {
+ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
Entity damager = event.getDamager();
if (!(damager instanceof Player player)) {
return;
@@ -45,7 +47,15 @@ public final class DealDamageTaskType extends BukkitTaskType {
}
Entity entity = event.getEntity();
- double damage = event.getDamage();
+ if (!(entity instanceof Damageable damageable)) {
+ return;
+ }
+
+ // Clamp entity damage as getDamage() returns Float.MAX_VALUE for killing a parrot with a cookie
+ // https://github.com/LMBishop/Quests/issues/753
+ double finalDamage = event.getFinalDamage();
+ double health = damageable.getHealth();
+ double damage = Math.clamp(finalDamage, 0.0d, health);
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) {
Quest quest = pendingTask.quest();
@@ -55,11 +65,17 @@ public final class DealDamageTaskType extends BukkitTaskType {
super.debug("Player damaged " + entity.getType() + " for " + damage, quest.getId(), task.getId(), player.getUniqueId());
boolean allowOnlyCreatures = TaskUtils.getConfigBoolean(task, "allow-only-creatures", true);
+
if (allowOnlyCreatures && !(entity instanceof Creature)) {
super.debug(entity.getType() + " is not a creature but allow-only-creatures is true, continuing...", quest.getId(), task.getId(), player.getUniqueId());
continue;
}
+ if (!TaskUtils.matchEntity(this, pendingTask, entity, player.getUniqueId())) {
+ super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId());
+ continue;
+ }
+
int amount = (int) task.getConfigValue("amount");
double progress = Math.min(amount, TaskUtils.getDecimalTaskProgress(taskProgress) + damage);
@@ -70,6 +86,7 @@ public final class DealDamageTaskType extends BukkitTaskType {
super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
taskProgress.setCompleted(true);
}
+
TaskUtils.sendTrackAdvancement(player, quest, task, pendingTask, amount);
}
}