Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hi, I would like to create a two-part block, like a fixed base and an upper part which is moving up and down.

So I looked how vanilla does for the bell and other blocks like this, however I am struggling, I know I should do it in TileEntityRenderer, but should I use IForgeBakedModel or anything else ?

I also read the doc in Advanced Block Models but I think I need some more infos :$

51 minutes ago, bibouche_ said:

So I looked how vanilla does for the bell and other blocks like this, however I am struggling, I know I should do it in TileEntityRenderer, but should I use IForgeBakedModel or anything else ?

I also read the doc in Advanced Block Models but I think I need some more infos

you will need a custom model, take a look at the Book model for the EnchantingTable

  • Author

Okay so I got that, however if I am right I do need to add the boxes manually, or is there a way to use a json model ? Because my model is quiet complex and adding cube by cube would take years

you can use Blockbench to create the model (Modded Entity)
you need to update the method names if you are using mojang mappings
because Blockbench still use MCP mappings

  • Author

Oh, I was already using blockbench but I didn’t know that I should do Modded Entity project.

Thanks, I should be able do finish it on my own now.

  • Author

Okayy so I have my model, and got it to render, however the only issue I have is that it doesn't display the texture, and I really don't know where it could come from.

 

Model :

public class CelestialWorkbenchLevitatingPartModel extends Model {
	
	private final ModelRenderer model;
	
