Plugin Release FarmControl - A farm limiter and governor

Download Link
https://www.spigotmc.org/resources/86923/
Source Code
https://github.com/froobynooby/FarmControl
Documentation
https://github.com/froobynooby/FarmControl/wiki
Minecraft Versions
1.15-1.19
Compatible Java Versions
Java 8 and above
Fp1qdrs.gif
FarmControl allows you to limit and govern certain aspects of mob farms on your server.

Features​

  • Limit the size of mob farms on your server.
  • Reduce unnecessary collisions and movement within mob farms.
  • Disable the awareness or AI of mobs in farms in response to the size of the farm or the server's performance.
  • Highly configurable - allowing you to tailor the plugin to your needs.
  • Low impact - with the brunt of the plugin's processing performed asynchronously.

Configuration​

Two configuration files are available for FarmControl.
YAML:
# Configuration for FarmControl.
# Plugin page: https://www.spigotmc.org/resources/86923/
# GitHub: https://github.com/froobynooby/FarmControl

# Please don't change this!
version: 6

# Every how many ticks should we run the profile check / action cycle?
cycle-period: 600

# How long in ticks should we wait before starting the checking tasks following the plugin's start up?
#  * This is useful when using the 'reactive' mode where it is desirable to ignore the server's performance in the first
#    few minutes following a restart.
start-up-delay: 0

# These settings can be specified per world.
#  * Note: If a world is not specified or if a setting is missing, it will use the settings listed under the default
#    section.
world-settings:
  default:
    # Which profiles (as given in profiles.yml) should we run?
    profiles:
      # These profiles are constantly run.
      proactive:
        - soft-nerf-animal-farms
      #  - trim-animal-farms
      #  - trim-sparse-animal-farms

      # These profiles only run when the server is performing poorly and are progressively undone as performance
      # improves (as defined under the reactive-mode-settings).
      #  * Note: It is generally preferable to ensure your server's performance doesn't degrade in the first place,
      #    rather than try to mitigate it. That said, there are some reasonable use cases for this mode, such as
      #    allowing your players to keep larger farms at the cost of nerfing them when performance begins to degrade.
      reactive:
      #  - hard-nerf-animal-farms
      #  - freeze-animal-farms

    # These settings concern the reactive mode for triggering profile check / action cycles.
    reactive-mode-settings:
      # Above what MSPT should the reactive mode be triggered?
      trigger-mspt-threshold: 45.0

      # Below what MSPT should the reactive mode be untriggered, and actions undone?
      untrigger-mspt-threshold: 35.0

      # These settings concern how the plugin should handle undoing actions performed on mobs once the reactive mode has
      # been untriggered.
      untrigger-settings:
        # How many cycles of the reactive mode being untriggered should have to pass before any actions are undone?
        minimum-cycles-before-undo: 10

        # At most how many mobs should have their actions undone per cycle?
        maximum-undos-per-cycle: 40

        # How much should an entity contribute to the maximum-undos-per-cycle limit?
        #  * For example, if maximum-undos-per-cycle was 40 and the entity-undo-weight for villagers was 5, at most 8
        #    villagers could have their actions undone (since 5 * 8 = 40).
        #  * If an entity type is not specified, the value under default will be used.
        entity-undo-weight:
          default: 1
          villager: 5

    # These settings concern when we should exclude a mob from having actions applied to them.
    exclusion-settings:
      # Should we not perform actions on tamed mobs?
      tamed: true

      # Should we not perform actions on named mobs?
      named: true

      # Should we not perform actions on mobs in love-mode (breeding animals)?
      love-mode: true

      # Should we not perform actions on mobs that are leashed?
      leashed: true

      # Should we not perform actions on patrol leaders?
      patrol-leader: false

      # Should we not perform actions on mobs that are younger than this value (in ticks)?
      younger-than: 0

      # Which types of mobs should we not perform actions on?
      type:
      #  - villager

      # For which metadata should we not perform actions on a mob?
      #  * Some plugins will add metadata to mobs that they spawn or use. This setting allows you to exclude those mobs
      #    from having actions performed on them by this plugin.
      metadata:
        - Elitemob # Elite mobs from the plugin EliteMobs.
        - Elitemobs_NPC # NPCs from the plugin EliteMobs.
        - Supermob # Super mobs from the plugin EliteMobs.
        - infernalMetadata # Infernal mobs from the plugin InfernalMobs.
        - NPC # NPCs from the plugin Citizens.
        - shopkeeper # Shopkeepers from the plugin Shopkeepers.

    # These settings concern properties of actions.
    action-settings:
      # These settings concern when an action should be undone, and can be specified per action.
      #  * Note: If an action is not specified, or if an option is blank, the settings listed under default will be
      #    used.
      undo-on:
        default:
          # Should we undo this action when the mob is interacted with?
          interact: false

          # Should we undo this action when the mob is damaged?
          damage: false

          # Should we undo this action when the mob is targeted by another entity (e.g. a zombie targeting a villager)?
          target: false

          # Should we undo this action when the mob is tempted by a player (e.g. a cow tempted a player holding wheat)?
          tempt: false

        remove-ai:
          interact: true

          damage: true

          target: true

        remove-awareness:
          interact: true

          damage: true

          target: true

        disable-collisions:
          tempt: true

