123 lines
		
	
	
	
		
			3.8 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			123 lines
		
	
	
	
		
			3.8 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 
								 | 
							
								From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
							 | 
						||
| 
								 | 
							
								From: Aikar <aikar@aikar.co>
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								 }
							 |