--- a/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
@@ -28,6 +28,7 @@
 import net.minecraft.world.level.gameevent.GameEvent;
 
 public class BeehiveBlockEntity extends BlockEntity {
+
     public static final String TAG_FLOWER_POS = "FlowerPos";
     public static final String MIN_OCCUPATION_TICKS = "MinOccupationTicks";
     public static final String ENTITY_DATA = "EntityData";
@@ -42,6 +43,7 @@
     private final List<BeehiveBlockEntity.BeeData> stored = Lists.newArrayList();
     @Nullable
     public BlockPos savedFlowerPos;
+    public int maxBees = 3; // CraftBukkit - allow setting max amount of bees a hive can hold
 
     public BeehiveBlockEntity(BlockPos pos, BlockState state) {
         super(BlockEntityType.BEEHIVE, pos, state);
@@ -50,7 +52,7 @@
     @Override
     public void setChanged() {
         if (this.isFireNearby()) {
-            this.emptyAllLivingFromHive((Player)null, this.level.getBlockState(this.getBlockPos()), BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY);
+            this.emptyAllLivingFromHive((Player) null, this.level.getBlockState(this.getBlockPos()), BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY);
         }
 
         super.setChanged();
@@ -60,13 +62,19 @@
         if (this.level == null) {
             return false;
         } else {
-            for(BlockPos blockPos : BlockPos.betweenClosed(this.worldPosition.offset(-1, -1, -1), this.worldPosition.offset(1, 1, 1))) {
-                if (this.level.getBlockState(blockPos).getBlock() instanceof FireBlock) {
-                    return true;
+            Iterator iterator = BlockPos.betweenClosed(this.worldPosition.offset(-1, -1, -1), this.worldPosition.offset(1, 1, 1)).iterator();
+
+            BlockPos blockposition;
+
+            do {
+                if (!iterator.hasNext()) {
+                    return false;
                 }
-            }
 
-            return false;
+                blockposition = (BlockPos) iterator.next();
+            } while (!(this.level.getBlockState(blockposition).getBlock() instanceof FireBlock));
+
+            return true;
         }
     }
 
@@ -75,20 +83,26 @@
     }
 
     public boolean isFull() {
-        return this.stored.size() == 3;
+        return this.stored.size() == this.maxBees; // CraftBukkit
     }
 
     public void emptyAllLivingFromHive(@Nullable Player player, BlockState state, BeehiveBlockEntity.BeeReleaseStatus beeState) {
         List<Entity> list = this.releaseAllOccupants(state, beeState);
+
         if (player != null) {
-            for(Entity entity : list) {
+            Iterator iterator = list.iterator();
+
+            while (iterator.hasNext()) {
+                Entity entity = (Entity) iterator.next();
+
                 if (entity instanceof Bee) {
-                    Bee bee = (Bee)entity;
+                    Bee entitybee = (Bee) entity;
+
                     if (player.position().distanceToSqr(entity.position()) <= 16.0D) {
                         if (!this.isSedated()) {
-                            bee.setTarget(player);
+                            entitybee.setTarget(player, org.bukkit.event.entity.EntityTargetEvent.TargetReason.CLOSEST_PLAYER, true); // CraftBukkit
                         } else {
-                            bee.setStayOutOfHiveCountdown(400);
+                            entitybee.setStayOutOfHiveCountdown(400);
                         }
                     }
                 }
@@ -98,9 +112,16 @@
     }
 
     private List<Entity> releaseAllOccupants(BlockState state, BeehiveBlockEntity.BeeReleaseStatus beeState) {
+        // CraftBukkit start - This allows us to bypass the night/rain/emergency check
+        return this.releaseBees(state, beeState, false);
+    }
+
+    public List<Entity> releaseBees(BlockState iblockdata, BeehiveBlockEntity.BeeReleaseStatus tileentitybeehive_releasestatus, boolean force) {
         List<Entity> list = Lists.newArrayList();
-        this.stored.removeIf((bee) -> {
-            return releaseOccupant(this.level, this.worldPosition, state, bee, list, beeState, this.savedFlowerPos);
+
+        this.stored.removeIf((tileentitybeehive_hivebee) -> {
+            return BeehiveBlockEntity.releaseBee(this.level, this.worldPosition, iblockdata, tileentitybeehive_hivebee, list, tileentitybeehive_releasestatus, this.savedFlowerPos, force);
+            // CraftBukkit end
         });
         if (!list.isEmpty()) {
             super.setChanged();
@@ -118,8 +139,13 @@
         return this.stored.size();
     }
 
+    // Paper start - Add EntityBlockStorage clearEntities
+    public void clearBees() {
+        this.stored.clear();
+    }
+    // Paper end
     public static int getHoneyLevel(BlockState state) {
-        return state.getValue(BeehiveBlock.HONEY_LEVEL);
+        return (Integer) state.getValue(BeehiveBlock.HONEY_LEVEL);
     }
 
     @VisibleForDebug
@@ -128,23 +154,38 @@
     }
 
     public void addOccupantWithPresetTicks(Entity entity, boolean hasNectar, int ticksInHive) {
-        if (this.stored.size() < 3) {
+        if (this.stored.size() < this.maxBees) { // CraftBukkit
+            // CraftBukkit start
+            if (this.level != null) {
+                org.bukkit.event.entity.EntityEnterBlockEvent event = new org.bukkit.event.entity.EntityEnterBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.v1_20_R2.block.CraftBlock.at(this.level, this.getBlockPos()));
+                org.bukkit.Bukkit.getPluginManager().callEvent(event);
+                if (event.isCancelled()) {
+                    if (entity instanceof Bee) {
+                        ((Bee) entity).setStayOutOfHiveCountdown(400);
+                    }
+                    return;
+                }
+            }
+            // CraftBukkit end
             entity.stopRiding();
             entity.ejectPassengers();
-            CompoundTag compoundTag = new CompoundTag();
-            entity.save(compoundTag);
-            this.storeBee(compoundTag, ticksInHive, hasNectar);
+            CompoundTag nbttagcompound = new CompoundTag();
+
+            entity.save(nbttagcompound);
+            this.storeBee(nbttagcompound, ticksInHive, hasNectar);
             if (this.level != null) {
                 if (entity instanceof Bee) {
-                    Bee bee = (Bee)entity;
-                    if (bee.hasSavedFlowerPos() && (!this.hasSavedFlowerPos() || this.level.random.nextBoolean())) {
-                        this.savedFlowerPos = bee.getSavedFlowerPos();
+                    Bee entitybee = (Bee) entity;
+
+                    if (entitybee.hasSavedFlowerPos() && (!this.hasSavedFlowerPos() || this.level.random.nextBoolean())) {
+                        this.savedFlowerPos = entitybee.getSavedFlowerPos();
                     }
                 }
 
-                BlockPos blockPos = this.getBlockPos();
-                this.level.playSound((Player)null, (double)blockPos.getX(), (double)blockPos.getY(), (double)blockPos.getZ(), SoundEvents.BEEHIVE_ENTER, SoundSource.BLOCKS, 1.0F, 1.0F);
-                this.level.gameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Context.of(entity, this.getBlockState()));
+                BlockPos blockposition = this.getBlockPos();
+
+                this.level.playSound((Player) null, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), SoundEvents.BEEHIVE_ENTER, SoundSource.BLOCKS, 1.0F, 1.0F);
+                this.level.gameEvent(GameEvent.BLOCK_CHANGE, blockposition, GameEvent.Context.of(entity, this.getBlockState()));
             }
 
             entity.discard();
@@ -157,65 +198,92 @@
     }
 
     private static boolean releaseOccupant(Level world, BlockPos pos, BlockState state, BeehiveBlockEntity.BeeData bee, @Nullable List<Entity> entities, BeehiveBlockEntity.BeeReleaseStatus beeState, @Nullable BlockPos flowerPos) {
-        if ((world.isNight() || world.isRaining()) && beeState != BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY) {
+        // CraftBukkit start - This allows us to bypass the night/rain/emergency check
+        return BeehiveBlockEntity.releaseBee(world, pos, state, bee, entities, beeState, flowerPos, false);
+    }
+
+    private static boolean releaseBee(Level world, BlockPos blockposition, BlockState iblockdata, BeehiveBlockEntity.BeeData tileentitybeehive_hivebee, @Nullable List<Entity> list, BeehiveBlockEntity.BeeReleaseStatus tileentitybeehive_releasestatus, @Nullable BlockPos blockposition1, boolean force) {
+        if (!force && (world.isNight() || world.isRaining()) && tileentitybeehive_releasestatus != BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY) {
+            // CraftBukkit end
             return false;
         } else {
-            CompoundTag compoundTag = bee.entityData.copy();
-            removeIgnoredBeeTags(compoundTag);
-            compoundTag.put("HivePos", NbtUtils.writeBlockPos(pos));
-            compoundTag.putBoolean("NoGravity", true);
-            Direction direction = state.getValue(BeehiveBlock.FACING);
-            BlockPos blockPos = pos.relative(direction);
-            boolean bl = !world.getBlockState(blockPos).getCollisionShape(world, blockPos).isEmpty();
-            if (bl && beeState != BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY) {
+            CompoundTag nbttagcompound = tileentitybeehive_hivebee.entityData.copy();
+
+            BeehiveBlockEntity.removeIgnoredBeeTags(nbttagcompound);
+            nbttagcompound.put("HivePos", NbtUtils.writeBlockPos(blockposition));
+            nbttagcompound.putBoolean("NoGravity", true);
+            Direction enumdirection = (Direction) iblockdata.getValue(BeehiveBlock.FACING);
+            BlockPos blockposition2 = blockposition.relative(enumdirection);
+            boolean flag = !world.getBlockState(blockposition2).getCollisionShape(world, blockposition2).isEmpty();
+
+            if (flag && tileentitybeehive_releasestatus != BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY) {
                 return false;
             } else {
-                Entity entity = EntityType.loadEntityRecursive(compoundTag, world, (entityx) -> {
-                    return entityx;
+                Entity entity = EntityType.loadEntityRecursive(nbttagcompound, world, (entity1) -> {
+                    return entity1;
                 });
+
                 if (entity != null) {
                     if (!entity.getType().is(EntityTypeTags.BEEHIVE_INHABITORS)) {
                         return false;
                     } else {
+                        // CraftBukkit start
                         if (entity instanceof Bee) {
-                            Bee bee2 = (Bee)entity;
-                            if (flowerPos != null && !bee2.hasSavedFlowerPos() && world.random.nextFloat() < 0.9F) {
-                                bee2.setSavedFlowerPos(flowerPos);
+                            float f = entity.getBbWidth();
+                            double d0 = flag ? 0.0D : 0.55D + (double) (f / 2.0F);
+                            double d1 = (double) blockposition.getX() + 0.5D + d0 * (double) enumdirection.getStepX();
+                            double d2 = (double) blockposition.getY() + 0.5D - (double) (entity.getBbHeight() / 2.0F);
+                            double d3 = (double) blockposition.getZ() + 0.5D + d0 * (double) enumdirection.getStepZ();
+
+                            entity.moveTo(d1, d2, d3, entity.getYRot(), entity.getXRot());
+                        }
+                        if (!world.addFreshEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BEEHIVE)) return false; // CraftBukkit - SpawnReason, moved from below
+                        // CraftBukkit end
+                        if (entity instanceof Bee) {
+                            Bee entitybee = (Bee) entity;
+
+                            if (blockposition1 != null && !entitybee.hasSavedFlowerPos() && world.random.nextFloat() < 0.9F) {
+                                entitybee.setSavedFlowerPos(blockposition1);
                             }
 
-                            if (beeState == BeehiveBlockEntity.BeeReleaseStatus.HONEY_DELIVERED) {
-                                bee2.dropOffNectar();
-                                if (state.is(BlockTags.BEEHIVES, (statex) -> {
-                                    return statex.hasProperty(BeehiveBlock.HONEY_LEVEL);
+                            if (tileentitybeehive_releasestatus == BeehiveBlockEntity.BeeReleaseStatus.HONEY_DELIVERED) {
+                                entitybee.dropOffNectar();
+                                if (iblockdata.is(BlockTags.BEEHIVES, (blockbase_blockdata) -> {
+                                    return blockbase_blockdata.hasProperty(BeehiveBlock.HONEY_LEVEL);
                                 })) {
-                                    int i = getHoneyLevel(state);
+                                    int i = BeehiveBlockEntity.getHoneyLevel(iblockdata);
+
                                     if (i < 5) {
                                         int j = world.random.nextInt(100) == 0 ? 2 : 1;
+
                                         if (i + j > 5) {
                                             --j;
                                         }
 
-                                        world.setBlockAndUpdate(pos, state.setValue(BeehiveBlock.HONEY_LEVEL, Integer.valueOf(i + j)));
+                                        world.setBlockAndUpdate(blockposition, (BlockState) iblockdata.setValue(BeehiveBlock.HONEY_LEVEL, i + j));
                                     }
                                 }
                             }
 
-                            setBeeReleaseData(bee.ticksInHive, bee2);
-                            if (entities != null) {
-                                entities.add(bee2);
+                            BeehiveBlockEntity.setBeeReleaseData(tileentitybeehive_hivebee.ticksInHive, entitybee);
+                            if (list != null) {
+                                list.add(entitybee);
                             }
 
+                            /* // CraftBukkit start
                             float f = entity.getBbWidth();
-                            double d = bl ? 0.0D : 0.55D + (double)(f / 2.0F);
-                            double e = (double)pos.getX() + 0.5D + d * (double)direction.getStepX();
-                            double g = (double)pos.getY() + 0.5D - (double)(entity.getBbHeight() / 2.0F);
-                            double h = (double)pos.getZ() + 0.5D + d * (double)direction.getStepZ();
-                            entity.moveTo(e, g, h, entity.getYRot(), entity.getXRot());
+                            double d0 = flag ? 0.0D : 0.55D + (double) (f / 2.0F);
+                            double d1 = (double) blockposition.getX() + 0.5D + d0 * (double) enumdirection.getStepX();
+                            double d2 = (double) blockposition.getY() + 0.5D - (double) (entity.getBbHeight() / 2.0F);
+                            double d3 = (double) blockposition.getZ() + 0.5D + d0 * (double) enumdirection.getStepZ();
+
+                            entity.moveTo(d1, d2, d3, entity.getYRot(), entity.getXRot());
+                             */ // CraftBukkit end
                         }
 
-                        world.playSound((Player)null, pos, SoundEvents.BEEHIVE_EXIT, SoundSource.BLOCKS, 1.0F, 1.0F);
-                        world.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(entity, world.getBlockState(pos)));
-                        return world.addFreshEntity(entity);
+                        world.playSound((Player) null, blockposition, SoundEvents.BEEHIVE_EXIT, SoundSource.BLOCKS, 1.0F, 1.0F);
+                        world.gameEvent(GameEvent.BLOCK_CHANGE, blockposition, GameEvent.Context.of(entity, world.getBlockState(blockposition)));
+                        return true; // return this.world.addFreshEntity(entity); // CraftBukkit - moved up
                     }
                 } else {
                     return false;
@@ -225,19 +293,26 @@
     }
 
     static void removeIgnoredBeeTags(CompoundTag compound) {
-        for(String string : IGNORED_BEE_TAGS) {
-            compound.remove(string);
+        Iterator iterator = BeehiveBlockEntity.IGNORED_BEE_TAGS.iterator();
+
+        while (iterator.hasNext()) {
+            String s = (String) iterator.next();
+
+            compound.remove(s);
         }
 
     }
 
     private static void setBeeReleaseData(int ticks, Bee bee) {
-        int i = bee.getAge();
-        if (i < 0) {
-            bee.setAge(Math.min(0, i + ticks));
-        } else if (i > 0) {
-            bee.setAge(Math.max(0, i - ticks));
+        if (!bee.ageLocked) { // Paper - respect age lock
+        int j = bee.getAge();
+
+        if (j < 0) {
+            bee.setAge(Math.min(0, j + ticks));
+        } else if (j > 0) {
+            bee.setAge(Math.max(0, j - ticks));
         }
+        } // Paper - respect age lock
 
         bee.setInLoveTime(Math.max(0, bee.getInLoveTime() - ticks));
     }
@@ -247,33 +322,41 @@
     }
 
     private static void tickOccupants(Level world, BlockPos pos, BlockState state, List<BeehiveBlockEntity.BeeData> bees, @Nullable BlockPos flowerPos) {
-        boolean bl = false;
+        boolean flag = false;
 
-        BeehiveBlockEntity.BeeData beeData;
-        for(Iterator<BeehiveBlockEntity.BeeData> iterator = bees.iterator(); iterator.hasNext(); ++beeData.ticksInHive) {
-            beeData = iterator.next();
-            if (beeData.ticksInHive > beeData.minOccupationTicks) {
-                BeehiveBlockEntity.BeeReleaseStatus beeReleaseStatus = beeData.entityData.getBoolean("HasNectar") ? BeehiveBlockEntity.BeeReleaseStatus.HONEY_DELIVERED : BeehiveBlockEntity.BeeReleaseStatus.BEE_RELEASED;
-                if (releaseOccupant(world, pos, state, beeData, (List<Entity>)null, beeReleaseStatus, flowerPos)) {
-                    bl = true;
+        BeehiveBlockEntity.BeeData tileentitybeehive_hivebee;
+
+        for (Iterator iterator = bees.iterator(); iterator.hasNext(); ++tileentitybeehive_hivebee.ticksInHive) {
+            tileentitybeehive_hivebee = (BeehiveBlockEntity.BeeData) iterator.next();
+            if (tileentitybeehive_hivebee.exitTickCounter > tileentitybeehive_hivebee.minOccupationTicks) { // Paper - use exitTickCounter
+                BeehiveBlockEntity.BeeReleaseStatus tileentitybeehive_releasestatus = tileentitybeehive_hivebee.entityData.getBoolean("HasNectar") ? BeehiveBlockEntity.BeeReleaseStatus.HONEY_DELIVERED : BeehiveBlockEntity.BeeReleaseStatus.BEE_RELEASED;
+
+                if (BeehiveBlockEntity.releaseOccupant(world, pos, state, tileentitybeehive_hivebee, (List) null, tileentitybeehive_releasestatus, flowerPos)) {
+                    flag = true;
                     iterator.remove();
+                    // CraftBukkit start
+                } else {
+                    tileentitybeehive_hivebee.exitTickCounter = tileentitybeehive_hivebee.minOccupationTicks / 2; // Not strictly Vanilla behaviour in cases where bees cannot spawn but still reasonable // Paper - use exitTickCounter to keep actual bee life
+                    // CraftBukkit end
                 }
             }
+            tileentitybeehive_hivebee.exitTickCounter++; // Paper
         }
 
-        if (bl) {
+        if (flag) {
             setChanged(world, pos, state);
         }
 
     }
 
     public static void serverTick(Level world, BlockPos pos, BlockState state, BeehiveBlockEntity blockEntity) {
-        tickOccupants(world, pos, state, blockEntity.stored, blockEntity.savedFlowerPos);
+        BeehiveBlockEntity.tickOccupants(world, pos, state, blockEntity.stored, blockEntity.savedFlowerPos);
         if (!blockEntity.stored.isEmpty() && world.getRandom().nextDouble() < 0.005D) {
-            double d = (double)pos.getX() + 0.5D;
-            double e = (double)pos.getY();
-            double f = (double)pos.getZ() + 0.5D;
-            world.playSound((Player)null, d, e, f, SoundEvents.BEEHIVE_WORK, SoundSource.BLOCKS, 1.0F, 1.0F);
+            double d0 = (double) pos.getX() + 0.5D;
+            double d1 = (double) pos.getY();
+            double d2 = (double) pos.getZ() + 0.5D;
+
+            world.playSound((Player) null, d0, d1, d2, SoundEvents.BEEHIVE_WORK, SoundSource.BLOCKS, 1.0F, 1.0F);
         }
 
         DebugPackets.sendHiveInfo(world, pos, state, blockEntity);
@@ -283,12 +366,13 @@
     public void load(CompoundTag nbt) {
         super.load(nbt);
         this.stored.clear();
-        ListTag listTag = nbt.getList("Bees", 10);
+        ListTag nbttaglist = nbt.getList("Bees", 10);
 
-        for(int i = 0; i < listTag.size(); ++i) {
-            CompoundTag compoundTag = listTag.getCompound(i);
-            BeehiveBlockEntity.BeeData beeData = new BeehiveBlockEntity.BeeData(compoundTag.getCompound("EntityData"), compoundTag.getInt("TicksInHive"), compoundTag.getInt("MinOccupationTicks"));
-            this.stored.add(beeData);
+        for (int i = 0; i < nbttaglist.size(); ++i) {
+            CompoundTag nbttagcompound1 = nbttaglist.getCompound(i);
+            BeehiveBlockEntity.BeeData tileentitybeehive_hivebee = new BeehiveBlockEntity.BeeData(nbttagcompound1.getCompound("EntityData"), nbttagcompound1.getInt("TicksInHive"), nbttagcompound1.getInt("MinOccupationTicks"));
+
+            this.stored.add(tileentitybeehive_hivebee);
         }
 
         this.savedFlowerPos = null;
@@ -296,6 +380,11 @@
             this.savedFlowerPos = NbtUtils.readBlockPos(nbt.getCompound("FlowerPos"));
         }
 
+        // CraftBukkit start
+        if (nbt.contains("Bukkit.MaxEntities")) {
+            this.maxBees = nbt.getInt("Bukkit.MaxEntities");
+        }
+        // CraftBukkit end
     }
 
     @Override
@@ -305,41 +394,50 @@
         if (this.hasSavedFlowerPos()) {
             nbt.put("FlowerPos", NbtUtils.writeBlockPos(this.savedFlowerPos));
         }
+        nbt.putInt("Bukkit.MaxEntities", this.maxBees); // CraftBukkit
 
     }
 
     public ListTag writeBees() {
-        ListTag listTag = new ListTag();
+        ListTag nbttaglist = new ListTag();
+        Iterator iterator = this.stored.iterator();
 
-        for(BeehiveBlockEntity.BeeData beeData : this.stored) {
-            CompoundTag compoundTag = beeData.entityData.copy();
-            compoundTag.remove("UUID");
-            CompoundTag compoundTag2 = new CompoundTag();
-            compoundTag2.put("EntityData", compoundTag);
-            compoundTag2.putInt("TicksInHive", beeData.ticksInHive);
-            compoundTag2.putInt("MinOccupationTicks", beeData.minOccupationTicks);
-            listTag.add(compoundTag2);
+        while (iterator.hasNext()) {
+            BeehiveBlockEntity.BeeData tileentitybeehive_hivebee = (BeehiveBlockEntity.BeeData) iterator.next();
+            CompoundTag nbttagcompound = tileentitybeehive_hivebee.entityData.copy();
+
+            nbttagcompound.remove("UUID");
+            CompoundTag nbttagcompound1 = new CompoundTag();
+
+            nbttagcompound1.put("EntityData", nbttagcompound);
+            nbttagcompound1.putInt("TicksInHive", tileentitybeehive_hivebee.ticksInHive);
+            nbttagcompound1.putInt("MinOccupationTicks", tileentitybeehive_hivebee.minOccupationTicks);
+            nbttaglist.add(nbttagcompound1);
         }
 
-        return listTag;
+        return nbttaglist;
     }
 
-    static class BeeData {
+    public static enum BeeReleaseStatus {
+
+        HONEY_DELIVERED, BEE_RELEASED, EMERGENCY;
+
+        private BeeReleaseStatus() {}
+    }
+
+    private static class BeeData {
+
         final CompoundTag entityData;
         int ticksInHive;
+        int exitTickCounter; // Paper - separate counter for checking if bee should exit to reduce exit attempts
         final int minOccupationTicks;
 
         BeeData(CompoundTag entityData, int ticksInHive, int minOccupationTicks) {
             BeehiveBlockEntity.removeIgnoredBeeTags(entityData);
             this.entityData = entityData;
             this.ticksInHive = ticksInHive;
+            this.exitTickCounter = ticksInHive; // Paper
             this.minOccupationTicks = minOccupationTicks;
         }
     }
-
-    public static enum BeeReleaseStatus {
-        HONEY_DELIVERED,
-        BEE_RELEASED,
-        EMERGENCY;
-    }
 }
