Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.12] Rendering item from .obj not working!


Electric
 Share

Recommended Posts

Hello,

I'm attempting to create a mod with blocks and items rendered using .obj files. I have been able to successfully render a block from an .obj file, but rendering an item is proving to be much more difficult, and it relentlessly shows up as the pink and black texture in game. I cannot figure out what I am doing wrong. 

 

Here is my item's class:

public ItemSonicScrewdriver() {
        setRegistryName("itemsonicscrewdriver");
        setUnlocalizedName(OperationBlueBox.MODID + ".itemsonicscrewdriver");
    }

    @SideOnly(Side.CLIENT)
    public void initModel() {
        ModelLoader.setCustomModelResourceLocation(this, 0, new ModelResourceLocation(getRegistryName(), "inventory"));
    }

 

And here's how I've registered it in my ModItems class, which is then used in my ClientProxy:

@GameRegistry.ObjectHolder("operationbluebox:itemsonicscrewdriver")
    public static ItemSonicScrewdriver itemSonicScrewdriver;

    @SideOnly(Side.CLIENT)
    public static void initModels() {
        itemSonicScrewdriver.initModel();
    }

I've also tried using someone's block states file that seemed to work for them:

Spoiler

{
  "forge_marker": 1,
  "defaults": {
    "textures": {
      "#itemsonicscrewdriver": "operationbluebox:items/sonicscrewdrivertexture"
    },
    "model": "operationbluebox:itemsonicscrewdriver.obj"
  },
  "variants": {
    "normal": [{}],
    "inventory": [{
      "transform": {
        "firstperson": {
          "translation": [0.1, 0, -0.3],
          "rotation": [ { "y": 130}, {"x": 0}, {"z": 0} ],
          "scale": 0.2
        },
        "thirdperson": {
          "translation": [0.02, 0.05, -0.05],
          "rotation": [ { "y": 0}, {"x": -92}, {"z": 0} ],
          "scale": 0.07
        },
        "gui": {
          "translation": [0, -0.1, 0],
          "scale": 0.16
        }
      }
    }]
  }
}

 

And I have made sure to place the .obj and .mtl files in my models/block folder. All help is appreciated.

Link to comment
Share on other sites

10 hours ago, Matryoshika said:

You have to call OBJLoader.INSTANCE.addDomain(MODID) before you register you models

I have done so in my ClientProxy, so I'm sure this can't be the issue ... unless I did it wrong somehow.

@Override
    public void preInit(FMLPreInitializationEvent event) {
        super.preInit(event);

        OBJLoader.INSTANCE.addDomain(OperationBlueBox.MODID);
    }

    @SubscribeEvent
    public static void registerModels(ModelRegistryEvent event) {
        ModBlocks.initModels();
        ModItems.initModels();
    }

 

I also find it weird that after running the Minecraft client, this shows in my console, which makes it seem as though it has loaded the .obj model, even though it does not show up in-game:

[FML]: OBJLoader.MaterialLibrary: key 'Ns' (model: 'operationbluebox:models/block/itemsonicscrewdriver.mtl') is not currently supported, skipping
[10:28:08] [main/INFO] [FML]: OBJModel: A color has already been defined for material 'itemsonicscrewdriver' in 'operationbluebox:models/block/itemsonicscrewdriver.mtl'. The color defined by key 'Ks' will not be applied!
[10:28:08] [main/INFO] [FML]: OBJLoader.MaterialLibrary: key 'Ke' (model: 'operationbluebox:models/block/itemsonicscrewdriver.mtl') is not currently supported, skipping
[10:28:08] [main/INFO] [FML]: OBJLoader.MaterialLibrary: key 'Ni' (model: 'operationbluebox:models/block/itemsonicscrewdriver.mtl') is not currently supported, skipping
[10:28:08] [main/INFO] [FML]: OBJLoader.MaterialLibrary: key 'illum' (model: 'operationbluebox:models/block/itemsonicscrewdriver.mtl') is not currently supported, skipping

 

Link to comment
Share on other sites

The errors are fine. It's just extra fanciness that the ObjLoader won't support
Is the item a purple/black cube?
Or is it just "empty"?

Oh, and you should put the OBjLoader#addDomain call inside the registerModels method, before you call ModBlocks.initModels().

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

Check that the obj file is decorated at some point with the field usemtl itemsonicscrewdriver and that the mtl is decorated with the field newmtl itemsonicscrewdriver and that there is a definition for said material. 

 

