COWMODSКаталог модов

SmartBrainLib

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

Автор: Tslat7 млн296обновлён 5 окт. 2026 г.
БиблиотекиМобыУтилиты

Описание

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

Последние версии

Все версии →
release

NeoForge 26.1.2

2.0.3
5 окт. 2026 г.235Minecraft: 26.1.2neoforge
Скачать
Что нового
# 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`
release

Forge 26.1.2

2.0.3
5 окт. 2026 г.57Minecraft: 26.1.2forge
Скачать
Что нового
# 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`
release

Fabric 26.1.2

2.0.3
5 окт. 2026 г.401Minecraft: 26.1.2fabric
Скачать
Что нового
# 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`
release

NeoForge 26.2

2.0.3
4 окт. 2026 г.127Minecraft: 26.2neoforge
Скачать
Что нового
# 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`
release

Forge 26.2

2.0.3
4 окт. 2026 г.41Minecraft: 26.2forge
Скачать
Что нового
# 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`
release

Fabric 26.2

2.0.3
4 окт. 2026 г.1,7 тыс.Minecraft: 26.2fabric
Скачать
Что нового
# 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`
release

NeoForge 26.3

2.0.3
4 окт. 2026 г.671Minecraft: 26.3neoforge
Скачать
Что нового
# 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`
release

Forge 26.3

2.0.3
4 окт. 2026 г.192Minecraft: 26.3forge
Скачать
Что нового
# 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`
release

Fabric 26.3

2.0.3
4 окт. 2026 г.7,7 тыс.Minecraft: 26.3fabric
Скачать
Что нового
# 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`
release

Forge 26.3

2.0.2
20 сент. 2026 г.164Minecraft: 26.3forge
Скачать
Что нового
# Changelog #### Version 2.0.2 ## Changes - Update to 26.3 - Add `BrainUtil#computeMemory` and `BrainUtil#computeMemoryIfPresent`