Jump to content

[1.11.2] Help needed with block registering


diniboy

Recommended Posts

Hi,

 

I am a newbie here, this is my first post, So please please be patient, give me some time to come into the mod writing. :) I am just started meeting with the Minecraft modding, but I hope, I will understand all the important functions/methods at the near future!

 

I have created a 'mod' with the MDK for Forge 1.11.2, and that little 'mod' adds custom cauldron block to the game. At the Eclipse side, the code looks good, however in game, I Cannot give myself the block... So somehow it Cannot be renderred. And I don't see where is the problem exactly...  I pushed the code to Github, here is the link for the repository.

 

Any help is welcome!

 

Many thanks!

Link to comment
Share on other sites

Thanks for Your quick reply!

14 minutes ago, diesieben07 said:
  • Do not use the ItemModelMesher to register your models, use ModelLoader.setCustomModelResourceLocation in preInit from your client proxy.
  • You never register an ItemBlock for your block, as such it can not exist in item form, i.e. in an inventory or as a dropped item. I suggest you read the documentation page on blocks.

I replaced the ItemModelMesher to the ModelManager, as You suggested. Thanks! Is that okay now (link)?

 

How exactly should this be done? :D

Link to comment
Share on other sites

ModelLoader has to be called in either preInit, after you register your block (as diesieben said in his post), OR in the ModelRegistryEvent (but only if you are using the RegistryEvent to register your block)

Edited by Matryoshika

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Link to comment
Share on other sites

6 hours ago, diniboy said:

I am just started meeting with the Minecraft modding

There are many Forge mods at CurseForge, and many of them link to their source code at github. You can learn much from just walking through others' source code, especially if you can find a mod doing something like what you want to do.

  • Like 1

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

Well, I have done a lot of testing, but the block didn't appeared... :( I didn't pushed that tries to the Github, it was just done on my local repository, but as I haven't reached any result up to now, I think these steps are unnecessary.

 

If it isn't a big request, Can anybody help with some exact code parts, that must be changed? Many thanks!

 

Other: Is there any Javadoc somewhere for the Forge API?

 

BTW an example mod, with one custom block, one custom item, one tile entity, and so on, the basics might be very helpful for the beginners I think.

Link to comment
Share on other sites

Okay, now I Can render an item (and a block too, but with a bit different way)! :) But just with the old ItemModelMesher method:

 

    public void registerItemRenderer(ItemBase item, int meta, String id) {
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, meta, new ModelResourceLocation(TestMod.MODID + ":" + id, "inventory"));
        
    }

 

The ModelLoader gives me an untextured object:

 

    public void registerItemRenderer(ItemBase item, int meta, String id) {
        ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(TestMod.MODID + ":" + id, "inventory"));
    }

 

BTW I've followed the linked shadowfacts tutorial.

 

Thanks!

Link to comment
Share on other sites

That doesn't answer the question, when is it called? 

  • Like 1

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

From the main class, I call my block and item initializator class, and they are call another two classes. And theese executes the ModelLoader at the ClientProxy.

 

Anyways, why I shouldn't use the old method with the IMM? It is working perfectly for items. Just the blocks are buggy.

Link to comment
Share on other sites

In what events do you call those other classes? It's not about which class the method is in, it's about which stage of mod loading it happens in.

 

Edit: Posting all your up-to-date code would be the easiest solution.

Edited by Jay Avery
  • Like 1
Link to comment
Share on other sites

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...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

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