Where the mass is
Verified against Minecraft 26.3 · Maps · The forty largest classes by lines of decompiled source, the top thirty of them drawn, coloured by which jar ships them.
The two largest classes in the game are the top of one hierarchy: Entity
and LivingEntity, 9,078 lines between them, the thing every mob and
player is before it is anything else. Third is Minecraft, the client
itself. And then the list turns odd: two of the top ten are not game logic
at all. BlockModelGenerators runs only inside the data generator — its
single caller is ModelProvider — and writes the block model JSON that ships
in the jar; BlockStateData is a table that the save-migration fixes consult
when data a much older version saved is read, and nothing outside
util/datafix reads it. Size is where the reading is,
not where the game is.
net/minecraft, or under com/mojang where it starts mojang/. Click to enlarge.64,082 lines are in these thirty classes, 8.6% of the game in 0.4% of its files.
Three kinds of big
Read down the bars and twenty-four of the thirty sort themselves into three kinds, and the kind tells you how to read the class.
The god objects. Entity and LivingEntity are the trunk, each over four
thousand lines because each is the base of everything below it. The
fork below them is not one chain: Mob is one of LivingEntity‘s direct
subclasses and Avatar is another, with Player under it
and ServerPlayer and LocalPlayer its two leaves in the thirty
(entity anatomy has the tree). Those
two leaves are long for the opposite reason to the trunk: no named class
descends from either, and each is a whole side of the authority split written out.
Minecraft and MinecraftServer are the two programs’ roots; ServerLevel
is the world; ChunkMap is the world’s loader. Only two concrete mobs make
the thirty — Fox and Bee, the two with the most bespoke behaviour in their own files — and
what they are long with is per-species goal classes, which is exactly why
Part VI explains the machine and declines to
enumerate its instances: there is no Fox page and there is not going to be
one.
The switchboards. ClientPacketListener is a handler method for every
clientbound play packet, and ServerGamePacketListenerImpl is the same for
every serverbound one — all but three of the packets both phases share are
handled one class up, in ClientCommonPacketListenerImpl and
ServerCommonPacketListenerImpl; between them they are the whole of what play
can say, which is why Part IX’s pages keep coming back to them.
FriendlyByteBuf is the buffer their packets are read from.
The catalogues written as code. SoundEvents, Blocks and Items are
registries populated a constant at a time, and CreativeModeTabs lists every
tab’s items a line apiece;
DataFixers is the migration history; OceanMonumentPieces and StrongholdPieces are
structures built by hand, room by room, in Java rather than in a template;
Options is every setting in options.txt, and Hud is the in-world overlay
— the crosshair, the hotbar, the bars — inside the wider Gui that also
draws screens, toasts and the loading overlay. These are long because they are lists. None is hard.
The table
Forty rows, of which the figure draws thirty. side is which jar ships the class.
| class | lines | side |
|---|---|---|
net/minecraft/world/entity/Entity | 4,617 | shared |
net/minecraft/world/entity/LivingEntity | 4,461 | shared |
net/minecraft/client/Minecraft | 3,345 | client |
net/minecraft/client/data/models/BlockModelGenerators | 3,136 | client |
net/minecraft/client/multiplayer/ClientPacketListener | 3,090 | client |
net/minecraft/server/MinecraftServer | 2,608 | shared |
net/minecraft/server/network/ServerGamePacketListenerImpl | 2,567 | shared |
net/minecraft/server/level/ServerPlayer | 2,516 | shared |
net/minecraft/util/datafix/fixes/BlockStateData | 2,270 | shared |
net/minecraft/server/level/ServerLevel | 2,139 | shared |
net/minecraft/world/item/Items | 2,067 | shared |
net/minecraft/world/level/block/Blocks | 2,061 | shared |
net/minecraft/world/entity/player/Player | 2,034 | shared |
net/minecraft/sounds/SoundEvents | 2,023 | shared |
net/minecraft/client/Options | 2,010 | client |
net/minecraft/world/level/levelgen/structure/structures/OceanMonumentPieces | 1,983 | shared |
net/minecraft/world/item/CreativeModeTabs | 1,737 | shared |
net/minecraft/server/level/ChunkMap | 1,661 | shared |
net/minecraft/util/datafix/DataFixers | 1,637 | shared |
net/minecraft/world/entity/animal/fox/Fox | 1,625 | shared |
net/minecraft/world/entity/Mob | 1,616 | shared |
net/minecraft/client/renderer/LevelRenderer | 1,499 | client |
net/minecraft/client/gui/Hud | 1,481 | client |
net/minecraft/world/entity/animal/bee/Bee | 1,450 | shared |
net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces | 1,436 | shared |
net/minecraft/client/player/LocalPlayer | 1,435 | client |
net/minecraft/network/FriendlyByteBuf | 1,414 | shared |
net/minecraft/data/loot/packs/VanillaBlockLoot | 1,412 | shared |
net/minecraft/world/level/block/state/BlockBehaviour | 1,380 | shared |
net/minecraft/util/Util | 1,372 | shared |
net/minecraft/gametest/framework/GameTestHelper | 1,369 | shared |
com/mojang/realmsclient/RealmsMainScreen | 1,344 | client |
net/minecraft/client/multiplayer/ClientLevel | 1,334 | client |
net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces | 1,317 | shared |
net/minecraft/world/item/ItemStack | 1,274 | shared |
net/minecraft/world/level/levelgen/structure/structures/WoodlandMansionPieces | 1,185 | shared |
net/minecraft/world/entity/animal/panda/Panda | 1,121 | shared |
net/minecraft/world/entity/animal/equine/AbstractHorse | 1,115 | shared |
net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen | 1,107 | client |
net/minecraft/world/entity/monster/cubemob/SulfurCube | 1,083 | shared |
Rules: names, never code · how the system works, not how the code reads ·
newest version only · every backticked name passes tools/verify_names.py.