To rule out whether it is a problem taking root in the way the JSON file is written or a problem in the obj and mtl files, remove temporarily the application of the texture in the JSON file and try to apply the texture in the mtl file instead by decorating at the end of the material definition (in the mtl file) with map_Kd operationbluebox:items/sonicscrewdrivertexture.

 

Edit: Does your object extends from item or from block? Because the model appears to be loaded from the block models according to the log, but the naming used gives the impression that it is an item. If it is a block, it also needs to be registered as an item as far as I'm concerned. Sometimes, when one fails to register the item form of a block, the texture appears well in the inventory and when in hand, but when the block is placed in the world, the texture is purple and black. And no error appears on the log. That's why I ask.

Edited by ctbe
Link to comment
Share on other sites

So my .obj file was exported from blender, and has the field mtllib itemsonicscrewdriver.mtl which seems to work, since it does give information on the .mtl file in the console log. Section of my .obj file:

Spoiler

# Blender v2.78 (sub 0) OBJ File: ''
# www.blender.org
mtllib itemsonicscrewdriver.mtl
o SonicScrewdriverReal
v 0.125000 5.000000 0.125001
v -0.125000 -0.000000 0.125000

And I already did have the map_Kd operationbluebox:items/sonicscrewdrivertexture in my .mtl file. Is this problematic to have the texture applied in both the .mtl file and the .json blockstate file? I tried running the mod once with only the texture defined in the .json, and once with it only defined in the .mtl, but neither worked. My .mtl file:

Spoiler

# Blender MTL File: 'None'
# Material Count: 1

newmtl itemsonicscrewdriver
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd operationbluebox:items/sonicscrewdrivertexture

 

 

And I'm trying to register this model as an item only, but I'm also trying to have it use a blockstate file in order to add rotations and other information to the model. 

 

I'm pretty certain that the model isn't working because I've done something wrong with the .json in the blockstates folder, but I'm not entirely sure.

Link to comment
Share on other sites

Hi there,

 

EDiT:

So, I have to pull back my "having probably the same problem" reply, because I found what was wrong at my side: î 

Thats right. As some might have noticed, my mod may end up with something that starts with "ianus".  And while being sad that nothing worked at my side, I noticed that the blockfile.json for that .obj I created was oddly out of sorting, at the very bottom of its folder, while it should have been somewhere in the middle. 

Turns out, I somehow hit the stargate-key at my keyboard when writing the blockstates filename, so instead of   i   I got an   î  .... now try to spot this with monitors keep on growing and growing. 

 

Anyway, one thing from my original post remains: 

 

Regarding the "no error log", I had a similiar experience, but than one of the veterans from forge pointed out that I do use a forge version where the model problem log output was broken.

At the moment my forge is... 2402. You may try updating, if you haven't, to get some more error output.

 

Now... hoping for helping hands too,

 

Confused Merlin

