跳到正文

Warvior CC:Sable wired fix

作者:WarDreg

Server-side fix that keeps CC:Tweaked cables and attached modems intact while Sable moves ship blocks into a sub-level (MC 1.21.1 / NeoForge). Open source, MIT.

收藏

介绍

中文介绍正在准备中,下面暂时显示原文。

🇬🇧 English · 🇷🇺 Русский

A server-side NeoForge 1.21.1 mod that keeps CC:Tweaked (ComputerCraft) cables, attached wired
modems and wireless modems intact while Sable moves a ship’s blocks into and out of a sub-level.
Open source (MIT): https://github.com/smirnovmihail1357-netizen/warvior-ccsable-wired-fix — full docs:
README.md
(English) ·
README.ru.md
(Русский).

Do I still need this mod?

Verified by decompiling the current upstream builds, not by reading changelogs:

  • Sable 2.0.6 (latest 1.21.1 build, 2026-10-03) — nothing is fixed. AssemblyTransform.apply(BlockState) is byte-for-byte identical to Sable 1.2.2 (state.rotate(this.rotation), which knows nothing about multipart blocks), and SubLevelAssemblyHelper.moveBlocks still places blocks with raw chunk.setBlockState(...) and only marks/notifies them afterwards — 2.0.6 added more neighbour notifications rather than fixing the ordering. Sable’s only CC:Tweaked compatibility mixin is WirelessNetworkMixin (a distance redirect); it touches no cable, modem or support logic.
  • CC:Tweaked 1.120.2 (latest 1.21.1 build, 2026-08-08) — CableBlock.updateShape, WirelessModemBlock.updateShape, blockTick and connectionsChanged are all still present, so every injection point of this mod is still valid, and the problem is still there.
  • CC: Sable (the addon) does not fix it either: its changelogs from 1.2.1 to 1.3.4 are about Lua blocks and math, not about cables or modems.

What this mod does

  • Wraps the Sable transfer window (SubLevelAssemblyHelper.moveBlocks) so the mod knows when blocks are mid-flight.
  • Defers CableBlock.updateShape and WirelessModemBlock.updateShape during that window: CC:Tweaked would otherwise rewrite the cable and delete the attached modem because half its neighbours are temporarily air.
  • Rotates the computercraft:cable modem enum and its six connection flags inside Sable’s AssemblyTransform.apply, which vanilla rotation leaves untouched — otherwise the modem ends up pointing through the hull.
  • Re-settles and refreshes the network 1, 2, 10 and 40 ticks after the transfer: updateFromNeighbourShapes, setChanged, sendBlockUpdated, updateNeighborsAt, a chunk scan and a deduplicated 5×5×5 area scan.
  • Re-registers wireless modems with WirelessNetwork and rebuilds the wired graph on CableBlockEntity / WiredModemFullBlockEntity.

0.8.0 — what was broken in 0.7.3

  • neoforge.mods.toml pinned sable = [1.2.2,1.2.3), so 0.7.3 refused to load with any Sable 2.x — that is every Sable released since 2026-06-13. The range is now [1.2.2,2.1), which is safe: the two mixin targets are identical in 1.2.2 and 2.0.6.
  • The wired network refresh never actually ran: it looked for a field named connectionsFormed, and that name exists in no CC:Tweaked 1.21.1 build (checked 1.113.1 through 1.120.2 — the field is refreshConnections). The refresher now tries refreshConnections first, keeps connectionsFormed as a fallback, uses scheduleConnectionsChanged / queueRefresh when available, and logs one warning if it fails instead of staying silent. The wireless refresh always worked.
  • All four mixins used require = 1 and the mixin config was "required": true, so a future rename in Sable or CC:Tweaked would abort server startup. They are now require = 0 with "required": false and defaultRequire: 0: the mod degrades to “no help” with a warning instead of crashing the server.
  • The mod now prints at startup which Sable and CC:Tweaked versions it found and what the wired refresher resolved, so you can tell from latest.log whether it is actually working.

Requirements

NeoForge 21.1.x on Minecraft 1.21.1, Sable 1.2.2 … 2.0.x, CC:Tweaked 1.116+. Install it on the
server: the mod registers no client code, and Sable performs the transfer server-side. CC: Sable is not
a dependency.


Русский

