All Implemented Interfaces:
IBuildingExtensionModule, IPlantationModule
Direct Known Subclasses:
BambooPlantModule, CactusPlantModule, KelpPlantModule, SugarCanePlantModule, TwistingVinesPlantModule

public abstract class UpwardsGrowingPlantModule extends AbstractPlantationModule
Plantation module for plants that grow vertically upwards, similar to sugar cane.
Requirements:
  1. Grow vertically upwards without any outcroppings.
  2. Grow uninterrupted (no gaps in between the plant).
  3. Must break all blocks above when a lower block is destroyed.
  • Field Details

    • DEFAULT_MINIMUM_PLANT_LENGTH

      protected static final int DEFAULT_MINIMUM_PLANT_LENGTH
      The default minimum plant length.
      See Also:
  • Constructor Details

    • UpwardsGrowingPlantModule

      protected UpwardsGrowingPlantModule(IBuildingExtension field, String fieldTag, String workTag, net.minecraft.world.item.Item item)
      Default constructor.
      Parameters:
      field - the field instance this module is working on.
      fieldTag - the tag of the field anchor block.
      workTag - the tag of the working positions.
      item - the item which is harvested.
  • Method Details

    • decideFieldWork

      public IPlantationModule.PlantationModuleResult.Builder decideFieldWork(net.minecraft.world.level.Level world, @NotNull @NotNull net.minecraft.core.BlockPos workingPosition)
      Description copied from interface: IPlantationModule
      Core function for the planter module, is responsible for telling the AI what to do on the specific field.
      Parameters:
      world - the world reference that can be used for block state lookups.
      workingPosition - the position that has been chosen for work.
      Returns:
      a basic enum state telling the planter AI what the AI should be doing next.
    • isValidPlantingBlock

      protected boolean isValidPlantingBlock(net.minecraft.world.level.block.state.BlockState blockState)
      Check if the block is a correct block for planting. Defaults to being any air block.
      Parameters:
      blockState - the block state.
      Returns:
      whether the block can be planted.
    • isValidClearingBlock

      protected boolean isValidClearingBlock(net.minecraft.world.level.block.state.BlockState blockState)
      Check if the block is a correct block for clearing.
      Parameters:
      blockState - the block state.
      Returns:
      whether the block can be cleared.
    • isValidHarvestBlock

      protected abstract boolean isValidHarvestBlock(net.minecraft.world.level.block.state.BlockState blockState)
      Check if the block is a correct block for harvesting.
      Parameters:
      blockState - the block state.
      Returns:
      whether the block can be harvested.
    • getMinimumPlantLength

      protected int getMinimumPlantLength()
      Get the minimum length this plant should grow to before considered harvestable. Defaults to DEFAULT_MINIMUM_PLANT_LENGTH.
      Returns:
      the minimum plant length
    • getMaximumPlantLength

      @Nullable protected @Nullable Integer getMaximumPlantLength()
      Get the maximum length this plant can grow. Defaults to null.
      Returns:
      the maximum plant length
    • getNextWorkingPosition

      public net.minecraft.core.BlockPos getNextWorkingPosition(net.minecraft.world.level.Level world)
      Description copied from interface: IPlantationModule
      Obtains the next working position for the given field, if any.
      Parameters:
      world - the world reference that can be used for block state lookups.
      Returns:
      the next position to work on, or null.
    • getActionLimit

      public int getActionLimit()
      Description copied from interface: IPlantationModule
      Returns the maximum amount of actions that can be performed on a field, before the planter must forcefully switch to a new field.
      Returns:
      the maximum of actions the planter can perform on the field per cycle.
    • getRequiredItemsForOperation

      public List<net.minecraft.world.item.ItemStack> getRequiredItemsForOperation()
      Description copied from interface: IPlantationModule
      Returns a list of items that are mandatory for this module to function.
      Returns:
      a list of items.
    • getPositionToWalkTo

      public net.minecraft.core.BlockPos getPositionToWalkTo(net.minecraft.world.level.Level world, net.minecraft.core.BlockPos workingPosition)
      Description copied from interface: IPlantationModule
      Determines where the planter should walk to, in order to most effectively work on the given working position. Defaults to the same block.
      Specified by:
      getPositionToWalkTo in interface IPlantationModule
      Overrides:
      getPositionToWalkTo in class AbstractPlantationModule
      Parameters:
      world - the world reference that can be used for block state lookups.
      workingPosition - the original working position.
      Returns:
      the position for the planter to walk to.