Star on GitHubStar1.1k stars

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.

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 318 entries in GamesGames case studies (239)

↑↓ move↵ open⌘↵ new tab