EMC Essentials (ReFabricated)

A Fabric port of the EMC Essentials modpack experience. Adds enhanced EMC integration, auto-registration, EMC commands, and quality-of-life features built on Item Alchemy.

File Details

emcessentials-refabricated-1.2.9.jar

  • R
  • Jun 7, 2026
  • 121.22 KB
  • 0
  • 1.20.1
  • Fabric

File Name

emcessentials-reabricated-1.2.9.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Fabric

modImplementation "curse.maven:emc-essentials-refabricated-1567409:8211038"
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

Changelog

v1.2.9 — Unlimited Item Quantities

Changed — Removed the 9999 per-slot quantity cap

  • getStack() now caps at Integer.MAX_VALUE (2,147,483,647) instead of 9999.
  • This is effectively unlimited — the only safeguard is against JVM int overflow when casting long to int.
  • The 9999 cap was originally added to prevent Tom's display issues caused by corrupted EMC (the underflow bug from earlier versions). Now that EMC deduction is reliably persisted via EMCManager.setEMCtoPlayer() + syncS2C(), corrupted EMC can no longer accumulate, so the cap is unnecessary.
  • If ownerEMC / itemEMC exceeds 2.1 billion, it caps at Integer.MAX_VALUE — a Java limitation, not an arbitrary limit.

Changed

  • Version bumped from 1.2.8 to 1.2.9
  • Output jar: emcessentials-reabricated-1.2.9.jar

v1.2.8 — Non-EMC Item Passthrough

Fixed — Non-EMC items pushed into the EMC Interface no longer vanish

  • Items without EMC value (cobblestone, sticks, etc.) are now stored in slot0Buffer instead of being silently discarded.
  • getStack(0) returns the buffer contents — Tom's adapter sees the item wasn't consumed and routes it to the next priority storage.
  • The tick method checks slot0Buffer and converts any item that now has EMC value (edge case for newly learned items).
  • Items with EMC value continue to be converted immediately on setStack(0).

Changed — EMC Interface description updated

  • README now explains slot 0 behaviour (EMC items consumed, non-EMC items pass through).

Changed

  • Version bumped from 1.2.7 to 1.2.8
  • Output jar: emcessentials-reabricated-1.2.8.jar

v1.2.7 — Forge-Matched Slot Architecture (Working Extraction)

Changed — EMC Interface rewritten to match Forge emc-interface architecture exactly

  • Slot 0: Insertion-only sink — any item placed here is converted to EMC via EMCManager.setEMCtoPlayer() + syncS2C()
  • Slots 1+: Extraction-only — getStack() returns ownerEMC / itemEMC calculated fresh each call
  • Delta detection in setStack(): Tom's reads items via getStack(), extracts internally, then calls setStack() during sync with fewer items. setStack() compares lastShown[slot] against the written count and deducts EMC for the difference. This is the only reliable way to detect extraction on Fabric, since Tom's never calls removeStack().
  • removeStack() fallback: Still works for hoppers/pipes that use the standard extraction path.
  • lastShown tracking: Each getStack() call records what was shown per slot. setStack() removes and uses that entry for delta calculation.

Fixed — Extraction finally deducts EMC correctly

  • The Forge version works because Tom's calls extractItem() (Forge capability). On Fabric, Tom's uses getStack() → internal extraction → setStack() sync. The delta detection in setStack() bridges this gap.
  • Uses EMCManager.setEMCtoPlayer() + syncS2C() for ALL EMC modifications — the exact same code path as the proven /emce bank commands.
  • Removed all EMCUtil$PLAYER.incrementEMC/decrementEMC/setEMC wrappers that were masking failures.

Changed

  • Version bumped from 1.2.6 to 1.2.7
  • Output jar: emcessentials-reabricated-1.2.7.jar

v1.2.6 — Forge Slot Architecture (Insertion/Extraction Split)

