Changes

Update to 1.17
Line 1: Line 1: −
<code>ItemStackTileEntityRenderer</code> is a class that allows custom usages of <code>MatrixStack</code>s and <code>IRenderTypeBuffer</code>s to render items.
+
<code>BlockEntityWithoutLevelRenderer</code> is a class that allows custom usages of <code>PoseStack</code>s and <code>MultiBufferSource</code>s to render items.
   −
== Using <tt>ItemStackTileEntityRenderer</tt> ==
+
== Using <tt>BlockEntityWithoutLevelRenderer</tt> ==
<code>ItemStackTileEntityRenderer</code> allows you to render your item by extending the class and overriding <code><nowiki>ItemStackTileEntityRenderer#func_239207_a_</nowiki></code>.
+
<code>BlockEntityWithoutLevelRenderer</code> allows you to render your item by extending the class and overriding <code><nowiki>BlockEntityWithoutLevelRenderer#renderByItem</nowiki></code>.
   −
In order to use a ISTER, the Item must first return true for <code><nowiki>IBakedModel#isBuiltInRenderer</nowiki></code>. It is also recommended that if you are using a block that <code>AbstractBlock#getRenderType</code> returns <code>BlockRenderType#ENTITYBLOCK_ANIMATED</code> so that it will render correctly in layers and minecarts. Once that returns true, the Item’s ISTER will be accessed for rendering. If it does not have one, it will use the default <code>ItemStackTileEntityRenderer#instance</code>.
+
In order to use a BEWLR, the Item must first return true for <code><nowiki>BakedModel#isCustomRenderer</nowiki></code>. Once that returns true, the Item’s BEWLR will be accessed for rendering. If it does not have one, it will use the default <code>ItemRenderer#getBlockEntityRenderer</code>.
   −
To set the ISTER for an Item, use <code><nowiki>Item.Properties#setISTER</nowiki></code>. Each Item can only ever provide one ISTER, and the getter is final so that mods do not return new instances each frame.
+
To set the BEWLR for an Item, an anonymous instance of <code>IItemRenderProperties</code> must be consumed within <code>Item#initializeClient</code>. Within the anonymous instance, <code>IItemRenderProperties#getItemStackRenderer</code> should be overridden to return the instance of your BEWLR:
   −
That’s it, no additional setup is necessary to use a ISTER.
+
<syntaxhighlight lang="java">
 +
// In your item class
 +
@Override
 +
public void initializeClient(Consumer<IItemRenderProperties> consumer) {
 +
  consumer.accept(new IItemRenderProperties() {
   −
If you need to access the <code>TransformType</code> for rendering, you can store the one passed through <code><nowiki>IBakedModel#handlePerspective</nowiki></code> and use it during rendering. This method will always be called before <code><nowiki>ItemStackTileEntityRenderer#func_239207_a_</nowiki></code>.
+
    @Override
 +
    public BlockEntityWithoutLevelRenderer getItemStackRenderer() {
 +
      return myBEWLRInstance;
 +
    }
 +
  });
 +
}
 +
</syntaxhighlight>
 +
 
 +
That’s it, no additional setup is necessary to use a BEWLR.
 +
 
 +
{{Tip/Important|Each mod should only have one instance of a BEWLR to render all of their dynamic items.}}
 +
 
 +
If you need to access the <code>TransformType</code> for rendering, you can store the one passed through <code><nowiki>BakedModel#handlePerspective</nowiki></code> and use it during rendering. This method will always be called before <code><nowiki>BlockEntityWithoutLevelRenderer#renderByItem</nowiki></code>.
       
[[Category:Items]]
 
[[Category:Items]]