Interface PartRenderer<T extends MultiPart>

All Known Subinterfaces:
PartBakedModelRenderer<T>
All Known Implementing Classes:
MicroBlockPartRenderer

public interface PartRenderer<T extends MultiPart>
Responsible for all rendering related operations of a MultiPart.

Registered via MultipartClientRegistry.register(codechicken.multipart.api.MultipartType<? super T>, codechicken.multipart.api.part.render.PartRenderer<? super T>).

Created by covers1624 on 7/11/21.

See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    default boolean
    drawHighlight(T part, PartRayTraceResult hit, net.minecraft.client.Camera camera, com.mojang.blaze3d.vertex.PoseStack pStack, net.minecraft.client.renderer.MultiBufferSource buffers, float partialTicks)
    Override the drawing of the selection box around this part.
    default List<net.minecraft.client.renderer.block.model.BakedQuad>
    getQuads(T part, @Nullable net.minecraft.core.Direction side, net.minecraft.util.RandomSource rand, net.neoforged.neoforge.client.model.data.ModelData data, @Nullable net.minecraft.client.renderer.RenderType renderType)
    Get the static quads for this part, this is synonymous to IBakedModelExtension.getQuads(BlockState, Direction, RandomSource, ModelData, RenderType)
    default void
    renderBreaking(T part, codechicken.lib.render.CCRenderState ccrs)
    Deprecated.
    Raw chunk buffer access is being phased out, this is known to be incompatible with many mods.
    default void
    renderDynamic(T part, com.mojang.blaze3d.vertex.PoseStack pStack, net.minecraft.client.renderer.MultiBufferSource buffers, int packedLight, int packedOverlay, float partialTicks)
    Render the dynamic, changing faces of this part and/or other glfx.
    default void
    renderStatic(T part, @Nullable net.minecraft.client.renderer.RenderType layer, codechicken.lib.render.CCRenderState ccrs)
    Deprecated.
    Raw chunk buffer access is being phased out, this is known to be incompatible with many mods.
  • Method Details

    • getQuads

      default List<net.minecraft.client.renderer.block.model.BakedQuad> getQuads(T part, @Nullable @Nullable net.minecraft.core.Direction side, net.minecraft.util.RandomSource rand, net.neoforged.neoforge.client.model.data.ModelData data, @Nullable @Nullable net.minecraft.client.renderer.RenderType renderType)
      Get the static quads for this part, this is synonymous to IBakedModelExtension.getQuads(BlockState, Direction, RandomSource, ModelData, RenderType)

      This is method may be called on the chunk batching thread. World/state access should be performed in a thread-safe manner.

      It is highly recommended that parts do some form of caching for the data returned here.

      The current default implementation of this method delegates to renderStatic(T, net.minecraft.client.renderer.RenderType, codechicken.lib.render.CCRenderState) and renderBreaking(T, codechicken.lib.render.CCRenderState). When these methods are removed, this method will turn into a no-op.

      Parameters:
      part - The part quads are required for.
      side - The side of the model requesting quads. Non-null sides will be culled if they are occluded. null for un-culled.
      rand - The RandomSource for this block position.
      data - Any ModelData this part has provided via MultiPart.getModelData().
      renderType - The RenderType pass. null is used for breaking overlay and other special rendering (enderman, etc). When null, if the player is currently looking at a part, only that part will be queried for quads.
      Returns:
      The quads, or an empty list.
    • renderStatic

      @Deprecated default void renderStatic(T part, @Nullable @Nullable net.minecraft.client.renderer.RenderType layer, codechicken.lib.render.CCRenderState ccrs)
      Deprecated.
      Raw chunk buffer access is being phased out, this is known to be incompatible with many mods. Parts should migrate to returning BakedQuads from getQuads(T, net.minecraft.core.Direction, net.minecraft.util.RandomSource, net.neoforged.neoforge.client.model.data.ModelData, net.minecraft.client.renderer.RenderType).
      Render the static, unmoving faces of this part into the world renderer.

      The given CCRenderState is set up as follows should you wish to use it:

       - CCRenderState.reset() has been called.
       - The current buffer is bound to CCRenderState.
       - The LightMatrix is setup and ready to use.
       

      Should you wish to not use CCRenderState and associated utilities. You can obtain the raw VertexConsumer from CCRenderState.getConsumer() and the VertexFormat from CCRenderState.getVertexFormat().

      If you wish to render your part as a standard BakedModel please see PartBakedModelRenderer.

      This method may be called on chunk batching threads, all operations performed here must be thread aware.

      It is illegal to perform raw GL calls within this method. You will not have a valid GL context, or, a context from another thread.

      Parameters:
      part - The MultiPart being rendered.
      layer - The block RenderType layer being rendered. null for renderBreaking(T, codechicken.lib.render.CCRenderState)
      ccrs - The CCRenderState instance to render with.
    • renderBreaking

      @Deprecated default void renderBreaking(T part, codechicken.lib.render.CCRenderState ccrs)
      Deprecated.
      Raw chunk buffer access is being phased out, this is known to be incompatible with many mods. Parts should migrate to returning BakedQuads from getQuads(T, net.minecraft.core.Direction, net.minecraft.util.RandomSource, net.neoforged.neoforge.client.model.data.ModelData, net.minecraft.client.renderer.RenderType), using the null render type as a marker for breaking.
      Override how your part displays its breaking progress overlay.

      By default, this method will delegate to renderStatic(MultiPart, RenderType, CCRenderState) using a null RenderType.

      You shouldn't need to override this, in most cases the defaults will work just fine.

      The given CCRenderState is set up as follows should you wish to use it:

       - CCRenderState.reset() has been called.
       - The current buffer is bound to CCRenderState.
       - The LightMatrix is setup and ready to use.
       

      Should you wish to not use CCRenderState and associated utilities. You can obtain the raw VertexConsumer from CCRenderState.getConsumer() and the VertexFormat from CCRenderState.getVertexFormat().

      This method may be called on chunk batching threads, all operations performed here must be thread aware.

      It is illegal to perform raw GL calls within this method. You will not have a valid GL context, or, a context from another thread.

      Parameters:
      part - The MultiPart being rendered.
      ccrs - The CCRenderState instance to render with.
    • renderDynamic

      default void renderDynamic(T part, com.mojang.blaze3d.vertex.PoseStack pStack, net.minecraft.client.renderer.MultiBufferSource buffers, int packedLight, int packedOverlay, float partialTicks)
      Render the dynamic, changing faces of this part and/or other glfx.
      Parameters:
      part - The MultiPart being rendered.
      pStack - The PoseStack to apply.
      buffers - The MultiBufferSource storage.
      packedLight - The packed LightMap coords to use. See LightTexture.
      packedOverlay - The packed Overlay coords to use. See OverlayTexture.
      partialTicks - The game partial ticks.
    • drawHighlight

      default boolean drawHighlight(T part, PartRayTraceResult hit, net.minecraft.client.Camera camera, com.mojang.blaze3d.vertex.PoseStack pStack, net.minecraft.client.renderer.MultiBufferSource buffers, float partialTicks)
      Override the drawing of the selection box around this part.

      This is called with the context of RenderHighlightEvent.Block.

      Parameters:
      part - The MultiPart being rendered.
      hit - The PartRayTraceResult.
      camera - The Camera camera info.
      pStack - The PoseStack to apply.
      buffers - The MultiBufferSource storage.
      partialTicks - The game partial ticks.
      Returns:
      If any custom rendering was applied. false for default VoxelShape based rendering.