net.minecraft.world.entity.animal.allay

This commit is contained in:
Jake Potrebic
2024-12-13 15:55:52 -08:00
parent f0e7d7e5f7
commit f60983ac06
2 changed files with 83 additions and 102 deletions

View File

@@ -0,0 +1,83 @@
--- a/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/net/minecraft/world/entity/animal/allay/Allay.java
@@ -118,6 +_,7 @@
private float dancingAnimationTicks;
private float spinningAnimationTicks;
private float spinningAnimationTicks0;
+ public boolean forceDancing = false; // CraftBukkit
public Allay(EntityType<? extends Allay> entityType, Level level) {
super(entityType, level);
@@ -131,6 +_,12 @@
);
}
+ // CraftBukkit start
+ public void setCanDuplicate(boolean canDuplicate) {
+ this.entityData.set(Allay.DATA_CAN_DUPLICATE, canDuplicate);
+ }
+ // CraftBukkit end
+
@Override
protected Brain.Provider<Allay> brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
@@ -252,7 +_,7 @@
public void aiStep() {
super.aiStep();
if (!this.level().isClientSide && this.isAlive() && this.tickCount % 10 == 0) {
- this.heal(1.0F);
+ this.heal(1.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.REGEN); // CraftBukkit
}
if (this.isDancing() && this.shouldStopDancing() && this.tickCount % 20 == 0) {
@@ -320,7 +_,12 @@
ItemStack itemInHand = player.getItemInHand(hand);
ItemStack itemInHand1 = this.getItemInHand(InteractionHand.MAIN_HAND);
if (this.isDancing() && itemInHand.is(ItemTags.DUPLICATES_ALLAYS) && this.canDuplicate()) {
- this.duplicateAllay();
+ // CraftBukkit start - handle cancel duplication
+ Allay allay = this.duplicateAllay();
+ if (allay == null) {
+ return InteractionResult.SUCCESS;
+ }
+ // CraftBukkit end
this.level().broadcastEntityEvent(this, (byte)18);
this.level().playSound(player, this, SoundEvents.AMETHYST_BLOCK_CHIME, SoundSource.NEUTRAL, 2.0F, 1.0F);
this.removeInteractionItem(player, itemInHand);
@@ -425,6 +_,7 @@
}
private boolean shouldStopDancing() {
+ if (this.forceDancing) {return false;} // CraftBukkit
return this.jukeboxPos == null
|| !this.jukeboxPos.closerToCenterThan(this.position(), GameEvent.JUKEBOX_PLAY.value().notificationRadius())
|| !this.level().getBlockState(this.jukeboxPos).is(Blocks.JUKEBOX);
@@ -489,7 +_,7 @@
.ifPresent(data -> this.vibrationData = data);
}
- this.duplicationCooldown = tag.getInt("DuplicationCooldown");
+ this.duplicationCooldown = tag.getLong("DuplicationCooldown"); // Paper - Load as long
this.entityData.set(DATA_CAN_DUPLICATE, tag.getBoolean("CanDuplicate"));
}
@@ -508,15 +_,17 @@
}
}
- public void duplicateAllay() {
+ @Nullable public Allay duplicateAllay() { // CraftBukkit - return allay
Allay allay = EntityType.ALLAY.create(this.level(), EntitySpawnReason.BREEDING);
if (allay != null) {
allay.moveTo(this.position());
allay.setPersistenceRequired();
allay.resetDuplicationCooldown();
this.resetDuplicationCooldown();
- this.level().addFreshEntity(allay);
+ this.level().addFreshEntity(allay, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DUPLICATION); // CraftBukkit - reason for duplicated allay
}
+
+ return allay; // CraftBukkit
}
public void resetDuplicationCooldown() {