All versions
Changed — EMC Interface rewritten to match Forge
Fixed — EMC Link
1.3.1
Release
EMC Essentials - ReFabricated 1.3.1last month 283
Compatibility
Minecraft: Java Edition
1.20.1
Platform
Fabric
Supported environments
Client and server
Changes
Changelog
v1.3.1 — Crafting Recipes + Forge Textures
Added — Crafting recipes for all items and blocks
- Arcane Tablet: Philosopher's Stone + Diamonds + Obsidian
- OP Fuel: Aeternalis Fuel surrounded by Mobius Fuel
- Power Flower MK1: EMC Collectors + EMC Repeaters + Alchemy Chest
- Power Flower MK2–MK6: Upgraded with higher-tier collectors + previous tier
- Miniature Sun: Glowstone + Nether Star
- EMC Link: EMC Cable + EMC Repeater
- EMC Interface: EMC Cables + Alchemy Chest + Obsidian
Changed — Textures imported from Project Expansion (NeoForge)
- Miniature Sun texture now uses Project Expansion's
sun.png - Arcane Tablet texture now uses Project Expansion's
arcane_transmutation_tablet.png - EMC Link texture now uses the "basic" tier
emc_linktexture from Project Expansion - All textures imported from
projectexpansion-1.21.1-1.0.6.jar
Changed
- Version bumped from
1.3.0to1.3.1 - Output jar:
emcessentials-reabricated-1.3.1.jar - Jar size increased to 146KB (added textures)
v1.3.0 — Power Flowers + Arcane Tablet
Added — Arcane Tablet (ported from Projex / Project EX by BruceDelta)
- Right-click to view your current EMC balance and known item count
- Uses
EMCUtil$PLAYER.getEMC()andPlayerRegisteredItemUtil.getItems()via reflection - EPIC rarity, max stack of 1
ArcaneTabletItemclass withgetName()returning translatable component- Texture directly from Projex jar (
assets/projex/textures/item/arcane_tablet.png)
Changed — Power Flowers now generate EMC to the owner's personal balance
- Adapted from Project Expansion's
BlockEntityPowerFlower+PowerFlowerCollectorpattern - Every 5 ticks, pushes generated EMC to the owner's personal EMC balance via
EMCManager.setEMCtoPlayer()+syncS2C()— same path as/emce bank add - Also pushes to adjacent Item Alchemy EMC storage via
EMCStorageUtilfor network compatibility PowerFlowerBlock.onPlaced()captures the placer's UUID as owner- Owner UUID persisted to NBT, survives chunk reloads
- Miniature Sun detection moved into
PowerFlowerBlockEntity.hasNearbySun()— scans loaded chunks within 5 blocks forMiniatureSunBlockEntity, applies 10× boost to generation rate
Changed
- Version bumped from
1.2.9to1.3.0 - Output jar:
emcessentials-reabricated-1.3.0.jar
v1.2.9 — Unlimited Item Quantities
v1.2.9 — Unlimited Item Quantities
Changed — Removed the 9999 per-slot quantity cap
getStack()now caps atInteger.MAX_VALUE(2,147,483,647) instead of 9999.- This is effectively unlimited — the only safeguard is against JVM int overflow when casting
longtoint. - 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 / itemEMCexceeds 2.1 billion, it caps atInteger.MAX_VALUE— a Java limitation, not an arbitrary limit.
Changed
- Version bumped from
1.2.8to1.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
slot0Bufferinstead 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
slot0Bufferand 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.7to1.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()returnsownerEMC / itemEMCcalculated fresh each call - Delta detection in
setStack(): Tom's reads items viagetStack(), extracts internally, then callssetStack()during sync with fewer items.setStack()compareslastShown[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 callsremoveStack(). removeStack()fallback: Still works for hoppers/pipes that use the standard extraction path.lastShowntracking: EachgetStack()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 usesgetStack()→ internal extraction →setStack()sync. The delta detection insetStack()bridges this gap. - Uses
EMCManager.setEMCtoPlayer()+syncS2C()for ALL EMC modifications — the exact same code path as the proven/emce bankcommands. - Removed all
EMCUtil$PLAYER.incrementEMC/decrementEMC/setEMCwrappers that were masking failures.
Changed
- Version bumped from
1.2.6to1.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 viagetStack(), processes extraction internally, then callssetStack()during sync. NoremoveStack()call meant no EMC deduction was ever triggered. - Fix: The EMC Interface now uses a physical 54-slot
DefaultedListbuffer. Every 5 ticks, quantities are recalculated fromownerEMC / itemEMCdirectly 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 callsadjustEMC(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 andremoveStack()useEMCManager.getEmcFromPlayer()/setEMCtoPlayer()/syncS2C()directly — the exact same code path as the working/emce bankcommands. - Removed all intermediate
EMCUtil$PLAYERwrappers that were masking failures.
Changed — Version bumped
1.2.4→1.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 -= costwas immediately overwritten byrefreshOwnerEMC()which re-read the unchanged value from Item Alchemy. - Fix: Switched to read-current → subtract → write-back pattern using
getEMC()+setEMC()instead ofdecrementEMC(). 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 (YarngetBlockEntityMap, MojmapgetBlockEntities) - 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()andimportFromAdjacent()methods from EMC Interface — they were never called but referencedslotCacheandaddToOwnerEMC()
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.1to1.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
emcKnownItemswas only populated insidetick(), which runs server-side only. Client queries (Jade, JEI, Tom's, hoppers) foundnull→size()returned 0 → no items displayed.- Added
ensureKnownItemsLoaded()— called fromsize(),isEmpty(),getStack(), andremoveStack()before any cache access. - Cache populates immediately on first access via
Registries.ITEMscan, not waiting for a server tick. - Uses
emcKnownItemsLoadedflag instead ofnullcheck for reliable state tracking.
Fixed — Jade compatibility for EMC Interface
canPlayerUse()changed fromfalsetotrue— some inventory readers check this before accessing virtual items.- Removed
stack.setCustomName()fromgetStack()andremoveStack()— it hardcoded English names and wasn't needed since real Item instances already have correct translatable names via their registry entries. - Added
toUpdatePacket()andtoInitialChunkDataNbt()override to sync block entity data to clients, required by some client-side mods.
Fixed — Custom item name display in Jade
ArcaneTabletItemandOPFuelItemnow extend customItemsubclasses withgetName()returning translatable text components viaText.translatable().getDefaultStack()sets the display name via NBT so creative tab / JEI listings show the correct name immediately.
Changed
- Version bumped from
1.0.7to1.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 viastack.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.6to1.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 returnsemcKnownItems.size()— every known EMC item is a slot. No more 54-slot rotating buffer.getStack(slot)dynamically returns the item with a count equal tocachedAvailableEMC / 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.cachedAvailableEMCrefreshed every 5 ticks from adjacent EMC storage viaEMCStorageUtil.getNearEMCStorages().emcKnownItemsrefreshed every 5 seconds fromRegistries.ITEM.- Removed the old 54-slot DefaultedList buffer — inventory is now entirely virtual.
Changed
- Version bumped from
1.0.5to1.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-interfacemod 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+EMCInterfaceBlockEntityregistered inModBlockEntities.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
onUseopensNamedScreenHandlerFactory— 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/getStoredEMCreflection 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_importerblock style) - README and CHANGELOG now reference "EMC Essentials Forge Mod" instead of "modpack"
- Version bumped from
1.0.2to1.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.generalviaFabricItemGroup.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.1to1.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()inEMCEssentialsClient - Delta text renders right after main EMC value on the same line, same color-aware positioning
EMC Bridge Terminal
- New block
emcessentials:emc_bridge_terminalwith 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()andaddEMC() - NBT-persistent stored EMC and tier fields
- Custom
PowerFlowerBlockclass extendingBlock+BlockEntityProvider
Miniature Sun Block Entity
- Ticking block entity scans loaded chunks within 5-block radius every 10 ticks
- Detects Item Alchemy's
EMCCollectorTilevia class name reflection - Applies 10× boost by injecting extra EMC via
addEMC()on each tick - Also boosts
PowerFlowerBlockEntityoutput by 10× directly - Uses chunk-based iteration (
WorldChunk.getBlockEntities()) for reliable neighbor scanning
Block Entity Registration
ModBlockEntitiesclass with registry forPOWER_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_mk2throughmk6 - Block models:
emc_bridge_terminal(cube_bottom_top),power_flower_mk2–mk6 - 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_terminaladded tomineable/pickaxe
Lang Entries
block.emcessentials.emc_bridge_terminal,container.emcessentials.emc_bridge_terminalblock.emcessentials.power_flower_mk2throughpower_flower_mk6
Changed
- Version bumped from
1.0.0to1.0.1ingradle.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()withclient.options.debugEnabled - Removed access to private
reducedDebugInfofield inGameOptions
- Replaced
- Command registration — changed method reference to lambda to match Fabric API's 3-parameter
CommandRegistrationCallbacksignature - 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 viaWorldChunk.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.jsonwith idemcessentials, depends onitemalchemy >=1.3.1emcessentials.accesswidenerfor 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
ModItemsusing vanilla FabricRegistry.register() - Item models:
item/generatedwith 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
ModBlockswith associatedBlockItem - 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 toneeds_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 EMCEssentialsClientclient initializer registered infabric.mod.json
Added — EMC Commands
/emce help— lists all commands/emce get <item>— looks up EMC value viaEMCUtil.ITEM.getEMC()reflection/emce set <item> <value>— saves custom EMC override to config/emce remove <item>— removes a custom override/emce reload— reloadsemcessentials.propertiesfrom 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.propertiesfor custom EMC values- Default config with vanilla reference values (coal: 128, diamond: 8192, netherite: 49152, etc.)
- Load/save with
Propertiesfile 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.jsonwith 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
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:7BQ973I1:Gb0kO8PK"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:7BQ973I1:Gb0kO8PK"
}

