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; they test Bravo’s own code, not equivalence with Mojang’s server, and this review ran nothing. MIT/X11 license, with bravo/nbt.py taken from Thomas Woolford’s MIT NBT library; Minecraft and its client keep Mojang’s rights. The reviewed sources establish no REA or AI use.

About this entry

The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.

Report an outdated entry Suggest a translation fix

Primary sources

  1. README.rst GitHub · bravoserver/bravo · Revision 7be5d79
  2. docs/introduction.rst GitHub · bravoserver/bravo · Revision 7be5d79
  3. docs/differences.rst GitHub · bravoserver/bravo · Revision 7be5d79
  4. CHANGELOG.rst GitHub · bravoserver/bravo · Revision 7be5d79
  5. bravo/beta/protocol.py GitHub · bravoserver/bravo · Revision 7be5d79
  6. bravo.ini.example GitHub · bravoserver/bravo · Revision 7be5d79
  7. requirements.txt GitHub · bravoserver/bravo · Revision 7be5d79
  8. .travis.yml GitHub · bravoserver/bravo · Revision 7be5d79
  9. LICENSE GitHub · bravoserver/bravo · Revision 7be5d79
  10. tools/parser-cli.py GitHub · bravoserver/bravo · Revision 7be5d79
  11. https://pypi.org/project/Bravo/2.0/

More in Games

All 250 entries in GamesGames case studies (205)