	public CelestialWorkbenchLevitatingPartModel() {
		super(RenderType::getEntitySolid);
		textureWidth = 64;
		textureHeight = 32;
		
		model = new ModelRenderer(this);
		model.setRotationPoint(0.0F, 24.0F, 0.0F);
		model.setTextureOffset(0, 0).addBox(-7.0F, -6.0F, -7.0F, 14.0F, 1.0F, 14.0F, 0.0F, false);
		model.setTextureOffset(0, 23).addBox(7.0F, -7.0F, -8.0F, 1.0F, 5.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(0, 23).addBox(-8.0F, -7.0F, -8.0F, 1.0F, 5.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(0, 23).addBox(-8.0F, -7.0F, 7.0F, 1.0F, 5.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(0, 23).addBox(7.0F, -7.0F, 7.0F, 1.0F, 5.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(13, 15).addBox(-7.0F, -7.0F, -8.0F, 14.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(13, 15).addBox(-7.0F, -7.0F, 7.0F, 14.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(6, 17).addBox(7.0F, -7.0F, -7.0F, 1.0F, 1.0F, 14.0F, 0.0F, false);
		model.setTextureOffset(6, 17).addBox(-8.0F, -7.0F, -7.0F, 1.0F, 1.0F, 14.0F, 0.0F, true);
		model.setTextureOffset(0, 20).addBox(6.0F, -10.0F, -7.0F, 1.0F, 2.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(0, 20).addBox(-7.0F, -10.0F, -7.0F, 1.0F, 2.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(0, 20).addBox(-7.0F, -10.0F, 6.0F, 1.0F, 2.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(0, 20).addBox(6.0F, -10.0F, 6.0F, 1.0F, 2.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(0, 15).addBox(4.0F, -10.0F, -8.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(0, 15).addBox(-6.0F, -10.0F, -8.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(0, 15).addBox(-6.0F, -10.0F, 7.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(0, 15).addBox(4.0F, -10.0F, 7.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(0, 17).addBox(7.0F, -10.0F, -6.0F, 1.0F, 1.0F, 2.0F, 0.0F, true);
		model.setTextureOffset(0, 17).addBox(7.0F, -10.0F, 4.0F, 1.0F, 1.0F, 2.0F, 0.0F, true);
		model.setTextureOffset(0, 17).addBox(-8.0F, -10.0F, 4.0F, 1.0F, 1.0F, 2.0F, 0.0F, true);
		model.setTextureOffset(0, 17).addBox(-8.0F, -10.0F, -6.0F, 1.0F, 1.0F, 2.0F, 0.0F, true);
		model.setTextureOffset(35, 8).addBox(6.0F, -8.0F, -8.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(31, 4).addBox(-7.0F, -8.0F, -8.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(35, 8).addBox(-7.0F, -8.0F, 7.0F, 1.0F, 1.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(29, 12).addBox(6.0F, -8.0F, 7.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(30, 10).addBox(7.0F, -8.0F, -7.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(28, 0).addBox(7.0F, -8.0F, 6.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(37, 1).addBox(-8.0F, -8.0F, 6.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(38, 12).addBox(-8.0F, -8.0F, -7.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(0, 0).addBox(6.0F, -2.0F, -9.0F, 3.0F, 1.0F, 3.0F, 0.0F, true);
		model.setTextureOffset(0, 0).addBox(6.0F, -2.0F, 6.0F, 3.0F, 1.0F, 3.0F, 0.0F, true);
		model.setTextureOffset(0, 0).addBox(-9.0F, -2.0F, 6.0F, 3.0F, 1.0F, 3.0F, 0.0F, true);
		model.setTextureOffset(0, 0).addBox(-9.0F, -2.0F, -9.0F, 3.0F, 1.0F, 3.0F, 0.0F, true);
		model.setTextureOffset(37, 6).addBox(6.0F, -6.0F, -8.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(32, 2).addBox(-7.0F, -6.0F, -8.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(29, 0).addBox(-8.0F, -6.0F, -7.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(36, 11).addBox(-8.0F, -6.0F, 6.0F, 1.0F, 1.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(33, 3).addBox(-7.0F, -6.0F, 7.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(31, 13).addBox(6.0F, -6.0F, 7.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(29, 0).addBox(7.0F, -6.0F, 6.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(37, 5).addBox(7.0F, -6.0F, -7.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(0, 1).addBox(6.0F, -6.0F, -8.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(35, 4).addBox(5.0F, -7.0F, -7.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(36, 0).addBox(-7.0F, -7.0F, -7.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(33, 4).addBox(-7.0F, -7.0F, 6.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(30, 6).addBox(5.0F, -7.0F, 6.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(32, 12).addBox(6.0F, -7.0F, -6.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(33, 7).addBox(-7.0F, -7.0F, -6.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(37, 7).addBox(-7.0F, -7.0F, 5.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(33, 7).addBox(6.0F, -7.0F, 5.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(30, 2).addBox(-1.0F, -7.0F, -7.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(30, 5).addBox(-1.0F, -7.0F, 6.0F, 2.0F, 1.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(35, 9).addBox(6.0F, -7.0F, -1.0F, 1.0F, 1.0F, 2.0F, 0.0F, false);
		model.setTextureOffset(31, 2).addBox(-7.0F, -7.0F, -1.0F, 1.0F, 1.0F, 2.0F, 0.0F, false);
		model.setTextureOffset(26, 12).addBox(-2.0F, -5.0F, -2.0F, 4.0F, 1.0F, 4.0F, 0.0F, true);
		model.setTextureOffset(34, 1).addBox(-1.0F, -5.0F, -4.0F, 2.0F, 1.0F, 2.0F, 0.0F, false);
		model.setTextureOffset(33, 8).addBox(-1.0F, -5.0F, 2.0F, 2.0F, 1.0F, 2.0F, 0.0F, true);
		model.setTextureOffset(29, 11).addBox(2.0F, -5.0F, -1.0F, 2.0F, 1.0F, 2.0F, 0.0F, false);
		model.setTextureOffset(32, 7).addBox(-4.0F, -5.0F, -1.0F, 2.0F, 1.0F, 2.0F, 0.0F, false);
		model.setTextureOffset(29, 1).addBox(-1.0F, -4.0F, -2.0F, 2.0F, 1.0F, 4.0F, 0.0F, false);
		model.setTextureOffset(30, 1).addBox(1.0F, -4.0F, -1.0F, 1.0F, 1.0F, 2.0F, 0.0F, true);
		model.setTextureOffset(34, 13).addBox(-2.0F, -4.0F, -1.0F, 1.0F, 1.0F, 2.0F, 0.0F, false);
		model.setTextureOffset(31, 2).addBox(0.0F, -3.0F, -1.0F, 1.0F, 3.0F, 1.0F, 0.0F, true);
		model.setTextureOffset(38, 10).addBox(-1.0F, -3.0F, -1.0F, 1.0F, 2.0F, 1.0F, 0.0F, false);
		model.setTextureOffset(30, 5).addBox(0.0F, -3.0F, 0.0F, 1.0F, 1.0F, 1.0F, 0.0F, false);
	}
	
	@Override public void render(MatrixStack matrixStackIn, IVertexBuilder bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) {
		model.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, red, green, blue, alpha);
	}
	
}

 

Renderer:

public class CelestialWorkbenchTileEntityRenderer extends TileEntityRenderer<CelestialWorkbenchTileEntity> {
	
	public static final RenderMaterial TOP_TEXTURE = new RenderMaterial(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(Alcamod.ModID, "entity/celestial_workbench_top"));
	private final CelestialWorkbenchLevitatingPartModel model_top = new CelestialWorkbenchLevitatingPartModel();
	
	public CelestialWorkbenchTileEntityRenderer(TileEntityRendererDispatcher rendererDispatcher) { super(rendererDispatcher); }
	
	@Override public void render(CelestialWorkbenchTileEntity tileEntityIn, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
		matrixStackIn.push();
		matrixStackIn.translate(0.0d, 1.0d, 0.0);
		matrixStackIn.rotate(Vector3f.XP.rotationDegrees(180.0F));
		IVertexBuilder iVertexBuilder = TOP_TEXTURE.getBuffer(bufferIn, RenderType::getEntitySolid);
		this.model_top.render(matrixStackIn, iVertexBuilder, combinedLightIn, combinedOverlayIn, 1.0F, 1.0F, 1.0F, 1.0F);
		matrixStackIn.pop();
	}
	
}

 

  • Author
Just now, Luis_ST said:

where is your texture located

under assets/textures/entity/celestial_workbench_top.png

  • Author
15 minutes ago, Luis_ST said:

should normally work but you can try to stitch the texture in TextureStitchEvent.Pre

Alright, worked, thanks !

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.