MasterfulMachinery-3-1.20.1-0.1.35.0.jar
Curse Maven Snippet
What's new
## [0.1.35.0] - 2026-09-25
### INFO:
**Version 0.1.35.0** represents a major update with substantial feature additions and improvements.
**Special Thanks:**
- **Knozyy** – Lead architect and primary developer of this entire version.
- Single-handedly implemented all major features:
- Per-side Auto I/O,
- complete Port & Controller GUI Redesign,
- Input Gateway,
- Machine Network Linker with dual modes,
- Controller Sync Optimization,
- massive Localization overhaul,
- JEI Structure Preview with complete freeze fix and new controls,
- Controller States & Status Lights,
- Machine Wrench tool,
- comprehensive Controller Screen enhancements,
- full Recipe Conditions system,
- KubeJS Event system,
- Input Gateway Storage for AE2 integration,
- Redstone Comparator support,
- Weighted output entries,
- Working effects (sounds & particles), and
- critical fluid transfer bug fix.
Without his contribution, this update would not have been possible!
### Added
#### #42 – Per-side auto I/O for ports (updated)
- **Per-side auto input/output for ports** (item, fluid, energy and Mekanism gas/infuse/pigment/slurry)
- Port GUIs have a side panel with toggles for each side (Top/Bottom/Front/Back/Left/Right), named relative to the machine's controller.
- Output ports push into any neighboring inventory, tank or energy storage on enabled sides, and into neighboring MM input ports (machine chaining). Priority setter values are respected.
- Input ports pull from neighboring non-MM blocks on enabled sides.
- Settings are saved per port. `autoPush` / `portsAutoExtractByDefault` now decide whether new output ports start with all sides enabled.
- New common config `portAutoIOInterval` (default 10 ticks).
- **Lock and dump for fluid and Mekanism chemical ports**
- Lock: each tank is locked to its current contents; empty tanks lock to the first type that enters them.
- Dump: Shift+Click deletes the port's contents.
- Turkish (`tr_tr`) translation for the new GUI texts (full translation).
#### #44 – Port & controller screen rework
- **Port GUI redesign** with clearer layout (same MM textures and colors):
- Fluid, gas and energy ports: one big gauge with the amount written on it.
- Big item ports (larger than 9x6) get a bigger window, so slots no longer overlap the title or the inventory.
- Auto I/O panel redone Mekanism-style: the port block in the middle, color-coded side buttons around it.
- **Controller GUI improvements**:
- Colored status line (not formed / paused by redstone / running / idle).
- Current recipe display with items, fluids, gases, energy and their amounts.
- Rows for tier, parallel, redstone and recipe order, each with a tooltip.
- Second page: lists every port of the machine and what's inside (live updates).
#### #45 – Input Gateway block
- **Input Gateway block**: One block to pipe items and fluids into a machine, instead of connecting a pipe to every input port.
- Can replace any casing/glass block in the structure (the structure still forms), or be placed next to an input port.
- Stores nothing and has no GUI; it hands everything to the machine's input ports.
- No crafting recipe included, same as ports (packs add one with KubeJS).
#### #46 – Machine Network Linker
- **Machine Network Linker**: Links a machine to its owner (shared with their FTB team) and to an AE2 network.
- Only the owner/team can open or break the machine's parts; OPs bypass this.
- When a port breaks, its contents go into the AE2 network instead of dropping on the ground (Mekanism gases go through Applied Mekanistics).
- Network Linker modes: *Linking* (pairs machine to owner/AE2) and *Info* (view owner, position, online status; sneak+right-click to unlink).
- AE2, FTB Teams and Applied Mekanism are all optional dependencies.
#### #47 – Controller: Optimized Sync
- Block entity sync only on GUI open or relevant changes (formed, structure, recipes, redstone, link).
- `detectExternalStorageChanges()` now runs every 5 ticks instead of every tick (matches idle scan interval).
#### #48 – Localization Overhaul
- 58 hardcoded UI texts moved to lang keys (JEI titles, tooltips, blueprint messages, debug tools, port labels).
- Full en_us and tr_tr translations; removed duplicate block.mm.input_gateway keys.
#### #49 – JEI Structure Preview: Freeze Fix & Controls
- Fixed freeze on large structures by optimizing buffer flushing and skipping enclosed blocks.
- **Layer view**: Cycles through layers from bottom up with < All layers > selector.
- **Camera improvements**: Auto-positioned from bounding sphere, rotates around structure center, fills screen view.
- **Mouse controls**: Left/middle drag rotates, right drag/wheel zooms, Shift+drag pans; on-screen i icon explains controls.
- **Connected textures**: Preview blocks see neighbors, so AE2 quartz glass, CTM, and modded textures render correctly.
#### #50 – Controller State & Port Status Lights
- Controller block state: `unformed` / `idle` / `working` (tints screen red/green/yellow).
- All port types show matching status light (block entity renderer, always bright).
- **Client config** (`mm-client.toml`): customize controller/port colors and status light visibility.
- **Per-machine customization**: `unformedColor`, `idleColor`, `workingColor` in KubeJS controller builder or JSON.
- Per-state model variants (`<id>`, `<id>_idle`, `<id>_working`) and screen textures for full resource pack support.
#### #51 – Machine Wrench & Network Linker Modes
- **mm:wrench** item (3 iron + green dye): right-click a port side to toggle auto I/O; sneak+right-click shows all six sides.
- Controller screen shows "Linked to" row (AE2 only) with tooltip for owner and unlink info.
- New Network Linker texture (ME remote style).
#### #52 – Controller Screen: Recipe Order, Rename & Pages
- **Recipe order button** (Default / Avoid Same Recipe / Round Robin) saved per controller.
- **Machine renaming**: click the controller name to edit; Enter saves, Esc cancels, empty restores original. Names are preserved in anvil and on drop (copy_name).
- **Port page split**: cycles through Status → Input Ports → Output Ports.
- Settings sync via `ControllerSettingsPkt` with server-side permission checks.
#### #53 – Missing Blocks Detection
- Server finds best-fit structure rotation and sends with screen preview.
- Shows "Missing blocks: N" with item name and relative position (e.g., "2 up, 1 left").
- Tooltip lists up to ten wrong positions with what's there instead.
#### #54 – Jade: Fuller Controller & Port Tooltips
- **Controller**: state (translated), progress, running recipes count, parallel limit, redstone mode, owner.
- **Ports**: parent machine, current activity, auto I/O status.
- **Parallel limit fix**: `getDisplayedParallelLimit()` shows 1 (serial) or the structure/controller/config limit (parallel).
- Texts use "different recipes" (same recipe never runs twice).
#### #55 – Recipe Conditions System
- Dimension, weather, biome, time, height, and redstone conditions now actually work (were parsed but ignored).
- Running recipes pause when conditions fail; not counted as stalled.
- **New conditions**: `mm:biome` (id or #tag), `mm:time` (day/night), `mm:height` (minY/maxY), `mm:redstone` (powered/unpowered), `mm:tier` (minTier/maxTier).
- **Multi-structure recipes**: `structureIds` in JSON, `.structureIds(...)` in KubeJS. JEI shows recipe in all categories.
- **KubeJS API**: `.dimension()`, `.biome()`, `.time()`, `.weather()`, `.minY()`, `.maxY()`, `.redstone()`, `.minTier()`, `.maxTier()`.
- **JEI**: condition clock icon under recipe arrow.
#### #56 – KubeJS Server Events
- `MMEvents.recipeStarted(recipeId, event => {...})` – cancellable event before recipe starts.
- `MMEvents.recipeFinished(recipeId, event => {...})` – event after recipe completes.
- Event object includes: recipeId, controller, controllerId, structureId, level, pos, block.
- No overhead if no scripts listen.
#### #57 – Input Gateway: Storage Display
- Input Gateway now displays read-only list of machine's input port slots and tanks.
- Shows one always-empty slot/tank for AE2 Pattern Provider interaction.
- Pattern Provider in blocking mode now correctly waits for inputs to be consumed.
- With Network Linker, outputs return to AE2 network.
#### #60 – Comparator Support for Controllers
- **Redstone comparator** placed against a machine controller now reads the machine's state:
- Unformed or idle: signal 0
- Working: signal 1–15, following recipe progress (furthest running recipe)
- Recipes finishing within a tick read 15
- Works with every controller, no setup needed.
- Use cases: "working" lamp, trigger automation on idle, chain machines, simple progress indicator.
- **Implementation**: MachineControllerBlock has `hasAnalogOutputSignal` / `getAnalogOutputSignal`; updates only trigger when signal value changes.
#### #61 – Weighted Output Entry Type
- New output entry type `mm:output/weighted`: picks exactly one option by weight each recipe finish (loot table style).
- **Syntax** (KubeJS):
```javascript
'.output({
type: 'mm:output/weighted',
options: [
{ weight: 70, item: 'minecraft:iron_nugget', count: 3 },
{ weight: 20, item: 'minecraft:gold_nugget', count: 3 },
{ weight: 5, item: 'minecraft:diamond' },
{ weight: 5 } // outputs nothing
],
' })
```
- Each option takes an ingredient (any port type) or item shorthand (item, count, nbt, etc.); option without both outputs nothing.
- Weights don't need to sum to 100; optional `chance` applies to whole entry.
- **JEI**: shows every possible output with its chance, plus no-output chance.
- **Bonus**: missing count on `mm:item` ingredient now defaults to 1 (was NullPointerException).
#### #62 – Working Effects (Sound & Particles)
- Machines can play sound and show particles while working (pack configurable, nothing hardcoded).
- **Global config** (`config/mm/working_effects.json`, keyed by controller block id):
```json
{
"mm:auto_crusher_controller": {
"sound": "minecraft:block.grindstone.use",
"interval": 25,
"particle": "minecraft:smoke"
}
}
```
- `sound`: sound while working
- `particle`: particle from controller's screen side
- `interval`: ticks between sounds (default 40)
- All fields optional; `""` disables effect
- Auto-created on first run, re-read on F3+T for live tuning
- **Per-controller** (KubeJS / JSON): `.workingSound()`, `.workingSoundInterval()`, `.workingParticle()`; global config overrides.
- **Client-side**: runs from controller's client tick only while `working` state active, no networking overhead.
- **Sound offset**: by position so neighboring machines don't play in unison.
- **Player opt-out**: `[controller] workingEffects` in `mm-client.toml`.
### Fixed
#### #42 – Per-side auto I/O
- `autoPush` only pushed into neighboring MM input ports, never into chests, tanks, pipes or cables.
#### #43 – Bug fixes
- Gas ports now accept radioactive gases (polonium, plutonium, nuclear waste, etc.). Mekanisms default validator was rejecting them.
- An emptied (dumped) gas tank no longer keeps showing its old contents on the client.
- Item ports now stack up to their slot capacity (512 / 16384) when you place items by hand or shift-click. Before, they stopped at 64 and shift-click only filled empty slots.
- Item counts above 127 now show correctly in the port GUI (vanilla sends slot counts as a single byte).
- Fluid ports never drain more than requested.
- `mods.toml`: replaced the example-mod placeholder text.
#### #49 – Structure Preview Fixes
- Fixed freeze on big structures with optimized buffer flushing.
#### #50 – Port State & Network Updates
- Port on-remove side effects only trigger on actual block change, not block state changes.
- State changes skip neighbor shape updates (UPDATE_KNOWN_SHAPE).
#### #59 – Fluid Port Auto-Transfer Bug Fix
- **CRITICAL FIX**: Fluid ports stopped auto-transferring due to swapped source/destination in `FluidUtil.tryFluidTransfer()` call.
- Input ports no longer pull from neighboring tanks (Mekanism, etc.)
- Output ports no longer push into them
- Root cause: recent commit swapped from/to parameters and set `doTransfer = false` (simulation mode)
- **Fixed**: restored correct parameter order and `doTransfer = true`
#### #58 – Build & Localization Fixes
- MachineControllerScreen: restored missing imports (EditBox, GLFW, ControllerSettingsPkt, RecipeSelectionMode).
- MachineControllerScreen: restored recipe order text position and tooltip.
- Lang files: restored ten missing `jei.mm.structure.*` keys (structure view title, max parallel line, layer selector, controls).
- Removed duplicate `config.jade.plugin_mm.controller_progress` key.
### Changed
- Network protocol version bumped to 2 (new port config packet).
This mod has no additional files