Merge branch 'master' into pre/1.13
This commit is contained in:
commit
1bce77696d
2 changed files with 555 additions and 0 deletions
177
Spigot-API-Patches/0148-Improve-death-events.patch
Normal file
177
Spigot-API-Patches/0148-Improve-death-events.patch
Normal file
|
@ -0,0 +1,177 @@
|
|||
From a8fa87ebeff0217428ce384063ee98f0cec1519e Mon Sep 17 00:00:00 2001
|
||||
From: Phoenix616 <mail@moep.tv>
|
||||
Date: Tue, 21 Aug 2018 01:32:28 +0100
|
||||
Subject: [PATCH] Improve death events
|
||||
|
||||
This adds the ability to cancel the death events and to modify the sound
|
||||
an entity makes when dying. (In cases were no sound should it will be
|
||||
called with shouldPlaySound set to false allowing unsilencing of silent
|
||||
entities)
|
||||
|
||||
It makes handling of entity deaths a lot nicer as you no longer need
|
||||
to listen on the damage event and calculate if the entity dies yourself
|
||||
to cancel the death which has the benefit of also receiving the dropped
|
||||
items and experience which is otherwise only properly possible by using
|
||||
internal code.
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java b/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java
|
||||
index ab9e81fd..a7b8f869 100644
|
||||
--- a/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java
|
||||
+++ b/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java
|
||||
@@ -8,10 +8,19 @@ import org.bukkit.inventory.ItemStack;
|
||||
/**
|
||||
* Thrown whenever a LivingEntity dies
|
||||
*/
|
||||
-public class EntityDeathEvent extends EntityEvent {
|
||||
+public class EntityDeathEvent extends EntityEvent implements org.bukkit.event.Cancellable { // Paper - make cancellable
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private final List<ItemStack> drops;
|
||||
private int dropExp = 0;
|
||||
+ // Paper start - make cancellable
|
||||
+ private boolean cancelled;
|
||||
+ private double reviveHealth = 0;
|
||||
+ private boolean shouldPlayDeathSound;
|
||||
+ private org.bukkit.Sound deathSound;
|
||||
+ private org.bukkit.SoundCategory deathSoundCategory;
|
||||
+ private float deathSoundVolume;
|
||||
+ private float deathSoundPitch;
|
||||
+ // Paper end
|
||||
|
||||
public EntityDeathEvent(final LivingEntity entity, final List<ItemStack> drops) {
|
||||
this(entity, drops, 0);
|
||||
@@ -69,4 +78,132 @@ public class EntityDeathEvent extends EntityEvent {
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
+
|
||||
+ // Paper start - make cancellable
|
||||
+ @Override
|
||||
+ public boolean isCancelled() {
|
||||
+ return cancelled;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setCancelled(boolean cancel) {
|
||||
+ cancelled = cancel;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Get the amount of health that the entity should revive with after cancelling the event.
|
||||
+ * Set to the entity's max health by default.
|
||||
+ *
|
||||
+ * @return The amount of health
|
||||
+ */
|
||||
+ public double getReviveHealth() {
|
||||
+ return reviveHealth;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Set the amount of health that the entity should revive with after cancelling the event.
|
||||
+ * Revive health value must be between 0 (exclusive) and the entity's max health (inclusive).
|
||||
+ *
|
||||
+ * @param reviveHealth The amount of health
|
||||
+ * @throws IllegalArgumentException Thrown if the health is {@literal <= 0 or >} max health
|
||||
+ */
|
||||
+ public void setReviveHealth(double reviveHealth) throws IllegalArgumentException {
|
||||
+ double maxHealth = ((LivingEntity) entity).getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH).getValue();
|
||||
+ if ((reviveHealth <= 0) || (reviveHealth > maxHealth)) {
|
||||
+ throw new IllegalArgumentException("Health must be between 0 (exclusive) and " + maxHealth + " (inclusive), but was " + reviveHealth);
|
||||
+ }
|
||||
+ this.reviveHealth = reviveHealth;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ /**
|
||||
+ * Whether or not the death sound should play when the entity dies. If the event is cancelled it does not play!
|
||||
+ *
|
||||
+ * @return Whether or not the death sound should play. Event is called with this set to false if the entity is silent.
|
||||
+ */
|
||||
+ public boolean shouldPlayDeathSound() {
|
||||
+ return shouldPlayDeathSound;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Set whether or not the death sound should play when the entity dies. If the event is cancelled it does not play!
|
||||
+ *
|
||||
+ * @param playDeathSound Enable or disable the death sound
|
||||
+ */
|
||||
+ public void setShouldPlayDeathSound(boolean playDeathSound) {
|
||||
+ this.shouldPlayDeathSound = playDeathSound;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Get the sound that the entity makes when dying
|
||||
+ *
|
||||
+ * @return The sound that the entity makes
|
||||
+ */
|
||||
+ public org.bukkit.Sound getDeathSound() {
|
||||
+ return deathSound;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Set the sound that the entity makes when dying
|
||||
+ *
|
||||
+ * @param sound The sound that the entity should make when dying
|
||||
+ */
|
||||
+ public void setDeathSound(org.bukkit.Sound sound) {
|
||||
+ deathSound = sound;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Get the sound category that the death sound should play in
|
||||
+ *
|
||||
+ * @return The sound category
|
||||
+ */
|
||||
+ public org.bukkit.SoundCategory getDeathSoundCategory() {
|
||||
+ return deathSoundCategory;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Set the sound category that the death sound should play in.
|
||||
+ *
|
||||
+ * @param soundCategory The sound category
|
||||
+ */
|
||||
+ public void setDeathSoundCategory(org.bukkit.SoundCategory soundCategory) {
|
||||
+ this.deathSoundCategory = soundCategory;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Get the volume that the death sound will play at.
|
||||
+ *
|
||||
+ * @return The volume the death sound will play at
|
||||
+ */
|
||||
+ public float getDeathSoundVolume() {
|
||||
+ return deathSoundVolume;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Set the volume the death sound should play at. If the event is cancelled this will not play the sound!
|
||||
+ *
|
||||
+ * @param volume The volume the death sound should play at
|
||||
+ */
|
||||
+ public void setDeathSoundVolume(float volume) {
|
||||
+ this.deathSoundVolume = volume;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Get the pitch that the death sound will play with.
|
||||
+ *
|
||||
+ * @return The pitch the death sound will play with
|
||||
+ */
|
||||
+ public float getDeathSoundPitch() {
|
||||
+ return deathSoundPitch;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * GSetet the pitch that the death sound should play with.
|
||||
+ *
|
||||
+ * @param pitch The pitch the death sound should play with
|
||||
+ */
|
||||
+ public void setDeathSoundPitch(float pitch) {
|
||||
+ this.deathSoundPitch = pitch;
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
--
|
||||
2.18.0
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue