Search in sources :

Example 6 with BeeEntity

use of net.minecraft.entity.passive.BeeEntity in project minecolonies by ldtteam.

the class EntityAIWorkBeekeeper method decideWhatToDo.

/**
 * Decides what job the beekeeper should switch to, breeding or harvesting.
 *
 * @return The next {@link IAIState} the beekeeper should switch to, after executing this method.
 */
private IAIState decideWhatToDo() {
    setDelay(DECIDING_DELAY + (99 / getSecondarySkillLevel() - 1));
    final Set<BlockPos> hives = getOwnBuilding().getHives();
    if (hives.isEmpty()) {
        worker.getCitizenData().triggerInteraction(new StandardInteraction(new TranslationTextComponent(NO_HIVES), ChatPriority.BLOCKING));
        setDelay(NO_HIVES_DELAY);
        return DECIDE;
    }
    ItemListModule flowersModule = getOwnBuilding().getModuleMatching(ItemListModule.class, m -> m.getId().equals(BUILDING_FLOWER_LIST));
    if (flowersModule.getList().isEmpty()) {
        worker.getCitizenData().triggerInteraction(new StandardInteraction(new TranslationTextComponent(COM_MINECOLONIES_COREMOD_BEEKEEPER_NOFLOWERS), ChatPriority.BLOCKING));
        setDelay(NO_FLOWERS_DELAY);
        return DECIDE;
    }
    for (BlockPos pos : hives) {
        if (!(world.getBlockState(pos).getBlock() instanceof BeehiveBlock)) {
            getOwnBuilding().removeHive(pos);
        }
    }
    final Optional<BlockPos> hive = getOwnBuilding().getHives().stream().filter(pos -> BeehiveTileEntity.getHoneyLevel(world.getBlockState(pos)) >= 5).findFirst();
    if (hive.isPresent()) {
        return BEEKEEPER_HARVEST;
    }
    final List<BeeEntity> bees = new ArrayList<>(searchForAnimals(world, getOwnBuilding()));
    final JobBeekeeper job = worker.getCitizenJobHandler().getColonyJob(JobBeekeeper.class);
    if (bees.isEmpty()) {
        if (getBeesInHives() <= 0) {
            job.tickNoBees();
            if (job.checkForBeeInteraction()) {
                worker.getCitizenData().triggerInteraction(new StandardInteraction(new TranslationTextComponent(NO_BEES), ChatPriority.BLOCKING));
            }
        } else {
            job.resetCounter();
        }
        setDelay(NO_ANIMALS_DELAY);
        return DECIDE;
    } else {
        job.resetCounter();
    }
    worker.getCitizenStatusHandler().setLatestStatus(new TranslationTextComponent(TranslationConstants.COM_MINECOLONIES_COREMOD_STATUS_DECIDING));
    final int breedableAnimals = (int) bees.stream().filter(animal -> animal.getAge() == 0).count();
    final boolean hasBreedingItem = InventoryUtils.hasItemInItemHandler(worker.getInventoryCitizen(), (stack) -> flowersModule.isItemInList(new ItemStorage(stack)));
    if (getOwnBuilding().getSetting(BuildingBeekeeper.BREEDING).getValue() && !hasMaxAnimals(bees) && breedableAnimals >= NUM_OF_ANIMALS_TO_BREED && hasBreedingItem) {
        return HERDER_BREED;
    }
    return START_WORKING;
}
Also used : ItemListModule(com.minecolonies.coremod.colony.buildings.modules.ItemListModule) BeeEntity(net.minecraft.entity.passive.BeeEntity) BeehiveBlock(net.minecraft.block.BeehiveBlock) java.util(java.util) StackList(com.minecolonies.api.colony.requestsystem.requestable.StackList) ItemStackUtils(com.minecolonies.api.util.ItemStackUtils) Item(net.minecraft.item.Item) BuildingBeekeeper(com.minecolonies.coremod.colony.buildings.workerbuildings.BuildingBeekeeper) AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) Compatibility(com.minecolonies.api.compatibility.Compatibility) BUILDING_FLOWER_LIST(com.minecolonies.api.util.constant.BuildingConstants.BUILDING_FLOWER_LIST) TypeToken(com.google.common.reflect.TypeToken) TranslationTextComponent(net.minecraft.util.text.TranslationTextComponent) ItemStack(net.minecraft.item.ItemStack) IAIState(com.minecolonies.api.entity.ai.statemachine.states.IAIState) BlockTags(net.minecraft.tags.BlockTags) BeehiveTileEntity(net.minecraft.tileentity.BeehiveTileEntity) JobBeekeeper(com.minecolonies.coremod.colony.jobs.JobBeekeeper) Hand(net.minecraft.util.Hand) AITarget(com.minecolonies.api.entity.ai.statemachine.AITarget) AnimalEntity(net.minecraft.entity.passive.AnimalEntity) TICKS_SECOND(com.minecolonies.api.util.constant.Constants.TICKS_SECOND) ItemListModule(com.minecolonies.coremod.colony.buildings.modules.ItemListModule) TranslationConstants(com.minecolonies.api.util.constant.TranslationConstants) AbstractEntityAIInteract(com.minecolonies.coremod.entity.ai.basic.AbstractEntityAIInteract) Entity(net.minecraft.entity.Entity) ItemTags(net.minecraft.tags.ItemTags) TOOL_LEVEL_WOOD_OR_GOLD(com.minecolonies.api.util.constant.ToolLevelConstants.TOOL_LEVEL_WOOD_OR_GOLD) World(net.minecraft.world.World) ChatPriority(com.minecolonies.api.colony.interactionhandling.ChatPriority) StandardInteraction(com.minecolonies.coremod.colony.interactionhandling.StandardInteraction) BlockPos(net.minecraft.util.math.BlockPos) Items(net.minecraft.item.Items) AIWorkerState(com.minecolonies.api.entity.ai.statemachine.states.AIWorkerState) Collectors(java.util.stream.Collectors) InventoryUtils(com.minecolonies.api.util.InventoryUtils) ToolType(com.minecolonies.api.util.constant.ToolType) ItemStorage(com.minecolonies.api.crafting.ItemStorage) NotNull(org.jetbrains.annotations.NotNull) BlockStateProperties(net.minecraft.state.properties.BlockStateProperties) StandardInteraction(com.minecolonies.coremod.colony.interactionhandling.StandardInteraction) BeehiveBlock(net.minecraft.block.BeehiveBlock) ItemStorage(com.minecolonies.api.crafting.ItemStorage) JobBeekeeper(com.minecolonies.coremod.colony.jobs.JobBeekeeper) BeeEntity(net.minecraft.entity.passive.BeeEntity) TranslationTextComponent(net.minecraft.util.text.TranslationTextComponent) BlockPos(net.minecraft.util.math.BlockPos)

