aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-API-Patches-Unmapped/0048-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-API-Patches-Unmapped/0048-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch')
-rw-r--r--Spigot-API-Patches-Unmapped/0048-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch122
1 files changed, 122 insertions, 0 deletions
diff --git a/Spigot-API-Patches-Unmapped/0048-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch b/Spigot-API-Patches-Unmapped/0048-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch
new file mode 100644
index 0000000000..5dadaf640f
--- /dev/null
+++ b/Spigot-API-Patches-Unmapped/0048-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch
@@ -0,0 +1,122 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Tue, 19 Dec 2017 16:28:32 -0500
+Subject: [PATCH] ExperienceOrbs API for Reason/Source/Triggering player
+
+Adds lots of information about why this orb exists.
+
+Replaces isFromBottle() with logic that persists entity reloads too.
+
+diff --git a/src/main/java/org/bukkit/entity/ExperienceOrb.java b/src/main/java/org/bukkit/entity/ExperienceOrb.java
+index c286edfd827e185a76e44c44faace19a80325d7a..dec70bbfaf73a9d525b2c45682b804c684e1645b 100644
+--- a/src/main/java/org/bukkit/entity/ExperienceOrb.java
++++ b/src/main/java/org/bukkit/entity/ExperienceOrb.java
+@@ -1,5 +1,8 @@
+ package org.bukkit.entity;
+
++import org.jetbrains.annotations.NotNull;
++import org.jetbrains.annotations.Nullable; // Paper
++
+ /**
+ * Represents an Experience Orb.
+ */
+@@ -18,4 +21,99 @@ public interface ExperienceOrb extends Entity {
+ * @param value Amount of experience
+ */
+ public void setExperience(int value);
++
++ // Paper start
++ /**
++ * Check if this orb was spawned from a {@link ThrownExpBottle}
++ *
++ * @return if orb was spawned from a bottle
++ * @deprecated Use getSpawnReason() == EXP_BOTTLE
++ */
++ @Deprecated
++ default boolean isFromBottle() {
++ return getSpawnReason() == SpawnReason.EXP_BOTTLE;
++ }
++
++ /**
++ * Reasons for why this Experience Orb was spawned
++ */
++ enum SpawnReason {
++ /**
++ * Spawned by a player dying
++ */
++ PLAYER_DEATH,
++ /**
++ * Spawned by an entity dying after being damaged by a player
++ */
++ ENTITY_DEATH,
++ /**
++ * Spawned by player using a furnace
++ */
++ FURNACE,
++ /**
++ * Spawned by player breeding animals
++ */
++ BREED,
++ /**
++ * Spawned by player trading with a villager
++ */
++ VILLAGER_TRADE,
++ /**
++ * Spawned by player fishing
++ */
++ FISHING,
++ /**
++ * Spawned by player breaking a block that gives experience points such as Diamond Ore
++ */
++ BLOCK_BREAK,
++ /**
++ * Spawned by Bukkit API
++ */
++ CUSTOM,
++ /**
++ * Spawned by a player throwing an experience points bottle
++ */
++ EXP_BOTTLE,
++ /**
++ * Spawned by a player using a grindstone
++ */
++ GRINDSTONE,
++ /**
++ * We do not know why it was spawned
++ */
++ UNKNOWN
++ }
++
++ /**
++ * If this experience orb was triggered to be spawned by
++ * an entity such as a player, due to events such as killing entity,
++ * breaking blocks, smelting in a furnace, etc, this will return the UUID
++ * of the entity that triggered this orb to drop.
++ *
++ * In the case of an entity being killed, this will be the killers UUID.
++ *
++ * @return UUID of the player that triggered this orb to drop, or null if unknown/no triggering entity
++ */
++ @Nullable java.util.UUID getTriggerEntityId();
++
++ /**
++ * If this experience orb was spawned in relation to another
++ * entity, such as a player or other living entity death, or breeding,
++ * return the source entity UUID.
++ *
++ * In the case of breeding, this will be the new baby entities UUID.
++ * In the case of an entity being killed, this will be the dead entities UUID.
++ *
++ * @return The UUID of the entity that sourced this experience orb
++ */
++ @Nullable java.util.UUID getSourceEntityId();
++
++ /**
++ * Gets the reason that this experience orb was spawned. For any case that we
++ * do not know, such as orbs spawned before this API was added, UNKNOWN is returned.
++ * @return The reason for this orb being spawned.
++ */
++ @NotNull
++ SpawnReason getSpawnReason();
++ // Paper end
+ }