Adds ExperienceOrbMergeEvent Fired when the server is about to merge 2 experience orbs Plugins can cancel this if they want to ensure experience orbs do not lose important metadata such as spawn reason, or conditionally move data from source to target. Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
136 lines
3.6 KiB
Java
136 lines
3.6 KiB
Java
package org.bukkit.entity;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable; // Paper
|
|
|
|
/**
|
|
* Represents an Experience Orb.
|
|
*/
|
|
public interface ExperienceOrb extends Entity {
|
|
|
|
/**
|
|
* Gets how much experience is contained within this orb
|
|
*
|
|
* @return Amount of experience
|
|
*/
|
|
public int getExperience();
|
|
|
|
/**
|
|
* Sets how much experience is contained within this orb
|
|
*
|
|
* @param value Amount of experience
|
|
*/
|
|
public void setExperience(int value);
|
|
|
|
// Paper start - expose count
|
|
/**
|
|
* Get the stacked count for this experience orb.
|
|
*
|
|
* @return the count
|
|
*/
|
|
int getCount();
|
|
|
|
/**
|
|
* Sets the stacked count for this experience orb.
|
|
*
|
|
* @param count the new count
|
|
*/
|
|
void setCount(int count);
|
|
// Paper end
|
|
|
|
// 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
|
|
}
|