Example 7 with BeeEntity

use of net.minecraft.entity.passive.BeeEntity in project minecolonies by ldtteam.

the class EntityAIWorkBeekeeper method breedAnimals.

/**
 * Breed some animals together.
 *
 * @return The next {@link IAIState}.
 */
private IAIState breedAnimals() {
    setDelay(BREEDING_DELAY);
    final List<BeeEntity> animals = searchForAnimals(world, getOwnBuilding());
    final AnimalEntity animalOne = animals.stream().filter(animal -> !animal.isBaby()).findAny().orElse(null);
    if (animalOne == null) {
        return DECIDE;
    }
    final AnimalEntity animalTwo = animals.stream().filter(animal -> {
        final float range = animal.distanceTo(animalOne);
        final boolean isAnimalOne = animalOne.equals(animal);
        return animal.getAge() == 0 && range <= DISTANCE_TO_BREED && !isAnimalOne;
    }).findAny().orElse(null);
    if (animalTwo == null) {
        return DECIDE;
    }
    if (!equipBreedItem(Hand.MAIN_HAND)) {
        return START_WORKING;
    }
    worker.getCitizenStatusHandler().setLatestStatus(new TranslationTextComponent(TranslationConstants.COM_MINECOLONIES_COREMOD_STATUS_HERDER_BREEDING));
    breedTwoAnimals(animalOne, animalTwo);
    incrementActionsDoneAndDecSaturation();
    return DECIDE;
}
Also used : BeeEntity(net.minecraft.entity.passive.BeeEntity) AnimalEntity(net.minecraft.entity.passive.AnimalEntity) TranslationTextComponent(net.minecraft.util.text.TranslationTextComponent)

Example 8 with BeeEntity

use of net.minecraft.entity.passive.BeeEntity in project friends-and-foes by Faboslav.

the class BeeEntityMixin method addPollinateMoobloomGoal.

@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/ai/goal/GoalSelector;add(ILnet/minecraft/entity/ai/goal/Goal;)V", ordinal = 4, shift = At.Shift.AFTER), method = "initGoals")
private void addPollinateMoobloomGoal(CallbackInfo ci) {
    this.pollinateMoobloomGoal = new BeePollinateMoobloomGoal((BeeEntity) (Object) this, (BeeEntityAccessor) this);
    this.goalSelector.add(3, this.pollinateMoobloomGoal);
}
Also used : BeeEntity(net.minecraft.entity.passive.BeeEntity) BeePollinateMoobloomGoal(com.faboslav.friendsandfoes.entity.passive.ai.goal.BeePollinateMoobloomGoal) Inject(org.spongepowered.asm.mixin.injection.Inject)

Example 9 with BeeEntity

use of net.minecraft.entity.passive.BeeEntity in project minecolonies by Minecolonies.

the class EntityAIWorkBeekeeper method breedAnimals.

/**
 * Breed some animals together.
 *
 * @return The next {@link IAIState}.
 */
private IAIState breedAnimals() {
    setDelay(BREEDING_DELAY);
    final List<BeeEntity> animals = searchForAnimals(world, getOwnBuilding());
    final AnimalEntity animalOne = animals.stream().filter(animal -> !animal.isBaby()).findAny().orElse(null);
    if (animalOne == null) {
        return DECIDE;
    }
    final AnimalEntity animalTwo = animals.stream().filter(animal -> {
        final float range = animal.distanceTo(animalOne);
        final boolean isAnimalOne = animalOne.equals(animal);
        return animal.getAge() == 0 && range <= DISTANCE_TO_BREED && !isAnimalOne;
    }).findAny().orElse(null);
    if (animalTwo == null) {
        return DECIDE;
    }
    if (!equipBreedItem(Hand.MAIN_HAND)) {
        return START_WORKING;
    }
    worker.getCitizenStatusHandler().setLatestStatus(new TranslationTextComponent(TranslationConstants.COM_MINECOLONIES_COREMOD_STATUS_HERDER_BREEDING));
    breedTwoAnimals(animalOne, animalTwo);
    incrementActionsDoneAndDecSaturation();
    return DECIDE;
}
Also used : BeeEntity(net.minecraft.entity.passive.BeeEntity) AnimalEntity(net.minecraft.entity.passive.AnimalEntity) TranslationTextComponent(net.minecraft.util.text.TranslationTextComponent)

Example 10 with BeeEntity

use of net.minecraft.entity.passive.BeeEntity in project minecolonies by Minecolonies.

the class EntityAIWorkBeekeeper method harvestHoney.

/**
 * Harvest honey/honeycomb from full beehives.
 *
 * @return The next {@link IAIState}.
 */
