mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-02 13:07:06 +01:00
f6969b6374
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: 09b1c123 PR-916: Add more lightning API c085f3de PR-859: Add Entity#getTrackedBy CraftBukkit Changes: 1bf30a4e9 SPIGOT-7495: Spawning bee entity in asynchronous BlockPopulator causes IllegalStateException - Accessing LegacyRandomSource from multiple threads 476c5bccd PR-1267: Add more lightning API 40d5e6c02 PR-1190: Add Entity#getTrackedBy 40d41acc1 SPIGOT-7491: Downgrade bundled SQLite to be updated next release 44b31da38 PR-1264: Load Bukkit class before creating Registry item dc45a6738 SPIGOT-7496: Failure to load datapacks with multiple identical predicates f508657d6 Fix decompile error affecting javac ef7a4743d PR-1265: Ensure UTF-8 used in new test resource Spigot Changes: 224dad51 Rebuild patches
104 lines
7 KiB
Diff
104 lines
7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
|
|
Date: Fri, 24 Jun 2022 12:39:34 +0200
|
|
Subject: [PATCH] Add EntityFertilizeEggEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
|
|
index 5f57f13d50e051c621e401b63c0b55b3a2a73fa3..490472bb618e9ac07da5883a71dff8920525b1e2 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
|
|
@@ -450,6 +450,10 @@ public class Turtle extends Animal {
|
|
if (entityplayer == null && this.partner.getLoveCause() != null) {
|
|
entityplayer = this.partner.getLoveCause();
|
|
}
|
|
+ // Paper start - Add EntityFertilizeEggEvent event
|
|
+ io.papermc.paper.event.entity.EntityFertilizeEggEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityFertilizeEggEvent(this.animal, this.partner);
|
|
+ if (event.isCancelled()) return;
|
|
+ // Paper end - Add EntityFertilizeEggEvent event
|
|
|
|
if (entityplayer != null) {
|
|
entityplayer.awardStat(Stats.ANIMALS_BRED);
|
|
@@ -464,7 +468,7 @@ public class Turtle extends Animal {
|
|
RandomSource randomsource = this.animal.getRandom();
|
|
|
|
if (this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
|
|
- this.level.addFreshEntity(new ExperienceOrb(this.level, this.animal.getX(), this.animal.getY(), this.animal.getZ(), randomsource.nextInt(7) + 1, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, entityplayer)); // Paper;
|
|
+ if(event.getExperience() > 0) this.level.addFreshEntity(new ExperienceOrb(this.level, this.animal.getX(), this.animal.getY(), this.animal.getZ(), event.getExperience(), org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, entityplayer)); // Paper - Add EntityFertilizeEggEvent event
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
|
|
index 7d1e6427ab5f2dabe9072d092d733b0ff34e0b44..5000ebc5f19dee72a86360062b822aecd60beb47 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
|
|
@@ -244,7 +244,12 @@ public class Frog extends Animal implements VariantHolder<FrogVariant> {
|
|
|
|
@Override
|
|
public void spawnChildFromBreeding(ServerLevel world, Animal other) {
|
|
- this.finalizeSpawnChildFromBreeding(world, other, (AgeableMob)null);
|
|
+ // Paper start - Add EntityFertilizeEggEvent event
|
|
+ final io.papermc.paper.event.entity.EntityFertilizeEggEvent result = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityFertilizeEggEvent(this, other);
|
|
+ if (result.isCancelled()) return;
|
|
+
|
|
+ this.finalizeSpawnChildFromBreeding(world, other, (AgeableMob)null, result.getExperience()); // Paper - use craftbukkit call that takes experience amount
|
|
+ // Paper end - Add EntityFertilizeEggEvent event
|
|
this.getBrain().setMemory(MemoryModuleType.IS_PREGNANT, Unit.INSTANCE);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
|
index 36b3945832733b5ad66d25aa3a31335234d2acff..47a5125e44cea1ece84657cdb874807f13ee824f 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
|
@@ -347,11 +347,16 @@ public class Sniffer extends Animal {
|
|
|
|
@Override
|
|
public void spawnChildFromBreeding(ServerLevel world, Animal other) {
|
|
+ // Paper start - Add EntityFertilizeEggEvent event
|
|
+ final io.papermc.paper.event.entity.EntityFertilizeEggEvent result = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityFertilizeEggEvent(this, other);
|
|
+ if (result.isCancelled()) return;
|
|
+ // Paper end - Add EntityFertilizeEggEvent event
|
|
+
|
|
ItemStack itemstack = new ItemStack(Items.SNIFFER_EGG);
|
|
ItemEntity entityitem = new ItemEntity(world, this.position().x(), this.position().y(), this.position().z(), itemstack);
|
|
|
|
entityitem.setDefaultPickUpDelay();
|
|
- this.finalizeSpawnChildFromBreeding(world, other, (AgeableMob) null);
|
|
+ this.finalizeSpawnChildFromBreeding(world, other, (AgeableMob) null, result.getExperience()); // Paper - Add EntityFertilizeEggEvent event
|
|
if (this.spawnAtLocation(entityitem) != null) { // Paper - call EntityDropItemEvent
|
|
this.playSound(SoundEvents.SNIFFER_EGG_PLOP, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 0.5F);
|
|
} // Paper
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index 70a873c4a44dea055c091e1ed57cb9c6e3974f1f..c562b5b4048e68a62d114a4a928dff3c956d679a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -2049,4 +2049,29 @@ public class CraftEventFactory {
|
|
return event.callEvent();
|
|
}
|
|
// Paper end
|
|
+
|
|
+ // Paper start - add EntityFertilizeEggEvent
|
|
+ /**
|
|
+ * Calls the io.papermc.paper.event.entity.EntityFertilizeEggEvent.
|
|
+ * If the event is cancelled, this method also resets the love on both the {@code breeding} and {@code other} entity.
|
|
+ *
|
|
+ * @param breeding the entity on which #spawnChildFromBreeding was called.
|
|
+ * @param other the partner of the entity.
|
|
+ * @return the event after it was called. The instance may be used to retrieve the experience of the event.
|
|
+ */
|
|
+ public static io.papermc.paper.event.entity.EntityFertilizeEggEvent callEntityFertilizeEggEvent(net.minecraft.world.entity.animal.Animal breeding,
|
|
+ net.minecraft.world.entity.animal.Animal other) {
|
|
+ net.minecraft.server.level.ServerPlayer serverPlayer = breeding.getLoveCause();
|
|
+ if (serverPlayer == null) serverPlayer = other.getLoveCause();
|
|
+ final int experience = breeding.getRandom().nextInt(7) + 1; // From Animal#spawnChildFromBreeding(ServerLevel, Animal)
|
|
+
|
|
+ final io.papermc.paper.event.entity.EntityFertilizeEggEvent event = new io.papermc.paper.event.entity.EntityFertilizeEggEvent((org.bukkit.entity.LivingEntity) breeding.getBukkitEntity(), (org.bukkit.entity.LivingEntity) other.getBukkitEntity(), serverPlayer == null ? null : serverPlayer.getBukkitEntity(), breeding.breedItem == null ? null : org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(breeding.breedItem).clone(), experience);
|
|
+ if (!event.callEvent()) {
|
|
+ breeding.resetLove();
|
|
+ other.resetLove(); // stop the pathfinding to avoid infinite loop
|
|
+ }
|
|
+
|
|
+ return event;
|
|
+ }
|
|
+ // Paper end - add EntityFertilizeEggEvent
|
|
}
|