net.minecraft.world.entity.animal.{armadillo|camel|sniffer}

This commit is contained in:
Noah van der Aa
2024-12-14 19:16:30 +01:00
parent db81fd3455
commit ff9cf280c2
5 changed files with 94 additions and 171 deletions

View File

@@ -0,0 +1,46 @@
--- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java
+++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java
@@ -141,10 +_,12 @@
ArmadilloAi.updateActivity(this);
profilerFiller.pop();
if (this.isAlive() && !this.isBaby() && --this.scuteTime <= 0) {
+ this.forceDrops = true; // CraftBukkit
if (this.dropFromGiftLootTable(level, BuiltInLootTables.ARMADILLO_SHED, this::spawnAtLocation)) {
this.playSound(SoundEvents.ARMADILLO_SCUTE_DROP, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
this.gameEvent(GameEvent.ENTITY_PLACE);
}
+ this.forceDrops = false; // CraftBukkit
this.scuteTime = this.pickNextScuteDropTime();
}
@@ -283,7 +_,11 @@
}
@Override
- protected void actuallyHurt(ServerLevel level, DamageSource damageSource, float amount) {
+ // CraftBukkit start - void -> boolean
+ public boolean actuallyHurt(ServerLevel level, DamageSource damageSource, float amount, org.bukkit.event.entity.EntityDamageEvent event) {
+ boolean damageResult = super.actuallyHurt(level, damageSource, amount, event);
+ if (!damageResult) return false;
+ // CraftBukkit end
super.actuallyHurt(level, damageSource, amount);
if (!this.isNoAi() && !this.isDeadOrDying()) {
if (damageSource.getEntity() instanceof LivingEntity) {
@@ -295,6 +_,7 @@
this.rollOut();
}
}
+ return true; // CraftBukkit
}
@Override
@@ -313,7 +_,9 @@
return false;
} else {
if (this.level() instanceof ServerLevel serverLevel) {
+ this.forceDrops = true; // CraftBukkit
this.spawnAtLocation(serverLevel, new ItemStack(Items.ARMADILLO_SCUTE));
+ this.forceDrops = false; // CraftBukkit
this.gameEvent(GameEvent.ENTITY_INTERACT);
this.playSound(SoundEvents.ARMADILLO_BRUSH);
}

View File

@@ -0,0 +1,59 @@
--- a/net/minecraft/world/entity/animal/camel/Camel.java
+++ b/net/minecraft/world/entity/animal/camel/Camel.java
@@ -386,12 +_,12 @@
} else {
boolean flag = this.getHealth() < this.getMaxHealth();
if (flag) {
- this.heal(2.0F);
+ this.heal(2.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.EATING); // Paper - Add missing regain reason
}
boolean flag1 = this.isTamed() && this.getAge() == 0 && this.canFallInLove();
if (flag1) {
- this.setInLove(player);
+ this.setInLove(player, item.copy()); // Paper - Fix EntityBreedEvent copying
}
boolean isBaby = this.isBaby();
@@ -451,9 +_,13 @@
}
@Override
- protected void actuallyHurt(ServerLevel level, DamageSource damageSource, float amount) {
+ // CraftBukkit start - void -> boolean
+ public boolean actuallyHurt(ServerLevel level, DamageSource damageSource, float amount, org.bukkit.event.entity.EntityDamageEvent event) {
+ boolean damageResult = super.actuallyHurt(level, damageSource, amount, event);
+ if (!damageResult) return false;
+ // CraftBukkit end
this.standUpInstantly();
- super.actuallyHurt(level, damageSource, amount);
+ return true; // CraftBukkit
}
@Override
@@ -554,7 +_,7 @@
}
public void sitDown() {
- if (!this.isCamelSitting()) {
+ if (!this.isCamelSitting() && new io.papermc.paper.event.entity.EntityToggleSitEvent(this.getBukkitEntity(), true).callEvent()) { // Paper - Add EntityToggleSitEvent
this.makeSound(SoundEvents.CAMEL_SIT);
this.setPose(Pose.SITTING);
this.gameEvent(GameEvent.ENTITY_ACTION);
@@ -563,7 +_,7 @@
}
public void standUp() {
- if (this.isCamelSitting()) {
+ if (this.isCamelSitting() && new io.papermc.paper.event.entity.EntityToggleSitEvent(this.getBukkitEntity(), false).callEvent()) { // Paper - Add EntityToggleSitEvent
this.makeSound(SoundEvents.CAMEL_STAND);
this.setPose(Pose.STANDING);
this.gameEvent(GameEvent.ENTITY_ACTION);
@@ -572,6 +_,7 @@
}
public void standUpInstantly() {
+ if (this.isCamelSitting() && !new io.papermc.paper.event.entity.EntityToggleSitEvent(this.getBukkitEntity(), false).callEvent()) return; // Paper - Add EntityToggleSitEvent
this.setPose(Pose.STANDING);
this.gameEvent(GameEvent.ENTITY_ACTION);
this.resetLastPoseChangeTickToFullStand(this.level().getGameTime());

View File

@@ -0,0 +1,36 @@
--- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java
+++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java
@@ -266,6 +_,13 @@
BlockPos headBlock = this.getHeadBlock();
this.dropFromGiftLootTable(serverLevel, BuiltInLootTables.SNIFFER_DIGGING, (serverLevel1, itemStack) -> {
ItemEntity itemEntity = new ItemEntity(this.level(), headBlock.getX(), headBlock.getY(), headBlock.getZ(), itemStack);
+ // CraftBukkit start - handle EntityDropItemEvent
+ org.bukkit.event.entity.EntityDropItemEvent event = new org.bukkit.event.entity.EntityDropItemEvent(this.getBukkitEntity(), (org.bukkit.entity.Item) itemEntity.getBukkitEntity());
+ org.bukkit.Bukkit.getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return;
+ }
+ // CraftBukkit end
itemEntity.setDefaultPickUpDelay();
serverLevel1.addFreshEntity(itemEntity);
});
@@ -325,12 +_,17 @@
@Override
public void spawnChildFromBreeding(ServerLevel level, Animal mate) {
+ // Paper start - Add EntityFertilizeEggEvent event
+ final io.papermc.paper.event.entity.EntityFertilizeEggEvent result = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityFertilizeEggEvent(this, mate);
+ if (result.isCancelled()) return;
+ // Paper end - Add EntityFertilizeEggEvent event
ItemStack itemStack = new ItemStack(Items.SNIFFER_EGG);
ItemEntity itemEntity = new ItemEntity(level, this.position().x(), this.position().y(), this.position().z(), itemStack);
itemEntity.setDefaultPickUpDelay();
- this.finalizeSpawnChildFromBreeding(level, mate, null);
+ this.finalizeSpawnChildFromBreeding(level, mate, null, result.getExperience()); // Paper - Add EntityFertilizeEggEvent event
+ if (this.spawnAtLocation(level, itemEntity) != null) { // Paper - Call EntityDropItemEvent
this.playSound(SoundEvents.SNIFFER_EGG_PLOP, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 0.5F);
- level.addFreshEntity(itemEntity);
+ } // Paper - Call EntityDropItemEvent
}
@Override