aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2023-06-08 23:52:18 -0700
committerJake Potrebic <[email protected]>2023-06-08 23:52:18 -0700
commit4e3febbfe029653c6cdb77bf8480f968846d0d20 (patch)
treeab9c05593d459b244496c7b809d70f5ad21577be
parentf9fc44ff9fdf583beaad413e1f6b21116de83f06 (diff)
downloadPaper-4e3febbfe029653c6cdb77bf8480f968846d0d20.tar.gz
Paper-4e3febbfe029653c6cdb77bf8480f968846d0d20.zip
fix missing trigger entity for xp orb from breeding
-rw-r--r--patches/server/0127-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch41
-rw-r--r--patches/server/0168-PlayerPickupExperienceEvent.patch4
-rw-r--r--patches/server/0234-Fix-NBT-type-issues.patch6
-rw-r--r--patches/server/0968-Expand-PlayerItemMendEvent.patch6
4 files changed, 39 insertions, 18 deletions
diff --git a/patches/server/0127-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch b/patches/server/0127-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch
index 0f1eccb9a7..c4db45bd11 100644
--- a/patches/server/0127-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch
+++ b/patches/server/0127-ExperienceOrbs-API-for-Reason-Source-Triggering-play.patch
@@ -21,15 +21,17 @@ index b1fcdd896fe76fc96f94b626c5a8ffbcce8008ef..2e3b1eb4c4303d40f12c2e80f0608f23
return true;
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-index 9dffdfe5bbd0517e9a2c6a6770eea07b43ef9b33..af2c8db71b9306da9cae9fa0e56dd7716811cbac 100644
+index 9dffdfe5bbd0517e9a2c6a6770eea07b43ef9b33..6de7fcccb6da757185a38b79b3a22821b1186201 100644
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-@@ -39,13 +39,65 @@ public class ExperienceOrb extends Entity {
+@@ -39,13 +39,67 @@ public class ExperienceOrb extends Entity {
public int value;
private int count;
private Player followingPlayer;
+ // Paper start
++ @javax.annotation.Nullable
+ public java.util.UUID sourceEntityId;
++ @javax.annotation.Nullable
+ public java.util.UUID triggerEntityId;
+ public org.bukkit.entity.ExperienceOrb.SpawnReason spawnReason = org.bukkit.entity.ExperienceOrb.SpawnReason.UNKNOWN;
+
@@ -73,11 +75,11 @@ index 9dffdfe5bbd0517e9a2c6a6770eea07b43ef9b33..af2c8db71b9306da9cae9fa0e56dd771
+ this(world, x, y, z, amount, null, null);
+ }
+
-+ public ExperienceOrb(Level world, double d0, double d1, double d2, int i, org.bukkit.entity.ExperienceOrb.SpawnReason reason, Entity triggerId) {
++ public ExperienceOrb(Level world, double d0, double d1, double d2, int i, @javax.annotation.Nullable org.bukkit.entity.ExperienceOrb.SpawnReason reason, @javax.annotation.Nullable Entity triggerId) {
+ this(world, d0, d1, d2, i, reason, triggerId, null);
+ }
+
-+ public ExperienceOrb(Level world, double d0, double d1, double d2, int i, org.bukkit.entity.ExperienceOrb.SpawnReason reason, Entity triggerId, Entity sourceId) {
++ public ExperienceOrb(Level world, double d0, double d1, double d2, int i, @javax.annotation.Nullable org.bukkit.entity.ExperienceOrb.SpawnReason reason, @javax.annotation.Nullable Entity triggerId, @javax.annotation.Nullable Entity sourceId) {
this(EntityType.EXPERIENCE_ORB, world);
- this.setPos(x, y, z);
+ this.sourceEntityId = sourceId != null ? sourceId.getUUID() : null;
@@ -92,7 +94,7 @@ index 9dffdfe5bbd0517e9a2c6a6770eea07b43ef9b33..af2c8db71b9306da9cae9fa0e56dd771
}
public ExperienceOrb(EntityType<? extends ExperienceOrb> type, Level world) {
-@@ -160,12 +212,20 @@ public class ExperienceOrb extends Entity {
+@@ -160,12 +214,20 @@ public class ExperienceOrb extends Entity {
}
public static void award(ServerLevel world, Vec3 pos, int amount) {
@@ -114,7 +116,7 @@ index 9dffdfe5bbd0517e9a2c6a6770eea07b43ef9b33..af2c8db71b9306da9cae9fa0e56dd771
}
}
-@@ -235,6 +295,7 @@ public class ExperienceOrb extends Entity {
+@@ -235,6 +297,7 @@ public class ExperienceOrb extends Entity {
nbt.putShort("Age", (short) this.age);
nbt.putShort("Value", (short) this.value);
nbt.putInt("Count", this.count);
@@ -122,7 +124,7 @@ index 9dffdfe5bbd0517e9a2c6a6770eea07b43ef9b33..af2c8db71b9306da9cae9fa0e56dd771
}
@Override
-@@ -243,6 +304,7 @@ public class ExperienceOrb extends Entity {
+@@ -243,6 +306,7 @@ public class ExperienceOrb extends Entity {
this.age = nbt.getShort("Age");
this.value = nbt.getShort("Value");
this.count = Math.max(nbt.getInt("Count"), 1);
@@ -145,15 +147,34 @@ index 323b3a561060eacaad37832f44d0cdb9e4a1a2dc..565d0349328b7ae5fcbdf1682dcedff9
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/entity/animal/Animal.java b/src/main/java/net/minecraft/world/entity/animal/Animal.java
-index 18f560b8ea74b6b072264754708e9f67a178f99c..80598d4e679999138f6aca9f6f847e9509fa68da 100644
+index 18f560b8ea74b6b072264754708e9f67a178f99c..7ec2ce1c9aa9a78b03770adc0c2faa28cdbe60f2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Animal.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java
-@@ -272,7 +272,7 @@ public abstract class Animal extends AgeableMob {
+@@ -258,12 +258,14 @@ public abstract class Animal extends AgeableMob {
+
+ public void finalizeSpawnChildFromBreeding(ServerLevel worldserver, Animal entityanimal, @Nullable AgeableMob entityageable, int experience) {
+ // CraftBukkit end
+- Optional.ofNullable(this.getLoveCause()).or(() -> {
+- return Optional.ofNullable(entityanimal.getLoveCause());
+- }).ifPresent((entityplayer) -> {
++ // Paper start
++ ServerPlayer entityplayer = this.getLoveCause();
++ if (entityplayer == null) entityplayer = entityanimal.getLoveCause();
++ if (entityplayer != null) {
++ // Paper end
+ entityplayer.awardStat(Stats.ANIMALS_BRED);
+ CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer, this, entityanimal, entityageable);
+- });
++ } // Paper
+ this.setAge(6000);
+ entityanimal.setAge(6000);
+ this.resetLove();
+@@ -272,7 +274,7 @@ public abstract class Animal extends AgeableMob {
if (worldserver.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
// CraftBukkit start - use event experience
if (experience > 0) {
- worldserver.addFreshEntity(new ExperienceOrb(worldserver, this.getX(), this.getY(), this.getZ(), experience));
-+ worldserver.addFreshEntity(new ExperienceOrb(worldserver, this.getX(), this.getY(), this.getZ(), experience, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, null)); // Paper //TODO trigger
++ worldserver.addFreshEntity(new ExperienceOrb(worldserver, this.getX(), this.getY(), this.getZ(), experience, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, entityplayer)); // Paper
}
// CraftBukkit end
}
diff --git a/patches/server/0168-PlayerPickupExperienceEvent.patch b/patches/server/0168-PlayerPickupExperienceEvent.patch
index 9d7e242f76..7a00661b0c 100644
--- a/patches/server/0168-PlayerPickupExperienceEvent.patch
+++ b/patches/server/0168-PlayerPickupExperienceEvent.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] PlayerPickupExperienceEvent
Allows plugins to cancel a player picking up an experience orb
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-index af2c8db71b9306da9cae9fa0e56dd7716811cbac..ea2e30e405426ed0d3b6b912512f5c4332d91b1d 100644
+index 6de7fcccb6da757185a38b79b3a22821b1186201..ff682a671f04a333615c4f22dc4b2aedd00eb117 100644
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-@@ -310,7 +310,7 @@ public class ExperienceOrb extends Entity {
+@@ -312,7 +312,7 @@ public class ExperienceOrb extends Entity {
@Override
public void playerTouch(Player player) {
if (!this.level().isClientSide) {
diff --git a/patches/server/0234-Fix-NBT-type-issues.patch b/patches/server/0234-Fix-NBT-type-issues.patch
index 1ab0e9a166..f89541d41f 100644
--- a/patches/server/0234-Fix-NBT-type-issues.patch
+++ b/patches/server/0234-Fix-NBT-type-issues.patch
@@ -8,10 +8,10 @@ Addresses two issues:
- Allay duplication cooldown is saved and exposed as a long, but loaded as an int
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-index ea2e30e405426ed0d3b6b912512f5c4332d91b1d..000c13afc6bb3acb68b9adcaeefb7bb1cb703702 100644
+index ff682a671f04a333615c4f22dc4b2aedd00eb117..8d8fe55a05eea237a8af99ed15ab16d6167daa77 100644
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-@@ -293,7 +293,7 @@ public class ExperienceOrb extends Entity {
+@@ -295,7 +295,7 @@ public class ExperienceOrb extends Entity {
public void addAdditionalSaveData(CompoundTag nbt) {
nbt.putShort("Health", (short) this.health);
nbt.putShort("Age", (short) this.age);
@@ -20,7 +20,7 @@ index ea2e30e405426ed0d3b6b912512f5c4332d91b1d..000c13afc6bb3acb68b9adcaeefb7bb1
nbt.putInt("Count", this.count);
this.savePaperNBT(nbt); // Paper
}
-@@ -302,7 +302,7 @@ public class ExperienceOrb extends Entity {
+@@ -304,7 +304,7 @@ public class ExperienceOrb extends Entity {
public void readAdditionalSaveData(CompoundTag nbt) {
this.health = nbt.getShort("Health");
this.age = nbt.getShort("Age");
diff --git a/patches/server/0968-Expand-PlayerItemMendEvent.patch b/patches/server/0968-Expand-PlayerItemMendEvent.patch
index 0a658d60fa..e722df8a3b 100644
--- a/patches/server/0968-Expand-PlayerItemMendEvent.patch
+++ b/patches/server/0968-Expand-PlayerItemMendEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expand PlayerItemMendEvent
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-index 000c13afc6bb3acb68b9adcaeefb7bb1cb703702..673327af0f77aeac0d704b0fb6bebebc76a3c966 100644
+index 8d8fe55a05eea237a8af99ed15ab16d6167daa77..eca634792d2a7cc649675e3394e84dbaf1453905 100644
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-@@ -335,7 +335,7 @@ public class ExperienceOrb extends Entity {
+@@ -337,7 +337,7 @@ public class ExperienceOrb extends Entity {
ItemStack itemstack = (ItemStack) entry.getValue();
int j = Math.min(this.xpToDurability(this.value), itemstack.getDamageValue());
// CraftBukkit start
@@ -17,7 +17,7 @@ index 000c13afc6bb3acb68b9adcaeefb7bb1cb703702..673327af0f77aeac0d704b0fb6bebebc
j = event.getRepairAmount();
if (event.isCancelled()) {
return amount;
-@@ -343,8 +343,13 @@ public class ExperienceOrb extends Entity {
+@@ -345,8 +345,13 @@ public class ExperienceOrb extends Entity {
// CraftBukkit end
itemstack.setDamageValue(itemstack.getDamageValue() - j);