diff options
Diffstat (limited to 'patches/api/0080-ExperienceOrb-merging-stacking-API.patch')
-rw-r--r-- | patches/api/0080-ExperienceOrb-merging-stacking-API.patch | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/patches/api/0080-ExperienceOrb-merging-stacking-API.patch b/patches/api/0080-ExperienceOrb-merging-stacking-API.patch new file mode 100644 index 0000000000..88367f383e --- /dev/null +++ b/patches/api/0080-ExperienceOrb-merging-stacking-API.patch @@ -0,0 +1,136 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar <[email protected]> +Date: Tue, 19 Dec 2017 22:56:24 -0500 +Subject: [PATCH] ExperienceOrb merging/stacking API + +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 <[email protected]> + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/ExperienceOrbMergeEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/ExperienceOrbMergeEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..c520e5517861c4686806df233d1ef5e6bfb76ad3 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/entity/ExperienceOrbMergeEvent.java +@@ -0,0 +1,91 @@ ++/* ++ * Copyright (c) 2017 Daniel Ennis (Aikar) MIT License ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++package com.destroystokyo.paper.event.entity; ++ ++import org.bukkit.entity.ExperienceOrb; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++import org.jetbrains.annotations.ApiStatus; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * Fired anytime the server is about to merge 2 experience orbs into one ++ */ ++public class ExperienceOrbMergeEvent extends EntityEvent implements Cancellable { ++ ++ private static final HandlerList HANDLER_LIST = new HandlerList(); ++ ++ @NotNull private final ExperienceOrb mergeTarget; ++ @NotNull private final ExperienceOrb mergeSource; ++ ++ private boolean cancelled; ++ ++ @ApiStatus.Internal ++ public ExperienceOrbMergeEvent(@NotNull ExperienceOrb mergeTarget, @NotNull ExperienceOrb mergeSource) { ++ super(mergeTarget); ++ this.mergeTarget = mergeTarget; ++ this.mergeSource = mergeSource; ++ } ++ ++ /** ++ * @return The orb that will absorb the other experience orb ++ */ ++ @NotNull ++ public ExperienceOrb getMergeTarget() { ++ return this.mergeTarget; ++ } ++ ++ /** ++ * @return The orb that is subject to being removed and merged into the target orb ++ */ ++ @NotNull ++ public ExperienceOrb getMergeSource() { ++ return this.mergeSource; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return this.cancelled; ++ } ++ ++ /** ++ * @param cancel {@code true} if you wish to cancel this event, and prevent the orbs from merging ++ */ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.cancelled = cancel; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return HANDLER_LIST; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return HANDLER_LIST; ++ } ++} +diff --git a/src/main/java/org/bukkit/entity/ExperienceOrb.java b/src/main/java/org/bukkit/entity/ExperienceOrb.java +index dec70bbfaf73a9d525b2c45682b804c684e1645b..0fe4a7f300287f38dbe15862787f387aba74397b 100644 +--- a/src/main/java/org/bukkit/entity/ExperienceOrb.java ++++ b/src/main/java/org/bukkit/entity/ExperienceOrb.java +@@ -21,6 +21,22 @@ public interface ExperienceOrb extends Entity { + * @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 + /** |