Minecraft 26.1.x -> 26.2 Mod Migration Primer
This is a high level, non-exhaustive overview on how to migrate your mod from 26.1.x to 26.2. 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 file an issue on this repository or ping @ChampionAsh5357 in the Neoforged Discord server.
Thank you to:
- @RogueLogix for reviews on the Blaze3d changes
- @cassiancc for confirmation on P2P friends being Xbox friends and more specific info on
TabNavigationBarandMenuTabBar - @gigahertz for wording
Pack Changes
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.
Too Many Rendering Changes
Vulkan
Vanilla has added support for the Vulkan graphics API, which can be set in the options menu. As such, for all classes in com.mojang.blaze3d.opengl, there is generally a parallel found in com.mojang.blaze3d.vulkan. With this change, more of the Blaze3d components has been generalized further.
Blend Factors
DestFactor and SourceFactor have been combined into a single BlendFactor, which is used within BlendEquations and BlendFunctions. How these BlendFactors are applied is through BlendOp, which defines the operation to merge the source and destination. BlendOp#ADD is used as a default when not specified in a BlendFunction.
GPU Formats
TextureFormat and the buffer formats of VertexFormatElement have been replaced by the GpuFormat enum. The names of each enum entry can be broken down into three components: a channel with their bit size, an underscore, and finally the data type. Here are some examples:
R8_UNORM: An unsigned normalized value with a single 8-bit red channel.RGBA32_SINT: A signed integer with 32-bit red, green, blue, and alpha channels.D32_FLOAT_S8_UINT: A float with a 32-bit depth channel, and a unsigned integer with an 8-bit stencil channel.
The previous data types of RGBA8, RED8, RED8I, DEPTH32 can be represented using one of these GpuFormats, though their mappings do not have one-to-one parity for the GL codes previously used.
Rewriting Vertex Formats
VertexFormat along with VertexFormatElement has been partially rewritten into a more dynamic framework. There is no longer a set of existing VertexFormatElements. Instead, the elements are constructed when building the VertexFormat by adding attributes via $Builder#addAttribute. A VertexFormat can define at most sixteen elements or attributes, each providing at least the name and GpuFormat.
VertexFormat$IndexType and VertexFormat$Mode have also been moved into their own IndexType and PrimitiveTopology enums, respectively. This is because RenderPipelines can now define up to sixteen vertex buffers with different VertexFormats, but must be applied to the same PrimitiveTopology.
Multiple Color Target States
With this expansion, RenderPipelines can also specify up to eight ColorTargetStates. This must match the number of color attachments specified when creating a RenderPass (typically 1 in vanilla usecases).
Bind Group Layouts
BindGroupLayout is a collection of sampler names and $UniformDescriptions, replacing the single list of sampler names and RenderPipeline#UniformDescription. Due to this separate object, RenderPipeline$Snippets that were made up of only samplers and uniforms are now decoupled, allowing for a modular, non-repeatable implementation when dealing with many pipelines and layouts. All vanilla layouts are stored in BindGroupLayouts and are attached to a RenderPipeline via RenderPipeline$Builder#withBindGroupLayout.
public static final BindGroupLayout EXAMPLE_LAYOUT = BindGroupLayout.builder()
// Specifies that the shaders have a 'Sampler0' sampler
.withSampler("Sampler0")
// Specifies that the shaders have access to the 'Globals' uniform
.withUniform("Globals", UniformType.UNIFORM_BUFFER)
.build();
public static final RenderPipeline EXAMPLE_PIPELINE = RenderPipeline.builder()
.withLocation(Identifier.fromNamespaceAndPath("examplemod", "pipeline/example"))
.withVertexShader(Identifier.fromNamespaceAndPath("examplemod", "example_shader"))
.withFragmentShader(Identifier.fromNamespaceAndPath("examplemod", "example_shader"))
.withVertexFormat(DefaultVertexFormat.ENTITY, VertexFormat.Mode.QUADS)
// Specify the layouts to use
.withBindGroupLayout(EXAMPLE_LAYOUT)
// Can use multiple layouts
.withBindGroupLayout(BindGroupLayouts.MATRICES_PROJECTION)
.build();
Note that all BindGroupLayouts added to a RenderPipeline must not contain any duplicate entries (e.g. two shaders named Sampler0, two uniforms named Globals) and by extension the same BindGroupLayout multiple times, or an error will be thrown during the shader compilation process.
Render Areas
RenderPasses can now define a rectangle within a texture to draw its data to via CommandEncoder#createRenderPass. If this not specified, it defaults to the size of the color GpuTextureView.
Replacing ChatFormatting in Components
ChatFormatting has been mostly gutted in favor of using Style for Components. The text color can be set via Style#withColor, while the formatting can be set using withBold, withItalic, withUnderlined, withStrikethrough, and withObfuscated. ChatFormatting#RESET is the same as using a different component.
Gui Reorganization
The Gui class has been reorganized to handle all of the components of the graphical user interface (as the name implies). As such, fields like the current Screen or ChatListener have been moved off of their previous class (e.g. Minecraft) and into Gui. Additionally, the in-game heads-up display has been moved into a separate class called Hud, which Gui takes in.
As such, some field and method calls will need to go through Gui or Hud:
// Getting the current screen
- Minecraft.getInstance().screen
+ Minecraft.getInstance().gui.screen()
// Setting the overlay message
- Minecraft.getInstance().gui.setOverlayMessage(...)
+ Minecraft.getInstance().gui.hud.setOverlayMessage(...)
Font Preparations
Font draw methods have been completely removed, and instead need to be prepared and handled manually. This should only be done if your text cannot be submitted as a feature via OrderedSubmitNodeCollector#submitText.
The text rendering pipeline works like so: the Font prepares the text into a $PreparedText, which can visit the glyphs in the string. Then, a $GlyphVisitor loops through all the glyph components, which typically call $GlyphVisitor#acceptRenderable. acceptRenderable is where the text is uploaded to the buffer, ready to be drawn to the screen.
// Font has `prepareText` if don't want to implement the glyph parsing manually
// For some Font font
Font.PreparedText text = font.prepareText(
// The text to draw
"Hello world!",
// The position of the text on the string
0, 0,
// The color of the text
0xFF00FF00,
// Whether to draw the drop shadow
false,
// The background color of the text
0
);
// We can create a glyph visitor to loop through the text components
public class ExampleVisitor implements Font.GlyphVisitor {
@Override
public void acceptRenderable(TextRenderable renderable) {
// Both glyphs and effects call this by default
// If you want more specialized rendering, override:
// - 'acceptGlyph' for text characters
// - 'acceptEffect' for any effects applied to the characters
// Render to the buffer
VertexConsumer buffer = Minecraft.getInstance().gameRenderer.renderBuffers().bufferSource()
.getBuffer(renderable.renderType(Font.DisplayMode.NORMAL);
renderable.render(new Matrix4f(), buffer, 0xF000F0, false);
}
}
// Then, we can visit all the renderables in our prepared text,
// which will upload them to the buffer.
text.visit(new ExampleVisitor());
Submitting Gizmos
Gizmos are now rendered using the GizmoFeatureRenderer. Gizmos that do not call GizmoProperties#setAlwaysOnTop are render after translucents but before the translucent terrain features, while those that do are rendered after all other features.
Feature Rendering: The Takeover
The feature rendering system has been overhauled to completely replace MultiBufferSource and any direct vertex uploads outside of vanilla chunk rendering.
For users of the system, FeatureRenderDispatcher now takes in a SubmitNodeStorage as part of its render methods. This allows for a specific subset of features to be rendered depending on user implementation rather than only at vanilla entrypoints:
// Create your own storage to submit elements to
SubmitNodeStorage collector = new SubmitNodeStorage();
collector.submitModel(...);
// Render the features through the dispatcher
Minecraft.getInstance().gameRenderer.featureRenderDispatcher().renderAllFeatures(collector);
// If you need more granular control of when individual passes should be rendered,
// you can use `FeatureRenderDispatcher#prepareFrame` instead.
FeatureRenderDispatcher.PreparedFrame frame = Minecraft.getInstance()
.gameRenderer.featureRenderDispatcher().prepareFrame(collector);
frame.executeSolid(); // Replaces `renderSolidFeatures`
frame.executeTranslucent(); // Replaces `renderTranslucentFeatures`
frame.executeTranslucentAfterTerrain(); // Replaces `renderTranslucentParticles`
frame.executeAlwaysOnTop(); // Replaces gizmo rendering
// The frame must be closed once finished.
frame.close();
For modders that want to create custom features outside of the already existing submissions, three things a required: a SubmitNode to represent the data of the submitted feature, the FeatureRenderPhase(s) to store the SubmitNodes and supply them to the correct renderer, and the FeatureRenderer responsible for rendering the submissions.
A SubmitNode is, as the name implies, a node for some submitted element. It holds a record of the submitted data that is used by the specified FeatureRenderer. SubmitNode#featureType is used to link the node to the FeatureRenderer that should be used.
SubmitNode contains two other useful subtypes: TranslucentSubmit, which specifies the squared distance to the camera for ordering (distanceToCameraSq); and BatchableSubmit, which just groups similar features together using the batchKey such that they are rendered one after the other.
// The node should contain whatever data is necessary to properly render
// the object.
public record ExampleSubmit(Matrix4fc pose, RenderType type, ...) implements TranslucentSubmit, BatchableSubmit {
@Override
public FeatureRendererType<? extends TranslucentSubmit> featureType() {
// The identifier for our feature renderer.
}
@Override
public Object batchKey() {
// The batch key should be an object that allows the renderer or
// phase to hold its state for as long as possible before switching.
return this.type;
}
@Override
public float distanceToCameraSq() {
// Compute the camera distance.
return TranslucentSubmit.computeDistanceToCameraSq(this.pose);
}
}
The FeatureRenderPhase is then responsible for collecting these submissions and supplying them to an $Output for rendering. FeatureRenderPhase defines three methods: submit which is what the OrderedSubmitNodeCollector#submit* methods delegate to, isEmpty for checking if there are any submissions to render, and sortInto for passing the submissions to their appropriate group via $Output#accept.
If you are making use of SubmitNode or TranslucentSubmit with no additional sorting behavior, then you can instead make use of SimpleFeatureRenderPhase and TranslucentFeatureRenderPhase, respectively. Alternatively, you can instead submit to an existing render phase in SubmitNodeCollection. It purely depends on how much the render order of your elements matter.
// Assume we have some method of injecting into `SubmitNodeCollection` collection
// `TranslucentFeatureRenderPhase` is used because of `TranslucentSubmit`
public final TranslucentFeatureRenderPhase examplePhase = new TranslucentFeatureRenderPhase();
// Assuming we have some method of making `SubmitNodeCollection#allPhases` mutable
// The order of the phases in this list does not matter. It is only used by the
// `SubmitNodeStorage` to know what phases can be rendered.
collection.allPhases.add(examplePhase);
Finally, there is the FeatureRenderer used to render the submitted elements to the desired output. The rendering process is broken into two sections: preparation and execution.
The preparation section is responsible for turning the submitted elements into an intermediate state, usually buffer data stored in the StagedVertexBuffer. Preparation can be broken into three parts: beginPrepare for setting up any state required to generate the intermediate buffer data, prepareGroup for creating the draw calls to generate the intermediate buffer data, and finishPrepare to restore the initial state and setup anything for the execution section. The StagedVertexBuffer is uploaded after the preparation stage has been completed, so the only thing that should be stored during prepareGroup is the draw reference (for StagedVertexBuffer this is StagedVertexBuffer$Draw).
The execution section is responsible for drawing the intermediate buffer data to the desired output (e.g. RenderTarget). Execution can be broken into two parts: executeGroup for using a RenderPass to draw the target color and depth texture, and finishExecute for cleaning up the renderer for the next render frame.
The FeatureRenderer is also AutoCloseable in case the renderer stores allocations that need to be released.
If your SubmitNode contains a RenderType, then you can extend RenderTypeFeatureRenderer instead. RenderTypeFeatureRenderer functions similarly to the now removed MultiBufferSource, where within buildGroup, the VertexConsumer can be obtained from the render type via getVertexBuffer, which can then be written to.
public class ExampleFeatureRenderer extends RenderTypeFeatureRenderer<ExampleSubmit> {
// The unique identifier that represents this feature renderer.
public static final FeatureRendererType<ExampleSubmit> TYPE = FeatureRenderer.type("examplemod:example_submit");
@Override
protected void buildGroup(FeatureFrameContext context, List<ExampleSubmit> submits) {
// For each submit
for (ExampleSubmit submit : submits) {
// Get the `VertexConsumer` to write to
VertexConsumer builder = this.getVertexBuilder(submit.renderType());
// Write the vertex data
builder.addVertex(...);
}
}
}
From there, everything just needs to be linked together.
First, SubmitNode#featureType must return the renderer to use:
public record ExampleSubmit(Matrix4fc pose, RenderType type, ...) implements TranslucentSubmit, BatchableSubmit {
@Override
public FeatureRendererType<? extends TranslucentSubmit> featureType() {
// The identifier for our feature renderer.
return ExampleFeatureRenderer.TYPE;
}
}
Then, the FeatureRenderer must be linked to its type in FeatureRendererDispatcher:
// Assume we can inject into the end of the `FeatureRendererDispatcher` constructor
// and that `featureRenderers` is accessible.
public FeatureRenderDispatcher(...) {
// Injecting into the tail
this.featureRenderers.put(ExampleFeatureRenderer.TYPE, new ExampleFeatureRenderer());
}
And, if you created a new FeatureRenderPhase, you will need to add the phase for execution within FeatureRenderDispatcher$PreparedFrame:
// Assume we can inject into `FeatureRenderDispatcher$PreparedFrame`
// Since our render phase contains translucent elements, we will somehow inject
// into `executeTranslucent` before gizmos.
public void executeTranslucent() {
// ...
for (SubmitNodeCollection collection : submitNodeStorage.getSubmitsPerOrder().values()) {
// ...
this.executePhase(collection.shapeOutlines, context);
// Add our own phase here
this.executePhase(collection.examplePhase, context);
this.executePhase(collection.gizmos, context);
}
// ...
}
Dispatching Picture-In-Picture
Direct access to the MultiBufferSource$BufferSource has been removed from the PictureInPictureRenderer. Instead prepare now takes in the FeatureRenderDispatcher to render the elements to a texture, while renderToTexture takes in the SubmitNodeCollector.
public class ExamplePIPRenderer extends PictureInPictureRenderer<ExamplePIPRenderState> {
// The constructor is no longer required as it doesn't take in the `MultiBufferSource$BufferSource`.
@Override
protected void renderToTexture(ExamplePIPRenderState renderState, PoseStack poseStack, SubmitNodeCollector submitNodeCollector) {
// Submit elements to render to the texture here.
}
// ...
}
Shape Outlines Feature
Shape outlines is a new render feature that replaces ShapeRenderer, allowing for the outline of a VoxelShape to be rendered via OrderedSubmitNodeCollector#submitShapeOutline. This takes in the PoseStack of where the element should be placed, the VoxelShape to render, the RenderType to use, the color of the outline, the width of the line being outlined, and whether it should be rendered before or after the translucent terrain is rendered.
assets/minecraft/shaders/corerendertype_text->textrendertype_text_background->text_backgroundrendertype_text_background_see_through->text_backgroundwithIS_SEE_THROUGHshader definerendertype_text_intensity->textwithIS_GRAYSCALEshader definerendertype_text_intensity_see_through->textwithIS_GRAYSCALEandIS_SEE_THROUGHshader definesrendertype_text_see_through->textwithIS_SEE_THROUGHshader define
com.mojang.blaze3dGraphicsWorkarounds->GlHeuristics,HintsAndWorkarounds; not one-to-onealwaysCreateFreshImmediateBufferis removed
GpuDeviceLossException- An exception thrown if the backing GPU device crashes or becomes unresponsive.GpuFormat- An object representing the format and color components of a pixel.$ComponentType- An enum representing the pixel format and its associated byte size.
com.mojang.blaze3d.audio.OpenAlUtil#checkALError,checkALCError,audioFormatToOpenAlare nowpublicfrom package-privatecom.mojang.blaze3d.buffersGpuBufferUSAGE_INDIRECT_PARAMETERS- A flag that indicates the buffer can be used in indirect draw and compute dispatch calls.$MappedView->GpuBufferSlice$MappedView, not one-to-one$Usagecan now only targetElementType#TYPE_USE
GpuFence#awaitCompletionnow takes in a nanosecond timeout instead of a millisecond timeout
com.mojang.blaze3d.openglBufferStoragemapBufferreplaced byGpuBuffer#map,GpuBufferSlice#map; not one-to-onecreateBufferno longer takes in the suppliedStringlabel
DirectStateAccessmethods are nowpublicfrom package-privatebindFrameBufferTexturesnow has an overload that takes in arrays for the color and mip levels, along with anintfor the mip level depth
FrameBufferAttachment- An object that is bound to a framebuffer, like a texture.FrameBufferCache- A cache that creates framebuffers given its attachments.GlBufferis now abstract, taking in abooleanfor whether a persistent buffer can be mapped rather than the persistentByteBuffer, and no longer taking in the suppliedStringlabelMEMORY_POOl->MEMORY_POOLclosed->$Direct#closed, nowprivatefromprotectedhandlefield is nowprivatefromprotected- Accessible through the
publichandlemethod
- Accessible through the
persistentBufferreplaced bymappedBuffer, not one-to-onemappingFlags- The flags that define how the persistent buffer should be mapped.mappingRefCount- The number of buffers currently mapped.checkCanBeUsed- Checks whether a non-persistent buffer isn't mapped when used in a command.$Direct- An implementation that owns the used buffer.canPersistentMap- Whether the persistent buffer can be used while mapped.- This is an internal flag.
DeviceFeatures#persistentMappingshould be used to check for the feature.
- This is an internal flag.
$GlMappedViewreplaced byGpuBufferSlice$MappedView, not one-to-one
GlCommandEncoderis nowAutoCloseableMAX_SUBMITS_IN_FLIGHT- The maximum number of submissions that can be sent to the buffer at any given time.currentSubmitIndex- The current index of the next submission.currentSubmitSlot- The current slot of the next submission to make.awaitSubmit- Attempts to clear the previous submit fence in the current slot, returningtrueif successful.finishRenderPass->CommandEncoder#submitRenderPassexecuteDrawnow takes takes in anintfor the first instance used for fetching vertex attributesexecuteDrawIndirect- Executes the draw call using the indirect API.executeDraws- Executes a multi-draw call.presentTexturenow takes in the swapchain width and heightints
GlConstGL_DEPTH_TEXTURE_MODE,GL_ALPHA_BIASare removedtoGl(DestFactor),toGl(SourceFactor)->toGl(BlendFactor)toGlnow has an overload taking the in theBlendOpto maptoGl(NativeImage$Format)is removedglFormatChannelCount- Returns the number of channels the format has.isGlFormatInteger- Returns whether the format is backed by an integer-like data type.isFormatNormalized- Returns whether the format uses normalized data.toGlInternalId,toGlExternalId,toGlTypenow take in aGpuFormatinstead of theTextureFormat
GlDebugLabel#applyLabelnow takes in the suppliedStringlabelGlDeviceUSE_GL_ARB_base_instance- Whether to enable theARB_base_instanceextension, allowing for the the offset used for instance rendering to be specified.USE_GL_ARB_draw_indirect- Whether to enable theARB_draw_indirectextension, allowing for the consumption of arguments from buffer object memory.USE_GL_ARB_multi_draw_indirect- Whether to enable theARB_multi_draw_indirectextension, allowing multiple draws to be invoked from a single procedural call.USE_GL_ARB_shader_draw_parameters- Whether to enable theARB_shader_draw_parametersextension, providing access to the values passed into the draw commands.frameBufferCache- Returns the framebuffer cache.
GlHeuristicsclass is nowpublicfrom package-privateGlProgramsetupUniforms->setupBindGroupLayouts, now taking a list ofBindGroupLayouts instead of uniforms and samplers directlylinknow takes in an array ofVertexFormats rather than a single one
GlRenderPassnow takes in the defaultScissorStateand how many color textures are used.MAX_VERTEX_BUFFERS->RenderPass#MAX_VERTEX_BUFFERS, not one-to-onevertexBuffersis now an array ofGpuBufferSlices instead ofGpuBuffersvertexBufferDirty- Returns whether there is a dirty vertex buffer to upload.colorAttachmentCount- The number of color textures used.
GlStateManager_blendEquationSeparate,glBlendEquationSeparate- Sets the blend mode of the RGB and alpha channels._disableBlend,_enableBlendnow take in anintindex for the buffer the blend is applied to_colorMasknow has an overload that specifies the index of the buffer to apply the write mask to_clearBuffer- Clears the give buffer using the associated value.$BlendStatemodeRgb- The blend mode of the RGB color channels.modeAlpha- The blend mode of the alpha channel.
GlSurface- The OpenGL implementation of the surface backend.GlTexturenow implementsFrameBufferAttachment- The constructor now takes in the
GpuFormatinstead of theTextureFormat, and theFrameBufferCache getFboreplaced byFrameBufferCache#getFbo
- The constructor now takes in the
GlTextureViewnow implementsFrameBufferAttachment- The constructor now takes in the
FrameBufferCache getFboreplaced byFrameBufferCache#getFbo
- The constructor now takes in the
GlTimerQueryreplaced byGlQueryPoolGlTransientMemory- The OpenGL implementation of theTransientMemory.GlUtil- A utility for helping with OpenGL call determinations.Uniform$Utbnow takes in theGpuFormatinstead of theTextureFormatVertexArrayCache#bindVertexArraynow takes in arrays for theVertexFormatbindings andGpuBufferSlicebuffers along with the last bound$VertexArray, returning the newly bound$VertexArray
com.mojang.blaze3d.pipelineBindGroupLayout- The samplers and uniforms a shader will use.BlendEquation- An equation that blends the source and destination factors using the provided operation.BlendFunctionnow takes inBlendEquations,BlendFactors, orBlendOps instead ofSourceFactors andDestFactorsColorTargetStatenow takes in theGpuFormatMAX_COLOR_TARGETS- The maximum number of color states a buffer can use.$WriteMaskcan now only targetElementType#TYPE_USE
RenderPipelinenow takes in a list ofBindGroupLayouts instead of uniforms and samplers directly, and an array ofColorTargetStates andVertexFormats instead of just onegetSamplers,getUniforms->getBindGroupLayouts- Can get the samplers and uniforms via
BindGroupLayout#flattenSamplers,flattenUniforms
- Can get the samplers and uniforms via
getColorTargetStates- Returns the array of color target states.- The original now just returns the first one
getVertexFormatreplaced bygetVertexFormatBinding, taking in the bound indexgetVertexFormatBindings- Returns the array of vertex formats.getVertexFormatMode->getPrimitiveTopology$BuilderwithUniform,withSampler->withBindGroupLayout- Can add samplers and uniforms via
BindGroupLayout$Builder#withSampler,withUniform
- Can add samplers and uniforms via
withColorTargetStatenow takes in theintindex to bindwithUnusedColorTargetState- Unbinds the specifiedintindex.withVertexFormat->withVertexBinding, now taking in theintindex to bind, and no longer taking in theVertexFormat$ModewithPrimitiveTopology- Sets the topology the pipeline uses.
$Snippetsamplers,uniforms->bindGroupLayouts, not one-to-onecolorTargetState->colorTargetStates, now a nullable array ofColorTargetStates instead of an optional single stateactiveColorTargetStateCount- The number of active color states used by the pipeline.vertexFormat->vertexFormatPerBuffer, now a nullable array ofVertexFormats instead of an optional single state
$UniformDescription->BindGroupLayout$UniformDescription
RenderTargetnow takes in theGpuFormatblitToScreenis removed- Usage replaced by
GpuSurface#blitFromTexture
- Usage replaced by
blitAndBlendToTexturenow takes in aGpuTextureViewfor the output depth texture
TextureTargetnow takes in theGpuFormat
com.mojang.blaze3d.platformBackendOptionsrecord is removedBlendOp- The operation performed when blending the source and destination outputs.ClientShutdownWatchdog#startShutdownWatchdognow takes in abooleanof whether to force shutdown with a-8exit callDestFactor,SourceFactor->BlendFactorGLX_initGlfwno longer takes in theBackendOptionsgetGlfwPlatform- Returns the currently selected platform.
InputConstants$Valuecan now only targetElementType#TYPE_USEMacosUtil#setWindowColorSpaceForOpenGLBecauseGLFWDoesnt- Sets the window color space.Monitoris now a record, taking in theStringmonitor name- Original constructor behavior is handled through
Monitor#tryCreate refreshVideoModesis removedgetVideoModeIndex->indexOfModegetCurrentModeis removedgetX,getY->x,ygetMode->modegetModeCount->modeCountgetMonitoris removed
- Original constructor behavior is handled through
MonitorCreatorinterface is removed- Use
Monitor#tryCreateinstead
- Use
NativeImage#getPixelBytes- Gets a buffer of the pixels in the image.NativeLibrariesBootstrap- A bootstrap for validating and loading the required native libraries.ScreenManager->MonitorManager, not one-to-oneTextureUtil#writeAsPNGnow only allowsRGBA8_UNORMformatted textures to be written to disk.Windownow takes in abooleanfor whether to use exclusive fullscreen and theMonitorManagerupdateVsyncis removed- Usage replaced by
Window#setModeandWindowEventHandler#framebufferSizeChanged
- Usage replaced by
isResized,resetIsResizedare removed
WindowEventHandler#framebufferSizeChanged- Handles when the window buffer size has changed.
com.mojang.blaze3d.resource.RenderTargetDescriptornow takes in aVector4fcfor the clear color instead of anint, and theGpuFormatcom.mojang.blaze3d.shadersGpuDebugOptionsnow takes in abooleanof whether to use validation layers; only used by the Vulkan backendUniformTypeno longer specifies the name
com.mojang.blaze3d.systemsBackendCreationExceptionnow takes in a$Reasonand optional string list of missing capabilitiesgetReason- The reason for the creation error.getMissingCapabilities- The list of missing capabilities.$Reason- The reasons why the backend creation may throw an exception.
CommandEncodernow takes in theTracyGpuProfilerbackend- Returns the encoder backend.submit- Submits the elements to the GPU and ends the frame.submitRenderPass- Submits the current render pass, handled as part of the try-with-resources.presentTexture->GpuSurface#blitFromTexture, not one-to-onetimerQueryBegin,timerQueryEndreplaced bywriteTimestampcreateRenderPass- Now takes in an optional
Vector4fcinstead of anintfor the clear color - Now has an overload that takes in a
$RenderAreafor where to draw to - Now has an overload that only takes in a
RenderPassDescriptor
- Now takes in an optional
clearColorTexture,clearColorAndDepthTexturesnow take in an optionalVector4fcinstead of anintfor the clear colormapBufferreplaced byGpuBuffer#map,GpuBufferSlice#maptransientMemory- Gets the transient memory of the encoder.writeToTextureoverload- No longer takes in the width, height, and source XY of the image
- No longer takes in the
NativeImage$Format
copyBufferToTexture- Copies the buffer slice with the given parameters to the destination texture.
CommandEncoderBackendisInRenderPass->CommandEncoder#isInRenderPass, nowprotectedfrompublicsubmitRenderPass- Submits the current render pass, handled as part of the try-with-resources.presentTexture->GpuSurface#blitFromTexture, not one-to-onetimerQueryBegin,timerQueryEndreplaced bywriteTimestampcreateRenderPassnow only takes in theRenderPassDescriptorclearColorTexture,clearColorAndDepthTexturesnow take in an optionalVector4fcinstead of anintfor the clear colormapBufferreplaced byGpuBuffer#map,GpuBufferSlice#maptransientMemory- Gets the transient memory of the encoder.writeToTexture(GpuTexture, ByteBuffer, NativeImage.Format, int, int, int, int, int, int)is removed- Original method no longer takes in the source XY and swaps the
NativeImagefor aByteBuffer
- Original method no longer takes in the source XY and swaps the
copyBufferToTexture- Copies the buffer slice with the given parameters to the destination texture.
DeviceFeatures- A record containing the features that the GPU device supports.DeviceInfo- A record containing information about the GPU device.DeviceLimits- A record containing information about the limits of GPU features.DeviceType- The type of the device performing the rendering (e.g., cpu, discrete graphics, integrated graphics).GpuBackend#createDevicenow takes in aRunnablefor the shaders that must be loaded for the client to start up, and can throw aBackendCreationExceptionGpuDevicenow takes in aRunnablefor the shaders that must be loaded for the client to start upcreateSurface- Creates the surface for a window to write data to.getImplementationInformation->getDeviceInfo, not one-to-onegetVendor->DeviceInfo#vendorNamegetBackendName->DeviceInfo#backendNamegetVersion->DeviceInfo#driverInfogetRenderer->DeviceInfo#namegetMaxTextureSize->DeviceLimits#maxTextureSizegetUniformOffsetAlignment->DeviceLimits#minUniformOffsetAlignmentgetEnabledExtensions->DeviceInfo#underlyingExtensionsgetMaxSupportedAnisotropy->DeviceLimits#maxAnisotropysetVsync->GpuSurface#configure, not one-to-onepresentFrame->GpuSurface#presentisZZeroToOne->DeviceInfo#isZZeroToOnecreateTimestampQueryPool- Creates the query pool for getting data from the GPU.getTimestampNow- Returns the current epoch timestamp.loadCriticalShaders- Loads the shaders required for the client to start up.
GpuDeviceBackendcreateSurface- Creates the surface for a window to write data to.getImplementationInformation->getDeviceInfo, not one-to-onegetVendor->DeviceInfo#vendorNamegetBackendName->DeviceInfo#backendNamegetVersion->DeviceInfo#driverInfogetRenderer->DeviceInfo#namegetMaxTextureSize->DeviceLimits#maxTextureSizegetUniformOffsetAlignment->DeviceLimits#minUniformOffsetAlignmentgetEnabledExtensions->DeviceInfo#underlyingExtensionsgetMaxSupportedAnisotropy->DeviceLimits#maxAnisotropysetVsync->GpuSurface#configurepresentFrame->GpuSurface#presentisZZeroToOne->DeviceInfo#isZZeroToOnecreateTimestampQueryPool- Creates the query pool for getting data from the GPU.getTimestampNow- Returns the current epoch timestamp.
GpuQueryPool- A pool for getting query objects and their associated values from the GPU.GpuSurface- The surface wrapper, swapchain, and validator.GpuSurfaceBackend- An API for modifying and writing data to linked window using its handle.HintsAndWorkarounds- A record containing issues with the supported GPU device and what workarounds are required.RenderPassnow takes in aRunnablefor what to do on close, typically from a try-with-resources; a list ofRenderPassDescriptor$Attachmentcolor textures; and a$RenderAreaof where to draw towriteTimestamp- Writes the timestamp to the pool at the given index.setVertexBuffernow takes in aGpuBufferSliceinstead of aGpuBufferdrawIndexedparameter order for the fiveints are as follows: the index count, instance count, first index, vertex offset / base vertex, and the first instance for fetching vertex attributes (new)drawIndexedIndirect- Draws the indexed data to the buffer using the indirect API.drawparameter order for the fourints are as follows: the vertex count, instance count, first vertex, and the first instance for fetching vertex attributes (new)drawIndirect- Draws the vertex data to the buffer using the indirect API.multiDrawIndexed- Draws the indexed data using an interleaved multi-draw call.multiDraw- Draws the vertex data using an interleaved multi-draw call.$RenderArea- A rectangle defining where the pass can write data to.
RenderPassBackendis no longerAutoCloseableisClosedis removedwriteTimestamp- Writes the timestamp to the pool at the given index.setVertexBuffernow takes in aGpuBufferSliceinstead of aGpuBufferdrawIndexedparameter order for the fiveints are as follows: the index count, instance count, first index, vertex offset / base vertex, and the first instance for fetching vertex attributes (new)drawIndexedIndirect- Draws the indexed data to the buffer using the indirect API.drawparameter order for the fourints are as follows: the vertex count, instance count, first vertex, and the first instance for fetching vertex attributes (new)drawIndirect- Draws the vertex data to the buffer using the indirect API.multiDrawIndexed- Draws the indexed data using an interleaved multi-draw call.multiDraw- Draws the vertex data using an interleaved multi-draw call.
RenderPassDescriptor- A class containing the configuration of theRenderPassto use during drawing.RenderSystemDEFAULT_DEPTH_CLEAR_VALUE- The default clear value for the depth buffer.flipFrameis removedgetApiDescriptionis removedshutdownRenderer- Shuts down the renderer and GPU device.getModelViewMatrix->getModelViewMatrixCopy, not one-to-oneinitBackendSystemno longer takes in theBackendOptions$AutoStorageIndexBuffernow implementsAutoCloseable
ScissorStatenow has a constructor that takes in theScissorStateto copy fromsetFrom- Copies the state from another scissor.
SurfaceException- An exception thrown when operating on or with a GPU surface.TimerQuerynow implementsAutoCloseablegetInstancereplaced by using the constructorisRecording->getStatus, not one-to-oneendProfileno longer returns anything$FrameProfileclass is removed$Status- The current status of the timer query.
TracyGpuProfiler- An implementation of the Tracy profiler (hybrid frame and sampling profiler) for the GPU.TransientMemory- A memory system for handling short lived (e.g., single frame) allocations, typically freeing or re-using the memory as needed.
com.mojang.blaze3d.texturesGpuTexture$Usagenow only targetsElementType#TYPE_USETextureFormatreplaced withGpuFormatRGBA8->RGBA8_UNORM, not one-to-oneRED8->R8_UNORM, not one-to-one- This should be taken with a grain of salt as it does not exactly map to the previous version's GL type
RED8I->R8_SINT, not one-to-one- This should be taken with a grain of salt as it does not exactly map to the previous version's GL type
DEPTH32->D32_FLOAT, not one-to-one- This should be taken with a grain of salt as it does not exactly map to the previous version's GL type
com.mojang.blaze3d.util.TransientBlockAllocator- An allocator for data broken into blocks, typically releasing the memory after use.com.mojang.blaze3d.vertexByteBufferBuilder$Result#size- The size of the resulting buffer.DefaultVertexFormat*_SEMANTIC_NAME- The name of the attributes used by the default vertex formats.EMPTYis removed- This is typically replaced with either a
nullvalue or an empty array
- This is typically replaced with either a
MeshDataunpackQuadCentroids->decodeQuadCentroids, nowpublicfromprivate, not one-to-onevertexBufferSlice- The resulting vertex buffer containing theMeshDatawriteSortedIndexBuffer- Writes the sorted vertices to an index buffer.
StagingBuffer- A buffer for staging changes to write at a later point in time.- Many of the methods or logic were originally part of
UberGpuBuffer.
- Many of the methods or logic were originally part of
Tesselatorclass is removedTlsfAllocator$Blockinstance fields are nowpublicfrom package-private$Heapconstructor is nowpublicfrom package-private
UberGpuBuffernow takes in theStagingBufferinstead of theGpuDevice, buffer sizeint, andGraphicsWorkaroundsuploadStagedAllocationsnow takes in theStagingBuffer$Uploaderinstead of theCommandEncoder$UberGpuBufferHeapconstructor is nowpublicfrom package-private
VertexFormatUNKNOWN_ELEMENTis removedMAX_VERTEX_ELEMENTS- The maximum number of elements or attributes that can be defined on the format.uploadImmediateVertexBuffer,uploadImmediateIndexBufferare removedbuildernow takes in anintfor how many instances pass between updates to the attributegetStepRate- How many instances pass between updates to the attribute.- OpenGL is 0 per vertex.
getElementAttributeNamesis removedgetOffsetsByElementis removedgetOffsetreplaced bygetElementcontainsnow takes in theStringattribute name instead of theVertexFormatElementgetElementsMask,getElementNameare removed$Builderadd->addAttribute, not one-to-onepaddingis removed
$IndexType->com.mojang.blaze3d.IndexType$Mode->PrimitiveTopology
VertexFormatElementnow takes in theGpuFormatinstead of the$Type, normalizedboolean, and countint; theStringattribute name instead of theintid, and theintoffset` instead of the index- Constant
VertexFormatElementfields are now removed- They are constructed when creating the
VertexFormat
- They are constructed when creating the
MAX_COUNTis removedregisteris removedmask,byteSizeare removedbyId,elementsFromMaskare removedtype,$Type->GpuFormatfollowing the_in the entriesnormalized->GpuFormatifNORMis in the entry namecount->GpuFormatcountingR,G,B,Ain the initial characters before the size
- Constant
VertexMultiConsumerclass is removed- Usage replaced by
SheetedDecalTextureGeneratorfor the foil buffer
- Usage replaced by
com.mojang.blaze3d.vulkanDestroyable- An interface for destroying the object, typically throughvkDestroy*.DestructionQueue- A queue for managing the destruction of objects at a specific time.VulkanBackend- The Vulkan implementation of theGpuBackend.VulkanBindGroupLayout- A list of layout bindings for the handle.VulkanCommandEncoder- The Vulkan implementation of theCommandEncoderBackend.VulkanCommandPool- A pool for allocating the command buffers.VulkanConst- The constant mappings for Blaze3d to Vulkan.VulkanDebug- A utility for debugging Vulkan objects.VulkanDevice- The Vulkan implementation of theGpuDeviceBackend.VulkanGpuBuffer- The Vulkan implementation of aGpuBuffer.VulkanGpuSampler- The Vulkan implementation of aGpuSampler.VulkanGpuSurface- The Vulkan implementation of theGpuSurfaceBackend.VulkanGpuTexture- The Vulkan implementation of aGpuTexture.VulkanGpuTextureView- The Vulkan implementation of aGpuTextureView.VulkanInstance- The connection between the application and the Vulkan library, maps almost directly to VkInstance.VulkanPhysicalDevice- The installed device with Vulkan support available on the system, maps almost directly to VkPhysicalDevice.VulkanQueryPool- The Vulkan implementation of aGpuQueryPool.VulkanQueue- A wrapped queue on a device to submit elements.VulkanRenderPass- The Vulkan implementation of theRenderPassBackend.VulkanRenderPipeline- The Vulkan implementation of aCompiledRenderPipeline.VulkanTransientMemory- The Vulkan implementation of theTransientMemory.VulkanUtils- A utility for common operations within the Vulkan implementation.
com.mojang.blaze3d.vulkan.checkpointsAbstractCheckpointStorage- An abstract implementation of the storage that handles the markers.AmdCheckpointExtension- ACheckpointExtensionfor AMD GPUs.CheckpointExtension- An extension that inserts markers into a command stream to help determine what caused a device lost failure.NoopCheckpointExtension- ACheckpointExtensionthat does nothing.NvidiaCheckpointExtension- ACheckpointExtensionfor Nvidia GPUs.
com.mojang.blaze3d.vulkan.glslGlslCompiler- Compiles the GLSL shaders into SPIR-V bytecode.IntermediaryShaderModule- An intermediary module representing the shader after initial compilation but before binding.ShaderCompileException- An exception thrown during the Vulkan shader compilation process.SpvcUtil- A utility for converting a dimension to its string representation in an SPV shader.SpvSampler- A sampler for an SPV shader.SpvUniformBuffer- A uniform buffer for an SPV shader.SpvVariable- A variable for an SPV shader.
com.mojang.blaze3d.vulkan.initVulkanFeature- A Vulkan feature on the device.VulkanPNextStruct- A representation of a Vulkan struct on thepNextchain.
net.minecraftChatFormattingis no longerStringRepresentableCODEC,COLOR_CODECreplaced byTextColor#CODEC, not one-to-onegetCharis removedgetId,getNamereplaced byTextColor#serialize, not one-to-oneisFormatis removedisColor,getColorreplaced byTextColor#getValue, not one-to-onegetByName,getByIdreplaced byTextColor#parseColor, not one-to-onegetNamesis removed
SharedConstants#DEBUG_SIMULATE_LIBRARY_LOAD_FAILURE- A debug flag that simulates a native library failing to load.
net.minecraft.clientMinecraftUNIFORM_FONTreplaced byFontOption#UNIFORMALT_FONTreplaced byEnchantmentNames#ALT_FONT, nowprivatefrompublicscreen->Gui#screenlevelExtractor- Extracts the level into its render state.openChatScreen->Gui#openChatScreensetScreen->Gui#setScreensetOverlay->Gui#setOverlayrenderFrameis nowpublicfromprivaterenderNamesis replaced byHud#isHidden,GuiRenderState#isHudHiddengetToastManager->Gui#toastManagergetWaypointStyles->Hud#getWaypointStylesgetSplashManager->Gui#splashManagergetOverlay->Gui#overlaywindowSurface- Gets theGpuSurfacefor the current game window.getChatListener->Gui#chatListenercommandHistory->ChatComponent#commandHistory, nowprivatefrompublicinvalidateSurfaceConfiguration- Marks theGpuSurfaceas needing configuration, typically after a change to how the framebuffer renders (e.g., screen resize).buildInitialScreens->Gui#buildInitialScreens, nowpublicfromprivategetMainRenderTarget->GameRenderer#mainRenderTargetuseShaderTransparency->GameRenderState#useShaderTransparencyrenderBuffersis removed
OptionshideGuiis replaced byHud#isHidden,GuiRenderState#isHudHiddenpreferredGraphicsBackend- Gets the preferred graphics library to use when rendering the game.isRestartRequiredToApplyVideoSettings- Whether a restart is required to apply the desired graphics settings.
PreferredGraphicsApi- The graphics libraries vanilla supports to render the game.RotatingSectionStorage- A class for managing the order of sections in relation to a center position.SectionUpdateTracker- A class for tracking whether a section needs to be updated.
net.minecraft.client.color.block.BlockTintCache$LatestCacheInfo#x,zare nowprivatefrompublicnet.minecraft.client.guiComponentPath#leafComponent- The listener at the end of the component path branch.FontdrawInBatchmethods are removed- Replaced by
Font$PreparedTextandFont$GlyphVisitor
- Replaced by
drawInBatch8xOutline->prepare8xTextOutline, only taking in theFormattedCharSequence, XY position, and outline color; not one-to-one$GlyphVisitorforMultiBufferSourceis removedacceptRenderable- Accepts theTextRenderableto operate upon, usually for rendering.
$PreparedTextBuilder#discardEffects- Removes the text's effects.
Guinow takes in theHudandGuiRenderStateSAVING_TEXT->SAVING_LEVEL, not one-to-onehud- The heads-up display of the user interface.resetTitleTimes->Hud#resetTitleTimesextractRenderStateno longer takes in theGuiGraphicsExtract, now taking in twobooleans of whether the level should be rendered, and whether the resources are loadedextractDebugOverlay->Hud#extractDebugOverlayregisterReloadListeners- Registers any reload listeners used by the GUI.extractDeferredSubtitles->Hud#extractDeferredSubtitlestickno longer takes in whether the screen is pausedbooleanupdate- Updates the GUI components.getMobEffectSprite->Hud#getMobEffectSpriteoverlay- Returns the current screen overlay.addSocialInteractionsToast- Creates and adds a social interactions toast.setPauseScreen- Sets the pause screen with the appropriate configuration.handleKeybinds- Handles any keybinds that directly affects the GUI.openChatAndAddText- Opens the chat screen and inserts the specified text.setNowPlaying->Hud#setNowPlayingsetOverlayMessage->Hud#setOverlayMessagesetTimes->Hud#setTimessetSubtitle->Hud#setSubtitlesetTitle->Hud#setTitleclearTitles->Hud#clearTitlesgetChat->Hud#getChatgetGuiTicks->Hud#getGuiTicksgetFont->Hud#getFontgetSpectatorGui->Hud#getSpectatorGuigetTabList->Hud#getTabListonDisconnected->Hud#onDisconnectedgetBossOverlay->Hud#getBossOverlaygetDebugOverlay->Hud#getDebugOverlayclearCache->Hud#clearCacheextractSavingIndicator->Hud#extractSavingIndicatorcanInterruptScreen- Whether the screen can be closed by an external event not from user input.setClientLevelTeardownInProgress- Sets that the current client level is being destroyed.
GuiGraphicsExtractorentitynow takes inVector3fcandQuaternionfcs instead ofVector3fandQuaternionfsskinnow takes in aModel$Simpleinstead of aPlayerModelfor the model$ScissorStack#push,popnow return nothing instead of theScreenRectangle
Hud- The heads-up display that's rendered atop the GUI when in-game.
net.minecraft.client.gui.componentsAbstractContainerWidgetnow has an overload that defaults theAbstractScrollArea$ScrollbarSettingsto no scrollingAbstractScrollArea$ScrollbarSettings#NO_SCROLL- Disables scrollbar scrolling for the scroll area.AbstractStringWidget#handleStyleClick- Handles if theStylehas a click event, returningtrueif handled.AbstractWidget#extractTooltipForNextRenderPass- Extracts the tooltip to render during the next pass.DebugScreenOverlay#render3dCrosshairis replaced byDebugCrosshairRendererEditBoxnow as an overload that defaults the width and height to 150x20FocusableTextWidget#setNarrateMessage,setUsageNarration- Handles the display of the narration text.OptionsListaddBignow has an overload that takes in anAbstractWidgetEntry$bignow has an overload that takes in anAbstractWidgetand the currentScreen
PlayerTabOverlaynow takes in theHudinstead of theGuiScrollableLayoutnow hsa an overload that allows setting theScrollableLayout$ReserveStrategysetScrollbarSpacing- Sets the spacing of the scrollbar.$Container#refreshChildren- Refreshes the current list of entries in the container.
SpriteIconButtonnow takes in theintXY offsets along with abooleanwhether to switch to the loading state after pressing the buttonspriteOffsetX,spriteOffsetY- The offsets of the sprite.setLoading- Sets whether the sprite icon is loading.extractLoadingStateIfLoading- Extracts the state of the button if loading.$Builderconstructor is nowprivatefrompublicspriteOffset- Sets the XY offset of the sprite.tooltip- Sets the tooltip to display when hovering.switchToLoadingAfterPress- Whether to switch to the loading state after pressing the button.
$CenteredIconnow takes in theintXY offsets along with abooleanwhether to switch to the loading state after pressing the button$TextAndIconnow takes in theintXY offsets along with abooleanwhether to switch to the loading state after pressing the button
TabButton#extractMenuBackground->MenuTabBar#renderMenuBackground
net.minecraft.client.gui.components.debug.DebugEntryVersionclass is nowpublicfrom package-privatenet.minecraft.client.gui.components.tabsMenuTabBar- A panel with navigation tabs for some menu.Tab#getLayout- Returns theLayoutof the tab.TabManager#setCurrentTabnow has an overload of whether to add the children widgets when setTabNavigationBarnow extendsAbstractContainerWidgetinstead ofAbstractContainerEventHandler- The constructor is now
protectedfromprivate, taking in the XY, height,TabButtons andTabs- The original constructor is now the constructor for
MenuTabBar
- The original constructor is now the constructor for
layoutis nowprotectedfromprivate, aFrameLayoutinstead of aLinearLayouttabs,tabButtonsare nowprotectedfromprivatebuildernow takes in the XY and heightupdateWidth->arrangeElements, not one-to-onearrangeElements()is removed$Builderis nowprotectedfromprivate, taking in the XY and height- All fields are now
protectedfromprivate x,y- The offsets of the navigation bar.height- The height of the bar.tabButtons- The buttons the user can click on to navigate.addTabsnow takes in aTabButtonalong with itsTabinstead of only a varargs ofTabs- The original method has been moved to
MenuTabBar$Builder#addTabs, assuming the tab uses aMenuTabBar$MenuTabButton
- The original method has been moved to
- All fields are now
- The constructor is now
net.minecraft.client.gui.layouts.Layout#removeChildren- Removes any children in the layout.net.minecraft.client.gui.font.FontTexture$Node#insertis nowpublicfrom package-privatenet.minecraft.client.gui.components.toasts.SystemToastmultilineis replaced by the default constructor callingupdaterecalculateWidth- Recalculates the maximum width of the toast, up to 190.
net.minecraft.client.gui.contextualbarContextualBarRenderer->ContextualBarExperienceBarRenderer->ExperienceBarJumpableVehicleBarRenderer->JumpableVehicleBarLocatorBarRenderer->LocatorBar
net.minecraft.client.gui.font.GlyphRenderTypes#createForIntensityTexture->createForGrayscaleTexturenet.minecraft.client.gui.renderGuiItemAtlasno longer takes in theSubmitNodeCollectornorMultiBufferSource$BufferSourceGuiRendererno longer takes in theSubmitNodeCollectornorMultiBufferSource$BufferSourceCLEAR_COLORis now aVector4fcinstead of anintrenderno longer takes in theGpuBufferSlicefor the fog buffer
net.minecraft.client.gui.renderer.pipno longer takes in theMultiBufferSource$BufferSourcein any constructorPictureInPictureRendererno longer takes in theMultiBufferSource$BufferSourcebufferSourceis removedpreparenow takes in theFeatureRenderDispatcherrenderToTexturenow takes in theSubmitNodeCollector
net.minecraft.client.gui.screensConfirmScreenmessageis nowprotectedfromprivateaddMessage- Creates a newMultiLineTextWidgetwith the screen fields.
OptionsScreenno longer implementsHasDifficultyReactionOverlay#isPauseScreen->isPausingScreen#panoramaShouldSpinreplaced byPanorama#startSpin,holdSpin; not one-to-one
net.minecraft.client.gui.screens.advancementsAdvancementsScreen#extractWindowno longer takes in the XY position to placeAdvancementTabtick- Ticks the tab display based on the mouse's relative position.extractTooltipsno longer takes in the mouse XY
AdvancementTabTypeenum is nowpublicfrom package-private
net.minecraft.client.gui.screens.inventoryAbstractCommandBlockEditScreengetCommandBlockis nowprotectedfrom package-privategetPreviousYis nowprotectedfrom package-private
AbstractContainerScreen#onMouseClickActionis nowprotectedfrom package-privateAbstractSignEditScreen#getSignTextScalenow returns aVector3fcinstead of aVector3f
net.minecraft.client.gui.screens.multiplayer.ServerSelectionList$Entry#matchesis nowprotectedfrom package-privatenet.minecraft.client.gui.screens.options.WorldOptionsScreenGAME_MODE_DISABLED_HARDCORE_TOOLTIP- The component to display if the game mode cannot be changed.ALLOW_COMMANDS_DISABLED_TOOLTIP- The component to display if commands are disabled.
net.minecraft.client.gui.screens.options.controls.KeyBindsList$Entry#refreshEntryis nowpublicfrom package-privatenet.minecraft.client.main.GameConfig$GameDatanow takes inbooleans for whether to use the validation layers for Vulkan, and the graphics api forced by launch argumentvulkanValidation- Whether to use the validation layers for Vulkan.forcedGraphicsApi- The graphics library forced by launch argument.
net.minecraft.client.modelModel#renderToBuffer(PoseStack, VertexConsumer, int, int)is removedQuadrupedModel#createLegsis nowpublicfrom package-private
net.minecraft.client.model.animal.cow.CowModel#createBaseCowModelis nowpublicfrom package-privatenet.minecraft.client.model.geom.builders.CubeDefinitionis nowpublicfromprotectednet.minecraft.client.model.monster.piglin.AbstractPiglinModel#getDefaultEarAngleInDegreesis nowprotectedfrom package-privatenet.minecraft.client.model.monster.slimeSulfurCubeModel- The entity model for the sulfur cube.SmallSulfurCubeModel- The entity model for a small sulfur cube.
net.minecraft.client.multiplayerClientChunkCache#getChunkis nowpublicfromprotectedClientLevelnow takes in aLevelExtractorinstead of theLevelRendereronSectionBecomingNonEmptyis removed
ClientPacketListener#getPlayerCompiledSectionCallback- Gets the callback for when the section the player is on the client has finished loading.LevelLoadTrackerstartClientLoadno longer takes in theLevelRenderergetPlayerCompiledSectionCallback- Gets the callback for when the section the player is on the client has finished loading.
net.minecraft.client.particleBreakingItemParticle$SulfurCubeProvider- A breaking item particle provider for the sulfur cube.NoxiousGasCloudParticle- A particle for the noxious gas cloud.NoxiousGasParticle- A particle for the noxious gas.ParticleEngine#getRandom- Returns the random source of the particle engine.ParticleGroupaddnow returns whether the particle was successfully addedgetAllis removed
ParticleRenderTypenow takes in an additional shorthandStringSulfurBubbleParticle- A particle for the sulfur bubbles.
net.minecraft.client.profiling.ClientMetricsSamplersProvidernow takes in aLevelExtractornet.minecraft.client.rendererBindGroupLayouts- A collection of common uniform and sampler layouts used by a renderer.DebugCrosshairRenderer- A renderer for the debug 3D crosshair reticle.DynamicUniforms#writeTransformnow has a view overloads for taking in the various transform parameters, or the$Transformobject itselfGameRendererno longer takes in theRenderBuffersrenderBuffers- The render buffers used for sections, outlines, and crumbling overlays.getSubmitNodeStorageis removedgetFeatureRenderDispatcher->featureRenderDispatchergetGameRenderState->gameRenderStategetNightVisionScale->nightVisionScaleupdateno longer takes in whether to advance the game timegetMinecraftis removedgetBossOverlayWorldDarkening->bossOverlayWorldDarkeninggetMainCamera->mainCameragetGlobalSettingsUniformis removedgetLighting->lightinggetPanorama->panorama
ItemInHandRendererrenderHandsWithItems->submitHandsWithItems$HandRenderSelection#renderMainHand,renderOffHandare nowpublicfrom package-private
LevelRendererhas been split between this class andLevelExtractor- The class no longer implements
ResourceManagerReloadListener LevelRenderer(Minecraft, EntityRenderDispatcher, BlockEntityRenderDispatcher, RenderBuffers, GameRenderState, FeatureRenderDispatcher)->LevelRenderer(EntityRenderDispatcher, BlockEntityRenderDispatcher, ModelManager, TextureManager, AtlasManager, ShaderManager, GameRenderer, int, int)SECTION_SIZE->SectionPos#SECTION_SIZEHALF_SECTION_SIZE->SectionOcclusionGraph#HALF_SECTION_SIZENEARBY_SECTION_DISTANCE_IN_BLOCKS->SectionRenderDispatcher#NEARBY_SECTION_DISTANCE_IN_BLOCKSdebugRenderer->LevelExtractor#debugRenderergameTestBlockHighlightRenderer->LevelExtractor#gameTestBlockHighlightRendererdestructionProgress->ClientLevel#destructionProgressinitOutlineis removed, merged into the main constructorshouldShowEntityOutlines->LevelExtractor#shouldShowEntityOutlines, nowprivatefrompublicsetLevel->resetLevelRenderData, not one-to-oneallChanged->invalidateCompiledGeometry, not one-to-onegetSectionStatistics->LevelExtractor#sectionStatisticsgetSectionRenderDispatcher->sectionRenderDispatchergetTotalSections->LevelExtractor#totalSectionsgetLastViewDistance->LevelExtractor#lastViewDistancecountRenderedSections->LevelExtractor#countRenderedSectionsresetSampler->LevelExtractor#resetSampler, not one-to-onegetEntityStatistics->LevelExtractor#entityStatisticsoffsetFrustum->SectionOcclusionGraph#offsetFrustum, nowprivatefrompublicaddRecentlyCompiledSectionis removed, now passed intoSectionRenderDispatcherupdateis removed- Closest use is
RotatingSectionStorage#repositionCentercalls
- Closest use is
renderLevel->render, no longer taking in theChunkSectionsToRenderextractLevel->LevelExtractor#extract, not one-to-onetickis removed- Logic moved to
ClientLevel#tick
- Logic moved to
blockChanged->LevelExtractor#blockChanged, no longer taking in theBlockGetterorBlockStatessetBlocksDirty->LevelExtractor#setBlocksDirtysetSectionDirtyWithNeighbors->LevelExtractor#setSectionDirtyWithNeighborssetSectionRangeDirty->LevelExtractor#setSectionRangeDirtysetSectionDirty->LevelExtractor#setSectionDirtyonSectionBecomingNonEmptyis removeddestroyBlockProgress->Level#destroyBlockProgressonChunkReadyToRenderis removedneedsUpdateis removedgetLightCoords->LightCoordsUtil#getLightCoordsentityRenderDispatcher- Gets the dispatcher for rendering entities.blockEntityRenderDispatcher- Gets the dispatcher for rendering block entities.getTranslucentTarget->translucentTargetgetItemEntityTarget->itemEntityTargetgetParticlesTarget->particlesTargetgetWeatherTarget->weatherTargetgetCloudsTarget->cloudsTargetgetVisibleSections->visibleSectionsgetSectionOcclusionGraph->sectionOcclusionGraphgetCloudRenderer->cloudRendererskyRenderer- Gets the sky renderer.weatherEffectRenderer- Gets the weather renderer.worldBorderRenderer- Gets the world border renderer.viewArea- Gets the currently viewed area of the camera.nearbyVisibleSections- Gets the visible sections that are nearby to the camera.collectPerFrameGizmos->collectPerFrameRenderThreadGizmosaddMainThreadGizmos- Adds gizmos from the main thread.expectedChunks- The chunks that are expected to be rendered.$BrightnessGetter->LightCoordsUtil$BrightnessGetter
- The class no longer implements
MultiBufferSourceinterface is removed- Closest replacement is
PreparedRenderTypein the feature system
- Closest replacement is
OrderedSubmitNodeCollectorsubmitModelPartno longer takes in thebooleans for whether its sheeted or has foilsubmitShapeOutline- Submits a voxel shape to draw an outline of.submitNameTagno longer takes in the squared distance to the cameradoublesubmitBreakingBlockModelnow takes in a list ofBlockStatModelParts instead of aBlockStateModeland alongseedsubmitParticleGroupnow takes in aQuadParticleRenderStateinstead of aSubmitNodeCollector$ParticleGroupRenderersubmitGizmoPrimitives- Submits the gizmo primitive to render.submitMovingBlocknow takes in theintoutline color
OutlineBufferSourceclass is removedPanorama#extractRenderStateno longer takes in abooleanof whether the panorama should spinRenderBuffersis nowAutoCloseableendFrame- When everything that should be uploaded is done for the frame.crumblingBufferSourceis removedbufferSource,outlineBufferSourcereplaced bystagedVertexBuffer, not one-to-one
RenderPipelines- Pipelines using the
DepthStencilStatehave their values invertedCompareOpdepth test usesGREATER_THAN_OR_EQUALinstead ofLESS_THAN_OR_EQUAL- Values for the two
ints are now their additive inverses
TEXT_INTENSITY->TEXT_GRAYSCALEGUI_TEXT_INTENSITY->GUI_TEXT_GRAYSCALETEXT_INTENSITY_SEE_THROUGH->TEXT_GRAYSCALE_SEE_THROUGHDRAGON_RAYS_DEPTHis removed- Merged with
DRAGON_RAYS
- Merged with
MATRICES_PROJECTION_SNIPPET->BindGroupLayouts#MATRICES_PROJECTION, not one-to-oneFOG_SNIPPET->BindGroupLayouts#FOG, not one-to-oneGLOBALS_SNIPPET->BindGroupLayouts#GLOBALS, not one-to-oneTEXT_GRAYSCALE_POLYGON_OFFSET- A pipeline for displaying grayscale text with some polygon offset.
- Pipelines using the
SectionBufferBuilderPoolis nowAutoCloseableSectionOcclusionGraphinvalidateIfNeeded- Invalidates the current graph based on the camera.onChunkReadyToRenderis removedupdatenow takes in theCameraRenderStateand fov instead of theCameraparams, and theChunkLoadingRenderStateupdateEmptySections- Updates the newly empty and non-empty sections.expectedChunks- The chunks that are expected to be rendered.updateLoadedChunks- Updates the newly added and removed loaded chunks.$GraphStorage#sectionsWaitingForChunkLoads- The list of sections currently waiting to be chunk-loaded.
ScreenEffectRendererno longer takes in theMultiBufferSource$BufferSourcerenderScreenEffect->submit
ShapeRenderer->ShapeOutlineFeatureRenderer, not one-to-oneSheetsDECORATED_POT_SPRITES->DecoratedPotRenderer#DECORATED_POT_SPRITES, nowprivatefrompublicBED_SHEET,BED_MAPPER,getBedSprite,createBedSpriteare removedcutoutBlockSheet,translucentBlockSheetare removed- Replaced by direct construction calls or
*ItemSheetvariants
- Replaced by direct construction calls or
getDecoratedPotSprite->DecoratedPotRenderer#getSideSprite, nowprivatefrompublic, not one-to-onecolorToResourceSpriteis removed
SkyRenderernow takes in theRenderTargetStagedVertexBuffer- A vertex buffer for staging draws to upload at a later point in time.SubmitNodeCollection- All submit list fields are now
publicfromprivate, renamed from*Submits->*, and are someFeatureRenderPhasesubtype get*Submitsare replaced by their field calls, not one-to-onegetModelPartSubmitsis removedwasUsedreplaced byFeatureRenderPhase#isEmpty, not one-to-oneallPhases- The list of feature render phases containing the submitted elements.
- All submit list fields are now
SubmitNodeCollector$ParticleGroupRendererinterface is removedSubmitNodeStorageclear,endFrameare removeddrawPhases- Operates on the render phases containing the submitted elements, removing them if the phase contains nothing.$*Submitstorage classes have been moved to their feature renderer class under<feature renderer>$Sumbit$CustomGeometrySubmit->CustomFeatureRenderer$Submit- The constructor now takes in a
RenderTypeand outline color
- The constructor now takes in a
$ModelPartSubmitrecord is removed
ViewAreano longer takes in theLevelorLevelRenderer, instead taking in the min and max Y and section Y, along with theSectionOcclusionGraphlevelRendereris removedlevelis removedsectionGridSizeY,sectionGridSizeX,sectionGridSizeZare removedsectionsis nowprivatefrompublic, not one-to-onesetViewDistancesize- The number of sections in the storage.minY,maxY- The height bounds of the level.minSectionY,maxSectionY- The section height bounds of the level.sectionCount- The number of sections per chunk.getLevelHeightAccessoris removedsetDirtyis removedgetRenderSectionAtis nowpublicfromprotected
WeatherEffectRendereris nowAutoCloseabletickRainParticles->ClientLevel#tickWeatherEffects, not one-to-onegetPrecipitationAt->ClientLevel#getPrecipitationAt, nowpublicfromprivateextractRenderStatenow takes in theClientLevelinstead of theLevel, and no longer takes in the number of ticks the game has ran
WorldBorderRenderernow implementsAutoCloseable
net.minecraft.client.renderer.block.BlockModelRenderState#blockLightCoords- The packed light coordinates of the block.net.minecraft.client.renderer.blockentityBannerRenderer#submitPatternLayernow takes in anOrderedSubmitNodeCollectorinstead of aSubmitNodeCollectorBedRendererclass is removedBlockEntityRenderDispatcher#tryExtractRenderStatenow takes in whether the block entity is globally renderedTrialSpawnerRenderer#extractSpawnerDatais nowpublicfrom package-private
net.minecraft.client.renderer.chunkCompileTaskDynamicQueue->SectionTaskDynamicQueueRenderSectionRegionis nowpublicfrom package-privateSectionCompilerno longer takes in theBlockEntityRenderDispatcherSectionCopyis nowpublicfrom package-privateSectionRenderDispatcherno longer takes in theClientLevelandLevelRenderer, instead taking in a consumer for a listener on when the section mesh has been updatedsetLevel->setCompiler, not one-to-oneuploadGlobalGeomBuffersToGPU->uploadTerrainBuffersToGpurebuildSectionSyncis removed$RenderSectionnow implementsRotatingSectionStorage$ValueSIZE->SectionPos#SECTION_SIZEhasAllNeighborsis removedsetDirty,setNotDirty,isDirty,isDirtyFromPlayerare removedresortTransparencyno longer takes in theSectionRenderDispatchercancelTasksis nowprivatefromprotectedcreateCompileTaskis nowprivatefrompublic, now taking in theRenderSectionRegioninstead of theRenderRegionCacherebuildSectionAsync->compileAsync, now taking in theRenderSectionRegioninstead of theRenderRegionCachecompileSyncnow takes in theRenderSectionRegioninstead of theRenderRegionCache$CompileTask->SectionRenderDispatcher$SectionTaskisRecompileis nowprivatefromprotectednameis removed
$RebuildTask->$CompileTaskregionis nowprivatefromprotected
net.minecraft.client.renderer.entityAbstractCubeMobRenderer- An entity renderer for cube-like mobs.CamelRenderer#extractAdditionalStateis nowpublicfrom package-privateEntityRenderer#extractNameplates->extractNameTagsMagmaCubeRenderernow extendsAbstractCubeMobRendererSlimeRenderernow extendsAbstractCubeMobRendererSulfurCubeRenderer- The entity renderer for a sulfur cube.TntRenderergetSwellAmount- How much to inflate the TNT model by, given the fuse timer.isLit- Whether the TNT has been lit.
net.minecraft.client.renderer.entity.layers.SulfurCubeInnerLayer- The inner layer of a sulfur cube.net.minecraft.client.renderer.entity.state.SulfurCubeRenderState- The render state for a sulfur cube.net.minecraft.client.renderer.extract.LevelExtractor- A class that extracts the render state for level rendering.net.minecraft.client.renderer.feature- All
*FeatureRendererclasses now implementFeatureRenderer<SUBMIT>whereSUBMITis the type of the storage passed in.- All
*FeatureRendererclasses exceptQuadParticleFeatureRendererextendRenderTypeFeatureRenderer TYPE- The identifier for the feature renderer$Submitnow implements aSubmitNodesubtype: eitherSubmitNode,BatachableSubmit, orTranslucentSubmitrender*methods replaced withRenderTypeFeatureRenderer#buildGroupQuadParticleFeatureRenderer#render*methods replaced byFeatureRenderer#prepareGroup,executeGroup,finishPrepare,finishExecute
- All
BlockFeatureRenderer->BlockModelFeatureRendererrenderMovingBlockSubmits->MovingBlockFeatureRenderer, not one-to-one
CustomFeatureRenderer$Storage#addnow takes in the outline color
FeatureFrameContext- A record that contains the context for rendering a feature.FeatureRenderDispatcherno longer takes in theSubmitNodeStorage,MultiBufferSource$BufferSource, orOutlineBufferSource; now taking in theRenderBufferscreateFrameContextreplaced byprepareFrame, not one-to-onerenderSolidFeatures->$PreparedFrame#executeSolidrenderTranslucentFeatures->$PreparedFrame#executeTranslucentrenderTranslucentParticles->$PreparedFrame#executeTranslucentAfterTerrainclearSubmitNodesis removedrenderAllFeaturesnow takes in theSubmitNodeStorageto renderendFrameis removedgetSubmitNodeStorageis removed$PhaseSubmitGrouper- A group of features to be rendered in a given phase.$PreparedFrame- The prepared features to render and execute for each phase.$PreparedGroup- A sub-list of a given submitted feature to be prepared and executed for rendering.
FeatureRenderer- The base interface representing a renderer for a specific feature.FeatureRendererMap- A registry of feature renderers.FeatureRendererType- A unique identifier for a feature renderer.GizmoFeatureRenderer- A feature renderer forGizmos.ItemFeatureRenderergetFoilBuffer(MultiBufferSource, RenderType, boolean, boolean)is removed- Use the other
getFoilBufferinstead
- Use the other
getFoilRenderTypeis removed- Directly merged into the other
getFoilBuffer
- Directly merged into the other
ModelPartFeatureRendererclass is removedMovingBlockFeatureRenderer- A feature renderer for moving blocks.ParticleFeatureRenderer->QuadParticleFeatureRendererendFrameis removed
RenderTypeFeatureRenderer- A feature renderer that prepares and renders elements using the submittedRenderType.ShapeOutlineFeatureRenderer- A feature renderer forVoxelShapeoutlines.$Submit- A submitted shape outline.
TextFeatureRenderer#renderTranslucentnow takes in aFeatureFrameContextinstead of theMultiBufferSource$BufferSource
- All
net.minecraft.client.renderer.feature.phaseFeatureRenderPhase- A group of submitted features for a single type to render.SimpleFeatureRenderPhase- A basic implementation of the render phase storage for features.TranslucentFeatureRenderPhase- An implementation of the render phase for features with translucency.
net.minecraft.client.renderer.feature.submitBatchableSubmit- An interface that represents a submitted feature that can be batched together in one render upload.SubmitNode- An interface that represents a submitted feature.TranslucentSubmit- An interface that represents a submitted feature with translucency.
net.minecraft.client.renderer.gizmos.DrawableGizmoPrimitivesrenderreplaced bysubmitisEmptyis removed$Groupis nowpublicfromprivaterenderis removed
$Line,$Point,$Quad,$Text,$TriangleFanare nowpublicfromprivate
net.minecraft.client.renderer.item.properties.numericCompassAngleState#getis nowpublicfrom package-privateTime#getis nowpublicfrom package-private
net.minecraft.client.renderer.rendertypeLayeringTransform,getModifiernow deals with aMatrix4fconsumer instead of aMatrix4fStackPreparedRenderType- The state of aRenderTypewith all of the necessary components to draw the buffered data to the output.RenderSetupno longer takes in the buffer sizegetTexturesreplaced byprepareTextures, not one-to-one$RenderSetupBuilder#bufferSizeis removed$TextureAndSamplerrecord is removed
RenderTypedraw->PreparedRenderType#drawFromBuffer, now taking in theStagedVertexBuffer$ExecuteInfo; not one-to-onedrawFromBuffer->PreparedRenderType#drawFromBuffer, not one-to-onebufferSizeis removedprepare- Constructs thePreparedRenderTypeused to draw the buffered data to the output.mode->primitiveTopology
RenderTypestextIntensity->textGrayscaletextIntensityPolygonOffset->textGrayscalePolygonOffsettextIntensitySeeThrough->textGrayscaleSeeThroughdragonRaysDepthis removed- Merged with
dragonRays
- Merged with
TextureTransform#getMatrix->createMatrix
net.minecraft.client.renderer.special.BedSpecialRendererclass is removednet.minecraft.client.renderer.stateOptionsRenderStatehideGui->GuiRenderState#isHudHiddenchunkSectionFadeInTime- The amount of seconds that should be taken for a chunk to fade in when first rendered.prioritizeChunkUpdates- What chunk updates to prioritize.fov- The field of view of the camera.
WindowRenderState#isResizedis removed
net.minecraft.client.renderer.state.guiBlitRenderStatenow takes in aMatrix3x2fcinstead of aMatrix3x2ffor the poseGuiRenderState#clearColorOverrideis now aVector4finstead of anintGuiTextRenderState#font,text,x,y,color,backgroundColor,dropShadoware nowprivatefrompublic
net.minecraft.client.renderer.state.gui.pipGuiEntityRenderStatenow takes inVector3fcandQuaternionfcs instead ofVector3fandQuaternionfsGuiSkinRenderStatenow takes in aModel$Simpleinstead of aPlayerModelfor the modelPictureInPictureRenderState#IDENTITY_POSE,posenow returns aMatrix3x2fcinstead of aMatrix3x2f
net.minecraft.client.renderer.state.levelCameraRenderStateisFrustumCaptured- Whether the frustum has been captured.smartCull- Whether to use smart culling.
ChunkLoadingRenderState- The render state of the current chunks and sections being added and removed.LevelRenderStaterender3dCrosshair- Whether to render the 3d crosshair reticle.chunkSectionsToRenderis removedsectionUpdateRenderStates- The render states of the sections to update.playerCompiledSectionCallback- Gets the callback for when the section the player is on the client has finished loading.chunkLoadingRenderState- The changes between sections and chunks.shouldResetChunkLayerSampler- Whether the chunk layer sampler should be reset.shouldShowEntityOutlines- Whether to show the outlines of entities.shouldResetSkyRenderer- Whether the sky renderer should be reinitialized.hasGlowingEntitiesis removed
ParticlesRenderState#submitnow takes in aSubmitNodeCollectorinstead of theSubmitNodeStorageQuadParticleRenderStateno longer implementsSubmitNodeCollector$ParticleGroupRendererpreparereplaced bybuildLayer, not one-to-onerender->QuadParticleFeatureRenderer#render, not one-to-onelayers- The set of quad layers to render.$PreparedBuffers,$PreparedLayerare removed
SectionUpdateRenderState- The render state of a section to update.
net.minecraft.client.renderer.textureAbstractTexture#releaseTextures- Closes the texture and its view if open.TextureAtlasSprite#isAnimatedis nowpublicfrom package-private
net.minecraft.client.resources.modelBlockStateDefinitions#definitionLocationToBlockStateMapperis nowpublicfrom package-privateModelManager$BlockOnlyMaterialBaker- An implementedMaterialBakerfor a block.$CombinedBlockItemMaterialBaker- An implementedMaterialBakerfor a block item.
SimpleModelWrapper#findNonBlockSprites- Returns a map of sprites that are not in the block texture atlas.
net.minecraft.client.resources.model.geometry.BakedQuad$MaterialFlagscan now only targetElementType#TYPE_USEnet.minecraft.client.resources.model.spriteMaterialBakeris now an abstractclassinstead of aninterfacereplacementForMissingMaterial- Gets the baked material that represents the missing sprite.bake- Bakes theMaterial.bakeForAtlas- Bakes theMaterialwithin the given atlas.logMissingTextures- Logs any missing textures or references in the model.
SpriteId#bufferare removed
net.minecraft.client.telemetryTelemetryEventType#GRAPHICS_CAPABILITIES- The capabilities of the graphics card.TelemetryPropertyBACKEND_NAME- The name of the graphics backend.BACKEND_FAILURE_MESSAGE- The message provided by the backend when failing during construction.BACKEND_FAILURE_REASON- The reason the backend failed during construction.BACKEND_FAILURE_MISSING_CAPABILITIES- The backend failed during construction due to missing capabilities.
net.minecraft.network.chatCommonComponents#GUI_REMOVE- A component for a remove option.MutableComponent#withColor- Sets the color style of the component.TextColornow has constants representing the colorChatFormattingnamed- Creates a new text color with the given name and RGB value.
Object Collections
Many vanilla objects can be considered variants of each other but are independent in nature (e.g. different colors, different copper states). Given that most of these objects have the same properties and components, vanilla created object collections to store all the variants together and operate upon them at once. As such, fields within certain registries have been condensed into a single collection (e.g. Items#_*DYE is now a Items#DYE collection).
Vanilla currently provides two collections: a ColorCollection for all 16 dye colors, and WeatheringCopperCollection for weathered and waxed blocks. The collections can be created through the constructor, but there are static constructors for blocks (registerBlocks) and items (registerItems). The collection also contain methods for common usecases, like looping through each entry (forEach) or picking a specific entry from its collection method (pick).
// Create colored blocks
public static final ColorCollection<Block> EXAMPLE_BLOCK = ColorCollection.registerBlocks(
// The base identifier for the blocks.
// The colors will be prefixed when creating (e.g. 'white_example_block').
"example_block",
// The method to register the block. Takes in:
// - The name created from the identifier.
// - The factory taking in the properties to create the block.
// - The block properties.
// And returns the block.
(name, factory, props) -> Registry.register(
BuiltInRegistries.BLOCK,
Identifier.fromNamespaceAndPath("examplemod", name),
factory.apply(props)
),
// The factory that creates the block. Takes in:
// - The dye color applied to the block.
// - The block properties.
// And returns the block.
(color, props) -> new Block(props),
// Supplies the properties for the given color. Takes in:
// - The dye color applied to the block.
// And returns the block properties.
color -> BlockBehavior.Properties.of()
);
// Do something for each object in the collection
EXAMPLE_BLOCK.forEach(block -> {
// ...
});
// Map a collection to another collection
ColorCollection<Item> items = ColorCollection.map(Block::asItem);
// Map two collections together, zipping them per entry
ColorCollection<Item> items = ColorCollection.zipMap(EXAMPLE_BLOCK, ColorCollection.VALUES, (exampleBlock, dyeColor) -> {
val id = BuiltInRegistries.BLOCK.getKey(exampleBlock);
return Registry.register(
BuiltInRegistries.ITEM, id,
new Item(new Item.Properties()
.setId(ResourceKey.create(BuiltInRegistries.ITEM, id))
.component(DataComponents.DYED_COLOR, new DyedItemColor(dyeColor.getTextureDiffuseColor))
)
);
});
// Do something given two collections, zipping them per entry
ColorCollection.zipApply(EXAMPLE_BLOCK, Items.DYE, (exampleBlock, dye) -> {
// ...
});
// Get a specific object based on the collection variant
Block pink = EXAMPLE_BLOCK.pick(DyeColor.PINK);
net.minecraft.client.data.models.BlockModelGeneratorscreateBannerno longer takes in theBlocks for the ground and wall variantscreateBannersis removedcreateBedno longer takes in theBlocks for the bed and particlecreateBedsis removed
net.minecraft.client.renderer.Sheets#CHEST_COPPER_*merged intoCHEST_COPPERcollectionnet.minecraft.client.renderer.block.BuiltInBlockModels#createBannersno longer takes in theBlocks for the ground and wall variantsnet.minecraft.client.renderer.special.ChestSpecialRenderer#COPPER_*merged intoCOPPERcollectionnet.minecraft.data.BlockFamiliesCOPPER_BLOCK,WAXED_COPPER_BLOCK,EXPOSED_COPPER,WAXED_EXPOSED_COPPER,WEATHERED_COPPER,WAXED_WEATHERED_COPPER,OXIDIZED_COPPER,WAXED_OXIDIZED_COPPERmerged intoCOPPER_BLOCK, not one-to-oneCUT_COPPER,WAXED_CUT_COPPER,EXPOSED_CUT_COPPER,WAXED_EXPOSED_CUT_COPPER,WEATHERED_CUT_COPPER,WAXED_WEATHERED_CUT_COPPER,OXIDIZED_CUT_COPPER,WAXED_OXIDIZED_CUT_COPPERmerged intoCUT_COPPER, not one-to-one
net.minecraft.data.loot.EntityLootSubProvider#createSheepDispatchPoolnow takes in aColorCollectioninstead of a mapnet.minecraft.data.loot.packs.LootDatais removednet.minecraft.world.itemItemsthat have different variants may have been merged into a single entry, usually represented by some*CollectionclassWeatheringCopperItems->WeatheringCopperCollection, not one-to-one
net.minecraft.world.item.trading.VillagerTradesthat have different variants may have been merged into a single entry, usually represented by some*Collectionclassnet.minecraft.world.level.blockBlocksthat have different variants may have been merged into a single entry, usually represented by some*CollectionclassColorCollection- A collection of objects whose variants represent one of sixteen colors.WeatheringCopperBlocks->WeatheringCopperCollection, not one-to-one
net.minecraft.world.level.storage.loot.BuiltInLootTablesmap fields are replaced byColorCollections
Advancements and Entity Sub Predicates
net.minecraft.advancements has reorganized the location of its criteria, triggers, and predicates. Criteria and triggers are now located within net.minecraft.advancements.triggers, whereas predicates can be found within net.minecraft.advancements.predicates. EntityPredicate along with EntitySubPredicate and its implementations are within net.minecraft.advancements.predicates.entity.
Additionally, EntityPredicate is now a wrapper around a map of EntitySubPredicates. Since not all predicates used by the EntityPredicate were EntitySubPredicates (e.g. DistancePredicate, SlotsPredicate), vanilla added new EntitySubPredicates that wrap around these generic implementations (e.g. DistancePredicate -> DistanceToPlayerPredicate, SlotsPredicate -> EntitySlotsPredicate). Predicates that were recursive in nature (e.g. vehicle, passenger) also have an object to wrap around the EntityPredicate (e.g. vehicle now a VehiclePredicate, passenger now a PassengerPredicate).
EntitySubPredicate has also changed slightly as its now just a functional interface with matches. Registries#ENTITY_SUB_PREDICATE_TYPE now registers a Codec of the predicate, which is used as the key of the EntityPredicate map.
// Create a sub predicate to map.
public class TeamColorPredicate(int color) implements EntitySubPredicate {
// The codec to register.
public static final Codec<TeamColorPredicate> CODEC = ExtraCodecs.STRING_RGB_COLOR.xmap(
TeamColorPredicate::new, TeamColorPredicate::color
);
public TeamColorPredicate {
this.color = ARGB.opaque(color);
}
@Override
public boolean matches(Entity entity, ServerLevel level, @Nullable Vec3 position) {
return ARGB.opaque(entity.getTeamColor()) == this.color;
}
}
// Register the codec.
Registry.register(
BuiltInRegistries.ENTITY_SUB_PREDICATE_TYPE,
Identifier.fromNamespaceAndPath("examplemod", "team_color"),
TeamColorPredicate.CODEC
);
So, if our EntityPredicate looks something like:
var predicate = new EntityPredicate(Map.of(
TeamColorPredicate.CODEC, new TeamColorPredicate(0x00FF00),
DistanceToPlayerPredicate.CODEC, new DistanceToPlayerPredicate(DistancePredicate.vertical(MinMaxBounds.Doubles.exactly(1d)))
));
Then, it will be serialized into the advancement JSON as:
// In some advancement JSON
// Only the `EntityPredicate` part
{
"examplemod:team_color": "#00FF00",
"minecraft:distance": {
"y": 1
}
}
net.minecraft.advancementsCriteriaTriggers->.advancements.triggers.CriteriaTriggersCriterion->.advancements.triggers.CriterionCriterionTrigger->.advancements.triggers.CriterionTrigger
net.minecraft.advancements.criterion.**Predicate->.advancements.predicates.*Predicate*Trigger->.advancements.triggers.*TriggerBlockPredicate->.advancements.predicates.BlockPredicateCollectionContentsPredicate->.advancements.predicates.CollectionContentsPredicateCollectionCountsPredicate->.advancements.predicates.CollectionCountsPredicateCollectionPredicate->.advancements.predicates.CollectionPredicateContextAwarePredicate->.advancements.predicates.ContextAwarePredicateDamagePredicate->.advancements.predicates.DamagePredicateDamageSourcePredicate->.advancements.predicates.DamageSourcePredicateDataComponentMatchers->.advancements.predicates.DataComponentMatchersDistancePredicate->.advancements.predicates.DistancePredicateEnchantmentPredicate->.advancements.predicates.EnchantmentPredicateEntityEquipmentPredicate->.advancements.predicates.entity.EntityEquipmentPredicate- Now implements
EntitySubPredicate
- Now implements
EntityFlagsPredicate->.advancements.predicates.entity.EntityFlagsPredicate- Now implements
EntitySubPredicate
- Now implements
EntityPredicate->.advancements.predicates.entity.EntityPredicate- The constructor now takes in a map of
EntitySubPredicates entityTypereplaced by adding anEntityTypePredicateto the mapdistanceToPlayerreplaced by adding aDistanceToPlayerPredicateto the mapmovementreplaced by adding aDistanceToPlayerPredicateto the maplocationreplaced by adding some of the following to the map:EntityLocationPredicateSteppingOnPredicateMovementAffectedByPredicate
effectsreplaced by adding aEntityEffectsPredicateto the mapnbtreplaced by adding aEntityNbtPredicateto the mapflagsreplaced by adding aEntityFlagsPredicateto the mapequipmentreplaced by adding aEntityEquipmentPredicateto the mapsubPredicate->parts, nowprivatefrompublic, not one-to-oneperiodicTickreplaced by adding aPeriodicEntityTickPredicateto the mapvehiclereplaced by adding aVehiclePredicateto the mappassengerreplaced by adding aPassengerPredicateto the maptargetedEntityreplaced by adding aTargetedEntityPredicateto the mapteamreplaced by adding aTeamPredicateto the mapslotsreplaced by adding aEntitySlotsPredicateto the mapcomponentsreplaced by adding eitherEntityExactDataComponentsPredicateorEntityPartialComponentsPredicateto the map$Buildercomponentsnow has an overload that takes in a map ofDataComponentTypes toDataComponentPredicateslightingBolt- Adds a predicate for a lightning bolt.player- Adds a predicate for a player.sheep- Adds a predicate for a sheep.cubeMob- Adds a predicate for a cube mob.raider- Adds a predicate for a raider.fishingHook- Adds a predicate for a fishing hook.
$LocationWrapperrecord is removed
- The constructor now takes in a map of
EntitySubPredicate->.advancements.predicates.entity.EntitySubPredicateCODEC->EntityPredicate#MAP_CODEC, not one-to-onecodecis removedALWAYS_TRUE- A predicate that returns true.and- Chains another predicate with this one using anANDstatement.
EntitySubPredicates->.advancements.predicates.entity.EntitySubPredicates- Static fields are now inlined into
bootstrap
- Static fields are now inlined into
EntityTypePredicate->.advancements.predicates.entity.EntityTypePredicate- Now implements
EntitySubPredicate
- Now implements
FishingHookPredicate->.advancements.predicates.entity.FishingHookPredicateFluidPredicate->.advancements.predicates.FluidPredicateFoodPredicate->.advancements.predicates.FoodPredicateGameTypePredicate->.advancements.predicates.GameTypePredicateInputPredicate->.advancements.predicates.InputPredicateItemPredicate->.advancements.predicates.ItemPredicateLightningBoltPredicate->.advancements.predicates.entity.LightningBoltPredicateLightPredicate->.advancements.predicates.LightPredicateLocationPredicate->.advancements.predicates.LocationPredicateMinMaxBounds->.advancements.predicates.MinMaxBoundscreateCodec,createStreamCodecare nowpublicfrom package-private
MobEffectsPredicate->.advancements.predicates.MobEffectsPredicateMovementPredicate->.advancements.predicates.entity.MovementPredicate- Now implements
EntitySubPredicate
- Now implements
NbtPredicate->.advancements.predicates.NbtPredicatePlayerPredicate->.advancements.predicates.entity.PlayerPredicateRaiderPredicate->.advancements.predicates.entity.RaiderPredicateSheepPredicate->.advancements.predicates.entity.SheepPredicateSingleComponentItemPredicate->.advancements.predicates.SingleComponentItemPredicateSlimePredicate->.advancements.predicates.entity.CubeMobPredicateSlotsPredicate->.advancements.predicates.SlotsPredicateStatePropertiesPredicate->.advancements.predicates.StatePropertiesPredicateTagPredicate->.advancements.predicates.TagPredicate
net.minecraft.advancements.predicates.entityDistanceToPlayerPredicate- An entity sub predicate that checks aDistancePredicate.EntityEffectsPredicate- An entity sub predicate that checks aMobEffectsPredicate.EntityLocationPredicate- An entity sub predicate that checks aLocationPredicate.EntityNbtPredicate- An entity sub predicate that checks aNbtPredicate.EntityPartialComponentsPredicate- An entity sub predicate that checks if the specified data components match theDataComponentPredicate.EntitySlotsPredicate- An entity sub predicate that checks aSlotsPredicate.EntityTagPredicate- An entity sub predicate that checks if an entity is in or not inEntity#entityTags.MovementAffectedByPredicate- An entity sub predicate that checks aLocationPredicateonEntity#getBlockPosBelowThatAffectsMyMovement.PassengerPredicate- An entity sub predicate that checks anEntityPredicateon all passengers.SteppingOnPredicate- An entity sub predicate that checks aLocationPredicateonEntity#getOnPos.TargetedEntityPredicate- An entity sub predicate that checks anEntityPredicateonMob#getTarget.TeamPredicate- An entity sub predicate that checks if an entity is on the specified team.VehiclePredicate- An entity sub predicate that checks anEntityPredicateonEntity#getVehicle.
net.minecraft.core.registries.BuiltInRegistries,Registries#ENTITY_SUB_PREDICATE_TYPEis now aCodecinstead of aMapCodecnet.minecraft.server.PlayerAdvancementsstopListening->clearTriggers, not one-to-onegetTriggerMapForType- Gets the map of advancement to trigger value for the givenCriterionTrigger.$TriggerInstanceKey- A record that holds the advancement and associated string criterion.
More Resource Keys and Separating Registry Objects
Blocks, Items, EntityTypes, BlockEntityTypes, Fluids, and Potions have had their ResourceKeys stored in a separate *Ids class, which is then referenced whenever an identifier is needed. Blocks with an item representation, known as block items, have their own identifiers stored as a BlockItemId, which is just a pair of ResourceKeys, in BlockItemIds.
Additionally, the BlockEntityType and EntityType registry entries have been moved into their own separate class: BlockEntityTypes and EntityTypes, respectively.
Tags Provider Changes
Since all registry objects in a tag has an accessible ResourceKey, all utility subclasses of TagsProvider have been removed (i.e. HolderTagProvider, IntrinsicHolderTagsProvider, KeyTagProvider), with the two KeyTagProvider#tag methods moved into TagsProvider. In addition, the TagAppender now only takes in ResourceKeys, the arbitrary element mapping completely removed.
This means that either a ResourceKey or TagKey must be provided to add an element to a tag through TagsProviders.
For block items and block item tags (tags that exist within the block and item registry), BlockItemTagsProvider has been updated to use BlockItemIds and BlockItemTagIds, which are functionally records that hold the names of the object in the block and item registries. Entries are added in the run block, which is then called within the block or item TagsProvider, respectively.
net.minecraft.data.tags- All
*TagsProviderthat extendedTagsProvideror one of its subclasses now extendTagsProvider BlockItemTagAppender- ATagAppenderthat converts aBlockItemIdto its appropriate object resource key, usually for aBlockorItem.BlockItemTagsProvidernow takes in a function with aBlockItemTagIdand returning a$CombinedAppender- The original behavior of this class has moved to
VanillaBlockItemTagsProvider tagnow takes in aBlockItemTagIdinstead of theTagKeys for eachrunis now abstractwrapForBlocks,wrapForItems- Wraps around an existing block or itemTagAppenderto take in aBlockItemIdorBlockItemTagId.$CombinedAppender- An appender that allows forBlockItemIds andBlockItemTagIds to be added.
- The original behavior of this class has moved to
HolderTagProviderclass is removedIntrinsicHolderTagsProviderclass is removedKeyTagProviderclass is removedtag->KeyTagProvider#tag
TagAppenderno longer takes in theEelement generic- The
Egeneric in methods have been replaced withResourceKey<T> mapis removed
- The
- All
net.minecraft.referencesBlockIdsnow containResourceKeys for all blocks without item representations available in a tagBlockItemId- An identifier that applies to a block with an item representation.BlockItemIds- Identifiers for vanilla blocks with an item representation.ItemIdsnow containResourceKeys for all non-block items available in a tag
net.minecraft.resources.ResourceKey#dependent- Creates a new resource key by modifying the path of the objectIdentifier, either via a suffix or aUnaryOperator.net.minecraft.tagsBlockItemTagId- An identifier that applies to a block tag with an item tag representation.BlockItemTags- Identifiers for block tags with an item tag representation.
net.minecraft.world.entityEntityTyperegistry objects have been moved toEntityTypesbyStringis removed
EntityTypeIds- Identifiers for entity types.EntityTypes- All vanilla entity types.
net.minecraft.world.item.alchemy.PotionIds- Identifiers for vanilla potions.net.minecraft.world.level.block.entityBlockEntityTyperegistry objects have been moved toBlockEntityTypes- The constructor is now
publicfromprivate $BlockEntitySupplieris nowpublicfromprivate
- The constructor is now
BlockEntityTypeIds- Identifiers for block entity types.BlockEntityTypes- All vanilla block entity types.
net.minecraft.world.level.material.FluidIds- Identifiers for fluids.
Minor Migrations
The following is a list of useful or interesting additions, changes, and removals that do not deserve their own section in the primer.
Sulfur Cube Archetypes
Sulfur cubes behave differently depending on the item it absorbed. What behavior the cube exhibits depends on the SulfurCubeArchetype, a datapack registry object, containing the corresponding Item.
// A file located at:
// - `data/examplemod/sulfur_cube_archetype/example_archetype.json`
{
// The held items the sulfur cube must contain for this archetype to apply.
// Can either be an item id, such as "minecraft:apple",
// or a list of item ids, such as ["minecraft:apple", "minecraft:carrot", ...],
// or an entity type tag, such as "#minecraft:sulfur_cube_food".
"items": "#minecraft:sulfur_cube_food",
// A list of attribute modifiers to apply to the sulfur cube when holding
// the item.
"attribute_modifiers": [
{
// A unique identifier representing the modifier.
"id": "examplemod:example_arch_add_resistance",
// The registry name of the attribute to apply.
"attribute": "minecraft:knockback_resistance",
// The amount to modify the attribute value.
"amount": -2.0,
// The operation to use when applying the modifier.
// - 'add_value': Adds the amount to the current value.
// - 'add_multiplied_base': Multiplies the amount to the base value after additions.
// - 'add_multiplied_total': Multiplies the amount to the value after all modifications.
"operation": "add_value"
}
],
// When `true`, the sulfur cube will float in liquids.
"buoyant": true,
// When present, a sulfur cube can be primed.
"explosion": {
// The maximum radius of the explosion. (e.g., 4.0 for regular tnt)
"power": 4,
// When `true`, the explosion can set other blocks on fire.
"causes_fire": true,
// The number of ticks before the sulfur cube explodes.
"fuse": 120
},
// When present, the sulfur cube will deal damage to entities it comes in contact with.
"contact_damage": {
// The float provider specifying how many half-hearts to remove.
"amount": 2,
// The registry name of the damage type.
"damage_type": "minecraft:cactus",
// When `true`, the damage is attributed to the sulfur cube.
"attribute_to_source": false
},
// Specifies the knockback the sulfur cube receives when hit.
"knockback_modifiers": {
// The base delta movement to apply along the XZ axis.
"horizontal_power": 0.33,
// The base delta movement to apply along the Y axis.
"vertical_power": 0.06
},
// Specifies the sounds made by the sulfur cube.
"sound_settings": {
// The sound made when the sulfur cube receives knockback (on hit).
"hit_sound": "minecraft:entity.sulfur_cube.regular.hit",
// The sound made whent the sulfur cube collides with the player's pickup area.
"push_sound": "minecraft:entity.sulfur_cube.regular.push",
// The number of seconds to wait before playing the push sound again.
"push_sound_cooldown": 0.5,
// The square root of the velocity threshold for the push sound to be played.
"push_sound_impulse_threshold": 0.2
}
}
net.minecraft.core.registries.Registries#SULFUR_CUBE_ARCHETYPE- A resource key for the archetypes of a sulfur cube.net.minecraft.world.entitySulfurCubeArchetype- The behavior of a sulfur cube when holding the given item.SulfurCubeArchetypes- All vanilla sulfur cube archetypes.
net.minecraft.world.item.component.SulfurCubeContent- The absorbed block stored in the sulfur cube.
Shears Breaking Speed
Shears now use three tags to determine how fast it should break an block:
minecraft:shears_extreme_breaking_speed- Blocks are mined with a base of15speed, higher than all other vanilla tools.minecraft:shears_major_breaking_speed- Blocks are mined with a base of5speed, the same speed as copper tools.minecraft:shears_minor_breaking_speed- Blocks are mined with a base of2speed, the same speed as wooden tools.
Cobweb is the only block hardcoded to use the extreme breaking speed value.
net.minecraft.world.entity.Entity#attemptToShearEquipment->Mob#attemptToShearEquipment,shearItem; nowprotectedfromprivate
Structure Processor Unrolling
StructureProcessors no longer use StructureProcessorType as its registered instance, instead now directly using the MapCodec used as part of the serialization and deserialization process. StructureProcessor is no longer as a class as well, instead being represented by an interface. As such, all new processors should implement the StructureProcessor interface, replacing getType with codec:
public class ExampleProcessor implements StructureProcessor {
// Create the map codec to register
public static final MapCodec<ExampleProcessor> MAP_CODEC = MapCodec.unit(ExampleProcessor::new);
@Nullable
@Override
public StructureTemplate.StructureBlockInfo processBlock(LevelReader level, BlockPos targetPosition, BlockPos referencePos, StructureTemplate.StructureBlockInfo originalBlockInfo, StructureTemplate.StructureBlockInfo processedBlockInfo, StructurePlaceSettings settings) {
// Modify the structure block info
return processedBlockInfo;
}
// Replaces getType
@Override
public MapCodec<ExampleProcessor> codec() {
return MAP_CODEC;
}
}
// Register the map codec to the registry
Registry.register(BuiltInRegistries.STRUCTURE_PROCESSOR, Identifier.fromNamespaceAndPath("examplemod", "example_processor"), ExampleProcessor.MAP_CODEC);
net.minecraft.core.registries.BuiltInRegistries,RegistriesSTRUCTURE_PROCESSORnow holds aStructureProcessormap codec instead of aStructureProcessorType
net.minecraft.world.level.levelgen.structure.templatesystem- All classes now implement
StructureProcessorinstead of extending CODECfields are renamed toMAP_CODECProtectedBlockProcessoris now arecordcannotReplacenow takes in aHolderSetofBlocks instead of the referencedTagKey
StructureProcessoris now aninterfaceinstead of aclassgetType->codec, now returning aMapCodec
StructureProcessorTypeno longer has a generic- Fields for each type are now inlined into
StructureProcessorTypes#bootstrap codec->StructureProcessor#codecregisterinlined intoStructureProcessorTypes#bootstrap
- Fields for each type are now inlined into
StructureProcessorTypes- All vanilla structure processor codecs.
- All classes now implement
Game Test Entity Builders
With the growing number of setup entities require when spawning for a game test, vanilla has split the construction of such entities into builder classes: GameTestEntityBuilder for generic entities, and GameTestMobBuilder for mobs. The builders can be acquired by calling spawnEntity and spawnMob, respectively, taking in the EntityType and some relative position in the test.
// For some game test...
public void exampleTest(GameTestHelper helper) {
// Spawn an entity
ArmorStand entity = helper.spawnEntity(EntityType.ARMOR_STAND, 0, 0, 0)
// Why the entity has spawned.
.spawnReason(EntitySpawnReason.SPAWN_ITEM_USE)
// How the entity should be rotated relative to the test.
.rotation(Rotation.CLOCKWISE_90)
// Whether the entity should be persisted.
.requirePersistence(true)
// Spawn the entity.
.spawn();
// Spawn a mob
Pig mob = helper.spawnMob(EntityType.PIG, 1, 0, 1)
// Spawns the entity with no AI.
.withNoFreeWill()
// Can use the entity builder methods.
.spawnReason(EntitySpawnReason.NATURAL)
.spawn();
}
net.minecraft.gametest.frameworkGameTestEntityBuilder- A builder that creates a mock entity for a test.GameTestHelpermakeMockServerPlayer- Creates a mock server player in the desiredGameType.spawnnow has overloads that take inBlockPosfor the positionspawn(EntityType, int, int, int, EntitySpawnReason)->spawn(EntityType, double, double, double, EntitySpawnReason)spawnEntity- Creates a builder for spawning some entity at the given position.spawnMob- Creates a builder for spawning some mob at the given position.
GameTestMobBuilder- A builder that creates a mock mob for a test.
Xbox Friend List
Vanilla has now integrated the Xbox friend list into the game, allowing users to send requests and view other's status while in-game.
net.minecraft.SharedConstants#DEBUG_CHAT_FRIENDS_ONLY- Sets that chat messages can only be exchanged with friends.net.minecraft.clientMinecraftfriendsEnabled- If the friends feature is enabled.allowFriendRequests- Can the user accept friend invites.allowChatOnlyWithFriend- Is the user only allowed to chat with friends.isFriendOnlyRestricted- If the user cannot send or receive messages from the player is not on the friends list.
OptionskeyFriends- The key that opens the friends list.inGameNotification- Whether the user can receive notifications from their friends in-game.sharePresence- What information is broadcast to friends who are also online.
PresenceSharing- An enum that denotes what information is shared with friends.
net.minecraft.client.gui.componentsCommonButtons#friends- Creates the friend list button.FriendsButton- The button for showing the friends list.PlayerFaceExtractor#extractRenderStatenow has an overload that takes in aResolvableProfilefor the skin texturePlayerFaceWidget- A widget for the player face.
net.minecraft.client.gui.components.toastsFriendToast- A toast for showing activity of a user on the friends list.SystemToast$SystemToastId#FRIEND_SYSTEM_NOTIFICATION- A notification from the friend system.
net.minecraft.client.gui.screensPrivacyConfirmLinkScreen- A screen for confirming the privacy settings for peer-to-peer communication.ShareToLanScreen->MultiplayerOptionsScreen, not one-to-one
net.minecraft.client.gui.screens.friendsAbstractFriendsEntryContainerWidget- An abstract container for representing a friend within the friends list.AbstractFriendsTab- An abstract tab that represents a group of users in the friends list.AddFriendWidget- A widget that handles sending a friend request to some user.FriendEntry- An entry representing a friend.FriendsListConfirmScreen- A confirmation screen that the user has read and understood the Xbox friends privacy information.FriendsOverlayScreen- An overlay showing the user's friends and friend requests.FriendsOverlayTabButton- A button to switch between friend tabs.FriendsTab- A tab containing the user's friends.IncomingEntry- An entry representing an incoming friend request.OutgoingEntry- An entry representing an outgoing friend request.PendingTab- A tab containing the user's pending friend requests.
net.minecraft.client.gui.screens.options.OnlineOptionsScreen#confirmFriendsListEnabled- Sets the current screen to confirm whether the friends list should be enabled, if not enabled.net.minecraft.client.gui.screens.socialPlayerSocialManagernow takes in theFriendsServiceand theRemoteFriendListUpdateHandleraddFriendListUpdateListener,removeFriendListUpdateListener- Handles listeners when the friend list is updated.getFriends- Gets the current friends of the user.isFriend- Whether the given user id is a friend of this user.getIncomingRequests,getOutgoingRequests- The friends requests of the user.getFriendListState- The current state of the friends list.sendFriendRequest,removeFriend,acceptIncomingFriendRequest,declineIncomingFriendRequest,revokeOutgoingFriendRequest,updateFriendSettings- Requests for updating the user's friends list.isFriendListEnabled,setFriendListEnabled- Handles the enabling of the friends list.isAllowFriendRequests,setAllowFriendRequests- Handles whether friend requests are allowed.getPresenceHandler- Returns the presence handler of the user and friends current state.$PlayerData- Common data associated with a given user.
PresenceHandler- A handler for broadcasting the current state of the user in-game to other friends.RemoteFriendListUpdateHandler- A handler for capturing the current state of the user's friends in-game.
net.minecraft.client.multiplayer.ClientPacketListener#onlineMode- Whether the user is currently in online mode.net.minecraft.client.server.IntegratedServersetWorldGameType- Sets the default game mode and applies it to the players.setGameTypeForOtherPlayers,getGameTypeForOtherPlayers- Handles the game mode for the players that do not host the server.setWorldAllowCommands- Sets whether players can run commands.commandsAllowedForOtherPlayers,setCommandsAllowedForOtherPlayers- Handles whether players that do not host the server are allowed to run commands.getMultiplayerScope- Gets the current scope of the server and who it's available for.publishServer- Publishes the singleplayer server for the given scope at the specified port.
net.minecraft.network.ConnectionisEncryptedis removedfromChannel- Creates a new connection from a channel.setIntendedProfileId,getIntendedProfileId- Handles the profile UUID.
net.minecraft.network.protocol.game.ClientboundLoginPacket#onlineMode- If the user is trying to login to a peer-to-peer connection.net.minecraft.server.MinecraftServerpublishServernow takes in the$MultiplayerScopeunpublishServer- Unpublishes the server from peer-to-peer connections.$MultiplayerScope- The current scope of the server and who it's available for.
net.minecraft.server.commands.UnpublishCommand- Unpublishes a server, stopping discovery and others from connecting.net.minecraft.server.network.ServerConnectionListeneracceptChannel- Accepts the channel to broadcast packets as the server.stopTcpServerListener- Closes the channel, if this server is not broadcasting locally.
net.minecraft.util.CommonLinks#PRIVACY_AND_ONLINE_SETTINGS- A link to the privacy and safety settings.
Data Component Additions
sulfur_cube_content- The absorbed block stored in the sulfur cube.
Entity Attribute Additions
air_drag_modifier- The drag applied to an entity when traveling through the air. Must be between[0, 2048]and defaults to1.bounciness- How much the entity should bounce after colliding with another bounding box. Must be between[0, 1]and defaults to0.friction_modifier- A scalar that used to modify the block friction when traveling in air. Must be between[0, 2048]and defaults to1.knockback_resistancenow allows values between[-2, 1]below_name_distance- The maximum distance that the additional information below an entity's name tag can be seen. Must be between[0, 512]and defaults to10.name_tag_distance- The maximum distance that an entity's name tag can be seen. Must be between[0, 512]and defaults to64.
Tag Changes
minecraft:blockglazed_terracottaconcreteshears_extreme_breaking_speedshears_major_breaking_speedshears_minor_breaking_speedsuppresses_bouncespeleothemssulfur_spike_replaceable_blocksfox_immune_topolar_bear_immune_tosnow_golem_immune_tostray_immune_towither_immune_towither_skeleton_immune_todefault_immune_tocauses_periodic_geyser_eruptionscauses_continuous_geyser_eruptions
minecraft:damage_typesulfur_cube_with_block_immune_to
minecraft:entity_typenot_affected_by_geysers
minecraft:itemglazed_terracottaconcreteconcrete_powderssulfur_cube_archetype/bouncysulfur_cube_archetype/regularsulfur_cube_archetype/slow_flatsulfur_cube_archetype/fast_flatsulfur_cube_archetype/lightsulfur_cube_archetype/fast_slidingsulfur_cube_archetype/slow_slidingsulfur_cube_archetype/stickysulfur_cube_archetype/high_resistancesulfur_cube_archetype/explosivesulfur_cube_archetype/slow_bouncysulfur_cube_archetype/hotsulfur_cube_swallowablesulfur_cube_food
List of Additions
net.minecraft.ExitCodes- A list of exit codes Minecraft can throw when crashing.net.minecraft.clientMinecraftgetProfileResult- Gets the loaded profile of the user, ornull.getMetricsRecorder- Gets the recorder for the game metrics.showDebugChat- Displays a client system message.handleGlobalKeyPress- Handles a global keymapping.
OptionInstanceNO_ACTION- A listener that ignores the changed value.$ValueUpdateListener- A listener that handles what to do when an option value is changed.
net.minecraft.client.data.models.BlockModelGeneratorscreateBed- Creates a bed with variants for the head and foot.createSign- Creates a sign with variants depending on rotation.$BlockFamilyProvidercustomHangingSign- Creates the hanging sign model using a custom wall variant.hangingSign- Creates the hanging sign model.pillar- Creates a rotated pillar with a horizontal variant model.
net.minecraft.client.data.models.modelModelTemplatesBED_HEAD,BED_FOOT- Model templates for the bed parts.SIGN_ROT_*- Model templates for sign rotations.WALL_SIGN,WALL_HANGING_SIGN- Model templates for wall signs.HANGING_SIGN_ROT_*- Model templates for hanging sign rotations.ATTACHED_HANGING_SIGN_ROT_*- Model templates for attached hanging sign rotations.
TextureMapping#bed- Creates a texture map for a bed-like model.
net.minecraft.client.multiplayerClientChunkCacheaddedLoadedChunks,removedLoadedChunks- Gets the loaded chunk changes.flipUpdateTrackingSets- Updates the section arrays to their next index, clearing them for use.
MultiPlayerGameMode#spectatorNoAction- Sends a message saying that the client spectator is not spectating an entity.
net.minecraft.client.particleGeyserBaseParticle- The base particle for a geyser.GeyserEruptionParticle- The particle for when a geyser is erupting.GeyserPlumeParticle- The particle for when a plume emanates from a geyser.
net.minecraft.client.telemetryTelemetryEventType#selfTest- Returns whether there are missing translations for the telementry event and properties.TelemetryProperty#SERVER_SESSION_ID- A property containing the server session UUID.
net.minecraft.client.telemetry.events.WorldLoadEvent#wasSent- Whether the event was sent.net.minecraft.commands.arguments.selector.optionsInvertableSetOptionState- A parsed option state that represents a value that can include or exclude.SetOnceOptionState- A parsed option state that can only be set once.
net.minecraft.core.BlockPos#neighborColumn- An iterable of positions that starts at some given XYZ, goes until some other Y, and then loop through the same column space in the four horizontally orthogonal directions.net.minecraft.core.dispenserFlintAndSteelDispenseItemBehavior- The dispense behavior of flint and steal.SulfurCubeBlockDispenseItemBehavior- The dispense behavior allowing sulfur cubes to equip items.
net.minecraft.core.particlesGeyserBaseParticleOptions- The base particle options for a geyser.GeyserParticleOptions- The particle options for a geyser.
net.minecraft.dataBlockFamiliesSULFUR,POLISHED_SULFUR,SULFUR_BRICKS- Sulfur block variants.CINNABAR,POLISHED_CINNABAR,CINNABAR_BRICKS- Cinnabar block variants.
BlockFamilyshouldGenerateSmeltingRecipe- Whether smelting recipes should be generated for this family.$BuildercustomHangingSign- Sets the hanging sign block using a custom wall variant.hangingSign- Sets the hanging sign block.log- Sets the log block.strippedLog- Sets the stripped log block.pillar- Sets the pillar block.dontGenerateSmeltingRecipe- Prevents any smelting recipes from generating for this family.
$VariantCUSTOM_HANGING_SIGN- A custom hanging sign variant.HANGING_SIGN- A hanging sign variant.LOG- A log variant.STRIPPED_LOG- A stripped log variant.CUSTOM_WALL_HANGING_SIGN- A custom hanging wall sign variant.WALL_HANGING_SIGN- A hanging wall sign variant.PILLAR- A pillar variant.getBaseVariantForCrafting- Gets the base variant used for crafting this variant.getPrefixedRecipeGroup- Returns the recipe group with the given prefix.
net.minecraft.data.recipes.RecipeProviderpillarBuilder- Creates the basic recipe builder for a pillar variant.generateSmeltingRecipe- Generates the smelting recipe for the cracked and cobbled variants.getCraftingCriterionName- Returns the crafting criterion name the given family variant.
net.minecraft.data.worldgenBiomeDefaultFeatures#addSulfurCavesFeatures- Features for the sulfur caves biome.TerrainProvider#peaksAndValleys- Calculates the peaks and valleys scalar given the weirdness.
net.minecraft.data.worldgen.biome.OverworldBiomes#sulfurCaves- The sulfur caves biome.net.minecraft.gametest.frameworkGameTestHelper#assertValueInBetween- Assert theComparablevalue is between some bounds.TestEnvironmentDefinition$Difficulty- A test environment that sets the world difficulty.
net.minecraft.locale.Language#DEFAULT_INSTANCE- The default language instance.net.minecraft.nbt.NbtOps#getBooleanValue- Gets thebooleanresult from the givenTag.net.minecraft.server.MinecraftServerSERVER_THREAD_NAME- The name of the server thread.getCommandSpamThresholdSeconds- The number of commands the user must send to be flagged as spam, decreasing once per second.getChatSpamThresholdSeconds- The number of messages the user must send to be flagged as spam, decreasing once per second.
net.minecraft.server.dedicated.DedicatedServerPropertiescommandSpamThresholdSeconds- The number of commands the user must send to be flagged as spam, decreasing once per second.chatSpamThresholdSeconds- The number of messages the user must send to be flagged as spam, decreasing once per second.
net.minecraft.server.jsonrpcJsonRpc- A utility for constructing theManagementServer.ManagementServer#scheduleHeartbeat- Sets the number of seconds between each heartbeat check.
net.minecraft.server.levelChunkMap#hasEntityWithId- Whether the chunk contains an entity with the given network identifier.ServerChunkCache#hasEntityWithId- Whether the chunk contains an entity with the given network identifier.WorldGenRegion#isWithinWriteZone- If the given position is within the write radius of the region.
net.minecraft.server.network.ServerConnectionListener#getSessionId- Returns the session UUID of the server.net.minecraft.server.notifications.NotificationManager#setServer,server- Handles theDedicatedServerconsuming theNotificationManagernet.minecraft.server.players.PlayerList#getPlayersByUUID- Gets a map of UUID to their players.net.minecraft.utilARGB#setVector4fFromARGB32- Directly sets the vector data with the color.CubicSplineminValue,maxValue- The bounds of the spline.sample,$Multipoint#sample- Samples the spline at the given coordinates.asSampler- Returns the sampler for the spine.$Multipoint#codec- Gets the codec for the spline.
ExtraCodecs#optionalAlwaysPresentFieldOf- Constructs a optionalMapCodecthat, while should be present, can default to the specified value.TimeSource#constant- A source that always returns the givenlongvalue.UtilCONTROL_CHARACTER_ESCAPER- An escaper for control characters.join- Flattens lists of elements into a single list.dumpThreadInfo- Dumps the info for all live platform threads.timeSource,setTimeSource- Handles the source keeping track of the time.shutdownTimeSource- Sets the source to return the time of shutdown.
net.minecraft.util.profiling.jfr.stats.ThreadAllocationStat#LOGGER- The stat logger.net.minecraft.util.profiling.metrics.MetricSampler#samplingPhase,$MetricSamplerBuilder#withSamplingPhase,$SamplingPhase- The phase when the metric sampling should occur.net.minecraft.util.profiling.metrics.profiling.MetricsRecorder#sampleDuringExtract- Samples the metrics, marking the phase as during render state extraction.net.minecraft.world.attribute.LerpFunction#CONSTANT- A function that returns the original value, only returning the next value once the alpha is1.net.minecraft.world.entityAgeableMob#canBeABaby- Whether the mob can have a baby variant.EntityDEFAULT_NAME_TAG_DISTANCE- The default maximum distance an entity name tag can be seen from.DEFAULT_BELOW_NAME_DISTANCE- The default maximum distance that additional name tag information on an entity can be seen from.MAX_NAME_TAG_DISTANCE- The true maximum distance a name tag can be seen from.INVALID_ENTITY_ID- A network identifier that is invalid for an entity.getEntityBounciness- How bouncy the entity is after a collision.getEffectiveGravity- Gets the gravity currently being applied to the entity.omnidirectionalAirMover- Whether the entity can omnidirectionally move in the air.getAirDrag- The drag applied to an entity when traveling through the air.syncPosition- When true, tells the server entity to sync this entity's position.isInvulnerableToPiercingWeapon- If the entity is invulnerable to damage from a piercing weapon.canBePickedFromInside- Whether the entity can be picked when obstructing the player's eyes.
EntityEvent#TNT_PRIME- An event id for when a TNT is primed.EntitySpawnRequest- An object containing the spawn reason and whether to ignore any requirements for spawning.EntityType#canSpawn- Checks whether the entity can spawn in the given level.LivingEntityBASE_HORIZONTAL_AIR_DRAG- The base drag when within the air.BASE_VERTICAL_AIR_DRAG- The base air drag when a non-flyable entity is moving vertically.HURT_DURATION_TICKS- The number of ticks a living entity has invulnerability for after being hurt.WATER_DRAG- The drag when swimming in water.SPRINTING_WATER_DRAG- The drag when sprint swimming in water.LAVA_DRAG- The drag when swimming in lava.LAVA_SHALLOW_VERTICAL_DRAG- The drag when swimming vertically near the top of lava.DOLPHINS_GRACE_WATER_DRAG- The drag when swimming with dolphin's grace in water.FLYING_AIR_DRAG- The drag when flying through the air.FLYING_VERTICAL_AIR_DRAG- The drag when flying through the air vertically.FLYING_LAVA_DRAG- The drag when flying through lava.FLYING_WATER_DRAG- The drag when flying through water.ELYTRA_HORIZONTAL_AIR_DRAG- The drag when flying horizontally with an elytra.ELYTRA_VERTICAL_AIR_DRAG- The drag when flying vertically with an elytra.BASE_SWIM_SPEED- The base swim speed.handleKillingBlow- Handles when the killing blow has been made to this entity.dealDefaultKnockback- Applies the default knockback to this entity.createDamageSource- Creates the default mob attack damage source from this entity.isInShallowFluid- Whether the fluid covering the entity is less than the jump threshold.
Mob#TAG_PERSISTENCE_REQUIRED- A tag that marks whether the entity should be persisted.MobCategory#getDebugAbbreviation- An abbreviation of the category when looking through one of the debug menus.PostSpawnProcessor- A consumer that modifies the entity data after spawning into the level.
net.minecraft.world.entity.ai.navigation.PathNavigation#getMaxVerticalDistanceToWaypoint- Gets the maximum vertical distance from the current node the entity pathfinding through.net.minecraft.world.entity.animal.turtle.Turtle#getHomePos- Gets the home position of the turtle.net.minecraft.world.entity.item.PrimedTntNO_FUSE- The value if a primed explosion object has no fuse.getRandomShortFuse- Returns between an eighth and three eighths of the original fuse time.
net.minecraft.world.entity.monster.cubemobAbstractCubeMob- A cube-like mob.SulfurCube- A sulfur cube entity.
net.minecraft.world.entity.monster.zombieDrowned#isSearchingForLand- If the drowned is searching for land.ZombieVillager#getVillagerDataFinalized,setVillagerDataFinalized- Handles whether the villager data has been finalized, typically after conversion.
net.minecraft.world.entity.monster.npcVillagerData#DEFAULT_TYPE- The key of the default villager type.VillagerDataHoldergetVillagerDataFinalized,setVillagerDataFinalized- Handles whether the villager data has been finalized, typically after conversion.finalizeVillagerType- Finalizes the villager type after spawning into the world.
net.minecraft.world.inventory.Slot#safeClone- Safely clones the item in the slot, typically with the max stack size for the associated container input.net.minecraft.world.itemBucketItem#getFluidContext- Gets the fluid clip context based on its contents.ItemStackTemplate#fromStack- Creates the template directly from the stack.DyeColor#getTerracottaColor- TheMapColorof a terracotta block dyed this color.
net.minecraft.world.levelBaseSpawner#SET_DISPLAY_ENTITY_ID- Sets the entity id to-1.ChunkPos#fromSectionNode- Packs a packed section position into a chunk position.LevelACROSS_THE_WHOLE_WORLD- The maximum diameter of a level.getNextEntityId- Returns the next free entity network identifier.
LevelSettings#withAllowCommands- Whether to allow commands in the level.SignalGetter#getBestOwnOrNeighbourSignal- Returns the best redstone signal from the current block position or its surrounding neighbors.
net.minecraft.world.level.blockCopperChestBlock#getHingeSound- Gets the hinge sound to play based on the current state of the chest.LevelEvent#SOUND_SULFUR_SPIKE_LAND- The level event that plays a sound when an entity lands on a sulfur spike.PotentSulfurBlock- A sulfur block that can apply noxious gas effects.SpeleothemBlock- An abstract representation of a speleothem.SulfurSpikeBlock- A sulfur spike speleothem.WeatheringCopper$WeatherState#forEach- Loops through the available weather states.
net.minecraft.world.level.block.entityBeaconBlockEntity#validateEffects- Validates that the primary and secondary mob effects can be set for the given beacon level.BlockEntityTicker#andThen- Chains two tickers together.DecoratedPotPatterns#itemToPatternMappings- Operates on the keys for an item and its associated pot pattern.PotentSulfurBlockEntity- A sulfur block entity that can apply noxious gas effects.
net.minecraft.world.level.block.state.BlockBehaviourbounceRestitution,$Properties#bounceRestitution- How much the entity should bounce after colliding with this block.ownSignal,$BlockStateBase#getOwnSignal- The redstone signal this block is outputting.
net.minecraft.world.level.block.state.properties.BlockStateProperties#POTENT_SULFUR_STATE,PotentSulfurState- The state of the potent sulfur.net.minecraft.world.level.chunkChunkAccess#collectBiomesInPalette- Collects all the biomes in the chunk sections.PalettedContainerRO#forEachInPalette- Loop through all elements in the palette.
net.minecraft.world.level.levelgenDensityFunction#mapChildren- Maps the children density functions used by this function.DensityFunctions#intervalSelect,$IntervalSelect- Computes the density using the given function if its corresponding threshold is above the input value.SurfaceRules$ContextgetBiome- Gets the biome at the context position.getNoiseSampler- Returns the sampler to use for the noise given whether it should be three-dimensional.
net.minecraft.world.level.levelgen.blockpredicates.BlockPredicate#matchesBiomes,$MatchingBiomesPredicate- Checks whether the give block position is in the given set of biomes.net.minecraft.world.level.levelgen.featureSequenceFeature- A feature made up of other placed features, applying them in the order they are given until either one of them fails or all succeeds.TemplateFeature- A feature that attempts to place a structure template in the world.WeightedRandomSelectorFeature- A feature that selects a randomPlacedFeaturefrom a weighted list to generate.
net.minecraft.world.level.levelgen.feature.configurationsTemplateFeatureConfiguration- A configuration for theTemplateFeature.WeightedRandomFeatureConfiguration- A configuration for theWeightedRandomSelectorFeature.
net.minecraft.world.level.levelgen.presets.WorldPresets$BootstrapmakeNether- Sets theChunkGeneratorfor the nether dimension.makeEnd- Sets theChunkGeneratorfor the end dimension.
net.minecraft.world.level.levelgen.structure.templatesystemRuleTest#testAgainstWorldState- Tests theBlockStateat the givenBlockPosin the world.StructureProcessor#evaluatesEntirePieceState- Whether the structure can process outside of the current chunk.
net.minecraft.world.level.storageServerLevelData#setAllowCommands- Whether commands can be sent in the level.WorldData#setAllowCommands- Whether commands can be sent in the world.
net.minecraft.world.level.storage.loot.LootPool#addAll- Adds all pool entries.net.minecraft.world.phys.Vec2#rotate- Rotates the vector the given angle in radians.net.minecraft.world.phys.shapesCollisionContext#positionContext- Creates a context with a given Y position.PositionCollisionContext- A collision context for a given Y position.
net.minecraft.world.scoresPlayerTeam$OptionFlags- An annotation that marks whether a given byte defines the usage flags of the team options.TeamColor- The color representing a player team.
List of Changes
com.mojang.blaze3d.platform.ClientShutdownWatchdog#startShutdownWatchdognow takes in theStringcallsite andGameConfiginstead of theFilegame directorycom.mojang.math.MatrixUtileigenvalueJacobinow takes in the resultQuaternionfinstead of returning itsvdDecomposenow takes in the input, translation, and USVQuanternionfs andVector3finstead of returning the USV
net.minecraftCrashReportCategory$Entryis now a record andpublicfromprivateSystemReport#setDetailnow takes in aCrashReportDetailinstead of aStringsupplier
net.minecraft.advancements.triggers.PickedUpItemTrigger#thrownItemPickedUpByEntitynow takes in an optionalContextAwarePredicatefor the player rather than the raw predicatenet.minecraft.clientMinecraftsaveReportnow has an overload that takes in the crash report exit codeintcrashnow takes in the crash report exit codeintsaveReportAndShutdownSoundManageris nowpublicfromprivate, taking in the crash report exit codeintdestroy->exitWorldAndClose, not one-to-oneisMultiplayerServeris nowpublicfromprivategetRunningThreadhas been expanded topublicfromprotected$GameLoadCookie->GameLoadCookie, nowpublicfromprivate
KeyMapping#matchesnow has an overload that takes in anInputConstants$KeyOptionInstanceconstructor,#createBoolean,createButtonnow take in a$ValueUpdateListenerinstead of a consumer$CycleableValueSetis nowpublicfrom package-private$IntRangeBaseis nowpublicfrom package-private$SliderableOrCyclableValueSetis nowpublicfrom package-private$SliderableValueSetis nowpublicfrom package-private$ValueSetis nowpublicfrom package-privatecreateButtonnow takes in a$ValueUpdateListenerinstead of a consumer
Screenshot#grabnow has an overload that takes in theMinecraftinstance and abooleanof whether a debug panorama is requested
net.minecraft.client.data.models.BlockModelGeneratorscreateColoredBlockWithRandomRotations,createColoredBlockWithStateRotationsnow take in a list ofBlocks instead of a varargscreatePointedDripstoneVariant->createSpeleothemVariant, now taking in aBlockcreateBannerno longer takes in theBlocks for the standalone and wall variantcreatePointedDripstone->createSpeleothem, now taking in aBlockcreateHangingSignnow takes in a block and theMultiVariants for rotation and attachment instead of the blocks for the hanging and wall hanging sign
net.minecraft.client.data.models.model.ItemModelUtils#plainModelnow has an overload that takes in aTransformationnet.minecraft.client.gui.screens.inventory.SignEditScreen#MAGIC_SCALE_NUMBERreplaced byMAGIC_BACKGROUND_SCALE, not one-to-onenet.minecraft.client.inputInputWithModifiers$Modifierscan now only targetElementType#TYPE_USEKeyEvent$Actioncan now only targetElementType#TYPE_USEMouseButtonInfo$Actioncan now only targetElementType#TYPE_USE$MouseButtoncan now only targetElementType#TYPE_USE
net.minecraft.client.multiplayer.ClientChunkCache#getLoadedEmptySectionssplit intoaddedEmptySections,removedEmptySectionsnet.minecraft.client.multiplayer.resolver.ServerAddress#parsePortis nowpublicfrom package-privatenet.minecraft.client.telemetryClientTelemetryManager#createWorldSessionManagernow takes in the session UUIDWorldSessionTelemetryManagernow takes in the session UUID
net.minecraft.client.telemetry.events.WorldLoadEvent#sendnow takes in abooleanfor whether to attempt to send the event even if the server brand is nullnet.minecraft.commands.arguments.ColorArgument->TeamColorArgumentnet.minecraft.commands.arguments.selector.EntitySelectorParserhasNameEquals,setHasNameEquals,hasNameNotEquals,setHasNameNotEquals->nameOption, not one-to-oneisLimited,setLimited->limitedOption, not one-to-oneisSorted,setSorted->sortedOption, not one-to-onehasGamemodeEquals,setHasGamemodeEquals,hasGamemodeNotEquals,setHasGamemodeNotEquals, ->gamemodeOption, not one-to-onehasTeamEquals,setHasTeamEquals,hasTeamNotEquals,setHasTeamNotEquals->teamOption, not one-to-onesetTypeLimitedInversely,isTypeLimited,isTypeLimitedInversely->typeOption, not one-to-onehasScores,setHasScores->scoresOption, not one-to-onehasAdvancements,setHasAdvancements->advancementsOption, not one-to-one
net.minecraft.core.Holderis nowsealedto$Directand$Reference$Referenceis nownon-sealed
net.minecraft.core.cauldron.CauldronInteractionsaddDefaultInteractionsis nowpublicfrom package-privatefillBucket,emptyBucketare nowpublicfrom package-private
net.minecraft.data.HashCache$ProviderCacheBuilder(String)is nowpublicfrom package-privatenet.minecraft.data.recipes.RecipeProviderhangingSign->hangingSignBuilder, now taking in anIngredientinstead of anItemLikefor the ingredient, and returning theRecipeBuilder
net.minecraft.data.worldgenSurfaceRuleDatamethods now take in theHolderGetter<Biome>TerrainProvidermethods no longer bind theBoundedFloatFunctiongenericbuildErosionOffsetSplinenow takes in aFloat2FloatFunctioninstead of aBoundedFloatFunction
net.minecraft.data.worldgen.features.TreeFeaturesmethods that return aTreeConfiguration$TreeConfigurationBuildernow take in aBlockStateProviderfor the block below the trunknet.minecraft.gametest.frameworkExahustedAttemptsExceptionis nowpublicfrom package-privateGameTestEventclass and static methods are nowpublicfrom package-privateGameTestInfogetTickis nowpublicfrom package-privatecreateSequenceis nowpublicfrom package-private
GameTestSequenceconstructor is nowpublicfrom package-private$Condition#triggeris nowpublicfrom package-private
ReportGameListenerclass is nowpublicfrom package-privateTestEnvironmentDefinition$Type#applyis nowpublicfrom package-private
net.minecraft.nbt.CompoundTag#shallowCopyis now package-private fromprotectednet.minecraft.network.codec.ByteBufCodecs#collectionnow has an overload that takes in the maximum size of the collectionnet.minecraft.network.protocol.gameClientboundSetPlayerTeamPacket$Parametersis now a recordGamePacketTypes#SERVERBOUND_SPECTATE_ENTITY->SERVERBOUND_SPECTATOR_ACTIONServerboundSpectateEntityPacket->ServerboundSpectatorActionPacket, not one-to-oneServerGamePacketListener#handleSpectateEntity->handleSpectatorAction
net.minecraft.network.protocol.login.ClientboundLoginFinishedPacketnow takes in the session UUIDnet.minecraft.serverBootstrap#getMissingTranslationsnow takes in aLanguageMinecraftServernow takes in theNotificationManager
net.minecraft.server.commands.SpreadPlayersCommand$Position#dist,normalize,getLengthare nowpublicfrom package-privatenet.minecraft.server.dedicated.DedicatedServernow takes in the json rpcManagementServerandNotificationManagersetStatusHeartbeatIntervalnow returns whether the heartbeat was scheduled successfully
net.minecraft.server.jsonrpcJsonRPCUtils#createRequestnow has an overload that takes in aStringfor the method instead of anIdentifierIncomingRpcMethod$Attributes,$IncomingRpcMethodBuilder#allowPreServerInitnow handles whether the method can be dispatched prior to server initializationManagementServernow takes in anEventGroupLoopinstead of aNioEventLoopGroupOutgoingRpcMethod$Attributes,$OutgoingRpcMethodBuilder#allowPreServerInitnow handles whether the method can be dispatched prior to server initialization
net.minecraft.server.jsonrpc.internalapi.MinecraftApi#of,Minecraft*Implclasses now take in theNotificationManagerinstead of theDedicatedServernet.minecraft.server.levelBlockDestructionProgress#updateTick,getUpdatedRenderTicknow deal withlongs instead ofintsChunkMapcollectSpawningChunks,forEachBlockTickingChunkare nowpublicfrom package-privateanyPlayerCloseEnoughForSpawning,anyPlayerCloseEnoughToare nowpublicfrom package-private
ChunkTrackingView#squareIntersectsis now package-private fromprotectedLoadingChunkTrackerclass is nowpublicfrom package-privatePlayerSpawnFinder#getOverworldRespawnPos->getLevelRespawnPosServerEntityGetter#getNearestEntitynow has an overload that takes in the list ofEntitys to loop through along with the center position as threedoublesTicketType$Usagecan now only targetElementType#TYPE_USE
net.minecraft.server.packs.resources.FallbackResourceManager$EntryStackconstructor is nowpublicfrom package-privatenet.minecraft.server.players.StoredUserEntry#hasExpiredis nowpublicfrom package-privatenet.minecraft.server.rcon.thread.RconClientis nowpublicfrom package-privatenet.minecraft.tags.TagNetworkSerialization$NetworkPayloadis nowpublicfrom package-privatenet.minecraft.utilAbstractListBuilderclass is nowpublicfrom package-privateBoundedFloatFunction#createUnlimited->constant, not one-to-oneCubicSplineis nowsealedto$Multipointand$Constant- The generic
Cis removed, while the genericIis no longer bounded to aBoundedFloatFunction mapAll->mapCoordinates, not one-to-onebuilder(I, BoundedFloatFunction<Float>),$Buildernow takes in aFloat2FloatFunctioninstead of aBoundedFloatFunction$Builderconstructors are nowprivatefromprotected$CoordinateVisitoris removed- Use a standard
UnaryOperatorinstead
- Use a standard
- The generic
FileUtil#isEmptyPathis nowpublicfrom package-privateMth*_AXISare nowVector3fcs instead ofVector3fsrotationAroundAxisnow takes in aVector3fcinstead of aVector3fisPowerOfTwonow has an overload that takes in alonginputroundTowardnow has an overload that takes inlongspositiveCeilDivnow has an overload that takes inlongs
NativeModuleListertryGetVersion->tryGetModuleVersion, nowpublicfromprivate$NativeModuleInfo,$NativeModuleVersionare nowrecords
Util#timeSourceis nowprivatefrompublic
net.minecraft.util.filefix.access.ChunkNbt#updateChunknow returns aCompletableFuturenet.minecraft.util.filefix.virtualfilesystem.DirectoryNodeconstructor is nowpublicfrom package-privatenet.minecraft.util.profiling.TracyZoneFiller$PlotAndValue#set,addare nowpublicfrom package-privatenet.minecraft.util.profiling.jfr.event.PacketEventis nowpublicfrom package-privatenet.minecraft.util.profiling.jfr.statsGcHeapStat$Timingis nowpublicfrom package-privateIoSummary$CountAndSize#addis nowpublicfrom package-private
net.minecraft.util.profiling.metrics.MetricSamplernow takes in a$SamplingPhasecreate(String, MetricCategory, T, ToDoubleFunction<T>)->createExtractSampler(String, MetricCategory, DoubleSupplier)getSampleris nowpublicfrom package-private
net.minecraft.util.profiling.metrics.profiling.ServerMetricsSamplersProvider$CpuStatsis nowpublicfrom package-privatenet.minecraft.util.random.WeightedList#ofnow has an overload that takes in a vararg of elementsnet.minecraft.util.valueproviders.FloatProviders#codecnow has an overload that only specifies a minimumfloatvaluenet.minecraft.worldInstantenousMobEffect->InstantaneousMobEffectInteractionResult$ItemContext#NONE,DEFAULTare nowpublicfrom package-privateMobEffectapplyInstantenousEffect->applyInstantaneousEffectisInstantenous->isInstantaneous
net.minecraft.world.entityAgeableMob#isBaby,setBabyare nowfinal- Override
canBeABabyinstead
- Override
ConversionType#convertis nowpublicfrom package-privateEntitycollideBoundingBoxnow has an overload that takes in aCollisionContextinstead of anEntity$Flagscan now only targetElementType#TYPE_USE
EntityTypeimmuneTo,$Builder#immuneTonow take in aTagKeyinstead of aImmutableSetfor the blocks the entity is immune to damage fromcreateDefaultStackConfignow returns aPostSpawnProcessorinstead of aConsumerappendDefaultStackConfignow deals withPostSpawnProcessors instead ofConsumersappendComponentsConfignow deals withPostSpawnProcessors instead ofConsumersappendCustomEntityStackConfignow deals withPostSpawnProcessors instead ofConsumersspawn,createnow take in aPostSpawnProcessorinstead of aConsumercreatenow has an overload that takes in anEntitySpawnRequestinstead of anEntitySpawnReasoncreate(ValueInput, Level, EntitySpawnReason)->create(ValueInput, Level, EntitySpawnRequest)loadEntityRecursivecan now take in anEntitySpawnRequestinstead of anEntitySpawnReasonloadPassengersRecursivecan now take in anEntitySpawnRequestinstead of anEntitySpawnReason
Leashable$WrenchZEROis nowpublicfrom package-privatetorqueFromForce,accumulateare nowpublicfrom package-private
LivingEntityWATER_FLOAT_IMPULSE->SWIMMING_VERTICAL_SPEED, nowprotectedfromprivatetravelInFluidis nowprotectedfromprivatecollectEquipmentChangesis nowprotectedfromprivate, taking in the map of slots to last equipment stacksblockUsingItem,blockedByItemnow take in theDamageSourceandfloatdamageknockbacknow takes in theDamageSourceandfloatdamage, and optionally whether the knockback was from some cause rather than a default applicationcauseExtraKnockbacknow takes in theDamageSourceandfloatdamage, and optionally whether the knockback was from some cause rather than a default applicationgetEquipmentSlotForItem,isEquippableInSlotare no longerfinal
MobCategorynow takes in aStringfor the debug abbreviation
net.minecraft.world.entity.ai.behavior.AcquirePoi$JitteredLinearRetryconstructor is nowpublicfrom package-privatenet.minecraft.world.entity.ai.controlFlyingMoveControlnow takes in a generic for theMobMoveControlnow takes in a generic for theMobSmoothSwimmingMoveControlnow takes in a generic for theMob
net.minecraft.world.entity.ai.sensing.Sensor#rememberPositivesis nowpublicfrom package-privatenet.minecraft.world.entity.ai.village.poiPoiManager$DistanceTrackerconstructor is now package-private fromprotectedPoiSection#isValidis nowpublicfrom package-private
net.minecraft.world.entity.animalBucketable->.entity.BucketableFlyingAnimalreplaced byEntity#omnidirectionalAirMoverisFlyingstill exists on classes that used to implement the interface
net.minecraft.world.entity.animal.bee.Beeno longer implementsFlyingAnimalgetGoalSelector->Mob#getGoalSelector$BeeAttackGoalconstructor is nowpublicfrom package-private$BeeBecomeAngryTargetGoalconstructor is nowpublicfrom package-private$BeeGoToHiveGoalconstructor is nowpublicfrom package-private$BeeGoToKnownFlowerGoalconstructor is nowpublicfrom package-private$BeeHurtByOtherGoalconstructor is nowpublicfrom package-private$BeeLookControlconstructor is nowpublicfrom package-private$BeePollinateGoalconstructor is nowpublicfrom package-private$BeeWanderGoalconstructor is nowpublicfrom package-private
net.minecraft.world.entity.animal.dolphin.Dolphin$DolphinSwimToTreasureGoalconstructor is nowpublicfrom package-private$DolphinSwimWithPlayerGoalconstructor is nowpublicfrom package-private$PlayWithItemsGoalconstructor is nowpublicfrom package-private
net.minecraft.world.entity.animal.equine.AbstractHorse#createOffspringAttributeis nowpublicfrom package-privatenet.minecraft.world.entity.animal.fish.AbstractFish$FishMoveControlconstructor is nowpublicfrom package-privatenet.minecraft.world.entity.animal.fox.Fox#canMoveis nowpublicfromprivatenet.minecraft.world.entity.animal.frog.Frog$FrogLookControlconstructor is nowpublicfrom package-private$FrogPathNavigationconstructor is nowpublicfrom package-private
net.minecraft.world.entity.animal.goat.Goat#LONG_JUMPING_DIMENSIONSreplaced byLONG_JUMPING_DIMENSION_SCALE_FACTOR,BABY_DIMENSIONS(private), not one-to-onenet.minecraft.world.entity.animal.happyghast.HappyGhast$HappyGhastLookControl#wrapDegrees90->Mth#wrapDegrees90net.minecraft.world.entity.animal.parrot.Parrotno longer implementsFlyingAnimalnet.minecraft.world.entity.animal.sniffer.SnifferAi#updateActivityis nowpublicfrom package-privatenet.minecraft.world.entity.animal.turtle.Turtle$TurtleBreedGoalconstructor is nowpublicfrom package-private$TurtleGoHomeGoalconstructor is nowpublicfrom package-private$TurtleLayEggGoalconstructor is nowpublicfrom package-private$TurtleMoveControlconstructor is nowpublicfrom package-private$TurtlePanicGoalconstructor is nowpublicfrom package-private$TurtlePathNavigationconstructor is nowpublicfrom package-private$TurtleTravelGoalconstructor is nowpublicfrom package-private
net.minecraft.world.entity.item.PrimedTntDEFAULT_FUSE_TIMEis nowpublicfromprivateUSED_PORTAL_DAMAGE_CALCULATORis nowpublicfromprivate
net.minecraft.world.entity.monsterGuardian#setMovingis nowpublicfromprivateMagmaCube->.monster.cubemob.MagmaCube- The class now extends
AbstractCubeMoband implementsEnemy
- The class now extends
Slime->.monster.cubemob.Slime- The class now extends
AbstractCubeMoband implementsEnemy
- The class now extends
Strider$StriderPathNavigationconstructor is nowpublicfrom package-privateVexnow implementsOwnableEntity
net.minecraft.world.entity.monster.breeze.BreezeAi#updateActivityis nowpublicfrom package-privatenet.minecraft.world.entity.monster.creaking.Creaking$CreakingPathNavigationconstructor is nowpublicfrom package-privatenet.minecraft.world.entity.monster.skeleton.AbstractSkeleton#getStepSoundis nowprotectedfrom package-privatenet.minecraft.world.entity.monster.zombieDrowned#wantsToSwimis nowpublicfromprivateZombie$ZombieAttackTurtleEggGoalis nowpublicfrom package-private
net.minecraft.world.entity.npc.wanderingtrader.WanderingTrader$WanderToPositionGoalconstructor is nowpublicfrom package-privatenet.minecraft.world.entity.projectile.hurtingprojectile.windcharge.AbstractWindCharge(EntityType, double, double, double, Vec3, Level)is nowprotectedfrom package-privatenet.minecraft.world.entity.raid.Radier$RaiderCelebtrationconstructor is nowpublicfrom package-privatenet.minecraft.world.entity.vehicle.minecart.NewMinecartBehavior$TrackIterationfields are nowpublicfrom package-privatenet.minecraft.world.inventoryAbstractFuranceMenuno longer takes in theRecipeTypeBeaconMenu#updateEffectsnow returns abooleanof whether the effects were successfully set.ArmSlotclass is nowpublicfrom package-private
net.minecraft.world.itemBucketItem#contentis nowprotectedfromprivateDyeColornow takes in theMapColorfor the terracotta variantItemStack#getDamageSourceno longer takes in the supplied defaultDamageSource
net.minecraft.world.item.crafting.RecipePropertySet#createis nowpublicfrom package-privatenet.minecraft.world.item.tradingTradeRebalanceVillagerTradesnow extendsVillagerTradesVillagerTradeone constructor now takes in the rawHolderSetofEnchantments instead of being optionally-wrapped
net.minecraft.world.levelChunkPos#MAX_COORDINATE_VALUE->ChunkPyramid#MAX_CHUNK_COORDINATE_VALUECollisionGetter#getBlockCollisionsFromContextis nowpublicfromprivateNaturalSpawner#getFilteredSpawningCategoriesno longer takes in thebooleanfor whether to spawn friendlies
net.minecraft.world.level.biomeClimate$ParameterPoint#parameterSpaceis now package-private fromprotected$SubTreeconstructors are nowpublicfromprotected$TargetPoint#toParameterArrayis now package-private fromprotected
OverworldBiomeBuilder#addBiomesis now package-private fromprotected
net.minecraft.world.level.blockBlock$UpdateFlagscan now only targetElementType#TYPE_USEBedBlockno longer implementsEntityBlockBlock#updateEntityMovementAfterFallOnreplaced bygetBounceRestitutionCopperGolemStatueBlock#updatePoseis nowprotectedfrom package-privatePointedDripstoneBlocknow extendsSpeleothemBlock- The constructor now takes in the
BlockStateit can grow on TIP_DIRECTION->SpeleothemBlock#TIP_DIRECTIONTHICKNESS->SpeleothemBlock#THICKNESSWATERLOGGED->SpeleothemBlock#WATERLOGGEDgrowStalactiteOrStalagmiteIfPossible->SpeleothemBlock#growStalactiteOrStalagmiteIfPossible, now an instance methodcanDrip->isFreeHangingStalactite, nowprotectedfrompublic
- The constructor now takes in the
net.minecraft.world.level.block.entity.trialspawner.TrialSpawnerStateData#getDispensingItemsis nowpublicfrom package-privatenet.minecraft.world.level.block.entity.vaultVaultClientDataconstructor is nowpublicfrom package-privateupdateDisplayItemSpinis nowpublicfrom package-private
VaultConfigconstant fields are nowpublicfrom package-privateVaultServerDataconstructors are nowpublicfrom package-private- Constant fields are now
publicfrom package-private
- Constant fields are now
VaultSharedDataconstructors are nowpublicfrom package-private- Constant fields are now
publicfrom package-private
- Constant fields are now
net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase#emissiveRenderingno longer takes in theBlockGetterandBlockPos$Cache#collisionShape,largeCollisionShape,isCollisionShapeFullBlockare nowpublicfromprotected$Properties#emissiveRenderingnow takes in aBlockStatepredicate instead of a$StatePredicate
net.minecraft.world.level.block.state.propertiesBlockStateProperties#DRIPSTONE_THICKNESS->SPELEOTHEM_THICKNESSDripstoneThickness->SpeleothemThickness
net.minecraft.world.level.chunkChunkAccess#markPosForPostprocessing->markPosForPostProcessingLevelChunkSectionSECTION_WIDTH,SECTION_HEIGHTreplaced bySectionPos#SECTION_SIZESECTION_SIZE->SectionPos#SECTION_BLOCK_COUNT
net.minecraft.world.level.chunk.status.ChunkStatusTaskspassThroughis nowpublicfrom package-privategenerateStructureStarts,loadStructureStartsare nowpublicfrom package-privategenerateStructureReferencesis nowpublicfrom package-privategenerateBiomesis nowpublicfrom package-privategenerateNoiseis nowpublicfrom package-privategenerateSurfaceis nowpublicfrom package-privategenerateCarversis nowpublicfrom package-privategenerateFeaturesis nowpublicfrom package-privateinitializeLightis nowpublicfrom package-privatelightis nowpublicfrom package-privategenerateSpawnis nowpublicfrom package-privatefullis nowpublicfrom package-private
net.minecraft.world.level.chunk.RegionFileStorageconstructor is nowpublicfrom package-privatewriteis nowpublicfromprotected
net.minecraft.world.level.dimension.DimensionType#infiniburnnow takes in aHolderSetofBlocks instead of the referencedTagKeynet.minecraft.world.level.levelgenColumn$Rangeconstructor is nowpublicfromprotectedDensityFunction#mapAllis now default, visiting all functions and their wrapped children.DensityFunctionsMAX_REASONABLE_NOISE_VALUEis now package-private fromprotectedweirdScaledSampler,$WeirdScaledSamplerreplaced byNoiseRouterData$QuantizedSpaghettiRarity#wrapRarity*dmethods, not one-to-one$RarityValueMapperTYPE1->NoiseRouterData$QuantizedSpaghettiRarity#wrapRarity3dTYPE2->NoiseRouterData$QuantizedSpaghettiRarity#wrapRarity2d
$BeardifierMarkeris now package-private fromprotected$BlendAlphais now package-private fromprotected$BlendDensityreplaced by$Markerwith$Marker$Type#BlendDensity$BlendOffsetis now package-private fromprotected$Splineis now a static finalclassinstead of arecord$Coordinatenow holds the rawDensityFunctioninstead of beingHolder-wrapped$Mapped$Typeenum is nowpublicfrom package-private$Markeris now package-private fromprotected$Typeenum is nowpublicfrom package-private
$MulOrAdd$Typeenum is nowpublicfrom package-private$ShiftNoiseinterface is nowprotectedfrom package-private$TwoArgumentSimpleFunctioninterface is nowpublicfrom package-private
GeodeBlockSettingsis now arecordcannotReplace,invalidBlocksnow take in aHolderSetofBlocks instead of the referencedTagKey
NoiseBasedChunkGenerator#buildSurfacenow takes in a set ofHolder<Biome>s instead of theRegistry<Biome>NoiseRouterData$QuantizedSpaghettiRaritygetSphaghettiRarity2D->wrapRarity2d, not one-to-onegetSpaghettiRarity3D->wrapRarity3d, not one-to-one
NoiseSettings#*_SETTINGSconstants are now package-private fromprotectedOreVeinifier#createis now package-private fromprotectedSurfaceRulesisBiome(ResourceKey<Biome>...)now takes in aHolderGetter<Biome>noiseConditionsplit intonoiseCondition2d,noiseCondition3d$ConditionSource#codecis now aMapCodecinstead of aKeyDispatchDataCodec$Contextnow takes in now takes in a set ofHolder<Biome>s instead of theRegistry<Biome>updateYno longer takes in the block XZints
SurfaceSystem#buildSurfacenow takes in a set ofHolder<Biome>s instead of theRegistry<Biome>
net.minecraft.world.level.levelgen.blockpredicatesAllOfPredicateclass is nowpublicfrom package-privateAnyOfPredicateclass is nowpublicfrom package-privateCombiningPredicateclass is nowpublicfrom package-privateMatchingBlocksPredicateclass is nowpublicfrom package-privateMatchingFluidsPredicateclass is nowpublicfrom package-privateNotPredicateclass is nowpublicfrom package-privateReplaceablePredicateclass is nowpublicfrom package-privateTrueBlockPredicateclass is nowpublicfrom package-privateUnobstructedPredicateclass is nowpublicfrom package-private
net.minecraft.world.level.levelgen.carver.CaveCarverConfiguration#floorLevelis nowpublicfrom package-privatenet.minecraft.world.level.levelgen.featureDripstoneClusterFeature->SpeleothemClusterFeatureDripstoneUtils->SpeleothemUtilsFeatureDRIPSTONE_CLUSTER->SPELEOTHEM_CLUSTERPOINTED_DRIPSTONE->SPELEOTHEM
LakeFeature$Configurationnow takes inBlockPredicates for where the feature can be placed, what blocks can be replaced with air or fluid, and what blocks can be replaced with the border/barrier blocksMultifaceGrowthFeaturenow takes in theMultifaceSpreadeableBlockPointedDripstoneFeature->SpeleothemFeatureScatteredOreFeatureconstructor is nowpublicfrom package-privateWeightedPlacedFeatureis now a record and deprecated- Use
WeightedRandomSelectorFeatureinstead
- Use
net.minecraft.world.level.levelgen.feature.configurationsDripstoneClusterConfiguration->SpeleothemClusterConfigurationGeodeConfigurationis now a recordLargeDripstoneFeaturenow takes in aHolderSetofBlocks that can be replacedMultifaceGrowthConfigurationcan now take in aBlockinstead of aMultifaceSpreadeableBlockfor the placing blockPointedDripstoneConfiguration->SpeleothemConfigurationRandomFeatureConfigurationis now a record and deprecated- Use
WeightedRandomFeatureConfigurationinstead
- Use
RootSystemConfigurationis now arecord, now taking inints for the test distance and Y deviation for whether there is space for the rootrootReplaceablenow takes in aHolderSetofBlocks instead of the referencedTagKey
SimpleRandomFeatureConfiguration->CompositeFeatureConfigurationTreeConfigurationCAN_PLACE_BELOW_OVERWORLD_TRUNKS->CAN_PLACE_BELOW_TREE_TRUNKSPLACE_BELOW_OVERWORLD_TRUNKS->defaultPlaceBelowTreeTrunkProvider$TreeConfigurationBuildermust now always take in theBlockStateProviderfor the block below the tree trunk
VegetationPatchConfigurationis now arecordreplaceablenow takes in aHolderSetofBlocks instead of the referencedTagKey
net.minecraft.world.level.levelgen.flat.FlatLayerInfonow has an overload that takes in a holder-wrappedBlocknet.minecraft.world.level.levelgen.presets.WorldPresets#createFlatWorldDimensions->createTestWorldDimensionsnet.minecraft.world.level.levelgen.structure.structures.RuinedPortalPiecenow takes in theHolderLookup$Providerof registries- The other constructor now takes in a
StructurePieceSerializationContextinstead of theStructureTemplateManager $Propertiesis now arecord
- The other constructor now takes in a
net.minecraft.world.level.levelgen.structure.pools.aliasDirectPoolAlias#CODECis nowpublicfrom package-privateRandomGroupPoolAlias#CODECis nowpublicfrom package-privateRandomPoolAlias#CODECis nowpublicfrom package-private
net.minecraft.world.level.levelgen.structure.templatesystemProcessorRule#testnow takes in theLevelReaderand now theBlockStatefor the location stateStructureProcessor#processBlocknow takes in aBlockPosinstead of theStructureTemplate$StructureBlockInfofor the relative template position
net.minecraft.world.level.lightingLightEngine#getLightBlockInto->getLightDampeningIntoSkyLightEngineconstructor is now package-private fromprotectedSpatialLongSet$InternalMapis now package-private fromprotected
net.minecraft.world.level.redstone.CollectingNeighborUpdater$MultiNeighborUpdateconstructor is nowpublicfrom package-privatenet.minecraft.world.level.storage.LevelStorageExceptionnow has an overload that takes in theExceptioncausenet.minecraft.world.level.storage.loot.entriesAlternativesEntryconstructor is nowpublicfrom package-privateComposableEntryContainerinterface is nowpublicfrom package-privateEntryGroupconstructor is nowpublicfrom package-privateSequentialEntryconstructor is nowpublicfrom package-private
net.minecraft.world.level.storage.loot.functionsEnchantRandomlyFunction$Builder#withOptionsnow takes in the rawHolderSetofEnchantments instead of being optionally-wrappedSetOminousBottleAmplifierFunction#MAP_CODECis nowpublicfrom package-privateSetRandomPotionFunction#fromTagKeynow takes in the rawHolderSetofPotions instead of being optionally-wrapped
net.minecraft.world.level.storage.loot.predicates.EntityHasScoredCondition#hasScoreis nowprivatefromprotectednet.minecraft.world.level.validation.PathAllowList$ConfigEntry#parseis nowpublicfrom package-privatenet.minecraft.world.phys.shapesArrayVoxelShapeconstructor is now package-private fromprotectedBitSetDiscreteVoxelShapegetIndexis nowprivatefromprotectedjoinis nowpublicfrom package-privatejoinis now package-private fromprotected
CubeVoxelShapeconstructor is nowpublicfromprotectedIndexMergerinterface is nowpublicfrom package-privateShapesfindBitsis now package-private fromprotectedlcmis now package-private fromprotectedcreateIndexMergeris now package-private fromprotected
SubShapeconstructor is now package-private fromprotected
net.minecraft.world.scoresDisplaySlot#teamColorToSlotreplaced byTeamColor, not one-to-onePlayerTeampackOptions,unpackOptionsnow deals with abyteinstead of anintsetColor,getColornow deals with an optionalTeamColor$Packednow takes in an optionalTeamColorinstead of aChatFormatting
Team#getColornow returns an optionalTeamColorinstead of aChatFormatting
net.minecraft.world.scores.criteria.ObjectiveCriteria#TEAM_KILL,KILLED_BY_TEAMare nowTeamColortoObjectiveCriteriamaps instead of arrays ofObjectiveCriterianet.minecraft.world.timeline.Timelines#NIGHT_FOG_COLOR_MULTIPLIERsplit intoNIGHT_FOG_COLOR_MULTIPLIER_START,NIGHT_FOG_COLOR_MULTIPLIER_END
List of Removals
net.minecraft.CrashReportCategoryformatLocation(double, double, double)trimStacktrace
net.minecraft.clientMinecraftgetVersionTypeisSingleplayer
Options#touchscreen
net.minecraft.client.data.models.model.ModelTemplates#BED_INVENTORYnet.minecraft.client.geom.ModelLayers#BED_FOOT,BED_HEADnet.minecraft.client.gui.GuiGraphicsExtractor#signnet.minecraft.client.gui.render.pip.GuiSignRenderernet.minecraft.client.gui.screens.inventory.AbstractContainerScreenextractSnapbackItemclearDraggingState
net.minecraft.client.model.geom.ModelLayerscreateStandingSignModelNamecreateWallSignModelNamecreateHangingSignModelName
net.minecraft.client.renderer.SheetsSIGN_SHEETSIGN_MAPPER,HANGING_SIGN_MAPPERSIGN_SPRITES,HANGING_SIGN_SPRITESgetSignSprite,getHangingSignSprite
net.minecraft.client.renderer.block.BuiltInBlockModelscreateStandingSigncreateWallSigncreateCeilingHangingSigncreateWallHangingSigncreateSigns
net.minecraft.client.renderer.blockentityAbstractSignRenderergetSignModelgetSignSpritesubmitSign
HangingSignRenderercreateSignModelsubmitSpecialcreateHangingSignLayer
StandingSignRenderercreateSignModelsubmitSpecialcreateSignLayer
SignRenderStatewoodType$SignTransformations#body
net.minecraft.client.renderer.specialHangingSignSpecialRendererStandingSignSpecialRenderer
net.minecraft.client.renderer.state.gui.pip.GuiSignRenderStatenet.minecraft.client.resources.language.I18nsetLanguageexists
net.minecraft.core.BlockPos#getCenter,getBottomCenter- Use
Vec3methods that it delegated from
- Use
net.minecraft.data.AtlasIdsBEDSSIGNS
net.minecraft.util.Tuplenet.minecraft.util.thread.BlockableEventLoop#hasDelayedCrashnet.minecraft.world.entityLivingEntityTAG_HURT_BY_TIMESTAMPcurrentExplosionCause
Mob#setBodyArmorItem
net.minecraft.world.entity.ai.navigation.GroundPathNavigation#hasValidPathTypenet.minecraft.world.entity.npc.villager.VillagerVillager(EntityType, Level, ResourceKey)Villager(EntityType, Level, Holder)
net.minecraft.world.level.block.entityBedBlockEntityDecoratedPotPatterns#getPatternFromItem
net.minecraft.world.level.levelgenDensityFunctionDIRECT_CODEC,HOLDER_HELPER_CODEC$FunctionContext#getBlender
SurfaceRules#isBiome(List<ResourceKey<Biome>>)
net.minecraft.world.scores.ReadOnlyScoreInfo#safeFormatValuenet.minecraft.world.waypoints.Waypoint#MAX_RANGE