private IAIState harvestHoney() {
    worker.getCitizenStatusHandler().setLatestStatus(new TranslationTextComponent(COM_MINECOLONIES_COREMOD_STATUS_BEEKEEPER_HARVESTING));
    final List<BlockPos> hives = getOwnBuilding().getHives().stream().filter(pos -> BeehiveTileEntity.getHoneyLevel(world.getBlockState(pos)) >= 5).collect(Collectors.toList());
    if (hives.isEmpty()) {
        return DECIDE;
    }
    if (getOwnBuilding().getHarvestTypes().equals(BuildingBeekeeper.HONEYCOMB) || (getOwnBuilding().getHarvestTypes().equals(BuildingBeekeeper.BOTH) && lastHarvestedBottle)) {
        if (!equipTool(Hand.MAIN_HAND, ToolType.SHEARS)) {
            return PREPARING;
        }
    } else {
        if (!equipItem(Hand.MAIN_HAND, new ItemStack(Items.GLASS_BOTTLE))) {
            return PREPARING;
        }
    }
    final BlockPos hive = hives.get(0);
    if (!world.getBlockState(hive).is(BlockTags.BEEHIVES)) {
        getOwnBuilding().removeHive(hive);
        return PREPARING;
    }
    if (walkToBlock(hive)) {
        return getState();
    }
    worker.swing(Hand.MAIN_HAND);
    final ItemStack itemStack = worker.getMainHandItem();
    if (!getOwnBuilding().getHarvestTypes().equals(BuildingBeekeeper.HONEY) && ItemStackUtils.isTool(itemStack, ToolType.SHEARS)) {
        worker.getCitizenItemHandler().damageItemInHand(Hand.MAIN_HAND, 1);
        for (ItemStack stackItem : Compatibility.getCombsFromHive(hive, world, getHoneycombsPerHarvest())) {
            InventoryUtils.transferItemStackIntoNextBestSlotInItemHandler(stackItem, worker.getItemHandlerCitizen());
        }
        world.setBlockAndUpdate(hive, world.getBlockState(hive).setValue(BlockStateProperties.LEVEL_HONEY, 0));
        worker.getCitizenExperienceHandler().addExperience(EXP_PER_HARVEST);
        lastHarvestedBottle = false;
    } else if (!getOwnBuilding().getHarvestTypes().equals(BuildingBeekeeper.HONEYCOMB) && itemStack.getItem() == Items.GLASS_BOTTLE) {
        int i;
        for (i = 0; i < getHoneyBottlesPerHarvest() && !itemStack.isEmpty(); i++) {
            itemStack.shrink(1);
        }
        InventoryUtils.transferItemStackIntoNextBestSlotInItemHandler(new ItemStack(Items.HONEY_BOTTLE, i), worker.getItemHandlerCitizen());
        world.setBlockAndUpdate(hive, world.getBlockState(hive).setValue(BlockStateProperties.LEVEL_HONEY, 0));
        worker.getCitizenExperienceHandler().addExperience(EXP_PER_HARVEST);
        lastHarvestedBottle = true;
    }
    final int dex = getPrimarySkillLevel();
    if ((50 - (dex / 99. * 50.)) / 100 > worker.getRandom().nextDouble()) {
        final List<Entity> bees = ((BeehiveTileEntity) world.getBlockEntity(hive)).releaseAllOccupants(world.getBlockState(hive), BeehiveTileEntity.State.EMERGENCY);
        bees.stream().filter(entity -> entity instanceof BeeEntity).map(entity -> (BeeEntity) entity).filter(bee -> worker.position().distanceToSqr(bee.position()) <= 16.0D).forEach(bee -> {
            bee.setRemainingPersistentAngerTime(400 + worker.getRandom().nextInt(400));
            bee.setLastHurtByMob(worker);
        });
    }
    incrementActionsDoneAndDecSaturation();
    return START_WORKING;
}
Also used : BeeEntity(net.minecraft.entity.passive.BeeEntity) BeehiveBlock(net.minecraft.block.BeehiveBlock) java.util(java.util) StackList(com.minecolonies.api.colony.requestsystem.requestable.StackList) ItemStackUtils(com.minecolonies.api.util.ItemStackUtils) Item(net.minecraft.item.Item) BuildingBeekeeper(com.minecolonies.coremod.colony.buildings.workerbuildings.BuildingBeekeeper) AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) Compatibility(com.minecolonies.api.compatibility.Compatibility) BUILDING_FLOWER_LIST(com.minecolonies.api.util.constant.BuildingConstants.BUILDING_FLOWER_LIST) TypeToken(com.google.common.reflect.TypeToken) TranslationTextComponent(net.minecraft.util.text.TranslationTextComponent) ItemStack(net.minecraft.item.ItemStack) IAIState(com.minecolonies.api.entity.ai.statemachine.states.IAIState) BlockTags(net.minecraft.tags.BlockTags) BeehiveTileEntity(net.minecraft.tileentity.BeehiveTileEntity) JobBeekeeper(com.minecolonies.coremod.colony.jobs.JobBeekeeper) Hand(net.minecraft.util.Hand) AITarget(com.minecolonies.api.entity.ai.statemachine.AITarget) AnimalEntity(net.minecraft.entity.passive.AnimalEntity) TICKS_SECOND(com.minecolonies.api.util.constant.Constants.TICKS_SECOND) ItemListModule(com.minecolonies.coremod.colony.buildings.modules.ItemListModule) TranslationConstants(com.minecolonies.api.util.constant.TranslationConstants) AbstractEntityAIInteract(com.minecolonies.coremod.entity.ai.basic.AbstractEntityAIInteract) Entity(net.minecraft.entity.Entity) ItemTags(net.minecraft.tags.ItemTags) TOOL_LEVEL_WOOD_OR_GOLD(com.minecolonies.api.util.constant.ToolLevelConstants.TOOL_LEVEL_WOOD_OR_GOLD) World(net.minecraft.world.World) ChatPriority(com.minecolonies.api.colony.interactionhandling.ChatPriority) StandardInteraction(com.minecolonies.coremod.colony.interactionhandling.StandardInteraction) BlockPos(net.minecraft.util.math.BlockPos) Items(net.minecraft.item.Items) AIWorkerState(com.minecolonies.api.entity.ai.statemachine.states.AIWorkerState) Collectors(java.util.stream.Collectors) InventoryUtils(com.minecolonies.api.util.InventoryUtils) ToolType(com.minecolonies.api.util.constant.ToolType) ItemStorage(com.minecolonies.api.crafting.ItemStorage) NotNull(org.jetbrains.annotations.NotNull) BlockStateProperties(net.minecraft.state.properties.BlockStateProperties) BeeEntity(net.minecraft.entity.passive.BeeEntity) BeehiveTileEntity(net.minecraft.tileentity.BeehiveTileEntity) AnimalEntity(net.minecraft.entity.passive.AnimalEntity) Entity(net.minecraft.entity.Entity) BeeEntity(net.minecraft.entity.passive.BeeEntity) TranslationTextComponent(net.minecraft.util.text.TranslationTextComponent) BlockPos(net.minecraft.util.math.BlockPos) ItemStack(net.minecraft.item.ItemStack) BeehiveTileEntity(net.minecraft.tileentity.BeehiveTileEntity)

