mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-01 20:50:41 +01:00
90fe0d58a5
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: 897a0a23 SPIGOT-5753: Back PotionType by a minecraft registry 255b2aa1 SPIGOT-7080: Add World#locateNearestBiome ff984826 Remove javadoc.io doc links CraftBukkit Changes: 71b0135cc SPIGOT-5753: Back PotionType by a minecraft registry a6bcb8489 SPIGOT-7080: Add World#locateNearestBiome ad0e57434 SPIGOT-7502: CraftMetaItem - cannot deserialize BlockStateTag b3efca57a SPIGOT-6400: Use Mockito instead of InvocationHandler 38c599f9d PR-1272: Only allow one entity in CraftItem instead of two f065271ac SPIGOT-7498: ChunkSnapshot.getBlockEmittedLight() gets 64 blocks upper in Overworld Spigot Changes: e0e223fe Remove javadoc.io doc links
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
|
|
}
|