3. Keep mcipc for RCON, take block identifiers from mcwb#
Date: 2026-10-12
Status#
Accepted
Context#
mciwb talks to Minecraft through mcipc (an RCON client with a Python wrapper for every server command) and rcon (the underlying protocol implementation).
mcipc’s last release is 2.4.2 (2022) and its upstream repository is effectively unmaintained. rcon’s repository is archived. Both still install and import cleanly on Python 3.11-3.14.
mcipc’s command wrappers just build command strings, so they keep working on current Minecraft (26.x) releases.
mcipc’s
Itemenum, however, stops at Minecraft 1.16. Reading any newer block (deepslate, cherry, mangrove, pale oak, copper bulbs, …) viamcwb.get_block,graborIwb.get_blockraisedValueError.
Alternatives considered: forking mcipc, switching to a maintained async client
(aio-mc-rcon), or writing a small in-house RCON client. All of these would change
the Client object that mciwb exposes to users through get_client(), and its
tab-completable command methods are part of the learning experience.
Decision#
Keep mcipc and rcon, pinned to the last known-good releases (
mcipc==2.4.2,rcon==2.4.9).Use
mcwb.Itemeverywhere instead ofmcipc.rcon.enumerations.Item. It is generated from the block and item identifiers of a recent Minecraft release byscripts/generate_items.pyin mcwb, so it can be refreshed without any mcipc change. It is astrenum with the same member names as mcipc’s, so its members compare and hash equal to mcipc members and to plain"minecraft:..."strings.Until mcwb publishes a release that contains
mcwb.Item, depend on it as a git dependency pinned to a commit SHA (see the TODO inpyproject.toml).
Consequences#
mciwb.imports.Itemnow knows every block in the Minecraft release recorded inmcwb.MINECRAFT_VERSION. When a new Minecraft release adds blocks, regenerate the enum in mcwb and release it.mciwb cannot be published to PyPI while it uses a git dependency, because PyPI rejects direct URL dependencies. Switch to the released mcwb before the next mciwb release.
If mcipc or rcon stop working on a future Python version, replace them with a small RCON client that keeps the
Clientcommand-method interface.