094bb03a37
- Lots of itemstack cloning removed. Only clone if the item is actually moved - Return true when a plugin cancels inventory move item event instead of false, as false causes pulls to cycle through all items. However, pushes do not exhibit the same behavior, so this is not something plugins could of been relying on. - Add option (Default on) to cooldown hoppers when they fail to move an item due to full inventory - Skip subsequent InventoryMoveItemEvents if a plugin does not use the item after first event fire for an iteration
26 Zeilen
1.5 KiB
Diff
26 Zeilen
1.5 KiB
Diff
From 74b2b4a7e674cff79b0521721ef07183b708aa4f Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Tue, 19 Dec 2017 22:57:26 -0500
|
|
Subject: [PATCH] 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.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index e4502551b..9f5388ed9 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1153,7 +1153,7 @@ public abstract class World implements IBlockAccess {
|
|
for (Entity e : entities) {
|
|
if (e instanceof EntityExperienceOrb) {
|
|
EntityExperienceOrb loopItem = (EntityExperienceOrb) e;
|
|
- if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue)) { // Paper
|
|
+ if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue) && new com.destroystokyo.paper.event.entity.ExperienceOrbMergeEvent((org.bukkit.entity.ExperienceOrb) entity.getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) loopItem.getBukkitEntity()).callEvent()) { // Paper
|
|
xp.value += loopItem.value;
|
|
// Paper start
|
|
if (!mergeUnconditionally && xp.value > maxValue) {
|
|
--
|
|
2.16.1
|
|
|