This is a high level, non-exhaustive overview on how to migrate your mod from 1.20.4 to 1.20.5. This does not look at any specific mod loader, just the changes to the vanilla classes.
This primer is licensed under the Creative Commons Attribution 4.0 International, so feel free to use it as a reference and leave a link so that other readers can consume the primer.
If there's any incorrect or missing information, please leave a comment below. Thanks!
There are a number of user-facing changes that are part of vanilla which are not discussed below that may be relevant to modders. You can find a list of them on Misode's version changelog.
Minecraft now uses Java 21. You can download a copy of the JDK used here: https://learn.microsoft.com/en-us/java/openjdk/download#openjdk-21
Windows machines can install this using winget in PowerShell:
winget install Microsoft.OpenJDK.21Data components (held within a DataComponentMap) are a replacement to the CompoundTag within an ItemStack. Each data component represents a key-value pair where the key is a string and the value is an object holding the data. Data components can be written to disk or synchronized across the network using codecs. All of vanilla's data components are stored within DataComponents, where arbitrary data that hasn't been converted to a data component is held within the minecraft:custom_data key.
The storage of data components has an analog to Maps, where DataComponentMap represents a read-only map and its implementation PatchedDataComponentMap represents an identity map. The data component values themselves should always be treated as immutable objects as both the hash code and equality are determined based on both the keys and values.
To hold data components, an object must implement DataComponentHolder. Currently this is only implement by ItemStack. The holder itself does not have any write based methods. ItemStack, on the other hand, does have methods to set, update, and remove attached components. Any operations that wish to modify a component's value should call set or update, making sure that the component value is immutable or at least not shallowly referenced somewhere else. Each method takes in a DataComponentType which represents the key of the value and the type of object being stored.
// For some ItemStack 'stack' that wants a custom name
stack.set(DataComponents.CUSTOM_NAME, Component.literal("Hello world!"));
// To get the custom name
Component name = stack.get(DataComponents.CUSTOM_NAME);
// To update the stored value of the component
stack.update(DataComponents.CUSTOM_NAME, Component.literal("Default if not set"), component ->
component.withStyle(ChatFormatting.BLUE)
);
// To remove the component
stack.remove(DataComponents.CUSTOM_NAME);To create a custom data component, you must register a DataComponentType. These can be constructed via DataComponentType$Builder. The builder has two methods: persistent(Codec) for if you want the data component to be written to disk, and networkSynchronized(StreamCodec) for if you want the data component to be synchronized to the client. StreamCodecs are explained in more detail in the next section. The component type can also cache the currently encoded value if you are writing to disk the same value often via cacheEncoding.
As an additional utility, Items can have a default set of data components via Item$Properties#component. These values can then be updated for each individual stack.
Any methods regarding items that took in a CompoundTag are will now take in the direct object type. The list of available data component objects can be found within net.minecraft.world.item.component.
When communicating across a network, previously, all logic needed to be manually written and read to a FriendlyByteBuf. However, most of this logic has now been replaced with StreamCodecs. A StreamCodec is a type of codec (which doesn't implement Codec) that holds a function to apply stream-based operations to encode and decode a given object. A StreamCodec is made up of two parts: the StreamEncoder and StreamDecoder.
The StreamEncoder takes in two generics, O representing the output to write data to, and T representing the data object. The StreamDecoder also takes in two generics, I representing the input to read data from, and T representing the constructed data object.
To create a StreamCodec, you will usually use one of the composite functions. The composite function takes in up to 6 pairs of StreamCodec containing the type to serialize and Functions representing the getter for the data field. The final parameter represents the constructor for the object. There are a set of default stream codecs located in ByteBufCodecs.
// A basic stream codec for a record ExampleObject(int, Optional<String>, Holder<Item>)
// Using RegistryFriendlyByteBuf as a registry object is requested
// Otherwise, FriendlyByteBuf should be used
// If no special methods from FriendlyByteBuf are needed, use ByteBuf
public static final StreamCodec<RegistryFriendlyByteBuf, ExampleObject> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.INT, ExampleObject::intField,
StreamCodecs.optional(ByteBufCodecs.STRING_UTF8), ExampleObject::optionalStringField,
ByteBufCodecs.holderRegistry(Registries.ITEM), ExampleObject::holderItemField,
ExampleObject::new
);As many packets have not been updated to use a codec-based approached, they can use Packet#codec to turn a read/write implementation into a codec. This method takes in a StreamMemberEncoder instead of a StreamEncoder as write methods are usually instance methods on the packet class.
// For some ExamplePacket with ExamplePacket(RegistryFriendlyByteBuf) and ExamplePacket#write(RegistryFriendlyByteBuf)
public static final StreamCodec<RegistryFriendlyByteBuf, ExamplePacket> STREAM_CODEC = Packet.codec(
ExamplePacket::write, ExamplePacket::new
);If read and write methods have suddently disppeared, or the network handling has been moved, it is most likely handled by a StreamCodec directly within the object class or in a package within net.minecraft.network.codec. Packets themselves do not contain the StreamCodec and instead are directly registered via ProtocolInfoBuilder#addPacket. Packets now contain a PacketType with the name of the packet and the direction the packet is sent.
Here are some of the classes that uses stream codecs for their implementation logic:
net.minecraft.core.particles.ParticleType#getDeserializer->streamCodecnet.minecraft.network.syncher.EntityDataSerializernet.minecraft.world.item.crafting.RecipeSerializer#fromNetwork,toNetwork->streamCodecnet.minecraft.world.level.gameevent.PositionSourceType#read,write->streamCodec
Entities and items now have sub predicates that can be applied for specific entities and items. Entities store this within the type_specific json object in the EntityPredicate. Items store this within the predicates json object in the ItemPredicate. Each of these are registered to their own built in registry, requiring some codec object.
net.minecraft.advancements.critereon.EntityVariantPredicate->EntitySubPredicates$EntityVariantPredicateType- All variant predicates are within
EntitySubPredicates
- All variant predicates are within
Most methods now take in a Holder of a registry object rather than the registry object directly. As such, direct references should not be used.
net.minecraft.client.renderer.FogRenderer$MobEffectFogFunction#getMobEffectreturns aHolder<MobEffect>net.minecraft.gametest.framework.GameTestHelpernow takes in aHolder<MobEffect>net.minecraft.network.chat.ChatType$Boundnow takes in aHolder<ChatType>net.minecraft.world.effect.MobEffect#addAttributeModifiernow takes in aHolder<Attribute>net.minecraft.world.effect.MobEffectInstancenow takes in aHolder<MobEffect>net.minecraft.world.entity.Entity#gameEventnow takes in aHolder<GameEvent>net.minecraft.world.item.ArmorItemnow takes in aHolder<ArmorMaterial>net.minecraft.world.level.LevelAccessor#gameEventnow takes in aHolder<GameEvent>net.minecraft.world.level.gameevent.GameEventListener#handleGameEventnow takes in aHolder<GameEvent>net.minecraft.world.level.gameevent.GameEventListenerRegistry#visitInRangeListenersnow takes in aHolder<GameEvent>
Many of the methods that were commonly used in ExtraCodecs has been migrated or combined in some other appropriate place within Codec or DataResult. Most of the names are synonymous, so they just need to be replaced with the correct class.
net.minecraft.Util#getOrThrow,getPartialOrThrow->com.mojang.serialization.DataResult#getOrThrow,getPartialOrThrow- `net.minecraft.util.ExtraCodecs
withAlternative->com.mojang.serialization.Codec#withAlternativevalidate->com.mojang.serialization.Codec#validatestrictOptionalField->com.mojang.serialization.Codec#optionalFieldOfas the method is now strict by defaultoptionalFieldOfpreviously has now been replaced bylenientOptionalFieldOf
xor->Codec#xoreither->Codec#eitherstringResolverCodec->Codec#stringResolverrecursive->Codec#recursivelazyInitializedCodec->Codec#lazyInitializedsizeLimitedString->Codec#sizeLimitedString
A lot of read/write methods have been replaced with Codec equivalents.
net.minecraft.nbt.NbtUtils#readGameProfile,#writeGameProfile->ExtraCodecs#GAME_PROFILEnet.minecraft.network.FriendlyByteBufwriteId,readById->Registry#getId,byIdandFriendlyByteBuf#writeVarIntreadCollection,writeCollection,readList,readMap,writeMap,writeOptional,readOptional,writeNullable,readNullabletake in decoders and encoders for streamswriteEither,readEither->Codec#eitherreadComponent,readComponentTrusted,writeComponent->ComponentSerialization#STREAM_CODEC,TRUSTED_STREAM_CODECwriteItem,readItem->ItemStack#OPTIONAL_STREAM_CODECreadGameProfile,writeGameProfile->ExtraCodecs#GAME_PROFILEreadGameProfileProperties,writeGameProfileProperties->ExtraCodecs#PROPERTY_MAP''readProperty,writeProperty->ExtraCodecs#PROPERTY
Most methods that passed around the raw PoseStack has had the parameter removed. Now, no PoseStack, or only the relevant Pose or Matrix4f, is passed.
net.minecraft.client.renderer.GameRenderer#renderLevelno longer takes in aPoseStacknet.minecraft.client.renderer.LevelRendererprepareCullFrustumno longer takes in aPoseStackand only takes in theMatrix4fthat is being operated onrenderLevelno longer takes in aPoseStackrenderSectionLayerno longer takes in aPoseStackrenderSkyno longer takes in aPoseStackand only takes in theMatrix4fthat is being operated on
Matrix4f is no longer passed into the shader uniforms when setting up level lighting.
com.mojang.blaze3d.platform.Lighting#setupForEntityInInventory- Setup light direction uniforms for entity displayed in inventorynet.minecraft.client.particle.ParticleEngine#render(PoseStack, MultiBufferSource$BufferSource, LightTexture, Camera, float)->render(LightTexture, Camera, float)
There is now a separation when it comes to interacting with an item compared interacting with anything else. When interacting where an item is supposed to be called, methods will now return an ItemInteractionResult. An ItemInteractionResult can be mapped to an InteractionResult. The methods below now return an ItemInteractionResult.
net.minecraft.core.cauldron.CauldronInteractioninteractfillBucketemptyBucket
Enchantments have been overhauled to now hold a single record known as an EnchantmentDefinition. This record contains tags for the supported items this enchantment can be applied to, the items it would be considered a primary enchantment, the weight of obtaining the enchantment, the max level the enchantment can be, the minimum and maximum cost of the enchantment, the cost to repair in an anvil, the feature flags, and the slots the enchantment can be applied to.
These values can be created using Enchantment#definition, while the cost can be computed either via constantCost for every level, or dynamicCost for an increasing cost per level. Enchantments still need to be registered like any other built-in registry.
For the tags, there are minecraft:enchantable/* tags which refer to a list of items that can be applied with that enchant. For example, minecraft:enchantable/sword contains all swords. If one of these tags do not match your criteria, you can create a separate enchantable tag for specifically your enchantment. It is recommended to add other items via other enchantable tag groups first. This replaces EnchantmentCategory.
EnchantmentHelper methods have been replaced to use the ItemEnchantments data component object instead of a raw CompoundTag.
getRarity->getWeightgetAnvilCost- The minimum cost needed to repair in an anvilgetDamageBonus(int, MobType)->getDamageBonus(int, EntityType<?>)doPostItemStackHurt- Executes when an item with this enchantment damages an entity
Many of the methods within Block are now protected, to prevent direct access except through the BlockState, or has had some changes to its logic. The following methods are now protected:
updateIndirectNeighbourShapesisPathfindableupdateShapeskipRenderingneighborChangedonPlaceonRemoveonExplosionHituseWithoutItemuseItemOntriggerEventgetRenderShapeuseShapeForLightOcclusionisSignalSourcegetFluidStatehasAnalogOutputSignalgetMaxHorizontalOffsetgetMaxVerticalOffsetrotatemirrorcanBeReplacedgetDropsgetSeedgetOcclusionShapegetBlockSupportShapegetInteractionShapegetLightBlockgetMenuProvidercanSurvivegetShadeBrightnessgetAnalogOutputSignalgetShapegetCollisionShapeisCollisionShapeFullBlockisOcclusionShapeFullBlockgetVisualShaperandomTicktickgetDestroyProgressspawnAfterBreakattackgetSignalentityInsidegetDirectSignalonProjectileHitpropagatesSkylightDownisRandomlyTickinggetSoundType
Here are some other changes:
isPathfindable(BlockState, BlockGetter, BlockPos, PathComputationType)->isPathfindable(BlockState, PathComputationType)use->useWithoutItemBlockStateBase$neighborChanged->handleNeighborChangednet.minecraft.world.level.block.BlockisRandomlyTicking->BlockBehaviour#isRandomlyTickingpropagatesSkylightDown->BlockBehaviour#propagatesSkylightDowngetSoundType->BlockBehaviour#getSoundType
The hard limit has been raised from 64 to 99 for ItemStacks.
net.minecraft.client.gui.components.events.ContainerEventHandler#magicalSpecialHackyFocus has been removed. It did nothing but set the focused element.
net.minecraft.data.worldgen.BootstapContext has finally been renamed to BootstrapContext!
The following is a list of useful or interesting additions, changes, and removals that do not deserve their own section in the primer.
Most string transformation utility methods have been moved to net.minecraft.util.StringUtil with the same name
net.minecraft.Util#isBlank,isWhitespacenet.minecraft.SharedConstants#isAllowedChatCharacter,filterText
All network methods for advancements (read, write) have been made private or removed. They are replaced by StreamCodecs taking in a RegistryFriendlyByteBuf.
The following predicates have been added for handling criteria triggers:
CollectionContentsPredicate-> Returns true if all contents of a collection match the given predicate(s)CollectionCountsPredicate-> Returns true if the number of contents that match the given predicate(s) is within the specified boundsCollectionPredicate-> Returns true depending on the above predicates and whether the size of the collection matches the size specified
A new field called slots on the EntityPredicate can now check the entity's inventory for a match.
Recipe book methods that attempt to get a RecipeBookCategories will now throw a MatchException if no corresponding category exists.
net.minecraft.client.ClientRecipeBook#getCategorynet.minecraft.client.RecipeBookCategories#getCategories
Most logic within the Gui class has been separated to private methods. Additionally, some fields have been removed in favor of using their GuiGraphics counterparts.
renderEffects,renderJumpMeter,renderExperienceBar,renderSelectedItemName,renderDemoOverlayis now privaterenderSavingIndicatoris now public and takes in a float representing the tick ratescreenWidth,screenHeight->GuiGraphics#guiWidth,GuiGraphics#guiHeightitemRendererhas been completely removed
Map decoration textures are now managed by an atlas that is stiched together. Because of this, the map id is now stored within a record MapId holding the current id of the map to render as a texture. MapRenderer uses this MapId instead of a integer.
To access the texture manager, call Minecraft#getMapDecorationTextures.
net.minecraft.client.multiplayer.ClientLevelgetMapData(String)->getMapData(MapId)overrideMapData(String, MapItemSavedData)->overrideMapData(MapId, MapItemSavedData)getAllMapDatareturns aMap<MapId, MapItemSavedData>addMapData(Map<String, MapItemSavedData>)->addMapData(Map<MapId, MapItemSavedData>)
net.minecraft.world.level.LevelsetMapData(String, MapItemSavedData)->setMapData(MapId, MapItemSavedData)getFreeMapIdreturns aMapId
Font providers now have variant filters. There are currently two available: uniform and japanese variants. These filters determine whether the variant should be used. Most font cosntruction methods allows a filter or a font option to be passed in.
com.mojang.blaze3d.font.GlyphProvider$Conditional- Filters whether a glyph provider should be added to the list of available providers when loading a font optionnet.minecraft.client.Options#japaneseGlyphVariants- A new option that, when enabled, will use different variants of Japanese glyphsnet.minecraft.client.gui.font.FontManager#updateOptions- Reloads the available font options to choose fromnet.minecraft.client.Minecraft#selectMainFont->updateFontOptions- This is not one-to-one as the fonts are now options in the menu
net.minecraft.client.gui.font.FontSet#reloadtakes in a conditional holding the filters for a glyph provider and the set of font options to reload
Screen#renderBackground has been broken into three steps: renderPanorama if the level is null, renderBlurredBackground which processes the blur effect to apply to the background, and renderMenuBackground which rends the background texture to the screen. There is also an additional method for rendering a transparent background called renderTransparentBackground which is called when rendering the background in AbstractContainerScreen.
renderDirtBackground -> renderMenuBackground
Some methods in data providers now take in a HolderLookup$Provider to get any relevant registry objects that are not explicitly accessible or built in.
net.minecraft.data.recipes.RecipeProvidernow takes in aCompletableFuture<HolderLookup.Provider>buildAdvancementnow takes in aHolderLookup$Provider
Many references to ResourceLocations now take in an associated ResourceKey instead with the generic tied to the registry object in question.
net.minecraft.data.loot.BlockLootSubProvidernow takes in aMap<ResourceKey<LootTable>, LootTable.Builder>instead of aMap<ResourceLocation, LootTable.Builder>net.minecraft.data.loot.LootTableProvider(PackOutput, Set<ResourceLocation>, List<LootTableProvider.SubProviderEntry>)-> `LootTableProvider(PackOutput, Set<ResourceKey>, List<LootTableProvider.SubProviderEntry>, CompletableFuture<HolderLookup.Provider>)net.minecraft.data.loot.LootTableSubProvider#generate(BiConsumer<ResourceLocation, LootTable.Builder>)->generate(HolderLookup.Provider, BiConsumer<ResourceKey<LootTable>, LootTable.Builder>)
Static methods for writing and reading data have been added to FriendlyByteBuf which takes in the same parameters of the instance method, along with the ByteBuf to write to.
Loot data are now handled through dynamic registries, specifically ones that can be reloaded by the /reload command. This means that any previous references, such as LootDataManager, no longer exist. They can be queried via reloadableRegistries in MinecraftServer or Level
Pack information stored within resources are now stored within a PackLocationInfo object. Parameters such as name or isBuiltIn is stored directly on this object (e.g. id and knownPackInfo, respectively). All classes within net.minecraft.server.packs have been updated to accomdate this change.
A KnownPack is simply a synced key and version indicating where the resource orginated from. As such, both the server and client must have the same contents as the KnownPack is used to avoid syncing the entire pack when unnecessary.
Codec#dispatch now takes in a MapCodec instead of a Codec. All other codecs used for dispatch have been updated to a MapCodec:
net.minecraft.core.particles.ParticleType#codecnet.minecraft.client.renderer.texture.atlas.SpriteSources#registernet.minecraft.client.renderer.texture.atlas.SpriteSourceTypenet.minecraft.util.valueproviders.FloatProviderType#codecnet.minecraft.util.valueproviders.IntProviderType#codecnet.minecraft.world.item.crafting.RecipeSerializer#codecnet.minecraft.world.level.biome.BiomeSource#codecnet.minecraft.world.level.chunk.ChunkGenerator#codecnet.minecraft.world.level.gameevent.PositionSourceType#codecnet.minecraft.world.level.levelgen.blockpredicates.BlockPredicateType#codecnet.minecraft.world.level.levelgen.carver.WorldCarver#configuredCodecnet.minecraft.world.level.levelgen.feature.Feature#configuredCodecnet.minecraft.world.level.levelgen.feature.featuresize.FeatureSizeType#codecnet.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacerType#codecnet.minecraft.world.level.levelgen.feature.rootplacers.RootPlacerType#codecnet.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProviderType#codecnet.minecraft.world.level.levelgen.feature.treedecorators.TreeDecoratorType#codecnet.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacerType#codecnet.minecraft.world.level.levelgen.heightproviders.HeightProviderType#codecnet.minecraft.world.level.levelgen.placement.PlacementModifierType#codecnet.minecraft.world.level.levelgen.structure.Structure#simpleCodecnet.minecraft.world.level.levelgen.structure.StructureType#codecnet.minecraft.world.level.levelgen.structure.placement.StructurePlacementType#codecnet.minecraft.world.level.levelgen.structure.pools.StructurePoolElementType#codecnet.minecraft.world.level.levelgen.structure.pools.alias.PoolAliasBinding#codecnet.minecraft.world.level.levelgen.structure.templatesystem.PosRuleTestType#codecnet.minecraft.world.level.levelgen.structure.templatesystem.RuleTestType#codecnet.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorType#codecnet.minecraft.world.level.levelgen.structure.templatesystem.rule.blockentity.RuleBlockEntityModifierType#codecnet.minecraft.world.level.storage.loot.entries.CompositeEntryBase#createCodecnet.minecraft.world.level.storage.loot.entries.LootPoolEntryTypenet.minecraft.world.level.storage.loot.functions.LootItemFunctionTypenet.minecraft.world.level.storage.loot.predicates.LootItemConditionTypenet.minecraft.world.level.storage.loot.providers.nbt.LootNbtProviderTypenet.minecraft.world.level.storage.loot.providers.number.LootNumberProviderTypenet.minecraft.world.level.storage.loot.providers.score.LootScoreProviderType
The pakrat parser has been added to net.minecraft.util.parsing.packrat to read and parse strings from commands. However, this implementation can be used generically by creating your own grammar.
An EntityAttachment is a definition of where a given point lies the entity. For example, a name tag could be directly on top of an entity or underneath it. Each EntityAttachment contains a fallback of where the point should go if there is none set. Multiple points can be registered for a given EntityAttachment.
EntityAttachments are added from the EntityType$Builder using one of the *Attachments, *Offset, or attach methods. They can then be accessed from the entity using #getAttachments. To get an attachment vector value, specify the attachment, index, and y rotation, calling EntityAttachments#getNullable if you want null to be returned, or get if you want an error to be thrown.
Dyable armor is now a setting on the ArmorMaterial$Layer and an item tag minecraft:dyeable rather than a completely separate class. When true, this will tint the armor texture provided. The ItemStack must have a DYED_COLOR data component to read the tint color from. The tag allows this component to be added through the armor dyeing crafting table recipe.
PotionBrewing is now an instance class on the MinecraftServer that is passed through the Level. This means all static methods are now instance methods.
Tooltips for a particular object stored on an item (usually for DataComponents) are now implemented via TooltipProvider. This interface has one method which takes in the context of the item tooltip, a consumer to supply the tooltip contents to, and the currently set tooltip flags. Calling this is usualy within Item#appendHoverText:
@Override
public void appendHoverText(ItemStack stack, Item.TooltipContext ctx, List<Component> tooltips, TooltipFlag flags) {
// Get some TooltipProvider implementation provider
provider.addToTooltip(ctx, tooltips::add, flags);
}BAD_OMEN->RAID_OMENDEFAULT_BLOCK_USE(minecraft:default_block_use)ANY_BLOCK_USE(minecraft:any_block_use)CRAFTER_RECIPE_CRAFTED(minecraft:crafter_recipe_crafted)FALL_AFTER_EXPLOSION(minecraft:fall_after_explosion)
EQUIPMENT->ORIGIN,THIS_ENTITYVAULT->ORIGIN,THIS_ENTITY?BLOCK_USE->ORIGIN,THIS_ENTITY,BLOCK_STATESHEARING->ORIGIN,THIS_ENTITY?
com.mojang.blaze3d.vertex.PoseStack$PosetransformNormal- Applies a transform to the normal within the given posecopy- Makes a deep copy of the current pose. Does not add to stack
com.mojang.math.MatrixUtilisPureTranslation- Returns true if the matrix has only been translated from the identityisOrthonormal- Returns true if the upper left 3x3 submatrix is orthogonal
net.minecraft.UtiltoMutableList- Creates a collector for a mutable listgetRegisteredName- Gets the registry name of an object, or[unregistered]if not registeredallOf- Combines all predicates into a single predicate using ANDscopyAndAdd- Creates a new immuatble list with the added elementcopyAndPut- Creates a new immutable map with the added element
net.minecraft.client.GuiMessage#icon- Returns the icon for the message tag when present, otherwise nullnet.minecraft.client.Minecraft#disconnect(Screen, boolean)where the boolean, when true, will not clear downloaded resource packsnet.minecraft.client.MouseHandler#handleAccumulatedMovement- Handles the movement of the mouse when running the ticknet.minecraft.client.OptionInstance#createButton(Options)- Creates a button at (0,0) with a width of 150net.minecraft.client.OptionsmenubackgroundBlurriness- A new option to determine how blurry the background of a menu should be
net.minecraft.client.gui.GuiGraphicscontainsPointInScissor- Returns true if the given point is within the top entry of the scissor stackfillRenderType- Creates a filled quad for the givenRenderType
net.minecraft.client.LayeredDraw- A class that renders objects on top of each other. The distance between each layer is translated 200 units in the Z direction to allow proper stackingnet.minecraft.client.gui.components.AbstractSelectionListupdateSize- Updates the size of the list to displayupdateSizeAndPosition- Updates the size and position of the list to displaygetDefaultScrollbarPosition- Gets the x position where the scrollbar would normally rendergetListOutlinePadding- Gets the padding to offset the x position of the scrollbargetRealRowLeft- Gets the actual left position of the listgetRealRowRight- Gets the actual right position of the list
net.minecraft.client.gui.components.ChatComponentstoreState- Returns the current state of the chat messages stored in the componentrestoreState- Sets the current state of the chat messages to a previous setup
net.minecraft.client.gui.components.CycleButton#create(Component, CycleButton$OnValueChange)- Constructs a new button at (0,0) of size (150,20)- `net.minecraft.client.gui.components.DebugScreenOverlay
showFpsCharts- When true, renders the FPS chartlogRemoteSample- Logs a full sample for the specified sample type
net.minecraft.client.gui.components.FocusableTextWidget#containWithin- Sets the max width to contain the specified size excluding paddingnet.minecraft.client.gui.components.TabButton$renderMenuBackground- Renders the background of the screennet.minecraft.client.gui.components.debugchart.AbstractDebugChartdrawDimensions- Draws the sample and additional informationdrawMainDimension- Draws the sample to the displaydrawAdditionalDimensions- Draws additional information about the samplegetValueForAggregation- Reads the data within the sample storage
net.minecraft.client.gui.components.toasts.SystemToastonLowDiskSpace- Creates a system toast that notifies the disk space needed to write the chunk is lowonChunkLoadFailure- Creates a system toast that notifies the chunk has failed to loadonChunkSaveFailure- Creates a system toast that notifies the chunk has failed to save
net.minecraft.client.gui.font.FontSet#name- the name of the font setnet.minecraft.client.gui.font.providers.FreeTypeUtil- A utility for interactions the Freetype Font API- `net.minecraft.client.gui.layouts.HeaderAndFooterLayout
getContentHeight- Gets the y position of the contentaddTitleHeader- Adds a string widget to the header
net.minecraft.client.gui.navigation.ScreenRectangle#containsPoint- Checks whether the point is within the current rectanglenet.minecraft.client.gui.screens.Screen#setInitialFocus- This method should be overridden to set the initial focused widget on screennet.minecraft.client.multiplayer.ClientPacketListenerscoreboard- Gets the sent scoreboard from the serverpotionBrewing- Gets the sent brewing information from the server
net.minecraft.client.multiplayer.KnownPacksManager- A class that holds the known packs on the client from the servernet.minecraft.client.multiplayer.RegistryDataCollector- A collector which holds the contents and tags of the available registriesnet.minecraft.client.multiplayer.TagCollector- A collector which holds the tags of the available registriesnet.minecraft.client.multiplayer.ServerDatastate- Gets the current state of the server datasetState- Sets the current state of the server data
net.minecraft.client.particle.Particle$LifetimeAlpha- A particle utility for handing animated alpha over the particle's lifetime using linear interpolationnet.minecraft.client.renderer.GameRendererloadBlurEffect- Loads the effect of the blur post processor (private)processBlurEffect- Processes the blur effect, applies the 'Radius' uniform using the menu blackground blurriness optiongetRendertypeCloudsShader- Gets the shader for the clouds render type
net.minecraft.client.renderer.entity.EntityRenderer#getShadowRadius- Returns the radius of the entity's shadownet.minecraft.client.renderer.entity.layers.WolfArmorLayer- Render layer for wolf armornet.minecraft.client.sounds.ChunkedSampleByteBuf- A byte buffer chunked into multiple byte buffersnet.minecraft.commands.arguments.ResourceOrIdArgument- An argument that operates on a resource or registry object identifiernet.minecraft.commands.arguments.SlotsArgument- An argument that operates on a specific slot within a slot rangenet.minecraft.commands.functions.CommandFunction#checkCommandLineLength- Commands with over 2 million characters will throw an errornet.minecraft.core.BlockBox- A rectangular prism as defined by two block positionsnet.minecraft.core.BlockPosmin- Takes the minimum coordinates between two block positions and creates a new onemax- Takes the maximum coordinates between two block positions and createa a new one
net.minecraft.core.Direction#getNearest- Gets the direction closest to the normalized vectornet.minecraft.core.Direction$Plane#length- Gets the number of faces in a given planenet.minecraft.core.Holderis(Holder)- Checks if two holders are equivalent, this method is deprecatedgetRegisteredName- Gets the registry object's identifer
net.minecraft.core.HolderGetter$Provider#get- Gets a refence holder to a registry object from the registry key and resource keynet.minecraft.core.HolderLookup#createSerializationContext- Creates a registry ops for the current registries providernet.minecraft.core.HolderSet#empty- Gets an empty holder setnet.minecraft.core.IdMap#getIdOrThrow- Gets the id of a registry object or throws an error if not presentnet.minecraft.core.RegistrationInfo- Holds information related to a specific registry object in a registry (the pack it came from and the lifecycle of the object)net.minecraft.core.RegistrygetHolder(ResourceLocation)- Gets the object holder from its registry idgetRandomElementOf- Gets a random element from the registry filtered by a tag
net.minecraft.core.RegistrySynchronization$PackedRegistryEntry- Holds the data for a given registry entrynet.minecraft.data.tags.TagsProvider$TagAppender#addAll- Adds a list of resource keys to the tagnet.minecraft.gametest.framework.GameTestskyAccess- When false, when preparing a test structure, this will spawn barrier blocks on top of the structuremanualOnly- When true, the test can only be manually triggered and not run as part of all available tests
net.minecraft.gametest.framework.GameTestHelperspawnItem(Item, Vec3)- Spawns an item at the specified relative vectorfindOneEntity- Finds the first entity that matches the typefindClosestEntity- Finds the closest entity to the specifid (x,y,z) within a given radiusfindEntities- Finds all entities within the given radius centered at (x,y,z)moveTo- Moves a mob to the specified position using theMob#moveTomethodgetEntities- Get all entities of a given type within the test boundsassertValueEqual- Asserts that two objects are equivalentassertEntityNotPresent- Asserts that an entity is not present between the given vectors
net.minecraft.gametest.framework.GameTestListener#testAddedForRerun- A listener method that is called if the test needs to be rerunnet.minecraft.gametest.framework.GameTestRunner$Builder- A builder for constructing a runner to run the game testsnet.minecraft.network.RegistryFriendlyByteBuf- A byte buffer which holds aRegistryAccessnet.minecraft.resources.RegistryDataLoader#load- Methods have been added to add aLoadingFunctionwhich handles how the data in the registry is loadednet.minecraft.resources.RegistryOpsinjectRegistryContext- Wraps aDynamicwith some ops into aDynamicwith aRegistryOpswithParent- Creates aRegistryOpswith the passed inDynamicOpsas a delegate
net.minecraft.resources.ResouceLocation#readNonEmpty- Reads aResourceLocation, throwing an error if the reader buffer is emptynet.minecraft.server.MinecraftServerreloadableRegistries- Holds an accessor to the dynamic registries on the serversubscribeToDebugSample- Registers a player to receive debug samplesacceptsTransfers- Determines whether transfer packets can be sent to the serverreportChunkLoadFailure- Reports a chunk has failed to loadreportChunkSaveFailure- Reports a chunk has failed to save
net.minecraft.server.ReloadableServerRegistries- A class which holds registries that can be reloaded while in game (e.g., loot tables)net.minecraft.server.level.ServerLevel#getPathTypeCache- Gets the cache ofPathTypes when computed by an entity- `net.minecraft.server.level.ServerPlayer
setSpawnExtraParticlesOnFall- Sets a boolean to spawn more particles when landing from a fallsetRaidOmenPosition,clearRaidOmenPosition,getRaidOmenPosition- Handles creating a raid from the given position
net.minecraft.util.ListAndDeque- An interface which defines an object as a list and deque that can be randomly accessedArrayListDequenow implements this interface
net.minecraft.util.ExtraCodecssizeLimitedMap- Makes sure the map is no larger than the specified sizeoptionalEmptyMap- Returns an optional map
net.minecraft.util.FastColoras8BitChannel- Gets an 8-bit color value from a float between 0-1color(int,int,int)- Creates an opaque 32-bit color value from RGBopaque-> Sets the alpha of a color to 255color(int,int)- Creates a color with the R channel separated from the GBcolorFromFloat- Creates a 32-bit color value from floats between 0-1
net.minecraft.util.Mth#mulAndTruncate- Multiplies a fraction by some value. Since integer division is used, the resulting division is floorednet.minecraft.util.NullOps- An intermediary that only represents a null valuenet.minecraft.util.ParticleUtilsspawnParticleInBlock- Spawns particles within a blockspawnParticles- Spawns particles at the given position with some offset
net.minecraft.util.profiling.jfr.JvmProfiler#onRegionFile(Read|Write)- Handles logic when the region file for a given world has been read from or written tonet.minecraft.world.Container#getMaxStackSize(ItemStack)- Gets the max stack size for anItemStackby getting the minimum of the container max stack size and the stack's max stack sizenet.minecraft.world.InteractionResult#SUCCESS_NO_ITEM_USED- The interaction was successful but the context entity did not use an itemnet.minecraft.world.effect.MobEffectonEffectAdded- Called when the effect is first added to the entityonMobRemoved- Called when the entity has been removed from the level when the effect is appliedonMobHurt- Called when the entity is hurt when the effect is appliedcreateParticleOptions- Creates the particle options to spawn around the entitywithSoundOnAdded- Sets the sound when the effect is added to an entity
net.minecraft.world.effect.MobEffectInstanceis- Returns true if the effect holders are equalskipBlending- Tells the effect not to blend with other environmental renderers (e.g. fog)
net.minecraft.world.entity.AnimationState#fastForward- Speeds up the animation based upon the animation duration and a scale amount between 0-1net.minecraft.world.entity.Crackiness- Handles the state of how much armor has been damaged, or 'cracked'net.minecraft.world.entity.EntitygetDefaultGravity- Gets the default gravity value to apply to the entitygetGravity- Gets the gravity to apply to the entity, or if there is no gravity 0applyGravity- Applies gravity to the delta movement of the entity.getNearestViewDirection- Gets the direction nearest to the current view vectorgetDefaultPassengerAttachmentPoint- Determines the default attachment point based upon the entity's current dimensionsdeflection- Determines how an entity interacts with this projectilegetPassengerClosestTo- Gets the passenger closest to the given vectoronExplosionHit- Handles when the entity is hit with an explosionregistryAccess- Gets the current registry access
net.minecraft.world.entity.EntityType$Builder#spawnDimensionsScale- Sets the scale factor to apply to the entity's dimensions when attempting to spawnnet.minecraft.world.entity.EquipmentSlot#BODYnet.minecraft.world.entity.EquipmentSlotGroup- Indicates a grouping ofEquipmentSlotsnet.minecraft.world.entity.EquipmentTable- Indicates the drop chances of a givenEquipmentSlotnet.minecraft.world.entity.EquipmentUser- Indicates that the entity can wear equipment- All
Mobs andArmorStands are equipment users
- All
net.minecraft.world.entity.LivingEntitygetComfortableFallDistance- Increases the fall distance that the entity can survive without taking damage by three blocksdoHurtEquipment- Handles when a piece of equipment should be damagedcanUseSlot- Whether a slot can be used on an entitygetJumpPower(float)- Gets the power of a jump from the attribute, scaling by a float and the block jump factor and adding the jump boost powergetDefaultDimensions- Gets the base dimensions for a given posegetSlotForHand- Gets theEquipmentSlotfor a givenInteractionHandhasInfiniteMaterials- Whether the entity has an infinite amount of materials in its inventory. This is currently only used by thePlayer
net.minecraft.world.entity.MobgetTargetFromBrain- Gets the attack target of the entity, or null if none is availablestopInPlace- Stops all navigation and entity movementclampHeadRotationToBody- Keeps the head movement within the bounds of the bodygetBodyArmorItem,canWearBodyArmor,isWearingBodyArmor,isBodyArmorItem,setBodyArmorItem- Logic for handling armor in theBODYslotmayBeLeashed- If the entity can be leashed
net.minecraft.world.entity.SlotAccess#of- Creates aSlotAccessusing a supplier, consumer setupnet.minecraft.world.entity.SpawnPlacements#isSpawnPositionOk- If the entity can spawn in this positionnet.minecraft.world.entity.ai.attributes.AttributeInstance#addOrUpdateTransientModifier- Updates a modifier value to the current one if it is already present, otherwise adds itnet.minecraft.world.entity.ai.behavior.Swim#shouldSwim- Checks whether the entity can swimnet.minecraft.world.entity.ai.navigation.PathNavigation#moveTo- AmoveTomethod which takes in a close enough distancenet.minecraft.world.entity.monster.AbstractSkeletongetHardAttackInterval- After how many ticks the entity will attack when in the hard difficultygetAttackInterval- After how many ticks the entity will attack when not in the hard difficulty
net.minecraft.world.entity.player.Inventory#contains(Predicate)- Whether a stack in the inventory matches the predicatenet.minecraft.world.entity.player.Player#canInteractWithEntity- Whether the player can interact with another entitynet.minecraft.world.entity.projectile.AbstractArrowgetDefaultPickupItem,setPickupItemStack- Gets the default pickup item if the actual item stack cannot be obtained or is emptygetSlot- Gets the slot access of the pickupable stack
net.minecraft.world.entity.projectile.ProjectilegetMovementToShoot- Gets the movement to apply to the entity when shootinghitTargetOrDeflectSelf- Gets the deflection status of the projectiledeflect- Deflects the entityonDeflection- What to do when this projectile is deflected
net.minecraft.world.entity.projectile.ProjectileDeflection- The status of how a projectile can be deflected, typically on punchnet.minecraft.world.entity.raid.RaiderisCaptain- Whether the entity is a captain of a raidhasRaid- If the entity has a raid to do
net.minecraft.world.entity.vehicle.ContainerEntity#getBoundingBox- Gets the bounding box of the entitynet.minecraft.world.flag.FeatureFlagSetisEmpty- Whether there are no feature flags enabledintersects- Whether two feature flag sets contain at least one similar feature flagsubtract- Returns a feature flag set without the flags of the parameter
net.minecraft.world.food.FoodConstants#saturationByModifier- Takes in the number of hearts to heal and how the saturation should be multiplied bynet.minecraft.world.inventory.SlotRange- Defines a range of slot indexes that can be referenced from some string prefix plus the index (all availableSlotRanges are inSlotRangesnet.minecraft.world.item.ArmorItem$Typeis nowStringRepresentablehasTrims- Whether the armor type supports trims
net.minecraft.world.item.ArmorMaterial#layers- Stores information about the texture location of the armor typenet.minecraft.world.item.DiggerItem#createAttributes- Creates the attribute modifiers given for a tier, attack damage, and attack speednet.minecraft.world.item.Itemcomponents- Gets the data component mapgetDefaultMaxStackSize- Reads the max stack size of the component, or defaults to 1getAttackDamageBonus- Applies a bonus to the attack damage when in the main handgetBreakingSound- The sound even to play when the item breaks$Properties#component- Adds a data component to the item$Properties#attributes- Sets the attribute modifiers for the item$TooltipContext- Holds access to the available registries, tick rate, andMapItemSavedDatawhen coming from aLevel
net.minecraft.world.item.ItemStackgetPrototype- Gets the component map from the itemgetComponentsPatch- Gets the patches to the component map on the currentItemStackvalidateComponents- Validates whether certain components can be on the component mapparse- Parses the stack from a tagparseOptional- Parses the stack from a tag, or returns an empty stack when not presentsave- Saves the stack to a tag, or returns an empty tagtransmuteCopy- Creates a new copy, providing the component patchtransmuteCopyIgnoreEmpty- Creates a new copy without checking whether the stack is empty or notlistMatches- Returns whether two lists of stacks match each other 1-to-1lenientOptionalFieldOf- Creates a map codec with an optional stackhashItemAndComponents- Computes the hash code for a given stackhashStackList- Computes the hash code for a list of stacksset- Sets a data component valueupdate- Updates a data component valueapplyComponentsAndValidate- Applies a component patch and validates the componentsapplyComponents- Applies a patch to the component map and validatesgetEnchantments- Gets the item enchantments from the data componentforEachModifier- Applies a consumer for every modifier in the attribute modifierslimitSize- Sets the count of the stack if the current count is larger than the limitconsume- Consumes a single item
net.minecraft.world.item.ProjectileItem- Defines an item that can function like a projectile. Contains logic for constructing the projectile and shooting it either from the entity or dispenserProjectileWeaponItemcontains protected implementations of these methods to be set when implementingProjectileItem
net.minecraft.world.item.SwordItem#createAttributes- Creates the attribute modifiers given for a tier, attack damage, and attack speednet.minecraft.world.item.TiergetIncorrectBlocksForDrops- A negative restraint preventing certain blocks from receiving a boost from this tiercreateToolProperties- Creates aToolgiven the tag containing the blocks to speed up mining for
net.minecraft.world.level.ExplosionDamageCalculator#getKnockbackMultiplier- Returns a scalar on how much knockback to apply to the entitynet.minecraft.world.level.SpawnData#isValidPosition- Whether the entity can spawn within the specified block and sky lightnet.minecraft.world.level.block.BonemealableBlockgetParticlePos- Gets the position the particle should spawngetType- Gets the type of effect the bonemeal has on particle spawning
net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity#invalidateCache- Clears the fuel mapnet.minecraft.world.level.block.entity.BannerBlockEntity#getPatterns- Gets the stored patterns on the bannernet.minecraft.world.level.block.entity.BlockEntityapplyImplicitComponents- Reads any data stored on the component input for the block entitycollectImplicitComponents- Writes any data to be stored on the stackremoveComponentsFromTag- Removes any information that is stored doubly within theBlockEntityTagthat is handled by a data componentcomponents,setComponents- Getters and setters for the stored data component map
net.minecraft.world.level.block.entity.Hopper#isGridAligned- Returns true if the hopper is always aligned to the block gridnet.minecraft.world.level.block.entity.trialspawner.PlayerDetector$EntitySelector- Determines how to select an entity from a given contextnet.minecraft.world.level.chunk.storage.RegionFile#getPath- Gets the path of the region filenet.minecraft.world.level.chunk.storage.RegionFileInfo- A record which contains the current level name, dimension, and the type of the region (e.g. chunk)net.minecraft.world.level.levelgen.structure.Structure#getMeanFirstOccupiedHeight- Gets the average height of the four corners of the structurenet.minecraft.world.level.levelgen.structure.BoundingBox#inflatedBy(int, int, int)- Inflates the size of the box by the specified (x,y,z) in both directionsnet.minecraft.world.level.levelgen.structure.placement.StructurePlacementapplyAdditionalChunkRestrictions- Returns whether the structure should generate given some level of frequency reductionapplyInteractionsWithOtherStructures- Returns whether the structure should generate based on the exclusion zones
net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate#updateShapeAtEdge(LevelAccessor, int, DiscreteVoxelShape, BlockPos)- CallsBlockState#updateShapeon all blocks on the edges of the structurenet.minecraft.world.level.pathfinder.NodeEvaluator#getPathType(Mob, BlockPos)- Gets the path type by callinggetPathType(PathfindingContext, int, int, int)where thePathfindingContextis constructed from the mob and the three integers by unwrapping theBlockPosnet.minecraft.world.level.pathfinder.PathfindingContext- A context object which holds information related to the current world, cache, and mob positionnet.minecraft.world.level.storage.LevelStorageSource$LevelStorageAccessestimateDiskSpace- Returns how much disk space is left to write tocheckForLowDiskSpace- Checks if the amount of disk space remaining is less than 64MiB
net.minecraft.world.level.storage.LevelSummary#canUpload- Returns whether the current level summary can be uploaded in a realmnet.minecraft.world.level.storage.loot.ContainerComponentManipulator- A helper for setting container contents for items in their data components- A list of available manipulators can be found in
ContainerComponentManipulators
- A list of available manipulators can be found in
net.minecraft.world.level.storage.loot.functions.ListOperation- Defines an operation that can be performed on a listnet.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction#getType- Gets the item function type that can be conditionally loadednet.minecraft.world.phys.shapes.BitSetDiscreteVoxelShape#isInterior- Checks whether the position is surrounded by fully encompassing shapes on all sidesnet.minecraft.client.gui.font.providers.FreeTypeUtil#checkError- Returns true if an error was foundnet.minecraft.client.gui.screens.ScreenadvancePanoramaTime- Updates the panorama by a set interval every frame- Does not use the delta time frame provided in
renderPanorama
- Does not use the delta time frame provided in
clearTooltipForNextRenderPass- Clears the tooltip rendering data
net.minecraft.nbt.CompoundTag#shallowCopy- Creates a shallow copy of the tagnet.minecraft.network.protocol.PacketUtils#makeReportedException- Fills the crash report before returning the reported exception to thrownet.minecraft.server.packs.repository.PackRepository#displayPackList- Collects all packs into a single string by their idnet.minecraft.world.item.crafting.RecipeManager#getOrderedRecipes- Gets all recipes ordered by theirRecipeTypenet.minecraft.world.level.chunk.ChunkGenerator#validate- Resolves the feature step data to generate
com.mojang.blaze3d.font.SheetGlyphInfogetBearingX->getBearingLeftgetBearingY->getBearingTopgetUp->getTopgetDown->getBottom
com.mojang.blaze3d.font.TrueTypeGlyphProvidernow usesorg.lwjgl.util.freetypeoverorg.lwjgl.stbfor font data storagecom.mojang.blaze3d.platform.NativeImage#copyFromFont->(FT_Face, int)- This method also returns a boolean, indicating whether the operation was successful
com.mojang.blaze3d.systems.RenderSystem#getModelViewStacknow returns aMatrix4fStackcom.mojang.blaze3d.vertex.PoseStack#mulPoseMatrix->#mulPosecom.mojang.blaze3d.vertex.SheetedDecalTextureGeneratornow takes in aPoseStack$Posecom.mojang.blaze3d.vertex.VertexConsumer#putBulkDatanow takes in the alpha parameter for the colornet.minecraft.Util#LINEAR_LOOKUP_THRESHOLDis now publicnet.minecraft.advancements.Advancement#validate(ProblemReporter, LootDataResolver)->validate(ProblemReporter, HolderGetter$Provider)net.minecraft.advancements.AdvancementRewards$Builder#loot,addLootTablenow take in aResourceKey<LootTable>net.minecraft.client.MouseHandler#turnPlayeris now privatenet.minecraft.client.Options$FieldAccess#process(String, OptionInstance)->Options$OptionAccess$processnet.minecraft.client.gui.components.AbstractSelectionList#renderList->renderListItemsnet.minecraft.client.gui.components.AbstractWidget#setTooltipDelay(int)->setTooltipDelay(Duration)- `net.minecraft.client.gui.components.ChatComponent
rendernow takes in if the chat is focused as a boolean parameterisChatFocusedis now public
net.minecraft.client.gui.components.Checkbox#getBoxSizeis now publicnet.minecraft.client.gui.components.FocusableTextWidgetnow takes in an integer representing the padding of the widgetnet.minecraft.client.gui.components.ObjectSelectionList$Entry#mouseClickedreturns true by defaultnet.minecraft.client.gui.components.OptionList- The constructor now takes in a
OptionsSubScreencontaining the content height and header height addSmallcan now take in a varargs ofOptionInstances, a list of widgets, or two widgetsgetMouseOvernow holds an optional ofGuiEventListener$Entry->$OptionEntry,$Entryis now an abstracted form which takes in the widgets directly
- The constructor now takes in a
net.minecraft.client.gui.components.SpriteIconButtonnow takes in aButton$CreateNarrationobject- This has been updated for all subclasses and provided a builder option called
narration
- This has been updated for all subclasses and provided a builder option called
net.minecraft.client.gui.components.Tooltip#setDelay,refreshTooltipForNextRenderPass,createTooltipPositionerhave been moved toWidgetTooltipHolder- The holder is stored on an
AbstractWidgetand is final. The tooltip within is mutable
- The holder is stored on an
net.minecraft.client.gui.components.debugchart.AbstractDebugChartnow takes in aSampleStorage, which is an interface to the oldSampleLogger(now renamedLocalSampleLogger)net.minecraft.client.gui.screens.ChatScreen#handleChatInputno longer returns anythingnet.minecraft.client.gui.screens.ConnectScreen#startConnectingtakes in the currentTransferStatenet.minecraft.client.gui.screens.GenericDirtMessageScreen->GenericMessageScreennet.minecraft.client.gui.screens.OptionsSubScreennow holds aHeaderAndFooterLayoutto initialize widgets and reposition themaddTitle,addFooterhave been added, replacing specificcreateTitleandcreateFootermethods in other implementations
net.minecraft.client.gui.screens.Screen#setTooltipForNextRenderPassis now publicnet.minecraft.client.gui.screens.advancements.AdvancementsScreencan hold the last screen the user has seennet.minecraft.client.gui.screens.inventory.InventoryScreen#renderEntityInInventorynow takes in a float for the scale parameternet.minecraft.client.gui.screens.worldselection.WorldCreationUiStatesetAllowCheats->setAllowCommandsisAllowCheats->isAllowCommands
net.minecraft.client.gui.screens.worldselection.WorldOpenFlowscheckForBackupAndLoad(String, Runnable)->openWorldcheckForBackupAndLoad(LevelStorageAccess, Runnable)->openWorldLoadLevelDataloadLevel->openWorldLoadLevelStem
net.minecraft.client.multiplayer.ServerStatusPinger#pingServernow takes in a runnable that runs on response from the pong packetnet.minecraft.client.particle.FireworkParticles$SparkParticle#setFlicker->setTwinklenet.minecraft.client.player.inventory.Hotbarholds a list ofDynamics instead of the raw itemstack listnet.minecraft.client.renderer.EffectInstancenow takes in aResourceProviderinstead of aResourceManagerResourceManagerimplementsResourceProvider, so there is no major change in implementation
net.minecraft.client.renderer.LevelRenderer#renderCloudstakes in aMatrix4fcontaining the pose to transform the clouds to the correct locationnet.minecraft.client.renderer.PanoramaRenderer#render(float, float)->render(GuiGraphics, int, int, float, float)net.minecraft.client.renderer.PostChainnow takes in aResourceProviderinstead of aResourceManagerResourceManagerimplementsResourceProvider, so there is no major change in implementation
net.minecraft.client.renderer.PostChain#addPassnow takes in a boolean which determines whether to useGL_LINEARwhen true orGL_NEARESTwhen falsenet.minecraft.client.renderer.PostPassnow takes in aResourceProviderinstead of aResourceManagerResourceManagerimplementsResourceProvider, so there is no major change in implementation
net.minecraft.client.renderer.PostPass#getFilterMode- Either
GL_LINEARorGL_NEAREST
- Either
net.minecraft.client.renderer.blockentity.SkullBlockRenderer#getRenderType(SkullBlock$Type, GameProfile)->getRenderType(SkullBlock$Type, ResolvableProfile)net.minecraft.client.renderer.entity.LivingEntityRenderer#setupRotationsnow takes in a scale representing the float parameternet.minecraft.client.renderer.entity.ArrowRenderer#vertexcombines theMatrix4fandMatrix3finto aPoseStack$Posenet.minecraft.client.renderer.entity.EntityRenderer#renderNameTagnow takes in a float representing the partial ticknet.minecraft.client.renderer.entity.layers.StrayClothingLayer->SkeletonClothingLaternet.minecraft.client.renderer.item.ItemProperties#getProperty(Item, ResourceLocation)->getProperty(ItemStack, ResourceLocation)com.mojang.blaze3d.audio.OggAudioStreamreplaced bynet.minecraft.client.sounds.FiniteAudioStream,FloatSampleSource,JOrbisAudioStreamnet.minecraft.commands.CommandBuildContextnow implementsHolderLookup$Provider, replacingholderLookupandconfigurablenet.minecraft.commands.arguments.ComponentArgumentnow takes in aHolderLookup$Providerwhen constructing a text componentnet.minecraft.commands.arguments.ParticleArgument#readParticletakes in aHolderLookup$Providerinstead of aHolderLookupspecifically for particle typesnet.minecraft.commands.arguments.ResourceLocationArgumentsgetPredicate->ResourceOrIdArgument#getLootPredicategetItemModifier->ResourceOrIdArgument#getLootModifier
net.minecraft.commands.arguments.StyleArgumentnow takes in aHolderLookup$Providerwhen constructing a style, orCommandBuildContextwhen callingstylenet.minecraft.commands.arguments.item.ItemInputno longer implementsPredicate<ItemStack>net.minecraft.commands.functions.CommandFunction#instantiateno longer takes in the generic object- The generic object is now stored as an entry directly within the function itself (e.g.
MacroFunction)
- The generic object is now stored as an entry directly within the function itself (e.g.
net.minecraft.ccommands.functions.FunctionBuilder#addMacrotakes in the generic objectnet.minecraft.core.GlobalPosis now a record, though there is no change in usagenet.minecraft.core.HolderLookupthe below logic is now applied specifically for$RegistryLookupfilterElements-> `HolderLookup$RegistryLookup#filterElements)$Delegate->HolderLookup$RegistryLookup$Delegate
net.minecraft.core.Registry#lifecycle(T)->registrationInfo(ResourceKey<T>)net.minecraft.core.RegistrySetBuilder#lookupFromMapnow takes in aHolderOwnernet.minecraft.core.RegistrySetBuilder$CompositeOwner->$UniversalOwner- This is not one to one, it is simply a replacement
net.minecraft.core.WritableRegistry#register(ResourceKey, T, Lifecycle)->register(ResourceKey, T, RegistrationInfo)net.minecraft.core.dispenser.AbstractProjectileDispenseBehavior->ProjectileDispenseBehaviornet.minecraft.data.DataProvider#saveStablealso takes in aHolderLookup$Providerto get theRegistryOpslookup context- Game test batches have been reimplemented. The logic is now split between
net.minecraft.gametest.framework.GameTestBatch,GameTestBatchFactory, andGameTestBatchListener net.minecraft.gametest.framework.GameTestHelper#makeMockSurvivalPlayer,makeMockPlayer()->makeMockPlayer(GameType)net.minecraft.gametest.framework.GameTestListener#testPassed,testFailednow take in aGameTestRunnernet.minecraft.nbt.NbtUtilsreadBlockPosnow takes in a key for the int array within theCompoundTagwriteBlockPosnow returns anIntArrayTag
net.minecraft.network.chat.ChatType#CODEC->#DIRECT_CODECnet.minecraft.network.chat.Component$Serializermethods also take in aHolderLookup$Providernet.minecraft.network.syncher.EntityDataAccessoris now a recordnet.minecraft.server.MinecraftServerlogTickTimereplaced bygetTickTimeLogger,isTickTimeLoggingEnabledendMetricsRecordingTickis now public
net.minecraft.server.ReloadableServerResources#getLootDatareplaced byfullRegistriesnet.minecraft.server.levelchunk-querying methods now return aChunkResultinstead of anEither<ChunkAccess, ChunkHolder$ChunkLoadingFailure>net.minecraft.server.players.PlayerListsetAllowCheatsForAllPlayers->setAllowCommandsForAllPlayersisAllowCheatsForAllPlayers->isAllowCommandsForAllPlayers
net.minecraft.tags.TagNetworkSerialization#deserializeTagsFromNetworkis now package-privatenet.minecraft.util.SampleLogger->net.minecraft.util.debugchart.LocalSampleLogger- This is now an implementation of
SampleStorage
- This is now an implementation of
net.minecraft.util.profiling.jfr.JvmProfiler#onPacketReceivedonPacketSentnow take in thePacketTypeinstead of an integer.net.minecraft.util.profiling.jfr.stats.NetworkPacketSummary->IoSummarynet.minecraft.util.random.WeightedEntry$Wrapperis now a recordnet.minecraft.world.Container#stillValidBlockEntitynow takes in a float representing the radius past the block interaction distance to check whether the block entity can be interacted withnet.minecraft.world.ContainerHelper#saveAllItems,loadAllItemsnow take in aHolderLookup$Providernet.minecraft.world.InteractionResult#shouldAwardStats->indicateItemUsenet.minecraft.world.LockCodeis now a recordnet.minecraft.world.RandomizableContainer#getLootTable,setLootTable,setBlockEntityLootTabletake in aResourceKey<LootTable>instead of aResourceLocationnet.minecraft.world.SimpleContainer#fromTag,createTagnow take in aHolderLookup$Providernet.minecraft.world.damagesource.CombatRules#getDamageAfterAbsorbnow takes in aDamageSourceto calculate armor breachnet.minecraft.world.effect.MobEffectapplyEffectTicknow returns a boolean that, when false, will remove the effect ifshouldApplyEffectTickThisTickreturns truecreateFactorData,setFactorDataFactoryhas been replaced bygetBlendDurationTicks,setBlendDurationgetAttributeModifiersis replaced bycreateModifiers
net.minecraft.world.effect.MobEffectInstance$FactorDatahas been replaced by$BlendStatealong with the logic to applynet.minecraft.world.entity.AreaEffectCloud#setPotion->setPotionContentsnet.minecraft.world.entity.Entitynow implementSyncedDataHolderto handle network communication for entity propertiesdefineSynchedDatanow takes in aSynchedEntityData$BuildersetSecondsOnFire->igniteForSeconds- There is also an
igniteForTicksvariant
- There is also an
calculateViewVectoris now publicgetMyRidingOffset,ridingOffset->getVehicleAttachmentPointgetPassengerAttachmentPointnow returns aVec3getHandSlots,getArmorSlots,getAllSlots,setItemSlotare no longer onEntity, but still onLivingEntitygetEyeHeightis now final and reads from the entity's dimensions- Eye height is set through
EntityType$Builder
- Eye height is set through
getNameTagOffsetYis now replaced by anEntityAttachmentgetFeetBlockState->getInBlockState
net.minecraft.world.entity.EntityDimensionsis now a recordnet.minecraft.world.entity.EntityTypespawn,createnow takes in aConsumerof the entity to spawn rather than aCompoundTagupdateCusutomEntityTagnow takes in aCustomDataobject instead of aCompoundTaggetDefaultLootTablenow returns aResourceKey<LootTable>getAABB->getSpawnAABB
net.minecraft.world.entity.LivingEntitygetScale->getAgeScalegetScalestill exists and handles scaling based on an attribute property
net.minecraft.world.entity.Mob#finalizeSpawnno longer takes in aCompoundTagnet.minecraft.world.entity.SpawnPlacements$Type->SpawnPlacementsType- All
SpawnPlacementTypes are inSpawnPlacementTypes
- All
net.minecraft.world.entity.TamableAnimalsetTamenow takes in a second boolean that, when true, applies any side effects from tamingreassessTameGoals->applyTamingSideEffects
net.minecraft.world.entity.ai.attributes.AttributeInstancegetModifiersis now package-privateremoveModifieris now public
net.minecraft.world.entity.ai.attributes.AttributeModifieris now a record$OperationADDITION->ADD_VALUEMULTIPLY_BASE->ADD_MULTIPLIED_BASEMULTIPLY_TOTAL->ADD_MULTIPLIED_TOTAL
net.minecraft.world.entity.ai.behavior.BehaviorUtils#lockGazeAndWalkToEachOthernow takes in an integer representing the close enough distancenet.minecraft.world.entity.ai.village.poi.PoiManagernow takes in aRegionStorageInfonet.minecraft.world.entity.animal.Animal#isFoodis now abstractnet.minecraft.world.entity.player.PlayerdisableShieldno longer takes in a booleangetPickRange->blockInteractionRange,entityInteractionRange
net.minecraft.world.entity.projectile.AbstractArrow#deflect->Entity#deflectionnet.minecraft.world.entity.raid.RaidgetMaxBadOmenLevel->getMaxRaidOmenLevelgetBadOmenLevel->getRaidOmenLevelsetBadOmenLevel->setRaidOmenLevelabsorbBadOmen->absorbRaidOmenand returns whether the entity has the effectgetLeaderBannerInstancenow takes in aHolderGetter<BannerPattern>
net.minecraft.world.entity.raid.Raids#createOrExtendRaidnow takes in aBlockPosthe raid is centered aroundnet.minecraft.world.food.FoodData#eatno longer takes in anItemnet.minecraft.world.food.FoodPropertiesis now a recordfastFoodhas been replaced by aeatSecondsfloat representing timeBuilder$saturationMod->saturationModifierBuilder$alwaysEat->alwaysEdibleBuilder$meathas been replaced with item tags for the given entity (e.g.,minecraft:wolf_food
net.minecraft.world.inventory.tooltip.BundleTooltipstores its information withinBundleContentsvia#contentsnet.minecraft.world.item.AdventureModeCheck->AdventureModePredicatenet.minecraft.world.item.ArmorMaterialis now a recordgetDurabilityForType->ArmorItem$Type#getDurabilitygetDefenseForType->defense
net.minecraft.world.item.AxeItemis now publicnet.minecraft.world.item.CrossbowItem#performShootingis now an instance methodnet.minecraft.world.item.HoeItemis now publicnet.minecraft.world.item.ItemverifyTagAfterLoad->verifyComponentsAfterLoadgetMaxStackSize->ItemStack#getMaxStackSizegetMaxDamage->ItemStack#getMaxDamagecanBeDepleted->ItemStack#isDamageableItemisCorrectToolForDropsnow takes in anItemStackappendHoverTextholds anItem$TooltipContextinstead of aLevelgetDefaultAttributeModifiersnow returns anItemAttributeModifierscanBeHurtBy->ItemStack#canBeHurtBy
net.minecraft.world.item.ItemStacknow implementsDataComponentHolder- The constructor takes in a
DataComponentPatchorPatchedDataComponentMapinstead of aCompoundTag save(CompoundTag)->save(HolderLookup$Provider, Tag)hurt->hurtAndBreak- A
Runnableis the last parameter which determines what to do when a stack exceeds the max damage
- A
hurtAndBreak(int, T, Consumer<T>)->hurtAndBreak(int, LivingEntity, EquipmentSlot)isSameItemSameTags->isSameItemSameComponentsgetTooltipLines(Player, TooltipFlag)->getTooltipLines(Item$TooltipContext, Player, TooltipFlag)hasAdventureModePlaceTagForBlock->canPlaceOnBlockInAdventureModehasAdventureModeBreakTagForBlock->canBreakBlockInAdventureMode
- The constructor takes in a
net.minecraft.world.item.ItemStackLinkedSet#createTypeAndTagSet->createTypeAndComponentsSetnet.minecraft.world.item.ItemUtils#onContainerDestroyednow takes aIterable<ItemStack>instead of aStream<ItemStack>net.minecraft.world.item.SmithingTemplateItem#createArmorTrimTemplatetakes in a varargs ofFeatureFlagsnet.minecraft.world.item.SpawnEggItem#spawnsEntity,getTypenow takes in anItemStackinstead of aCompoundTagnet.minecraft.world.item.alchemy.Potion#getNamenow takes in anOptional<Holder<Potion>>net.minecraft.world.item.alchemny.PotionUtils->PotionContents- Method names are roughly equivalent, ignorning all instances where a tag is wanted
net.minecraft.world.item.armortrim.ArmorTrimnow takes in a boolean indicating whether the tooltip component will show up- This tooltip can be toggled via
withTooltip
- This tooltip can be toggled via
net.minecraft.world.item.crafting.Recipeassemble(C, RegistryAccess)->assemble(C, HolderLookup.Provider)getResultItem(RegistryAccess)->getResultItem(HolderLookup.Provider)
net.minecraft.world.item.crafting.RecipeCache#getnow returns aOptional<RecipeHolder<CraftingRecipe>>net.minecraft.world.item.crafting.RecipeManagergetRecipeFor(RecipeType<T>, C, Level, ResourceLocation)now returns anOptional<RecipeHolder<T>>- The
RecipeHoldercontains theResourceLocation
- The
byTypenow returns aCollection<RecipeHolderinstead of aMap<ResourceLocation, RecipeHolder<T>>
net.minecraft.world.item.traiding.MerchantOffernow takes inItemCosts for cost stack instead ofItemStacksnet.minecraft.world.level.BaseCommandBlock#setName->setCustomNamenet.minecraft.world.level.LevelgetMapData,setMapData,getFreeMapIdnow take in aMapIdinstead of an integercreateFireworksnow takes in aList<FireworkExplosion>instead of aCompoundTag
net.minecraft.world.level.SpawnDatanow takes in anEquipmentTable, which contains the armor an entity should spawn withnet.minecraft.world.level.StructureManagergetStructureWithPiecesAtnow takes in some set ofSturcturescheckStructurePresencenow takes in aStructurePlacement
net.minecraft.world.level.block.Block#appendHoverTextnow takes in anItem$TooltipContextinstead of aBlockGetternet.minecraft.world.level.block.EnchantmentTableBlock->EnchantingTableBlocknet.minecraft.world.level.block.FlowerBlocknow takes in aSuspiciousStewEffectsnet.minecraft.world.level.block.entity.BeehiveBlockEntityaddOccupantWithPresetTicks->addOccupantstoreBee(CompoundTag, int, boolean)->storeBee(BeehiveBlockEntity$Occupant)
net.minecraft.world.level.block.entity.BlockEntityload->loadAdditionalsaveAdditional,saveWithFullMetadata,saveWithId,saveWithoutMetadata,saveToItem,loadStatic,getUpdateTagnow takes in aHolderLookup$Provider
net.minecraft.world.level.block.entity.RandomizableContainerBlockEntitygetItems->BaseContainerBlockEntity#getItemssetItems->BaseContainerBlockEntity#setItems
net.minecraft.world.level.block.entity.trialspawner.PlayerDetector#detect(ServerLevel, BlockPos, int)->detect(ServerLevel, PlayerDetector$EntitySelector, BlockPos, double, boolean)net.minecraft.world.level.block.state.StateHolder#getValuesnow returns a regularMapas it stores anReference2ObjectArrayMapnet.minecraft.world.level.chunk.ChunkAccess#getBlockEntityNbtForSavingnow takes in aHolderLookup$Providernet.minecraft.world.level.chunk.ChunkStatus->net.minecraft.world.level.chunk.status.ChunkStatus- Some other classes that were inner classes have also been moved to the
net.minecraft.world.level.chunk.statuspackage (e.g.ChunkType)
- Some other classes that were inner classes have also been moved to the
net.minecraft.world.level.gameevent.GameEventis now a record`net.minecraft.world.level.gameevent.GameEventListener$Holder->GameEventListener$Providernet.minecraft.world.level.levelgen.WorldDimensions(Map<ResourceKey<LevelStem>, LevelStem>)is the new base constructor, the previous constructor with theRegistrystill existsnet.minecraft.world.level.levegen.presets.WorldPreset#createRegistry->dimensionsInOrdernet.minecraft.world.level.levelgen.structure.StructureCheck#checkStartnow takes in aStructurePlacementnet.minecraft.world.level.levelgen.structure.StructurePiece#createChestnow takes in aResourceKey<LootTable>instead of aResourceLocationnet.minecraft.world.level.levelgen.structure.StructurePiece#createDispensernow takes in aResourceKey<LootTable>instead of aResourceLocationnet.minecraft.world.level.pathfinder.BlockPathTypes->PathTypenet.minecraft.world.level.pathfinder.NodeEvaluatorgetGoal->getTargetgetTargetFromNode->getTargetNodeAt- Gets the node based on a position rather than supplying the node itself
BlockPathTypes getBlockPathType(BlockGetter, int, int, int, Mob)->PathType getPathTypeOfMob(PathfindingContext, int, int, int, Mob)BlockPathTypes getBlockPathType(BlockGetter, int, int, int)->PathType getPathType(PathfindingContext, int, int, int)
net.minecraft.world.level.pathfinder.SwimNodeEvaluatorisDiagonalNodeValid->hasMalusgetCachedBlockTypereturnsPathType
net.minecraft.world.level.pathfinder.WalkNodeEvaluatorisDiagonalValidremoves the accepted node value, only returning whether the diagonal can be made- Checking the accepted node has been moved to a separate
isDiagonalValid(Node)method
- Checking the accepted node has been moved to a separate
getBlockPathTypes,evaluateBlockPathType->getPathTypeWithinMobBBgetCachedBlockType->getCachedPathTypegetBlockPathTypeStatic->getPathTypeStaticcheckNeighbourBlocks(BlockGetter, BlockPos$MutableBlockPos, BlockPathTypes)->checkNeighbourBlocks(PathfindingContext, int, int, int, PathType)getBlockPathTypeRaw->getPathTypeFromStateisBurningBlock->NodeEvaluator#isBurningBlock
net.minecraft.world.level.saveddata.SavedDatasave(CompoundTag)->save(CompoundTag, HolderLookup.Provider)save(File)->save(File, HolderLookup.Provider)$Factory(Supplier<T>, Function<CompoundTag, T>, DataFixTypes)->$Factory(Supplier<T>, BiFunction<CompoundTag, HolderLookup.Provider, T>, DataFixTypes)
net.minecraft.world.level.saveddata.maps.MapBanneris now a recordnet.minecraft.world.levle.saveddata.maps.MapDecoration$Type->MapDecorationTypeMapDecorationTypeis now a built-in registry object
net.minecraft.world.level.storage.LevelData#getXSpawn,getYSpawn,getZSpawn->getSpawnPosnet.minecraft.world.level.storage.LevelSummary#hasCheats->hasCommandsnet.minecraft.world.level.storage.ServerLevelData#getAllowCommands->isAllowCommandsnet.minecraft.world.level.storage.WorldData#getAllowCommands->isAllowCommandsnet.minecraft.world.level.storage.WritableLevelData#setXSpawn,setYSpawn,setZSpawn,setSpawnAngle->setSpawnnet.minecraft.world.level.storage.loot.LootContextnow takes in aHolderGetter$ProvidergetResolvernow returns theHolderGetter$Provider
net.minecraft.world.level.storage.loot.LootDataTypeis now a recordnet.minecraft.world.level.storage.loot.entries.LootTableReference->NestedLootTablenet.minecraft.world.ticks.ContainerSingleItem#getContainerBlockEntity->$BlockContainerSingleItem#getContainerBlockEntitynet.minecraft.client.Minecraft#setLevel(ClientLevel)->setLevel(ClientLevel, ReceivingLevelScreen$Reason)net.minecraft.client.OptionInstance$IntRangenow takes in a boolean that applies the option change immediately instead of after 0.6 seconds. The value is not considered saved at that moment when applied immediatelynet.minecraft.client.gui.font.providers.FreeTypeUtil#checkError->assertErrorcheckErroris now a boolean-returning method that doesn't throw an error
net.minecraft.core.particles.DustParticleOptionsBase->ScalableParticleOptionsBasenet.minecraft.nbt.CompoundTag#entries->entrySet- This is a logic replacement, the returns are similar to those of a
Map
- This is a logic replacement, the returns are similar to those of a
net.minecraft.network.PacketListener#shouldPropagateHandlingExceptions->onPacketError- This is a logic replacement as the new method simply decides how to handle the error
com.mojang.blaze3d.systems.RenderSystem#inverseViewRotationMatrixalong with subsequent getters and settersnet.minecraft.client.Minecraft#is64Bitnet.minecraft.client.gui.components.AbstractSelectionList#setRenderBackgroundnet.minecraft.client.gui.components.DebugScreenOverlay#logTickDurationnet.minecraft.client.gui.font.FontManager#setRenames,getActualIdnet.minecraft.client.gui.screens.MenuScreen#createno longer checks nullability ofMenuTypenet.minecraft.client.gui.screens.Screen#hideWidgetsnet.minecraft.client.gui.screens.achievement.StatsUpdateListenernet.minecraft.client.gui.screens.worldselection.WorldOpenFlows#loadBundledResourcePacknet.minecraft.client.multiplayer.ClientLevel#setScoreboardnet.minecraft.client.multiplater.MultiPlayerGameModegetPickRangehasFarPickRange
net.minecraft.client.multiplayer.ServerDatasetEnforcesSecureChatenforcesSecureChat
net.minecraft.client.renderer.GameRenderercycleEffectgetPositionTexColorNormalShadergetPositionTexLightmapColorShader
net.minecraft.commands.arguments.ArgumentSignatures#getnet.minecraft.core.RegistryCodecswithNameAndIdnetworkCodecfullCodec$RegistryEntry
net.minecraft.core.dispenser.DispenseItemBehavior#getEntityPokingOutOfBlockPosnet.minecraft.server.level.ChunkHolder#getFullChunknet.minecraft.util.JavaOpsnet.minecraft.world.effect.AttributeModifierTemplatenet.minecraft.world.entity.Entity#setMaxUpStepnet.minecraft.world.entity.LivingEntitygetMobTypegetEyeHeight,getStandingEyeHeight
net.minecraft.world.entity.MobTypenet.minecraft.world.entity.ai.goal.GoalSelectorgetRunningGoalssetNewGoalRate
net.minecraft.world.entity.player.Player#isValidUsernamenet.minecraft.world.entity.projectile.ThrowableItemProjectile#getItemRawnet.minecraft.world.item.BlockItem#getBlockEntityDatanet.minecraft.world.item.Vanishablenet.minecraft.world.item.DyeableArmorItemnet.minecraft.world.item.DyeableHorseArmorItemnet.minecraft.world.item.DyeableLeatherItemnet.minecraft.world.item.EnchantedGoldenAppleItemnet.minecraft.world.item.FireworkStarItem#appendHoverText(CompoundTag, List<Component>)net.minecraft.world.item.HorseArmorItemnet.minecraft.world.item.ItemshouldOverrideMultiplayerNbtgetRarityisEdiblegetFoodPropertiesisFireResistant
net.minecraft.world.item.ItemStackofhasTaggetTaggetOrCreateTaggetOrCreateTagElementgetTagElementremoveTagKeygetEnchantmentTagssetTagsetHoverNamehasCustomHoverNameaddTagElementgetBaseRepairCostsetRepairCostgetAttributeModifiersisEdible$TooltipPart
net.minecraft.world.item.SuspiciousStewItemsaveMobEffectsappendMobEffectslistPotionEffects
net.minecraft.world.item.armortrim.ArmorTrimsetTrimgetTrimappendUpgradeHoverText
net.minecraft.world.item.crafting.IngredienttoNetworkfromNetwork
net.minecraft.world.level.Level#dimensionTypeIdnet.minecraft.world.level.NaturalSpawner#isSpawnPositionOknet.minecraft.world.level.block.entity.BaseContainerBlockEntity#setCustomNamenet.minecraft.world.level.block.entity.BeehiveBlockEntity#addOccupantnet.minecraft.world.level.storage.loot.LootDataId- Basically a
ResourceKey
- Basically a
net.minecraft.world.level.storage.loot.LootDataManager- Basically a
HolderGetter$Provider
- Basically a
net.minecraft.world.level.storage.loot.LootDataResolver