275173e538
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 0c5d8709 SPIGOT-7400: Downgrade maven-resolver due to issues resolving certain depends 255c4fdb SPIGOT-7380: Add PlayerInteractEvent#getClickedPosition and ChiseledBookshelf#getSlot CraftBukkit Changes: b6b514b7e SPIGOT-7400: Downgrade maven-resolver due to issues resolving certain depends fcff84de9 SPIGOT-7399: Revert null check in CraftMetaItem#safelyAdd 44a4b5649 SPIGOT-7380: Add PlayerInteractEvent#getClickedPosition and ChiseledBookshelf#getSlot 676969d01 SPIGOT-7389: Handle setting null items in ChiseledBookshelf Inventory
43 Zeilen
2.6 KiB
Diff
43 Zeilen
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: BillyGalbreath <Blake.Galbreath@GMail.com>
|
|
Date: Fri, 10 Nov 2017 23:03:12 -0500
|
|
Subject: [PATCH] Option for maximum exp value when merging orbs
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index a6b0433b36c9b21871166384cee734a9c0dfbe82..c3a524da52b9588746a13f2107bfbef2af1a5d50 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -656,16 +656,30 @@ public class CraftEventFactory {
|
|
net.minecraft.world.entity.ExperienceOrb xp = (net.minecraft.world.entity.ExperienceOrb) entity;
|
|
double radius = world.spigotConfig.expMerge;
|
|
if (radius > 0) {
|
|
+ // Paper start - Maximum exp value when merging - Whole section has been tweaked, see comments for specifics
|
|
+ final int maxValue = world.paperConfig().entities.behavior.experienceMergeMaxValue;
|
|
+ final boolean mergeUnconditionally = world.paperConfig().entities.behavior.experienceMergeMaxValue <= 0;
|
|
+ if (mergeUnconditionally || xp.value < maxValue) { // Paper - Skip iteration if unnecessary
|
|
+
|
|
List<Entity> entities = world.getEntities(entity, entity.getBoundingBox().inflate(radius, radius, radius));
|
|
for (Entity e : entities) {
|
|
if (e instanceof net.minecraft.world.entity.ExperienceOrb) {
|
|
net.minecraft.world.entity.ExperienceOrb loopItem = (net.minecraft.world.entity.ExperienceOrb) e;
|
|
- if (!loopItem.isRemoved()) {
|
|
+ // Paper start
|
|
+ if (!loopItem.isRemoved() && !(maxValue > 0 && loopItem.value >= maxValue)) {
|
|
+ long newTotal = (long)xp.value + (long)loopItem.value;
|
|
+ if ((int) newTotal < 0) continue; // Overflow
|
|
+ if (maxValue > 0 && newTotal > (long)maxValue) {
|
|
+ loopItem.value = (int) (newTotal - maxValue);
|
|
+ xp.value = maxValue;
|
|
+ } else {
|
|
xp.value += loopItem.value;
|
|
loopItem.discard();
|
|
+ } // Paper end
|
|
}
|
|
}
|
|
}
|
|
+ } // Paper end - End iteration skip check - All tweaking ends here
|
|
}
|
|
// Spigot end
|
|
} else if (!(entity instanceof ServerPlayer)) {
|