Jump to content

Recommended Posts

Posted

I'm aware this is a really newbie question, but after modding for 1.7.10 for so long the transition is not being kind on me.

 

All this stuff with registry names, json etc is making me crazy, I wish there was a way forge could abstract all that away from modders. I looked at the documentation (which I wish wholeheartedly was more complete), and I found there is nothing on how to register your blocks. With Items, I'm supposed to do this, right?

 

ModelLoader.setCustomModelResourceLocation(item, metadata, model);

 

And all the code I see people just register the block first (in the

GameRegistry

, I mean) and then just grab an item from it using

GameRegistry.findItem(String modid, String registryname)

and then do the above for the item. Is this a hacky way of registering a block texture or is this the right way?

 

If the block has BlockStates, like PropertyDirection which is very common, how is it done.

 

I don't trust tutorials very much, I understand modders have vices and bad coding practices that are frowned upon by the Forge developers. I want to code my mod according to how the Forge team expects their framework to be used, and avoid hacky stuff as much as possible.

 

By the way, if there's a book I can buy, written and/or certified by the Forge team, please let me know.

Posted

Block models are handled by the state mapper (

IStateMapper

), by default

DefaultStateMapper

is used, which turns the blockstate properties into a variant string.

 

For inventory models (blocks don't exist in inventories or dropped form, only items can, that's why

ItemBlock

exists) it works the same as for normal items: You call

ModelLoader.setCustomModelResourceLocation

.

Item.getItemFromBlock

can be used to obtain the

ItemBlock

for block, if there is one.

 

Thank you very much for answering.

 

I see. So what seems hacky is a way of registering the block and it is an ItemBlock. But how to register the block in world model? Please could you give me an example of a block with no BlockStates, and a block with directional block states?

Posted

So, this is the way to register a block with no properties?

 

       

       @SideOnly(Side.CLIENT)
private static void registerRender(Block block)
{
	Item item = Item.REGISTRY.getObject(block.getRegistryName());
	ModelLoader.setCustomModelResourceLocation(item, 0, new  ModelResourceLocation(item.getRegistryName(), "inventory"));

	ModelLoader.setCustomStateMapper(block, new DefaultStateMapper());
}

 

and then I have to create this json in my blockstates folder:

 

{
    "forge_marker": 1,
    "defaults": {
        "textures": {
            "all": "modid:blocks/texture_name"
        }
    },
    "variants": {
        "normal": {
            "model": "cube_all"
        },
        "inventory": {
            "model": "cube_all"
        }
    }
}

 

and this one in my models.block:

 

{
    "parent": "block/cube_all",
    "textures": {
        "all": "modid:blocks/texture_name"
    }
}

 

and if my block had a property of type PropertyDirection like this

 

public class MyBlock extends Block
{
public static final PropertyDirection facing = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL);

}

 

and if it had a texture for each side, what would the registration and json look like?             

Posted

This is not needed, the

DefaultStateMapper

is automatically used if you don't specify.

So I pass null as the second argument of

ModelLoader.setCustomStateMapper

, or I don't invoke it at all?

 

Not quite. In your blockstate json you say to use block/cube_all as the model, meaning it will not care about your json models. This is fine, you don't need them, you can specify the texture in the blockstate json as well, then you don't need a model file at all.

What you're saying is, since I have texture and cube_all for both normal and inventory I don't need a json file for the block model, just this one for the BlockState suffices.

 

The registration would look the same. In the blockstate json you would have to specify variants "facing=north", "facing=east" and so on to specify every direction.

could you please link/write me an example of a json file that does that? Writing a json file on my own for an unknown schema is not possible. If I had an example I would get the gist of the schema and then I'd be able to write other files myself, and my questions will be less broad and more specific (I hope).

Posted

Vanilla contains plenty of examples, look at furnace.json for example.

 

So this will sound stupid. but where can I find that file? The one that gets exposed in eclipse as part of minecraft's source code won't open. I guess because whatever translates .class back to java doesn't care about .json. Is there a location in my file system where I can find those files?

 

And one last question, is it just me or this whole blockstate and models and json files is a lot (A LOT) harder to deal with than the old metadata?

Posted

Ctrl-Shift-R in eclipse, Ctrl-Shift-N in IntelliJ to navigate to a file.

 

Oh. No, I see the file, I can navigate to its location (

ReferencedLibraries/forgeSrc[...]/assets/minecraft/blockstates/furnace.json

; I can do the same thing for the model file). It just won't open. It's not an actual "file". It's probably part of a saved stream that never got translated back to json. If I right click it, the option Show In -> System Explorer is disabled. This file that eclipse is showing doesn't seem to exist in my file system. I assume another version of the file may exist elsewhere.

 

