Posted May 18, 20223 yr I am trying to make custom block that looks like a type of plush of a player and make it work just like the skulls. The block already works but for some reason i cant seem to get past the consumer.accept in the initializeClient The Item class public class PlushItem extends BlockItem { public PlushItem(Block block) { super(block, new Item.Properties().tab(FurniatureItemGroup.FURNIATURE)); } @Override public void initializeClient(Consumer<IItemRenderProperties> consumer) { consumer.accept(new IItemRenderProperties() { @Override public BlockEntityWithoutLevelRenderer getItemStackRenderer() { return new ItemStackRenderer(); } }); } } The item stack renderer public class ItemStackRenderer extends BlockEntityWithoutLevelRenderer { private static HashMap<Plush.Type, PlushModelBase> plushModels; public ItemStackRenderer() { super(Minecraft.getInstance().getBlockEntityRenderDispatcher(), Minecraft.getInstance().getEntityModels()); } private static void init() { plushModels = new HashMap<>(); for (Plush.Type type : Plush.Types.values()) { PlushModelBase plushModelBase = new PlushModelBase(); plushModels.put(type, plushModelBase); } } @Override public void renderByItem(ItemStack stack, ItemTransforms.TransformType transformType, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { if (plushModels == null) init(); Furniature.LOGGER.info(plushModels + " :Render By Item"); Item[] items = {FurniatureItems.HEATH_PLUSH.get(), FurniatureItems.PLAYER_PLUSH.get()}; for (Item item : items) { if (item instanceof BlockItem) { Block block = ((BlockItem) item).getBlock(); if (block instanceof PlushBlock) { GameProfile gameprofile = null; if (stack.hasTag()) { CompoundTag compoundtag = stack.getTag(); if (compoundtag.contains("SkullOwner", 10)) { gameprofile = NbtUtils.readGameProfile(compoundtag.getCompound("SkullOwner")); } else if (compoundtag.contains("SkullOwner", 8) && !StringUtils.isBlank(compoundtag.getString("SkullOwner"))) { gameprofile = new GameProfile(null, compoundtag.getString("SkullOwner")); compoundtag.remove("SkullOwner"); SkullBlockEntity.updateGameprofile(gameprofile, (p_172560_) -> { compoundtag.put("SkullOwner", NbtUtils.writeGameProfile(new CompoundTag(), p_172560_)); }); } } Plush.Type PlushType = ((PlushBlock) block).getType(); PlushModelBase modelBase = plushModels.get(PlushType); RenderType rendertype = PlushBlockRenderer.getRenderType(PlushType, gameprofile); PlushBlockRenderer.renderPlush((Direction) null, 180.0F, 0.0F, matrixStackIn, bufferIn, combinedLightIn, modelBase, rendertype); } } } } } I am fully aware that is probably still wont work but i am just not sure on how to go further. Edited May 22, 20223 yr by Aligatetcolt
May 19, 20223 yr Author Alright but it keeps saying Method call expected with Insert New. Even if i do this. @Override public void initializeClient(Consumer<IItemRenderProperties> consumer) { ItemStackRenderer plushItemRender = new ItemStackRenderer(); consumer.accept(new IItemRenderProperties() { @Override public BlockEntityWithoutLevelRenderer getItemStackRenderer() { Furniature.LOGGER.info("But does it get here?"); return plushItemRender; } }); }
May 19, 20223 yr Author Alright. i was just confused then. but weirdly enough it still does not get past the consumer.accept. at least the logger i put in never is triggered. so its not in the logs. Also sorry i have been on this problem for a few while now and i just completely blank out sometimes. Edited May 19, 20223 yr by Aligatetcolt To make it look a bit better and expain some things
May 19, 20223 yr Author Well i put this (Furniature.LOGGER.info("But does it get here?");) in the BlockEntityWithoutLevelRenderer. But i cant find it in the log. so what i thought was that it never reached that point as you can see in the code i send earlier. 28 minutes ago, Aligatetcolt said: @Override public void initializeClient(Consumer<IItemRenderProperties> consumer) { ItemStackRenderer plushItemRender = new ItemStackRenderer(); consumer.accept(new IItemRenderProperties() { @Override public BlockEntityWithoutLevelRenderer getItemStackRenderer() { Furniature.LOGGER.info("But does it get here?"); return plushItemRender; } }); }
May 19, 20223 yr Author Here is the link to github. https://github.com/DavyVerbogt/Furniature/tree/main/src/main/java/com/colt/furniature Edited May 19, 20223 yr by Aligatetcolt Link was in there twice
May 19, 20223 yr Author There was and that made no difference. The reason i took them away was because i looked at some references and no one had a model.json
May 19, 20223 yr Author I will make the item models json when i can and report back if it made a difrence
May 19, 20223 yr Author Yeah it seems like i did make a mistake and now it does go to the code. there is still one other problem and that is that the items are invisible. i guess something is wrong with my item render class.
May 19, 20223 yr Author had that still the same thing happened. i removed to test if that was really necessary.
May 19, 20223 yr Author It seems like the gameprofile stays null. But still not 100% sure on why there is no item model.
May 22, 20223 yr Author I got it working. I had to still use the Minecraft.getInstance().getEntityModels() And use that in plushRenderer. public class ItemStackRenderer extends BlockEntityWithoutLevelRenderer{ private EntityModelSet entityModelSet; private Map<Plush.Type, PlushModelBase> plushModelBaseMap; public ItemStackRenderer(BlockEntityRenderDispatcher RenderDispatcher, EntityModelSet ModelSet) { super(RenderDispatcher, ModelSet); } @Override public void onResourceManagerReload(ResourceManager resourceManager) { } @Override public void renderByItem(ItemStack stack, ItemTransforms.TransformType transformType, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { Item item = stack.getItem(); if (item instanceof BlockItem) { Block block = ((BlockItem) item).getBlock(); if (block instanceof PlushBlock) { GameProfile gameprofile = null; if (stack.hasTag()) { CompoundTag compoundtag = stack.getTag(); if (compoundtag.contains("SkullOwner", 10)) { gameprofile = NbtUtils.readGameProfile(compoundtag.getCompound("SkullOwner")); } else if (compoundtag.contains("SkullOwner", 8) && !StringUtils.isBlank(compoundtag.getString("SkullOwner"))) { gameprofile = new GameProfile(null, compoundtag.getString("SkullOwner")); compoundtag.remove("SkullOwner"); SkullBlockEntity.updateGameprofile(gameprofile, (p_172560_) -> { compoundtag.put("SkullOwner", NbtUtils.writeGameProfile(new CompoundTag(), p_172560_)); }); } } Plush.Type PlushType = ((PlushBlock) block).getType(); this.entityModelSet = Minecraft.getInstance().getEntityModels(); plushModelBaseMap = PlushBlockRenderer.createPlushRenderers(this.entityModelSet);; PlushModelBase modelBase = plushModelBaseMap.get(PlushType); RenderType rendertype = PlushBlockRenderer.getRenderType(PlushType, gameprofile); Furniature.LOGGER.info(gameprofile +" :Gameprofile"); Furniature.LOGGER.info(PlushType+" :Plush Type"); Furniature.LOGGER.info(modelBase+" :Model Base"); PlushBlockRenderer.renderPlush((Direction) null, 180.0F, 0.0F, matrixStackIn, bufferIn, combinedLightIn, modelBase, rendertype); } } } }
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.