That_Martin_Guy Posted October 11, 2021 Share Posted October 11, 2021 I have a custom model as a part of a tile entity renderer. I want to give this model a texture. I am struggling a bit with figuring out all the steps required to do this. I currently have the following code in my tile entity renderer public class ClockworksTileEntityRenderer extends TileEntityRenderer<TheClockworksTileEntity> { public static final ResourceLocation ATLAS_REGION = ResourceHelper.createNew("textures/atlas/test.png"); public static final ResourceLocation TEXTURE = ResourceHelper.createNew("block/test.png"); private RenderMaterial renderMaterial; public ClockworksTileEntityRenderer(TileEntityRendererDispatcher p_i226006_1_) { super(p_i226006_1_); //Instantiate model renderMaterial = new RenderMaterial(ATLAS_REGION, TEXTURE); } @Override public void render(TheClockworksTileEntity tileEntity, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int combinedLight, int combinedOverlay) { System.out.println(ATLAS_REGION); IVertexBuilder builder = renderMaterial.buffer(buffer, RenderType::entityCutout); model.renderToBuffer(matrixStack, builder, combinedLight, combinedOverlay, 0, 0, 0, 0); } } When I created this code I crashed with the following message. I asked on discord if I was missing something and got told I should use the TextureStitchEvent to stitch the texture to the atlas. That code looks like this: @SubscribeEvent public static void preTextureStitch(TextureStitchEvent.Pre event) { if(event.getMap().location().equals(ClockworksTileEntityRenderer.ATLAS_REGION)) event.addSprite(ClockworksTileEntityRenderer.TEXTURE); } While the event itself runs, the code inside the if statement does not. Not sure how to proceed. Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted October 12, 2021 Share Posted October 12, 2021 (edited) show the method ResourceHelper#createNew and which is line 41 in this code? Edited October 12, 2021 by Luis_ST Quote Link to comment Share on other sites More sharing options...
That_Martin_Guy Posted October 12, 2021 Author Share Posted October 12, 2021 4 hours ago, Luis_ST said: show the method ResourceHelper#createNew and which is line 41 in this code? That's just a shorthand for creating a new resource location with the mod id prefixed. 1 hour ago, diesieben07 said: Don't try to make your own atlas. Okay then... that doesn't tell me what to do instead though. Quote Link to comment Share on other sites More sharing options...
That_Martin_Guy Posted October 12, 2021 Author Share Posted October 12, 2021 Right now it doesn't crash, but the model is still untextured in game (as in, it's completely black). public class ClockworksTileEntityRenderer extends TileEntityRenderer<TheClockworksTileEntity> { public static final ResourceLocation TEXTURE = ResourceHelper.createNew("block/test.png"); private RenderMaterial renderMaterial; public ClockworksTileEntityRenderer(TileEntityRendererDispatcher p_i226006_1_) { super(p_i226006_1_); //Instantiate model renderMaterial = new RenderMaterial(PlayerContainer.BLOCK_ATLAS, TEXTURE); } @Override public void render(TheClockworksTileEntity tileEntity, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int combinedLight, int combinedOverlay) { IVertexBuilder builder = renderMaterial.buffer(buffer, RenderType::entityCutout); model.renderToBuffer(matrixStack, builder, combinedLight, combinedOverlay, 0, 0, 0, 0); } } Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted October 12, 2021 Share Posted October 12, 2021 are there errors on the log, since there is a error message on the log when minecraft can't find the texture Also make sure the texture is in the correct folder and has the same name Quote Link to comment Share on other sites More sharing options...
That_Martin_Guy Posted October 12, 2021 Author Share Posted October 12, 2021 There are no errors. Tried purposefully inputting a texture that doesn't exist to see if that error comes up, and it does. So it's clearly finding the texture. Quote Link to comment Share on other sites More sharing options...
That_Martin_Guy Posted October 16, 2021 Author Share Posted October 16, 2021 I really am not sure what's going on Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted October 16, 2021 Share Posted October 16, 2021 On 10/12/2021 at 1:55 PM, That_Martin_Guy said: (as in, it's completely black). you set the colors to 0, it should be: model.renderToBuffer(matrixStack, builder, combinedLight, combinedOverlay, 1, 1, 1, 1); Quote Link to comment Share on other sites More sharing options...
That_Martin_Guy Posted October 16, 2021 Author Share Posted October 16, 2021 Those values are not used in the model. @Override public void renderToBuffer(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){ modelGroup.render(matrixStack, buffer, packedLight, packedOverlay); } Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted October 16, 2021 Share Posted October 16, 2021 (edited) is there a other render method which use these parameter, since you should use them Edited October 16, 2021 by Luis_ST Quote Link to comment Share on other sites More sharing options...
That_Martin_Guy Posted October 16, 2021 Author Share Posted October 16, 2021 There is an overloaded version that does take those parameters as inputs, but the overload I'm using inputs the default color values (1, 1, 1, 1). So that would make no difference. Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted October 16, 2021 Share Posted October 16, 2021 show more of your code (the model) Quote Link to comment Share on other sites More sharing options...
That_Martin_Guy Posted October 16, 2021 Author Share Posted October 16, 2021 private final ModelRenderer model; public ClockworksKnobModel() { super(RenderType::entityCutoutNoCull); texWidth = 48; texHeight = 48; model = new ModelRenderer(this); model.setPos(8.0F, 8, 0); model.texOffs(0, 1).addBox(-1.0F, -1.0F, -1.0F, 2.0F, 2.0F, 1.0F, 0.0F, false); model.texOffs(1, 2).addBox(-0.5F, -4.0F, -2.0F, 1.0F, 5.0F, 2.0F, 0.0F, false); } @Override public void renderToBuffer(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){ model.render(matrixStack, buffer, packedLight, packedOverlay); } The rendering code is part of vanilla. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.