All Mods Resource Packs Data Packs Shaders Modpacks Plugins
SmartBrainLib

SmartBrainLib

by Tslat • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

A brain library for Minecraft, making the brain system easier to use and manage.

What is this?

The brain system in Minecraft is an almost cryptic new entity AI system that Mojang introduced to handle more complex mobs, and allow for more advanced entity handling.

Unfortunately Mojang's implementation is lacking, and overly complex.

Additionally, it's also done in a rather inefficient way, which means that overall the system is not worth using in place of the existing goals system.

This library aims to overhaul the brain system, making it actually usable, and configurable.

Note however, that the existing goal system will still be simpler at face value - the brain system is intended for more complex interactions, but it can also be fun to experiment with.

So what does SmartBrainLib do?

SBL is a multi-facet approach to the brain system, and will continue to expand and improve as I use it.

Here are its main features:

Auto-handles memory types

Don't worry about having to work out which memory modules to register for your entity.

Dynamic sensors

Sensors can now be dynamically configured and handled. This allows for much more advanced and flexible sensors

Advanced behaviours

Utilise built-in, or create new behaviours based on an extensible behaviour class, which builds in callbacks, predication, cooldowns, and more.

Runtime-safe behaviour modification

Add, remove, and modify behaviours dynamically from an existing entity.

Optimisation

SBL replaces almost the entirety of the vanilla brain system's functions, using high-efficiency functions to remove the inefficiencies in as many areas as possible of the brain. Done right, an SBL entity could be even more efficient than one using goals!

Additional sensors, behaviours, and memory types

SBL builds in additional modules for use in any entity, with more to come over time.

Added utility functions

As well as the expected brain functionality, SBL additionally adds additional helpers, such as:

  • Optimised level entity-getter functions
  • Developer-friendly Random library
  • Brain interface utility for adding/removing brain content from non-SBL entities

How do I use it?

The library is documented on its Wiki Page


