Compatibility
Minecraft: Java Edition
1.21–1.21.1
Platforms
Supported environments
Creators
Details
Licensed LGPL-3.0-only
Published last year
Updated 4 hours ago
Changelog
CHANGELOG 3.0.0
ADDITIONS AND CHANGES
- move: energy requirement to energyPerTick requirement
- add: energy requirement
- add: fluid per tick requirement
- add: experience per tick requirement
- add: durability per tick requirement
- add: args(strings) to requirement functions, access in the event through
.get(index)where index is the position argument starting from 0 - add:
.getEnergyCapacity(ioType)method to machine prop in FunctionRequirement - change: fluid requirements -> to use SizedFluidIngredient (now accepts tags[ONLY INPUT], output is still a FluidStack)
- update: to latest version of KubeJS, JEI and NeoForge
- improve: structure checking/caching
- add: negation to structure blocks/tags
- fix: textures in hatches growing over time
- progress arrow:
- JSON(all properties are optional):
//changed "progress_x" and "progress_y" for "progress": { "direction": "LEFT | RIGHT | TOP | BOTTOM", // default: "LEFT" "position": { "x": number, // default: 74 "y": number // default: 8 }, "emptyTexture": ResourceLocation, // default: "modular_machinery_reborn:textures/gui/empty_arrow.png" "filledTexture": ResourceLocation // default: "modular_machinery_reborn:textures/gui/filled_arrow.png" } // note: all textures must be under `textures/gui`- KubeJS(all properties are optional):
// deleted: `.progressX(number)` and `.progressY(number)` .progressData( ProgressData.create() .x(integer) // default 74 .y(integer) // default 8 .direction('left | right | top | bottom') // default 'left' .emptyTexture(ResourceLocation) // default "modular_machinery_reborn:textures/gui/empty_arrow.png" .filledTexture(ResourceLocation) // default "modular_machinery_reborn:textures/gui/filled_arrow.png" // Other methods that can be used, after them you can use any of the methods listed above(except .create()) ProgressData.of(x, y, direction, emptyTexture, filledTexture) ProgressData.of(x, y) ProgressData.of(emptyTexture, filledtexture) ProgressData.of(direction, emptyTexture, filledtexture) ProgressData.of(x, y, emptyTexture, filledtexture) ) - fix: sound not being fully played
- add: customizability to sounds
- Sounds:
{ "ambient": { "sound": "ResourceLocation", // same as before "volume": number, // 0-Float.MaxValue default: 1 "pitch": number, // 0-Float.MaxValue default: 1 "source": "MASTER | MUSIC | RECORDS | WEATHER | BLOCKS | HOSTILE | NEUTRAL | PLAYERS | AMBIENT | VOICE", //default: BLOCKS, "loop": boolean, // default: true "attenuation": boolean, // default: true "delay": number, // 0-Integer.MaxValue default: 0 "relative": boolean // default: false } | "ResourceLocation", // this last part is the old one, with default values "interaction": not changed } - add: fuel hatches
- add: fuel config file
- add: fuel requirement
.requireFuel(amount) .requireFuel(amount, data) data: FuelData.create() // rest is the same as ProgressData (note: fuel is inverted, so, bottom means from top to bottom, this is the default behaviour) FuelData.of(x, y, direction, emptyTexture, filledTexture) FuelData.of(x, y) FuelData.of(emptyTexture, filledtexture) FuelData.of(direction, emptyTexture, filledtexture) FuelData.of(x, y, emptyTexture, filledtexture) - split configs to easier readability
- add:
.getFuelAmount().getFuelCapacity().addFuel(long amount).removeFuel(long amount)to MachineControllerJS (akka Function Requirement) - add effect requirement:
.giveEffect(effectId, time, level, entities[]) .giveEffect(effectId, time, entitites[]) // default level = 1 // effectId is a ResourceLocation, copy paste the one that you use in /effect give commond // entities[] is a list of ResourceLocation of entity types to make that only those ones will affect the effect, otherwise it will affect all entity types // you can use `.giveEffect(effectId, time, level, entityType1, entityType2,...)`, // no explicit array is needed - change icons of biome, experience, experience per tick weather, time, height, chunkload and dimension requirements(now it doesn't need position, are placed like icons at the bottom)
- add: entity requirements (check amount, check health, kill, spawn, damage and heal)
.healEntitiesInRadius(int radius, int amount, ResourceLocation... filter) .healEntities(int amount, ResourceLocation...filter) .hurtEntitiesInRadius(int radius, int amount, ResourceLocation... filter) .hurtEntities(int amount, ResourceLocation...filter) .checkEntitiesAmountInRadius(int radius, int amount, boolean whitelist, ResourceLocation...filter) .checkEntitiesAmountInRadius(int radius, int amount, ResourceLocation...filter) .checkEntitiesAmount(int amount, boolean whitelist, ResourceLocation... filter) .checkEntitiesHealthInRadius(int radius, int amount, boolean whitelist, ResourceLocation...filter) .checkEntitiesHealthInRadius(int radius, int amount, ResourceLocation...filter) .checkEntitiesHealth(int amount, boolean whitelist, ResourceLocation...filter) .checkEntitiesHealth(int amount, ResourceLocation...filter) .killEntitiesInRadius(int radius, int amount, ResourceLocation...filter) .killEntities(int amount, ResourceLocation...filter) .killEntity(ResourceLocation...filter) // amount = 1 .spawnEntitiesInRadius(int radius, int amount, ResourceLocation type) .spawnEntities(int amount, ResourceLocation type) .spawnEntity(ResourceLocation type) // amount = 1 // default radius = 1 // default whitelist = true - add: entity hatches (detect, kill, damage, spawn and heal)
- add: structure requirement
.requireStructure(MMRStructureBuilder.createRequirement()*) // cecks structure .destroyStructure(MMRStructureBuilder.createRequirement()*) // breaks without drops .breakStructure(MMRStructureBuilder.createRequirement()*) // breaks with drops .placeStructure(MMRStructureBuilder.createRequirement()*) // drops replaced blocks .placeStructure(MMRStructureBuilder.createRequirement()*, boolean drops) //* rest same as building multiblock except machine key, change `m` with `$` - add: structure checker hatch
- add: redstone requirement(require and emit flat amount)
.requireRedstone(int amount) .emitRedstone(int amount) - add: redstone port (hatch for both, input and output, set the mode with the GUI button inside)
- add: command requirement
// default permissionLevel = 2 // default log = false // commands must start with `/` .runCommandOnStart(String command) .runCommandOnStart(String command, int permissionLevel) .runCommandOnStart(String command, boolean log) .runCommandOnStart(String command, int permissionLevel, boolean log) .runCommandEachTick(String command) .runCommandEachTick(String command, int permissionLevel) .runCommandEachTick(String command, boolean log) .runCommandEachTick(String command, int permissionLevel, boolean log) .runCommandOnEnd(String command) .runCommandOnEnd(String command, int permissionLevel) .runCommandOnEnd(String command, boolean log) .runCommandOnEnd(String command, int permissionLevel, boolean log) - add: command executioner(hatch)
- add: auto input and auto output features (configurable through the hatch UI, default enabled)
- add: Jade/TheOneProbe fuel, redstone, effect and auto input/output status
- caching structure to reduce constant checks(now only checks on world load and periodically if the structure is not complete, breaking a block that is on that structure)
- add: connectable textures (only works if the textures are the default version, in the case of controller, only if it is the default model [using athena mod, now it's a required dependency])
RECOMENDATIONS
- Remember backup your world before update.
- Break and place energy, fluid, item and experience hatches to proper update new features and fixes.
- Update every addon you have to improve compat and don't break things.
WARNING
- This version is not compatible with any version below 2.0.0 of any addon.
Dependencies
Files
Metadata
Release channel
ReleaseVersion number
1.21.1-3.0.0Loaders
Game versions
1.21–1.21.1Downloads
44Publication date
December 11, 2025 at 10:48 AMPublisher

alec016
Member