Edited by ConfusedMerlin
found my problem, and its unlikely to be his too
Link to comment
Share on other sites

  • 7 months later...

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

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Whoops! Sorry about that. I've updated the code and removed the reference. The errant line (DivineFavourTabGui.java:31) is currently commented out as well.
    • Take a look at the github https://github.com/lordofwizard/mcserver and the video in it if you want to try it out You can host your very own Java/Bedrock Minecraft Server using Google Cloud Shell. This works under Ubuntu/Debian based Linux operation system. This project requires NO CREDIT CARD and the whole project is entirely FREE! You can make a server without costing you anything. The following features are added into this project are:   Supports different type of Bedrock Servers Clean & Friendly Interface Supports Additional type of Java Server (eg. Sponge, Paper, Fabric etc) Added Server Management Easier functional scripts (eg. ./uninstall allows you to delete your server easily) Instant EULA script setup (Completly skipping this part which makes other people's life much easier to manage) Faster Server Installation (It would probably take you like approx 30 seconds to setup a server) Server Specs: OS: Debian GNU/Linux 10 (buster) x86_64 RAM: 8GB to 16GB Location: Based on your physical location. Storage: Approx 5GB CPU: AMD EPYC (2) 7B12 @ 2.249GHz or Intel Xeon (4) @ 2.199GHz You can view your exact specs by doing ./specinfo Keeping the Server Alive 24/7 There's only ONE way to keep your server online longer than 20 minutes: You must Keep your browser open to keep your server online. This so the shell doesn't get terminated when it's unused or the browser is closed. You can also use google cloud sdk if you don't want to keep you browser open (Don't worry, your device that is being used to host your server isn't affected from the intensity of your server.) If you have any method the would possibly keep the server alive 24/7, feel free to Fork this project and request a Pull to this project. Any help will be greatly appreciated. Limitation of this project Google Cloud Shell Quota While I was editing this project, I notice that Google has added a quota for each Cloud Shell uses and you can only host your server for the max of 50 hours per Week. Once you used all of the hours, you can't use it again until next week. No Dedicated IP Sadly you can't use the host IP into your dedicated IP as it won't let you join that server, you can only join your server by the generated dedicated IP provided by playit.gg. If you know how to reverse proxy the tunnel system, you can actually use the host IP to make a dedicated IP for your server but I highly doubt that would ever happen. Mixed Server Specs Each Cloud Shell session will have different specs of your server based on your physical location so you won't always get the best performance of your server but good news being that it's always the range between 8GB to 16GB so you won't have to worry about lag when playing in the server with high processing in your server. Even take a look at this:https://cloud.google.com/shell/docs/limitations Conclusion Now you can host your very own Minecraft Server for both Java & Bedrock fast and easy and it won't cost you a single penny to make a fast and strong server. Best of all, IT'S FOREVER! Feel free to leave any requests you would like me to add into the project. If you have any issues, go to the Issues tab and submit a issue there.
    • Take a look at the github https://github.com/lordofwizard/mcserver and the video in it if you want to try it out You can host your very own Java/Bedrock Minecraft Server using Google Cloud Shell. This works under Ubuntu/Debian based Linux operation system. This project requires NO CREDIT CARD and the whole project is entirely FREE! You can make a server without costing you anything. The following features are added into this project are:   Supports different type of Bedrock Servers Clean & Friendly Interface Supports Additional type of Java Server (eg. Sponge, Paper, Fabric etc) Added Server Management Easier functional scripts (eg. ./uninstall allows you to delete your server easily) Instant EULA script setup (Completly skipping this part which makes other people's life much easier to manage) Faster Server Installation (It would probably take you like approx 30 seconds to setup a server) Server Specs: OS: Debian GNU/Linux 10 (buster) x86_64 RAM: 8GB to 16GB Location: Based on your physical location. Storage: Approx 5GB CPU: AMD EPYC (2) 7B12 @ 2.249GHz or Intel Xeon (4) @ 2.199GHz You can view your exact specs by doing ./specinfo Keeping the Server Alive 24/7 There's only ONE way to keep your server online longer than 20 minutes: You must Keep your browser open to keep your server online. This so the shell doesn't get terminated when it's unused or the browser is closed. You can also use google cloud sdk if you don't want to keep you browser open (Don't worry, your device that is being used to host your server isn't affected from the intensity of your server.) If you have any method the would possibly keep the server alive 24/7, feel free to Fork this project and request a Pull to this project. Any help will be greatly appreciated. Limitation of this project Google Cloud Shell Quota While I was editing this project, I notice that Google has added a quota for each Cloud Shell uses and you can only host your server for the max of 50 hours per Week. Once you used all of the hours, you can't use it again until next week. No Dedicated IP Sadly you can't use the host IP into your dedicated IP as it won't let you join that server, you can only join your server by the generated dedicated IP provided by playit.gg. If you know how to reverse proxy the tunnel system, you can actually use the host IP to make a dedicated IP for your server but I highly doubt that would ever happen. Mixed Server Specs Each Cloud Shell session will have different specs of your server based on your physical location so you won't always get the best performance of your server but good news being that it's always the range between 8GB to 16GB so you won't have to worry about lag when playing in the server with high processing in your server. Even take a look at this:https://cloud.google.com/shell/docs/limitations Conclusion Now you can host your very own Minecraft Server for both Java & Bedrock fast and easy and it won't cost you a single penny to make a fast and strong server. Best of all, IT'S FOREVER! Feel free to leave any requests you would like me to add into the project. If you have any issues, go to the Issues tab and submit a issue there.
    • Hey guys, I'm trying to run the dev env with two mods (Alexs Mobs and Citadel), therefore I copied their build.gradle because there's a lot of mixin stuff: build.gradle: https://pastebin.com/PUef70eP The server boots up normally when I use the old mappings, but when I change to Mojang's mappings, I get this error on startup: java.lang.BootstrapMethodError: java.lang.ClassFormatError: Duplicate method name "isFood" with signature "(Lnet.minecraft.item.ItemStack;)Z" in class file com/github/alexthe666/alexsmobs/entity/EntityRaccoon I already use fg.deof to match the mappings of the mods to my mappings, what else could be the reason for this error?  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.