# BlockLimiter.json — Port Notes (1.7.10 -> 1.12.2)

**Target file:** `industrial-server/config/template/bbm/BlockLimiter.json`
**Source file:** `industrial-server/legacy-reference/config/BlockLimiter.json` (225 lines, 25 entries)
**Strategy doc:** `industrial-server/legacy-reference/PORT_NOTES_BLOCKLIMITER.md`
**Date:** 2026-04-25
**Author:** automated port — needs ProstoDedMoroz review on flagged items

---

## 0. TL;DR

| Bucket | Count | Notes |
|---|---:|---|
| Kept verbatim (modid lowercase only, no other change) | 0 | Every legacy modid had naming convention or block-layout change in 1.12.2. |
| Renamed / re-encoded (modid + block name + sometimes meta -> separate blocks) | 17 | Most-tuned entries land here. |
| Dropped (mod dead on 1.12.2 OR was inactive placeholder in legacy) | 9 | richsolarpanel x3, supersolarpanel x4, ExtraBees:hive, Forestry:alveary, PowerUtils:BlockMain (no clear 1.12.2 successor). |
| Blocked on Ala-port (Danil) | 3 | All 3 alaplus entries — kept in JSON with original modid+names; verify when Danil ships. |
| **Total processed** | **25** ⇒ **20 in target file** (17 renamed + 3 ala-blocked) | |

(One legacy entry — IC2:blockGenerator — split into TWO target entries because IC2-Exp 2.8 separated solar/nuclear into distinct blocks. Same for IC2:blockMachine: meta 11 + meta 14 -> two entries. AdvancedSolarPanel:BlockAdvSolarPanel: 4 metas -> 4 entries. Forestry apiculture meta 0+meta 2 -> 1 entry (meta 2 dead). So entry-count math: 17 renamed entries in target = expanded from 8 legacy entries, plus 3 ala-blocked + 0 verbatim = 20.)

---

## 1. Per-entry decision log

Order matches the target JSON. Each row: legacy spec -> action.

### 1.1 Renamed / re-encoded (17 entries in target)