Aggregations

BeeEntity (net.minecraft.entity.passive.BeeEntity)12 AnimalEntity (net.minecraft.entity.passive.AnimalEntity)6 TranslationTextComponent (net.minecraft.util.text.TranslationTextComponent)6 ItemStack (net.minecraft.item.ItemStack)5 TypeToken (com.google.common.reflect.TypeToken)4 ChatPriority (com.minecolonies.api.colony.interactionhandling.ChatPriority)4 StackList (com.minecolonies.api.colony.requestsystem.requestable.StackList)4 Compatibility (com.minecolonies.api.compatibility.Compatibility)4 ItemStorage (com.minecolonies.api.crafting.ItemStorage)4 AITarget (com.minecolonies.api.entity.ai.statemachine.AITarget)4 AIWorkerState (com.minecolonies.api.entity.ai.statemachine.states.AIWorkerState)4 IAIState (com.minecolonies.api.entity.ai.statemachine.states.IAIState)4 InventoryUtils (com.minecolonies.api.util.InventoryUtils)4 ItemStackUtils (com.minecolonies.api.util.ItemStackUtils)4 BUILDING_FLOWER_LIST (com.minecolonies.api.util.constant.BuildingConstants.BUILDING_FLOWER_LIST)4 TICKS_SECOND (com.minecolonies.api.util.constant.Constants.TICKS_SECOND)4 TOOL_LEVEL_WOOD_OR_GOLD (com.minecolonies.api.util.constant.ToolLevelConstants.TOOL_LEVEL_WOOD_OR_GOLD)4 ToolType (com.minecolonies.api.util.constant.ToolType)4 TranslationConstants (com.minecolonies.api.util.constant.TranslationConstants)4 ItemListModule (com.minecolonies.coremod.colony.buildings.modules.ItemListModule)4