Fixed — EMC Interface now deducts EMC when items are taken via Tom's

  • Root cause: Tom's doesn't call removeStack() — it reads items via getStack(), processes extraction internally, then calls setStack() during sync. No removeStack() call meant no EMC deduction was ever triggered.
  • Fix: The EMC Interface now uses a physical 54-slot DefaultedList buffer. Every 5 ticks, quantities are recalculated from ownerEMC / itemEMC directly into the buffer slots. Tom's sees real physical ItemStacks with correct affordable counts.
  • When Tom's syncs and calls setStack() with fewer items than were in the buffer, setStack() detects the delta (oldCount − newCount) and calls adjustEMC(player, -cost) to deduct exactly what was extracted.
  • removeStack() still works as a fallback for hoppers/pipes that use the standard extraction path.

Changed — EMCManager direct reflection path

  • Both setStack() delta detection and removeStack() use EMCManager.getEmcFromPlayer() / setEMCtoPlayer() / syncS2C() directly — the exact same code path as the working /emce bank commands.
  • Removed all intermediate EMCUtil$PLAYER wrappers that were masking failures.

Changed — Version bumped

  • 1.2.41.2.5
  • Output jar: emcessentials-reabricated-1.2.5.jar

v1.2.4 — Tom's Sync Investigation

Fixed — EMC Interface not deducting from bank

  • Root cause: EMCUtil$PLAYER.decrementEMC() reported success but didn't modify the player's stored EMC balance. ownerEMC -= cost was immediately overwritten by refreshOwnerEMC() which re-read the unchanged value from Item Alchemy.
  • Fix: Switched to read-current → subtract → write-back pattern using getEMC() + setEMC() instead of decrementEMC(). This guarantees the deduction is actually persisted.

Fixed — EMC Link Importer item deletion (Bug 1)

  • Added canAddEMCToNetwork() check before removing items from adjacent inventories
  • Items are only pulled after confirming adjacent EMC storage has space
  • Items that don't fit in the internal buffer are returned to the source inventory
  • Eliminates the "item deletion" bug when EMC network is full

Fixed — Miniature Sun chunk scanning (Bug 2)

  • Added fallback method names for WorldChunk.getBlockEntities() across different mappings (Yarn getBlockEntityMap, Mojmap getBlockEntities)
  • Previously only tried one method name which could silently fail on some environments

Fixed — getStack() max stack size (Bug 3)

  • ItemStack count capped at 9999 instead of raw ownerEMC / itemEMC — prevents display corruption in Tom's while keeping quantities meaningful
  • Previously had no cap which caused Tom's display issues with values > 2.1B

Fixed — Dead code removed (Bug 4)

  • Removed convertStoredItems() and importFromAdjacent() methods from EMC Interface — they were never called but referenced slotCache and addToOwnerEMC()

Fixed — EMC Link processInput() error handling

  • Added canAddEMCToNetwork() pre-check to avoid pulling items when EMC storage is full
  • Items that don't fit in the import buffer are returned to source inventory

Changed

  • Version bumped from 1.2.1 to 1.2.2
  • Output jar: emcessentials-reabricated-1.2.2.jar

v1.2.1 — EMC Interface Deduction Logic Fix

