more entities

This commit is contained in:
Lulu13022002 committed 2025-03-12 22:00:18 +01:00
1 parent 91c0d9f374
commit ad5d426e62
2 files changed
+30 -50

No files matched your search

@@ -1,22 +1,14 @@
From 3aeeaf31b7a7f888f54e47826e8ec0ddbe65c4bf Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 14:37:42 +0100
Subject: [PATCH] paper File Patches
diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java
index 60c2ec7a2f2d784837cea4ed54a3951c67c60453..28697020ba838c86dde5b2b11b2fe8f347a147a7 100644
--- a/net/minecraft/world/entity/animal/Animal.java
+++ b/net/minecraft/world/entity/animal/Animal.java
@@ -39,6 +39,7 @@ public abstract class Animal extends AgeableMob {
public int inLove;
@@ -41,6 +_,7 @@
public int inLove = 0;
@Nullable
public UUID loveCause;
+ public ItemStack breedItem; // CraftBukkit - Add breedItem variable
protected Animal(EntityType<? extends Animal> entityType, Level level) {
super(entityType, level);
@@ -78,9 +79,13 @@ public abstract class Animal extends AgeableMob {
@@ -80,9 +_,13 @@
}
@Override
@@ -32,7 +24,7 @@ index 60c2ec7a2f2d784837cea4ed54a3951c67c60453..28697020ba838c86dde5b2b11b2fe8f3
}
@Override
@@ -138,8 +143,9 @@ public abstract class Animal extends AgeableMob {
@@ -138,8 +_,9 @@
if (this.isFood(itemInHand)) {
int age = this.getAge();
if (!this.level().isClientSide && age == 0 && this.canFallInLove()) {
@@ -43,7 +35,7 @@ index 60c2ec7a2f2d784837cea4ed54a3951c67c60453..28697020ba838c86dde5b2b11b2fe8f3
this.playEatingSound();
return InteractionResult.SUCCESS_SERVER;
}
@@ -176,11 +182,26 @@ public abstract class Animal extends AgeableMob {
@@ -176,8 +_,23 @@
return this.inLove <= 0;
}
@@ -53,6 +45,7 @@ index 60c2ec7a2f2d784837cea4ed54a3951c67c60453..28697020ba838c86dde5b2b11b2fe8f3
+ // Paper start - Fix EntityBreedEvent copying
+ this.setInLove(player, null);
+ }
+
+ public void setInLove(@Nullable Player player, @Nullable ItemStack breedItemCopy) {
+ if (breedItemCopy != null) this.breedItem = breedItemCopy;
+ // Paper end - Fix EntityBreedEvent copying
@@ -67,17 +60,13 @@ index 60c2ec7a2f2d784837cea4ed54a3951c67c60453..28697020ba838c86dde5b2b11b2fe8f3
if (player != null) {
this.loveCause = player.getUUID();
}
+ // Paper - Fix EntityBreedEvent copying; set breed item in better place
this.level().broadcastEntityEvent(this, (byte)18);
}
@@ -220,23 +241,44 @@ public abstract class Animal extends AgeableMob {
@@ -220,23 +_,45 @@
if (breedOffspring != null) {
breedOffspring.setBaby(true);
breedOffspring.moveTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F);
breedOffspring.snapTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F);
- this.finalizeSpawnChildFromBreeding(level, mate, breedOffspring);
- level.addFreshEntityWithPassengers(breedOffspring);
+ // CraftBukkit start - call EntityBreedEvent
+ // CraftBukkit start - Call EntityBreedEvent
+ ServerPlayer breeder = Optional.ofNullable(this.getLoveCause()).or(() -> Optional.ofNullable(mate.getLoveCause())).orElse(null);
+ int experience = this.getRandom().nextInt(7) + 1;
+ org.bukkit.event.entity.EntityBreedEvent entityBreedEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(breedOffspring, this, mate, breeder, this.breedItem, experience);
@@ -87,29 +76,30 @@ index 60c2ec7a2f2d784837cea4ed54a3951c67c60453..28697020ba838c86dde5b2b11b2fe8f3
+ return;
+ }
+ experience = entityBreedEvent.getExperience();
+
+ this.finalizeSpawnChildFromBreeding(level, mate, breedOffspring, experience);
+ level.addFreshEntityWithPassengers(breedOffspring, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING);
+ // CraftBukkit end - call EntityBreedEvent
+ // CraftBukkit end - Call EntityBreedEvent
}
}
public void finalizeSpawnChildFromBreeding(ServerLevel level, Animal animal, @Nullable AgeableMob baby) {
- Optional.ofNullable(this.getLoveCause()).or(() -> Optional.ofNullable(animal.getLoveCause())).ifPresent(player -> {
+ // CraftBukkit start - call EntityBreedEvent
+ // CraftBukkit start - Call EntityBreedEvent
+ this.finalizeSpawnChildFromBreeding(level, animal, baby, this.getRandom().nextInt(7) + 1);
+ }
+
+ public void finalizeSpawnChildFromBreeding(ServerLevel level, Animal animal, @Nullable AgeableMob baby, int experience) {
+ // CraftBukkit end - call EntityBreedEvent
+ // Paper start - call EntityBreedEvent
+ // CraftBukkit end - Call EntityBreedEvent
+ // Paper start - Call EntityBreedEvent
+ ServerPlayer player = this.getLoveCause();
+ if (player == null) player = animal.getLoveCause();
+ if (player != null) {
+ // Paper end - call EntityBreedEvent
+ // Paper end - Call EntityBreedEvent
player.awardStat(Stats.ANIMALS_BRED);
CriteriaTriggers.BRED_ANIMALS.trigger(player, this, animal, baby);
- });
+ } // Paper - call EntityBreedEvent
+ } // Paper - Call EntityBreedEvent
this.setAge(6000);
animal.setAge(6000);
this.resetLove();
@@ -117,8 +107,8 @@ index 60c2ec7a2f2d784837cea4ed54a3951c67c60453..28697020ba838c86dde5b2b11b2fe8f3
level.broadcastEntityEvent(this, (byte)18);
- if (level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
- level.addFreshEntity(new ExperienceOrb(level, this.getX(), this.getY(), this.getZ(), this.getRandom().nextInt(7) + 1));
+ if (experience > 0 && level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { // Paper - call EntityBreedEvent
+ level.addFreshEntity(new ExperienceOrb(level, this.getX(), this.getY(), this.getZ(), experience, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, player, baby)); // Paper - call EntityBreedEvent, add spawn context
+ if (experience > 0 && level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { // Paper - Call EntityBreedEvent
+ level.addFreshEntity(new ExperienceOrb(level, this.getX(), this.getY(), this.getZ(), experience, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, player, baby)); // Paper - Call EntityBreedEvent, add spawn context
}
}
@@ -1,14 +1,6 @@
From 3aeeaf31b7a7f888f54e47826e8ec0ddbe65c4bf Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 14:37:42 +0100
Subject: [PATCH] paper File Patches
diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java
index 552dcbecba44843638fe0033510e9c3af4ce445c..0e2d2dd3f2ef2783f3773a9a05c4f718991f7784 100644
--- a/net/minecraft/world/entity/animal/Turtle.java
+++ b/net/minecraft/world/entity/animal/Turtle.java
@@ -303,7 +303,9 @@ public class Turtle extends Animal {
@@ -259,7 +_,9 @@
protected void ageBoundaryReached() {
super.ageBoundaryReached();
if (!this.isBaby() && this.level() instanceof ServerLevel serverLevel && serverLevel.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
@@ -18,7 +10,7 @@ index 552dcbecba44843638fe0033510e9c3af4ce445c..0e2d2dd3f2ef2783f3773a9a05c4f718
}
}
@@ -328,7 +330,7 @@ public class Turtle extends Animal {
@@ -284,7 +_,7 @@
@Override
public void thunderHit(ServerLevel level, LightningBolt lightning) {
@@ -27,7 +19,7 @@ index 552dcbecba44843638fe0033510e9c3af4ce445c..0e2d2dd3f2ef2783f3773a9a05c4f718
}
@Override
@@ -355,6 +357,10 @@ public class Turtle extends Animal {
@@ -311,6 +_,10 @@
if (loveCause == null && this.partner.getLoveCause() != null) {
loveCause = this.partner.getLoveCause();
}
@@ -38,7 +30,7 @@ index 552dcbecba44843638fe0033510e9c3af4ce445c..0e2d2dd3f2ef2783f3773a9a05c4f718
if (loveCause != null) {
loveCause.awardStat(Stats.ANIMALS_BRED);
@@ -368,7 +374,7 @@ public class Turtle extends Animal {
@@ -324,7 +_,7 @@
this.partner.resetLove();
RandomSource random = this.animal.getRandom();
if (getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
@@ -47,34 +39,32 @@ index 552dcbecba44843638fe0033510e9c3af4ce445c..0e2d2dd3f2ef2783f3773a9a05c4f718
}
}
}
@@ -392,7 +398,7 @@ public class Turtle extends Animal {
@@ -347,7 +_,7 @@
&& (
this.turtle.hasEgg()
|| this.turtle.getRandom().nextInt(reducedTickDelay(700)) == 0
&& !this.turtle.getHomePos().closerToCenterThan(this.turtle.position(), 64.0)
|| this.turtle.getRandom().nextInt(reducedTickDelay(700)) == 0 && !this.turtle.homePos.closerToCenterThan(this.turtle.position(), 64.0)
- );
+ ) && new com.destroystokyo.paper.event.entity.TurtleGoHomeEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity()).callEvent(); // Paper - Turtle API
}
@Override
@@ -500,16 +506,22 @@ public class Turtle extends Animal {
@@ -455,14 +_,20 @@
BlockPos blockPos = this.turtle.blockPosition();
if (!this.turtle.isInWater() && this.isReachedTarget()) {
if (this.turtle.layEggCounter < 1) {
- this.turtle.setLayingEgg(true);
+ this.turtle.setLayingEgg(new com.destroystokyo.paper.event.entity.TurtleStartDiggingEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), io.papermc.paper.util.MCUtil.toLocation(this.turtle.level(), this.blockPos)).callEvent()); // Paper - Turtle API
+ this.turtle.setLayingEgg(new com.destroystokyo.paper.event.entity.TurtleStartDiggingEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), org.bukkit.craftbukkit.util.CraftLocation.toBukkit(this.blockPos, this.turtle.level())).callEvent()); // Paper - Turtle API
} else if (this.turtle.layEggCounter > this.adjustedTickDelay(200)) {
+ // Paper start - Turtle API
+ int eggCount = this.turtle.random.nextInt(4) + 1;
+ com.destroystokyo.paper.event.entity.TurtleLayEggEvent layEggEvent = new com.destroystokyo.paper.event.entity.TurtleLayEggEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), io.papermc.paper.util.MCUtil.toLocation(this.turtle.level(), this.blockPos.above()), eggCount);
+ com.destroystokyo.paper.event.entity.TurtleLayEggEvent layEggEvent = new com.destroystokyo.paper.event.entity.TurtleLayEggEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), org.bukkit.craftbukkit.util.CraftLocation.toBukkit(this.blockPos.above(), this.turtle.level()), eggCount);
+ if (layEggEvent.callEvent() && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.turtle, this.blockPos.above(), Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, layEggEvent.getEggCount()))) {
+ // Paper end - Turtle API
Level level = this.turtle.level();
level.playSound(null, blockPos, SoundEvents.TURTLE_LAY_EGG, SoundSource.BLOCKS, 0.3F, 0.9F + level.random.nextFloat() * 0.2F);
BlockPos blockPos1 = this.blockPos.above();
BlockState blockState = Blocks.TURTLE_EGG
.defaultBlockState()
- .setValue(TurtleEggBlock.EGGS, Integer.valueOf(this.turtle.random.nextInt(4) + 1));
+ .setValue(TurtleEggBlock.EGGS, layEggEvent.getEggCount()); // Paper
- BlockState blockState = Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, this.turtle.random.nextInt(4) + 1);
+ BlockState blockState = Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, layEggEvent.getEggCount()); // Paper
level.setBlock(blockPos1, blockState, 3);
level.gameEvent(GameEvent.BLOCK_PLACE, blockPos1, GameEvent.Context.of(this.turtle, blockState));
+ } // CraftBukkit