--- a/net/minecraft/server/TileEntityBeehive.java +++ b/net/minecraft/server/TileEntityBeehive.java @@ -108,6 +108,18 @@ public void a(Entity entity, boolean flag, int i) { if (this.bees.size() < 3) { + // CraftBukkit start + if (this.world != null) { + org.bukkit.event.entity.EntityEnterBlockEvent event = new org.bukkit.event.entity.EntityEnterBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, getPosition())); + org.bukkit.Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + if (entity instanceof EntityBee) { + ((EntityBee) entity).setCannotEnterHiveTicks(400); + } + return; + } + } + // CraftBukkit end entity.stopRiding(); entity.ejectPassengers(); NBTTagCompound nbttagcompound = new NBTTagCompound(); @@ -163,6 +175,7 @@ if (!entity.getEntityType().a(TagsEntity.BEEHIVE_INHABITORS)) { return false; } else { + if (!this.world.addEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BEEHIVE)) return false; // CraftBukkit - SpawnReason, moved from below if (entity instanceof EntityBee) { EntityBee entitybee = (EntityBee) entity; @@ -196,7 +209,7 @@ BlockPosition blockposition2 = this.getPosition(); this.world.playSound((EntityHuman) null, (double) blockposition2.getX(), (double) blockposition2.getY(), (double) blockposition2.getZ(), SoundEffects.BLOCK_BEEHIVE_EXIT, SoundCategory.BLOCKS, 1.0F, 1.0F); - return this.world.addEntity(entity); + return true; // return this.world.addEntity(entity); // CraftBukkit - moved up } } else { return false; @@ -223,6 +236,11 @@ if (this.a(iblockdata, nbttagcompound, (List) null, tileentitybeehive_releasestatus)) { iterator.remove(); } + // CraftBukkit start + else { + tileentitybeehive_hivebee.ticksInHive = tileentitybeehive_hivebee.minOccupationTicks / 2; // Not strictly Vanilla behaviour in cases where bees cannot spawn but still reasonable + } + // CraftBukkit end } else { tileentitybeehive_hivebee.ticksInHive++; }