The client script used 'NetworkEvents.fromServer', which doesn't exist in
KubeJS 1.21.1 (error: Unknown event). The correct receive event is
'NetworkEvents.dataReceived'. This makes the Protocol Tome actually open the
FTB Quests book on right-click.
- Worldgen (both packs): Terralith 2.6.2, Tectonic 3.0.26, Continents 1.1.12
(realistic continent-based overworld; applies to NEW worlds)
- Client: bundle MakeUp Ultra Fast shaderpack (LGPL) + Vanilla Live resource
pack (CC-BY-SA), force-enabled via Resource Pack Overrides
- FTB Quests: add Protocol Tome starter item (given on first login) that opens
the quest book via KubeJS network -> FTBQuestsClient.openGui(); + lang keys
- Optimize: add Lithium 0.15.4 (NeoForge 1.21.1) to both packs
- Docs: mods.md updated with worldgen/shader/resource/quest notes
Add an FTB Quests 'The Dark Photon Protocol' chapter that guides players
while the KubeJS advancement tree stays the primary progression.
Design (per user): FTB provides guidance/onboarding; advancements own the
actual progression. Quests auto-complete on the same triggers as the
advancements (item obtained / dimension entered) so there's no double
friction.
Chapter 'chapter_dark_photon_protocol.snbt' - 10 quests mirroring the phase
tree:
First Steps (Corruption Tide onboarding) -> The Signal -> The Core ->
The Seal -> The Lattice -> The Legacy, then branches: Through the Doors /
The Wound / The Answer / Per Spatium.
Tasks: item tasks (scicraft items) + dimension tasks (Limbo, Void, Othersides,
Stellaris moon). Rewards: XP + 2 starting Photon Fragments on First Steps.
Titles/descriptions stored in lang/en_us/ translation file using FTB's
<objectType>.<id>.<subkey> key format (chapter.<id>.title, quest.<id>.quest_desc).
Format: FTB Quests 1.21 uses the marhali JSON5 format (comma-separated
properties) - validated with the json5 parser. Files ship in both client and
server packs (FTB quest progress is server-authoritative).
data.snbt + chapter_groups.snbt are auto-generated by FTB Quests on first
load if absent.
Three server scripts each declared 'const SC' at top level, but KubeJS 2101
shares a single global scope across all server scripts → 'redeclaration of
const SC' TypeError.
Rename per-file to unique consts:
- 01_corruption_tide.js → const TIDE_SC
- 02_events.js → const EVENTS_SC
- 03_recipes_tags.js → const RECIPES_SC
(The IP warnings in the log — Iris portal artifacts + HAR 1010 wrong-mods —
are informational from the IPSable fork, not errors.)
FATAL fix — mekanismcovers Sodium mixin crash:
- mekanismcovers 1.3-BETA targets an old Sodium BlockRenderer API that
doesn't exist in Sodium 0.8.13 → 'No refMap loaded' InjectionError.
- Add config/mekanismcovers.json with disableAdvancedCoverRendering=true
(the mod's documented workaround for Sodium/Iris/Embeddium crashes).
Also set enableShaderCompatibleRendering=true.
KubeJS 2101.x API migration (global assignment no longer allowed):
- Remove 00_lore.js (it only set global.SCICRAFT, which is now forbidden)
- Inline the config object into 01_corruption_tide/02_events/03_recipes
(global.SCICRAFT → local const SC per script)
- Remove unused 'const SC = global.SCICRAFT' from registry_blocks.js
LootJS 3.x API migration:
- addEntityLootModifier → addEntityModifier (04_loot.js, 7 call sites)
Pack validates: client 140 / server 118 mods, 57 story keys.
Root cause: lithostitched (worldgen library) was marked 'server' side, so it
was excluded from the mrpack. But reintegrated_chipped and waystones ship
worldgen JSON referencing lithostitched's custom registry keys
(lithostitched:random_block, condition, block_swap, etc.). The singleplayer
integrated server runs inside the client and fails to parse those → crash.
Fixes:
- client_pack: lithostitched + lootjs → side 'both' (needed by singleplayer
integrated server for worldgen + 04_loot.js LootJS)
- doctor-who-client-mod → side 'client' (is client-only)
Server pack hygiene (client-only mods removed so dedicated server only
gets what it needs):
- Remove athena-ctm, simply-tooltips, badoptimizations, entityculling,
immediatelyfast, inventory-profiles-next, journeymap-integration,
just-enough-mekanism-multiblocks, libipn, stellaris-stellarview-compat,
stellar-view-mixin-renderer, stellarview, the-doctor-who-client-mod
- (131 → 118 server mods)
Add .gitignore for crash logs / pack build artifacts (cleanup).
Verified: client 140 mods, server 118 mods, all validate; 57 story keys.
Both packs now support singleplayer + dedicated server with correct sides.
- Remove .unbreakable() from void_stabilizer item (not valid on
ItemBuilder; KubeJS forbids it)
- Remove explicit 'basic' type from quantum_lattice block creation
(defaults to basic; explicit caused unknown type error)
- Replace Immersive Portals 6.0.7 with IPSable 0.5.0
(r2smith141/IPSable) — a purpose-built fork that resolves the
@Redirect conflict on Entity::collide between IP and Sable
- Fork has 23 collision-handling classes vs IP's 18 (5 extra for
Sable compat bridge)
- Version match: Sable 2.0.5 ✓, Create 6.0.10 ✓, Aeronautics 1.3.1 ✓,
Sodium 0.8.x ✓, Iris 1.8.x ✓
- This fixes both the original worldportal→sable and the
IP→sable mixin conflicts without removing any mods
- Remove Embeddium 1.0.15 (breaks Iris, Iris-FLW-Compat, and Sable's
embedded Veil — all require Sodium 0.8.x API)
- Re-add Sodium 0.8.13-beta.2 (same version used before, verified
compatible with all three)
- World Portal removal from prior commit stays (fixes the original
sable mixin conflict)
- Pack validates: 140 client / 131 server mods, 57 story keys
- Remove worldportal (redundant: IP 6.0.7 + Dimensional Doors already provide
portal mechanics; zero lore/story impact — not referenced anywhere in the
pack's KubeJS scripts, advancements, datapacks, or story files)
- Swap Sodium 0.8.13-beta.2 → Embeddium 1.0.15 (NeoForge-native fork with
better mod compatibility; resolves the mixin conflict with sable 2.0.5)
- Root cause: worldportal EntityLMixin (priority 750) and sable EntityMixin
(priority 1000) both inject into Entity::getRelativePortalPosition. Sable is
required by Create Aeronautics; worldportal was the redundant mod.
- Verified: all 16 Create addons at latest versions, pack validates (140 client
/ 131 server mods), story generation OK (57 keys)