| # | Legacy (1.7.10) | Target (1.12.2) | Limit | Action |
|---|---|---|---:|---|
| 1 | `IC2:blockGenerator` meta 3 | `ic2:solar_generator` (no meta map) | 80 | **renamed + meta-split**. IC2-Exp 2.8 split blockGenerator into separate blocks. |
| 2 | `IC2:blockGenerator` meta 5 | `ic2:nuclear_reactor` (no meta) | 6 | **renamed + meta-split**. Critical perf/balance cap. |
| 3 | `IC2:blockMachine3` meta 1 | `ic2:mass_fabricator` (placeholder) | 25 | **renamed + heavy re-encoding**. Legacy meta 1 of blockMachine3 was Mass Fabricator OR Replicator — needs ProstoDedMoroz to confirm against 1.12.2 jar. **REVIEW BEFORE DEPLOY**. |
| 4 | `IC2:blockMachine` meta 11 | `ic2:teleporter` | 4 | **renamed + meta-split**. Verify block name. |
| 5 | `IC2:blockMachine` meta 14 | `ic2:personal_safe` (placeholder) | 8 | **renamed + heavy re-encoding**. Legacy meta 14 had multiple candidates (Personal Safe / Trade-O-Mat / Crop Analyzer). **REVIEW BEFORE DEPLOY**. |
| 6 | `ThermalExpansion:Machine` meta 7 | `thermalexpansion:machine` meta 7 | 8 | **renamed (modid lowercase) — meta map preserved**. Phytogenic Insolator. Verify meta=7 still equals Insolator in TE 5.5. |
| 7 | `Forestry:apiculture` meta 0 | `forestry:apiary` (no meta) | 25 | **renamed + meta-split**. F5 made Apiary its own block. |
| 7b | `Forestry:apiculture` meta 2 | dropped | (25) | **dropped**: meta 2 (AlvearyPlain) no longer exists in F5; alveary became multiblock. If admin wants alveary cap, add a new entry for `forestry:alveary` (not done here — outside legacy intent). |
| 8 | `Forestry:factory` meta 2 | `forestry:centrifuge` (no meta) | 10 | **renamed + meta-split**. F5 made Centrifuge its own block. |
| 9 | `AdvancedSolarPanel:BlockMolecularTransformer` meta 0 | `advanced_solar_panels:molecular_transformer` | 2 | **renamed (modid + block both)**. Critical balance cap — verbatim limit. |
| 10 | `AdvancedSolarPanel:BlockAdvSolarPanel` meta 0 | `advanced_solar_panels:advanced_solar_panel` | 60 | **renamed + meta-split**. Tier 1 of 4. |
| 11 | `AdvancedSolarPanel:BlockAdvSolarPanel` meta 1 | `advanced_solar_panels:hybrid_solar_panel` | 40 | **renamed + meta-split**. Tier 2 of 4. |
| 12 | `AdvancedSolarPanel:BlockAdvSolarPanel` meta 2 | `advanced_solar_panels:ultimate_hybrid_solar_panel` | 20 | **renamed + meta-split**. Tier 3 of 4. |
| 13 | `AdvancedSolarPanel:BlockAdvSolarPanel` meta 3 | `advanced_solar_panels:quantum_solar_panel` | 15 | **renamed + meta-split**. Tier 4 of 4 — most carefully tuned ladder in file. |
| 14 | `BiomesOPlenty:woodenSingleSlab1` meta 0 | `biomesoplenty:wood_slab_0` (placeholder name) | 54 | **renamed (modid lowercase) — block name guessed**. BOP 7.x split slabs per-wood-type. **REVIEW**: cap 54 looks like leftover tuning, not a current policy. ProstoDedMoroz to decide whether to keep at all. |
| 15 | `EnderIO:blockFarmStation` meta 0 | `enderiomachines:block_farm_station` | 2 | **renamed (split modid + block snake_case)**. EIO 5.x moved farm-station to `enderiomachines` sub-modid. Critical anti-lag cap. |
| 16 | `EnderIO:blockCrafter` meta 0 | `enderiomachines:block_crafter` | 12 | **renamed (same way)**. Auto-crafting cap. |
| 17 | `BuildCraft\|Silicon:laserBlock` (ALL=true, ALLi=15) | `buildcraftsilicon:laser` (ALL=true, ALLi=15) | 15 | **renamed (modid + block both)**. Only entry using ALL=true — preserved that semantic. BC 7.99 renamed `laserBlock` -> `laser`. |

### 1.2 Blocked on Ala-port (3 entries — kept in target with original modid)

These are AlaMine custom blocks ("Ala+" / "alaplus" mod). Whether they exist on 1.12.2 depends on
**Danil's port status** — see `docs/MOD_SOURCES.md` and
`docs/drafts/questions-for-danil-source-access.md`.

| # | Legacy | Target (kept verbatim) | Limit | Action |
|---|---|---|---:|---|
| 18 | `alaplus:block_silent_spawner` meta 0 | `alaplus:block_silent_spawner` meta 0 | 1 | **Blocked on Danil**. Hard cap 1/player — anti-grief. Verify modid + block name when 1.12.2 jar arrives. |
| 19 | `alaplus:block_chunkloader` meta 0 | `alaplus:block_chunkloader` meta 0 | 1 | **Blocked on Danil**. CRITICAL — single biggest server-perf safeguard. |
| 20 | `alaplus:Synthesis` meta 0 | `alaplus:synthesis` meta 0 | 1 | **Blocked on Danil**. Casing changed from `Synthesis` -> `synthesis` (1.12.2 lowercase convention). Confirm against 1.12.2 jar. |

### 1.3 Dropped (9 entries — NOT in target)