Fixed — EMC Interface now populates item cache eagerly

  • emcKnownItems was only populated inside tick(), which runs server-side only. Client queries (Jade, JEI, Tom's, hoppers) found nullsize() returned 0 → no items displayed.
  • Added ensureKnownItemsLoaded() — called from size(), isEmpty(), getStack(), and removeStack() before any cache access.
  • Cache populates immediately on first access via Registries.ITEM scan, not waiting for a server tick.
  • Uses emcKnownItemsLoaded flag instead of null check for reliable state tracking.

Fixed — Jade compatibility for EMC Interface

  • canPlayerUse() changed from false to true — some inventory readers check this before accessing virtual items.
  • Removed stack.setCustomName() from getStack() and removeStack() — it hardcoded English names and wasn't needed since real Item instances already have correct translatable names via their registry entries.
  • Added toUpdatePacket() and toInitialChunkDataNbt() override to sync block entity data to clients, required by some client-side mods.

Fixed — Custom item name display in Jade

  • ArcaneTabletItem and OPFuelItem now extend custom Item subclasses with getName() returning translatable text components via Text.translatable().
  • getDefaultStack() sets the display name via NBT so creative tab / JEI listings show the correct name immediately.

Changed

  • Version bumped from 1.0.7 to 1.0.8
  • Output jar: emcessentials-reabricated-1.0.8.jar

v1.0.7 — Custom Item Name Tags

Changed — EMC Interface stacks now carry explicit display names

  • Items returned by getStack(slot) now have their display name set via stack.setCustomName(stack.getName()) — ensures Jade, WAILA, tooltip mods, and GUIs always resolve the correct item name.
  • Same fix applied to removeStack(slot, amount) for extracted items.
  • Fixes issues where virtual inventory items showed as generic or untranslated names in third-party mods.

Changed

  • Version bumped from 1.0.6 to 1.0.7
  • Output jar: emcessentials-reabricated-1.0.7.jar

v1.0.6 — EMC Interface Virtual Inventory Overhaul

Changed — EMC Interface is now a fully virtual inventory

  • size() now returns emcKnownItems.size() — every known EMC item is a slot. No more 54-slot rotating buffer.
  • getStack(slot) dynamically returns the item with a count equal to cachedAvailableEMC / itemEMC (capped at 9999). Stack count reflects exactly how many can be afforded.
  • removeStack(slot, amount) generates items on-demand from EMC — nothing is physically stored.
  • setStack(slot, stack) converts inserted items to EMC immediately.
  • cachedAvailableEMC refreshed every 5 ticks from adjacent EMC storage via EMCStorageUtil.getNearEMCStorages().
  • emcKnownItems refreshed every 5 seconds from Registries.ITEM.
  • Removed the old 54-slot DefaultedList buffer — inventory is now entirely virtual.

Changed

  • Version bumped from 1.0.5 to 1.0.6
  • Output jar: emcessentials-reabricated-1.0.6.jar

v1.0.5 — EMC Interface + EMC Link Restored

Added — EMC Interface (new block)

  • Ported from the Forge emc-interface mod by Ofek2608
  • No-GUI mechanical block — acts as a virtual infinite inventory backed by EMC knowledge
  • Items pushed in: converted to EMC via EMCUtil.ITEM.getEMC(), pushed to adjacent storage
  • Items pulled out: generated from EMC if enough EMC exists in adjacent storage via removeEMC()
  • 54-slot auto-rotating showcase: cycles through all known EMC items from Registries.ITEM, refreshed every 5 seconds
  • 16×48 animated texture directly from the original Forge mod
  • EMCInterfaceBlock + EMCInterfaceBlockEntity registered in ModBlockEntities.EMC_INTERFACE

Changed — EMC Link reverted to combined Importer/Exporter with GUI

  • Restored the 18-slot GUI version: slots 0–8 import buffer, slots 9–17 export request filters
  • onUse opens NamedScreenHandlerFactory — right-click opens chest GUI
  • Imports: scans adjacent inventories every 5 ticks for items with EMC value
  • Exports: generates items from EMC when request slots are populated
  • Full canInsert/canExtract/addEMC/removeEMC/getMaxEMC/getStoredEMC reflection API calls

Removed

  • Previous no-GUI EMC Link rewrite (replaced by separate EMC Interface block)

v1.0.4 — Item Cleanup & Projex Port

Changed

  • All item and block textures regenerated via AI-generated assets
  • EMC Bridge Terminal now uses a green-tinted Importer texture on all 6 faces (matching Item Alchemy's emc_importer block style)
  • README and CHANGELOG now reference "EMC Essentials Forge Mod" instead of "modpack"
  • Version bumped from 1.0.2 to 1.0.3
  • Output jar: emcessentials-reabricated-1.0.3.jar

v1.0.2 — JEI Fix

Fixed

  • Items not appearing in JEI — created a custom creative tab itemGroup.emcessentials.general via FabricItemGroup.builder() and assigned all items and blocks to it. JEI only shows items that belong to at least one creative tab. Now all 4 items and 10 blocks appear in both the creative inventory and JEI.

Changed

  • Version bumped from 1.0.1 to 1.0.2
  • Output jar: emcessentials-reabricated-1.0.2.jar

v1.0.1 — Delta HUD, Power Flowers, Bridge Terminal

Added

EMC HUD Delta Indicator

  • HUD now shows EMC: 1,234,567 (+100 | +100/s) in green for gains
  • Or EMC: 1,234,567 (-50 | -50/s) in red for losses
  • Delta calculated by comparing current sync value to previous (updates every 1s)
  • Per-second rate derived from delta (sync interval = ~1s)
  • Exposed via getDeltaDisplay(), getRateDisplay(), isDeltaPositive() in EMCEssentialsClient
  • Delta text renders right after main EMC value on the same line, same color-aware positioning

EMC Bridge Terminal

  • New block emcessentials:emc_bridge_terminal with green-tinted Importer/Exporter texture
  • 18-slot inventory (2×9) visible to Tom's Simple Storage, hoppers, and pipes
  • Auto-converts inserted items to EMC using EMCUtil.ITEM.getEMC()
  • Pushes converted EMC into adjacent Item Alchemy storage via EMCStorageUtil
  • Block entity ticks every 5 ticks to process input and replenish output
  • NBT-persistent inventory
  • Right-click opens a generic 2-row container GUI

Power Flower Block Entities (all 6 tiers)

  • Ticking block entities that generate EMC each tick:
    • MK1: 4 EMC/tick, MK2: 12, MK3: 48, MK4: 192, MK5: 768, MK6: 3072
  • 1B EMC internal buffer per flower
  • Auto-pushes stored EMC to adjacent EMC Batteries/Cables every 5 ticks via EMCStorageUtil.getNearEMCStorages() and addEMC()
  • NBT-persistent stored EMC and tier fields
  • Custom PowerFlowerBlock class extending Block + BlockEntityProvider

Miniature Sun Block Entity

  • Ticking block entity scans loaded chunks within 5-block radius every 10 ticks
  • Detects Item Alchemy's EMCCollectorTile via class name reflection
  • Applies 10× boost by injecting extra EMC via addEMC() on each tick
  • Also boosts PowerFlowerBlockEntity output by 10× directly
  • Uses chunk-based iteration (WorldChunk.getBlockEntities()) for reliable neighbor scanning

Block Entity Registration

  • ModBlockEntities class with registry for POWER_FLOWER, MINIATURE_SUN, EMC_BRIDGE_TERMINAL
  • Cached-type singleton pattern (setType()) to avoid circular initialization
  • FabricBlockEntityTypeBuilder with multi-block support (6 power flower variants share one type)

Block Assets (10 new)

  • Blockstate JSONs: emc_bridge_terminal, power_flower_mk2 through mk6
  • Block models: emc_bridge_terminal (cube_bottom_top), power_flower_mk2mk6
  • Item models: all 7 new blocks inherit block parent
  • Textures: emc_bridge_terminal_side.png, emc_bridge_terminal_top.png (16×16 green-tinted)
  • Loot tables: all new blocks drop themselves
  • Mining tag: emc_bridge_terminal added to mineable/pickaxe

Lang Entries

  • block.emcessentials.emc_bridge_terminal, container.emcessentials.emc_bridge_terminal
  • block.emcessentials.power_flower_mk2 through power_flower_mk6

Changed

  • Version bumped from 1.0.0 to 1.0.1 in gradle.properties
  • Output jar: emcessentials-reabricated-1.0.1.jar
  • README.md rewritten with full v1.0.1 feature list including HUD delta section

Fixed

  • HUD compile errors in 1.20.1 Yarn mappings:
    • Replaced client.getDebugHud().shouldShowDebugHud() with client.options.debugEnabled
    • Removed access to private reducedDebugInfo field in GameOptions
  • Command registration — changed method reference to lambda to match Fabric API's 3-parameter CommandRegistrationCallback signature
  • Block entity type registration — switched to cached-type pattern (setType()) to resolve class-loading order issues
  • Chunk scanning — replaced non-existent World.getBlockEntities(Box) with chunk iteration via WorldChunk.getBlockEntities() using reflection
  • Build chain — upgraded to Fabric Loom 1.15.2, Gradle 9.2.1, JDK 21 to match Item Alchemy 1.3.1's build version

v1.0.0 — Initial Release

Added — Mod Framework

  • Fabric 1.20.1 mod project with Fabric Loom 1.15.2, Gradle 9.2.1, JDK 21
  • fabric.mod.json with id emcessentials, depends on itemalchemy >=1.3.1
  • emcessentials.accesswidener for future access widening

Added — Items

  • Alchemical Matter — blue gem, uncommon rarity, mid-tier crafting component
  • Omnium Matter — purple gem, rare rarity, high-tier component
  • Alchemical Catalyst — orange orb, common rarity, base material
  • Compressed Philosopher's Stone — green orb, epic rarity, single-use
  • All items registered via ModItems using vanilla Fabric Registry.register()
  • Item models: item/generated with 16×16 PNG textures
  • English lang translations for all items

Added — Blocks (initial)

  • EMC Stabilizer — obsidian-tier blast-resistant decorative block
  • Alchemical Ore — diamond-level ore, drops 3–7 XP, needs iron pick
  • Deepslate Alchemical Ore — deepslate variant of alchemical ore
  • Power Flower — single decorative block, iron-tier, luminance 7
  • Miniature Sun — glowstone-tier full-brightness block, luminance 15
  • All blocks registered via ModBlocks with associated BlockItem
  • Block models: cube_bottom_top (EMC Stabilizer, Power Flower), cube_all (ores, Miniature Sun)
  • Blockstates: single-variant JSONs for all 5 blocks
  • Loot tables: all blocks drop themselves on break (survives explosion)
  • Mining tags: added to mineable/pickaxe, ores and stabilizer to needs_iron_tool
  • Block textures: 16×16 PNGs for all block faces (generated via Python)

Added — EMC HUD Display

  • Client-side HUD overlay rendering player's EMC in top-left corner
  • Smart positioning: below Sodium Extra FPS (line 1) and coordinates (line 2)
  • Human-readable formatting: 1,234 / 1.2M / 3.5B / 7.8T
  • Server-to-client sync via custom Fabric network packet (emc_sync / emc_request)
  • Client requests EMC every 20 ticks (1 second)
  • Server reads player EMC from Item Alchemy's EMCUtil.PLAYER.getEMC() via reflection
  • EMCEssentialsClient client initializer registered in fabric.mod.json

Added — EMC Commands

  • /emce help — lists all commands
  • /emce get <item> — looks up EMC value via EMCUtil.ITEM.getEMC() reflection
  • /emce set <item> <value> — saves custom EMC override to config
  • /emce remove <item> — removes a custom override
  • /emce reload — reloads emcessentials.properties from disk
  • /emce list — lists all custom EMC entries
  • /emce stats — counts total items and custom entries
  • Registered via CommandRegistrationCallback.EVENT

Added — EMC Config

  • config/emcessentials.properties for custom EMC values
  • Default config with vanilla reference values (coal: 128, diamond: 8192, netherite: 49152, etc.)
  • Load/save with Properties file format
  • Auto-creates default config on first launch
  • Full CRUD: get/set/remove custom values in memory + persist to disk

Added — EMC Auto-Registration

  • Auto-applies custom EMC values from config at startup via EMCUtil.ITEM.setEMC() reflection
  • Graceful fallback: logs warning if Item Alchemy not installed
  • Validation: checks item IDs exist in registry before applying
  • Error-tolerant: skips invalid entries, reports counts

Added — Asset Pipeline

  • 28KB placeholder mod icon (128×128 green diamond gradient)
  • en_us.json with translations for all items, blocks, commands, and container names
  • Full directory structure: models/item, models/block, blockstates, textures/item, textures/block, data/minecraft/tags/blocks