Naming drift
Verified against Minecraft 26.3 · Reference · The translation layer: the names a 1.21-era reader will reach for that 26.3 dropped, moved or repurposed, and what it is called now.
Rule three of this corpus is newest version only: no page says “in 1.21 this was…”, because version-difference prose is the first thing to rot and the last thing anyone rereads. That rule costs something, and this page is where the cost is paid back once. Every page assumes you are reading the 26.3 tree; this page assumes you are not, yet, and are still typing the names you learned somewhere else.
Two audiences. A reader coming from 1.21 — the version most public writing, most tutorials and most model weights are anchored to — needs the version tables: the old name on the left, what to grep for on the right. A reader coming from Yarn (Fabric’s community mappings) needs the last table: not a version difference at all, just a different name for the same class in the same version.
The one sentence: if a name in your head does not appear in the tree, it is probably on this page.
How to read the tables
The left column is italic, not backticked. Most of these names do not
exist in 26.3, and tools/verify_names.py — which checks every backticked
identifier on every page against the decompile — would reject the page if
they were. Italics is the corpus’s mark for a name, but not a 26.3 name. The right column’s class and member names are backticked and therefore verified: those names are in the tree; its italics are file paths, save-file keys and old names. The left column is a name a 1.21-era reader may remember, and 1.21.11 — the last of them, and the only one this project can open — is the one the rows are checked against: most rows record drift that had already happened by 1.21.11, so a reader coming from 1.21.11 will find those left names missing from their own tree too.
“gone” in the right column means no class replaced the name one for one: the responsibility moved into something structurally different or was dropped, and the entry names where it went when it went somewhere. Those are the interesting rows — a rename is a nuisance, a disappearance is a design change, and the page named beside each part explains it.
The rows are the names the corpus’s own pages needed, so the table is not exhaustive — not even over the corpus: a few names the For a 1.21-era reader notes use, such as ItemBlockRenderTypes and LootItemFunctionType, have no row. Three hundred and nine rows, and the distribution is itself a finding: the three biggest tables are commands (41), rendering (39) and items (38), and the fourth is the server (31). The client was rewritten around extract-then-render, which is why almost nothing at the top of the render stack kept its name — but the permission rewrite and the game-rule registry moved more names than the renderer did.
The four you will hit in the first ten minutes
Identifier is ResourceLocation. Lightmap is LightTexture.
DeltaTracker is Timer, and partialTick is now a DeltaTracker.Timer
you ask rather than a float you are handed. And Gui no longer means the
HUD: the HUD is Hud, held as Gui.hud, while Gui is the screen and
overlay manager that also owns Gui.screen and Gui.setScreen — so a
1.21-era Minecraft.setScreen call site is now on Gui. Both Gui and
Hud exist, which is the single most confusing pair of names in the tree.
The tables
Everywhere
| the name you remember | 26.3 |
|---|---|
| ResourceLocation | Identifier |
| LightTexture | Lightmap |
| Timer | DeltaTracker |
Part II — Foundations
| the name you remember | 26.3 |
|---|---|
| TagManager | gone |
| Minecraft.reloadResources | Minecraft.reloadResourcePacks |
| ItemStack.save / parse | ValueOutput / ItemStack.CODEC |
| ChunkPos.asLong | ChunkPos.pack / ChunkPos.unpack (a record) |
| CompositePackResources | OverlayedPackResources |
| VanillaPackResources as a pack, VanillaPackResources.asProvider | a holder of FixedPathPackResources layers, VanillaPackResources.asResourceManager |
| SimpleJsonResourceReloadListener.scanDirectory | gone — data-pack registry files are read by RegistryDataLoader |
| RegistryDataLoader.WORLDGEN_REGISTRIES / RegistryLayer.WORLDGEN | RegistryDataLoader.WORLD_REGISTRIES / RegistryLayer.WORLD, beside a fourth list, RegistryDataLoader.RELOADABLE_REGISTRIES |
| RegistryCodecs.homogeneousList | RegistryCodecs.holderSet |
| HolderOwner.canSerializeIn | HolderOwner.canSerialize, asked of the context rather than the holder |
| BuiltInRegistries.BLOCK_TYPE / BlockTypes / Block.codec | gone — a block has no codec |
| PlacementModifierType / StructurePlacementType / BlockStateProviderType | gone — BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, BuiltInRegistries.STRUCTURE_PLACEMENT and BuiltInRegistries.BLOCK_STATE_PROVIDER_TYPE hold the MapCodecs |
Part III — The server
| the name you remember | 26.3 |
|---|---|
| DO_DAYLIGHT_CYCLE | GameRules.ADVANCE_TIME |
| DO_MOB_SPAWNING | GameRules.SPAWN_MOBS |
| DO_WEATHER_CYCLE | GameRules.ADVANCE_WEATHER |
| GameRules package | world/level/gamerules |
| GameRules.Key<T> / GameRules.Value / BooleanValue / IntegerValue / GameRules.Type (all nested) | top-level GameRule, with GameRuleType, GameRuleTypeVisitor, GameRuleMap for the values and GameRuleCategory for the grouping |
| game rules as a hard-coded map | a registry — Registries.GAME_RULE / BuiltInRegistries.GAME_RULE, bootstrapped by GameRules |
| level.dat field GameRules, ids camelCase and unnamespaced | field game_rules, ids namespaced (minecraft:advance_time) — the whole rename table is GameRuleRegistryFix |
| doEntityDrops | GameRules.ENTITY_DROPS |
| doImmediateRespawn | GameRules.IMMEDIATE_RESPAWN |
| doInsomnia | GameRules.SPAWN_PHANTOMS |
| doLimitedCrafting | GameRules.LIMITED_CRAFTING — the name survives elsewhere, as a component of ClientboundLoginPacket and a field on LocalPlayer |
| doPatrolSpawning / doTraderSpawning / doWardenSpawning | GameRules.SPAWN_PATROLS / GameRules.SPAWN_WANDERING_TRADERS / GameRules.SPAWN_WARDENS |
| doVinesSpread | GameRules.SPREAD_VINES |
| enableCommandBlocks and commandBlocksEnabled | one rule, GameRules.COMMAND_BLOCKS_WORK |
| spawnerBlocksEnabled | GameRules.SPAWNER_BLOCKS_WORK |
| commandModificationBlockLimit | GameRules.MAX_BLOCK_MODIFICATIONS |
| minecartMaxSpeed | GameRules.MAX_MINECART_SPEED |
| snowAccumulationHeight | GameRules.MAX_SNOW_ACCUMULATION_HEIGHT |
| spawnRadius | GameRules.RESPAWN_RADIUS |
| disableElytraMovementCheck | GameRules.ELYTRA_MOVEMENT_CHECK — inverted |
| disablePlayerMovementCheck | GameRules.PLAYER_MOVEMENT_CHECK — inverted |
| disableRaids | GameRules.RAIDS — inverted |
| doFireTick + allowFireTicksAwayFromPlayer (two booleans) | one integer, GameRules.FIRE_SPREAD_RADIUS_AROUND_PLAYER (0 none, 128 near players only, −1 everywhere) |
| spawnChunkRadius, entitiesWithPassengersCanUsePortals, gameLoopFunction | gone with no replacement — the fix simply deletes them |
| day time on ServerLevel | ServerClockManager (world/clock) |
| weather on the overworld’s level data | server-global WeatherData |
| GameProfile on the player lists | NameAndId (a record of UUID and name) — PlayerList.canPlayerLogin, PlayerList.isWhiteListed, PlayerList.op, the ban/op/whitelist files |
| ServerPlayer.sendAllPlayerInfo / sendActivePlayerEffects | PlayerList.sendAllPlayerInfo / PlayerList.sendActivePlayerEffects |
| ServerLevelData.getScheduledEvents, the overworld’s level data holding the queue | MinecraftServer.getScheduledEvents, returning a server-wide TimerQueue saved data, advanced only by the overworld’s ServerLevel.tickTime |
| ServerLevel.updateSkyBrightness reading day time | the method survives, declared on Level, and now reads EnvironmentAttributes.SKY_LIGHT_LEVEL through EnvironmentAttributeSystem |
| ChunkMap.forEachBlockTickingChunk meaning block-ticking | it walks the entity-ticking set; the name did not follow the split |
Part IV — The world
| the name you remember | 26.3 |
|---|---|
| ChunkStorage | gone — ChunkMap extends SimpleRegionStorage |
| ChunkSerializer | SerializableChunkData, a record with its own parse and write halves — and a blending_data component |
| DimensionDataStorage | SavedDataStorage (one for the server, one per level) |
| getLightBlock | BlockBehaviour.BlockStateBase.getLightDampening |
| PalettedContainer.Strategy | top-level Strategy + Configuration |
| ForcedChunksSavedData | TicketStorage |
| TicketType<T> | a registry record with flag bits |
| DimensionType booleans | EnvironmentAttributeMap |
| DimensionType.ultraWarm | attributes the Nether sets, EnvironmentAttributes.FAST_LAVA and EnvironmentAttributes.WATER_EVAPORATES chief among them |
| DimensionType.piglinSafe | EnvironmentAttributes.PIGLINS_ZOMBIFY — inverted |
| DimensionType.bedWorks | EnvironmentAttributes.BED_RULE, a BedRule record, not a boolean |
| DimensionType.hasRaids | EnvironmentAttributes.CAN_START_RAID |
| DimensionType.natural | EnvironmentAttributes.NETHER_PORTAL_SPAWNS_PIGLINS and neighbours |
| DimensionType.fixedTime | DimensionType.hasFixedTime, a bare boolean — the time itself moved to WorldClock and Timelines.OVERWORLD_DAY |
| DimensionType.ambientLight | unchanged; one of the three visual fields that did not become an attribute, with DimensionType.skybox and DimensionType.cardinalLightType |
| Schedule (the villager’s) | EnvironmentAttributes.VILLAGER_ACTIVITY on Timelines.VILLAGER_SCHEDULE |
| Level.getDayTime / ServerLevel.setDayTime | ServerClockManager, keyed by WorldClock |
| data/<id>.dat | data/<namespace>/<path>.dat — every saved-data file gained a namespace folder |
| ChunkStatus.NOISE / SURFACE / CARVERS | ChunkStatus.TERRAIN, one task doing all three |
| ProtoChunk.carvingMask (saved with the chunk) | gone — the CarvingMask lives for one terrain run |
| BiomeManager.NoiseBiomeSource | BiomeResolver, which ChunkAccess implements |
Part V — Blocks
| the name you remember | 26.3 |
|---|---|
| ItemInteractionResult | gone — InteractionResult.TryEmptyHandInteraction |
| DirectionProperty | gone — EnumProperty<Direction> |
| Level.markAndNotifyBlock | gone — inline in Level.setBlock |
| BlockBehaviour.onRemove | BlockBehaviour.affectNeighborsAfterRemoval + BlockEntity.preRemoveSideEffects |
| doTileDrops | GameRules.BLOCK_DROPS |
| BlockModelShaper | BlockStateModelSet / BlockModelSet |
| RenderShape.ENTITYBLOCK_ANIMATED | gone — RenderShape.INVISIBLE / RenderShape.MODEL only |
| Player.canInteractWithBlock | Player.isWithinBlockInteractionRange |
| Block.rebuildCache | gone — BlockBehaviour.BlockStateBase.initCache from the Blocks static init |
| Material (the block property) | gone — individual BlockBehaviour.Properties flags. The name survives on a different class; see survived and changed meaning below |
| BlockEntity.saveToItem | BlockItem.setBlockEntityData + BlockEntity.collectComponents |
| MobEffects.DIG_SPEED / DIG_SLOWDOWN | MobEffects.HASTE / MobEffects.MINING_FATIGUE |
| RedStoneWireBlock | RedstoneWireBlock; its connection rule is each block’s BlockBehaviour.shouldRedstoneWireConnectTo |
| BedBlock.OCCUPIED / BedBlock.PART | AbstractBedBlock.OCCUPIED / AbstractBedBlock.PART |
| LevelEvent.PARTICLES_DESTROY_BLOCK as the break event (2001) | LevelEvent.PARTICLES_AND_SOUND_DESTROY_BLOCK; the old name is now 2014, particles only |
Part VI — Entities
| the name you remember | 26.3 |
|---|---|
| Player extends LivingEntity | Player extends Avatar extends LivingEntity |
| EntityType.PIG (constants) | EntityTypes.PIG + EntityTypeIds.PIG |
| BlockUtil in core | BlockUtil, in net/minecraft/util — the name did not move, the package did |
| MobSpawnType | EntitySpawnReason (+ EntitySpawnRequest) |
| SpawnPlacements.Type | SpawnPlacementType / SpawnPlacementTypes |
| Entity.hurt(DamageSource, float) returning a boolean | split into Entity.hurtServer and Entity.hurtClient. Both old shapes survive as deprecated finals — Entity.hurt delegating to the server half, Entity.hurtOrSimulate as the boolean-returning successor — so grep still finds the name |
| doMobLoot | GameRules.MOB_DROPS |
| LivingEntity.isDamageSourceBlocked | gone — DataComponents.BLOCKS_ATTACKS |
| Schedule / ScheduleBuilder | gone — Timeline + EnvironmentAttribute |
| BlockPathTypes | PathType |
| LivingEntity.brainProvider | LivingEntity.makeBrain(Brain.Packed) |
| Entity.moveTo / absMoveTo | Entity.snapTo / Entity.absSnapTo |
| Entity.maxUpStep (field) | Attributes.STEP_HEIGHT |
| Entity.updateFluidHeightAndDoFluidPushing | EntityFluidInteraction |
| Entity.lerpTo | Entity.moveOrInterpolateTo + InterpolationHandler |
| EntityDataSerializers.OPTIONAL_UUID / COMPOUND_TAG | gone |
| UUID-keyed AttributeModifier | Identifier-keyed record |
| AttributeMap.getDirtyAttributes | AttributeMap.getAttributesToSync + AttributeMap.getAttributesToUpdate |
| PlayerRenderer | AvatarRenderer (serves players and mannequins, keyed by skin model) |
| Entity.invulnerableTime as the hurt cooldown | LivingEntity.damageCooldownTime; Entity.invulnerableTime is a separate full-invulnerability timer |
| Entity.hurtMarked | Entity.syncVelocity |
| TryFindWaterGoal | TryFindLiquidGoal |
Part VII — Items and inventories
| the name you remember | 26.3 |
|---|---|
| InteractionResultHolder | gone — InteractionResult.Success.heldItemTransformedTo |
| UseAnim | ItemUseAnimation |
| Item.getFoodProperties | DataComponents.FOOD on the stack |
| ItemStack.getTag / getOrCreateTag | gone — components |
| LivingEntity.triggerItemUseEffects | Consumable.emitParticlesAndSounds |
| FoodProperties effects list | Consumable.onConsumeEffects |
| ClickType | ContainerInput |
| MultiPlayerGameMode.handleInventoryMouseClick | MultiPlayerGameMode.handleContainerInput |
| ClientboundSetCarriedItemPacket | split: ClientboundSetCursorItemPacket + ClientboundSetHeldSlotPacket |
| ClientboundSetSlotPacket | ClientboundContainerSetSlotPacket |
| ClientboundHorseScreenOpenPacket | ClientboundMountScreenOpenPacket |
| Container.startOpen(Player) | Container.startOpen(ContainerUser) |
| Recipe.getResultItem / getIngredients | Recipe.assemble / PlacementInfo. The first is gone outright; the second is off the Recipe interface and survives only as a test-visible method on ShapedRecipe |
| Ingredient.EMPTY | gone — Ingredient.CODEC rejects an empty literal list, but a tag that resolves to nothing still yields an empty one, hence Ingredient.isEmpty |
| ClientboundUpdateRecipesPacket carrying recipes | property sets + the stonecutter input set; the book gets RecipeDisplayEntrys |
| net.minecraft.advancements.CriteriaTriggers | CriteriaTriggers, moved to net/minecraft/advancements/triggers |
| Player.permissionLevel / hasPermissions(int) | Player.permissions → a PermissionSet, queried by named Permissions keys |
| ServerboundPlayerCommandPacket.Action.PRESS_SHIFT_KEY / RELEASE_SHIFT_KEY | gone — sneak rides ServerboundPlayerInputPacket → Entity.setShiftKeyDown |
| Mannequin on the client | ClientMannequin, installed by swapping the mutable Mannequin.constructor factory at client startup |
| data/<ns>/recipes/ | data/<ns>/recipe/ (singular) |
| EnchantmentCategory | Enchantment.EnchantmentDefinition item sets |
| Enchantment.getDamageBonus, EnchantmentHelper.getFireAspect… | gone — EnchantmentEffectComponents |
| EnchantedBookItem | gone — DataComponents.STORED_ENCHANTMENTS |
| Item.getEnchantmentValue | DataComponents.ENCHANTABLE |
| LootContextParam / LootContextParamSet | ContextKey / ContextKeySet (util/context) |
| LootDataManager / LootTables | ReloadableServerRegistries + BuiltInLootTables |
| LootTableReference | NestedLootTable |
| LootingEnchantFunction | EnchantedCountIncreaseFunction |
| SetCountFunction | SetItemCountFunction |
| LootContextParams.KILLER_ENTITY | LootContextParams.ATTACKING_ENTITY |
| AxeItem / ShovelItem / HoeItem | gone — DataComponents.BLOCK_TRANSFORMER on a plain Item |
| RecipeManager as a reload listener | Registries.RECIPE, read by RegistryDataLoader; the RecipeManager constructor builds the RecipeMap |
| LootPoolSingletonContainer | UniformContainerBase |
| LootItemFunctions.compose, lists of functions and conditions | one optional modifier per level, and one optional condition on a pool, an entry or a conditional function; several functions are one SequenceFunction |
| LootItemConditions | LootItemConditionTypes |
| NumberProvider | split in two: ContextFloatProvider and ContextIntProvider |
| ContextAwarePredicate / ConditionReference | gone — a Holder of a LootItemCondition |
| LootContext.getParameter / getOptionalParameter | LootContext.getOptional |
Part VIII — The player
| the name you remember | 26.3 |
|---|---|
| Inventory.armor / offhand / compartments | one 36-slot Inventory.items, and the armour and offhand in the entity’s EntityEquipment through Inventory.EQUIPMENT_SLOT_MAPPING |
| Inventory.setPickedItem | Inventory.addAndPickItem / Inventory.pickSlot |
| Entity.moveTo | Entity.absSnapTo / Entity.snapTo |
| GameRenderer.pick | Minecraft.pick → LocalPlayer.raycastHitResult |
| ServerboundInteractPacket.ActionType.ATTACK | ServerboundAttackPacket (a record of one int) |
| GameRules.NATURAL_REGENERATION | GameRules.NATURAL_HEALTH_REGENERATION |
| isCritArrow / Player.sweepAttack | Player.canCriticalAttack / Player.isSweepAttack + Player.doSweepAttack, all three private. isCritArrow was never a Player method and is still live on AbstractArrow |
| LivingEntity.eat / Player.eat | gone — Consumable.onConsume → FoodProperties → FoodData.eat |
| MobEffect.createModifier | MobEffect.createModifiers (plural) |
| ServerboundSwingPacket | ServerboundPunchPacket up, with no fields; ClientboundSwingAnimationPacket down |
| ServerGamePacketListenerImpl.handleAnimate | ServerGamePacketListenerImpl.handlePunch |
| LocalPlayer.swing | gone — Minecraft.startAttack and Minecraft.continueAttack send the punch |
| LivingEntity.swinging / swingingArm / swingTime / attackAnim | LivingEntity.SwingState |
| ItemStack.getSwingAnimation, DataComponents.SWING_ANIMATION | ItemStack.getAttackAnimation + ItemStack.getInteractAnimation, DataComponents.ATTACK_ANIMATION + DataComponents.INTERACT_ANIMATION |
Part IX — Networking
| the name you remember | 26.3 |
|---|---|
| Connection.setListener / setProtocol / getCurrentProtocol | gone — Connection.setupInboundProtocol / Connection.setupOutboundProtocol |
| ConnectionProtocol.getById / packet tables | gone — a bare enum; ids are ProtocolInfoBuilder.addPacket order in IdDispatchCodec |
| Connection.NETWORK_WORKER_GROUP etc. | EventLoopGroupHolder (in server/network) |
| MemoryConnection | gone — Connection.isMemoryConnection |
| ensureRunningOnSameThread(…, BlockableEventLoop) | PacketUtils.ensureRunningOnSameThread with a PacketProcessor |
| Packet.write(FriendlyByteBuf) | gone — a per-packet StreamCodec constant the protocol reads |
| ClientboundAddPlayerPacket / ClientboundAddMobPacket | gone — ClientboundAddEntityPacket |
| ClientboundUpdateViewPositionPacket | ClientboundSetChunkCacheCenterPacket |
| ClientboundUpdateViewDistancePacket | ClientboundSetChunkCacheRadiusPacket |
| ClientboundLevelChunkPacket | ClientboundLevelChunkWithLightPacket |
| routine ClientboundTeleportEntityPacket | ClientboundEntityPositionSyncPacket |
| ClientboundGameProfilePacket | ClientboundLoginFinishedPacket (+ a session id) |
| ServerboundLoginStartPacket | ServerboundHelloPacket |
| ClientboundEncryptionRequestPacket / response | ClientboundHelloPacket / ServerboundKeyPacket |
| ClientboundSetCompressionPacket | ClientboundLoginCompressionPacket |
| ClientboundResourcePackPacket | ClientboundResourcePackPushPacket / …PopPacket |
| MinecraftServer.getSessionService | MinecraftServer.services |
| PlayerChunkSender in server/level | server/network |
| Component.Serializer (Gson) | ComponentSerialization (codecs; NBT on the wire) |
| TextComponent / TranslatableComponent / … | network/chat/contents — PlainTextContents etc. |
| ComponentUtils.updateForEntity | ComponentUtils.resolve with a ResolutionContext |
| SignedMessageHeader / MessageSigner | SignedMessageLink / SignedMessageChain.Encoder |
| ChatPreview and its packets | gone |
| ClientboundSetTimePacket(gameTime, dayTime, …) | a game time plus a WorldClock update map |
| FriendlyByteBuf.readList / readMap / readCollection / limitValue | gone — ByteBufCodecs.list, ByteBufCodecs.map and ByteBufCodecs.collection, which clamp the allocation |
| FriendlyByteBuf.readBlockHitResult | BlockHitResult.STREAM_CODEC |
Part X — The client
| the name you remember | 26.3 |
|---|---|
| Gui (the HUD) | Hud, held as Gui.hud; the name Gui now means the screen/overlay manager |
| Minecraft.screen / Minecraft.setScreen | Gui.screen / Gui.setScreen |
| GuiGraphics | GuiGraphicsExtractor (records states; does not draw) |
| Screen.render / every render* on Gui | Screen.extractRenderState / every extract* on Hud |
| LayeredDraw | bounding-box inference and call order, plus GuiRenderState.nextStratum |
| Options.hideGui | Hud.isHidden, published as GuiRenderState.isHudHidden |
| Minecraft.getPartialTick, Timer | DeltaTracker.Timer and its three questions |
| Minecraft.destroy | gone — Minecraft.stop, then Minecraft.exitWorldAndClose and Minecraft.close |
| key-mapping categories as strings | KeyMapping.Category is a registrable record, not a string |
| MouseHandler.lastMouseEventTime | gone |
raw (key, scancode, modifiers, action) on every Screen method | the client/input records: KeyEvent, MouseButtonEvent, CharacterEvent, PreeditEvent |
| Font.drawInBatch and every drawString variant | Font.prepareText → Font.PreparedText; the drawing verbs are on GuiGraphicsExtractor, drawString’s as GuiGraphicsExtractor.text |
| Font.StringRenderOutput | Font.PreparedText plus Font.GlyphVisitor |
| BakedGlyph (a class) | an interface; the sheet implementation is BakedSheetGlyph, effects are EffectGlyph |
| RawGlyph / SheetGlyphInfo | UnbakedGlyph (info and bake) and GlyphBitmap (pixels and upload) |
| GlyphProviderBuilder / GlyphProviderBuilderType | GlyphProviderDefinition / GlyphProviderType |
| Style.withFont taking an id | still Style.withFont, but the type is FontDescription, which may be a sprite rather than a font |
| FontSet.getGlyph as public API | private — FontSet.source then GlyphSource.getGlyph |
| AbstractSoundInstance.resolve | AbstractSoundInstance.getOrResolve |
| GLFW and its callbacks | SDL3: SDLEventHandler.pollEvents drains its events inside RenderSystem.pollEvents, input to KeyboardHandler and MouseHandler, the rest to Window.handleEvent |
| KeyboardHandler.setup / MouseHandler.setup | gone — SDLEventHandler calls the handlers’ public methods |
| LocalPlayer.tick sending the move packets | LocalPlayer.sendChanges, called by Minecraft.tick after the level’s entities and block entities |
Part XI — Rendering
Thirty-nine rows. Four refactors account for more than half of them — extract then render, the GPU layer’s move into com/mojang/renderpearl, the window’s move to SDL, and order-independent transparency — and the rest are the renames and moves around them — models, particles, sections, the camera, and the sky and fog.
| the name you remember | 26.3 |
|---|---|
| MultiBufferSource / BufferSource | SubmitNodeCollector / SubmitNodeStorage / FeatureRenderDispatcher |
| ShaderInstance, RenderStateShard | RenderPipeline + RenderPipelines + BindGroupLayouts |
| VertexBuffer, Tesselator, BufferUploader | GpuBuffer / GpuBufferSlice, BufferBuilder → MeshData (over a ByteBufferBuilder’s memory), UberGpuBuffer |
| RenderSystem.setShader / enableBlend / depthMask … | fields of a RenderPipeline |
| VertexFormat.Mode, VertexFormat.IndexType, TextureFormat | PrimitiveTopology, IndexType, GpuFormat |
| Window.updateDisplay, vsync as a swap interval | GpuSurface.present, vsync as a GpuSurface.PresentMode |
| LightTexture.pack and friends | LightCoordsUtil |
| DimensionSpecialEffects | DimensionType.skybox + EnvironmentAttributes + Timeline |
| FogParameters, RenderSystem.setShaderFogColor | FogData, RenderSystem.setShaderFog (a uniform slice) |
| Level.getSkyColor, ClientLevel.getStarBrightness, ClientLevel.effects | EnvironmentAttributeProbe.getValue on an EnvironmentAttribute |
| LevelRenderer.renderLevel / renderSky / renderChunkLayer | LevelRenderer.render and the LevelRenderer.addSkyPass family of frame-graph passes |
| LevelRenderer.blockChanged / setSectionDirty / allChanged | the same names on LevelExtractor |
| ChunkRenderDispatcher, RenderChunk, CompiledChunk | SectionRenderDispatcher, its SectionRenderDispatcher.RenderSection, CompiledSectionMesh |
| RenderType.chunkBufferLayers, ChunkSectionLayer.TRIPWIRE | ChunkSectionLayer, with three layers — the tripwire layer is gone |
| BakedModel, ModelResourceLocation | BlockStateModel / ItemModel; block models keyed by BlockState |
| BlockModelShaper, ItemModelShaper, BlockRenderDispatcher, ItemRenderer | BlockStateModelSet, ItemModelResolver, ModelBlockRenderer, and for the item draw ItemFeatureRenderer |
| BlockElement / BlockElementFace, AtlasSet, ItemColors | CuboidModelElement / CuboidFace, AtlasManager, ItemTintSource |
| EntityRenderer.render, RenderLayer.render | EntityRenderer.extractRenderState + EntityRenderer.submit |
| TextureSheetParticle, sheet ParticleRenderTypes | SingleQuadParticle + SingleQuadParticle.Layer |
| ParticleGroup (a limit record) | ParticleLimit; ParticleGroup is now the per-render-type bucket |
| Camera.setup | Camera.update + Camera.extractRenderState |
| Camera.getPosition, getEntity, getRotation, getLookVector | Camera.position, Camera.entity, Camera.rotation, Camera.forwardVector — the get prefix dropped from these four, though Camera.getNearPlane and Camera.getFluidInCamera kept theirs and new getters such as Camera.getCullFrustum and Camera.getFov carry one |
| RenderStateShard composition (the texture and layering half) | RenderType over a RenderPipeline, catalogued in RenderTypes, built by RenderSetup |
| BakedQuad as four vertices | a ten-component record, with a BakedQuad.MaterialInfo of eight |
| LiquidBlockRenderer | FluidRenderer, over a FluidModel |
| ItemOverrides / getPropertyOverride | SelectItemModel / RangeSelectItemModel / ConditionalItemModel |
| ScreenManager (the Blaze3D monitor manager) | MonitorManager, with Monitor and VideoMode — same package, now fed by SDL’s display events |
| Window.updateVsync | a GpuSurface.PresentMode in the surface configuration |
| GpuDevice, CommandEncoder, RenderPass in com/mojang/blaze3d | still interfaces, reworked and moved to com/mojang/renderpearl/api, implemented by FrontendGpuDevice and its siblings over the backends in com/mojang/renderpearl/backend/opengl and /vulkan |
| GLX | gone — RenderSystem.initBackendSystem starts SDL, and a backend that fails throws BackendCreationException |
| Window.isMinimized / Monitor.getPreferredVidMode | Window.isIconified / Monitor.getPreferredVideoMode |
| ItemInHandRenderer | FirstPersonHandsAndItems (the tick state and the extract) + FirstPersonHandsAndItemsRenderer (the pose) |
| NameTagFeatureRenderer | gone — a name tag is a TextFeatureRenderer.Submit |
| the transparency post chain (Fabulous) | order-independent transparency inside the main pass: LevelRenderer.executeOit, three OitStages |
| LevelRenderer.addCloudsPass / addWeatherPass | gone — clouds and weather draw inside LevelRenderer.addMainPass |
| ShaderManager.prepare, moj_import | ShaderManager.loadConfigs, #include resolved by GlslCompiler.compileToSpv |
| ShaderManager.CompilationCache | PipelineCache, swapped in by RenderSystem.setCurrentPipelineCache |
| GameRenderer.postEffectId / effectActive | GameRenderer.spectatedEntityPostEffect / GameRenderer.spectatedEntityEffectActive, beside the per-frame GameRenderer.requestedPostEffects |
| DynamicUniforms / DynamicUniformStorage | DynamicGpuData / DynamicGpuDataStorageMapped |
Part XII — World generation
| the name you remember | 26.3 |
|---|---|
| GenerationStep.Carving | gone — BiomeGenerationSettings.carvers is one flat HolderSet |
| DensityFunctions.WeirdScaledSampler | IntervalSelectFunction |
| StructureFeature / ConfiguredStructureFeature | Structure / Registries.STRUCTURE |
| Feature.RANDOM_PATCH, Feature.FLOWER | gone — composed from SimpleBlockFeature + placement |
| Feature.POINTED_DRIPSTONE / DRIPSTONE_CLUSTER | SpeleothemFeature / SpeleothemClusterFeature |
| AbstractTreeGrower and its subclasses | one final TreeGrower with constants |
| TreeConfiguration.dirtProvider | TreeFeature.belowTrunkProvider |
| Biome.BiomeCategory / Biome.getDownfall | gone |
| MultiNoiseBiomeSource.Preset | MultiNoiseBiomeSourceParameterList.Preset |
| BiomeSpecialEffects.fogColor / skyColor / music / ambient sound | EnvironmentAttributes.* via Biome.getAttributes |
| the +8 chunk population offset | gone — decoration starts at the chunk corner, InSquarePlacement scatters |
| StructureTemplateManager’s folder for saved templates, generated/<namespace>/structures/ | generated/<namespace>/structure/, the singular a data pack’s templates were already read from |
| level.dat field WorldGenSettings | its own file — WorldGenSettings is SavedData, written to data/minecraft/world_gen_settings.dat; PrimaryLevelData.OLD_WORLD_GEN_SETTINGS is all that is left of the key |
| ConfiguredFeature / FeatureConfiguration / FeaturePlaceContext | gone — a Feature carries its own parameters; its instances are Registries.FEATURE |
| PlacedFeature.placeWithBiomeCheck / PlacementModifier.getPositions | FeaturePlacer.placeWithBiomeCheck / PlacementModifier.modify |
| RandomOffsetPlacement | OffsetPlacement |
| ConfiguredWorldCarver / CarverConfiguration / NetherWorldCarver | gone — WorldCarver instances in Registries.CARVER; the nether carver is a cave carver |
| SurfaceRules / SurfaceSystem | MaterialRule / MaterialCondition / MaterialSystem |
| OreVeinifier | OreVeinRule |
| NoiseChunk.forChunk / NoiseChunk.wrapNew and the four cache markers | gone — DensityFunctionCompiler compiles once per dimension; one cache node; a SamplerContext per run |
| DensityFunctions.Marker / BlendAlpha / BlendOffset / BeardifierMarker / Mapped / Ap2 / MulOrAdd | CacheFunction and InterpolatedFunction, SimpleDensityFunction, UnaryFunction and BinaryFunction, under world/level/levelgen/densityfunction |
| TreeConfiguration | TreeFeature, a record holding the fields |
| Climate.findSpawnPosition | NoiseSpawnFinder.findSpawnPosition |
| Biome.getMobSettings | EnvironmentAttributes.NATURAL_MOB_SPAWNS |
| RandomState.sampler | RandomState.createClimateSampler |
Part XIII — Commands and data packs
The permission rewrite is the largest single break in this table: the
integer permission level is gone from the whole command API, replaced by
PermissionSet and PermissionCheck in net/minecraft/server/permissions.
The ints survive only in ops.json, in server.properties and on the wire.
| the name you remember | 26.3 |
|---|---|
| ResourceLocationArgument | IdentifierArgument (the registry id is unchanged) |
| CommandSourceStack.hasPermission(int) | CommandSourceStack.permissions + PermissionSet.hasPermission |
| CommandSourceStack.getPermissionLevel | gone — a source carries a PermissionSet. PermissionLevel itself is very much alive: LevelBasedPermissionSet, server.properties, ServerOpListEntry and the JSON-RPC schema all still speak it |
| CommandSourceStack.withPermission(int) | CommandSourceStack.withPermission taking a PermissionSet |
| SharedSuggestionProvider.hasPermission(int) | gone — the interface extends PermissionSetSupplier |
| Commands.LEVEL_GAMEMASTERS as an int | same name, now a PermissionCheck |
| Commands.hasPermission(int) | Commands.hasPermission taking a PermissionCheck, returning a PermissionProviderCheck |
| ServerPlayer.hasPermissions(int) | ServerPlayer.permissions |
| MinecraftServer.getProfilePermissions returning an int | the same name returning a LevelBasedPermissionSet |
| MinecraftServer.getFunctionCompilationLevel | MinecraftServer.getFunctionCompilationPermissions |
| Commands.LEVEL_ALL / LEVEL_MODERATORS / LEVEL_ADMINS / LEVEL_OWNERS as ints | all four are PermissionChecks too — PermissionCheck.AlwaysPass for the first, PermissionCheck.Require for the rest |
| ServerPlayer.setPermissionLevel(int) | PlayerList.sendPlayerPermissionLevel on the server; LocalPlayer.setPermissions on the client |
| ColorArgument | TeamColorArgument, yielding a TeamColor rather than a ChatFormatting |
| PlayerTeam.getColor returning a ChatFormatting | returns an optional TeamColor, its own enum carrying a TextColor |
| TestFunctionArgument / TestClassNameArgument | gone — /test addresses tests as registry ids through ResourceSelectorArgument and TestFinder |
| net.minecraft.advancements.Criterion / CriterionTrigger / SimpleCriterionTrigger | all moved to net/minecraft/advancements/triggers; CriterionTriggerInstance and CriterionProgress stayed behind in net/minecraft/advancements |
| ServerOpListEntry.getLevel | ServerOpListEntry.permissions |
| ParserUtils.parseJson | gone — SnbtGrammar plus ParserBasedArgument |
| ItemInput.createItemStack(int, boolean) | ItemInput.createItemStack with one argument; the guard is GiveCommand.MAX_ALLOWED_ITEMSTACKS |
| ServerFunctionManager.ExecutionContext (nested) | top-level ExecutionContext in net/minecraft/commands/execution |
| CommandFunction.Entry / CommandEntry / FunctionEntry | gone — a line is a BuildContexts.Unbound, a macro line a MacroFunction.MacroEntry |
| CommandFunction.CacheableFunction (nested) | top-level CacheableFunction, codec-backed |
| Commands.performCommand returning a success count | returns nothing; results are a CommandResultCallback pair |
| data/<ns>/functions/, data/<ns>/tags/functions/ | singular — function/ and tags/function/ |
| maxCommandChainLength | GameRules.MAX_COMMAND_SEQUENCE_LENGTH |
| maxCommandForkCount | GameRules.MAX_COMMAND_FORKS |
| announceAdvancements | GameRules.SHOW_ADVANCEMENT_MESSAGES |
| net.minecraft.advancements.critereon / criterion | split three ways: net/minecraft/advancements/triggers, net/minecraft/advancements/predicates, and advancements/predicates/entity for the entity half |
| AdvancementList | AdvancementTree (+ AdvancementNode, AdvancementHolder) |
| FrameType | AdvancementType |
| CriterionTrigger.addPlayerListener / removePlayerListener | gone — triggers are stateless; subscriptions live in PlayerAdvancements |
| LootContextParamSet | ContextKeySet |
| @GameTest, @GameTestGenerator, @BeforeBatch, @AfterBatch | gone — GameTestInstance in Registries.TEST_INSTANCE |
| GameTestRegistry / TestFunction | gone — Registries.TEST_FUNCTION + TestFunctionLoader, and TestData |
| a test’s batch as a string | GameTestInstance.batch — the batch is a TestEnvironmentDefinition, in one dimension |
| the structure block as the test host | TestInstanceBlock / TestInstanceBlockEntity |
| ServerAdvancementManager as a reload listener | Registries.ADVANCEMENT, read by RegistryDataLoader; the manager’s constructor lays the tree out |
| AdvancementTree.Listener | ClientAdvancements.Listener |
| Advancement.read | Advancement.STREAM_CODEC |
| EntityPredicate.ADVANCEMENT_CODEC | gone — LootItemCondition.CODEC |
| PlayerList.allowCommandsForAllPlayers | gone — IntegratedServer.getProfilePermissions answers for singleplayer first, with a guest command-access toggle |
The shape changes, not just the names
A rename table flatters the reader: it suggests that if you learn the three hundred and nine rows above you can read the tree. You cannot, because many of those rows are one of seven design changes, and the change is what the corresponding page is about:
- Tags on an item became components. ItemStack.getTag /
getOrCreateTag have no replacement; a stack is an
Itemplus aPatchedDataComponentMapand every former tag key is aDataComponentTypeinDataComponents— data components, items and stacks. - Hand-written serialisation became codecs. Packet.write is gone: every packet but the bundle carries a
StreamCodecthe protocol table reads, and most packets are records. ItemStack.save is gone: there isItemStack.CODECand, for saved data, theValueOutputfaçade — packets and stream codecs, codecs, NBT and JSON. - Rendering split into extract and render. GuiGraphics,
EntityRenderer.render, LevelRenderer.renderLevel, MultiBufferSource
and every
RenderSystemstate setter are gone or repurposed, because the frame now copies the live game into render state and then draws from that copy, both halves on the Render thread — the frame, Blaze3D, entity rendering. - Per-dimension and per-biome constants became one attribute system.
DimensionSpecialEffects and most of BiomeSpecialEffects are gone;
fog, sky, water fog colour, ambient sound and music are
EnvironmentAttributes resolved through anEnvironmentAttributeProbeover a stack of layers — lightmap, fog and sky, biomes. - Enums of behaviour became registries of data. EnchantmentCategory, GenerationStep.Carving and Biome.BiomeCategory are all gone, replaced by item sets, registry records,
HolderSets or nothing at all; MobSpawnType and BlockPathTypes stayed enums under new names. - UUIDs became identifiers. An
AttributeModifieris keyed byIdentifier, not a UUID, which is why a data pack can now name one — attributes. - Sides split.
Entity.hurtsplit intoEntity.hurtServerandEntity.hurtClient— the old name survives, as a@Deprecatedfinal that returns void and forwards to the server half only, so grep finds it and it does nothing on the client; Player.attack is still there but the packet that reaches it isServerboundAttackPacket, a record of one integer, andServerboundInteractPacketis right-click only. The general rule: where 1.21 had one method that checkedLevel.isClientSide, 26.3 tends to have two methods — damage and death, the sword swing.
Yarn
Yarn is Fabric’s community mapping set. It is not a different version of the game and nothing on this list is a change: it is the same 26.3 class under the name a Fabric modder has in their head. Only the ones that trip people are listed — where the Yarn and Mojang names differ enough that grep fails.
Both columns are italic here, because Yarn names are not in the decompile
and verify_names.py cannot check them; the Mojang column is the one this
corpus uses everywhere else, and every one of those names is backticked and
verified on its own page.
| Yarn | Mojang (this corpus) |
|---|---|
| World / ServerWorld / ClientWorld | Level / ServerLevel / ClientLevel |
| WorldChunk | LevelChunk |
| MinecraftClient | Minecraft |
| PlayerEntity / ServerPlayerEntity / ClientPlayerEntity | Player / ServerPlayer / LocalPlayer |
| ClientPlayNetworkHandler | ClientPacketListener |
| ServerPlayNetworkHandler | ServerGamePacketListenerImpl |
| ClientConnection | Connection |
| Text / MutableText | Component / MutableComponent |
| TextRenderer | Font |
| TextHandler | StringSplitter |
| TextVisitFactory | StringDecomposer |
| OrderedText | FormattedCharSequence |
| StringVisitable | FormattedText |
| FontStorage | FontSet |
| GlyphAtlasTexture | FontTexture |
| DrawContext | GuiGraphicsExtractor — and in 26.3 it does not draw; see the drift table |
| NbtCompound / NbtList / NbtElement | CompoundTag / ListTag / Tag |
| RegistryEntry / RegistryEntryList | Holder / HolderSet |
| Registries / RegistryKeys | BuiltInRegistries / Registries |
| Vec3d | Vec3 |
| Box | AABB |
| Hand | InteractionHand |
| ActionResult | InteractionResult |
| Inventory (the interface) | Container |
| PlayerInventory | Inventory |
| ScreenHandler / ScreenHandlerType | AbstractContainerMenu / MenuType |
| StatusEffect / StatusEffectInstance | MobEffect / MobEffectInstance |
| EntityAttribute / EntityAttributeInstance | Attribute / AttributeInstance |
| ParticleEffect | ParticleOptions |
| BlockPos.Mutable | BlockPos.MutableBlockPos |
| Identifier | Identifier — Yarn was right first; Mojang renamed to match |
The last row is the joke that keeps giving: the single most-cited example of “Yarn names are better” stopped being an example, and a decade of Fabric code now compiles against a Mojang-named class with the Yarn name.
What a rename table cannot tell you
- A verified name is not a correct claim.
verify_names.pyproves the right-hand column exists; it cannot prove the left-hand column ever did. The 1.21 side of this table, like the Yarn column above and the italic names in the pages’ For a 1.21-era reader notes, is what the corpus cannot verify, and 1.21.11 is the only 1.21 it can check a name against. - The names did not move where you would guess. Rendering is only the second-largest table, behind commands. Two rewrites nobody advertised — permissions ceasing to be integers, and game rules becoming a registry — renamed more identifiers than the render-stack refactor did, and the render one is the famous half only because its classes are the ones tutorials name.
- Renames cluster with rewrites. Where a name changed, the responsibility often moved too — though not always: ClickType is
ContainerInputwith the same constants, and RedStoneWireBlock isRedstoneWireBlockwith the same methods. Reading the row is not enough, which is what the linked page is for. - Two subsystems have no rows at all, and that is the answer. Dialogs
(
net/minecraft/server/dialogand its client screens) and the JSON-RPC management server postdate 1.21 entirely: there is no old name to look up, and a reader who cannot find one is not missing a row. Game tests are the opposite case — the whole 1.21 API is gone, which is why they have five. - Minecraft.setScreen is a trap rather than a rename.
Minecraft.setScreenAndShowexists in 26.3 and a 1.21-era reader grepping for the old name will land on it, then wonder why the screen stack behaves differently. The method that replaced the old one isGui.setScreen. - One name a 1.21 reader reaches for was never a class. There is no DebugPackets type in 26.3 and there is nothing it was renamed to: the debug traffic is a subscription protocol with one packet per kind (debugging the running game), not a static sender, so the grep that finds nothing is telling the truth.
- Some names survived and changed meaning, which is worse than a
rename because grep still finds them:
Gui(now the screen manager, not the HUD),Material(now a texture reference inclient/resources/model/sprite, not a block property),ParticleGroup(now a per-render-type bucket, not a count limit),Strategy(now top-level, not nested inPalettedContainer), andMultiVariant, whose name survives only in the data-generator package while the runtime type is gone.
Where to look
Identifier, then Holder and HolderSet (net/minecraft/core), then DataComponents. After that, pick the
part you are lost in and read its page rather than its rows.
Rules: names, never code · how the system works, not how the code reads ·
newest version only · every backticked name passes tools/verify_names.py.