Jump to content

Understanding texture/model of blocks in inventory


indemnity83

Recommended Posts

 

I'm sure I'm just being dense because even though I've tried to find tutorials or other examples here in the forums I still cannot get a simple block with variants to render the item in my hand, inventory or on the ground. The full source code is here, I'll try to pluck out the bits I think are important but it may just be easier to go look at the actual source code. 

 

I have a block with variants; those variants determine the texture to be applied (among other things). And I've registered the single block and the item block inside my preInit() handler

 

public class BlockIronTank extends Block {
	public static final PropertyEnum<IronTankType> VARIANT = PropertyEnum.create("variant", IronTankType.class);

    ...
}

 

// This happens inside the preInit() handler
GameRegistry.register(ironTankBlock);
GameRegistry.register(ironTankItemBlock);

 

I also have a blockstate and block model:

 

Quote

 

blockstate:

{
  "forge_marker": 1,
  "variants": {
    "variant": {
      "glass": {
        "comment": "This is just here to suppress a warning that the glass variant has no blockstate, it's never actually used",
        "textures": {
          "particle": "buildcraftfactory:blocks/tank/side",
          "end": "buildcraftfactory:blocks/tank/end",
          "side": "buildcraftfactory:blocks/tank/side",
          "side_stacked": "buildcraftfactory:blocks/tank/side_joined_below"
        }
      },
      "copper": {
        "textures": {
          "particle": "irontanks:blocks/coppertank/side",
          "end": "irontanks:blocks/coppertank/end",
          "side": "irontanks:blocks/coppertank/side",
          "side_stacked": "irontanks:blocks/coppertank/side_stacked"
        }
      },
      "iron": {
        "textures": {
          "particle": "irontanks:blocks/irontank/side",
          "end": "irontanks:blocks/irontank/end",
          "side": "irontanks:blocks/irontank/side",
          "side_stacked": "irontanks:blocks/irontank/side_stacked"
        }
      },
      "silver": {
        "textures": {
          "particle": "irontanks:blocks/silvertank/side",
          "end": "irontanks:blocks/silvertank/end",
          "side": "irontanks:blocks/silvertank/side",
          "side_stacked": "irontanks:blocks/silvertank/side_stacked"
        }
      },
      "gold": {
        "textures": {
          "particle": "irontanks:blocks/goldtank/side",
          "end": "irontanks:blocks/goldtank/end",
          "side": "irontanks:blocks/goldtank/side",
          "side_stacked": "irontanks:blocks/goldtank/side_stacked"
        }
      },
      "diamond": {
        "textures": {
          "particle": "irontanks:blocks/diamondtank/side",
          "end": "irontanks:blocks/diamondtank/end",
          "side": "irontanks:blocks/diamondtank/side",
          "side_stacked": "irontanks:blocks/diamondtank/side_stacked"
        }
      },
      "obsidian": {
        "textures": {
          "particle": "irontanks:blocks/obsidiantank/side",
          "end": "irontanks:blocks/obsidiantank/end",
          "side": "irontanks:blocks/obsidiantank/side",
          "side_stacked": "irontanks:blocks/obsidiantank/side_stacked"
        }
      }
    }
  }
}

 

model:

{
  "elements": [
    {
      "from": [2, 0, 2],
      "to": [14, 16, 14],
      "faces": {
        "down": {"texture": "#end", "cullface": "down"},
        "up": {"texture": "#end", "cullface": "up"},
        "north": {"texture": "#side"},
        "south": {"texture": "#side"},
        "west": {"texture": "#side"},
        "east": {"texture": "#side"}
      }
    }
  ]
}

 

So far everything works. I can place the blocks and they render as expected and it seems like all that should be required at this point it to apply some transformations so it scales right in the player's hand etc; so I have an iron_tank item model too that inherits the block model and applies the transformations:

 

{
  "parent": "irontanks:block/iron_tank",
  "display": {
    "gui": {
      "rotation": [30, 225, 0],
      "translation": [0, 0, 0],
      "scale": [0.625, 0.625, 0.625]
    },
    "ground": {
      "rotation": [0, 0, 0],
      "translation": [0, 3, 0],
      "scale": [0.25, 0.25, 0.25]
    },
    "fixed": {
      "rotation": [0, 0, 0],
      "translation": [0, 0, 0],
      "scale": [0.5, 0.5, 0.5]
    },
    "thirdperson_righthand": {
      "rotation": [75, 45, 0],
      "translation": [0, 2.5, 0],
      "scale": [0.375, 0.375, 0.375]
    },
    "firstperson_righthand": {
      "rotation": [0, 45, 0],
      "translation": [0, 0, 0],
      "scale": [0.40, 0.40, 0.40]
    },
    "firstperson_lefthand": {
      "rotation": [0, 225, 0],
      "translation": [0, 0, 0],
      "scale": [0.40, 0.40, 0.40]
    }
  }
}

 

Link to comment
Share on other sites

The problem is that you don't ever register a item model to your block's items, at least as far as I could tell. You need to call ModelLoader.setCustomModelResourceLocation and you can check out this thread for more info.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Semi-progress, 

 

I added the following chunk of code:

 

for (IronTankType type : IronTankType.VALUES) {
	ModelLoader.setCustomModelResourceLocation(Content.ironTankItemBlock, type.metaValue, new ModelResourceLocation(Content.ironTankItemBlock.getRegistryName(), "stacked=false,variant=" + type.name));
}

 

and now the item renders in my hand with the right shape and transformation; but now nothing has a texture (neither in my hand, nor placed as a block)

 

 

2017-07-22_09.55.06.png

Link to comment
Share on other sites

Indeed, there aren't any model/texture errors in the log.

 

Please update your Git repository with the latest version of your code, I'd like to debug this locally.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Is it possibly because I haven't moved the rendering stuff into a client only proxy yet? I didn't actually think this was going to be a problem functionally, just performance so I wanted to get everything working, then refactor things into their best homes. 

Link to comment
Share on other sites

40 minutes ago, indemnity83 said:

Is it possibly because I haven't moved the rendering stuff into a client only proxy yet? I didn't actually think this was going to be a problem functionally, just performance so I wanted to get everything working, then refactor things into their best homes. 

 

Registering the models in common code will crash the dedicated server, but it should work in single player.

 

Something's causing the iron_tank model to be treated differently to the iron_tank_stacked model (it's loaded but not baked), but I haven't determined what that is yet.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Progress! I have the blocks rendering again, and now the item in my hand has all the right transformations, but without textures. I actually think the item in my hand not having textures is maybe a different problem having to do with blockstates and how item don't pay any attention to blockstates. 

 

What I changed was removing the "stacked" variant information from the resource string on load. No idea why that was hanging things up, but that part at least seems to be working again. 

2017-07-27_22.33.36.png

Link to comment
Share on other sites

12 hours ago, indemnity83 said:

What I changed was removing the "stacked" variant information from the resource string

The whole JSON resource paradigm is extremely fragile. Strings must be matched exactly. Your IDE isn't there to flag typos. Just one misplaced underscore or mixed-case string (semantic error) in either your JSON or the variable that must match it) can derail a JSON file, even if the JSON passes json lint (which you should be using to prove your JSON files are at least syntactically kosher). Therefore, sometimes it helps to have your text editor search for all occurrences of identifiers related to a nonfunctional object. What it fails to find might surprise you. If that doesn't trip anything, then set break points in your methods that concatenate strings so you can examine them in the debugger.

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

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



×
×
  • Create New...

Important Information

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