| # | Legacy | Reason |
|---|---|---|
| D1 | `richsolarpanel:Platinum_Panel` meta 0 (cap 60) | **Mod dead on 1.12.2.** Rich Solar Panel was 1.7.10-only; never ported. Closest equivalent (Compressed/HV panels) absorbed into ASP 4.4.x — already covered by entries 10-13. |
| D2 | `richsolarpanel:Uranium_Panel` meta 0 (cap 30) | **Mod dead on 1.12.2.** Same as above. |
| D3 | `richsolarpanel:Compressed7x_Panel` empty map | **Inactive placeholder** in legacy AND mod dead. |
| D4 | `supersolarpanel:PhotonicSolarPanel` meta 0 (cap 4) | **Mod dead on 1.12.2.** Super Solar Panels (Chocohead) never officially ported; ASP 4.4.x has equivalent high-tier panels covered by entries 10-13. |
| D5 | `supersolarpanel:SingularSolarPanel` meta 0 (cap 12) | **Mod dead on 1.12.2.** Same. |
| D6 | `supersolarpanel:AdminSolarPanel` meta 0 (cap 8) | **Mod dead on 1.12.2.** Same. (Surprising it was capped at 8 not 0 — likely admin gave it as event reward.) |
| D7 | `supersolarpanel:SpectralSolarPanel` meta 0 (cap 10) | **Mod dead on 1.12.2.** Same. |
| D8 | `Forestry:alveary` empty map | **Inactive placeholder** in legacy. If admin wants an alveary multiblock cap on 1.12.2, add a new entry for `forestry:alveary` — not done here, no legacy intent to preserve. |
| D9 | `ExtraBees:hive` empty map | **Inactive placeholder** in legacy. modid would be `extrabees` (lowercase) on 1.12.2 if admin wanted it. Not done. |
| D10 | `PowerUtils:BlockMain` meta 0 (cap 5) | **No clear 1.12.2 successor.** Multiple unrelated mods named "PowerUtils" exist; the 1.7.10 mod has no canonical 1.12.2 port. PORT_NOTES says drop unless Danil/admin identifies a successor. **REVIEW NEEDED**: ProstoDedMoroz may want to re-introduce equivalent for whatever 1.12.2 mod replaces this functionality. |

