Posted May 2, 20232 yr How can i switch textures on my models based on an EnumProperty on my Block? (For example change color) Thx
May 2, 20232 yr This forum is not so you can use us as a human search engine. This is the link to the wiki: https://forge.gemwire.uk/wiki/Main_Page e.g. your question is answered here: https://forge.gemwire.uk/wiki/BlockState_JSONs and here: https://forge.gemwire.uk/wiki/Tinted_Textures But given this is a Mojang feature rather than a Forge feature, you should not in general expect Forge to provide documentation for it. Boilerplate: If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one. If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install Large files should be posted to a file sharing site like https://gist.github.com You should also read the support forum sticky post.
May 2, 20232 yr Author i know about everything on that page but i dont know how to just change the texture based on a Property. (i have MANY Properties, some should change the texture and i dont want to make like 15 different models)
May 2, 20232 yr As it says on the link above, use Multipart to compose complicated models, e.g. https://minecraft.fandom.com/wiki/Tutorials/Models#Example:_Redstone_Wire Or you can use datagen to generate the models using code if there are lots of them: https://forge.gemwire.uk/wiki/Datageneration/States_and_Models Or if you can't figure out how to do it with Mojang's models; Make it a BlockEntity and render it yourself, maybe with the help of some prebaked models using ModelBlockRenderer Or define and bake your own model format: https://docs.minecraftforge.net/en/1.19.2/rendering/modelloaders/ Boilerplate: If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one. If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install Large files should be posted to a file sharing site like https://gist.github.com You should also read the support forum sticky post.
May 2, 20232 yr Pretty much the main point of using models is that it prebakes the texture information at load time. You switch the model not the texture, otherwise there is no point using them and you should just render things yourself. Boilerplate: If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one. If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install Large files should be posted to a file sharing site like https://gist.github.com You should also read the support forum sticky post.
May 5, 20232 yr Author i am currently doing it like this but if i place around 80 pipes i got 40 fps: public class PipeRenderer implements BlockEntityRenderer<ItemPipeBlockEntity> { public static final ResourceLocation[] MODELS = new ResourceLocation[]{ new ResourceLocation("actualgenerators", "block/pipe_core"), new ResourceLocation("actualgenerators", "block/pipe_horizontal_both"), new ResourceLocation("actualgenerators", "block/pipe_horizontal_extract"), new ResourceLocation("actualgenerators", "block/pipe_horizontal_insert"), new ResourceLocation("actualgenerators", "block/pipe_horizontal_cable"), }; public static final BakedModel[] BAKED_MODELS = new BakedModel[MODELS.length]; private static BlockRenderDispatcher blockRenderer; public PipeRenderer(BlockEntityRendererProvider.@NotNull Context context) { ModelManager modelManager = context.getBlockRenderDispatcher().getBlockModelShaper().getModelManager(); blockRenderer = context.getBlockRenderDispatcher(); for (int i = 0; i < MODELS.length; i++) BAKED_MODELS[i] = modelManager.getModel(MODELS[i]); } @Override public void render(@NotNull ItemPipeBlockEntity pipe, float partialTicks, PoseStack ms, @NotNull MultiBufferSource buffers, int combinedLightIn, int combinedOverlayIn) { var buffer = buffers.getBuffer(RenderType.cutout()); BlockState state = pipe.getBlockState(); BlockPos pos = pipe.getBlockPos(); Level level = pipe.getLevel(); for (Direction direction : Direction.values()) { EMode connectionMode = pipe.getIO(direction).Mode; if (connectionMode == EMode.DISABLED) continue; switch (connectionMode) { case CABLE -> { ms.pushPose(); applyRotation(ms, direction); renderModel(BAKED_MODELS[4], level, pos, state, ms, buffer); } case INSERT -> { ms.pushPose(); applyRotation(ms, direction); renderModel(BAKED_MODELS[3], level, pos, state, ms, buffer); } case EXTRACT -> { ms.pushPose(); applyRotation(ms, direction); renderModel(BAKED_MODELS[2], level, pos, state, ms, buffer); } case EXTRACT_INSERT -> { ms.pushPose(); applyRotation(ms, direction); renderModel(BAKED_MODELS[1], level, pos, state, ms, buffer); } } } } private void renderModel(BakedModel baked, Level level, BlockPos pos, BlockState state, PoseStack stack, VertexConsumer buffer) { blockRenderer.getModelRenderer().tesselateWithAO( level, baked, state, pos, stack, buffer, false, RandomSource.create(), state.getSeed(pos), 15 ); stack.popPose(); } private void applyRotation(PoseStack poseStack, @NotNull Direction direction) { switch (direction) { case UP -> poseStack.rotateAround(new Quaternionf().mul(Axis.XP.rotationDegrees(90F)), 0.5f, 0.5f, 0.5f); case DOWN -> poseStack.rotateAround(new Quaternionf().mul(Axis.XP.rotationDegrees(270F)), 0.5f, 0.5f, 0.5f); case SOUTH -> poseStack.rotateAround(new Quaternionf().mul(Axis.YP.rotationDegrees(180F)), 0.5f, 0.5f, 0.5f); case WEST -> poseStack.rotateAround(new Quaternionf().mul(Axis.YP.rotationDegrees(90F)), 0.5f, 0.5f, 0.5f); case EAST -> poseStack.rotateAround(new Quaternionf().mul(Axis.YP.rotationDegrees(270F)), 0.5f, 0.5f, 0.5f); } } }
May 5, 20232 yr Back in February I took the whole month off from answering questions in this forum. I found I was wasting most of my time explaining to users why their questions were unanswerable. I seem to be getting stuck in that loop again. From now on, if a user fails to show they have done their own research (like not even reading the forum rules/faq) or posts incomplete, unanswerable questions lacking in useful information to reproduce/diagnose the problem, they will have to figure out for themselves why their questions have a response count of zero. Edited May 5, 20232 yr by warjort Boilerplate: If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one. If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install Large files should be posted to a file sharing site like https://gist.github.com You should also read the support forum sticky post.
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.