If you have issues or want to contribute, please jump on the Github Page and make your voice heard

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.1.2
Neoforge
2d ago 1
26.1.2
Forge
2d ago 1
26.1.2
Fabric
2d ago 1
26.2
Neoforge
2d ago 1
26.2
Forge
2d ago 1
26.2
Fabric
2d ago 1
26.3
Neoforge
2d ago 1
26.3
Forge
2d ago 1
26.3
Fabric
2d ago 1
26.3
Forge
2d ago 1
26.2
Neoforge
2d ago 1
26.2
Forge
2d ago 1
26.2
Fabric
2d ago 1
26.3
Fabric
2d ago 1
26.3
Neoforge
2d ago 1
26.2
Neoforge
2d ago 1
26.2
Forge
2d ago 1
26.2
Fabric
2d ago 1
26.1.2
Neoforge
2d ago 1
26.1.2
Forge
2d ago 1
26.1.2
Fabric
2d ago 1
26.1.2
Neoforge
2d ago 1
26.1.2
Forge
2d ago 1
26.1.2
Fabric
2d ago 1
1.21.11
Neoforge
2d ago 1
1.21.11
Fabric
2d ago 1
1.21.10
Forge
2d ago 1
1.21.10
Neoforge
2d ago 1
1.21.10
Fabric
2d ago 1
1.21.10
Forge
2d ago 1
1.21.9
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.9
Fabric
2d ago 1
1.21.9
Neoforge
2d ago 1
1.21.x
Forge
2d ago 1
1.21.x
Neoforge
2d ago 1
1.21.x
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.7
Forge
2d ago 1
1.21.7
Neoforge
2d ago 1
1.21.7
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.6
Forge
2d ago 1
1.21.6
Forge
2d ago 1
1.21.6
Neoforge
2d ago 1
1.21.6
Fabric
2d ago 1
1.21.5
Forge
2d ago 1
1.21.5
Neoforge
2d ago 1
1.21.5
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.4
Forge
2d ago 1
1.21.4
Neoforge
2d ago 1
1.21.4
Fabric
2d ago 1
1.21.4
Forge
2d ago 1
1.21.4
Neoforge
2d ago 1
1.21.4
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.4
Neoforge
2d ago 1
1.21.4
Fabric
2d ago 1
1.21.4
Forge
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.4
Forge
2d ago 1
1.21.4
Neoforge
2d ago 1
1.21.4
Fabric
2d ago 1
1.21.3
Neoforge
2d ago 1
1.21.3
Fabric
2d ago 1
1.21.3
Forge
2d ago 1
1.21.3
Fabric
2d ago 1
1.21.3
Neoforge
2d ago 1
1.21.3
Neoforge
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.21.1
Forge
2d ago 1
1.21.1
Neoforge
2d ago 1
1.21.1
Fabric
2d ago 1
1.20.1
Neoforge
2d ago 1
1.20.1
Fabric
2d ago 1
1.20.1
Forge
2d ago 1
1.20.1
Fabric
2d ago 1
1.21.x
Neoforge
2d ago 1
1.21.x
Fabric
2d ago 1
1.20.1
Forge
2d ago 1
1.21.x
Forge
2d ago 1
1.20.1
Neoforge
2d ago 1
1.20.1
Fabric
2d ago 1
1.20.1
Forge
2d ago 1
1.21
Neoforge
2d ago 1
1.21
Fabric
2d ago 1
1.21
Forge
2d ago 1
1.21
Forge
2d ago 1
1.21
Neoforge
2d ago 1
1.21
Fabric
2d ago 1
1.21
Forge
2d ago 1
1.21
Neoforge
2d ago 1
1.21
Fabric
2d ago 1
1.20.6
Neoforge
2d ago 1
1.20.6
Fabric
2d ago 1
1.20.5
Neoforge
2d ago 1
1.20.5
Fabric
2d ago 1
1.20.4
Neoforge
2d ago 1
1.20.4
Fabric
2d ago 1
1.20.4
Neoforge
2d ago 1
1.20.1
Forge
2d ago 1
1.20.1
Neoforge
2d ago 1
1.20.1
Fabric
2d ago 1
1.20.4
Forge
2d ago 1
1.20.4
Fabric
2d ago 1
1.20.4
Forge
2d ago 1
1.20.1
Forge
2d ago 1
1.20.1
Fabric
2d ago 1
1.20.1
Neoforge
2d ago 1
1.20.4
Neoforge
2d ago 1
1.20.4
Fabric
2d ago 1
1.20.4
Forge
2d ago 1
1.20.x
Neoforge
2d ago 1
1.20.x
Fabric
2d ago 1
1.19.4
Forge
2d ago 1
1.19.4
Fabric
2d ago 1
1.20.2
Fabric
2d ago 1
1.20.1
Forge Neoforge
2d ago 1
1.20.1
Fabric
2d ago 1
1.20.1
Neoforge
2d ago 1
1.20.1
Fabric
2d ago 1
1.20.x
Fabric
2d ago 1
1.20.x
Fabric
2d ago 1
1.20.x
Forge
2d ago 1
1.18.2
Forge
2d ago 1
1.18.2
Fabric
2d ago 1
1.19.4
Forge
2d ago 1
1.19.4
Fabric
2d ago 1
1.19.3
Forge
2d ago 1
1.19.3
Fabric
2d ago 1
1.19.x
Forge
2d ago 1
1.19.x
Fabric
2d ago 1
1.18.2
Forge
2d ago 1
1.19.3
Forge
2d ago 1
1.19.3
Fabric
2d ago 1
1.19.3
Quilt
2d ago 1
1.19.2
Forge
2d ago 1
1.19.2
Fabric
2d ago 1
1.19.2
Quilt
2d ago 1
1.18.2
Forge
2d ago 1
1.18.2
Fabric
2d ago 1
1.18.2
Quilt
2d ago 1
1.18.2
Forge
2d ago 1
1.18.2
Fabric
2d ago 1
1.18.2
Quilt
2d ago 1
1.19.2
Forge
2d ago 1
1.19.2
Fabric
2d ago 1
1.19.2
Quilt
2d ago 1
1.19.3
Forge
2d ago 1
1.19.3
Fabric
2d ago 1
1.19.3
Quilt
2d ago 1
1.19.3
Forge
2d ago 1
1.19.3
Fabric
2d ago 1
1.19.3
Quilt
2d ago 1
1.19.3
Quilt
2d ago 1
1.19.3
Fabric
2d ago 1
1.19.3
Quilt
2d ago 1
1.19.3
Fabric
2d ago 1
1.19.3
Forge
2d ago 1
1.16.5
Forge
2d ago 1
1.19.2
Forge
2d ago 1
[2.0.3] NeoForge 26.1.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] Forge 26.1.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] Fabric 26.1.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] NeoForge 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] Forge 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] Fabric 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] NeoForge 26.3 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] Forge 26.3 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.3] Fabric 26.3 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.3

