mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 17:01:56 +01:00
21ae8ff67e
Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this Upstream has released updates that appears 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: b850a822 SPIGOT-4526: Add conversion time API for Zombie & subclasses CraftBukkit Changes:38cf676e
SPIGOT-4534: CreatureSpawnEvent not being called for CHUNK_GENb446cb5d
SPIGOT-4527: Fix sponges with waterlogged blocks6ec8ea5c
SPIGOT-4526: Add conversion time API for Zombie & subclassesc64fe508
Mappings Updatea3c2ec03
Fix missing ServerListPingEvent call for legacy pings Spigot Changes: 1dc156ce Rebuild patches 140f654d Mappings Update
62 lines
No EOL
3.2 KiB
Diff
62 lines
No EOL
3.2 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/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index af31030dc..b6764c7ec 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
|
disableCreeperLingeringEffect = getBoolean("disable-creeper-lingering-effect", false);
|
|
log("Creeper lingering effect: " + disableCreeperLingeringEffect);
|
|
}
|
|
+
|
|
+ public int expMergeMaxValue;
|
|
+ private void expMergeMaxValue() {
|
|
+ expMergeMaxValue = getInt("experience-merge-max-value", -1);
|
|
+ log("Experience Merge Max Value: " + expMergeMaxValue);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index 464c5cfc9..14df8e80b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -0,0 +0,0 @@ public class CraftEventFactory {
|
|
EntityExperienceOrb xp = (EntityExperienceOrb) 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.expMergeMaxValue;
|
|
+ final boolean mergeUnconditionally = world.paperConfig.expMergeMaxValue <= 0;
|
|
+ if (mergeUnconditionally || xp.value < maxValue) { // Paper - Skip iteration if unnecessary
|
|
+
|
|
List<Entity> entities = world.getEntities(entity, entity.getBoundingBox().grow(radius, radius, radius));
|
|
for (Entity e : entities) {
|
|
if (e instanceof EntityExperienceOrb) {
|
|
EntityExperienceOrb loopItem = (EntityExperienceOrb) e;
|
|
- if (!loopItem.dead) {
|
|
- xp.value += loopItem.value;
|
|
- loopItem.die();
|
|
+ // Paper start
|
|
+ if (!loopItem.dead && !(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.die();
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
}
|
|
}
|
|
+
|
|
+ } // Paper end - End iteration skip check - All tweaking ends here
|
|
}
|
|
} // Spigot end
|
|
|
|
--
|