# These settings concern how we determine the server's MSPT.
mspt-tracker-settings:
  # Over how many ticks should we collect tick durations for calculating the MSPT?
  #  * Setting this too high will make the MSPT very slow to react to changes.
  #  * Setting this too low will make the MSPT volatile.
  collection-period: 1200
YAML:
# Please visit https://github.com/froobynooby/FarmControl/wiki/Profiles for help with making profiles.

profiles:
  # Remove random movements and disable collisions of mobs in animal farms
  soft-nerf-animal-farms:
    group:
      types:
        - "category:animal"
      count: 15
      distance: 5
    actions:
      - remove-random-movement
      - disable-collisions

  # Remove the awareness of mobs in animal farms
  hard-nerf-animal-farms:
    group:
      types:
        - "category:animal"
      count: 15
      distance: 5
    actions:
      - remove-awareness
      - disable-collisions

  # Remove the AI of mobs in animal farms
  freeze-animal-farms:
    group:
      types:
        - "category:animal"
      count: 15
      distance: 5
    actions:
      - remove-ai
      - disable-collisions

  # No more than 20 animals (all of the same type) within close proximity
  trim-animal-farms:
    group:
      types:
        - "category:animal"
      count: 21
      distance: 5
      pure: true
    actions:
      - kill

  # No more than 50 animals (all of the same type) sparsely placed (within 160 blocks of each other)
  trim-sparse-animal-farms:
    group:
      types:
        - "category:animal"
      count: 51
      distance: 160
      pure: true
    actions:
      - kill

  # No more than 10 villagers per chunk
  trim-villager-chunks:
    group:
      types:
        - "villager"
      count: 11
      distance: same-chunk
    actions:
      - kill

Commands​

/farmcontrol reload - Reload the plugin's configuration.
Permission - farmcontrol.command.reload

/farmcontrol status <world> - Show the status of the given world
Permission - farmcontrol.command.status

/farmcontrol history - Display actions performed by the plugin in the recent past.
Permission - farmcontrol.command.history

/farmcontrol notify - Toggle notifications from the plugin.
Permission - farmcontrol.command.notify
 
Last edited:

ryantheleach

New member
Jan 23, 2022
8
2
3
This seems interesting, but the original post fails to communicate by what mechanism mobs are being limited.

Do they fail to breed, die, or 'mob stack' ?
 

froobynooby

New member
Jan 4, 2022
3
5
3
This seems interesting, but the original post fails to communicate by what mechanism mobs are being limited.

Do they fail to breed, die, or 'mob stack' ?
It's more clear when looking through the profiles.yml config - but the plugin limits farms by removing or killing mobs until the total number of mobs in the farm falls below the set value
 
  • Like
Reactions: ryantheleach