## Changes
  • Add random sensor offsets to mimic Vanilla handling and add some randomness
  • Fix the javadocs on getTimeUntilMemoryExpires
  • Synchronize COMPUTED_MEMORIES map to prevent cross-thread pollution
  • Fix ExtendedSensors ticking one tick too late
  • Defer custom behaviour handling, and ensure overriding methods properly re-apply their conditions for:
  • ExtendedBehaviour
  • ConditionlessAttack
  • ConditionlessHeldAttack
  • CustomBehaviour
  • CustomDelayedBehaviour
  • CustomHeldBehaviour
  • Fix BrainUtil#setTargetOfEntity improperly comparing previous target
  • Fix EntityRetrievalUtil entity retrieval via radius only searching half the radius
  • Fix activity interruption/removal not checking if behaviours are started before stopping them
  • Pass through packedBrain on creation - although you shouldn't really be relying on it for memories
  • Fix BrainUtil#getAllBehaviours not doing anything
  • Fix the TransformingListView impl not being quite right
  • Fix scheduled activities replacing themselves every tick
  • Expand surface placement logic for EasyRandom
  • Adjust FollowEntity teleporting logic
  • Fixed bad handling of MoveToWalkTarget
  • Fixed hide predicate for EscapeSun being broken
  • Fixed FollowEntity not resetting pathfinder malus properly
  • Fix BreakBlock not continually updating its cached block
  • Expanded the predicate conditions for LookAtTarget
  • Fixed DelayedBehaviour sometimes preventing itself from running
  • Fix StrafeTarget/StayWithinDistanceOfAttackTarget calculating proximity wrong
  • Improve proximity matching for BreedWithPartner
  • Prevent SequentialBehaviour#runningBehaviour from being stopped twice
  • Prevent the default impl of ItemTemptingSensor crashing out if a mob without TEMPT_RANGE uses it
  • Fixed NearbyHostileSensor using the wrong parameters
  • Fixed LeapAtTarget's broken attacking logic
  • Fixed BreezeSpecificSensor not actually using its predicate
  • Fixed PiglinSpecificSensor not filling the NEARBY_ADULT_PIGLINS memory
  • Fixed AxolotlSpecificSensor using the wrong radius
  • Fix ConditionlessAttack doing everything twice
  • Adjust the NearestVisibleEntityFilteredSensor implementations to remove overlap and simplify their usage
  • Remove implicit requirement for AgeableMob on NearbyAdultSensor
[2.0.2] Forge 26.3 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.2

## Changes
  • Update to 26.3
  • Add BrainUtil#computeMemory and BrainUtil#computeMemoryIfPresent
[2.0.2] NeoForge 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.2

## Changes
  • Fixed Fabric not having the logo png
  • Fixed NeoForge dying from the iconFile change
  • Added BrainUtil#computeMemory and BrainUtil#computeMemoryIfPresent
[2.0.2] Forge 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.2

## Changes
  • Fixed Fabric not having the logo png
  • Fixed NeoForge dying from the iconFile change
  • Added BrainUtil#computeMemory and BrainUtil#computeMemoryIfPresent
[2.0.2] Fabric 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.2

## Changes
  • Fixed Fabric not having the logo png
  • Fixed NeoForge dying from the iconFile change
  • Added BrainUtil#computeMemory and BrainUtil#computeMemoryIfPresent