see the images bellow:

 

 

 

f6hYYdd.png

JdNQeCn.png

 

 

Posted

Select "Open With" and select "Text Editor" to open it in the builtin editor.

 

There's no Open With option. Just "Open". The file is not there somehow. So there's nowhere else I can find this file?

Posted

I guess there is never an end to eclipse's shortcomings, apparently the thing cannot search for files in libraries...

So, Go to Referenced Libraries > forgeSrc-<version> and navigate to the json manually. Then you have to tell eclipse to open JSON files in the default text editor: Window > Preferences > General > Editors > File Associations > Add a file type "*.json", then add "Text Editor" as the Associated Editor in the field below.

 

What a great IDE.

 

Thank you very much! that worked. By the way, I'm using eclipse Mars for modding, because with the new version, Neon, the

gradlew setupDecompWorkspace

and

gradlew eclipse

would not result in a nice workspace with everything ready and our example mod there. No. After doing all that, Neon opens an empty workbench, with no project loaded, nothing. Just a welcome page.

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

    • Reach Out To Rapid Digital: What sapp Info: +1 41 4 80 7 14 85 Email INFO: rap iddi gita lrecov ery @ exe cs. com Hello, my name is Jayson, and I’m 35 years old from the United Kingdom. My family and I recently endured an incredibly challenging experience that I wouldn’t wish on anyone. We became victims of a cryptocurrency investment fraud scheme that saw us lose a staggering $807,000 in USDT and Bitcoins. The fraudsters had created a convincing facade, and we were lured into investing, only to discover later that the platform was a complete scam. We were left devastated, not just financially, but emotionally, as we had trusted these people and believed in the legitimacy of the investment. After the initial shock wore off, we desperately searched for ways to recover the lost funds. It seemed like an impossible task, and we felt as though there was no hope. That’s when, by sheer luck, we stumbled across a post about Rapid Digital Recovery, a cryptocurrency and funds recovery organization with a proven track record in cybersecurity and fraud recovery. We decided to reach out to them, and from the first interaction, we were impressed with their professionalism and transparency. They explained the recovery process in detail and reassured us that they had the skills and expertise to track down the perpetrators and recover our funds. This gave us a renewed sense of hope, something we hadn’t felt in months. What truly stood out during our experience with Rapid Digital Recovery was their dedication to the recovery process. The team went above and beyond, using sophisticated tracking tools and cyber forensics to gather critical information. Within a matter of weeks, they had successfully located the funds and traced the scam back to the fraudsters responsible. They worked with the authorities to ensure the criminals were held accountable for their actions. To our relief, the team at Rapid Digital Recovery was able to recover every single penny we had lost. The funds were returned in full, and the sense of closure we felt was invaluable. We couldn’t have imagined such a positive outcome in the early stages of our recovery journey, and we are deeply grateful for the work they did. If you ever find yourself in a similar situation, I highly recommend contacting Rapid Digital Recovery. Their expertise, transparency, and dedication to their clients make them the go-to choice for anyone seeking to recover lost cryptocurrency or funds. They truly gave us back our financial future.  
    • This is my first time modding anything, so maybe just skill issue. I'm using Forge 54.0.12 and Temurin 21.0.5+11-LTS I wanted to create a custom keybind and to check whether it works I'd like to send a chat message. I tried using Minecraft.getInstance().player.sendSystemMessage(Component.literal("test")); but IntelliJ couldnt resolve sendSystemMessage(...). Since I saw people using it in earlier versions, I tried the same thing with 1.20.6(- 50.1.0), where it works fine, now I can't figure out if this is intentional and whether there are other options for sending chat messages. On that note, is there more documentation than https://docs.minecraftforge.net/en/1.21.x/? It seems very incomplete compared to something like the Oracle Java docs
    • Hi, i'm having this error and I wanna fix it. we try: -Reload drivers -Eliminate .minecraft -Eliminate Java -Restart launcher -Verify if minecraft is using gpu -Mods  in .minecraft is empty -Install the latest and recomended version of forge idk what i have to do, help me pls. the lastest log is: https://mclo.gs/WAMao8x  
    • Read the FAQ, Rule #2. (https://forums.minecraftforge.net/topic/125488-rules-and-frequently-asked-questions-faq/)  
  • Topics

×
×
  • Create New...

Important Information

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