--- a/net/minecraft/world/entity/animal/EntityDolphin.java +++ b/net/minecraft/world/entity/animal/EntityDolphin.java @@ -61,8 +61,19 @@ import net.minecraft.world.level.pathfinder.PathMode; import net.minecraft.world.phys.Vec3D; +// CraftBukkit start +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.event.entity.EntityPotionEffectEvent; +// CraftBukkit end + public class EntityDolphin extends EntityWaterAnimal { + // CraftBukkit start - SPIGOT-6907: re-implement LivingEntity#setMaximumAir() + @Override + public int getDefaultMaxAirSupply() { + return TOTAL_AIR_SUPPLY; + } + // CraftBukkit end private static final DataWatcherObject TREASURE_POS = DataWatcher.defineId(EntityDolphin.class, DataWatcherRegistry.BLOCK_POS); private static final DataWatcherObject GOT_FISH = DataWatcher.defineId(EntityDolphin.class, DataWatcherRegistry.BOOLEAN); private static final DataWatcherObject MOISTNESS_LEVEL = DataWatcher.defineId(EntityDolphin.class, DataWatcherRegistry.INT); @@ -190,7 +201,7 @@ @Override public int getMaxAirSupply() { - return 4800; + return maxAirTicks; // CraftBukkit - SPIGOT-6907: re-implement LivingEntity#setMaximumAir() } @Override @@ -231,6 +242,12 @@ ItemStack itemstack = entityitem.getItem(); if (this.canHoldItem(itemstack)) { + // CraftBukkit start - call EntityPickupItemEvent + if (CraftEventFactory.callEntityPickupItemEvent(this, entityitem, 0, false).isCancelled()) { + return; + } + itemstack = entityitem.getItem(); // CraftBukkit- update ItemStack from event + // CraftBukkit start this.onItemPickup(entityitem); this.setItemSlot(EnumItemSlot.MAINHAND, itemstack); this.setGuaranteedDrop(EnumItemSlot.MAINHAND); @@ -389,7 +406,7 @@ @Override public boolean canUse() { - return this.dolphin.gotFish() && this.dolphin.getAirSupply() >= 100; + return this.dolphin.gotFish() && this.dolphin.getAirSupply() >= 100 && this.dolphin.level().getWorld().canGenerateStructures(); // MC-151364, SPIGOT-5494: hangs if generate-structures=false } @Override @@ -489,7 +506,7 @@ @Override public void start() { - this.player.addEffect(new MobEffect(MobEffects.DOLPHINS_GRACE, 100), this.dolphin); + this.player.addEffect(new MobEffect(MobEffects.DOLPHINS_GRACE, 100), this.dolphin, EntityPotionEffectEvent.Cause.DOLPHIN); // CraftBukkit } @Override @@ -508,7 +525,7 @@ } if (this.player.isSwimming() && this.player.level().random.nextInt(6) == 0) { - this.player.addEffect(new MobEffect(MobEffects.DOLPHINS_GRACE, 100), this.dolphin); + this.player.addEffect(new MobEffect(MobEffects.DOLPHINS_GRACE, 100), this.dolphin, EntityPotionEffectEvent.Cause.DOLPHIN); // CraftBukkit } }