[2.0.2] Fabric 26.3 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.2

## Changes
  • Update to 26.3
  • Add BrainUtil#computeMemory and BrainUtil#computeMemoryIfPresent
[2.0.2] NeoForge 26.3 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.2

## Changes
  • Update to 26.3
  • Add BrainUtil#computeMemory and BrainUtil#computeMemoryIfPresent
[2.0.0] NeoForge 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.0

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Merged SetRandomFlyingTarget and SetRandomHoverTarget into SetRandomFlyTarget
  • Renamed ExtendedBehaviour#doStartCheck to canStart
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added GroupBehaviour#add to allow for manually adding individual behaviours to a GroupBehaviour
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed ExtendedBehaviour#runForBetween to #runFor
  • Renamed ExtendedBehaviour#cooldownForBetween to #cooldownFor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes
  • Added BreezeSpecificSensor
  • Updated ExtendedBehaviour#getMemoryRequirements to use the MemoryCondition interface that Mojang added
  • Renamed SBLShufflingList to WeightedShuffleableList
  • Removed SeekRandomNearbyPosition

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
[2.0.0] Forge 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.0

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Merged SetRandomFlyingTarget and SetRandomHoverTarget into SetRandomFlyTarget
  • Renamed ExtendedBehaviour#doStartCheck to canStart
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added GroupBehaviour#add to allow for manually adding individual behaviours to a GroupBehaviour
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed ExtendedBehaviour#runForBetween to #runFor
  • Renamed ExtendedBehaviour#cooldownForBetween to #cooldownFor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes
  • Added BreezeSpecificSensor
  • Updated ExtendedBehaviour#getMemoryRequirements to use the MemoryCondition interface that Mojang added
  • Renamed SBLShufflingList to WeightedShuffleableList
  • Removed SeekRandomNearbyPosition

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
[2.0.0] Fabric 26.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.0

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Merged SetRandomFlyingTarget and SetRandomHoverTarget into SetRandomFlyTarget
  • Renamed ExtendedBehaviour#doStartCheck to canStart
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added GroupBehaviour#add to allow for manually adding individual behaviours to a GroupBehaviour
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed ExtendedBehaviour#runForBetween to #runFor
  • Renamed ExtendedBehaviour#cooldownForBetween to #cooldownFor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes
  • Added BreezeSpecificSensor
  • Updated ExtendedBehaviour#getMemoryRequirements to use the MemoryCondition interface that Mojang added
  • Renamed SBLShufflingList to WeightedShuffleableList
  • Removed SeekRandomNearbyPosition

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
[2.0.0] NeoForge 26.1.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.0

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Merged SetRandomFlyingTarget and SetRandomHoverTarget into SetRandomFlyTarget
  • Renamed ExtendedBehaviour#doStartCheck to canStart
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added GroupBehaviour#add to allow for manually adding individual behaviours to a GroupBehaviour
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed ExtendedBehaviour#runForBetween to #runFor
  • Renamed ExtendedBehaviour#cooldownForBetween to #cooldownFor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes
  • Added BreezeSpecificSensor
  • Updated ExtendedBehaviour#getMemoryRequirements to use the MemoryCondition interface that Mojang added
  • Renamed SBLShufflingList to WeightedShuffleableList
  • Removed SeekRandomNearbyPosition

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
[2.0.0] Forge 26.1.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.0

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Merged SetRandomFlyingTarget and SetRandomHoverTarget into SetRandomFlyTarget
  • Renamed ExtendedBehaviour#doStartCheck to canStart
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added GroupBehaviour#add to allow for manually adding individual behaviours to a GroupBehaviour
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed ExtendedBehaviour#runForBetween to #runFor
  • Renamed ExtendedBehaviour#cooldownForBetween to #cooldownFor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes
  • Added BreezeSpecificSensor
  • Updated ExtendedBehaviour#getMemoryRequirements to use the MemoryCondition interface that Mojang added
  • Renamed SBLShufflingList to WeightedShuffleableList
  • Removed SeekRandomNearbyPosition

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
[2.0.0] Fabric 26.1.2 by Tslat on Oct 09, 2026
Download
# Changelog
#### Version
2.0.0

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Merged SetRandomFlyingTarget and SetRandomHoverTarget into SetRandomFlyTarget
  • Renamed ExtendedBehaviour#doStartCheck to canStart
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added GroupBehaviour#add to allow for manually adding individual behaviours to a GroupBehaviour
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed ExtendedBehaviour#runForBetween to #runFor
  • Renamed ExtendedBehaviour#cooldownForBetween to #cooldownFor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes
  • Added BreezeSpecificSensor
  • Updated ExtendedBehaviour#getMemoryRequirements to use the MemoryCondition interface that Mojang added
  • Renamed SBLShufflingList to WeightedShuffleableList
  • Removed SeekRandomNearbyPosition

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
# Changelog
#### Version
1.17

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
# Changelog
#### Version
1.17

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
# Changelog
#### Version
1.17

