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 |
|---|---|---|---|---|---|
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.11
|
2d ago | 1 | |||
|
R
1.16.11
|
2d ago | 1 | |||
|
R
1.16.11
|
2d ago | 1 | |||
|
R
1.16.11
|
2d ago | 1 | |||
|
R
1.16.11
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.10
|
2d ago | 1 | |||
|
R
1.16.10
|
2d ago | 1 | |||
|
R
1.16.10
|
2d ago | 1 | |||
|
R
1.16.9
|
2d ago | 1 | |||
|
R
1.16.9
|
2d ago | 1 | |||
|
R
1.16.9
|
2d ago | 1 | |||
|
R
1.16.8
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.8
|
2d ago | 1 | |||
|
R
1.16.8
|
2d ago | 1 | |||
|
R
1.16.8
|
2d ago | 1 | |||
|
R
1.16.8
|
2d ago | 1 | |||
|
R
1.16.8
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.7
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.7
|
2d ago | 1 | |||
|
R
1.16.7
|
2d ago | 1 | |||
|
R
1.16.7
|
2d ago | 1 | |||
|
R
1.16.7
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.6
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.6
|
2d ago | 1 | |||
|
R
1.16.6
|
2d ago | 1 | |||
|
R
1.16.6
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.5
|
2d ago | 1 | |||
|
R
1.16.2
|
2d ago | 1 | |||
|
R
1.16.2
|
2d ago | 1 | |||
|
R
1.16.2
|
2d ago | 1 | |||
|
R
1.16.4
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.3
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.16.1
|
2d ago | 1 | |||
|
R
1.16.1
|
2d ago | 1 | |||
|
R
1.16.1
|
2d ago | 1 | |||
|
R
1.16
|
2d ago | 1 | |||
|
R
1.16
|
2d ago | 1 | |||
|
R
1.16
|
2d ago | 1 | |||
|
R
1.15
|
2d ago | 1 | |||
|
R
1.15
|
2d ago | 1 | |||
|
R
1.15
|
2d ago | 1 | |||
|
R
1.15
|
2d ago | 1 | |||
|
R
1.15
|
2d ago | 1 | |||
|
R
1.15
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.5
|
2d ago | 1 | |||
|
R
1.14.5
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.5
|
2d ago | 1 | |||
|
R
1.14.1
|
2d ago | 1 | |||
|
R
1.14.1
|
2d ago | 1 | |||
|
R
1.14.1
|
2d ago | 1 | |||
|
R
1.14.4
|
2d ago | 1 | |||
|
R
1.14.4
|
2d ago | 1 | |||
|
R
1.14.4
|
2d ago | 1 | |||
|
R
1.14.3
|
2d ago | 1 | |||
|
R
1.14.3
|
2d ago | 1 | |||
|
R
1.14.3
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.2
|
2d ago | 1 | |||
|
R
1.14.1
|
2d ago | 1 | |||
|
R
1.14.1
|
2d ago | 1 | |||
|
R
1.14
|
2d ago | 1 | |||
|
R
1.14
|
2d ago | 1 | |||
|
R
1.14
|
2d ago | 1 | |||
|
R
1.14
|
2d ago | 1 | |||
|
R
1.14
|
2d ago | 1 | |||
|
R
1.14
|
2d ago | 1 | |||
|
R
1.13
|
2d ago | 1 | |||
|
R
1.13
|
2d ago | 1 | |||
|
R
1.13
|
2d ago | 1 | |||
|
R
1.13
|
2d ago | 1 | |||
|
R
1.13
|
2d ago | 1 | |||
|
R
1.13
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
|
R
1.12
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.11.1
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
|
R
1.11
|
2d ago | 1 | |||
|
R
1.9
|
2d ago | 1 | |||
|
R
1.9
|
2d ago | 1 | |||
|
R
1.9
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
|
R
1.9
|
2d ago | 1 | |||
|
R
1.9
|
2d ago | 1 | |||
|
R
1.9
|
2d ago | 1 | |||
|
R
1.9
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.8
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.8
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.8
|
2d ago | 1 | |||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
| 2d ago | 1 | ||||
|
R
1.4
|
2d ago | 1 | |||
| 2d ago | 1 |
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### 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:
ExtendedBehaviourConditionlessAttackConditionlessHeldAttackCustomBehaviourCustomDelayedBehaviourCustomHeldBehaviour- Fix
BrainUtil#setTargetOfEntityimproperly comparing previous target - Fix
EntityRetrievalUtilentity 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#getAllBehavioursnot doing anything - Fix the TransformingListView impl not being quite right
- Fix scheduled activities replacing themselves every tick
- Expand surface placement logic for
EasyRandom - Adjust
FollowEntityteleporting logic - Fixed bad handling of
MoveToWalkTarget - Fixed hide predicate for
EscapeSunbeing broken - Fixed
FollowEntitynot resetting pathfinder malus properly - Fix
BreakBlocknot continually updating its cached block - Expanded the predicate conditions for
LookAtTarget - Fixed
DelayedBehavioursometimes preventing itself from running - Fix
StrafeTarget/StayWithinDistanceOfAttackTargetcalculating proximity wrong - Improve proximity matching for
BreedWithPartner - Prevent
SequentialBehaviour#runningBehaviourfrom being stopped twice - Prevent the default impl of
ItemTemptingSensorcrashing out if a mob withoutTEMPT_RANGEuses it - Fixed
NearbyHostileSensorusing the wrong parameters - Fixed
LeapAtTarget's broken attacking logic - Fixed
BreezeSpecificSensornot actually using its predicate - Fixed
PiglinSpecificSensornot filling theNEARBY_ADULT_PIGLINSmemory - Fixed
AxolotlSpecificSensorusing the wrong radius - Fix
ConditionlessAttackdoing everything twice - Adjust the
NearestVisibleEntityFilteredSensorimplementations to remove overlap and simplify their usage - Remove implicit requirement for
AgeableMobonNearbyAdultSensor
#### Version
2.0.2
## Changes
- Update to 26.3
- Add
BrainUtil#computeMemoryandBrainUtil#computeMemoryIfPresent
#### Version
2.0.2
## Changes
- Fixed Fabric not having the logo png
- Fixed NeoForge dying from the iconFile change
- Added
BrainUtil#computeMemoryandBrainUtil#computeMemoryIfPresent
#### Version
2.0.2
## Changes
- Fixed Fabric not having the logo png
- Fixed NeoForge dying from the iconFile change
- Added
BrainUtil#computeMemoryandBrainUtil#computeMemoryIfPresent
#### Version
2.0.2
## Changes
- Fixed Fabric not having the logo png
- Fixed NeoForge dying from the iconFile change
- Added
BrainUtil#computeMemoryandBrainUtil#computeMemoryIfPresent
#### Version
2.0.2
## Changes
- Update to 26.3
- Add
BrainUtil#computeMemoryandBrainUtil#computeMemoryIfPresent
#### Version
2.0.2
## Changes
- Update to 26.3
- Add
BrainUtil#computeMemoryandBrainUtil#computeMemoryIfPresent
#### Version
2.0.0
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SetRandomFlyingTargetandSetRandomHoverTargetintoSetRandomFlyTarget - Renamed
ExtendedBehaviour#doStartChecktocanStart - Renamed
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
GroupBehaviour#addto allow for manually adding individual behaviours to aGroupBehaviour - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed
ExtendedBehaviour#runForBetweento#runFor - Renamed
ExtendedBehaviour#cooldownForBetweento#cooldownFor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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#getMemoryRequirementsto use theMemoryConditioninterface that Mojang added - Renamed
SBLShufflingListtoWeightedShuffleableList - 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-infodeclarations 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
#### Version
2.0.0
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SetRandomFlyingTargetandSetRandomHoverTargetintoSetRandomFlyTarget - Renamed
ExtendedBehaviour#doStartChecktocanStart - Renamed
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
GroupBehaviour#addto allow for manually adding individual behaviours to aGroupBehaviour - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed
ExtendedBehaviour#runForBetweento#runFor - Renamed
ExtendedBehaviour#cooldownForBetweento#cooldownFor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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#getMemoryRequirementsto use theMemoryConditioninterface that Mojang added - Renamed
SBLShufflingListtoWeightedShuffleableList - 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-infodeclarations 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
#### Version
2.0.0
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SetRandomFlyingTargetandSetRandomHoverTargetintoSetRandomFlyTarget - Renamed
ExtendedBehaviour#doStartChecktocanStart - Renamed
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
GroupBehaviour#addto allow for manually adding individual behaviours to aGroupBehaviour - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed
ExtendedBehaviour#runForBetweento#runFor - Renamed
ExtendedBehaviour#cooldownForBetweento#cooldownFor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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#getMemoryRequirementsto use theMemoryConditioninterface that Mojang added - Renamed
SBLShufflingListtoWeightedShuffleableList - 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-infodeclarations 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
#### Version
2.0.0
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SetRandomFlyingTargetandSetRandomHoverTargetintoSetRandomFlyTarget - Renamed
ExtendedBehaviour#doStartChecktocanStart - Renamed
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
GroupBehaviour#addto allow for manually adding individual behaviours to aGroupBehaviour - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed
ExtendedBehaviour#runForBetweento#runFor - Renamed
ExtendedBehaviour#cooldownForBetweento#cooldownFor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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#getMemoryRequirementsto use theMemoryConditioninterface that Mojang added - Renamed
SBLShufflingListtoWeightedShuffleableList - 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-infodeclarations 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
#### Version
2.0.0
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SetRandomFlyingTargetandSetRandomHoverTargetintoSetRandomFlyTarget - Renamed
ExtendedBehaviour#doStartChecktocanStart - Renamed
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
GroupBehaviour#addto allow for manually adding individual behaviours to aGroupBehaviour - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed
ExtendedBehaviour#runForBetweento#runFor - Renamed
ExtendedBehaviour#cooldownForBetweento#cooldownFor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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#getMemoryRequirementsto use theMemoryConditioninterface that Mojang added - Renamed
SBLShufflingListtoWeightedShuffleableList - 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-infodeclarations 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
#### Version
2.0.0
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SetRandomFlyingTargetandSetRandomHoverTargetintoSetRandomFlyTarget - Renamed
ExtendedBehaviour#doStartChecktocanStart - Renamed
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
GroupBehaviour#addto allow for manually adding individual behaviours to aGroupBehaviour - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed
ExtendedBehaviour#runForBetweento#runFor - Renamed
ExtendedBehaviour#cooldownForBetweento#cooldownFor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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#getMemoryRequirementsto use theMemoryConditioninterface that Mojang added - Renamed
SBLShufflingListtoWeightedShuffleableList - 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-infodeclarations 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
#### Version
1.17
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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-infodeclarations 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
#### Version
1.17
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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-infodeclarations 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
#### Version
1.17
## Changes
### API
- Performed a general cleanup across the entire mod, bringing it in line with modern modding practices
- Added
SmartBrainBuilderand extracted the various Brain-construction methods to it.SmartBrainOwnerextends 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 forBehaviorControlrelated methods - Added
ExtendedBehaviour#tryExpire- a method to allow for graceful expiration of behaviours when switchingActivities - 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
customServerAIStepin yourmob) - Users no longer need to return a
SmartBrainProviderorSmartBraininstance 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
SBLLoadertoSBLPlatform - Renamed
SBLConstants#LOADERtoSBLConstants#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#getBehavioursfrom anIteratorto anIterable - Added
BrainBehaviourPredicate#isChildOfBehaviourhelper method - Renamed the
net.tslat.smartbrainlib.objectpackage tonet.tslat.smartbrainlib.library.object - Moved
BrainBehaviourConsumer,BrainBehaviourPredicate,ToFloatBiFunction, andTriPredicatetonet.tslat.smartbrainlib.library.interfaces - Made
ExtendedTargetingConditionsextendBiPredicate - Renamed
FreePositionTrackertoExactPositionTracker - Renamed
MemoryTest#hasNoMemoriestoMemoryTest#noMemories - Renamed
MemoryTest#builder(int)toMemoryTest#sized(int) - Renamed
BrainActivityGrouptoActivityBuilder - Renamed
EntityFilteringSensortoNearestVisibleEntityFilteredSensor - Renamed the generic
Ttype across all of SBL's brain-related classes toBOfor 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-infodeclarations 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