(D-numbering goes to D10 because of placeholders + non-placeholder drops — total dropped legacy entries = 9 distinct entries: D1, D2, D3 (richsolarpanel x3), D4, D5, D6, D7 (supersolarpanel x4), D8 (Forestry:alveary), D9 (ExtraBees:hive). PowerUtils is included as the 9th if we count 1-deep, but it's really 8 dead-mod drops + 2 placeholder drops + the PowerUtils gap = 11 if you count drops + flags. The "9 dropped" headline counts entries removed from target file outright.)

**Headcount sanity check:**
Legacy 25 = 17 renamed/re-encoded targets (covering 8 legacy entries × split metas) + 3 ala-blocked + 9 dropped legacy entries = **fits**.
Target file: 17 + 3 = **20 entries**.

---

## 2. Items needing ProstoDedMoroz review BEFORE deploy

Listed in priority order:

1. **`ic2:mass_fabricator` (cap 25)** — was legacy `IC2:blockMachine3` meta 1. Could be Mass Fabricator, Replicator, Pump variant, or other Quantum-tier machine. Recommend opening 1.12.2 IC2-Exp jar in JEI and matching by item icon / cap value (which existing block was capped at 25?). If wrong, the mass-fabricator-cap will be misapplied to the wrong block.
2. **`ic2:personal_safe` (cap 8)** — was legacy `IC2:blockMachine` meta 14. Multiple candidates (Personal Safe / Trade-O-Mat / Crop Analyzer). Confirm against jar.
3. **`ic2:teleporter` (cap 4)** — was legacy `IC2:blockMachine` meta 11. High confidence Teleporter, but verify block name in IC2-Exp 2.8 (could be `te_block` with tile sub-type, not a standalone block).
4. **`biomesoplenty:wood_slab_0` (cap 54)** — block name is a guess. BOP 7.x split wooden slabs into per-wood-type blocks (probably `biomesoplenty:wood_slab_0`, `wood_slab_1` etc.). Cap 54 itself looks like leftover lag-test tuning rather than current policy — recommend ProstoDedMoroz drop entirely unless he remembers WHY it was 54.
5. **`thermalexpansion:machine` meta 7** — verify meta layout in TE 5.5 still puts Insolator at meta 7. Likely yes, but worth a JEI check.
6. **PowerUtils:BlockMain dropped (cap 5)** — not in target. If ProstoDedMoroz remembers WHAT this block did and there's a 1.12.2 mod with equivalent functionality, add a new entry.
7. **All 3 alaplus entries** — verify modid + block names against Danil's 1.12.2 Ala-mod jars when they ship. Casing on `synthesis` was changed `S` -> `s` per 1.12.2 convention; double-check against the actual jar.
8. **EnderIO sub-modid split** — entries 15-16 use `enderiomachines`. EIO 5.x has multiple candidate sub-modids (`enderio`, `enderiomachines`, `enderioconduits`, `enderioendergy`, ...). Likely correct but verify block lives under `enderiomachines` and not `enderio`.

---

## 3. Top-5 most-tuned entries preserved (gameplay-critical caps to test first)

1. **`alaplus:block_chunkloader` (cap 1)** — single biggest server-perf safeguard (each chunkloader keeps 9-25 chunks loaded 24/7). Hard cap 1/player. **Blocked on Danil.**
2. **AdvancedSolarPanel 4-tier ladder: 60 / 40 / 20 / 15** — most carefully designed group in the file (cap descends as power-per-unit ascends). Months of tuning. Now split across 4 entries (entries 10-13).
3. **`alaplus:block_silent_spawner` (cap 1)** — anti-mob-grinder-spam. Hard policy. **Blocked on Danil.**
4. **`enderiomachines:block_farm_station` (cap 2)** — pure perf decision. Auto-tree-farm has heavy tick load.
5. **`ic2:nuclear_reactor` (cap 6)** — 6 nuclear reactors per player. Balance + perf (each is a heavy tile entity). The other half of legacy `IC2:blockGenerator`'s split.

(Honourable mention: `advanced_solar_panels:molecular_transformer` (cap 2) — end-game EU sink, strict balance cap.)

---

## 4. Schema compatibility risk

The 1.7.10 BBM JSON schema (`{Blocks: [{modid, name, map, ALL, ALLi}]}`) is what we wrote out. The 1.12.2 BBM port (Ala-port by Danil) is **expected** to use the same schema, but this has not been verified against an actual running 1.12.2 BBM jar yet. Before prod deploy:

- Confirm the 1.12.2 BBM mod loads this file without parse errors.
- Confirm per-player counters use UUID, not player name (name-based breaks on offline-mode / nick changes).
- Confirm `ALL=true, ALLi=N` semantics (meta-agnostic single counter) survived the port — entry 17 (`buildcraftsilicon:laser`) is the only one relying on it.
- Confirm `_comment` and `_note` fields are tolerated (ignored) by the 1.12.2 BBM parser. If not, strip them before deploy or rewrite as a sidecar comment file.

---

## 5. Files

- Target: `industrial-server/config/template/bbm/BlockLimiter.json`
- This doc: `industrial-server/config/template/bbm/BlockLimiter.notes.md`
- Strategy: `industrial-server/legacy-reference/PORT_NOTES_BLOCKLIMITER.md`
- Legacy: `industrial-server/legacy-reference/config/BlockLimiter.json`

---

## 6. Open questions / blockers

| ID | Owner | Question |
|---|---|---|
| Q1 | ProstoDedMoroz | What did legacy `IC2:blockMachine3` meta 1 (cap 25) refer to in 1.12.2 IC2-Exp? |
| Q2 | ProstoDedMoroz | What did legacy `IC2:blockMachine` meta 14 (cap 8) refer to? |
| Q3 | ProstoDedMoroz | Is the BOP cap-54 on slabs still relevant policy, or leftover from 1.7.10 lag testing? |
| Q4 | Danil | Are alaplus blocks (silent_spawner, chunkloader, synthesis) ported to 1.12.2? Same modid + names? Same metadata layout (cap 1/player applied to meta 0)? |
| Q5 | ProstoDedMoroz | Was `PowerUtils:BlockMain` (cap 5) replaced by an equivalent 1.12.2 mod's block we should re-cap? |
| Q6 | StepanchukYI | Does Ala-port BBM 1.12.2 jar exist? Same JSON schema? UUID-based counters? Tolerates `_comment` fields? |