## Changes
### API
  • Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
  • Added SmartBrainBuilder and extracted the various Brain-construction methods to it. SmartBrainOwner extends it by default, but extracting it now means you can have an external class contain your AI implementation if wanted with minimal additional effort
  • Added BehaviourUtil - a helper class for BehaviorControl related methods
  • Added ExtendedBehaviour#tryExpire - a method to allow for graceful expiration of behaviours when switching Activities
  • Added ExtendedSensor#onlyScanIf - an optional condition for sensors to only scan if the condition is met
  • Users no longer need to tick the brain, SBL ticks it automatically for you (unless you override customServerAIStep in your mob)
  • Users no longer need to return a SmartBrainProvider or SmartBrain instance in your entity class. SBL creates it automatically for you
  • Moved over to Jspecify's Nullability annotations per the new industry standard. See [here][https://jspecify.dev] for more information
  • Renamed SBLLoader to SBLPlatform
  • Renamed SBLConstants#LOADER to SBLConstants#PLATFORM
  • Removed EntityRetrievalUtil#streamEntities - Its benefits just weren't worth the confusion it caused
  • Removed EntityRetrievalUtil#findEntities - It only served to offer a 'max' entity short-circuit, which has now been built into the other methods
  • Removed BrainUtil#forEachBehaviour
  • Changed GroupBehaviour#getBehaviours from an Iterator to an Iterable
  • Added BrainBehaviourPredicate#isChildOfBehaviour helper method
  • Renamed the net.tslat.smartbrainlib.object package to net.tslat.smartbrainlib.library.object
  • Moved BrainBehaviourConsumer, BrainBehaviourPredicate, ToFloatBiFunction, and TriPredicate to net.tslat.smartbrainlib.library.interfaces
  • Made ExtendedTargetingConditions extend BiPredicate
  • Renamed FreePositionTracker to ExactPositionTracker
  • Renamed MemoryTest#hasNoMemories to MemoryTest#noMemories
  • Renamed MemoryTest#builder(int) to MemoryTest#sized(int)
  • Renamed BrainActivityGroup to ActivityBuilder
  • Renamed EntityFilteringSensor to NearestVisibleEntityFilteredSensor
  • Renamed the generic T type across all of SBL's brain-related classes to BO for consistent and clear type understanding
  • Bubbled up polymorphic overloads of self-returning methods across behaviours and sensors
  • Ensured consistency of generic type ordering across all of SBL's brain-related classes

### Internal
  • Greatly improved the Javadocs in EntityRetrievalUtil
  • Converted all Javadocs to Markdown, per Java 25's new standard
  • Reorganised the boilerplate/example code
  • Added package-info declarations to each package for more consistent and cleaner API usage
  • Significantly overhauled the Javadocs across the entire mod
  • General code cleanup and improvements
  • Implemented pre-collapsed code sections for boilerplate code, to further improve code clarity
[1.16.11.1] 1.16.11.1 by Tslat on Oct 09, 2026
Download
No changelog was specified.
[1.16.11] 1.16.11 by Tslat on Oct 09, 2026
Download
No changelog was specified.
SmartBrainLib Icon
Download SmartBrainLib
Select game version
Select platform