Skip to main content

Documentation 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.

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 called 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 base IEnergyConnectorMK2:
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.
// Amount offered this tick is capped by speed and available charge
long src = Math.min(provider.getPower(), provider.getProviderSpeed());

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:
1

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.
2

Sum available power

Each provider contributes min(getPower(), getProviderSpeed()) HE to a running total called powerAvailable.
3

Sum demand by priority

Each receiver contributes min(getMaxPower() - getPower(), getReceiverSpeed()) to its priority bucket. There are five priority levels, processed highest-first.
4

Distribute power proportionally

Within each priority tier, every receiver gets a share proportional to its demand:
double weight = (double) entry.getValue() / (double) priorityDemand;
long toSend = (long) Math.min(Math.max(toTransfer * weight, 0D), entry.getValue());
This prevents any single machine from monopolising the network.
5

Drain providers proportionally

Power is removed from providers weighted by how much each one offered. A rounding-error compensation loop cleans up any fractional HE that wasn’t accounted for.
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 implementing IEnergyProviderMK2:
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.
machine_diesel burns diesel, gasoline, or other combustible fluids. Straightforward early-to-mid game power; limited by fuel availability and refinery throughput.
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.
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 are IEnergyReceiverMK2 blocks that buffer HE on the network:
BlockCapacity (HE)
capacitor_copper1,000,000
capacitor_gold5,000,000
capacitor_niobium25,000,000
capacitor_tantalium150,000,000
capacitor_schrabidate50,000,000,000
Connect a capacitor to any HE cable; it will charge passively and discharge into the network when generators can’t keep up with demand.

Battery Items (IBatteryItem)

Portable energy storage items implement IBatteryItem, which defines:
public interface IBatteryItem {
    void chargeBattery(ItemStack stack, long i);
    void setCharge(ItemStack stack, long i);
    void dischargeBattery(ItemStack stack, long i);
    long getCharge(ItemStack stack);
    long getMaxCharge(ItemStack stack);
    long getChargeRate(ItemStack stack);
    long getDischargeRate(ItemStack stack);
}
Charge is stored in NBT under the key returned by 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, any IEnergyHandlerMK2 block automatically exposes its power state via provideInfoForECMK2(NBTTagCompound data):
public default void provideInfoForECMK2(NBTTagCompound data) {
    data.setLong(CompatEnergyControl.L_ENERGY_HE, this.getPower());
    data.setLong(CompatEnergyControl.L_CAPACITY_HE, this.getMaxPower());
}
This populates the EnergyControl display with current HE stored and maximum capacity, giving you a real-time network overview without additional configuration.

Tips and Common Mistakes

HE has no conversion to RF, FE, or any other energy standard. NTM machines will not accept power from RF generators, and NTM generators will not charge RF batteries. If you’re playing alongside mods like Mekanism or Thermal Expansion, you need separate power infrastructure for NTM machines.
Always check a machine’s getMaxPower() (shown in the GUI as the power bar maximum) before building a generator setup. High-tier machines can demand millions of HE per operation — a single diesel generator won’t cut it.
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.

Build docs developers (and LLMs) love