d8847bc1f3
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: fde5602a PR-927: Add PlayerRecipeBookSettingsChangeEvent 949ff217 PR-930: Add methods to get/set evoker fang attack delay f6f7c79d SPIGOT-7514, PR-929: Add "Enchantment Roll" API to enchant items according to Minecraft mechanics d40e22da PR-712: Add API to get full result of crafting items CraftBukkit Changes: c8feb0629 PR-1291: Improve precondition message in Entity#playEffect 482c56a00 PR-1285: Add PlayerRecipeBookSettingsChangeEvent cdf798800 PR-1290: Add methods to get/set evoker fang attack delay 2c1b5f78f SPIGOT-7514, PR-1289: Add "Enchantment Roll" API to enchant items according to Minecraft mechanics 6aa644ae9 PR-992: Add API to get full result of crafting items ffb1319bc PR-1287: Fix scoreboards not updating in Player#setStatistic
105 Zeilen
7.0 KiB
Diff
105 Zeilen
7.0 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 bd3893f3ad3d8150c1b23ad01ccce3b1dcb25b1b..c6447735475075cad123428dbc6eece55a2a7d82 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -2096,4 +2096,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
|
|
}
|