Case study
Bravo: a reverse-engineered Minecraft server
Reimplements the server side of Minecraft’s Alpha- and Beta-era multiplayer in Python on Twisted; its documentation calls it a reverse-engineered implementation written from scratch, credits network traffic dumps and says general Minecraft data went to a community wiki. The final 2.0 release speaks the 1.4.x client protocol for login, chunk transfer, entities, server-side inventories, lighting, physics and Anvil saves, while deliberately changing behaviour such as chunk loading and item stacking. A pluggable architecture adds terrain generation, seasons and commands, and small scripts inspect packets, NBT and region files.
- Targets
- Game · Protocol
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Sources reviewed
Requirements & limits
- Unmaintained: the GitHub description marks the project UNMAINTAINED, and the reviewed master commit dates from 2014-09-09, 90 commits after the 2.0 tag (2013-01-10, also the latest PyPI release). The 2.0 changelog adds 1.4.x protocol support without server-side encryption, disables broken online authentication and replaces the Alpha and Beta save formats with Anvil; source pins protocol version 78. The introduction says creative games are probably safe but some Survival-Multiplayer elements are missing, and older pages such as the feature list predate these 2.0 changes.
- The server needs no original game files; clients connect with the matching Minecraft client the player owns, which the FAQ says Bravo will not replace. The repository commits no game assets or Mojang code: block, item and recipe definitions are written as Python tables, and the documentation says Bravo inherits no code from other Minecraft projects.
- Python 2.6 or 2.7 (CPython or PyPy); requirements.txt pins construct 2.0.6 and Pillow 2.4.0 and needs Twisted 11.0+, including Twisted Conch, with Twisted Words or Web for the IRC and web plugins. It runs as the twistd bravo plugin, configured from bravo.ini.example with a world path, creative or survival mode and the anvil serializer; the packet-parser script still imports a pre-2.0 module path.
- Travis CI ran trial over the in-tree tests for protocol packets, chunks, inventories, plugins and serializers on Python 2.6, 2.7 and PyPy. MIT/X11 license, with bravo/nbt.py taken from Thomas Woolford’s MIT NBT library; Minecraft and its client keep Mojang’s rights.
About this entry
The description was reviewed against primary sources.
Primary sources
- README.rst GitHub · bravoserver/bravo · Revision 7be5d79
- docs/introduction.rst GitHub · bravoserver/bravo · Revision 7be5d79
- docs/differences.rst GitHub · bravoserver/bravo · Revision 7be5d79
- CHANGELOG.rst GitHub · bravoserver/bravo · Revision 7be5d79
- bravo/beta/protocol.py GitHub · bravoserver/bravo · Revision 7be5d79
- bravo.ini.example GitHub · bravoserver/bravo · Revision 7be5d79
- requirements.txt GitHub · bravoserver/bravo · Revision 7be5d79
- .travis.yml GitHub · bravoserver/bravo · Revision 7be5d79
- LICENSE GitHub · bravoserver/bravo · Revision 7be5d79
- tools/parser-cli.py GitHub · bravoserver/bravo · Revision 7be5d79
- https://pypi.org/project/Bravo/2.0/
More in Games
- Chariot: Age of Empires engine reimplementation · Case study
- CoD4 Rewrite: Rust/Bevy reconstruction · Case study
- CorsixTH: an open reimplementation of Theme Hospital · Case study
- Cursed Lands: a Godot engine for Evil Islands and Lost in Astral · Case study
- Desktop Games Nostalgia: a macOS and browser port · Case study
- FreeRS42: reimplementing Ricochet Xtreme · Case study