Серверный мод для NeoForge 1.21.1, который сохраняет кабели, подключённые проводные модемы и
беспроводные модемы CC:Tweaked (ComputerCraft) целыми, пока Sable переносит блоки корабля в
суб-уровень и обратно. Открытый код (MIT):
https://github.com/smirnovmihail1357-netizen/warvior-ccsable-wired-fix — полная документация:
README.md
(English) ·
README.ru.md
(Русский).

Нужен ли этот мод сейчас

Проверено декомпиляцией актуальных сборок, а не по changelog:

  • Sable 2.0.6 (последняя сборка для 1.21.1, 2026-10-03) — ничего не исправлено. AssemblyTransform.apply(BlockState) байт-в-байт совпадает с Sable 1.2.2 (state.rotate(this.rotation), который ничего не знает о многочастных блоках), а SubLevelAssemblyHelper.moveBlocks по-прежнему ставит блоки прямым chunk.setBlockState(...) и лишь потом их отмечает и уведомляет — в 2.0.6 уведомлений стало больше, порядок не починен. Единственный mixin Sable ради CC:Tweaked — WirelessNetworkMixin (подмена расстояния); кабели, модемы и проверку опоры он не касается.
  • CC:Tweaked 1.120.2 (последняя сборка для 1.21.1, 2026-08-08) — CableBlock.updateShape, WirelessModemBlock.updateShape, blockTick и connectionsChanged на месте, то есть все точки внедрения этого мода актуальны и проблема никуда не делась.
  • CC: Sable (надстройка) этого тоже не чинит: её changelog с 1.2.1 по 1.3.4 — про Lua-блоки и математику, не про кабели и модемы.

Что делает мод

  • Оборачивает окно переноса Sable (SubLevelAssemblyHelper.moveBlocks), чтобы мод знал, когда блоки в пути.
  • Откладывает CableBlock.updateShape и WirelessModemBlock.updateShape в это окно: иначе CC:Tweaked пересобирает кабель и удаляет подключённый модем, потому что половина соседей временно — воздух.
  • Докручивает перечисление modem и шесть флагов соединения у computercraft:cable внутри AssemblyTransform.apply — ванильный поворот их не трогает, и модем смотрел бы сквозь обшивку.
  • Досаживает и обновляет сеть через 1, 2, 10 и 40 тиков после переноса: updateFromNeighbourShapes, setChanged, sendBlockUpdated, updateNeighborsAt, обход чанка и дедуплицированный обход области 5×5×5.
  • Перерегистрирует беспроводные модемы в WirelessNetwork и перестраивает проводной граф у CableBlockEntity / WiredModemFullBlockEntity.

0.8.0 — что было сломано в 0.7.3

  • neoforge.mods.toml пинил sable = [1.2.2,1.2.3), поэтому 0.7.3 отказывался грузиться с любым Sable 2.x — а это весь Sable, вышедший после 2026-06-13. Диапазон теперь [1.2.2,2.1), и это безопасно: обе цели mixin идентичны в 1.2.2 и 2.0.6.
  • Перестройка проводной сети никогда не выполнялась: искалось поле connectionsFormed, которого нет ни в одной сборке CC:Tweaked для 1.21.1 (проверено с 1.113.1 по 1.120.2 — поле называется refreshConnections). Теперь сначала ищется refreshConnections, connectionsFormed остаётся запасным, используются scheduleConnectionsChanged / queueRefresh, а при неудаче пишется одно предупреждение вместо молчания. Беспроводной refresh работал всегда.
  • Все четыре mixin’а имели require = 1, а конфиг — "required": true, поэтому будущее переименование в Sable или CC:Tweaked прерывало бы запуск сервера. Теперь require = 0, "required": false и defaultRequire: 0: мод деградирует до «не помогает» с предупреждением, а не роняет сервер.
  • Мод теперь печатает при запуске, какие версии Sable и CC:Tweaked найдены и что реально разрешил проводной refresher, так что можно увидеть в latest.log, работает ли он.

Требования

NeoForge 21.1.x на Minecraft 1.21.1, Sable 1.2.2 … 2.0.x, CC:Tweaked 1.116+. Ставить на сервер:
мод не регистрирует клиентского кода, и Sable делает перенос на сервере. CC: Sable зависимостью не
является.

常见问题

Warvior CC:Sable wired fix 支持哪些 Minecraft 版本?

Warvior CC:Sable wired fix 支持 Minecraft Java 版 1.21.1,可用的加载器:NeoForge。下载时注意选择和你游戏版本一致的文件。

Warvior CC:Sable wired fix 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:仅服务端。

评论

登录后评论和评分

WarDreg 的其他作品

查看全部 →