NTM’s power system is entirely independent of Forge Energy (RF/FE) and other popular energy APIs. Instead, every machine, generator, and cable in the mod operates on HE (High Energy) — a proprietary unit with no fixed conversion rate to any other energy standard. Power flows through a graph-based network calledDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/hbmmods/hbm-s-nuclear-tech-git/llms.txt
Use this file to discover all available pages before exploring further.
PowerNetMK2, which self-assembles at runtime as cables and machines connect. Understanding how this network is structured, how devices register themselves, and how power is distributed each tick is essential for building any working industrial setup in NTM.
The Three Node Types
Every block that participates in the HE network implements one of three interfaces, all extending the baseIEnergyConnectorMK2:
- Providers (IEnergyProviderMK2)
- Receivers (IEnergyReceiverMK2)
- Conductors (IEnergyConductorMK2)
Providers are sources of HE power. They implement
getPower(), getMaxPower(), and usePower(long). Each tick, a provider calls tryProvide() on adjacent blocks, which registers itself into the nearest PowerNetMK2 via node.net.addProvider(this).The interface exposes getProviderSpeed(), which caps how much HE a provider can push per network update — by default this equals getMaxPower(). Providers can also push directly to an adjacent IEnergyReceiverMK2 without needing a conductor in between, provided receiver.allowDirectProvision() returns true.PowerNetMK2: How the Network Works
PowerNetMK2 extends NodeNet and holds two live maps: one for registered providers and one for registered receivers. Both maps store a timestamp alongside each entry. Every tick, the network:
Purge stale entries
Any provider or receiver whose last heartbeat timestamp is more than 3,000 ms old is evicted. This handles cables being broken or chunk-unloaded without an explicit unregister call.
Sum available power
Each provider contributes
min(getPower(), getProviderSpeed()) HE to a running total called powerAvailable.Sum demand by priority
Each receiver contributes
min(getMaxPower() - getPower(), getReceiverSpeed()) to its priority bucket. There are five priority levels, processed highest-first.Distribute power proportionally
Within each priority tier, every receiver gets a share proportional to its demand:This prevents any single machine from monopolising the network.
The
energyTracker field accumulates total HE transferred each network update, useful for diagnostics and the EnergyControl mod integration.Generators
NTM includes several categories of power generators, all implementingIEnergyProviderMK2:
Steam Engines
Steam Engines
The
machine_steam_engine burns steam piped in from boilers (coal, oil, or nuclear heat sources). Steam grade (normal, hot, superhot, ultrahot) directly affects output. Steam engines are mid-game workhorses and pair naturally with reactor cooling loops.Diesel Generators
Diesel Generators
machine_diesel burns diesel, gasoline, or other combustible fluids. Straightforward early-to-mid game power; limited by fuel availability and refinery throughput.RTGs (Radioisotope Thermoelectric Generators)
RTGs (Radioisotope Thermoelectric Generators)
machine_rtg_grey, machine_minirtg, and machine_powerrtg consume radioactive pellets (typically Pu-238) and produce a continuous, low-level HE output without any moving parts. Ideal for powering remote or automated installations that can’t be refuelled easily. Note that RTG pellets carry radiation — handle with care.Stirling Engines
Stirling Engines
machine_stirling (and its steel variant) convert heat differentials into HE. They can run from any heat source placed adjacent, making them versatile but lower-output generators.Storage: Capacitors and Batteries
Block Capacitors
Capacitors areIEnergyReceiverMK2 blocks that buffer HE on the network:
| Block | Capacity (HE) |
|---|---|
capacitor_copper | 1,000,000 |
capacitor_gold | 5,000,000 |
capacitor_niobium | 25,000,000 |
capacitor_tantalium | 150,000,000 |
capacitor_schrabidate | 50,000,000,000 |
Battery Items (IBatteryItem)
Portable energy storage items implementIBatteryItem, which defines:
getChargeTagName() (default: "charge"). The static helper IBatteryItem.emptyBattery(ItemStack) returns a copy with charge zeroed out — useful for recipes that require a discharged battery as an ingredient.
EnergyControl Mod Integration
If the EnergyControl mod is installed, anyIEnergyHandlerMK2 block automatically exposes its power state via provideInfoForECMK2(NBTTagCompound data):
Tips and Common Mistakes
Conductors connect to all six faces by default. If you need to prevent a cable from connecting to a specific face (e.g., to avoid accidentally powering a neighbouring machine), consider using the directional cable variants where available, or plan your layout to keep incompatible networks separated.
