2023-03-04 23:23:32 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public class Turtle extends Animal {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             if (entityplayer == null && this.partner.getLoveCause() != null) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                 entityplayer = this.partner.getLoveCause();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             }
							 
						 
					
						
							
								
									
										
										
										
											2023-06-09 09:01:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            // 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
 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-04 23:23:32 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             if (entityplayer != null) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                 entityplayer.awardStat(Stats.ANIMALS_BRED);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ public class Turtle extends Animal {
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-09 09:01:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								             RandomSource randomsource = this.animal.getRandom();
							 
						 
					
						
							
								
									
										
										
										
											2023-03-04 23:23:32 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-09 09:01:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								             if (this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
							 
						 
					
						
							
								
									
										
										
										
											2023-03-04 23:23:32 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								-                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;
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-09 09:01:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                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
 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-04 23:23:32 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								             }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
									
										
										
										
											2023-06-09 09:01:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +0,0 @@ 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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         this.playSound(SoundEvents.SNIFFER_EGG_PLOP, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 0.5F);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         world.addFreshEntity(entityitem);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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 {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 }