User Tools

Site Tools


tutorial:colorprovider

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
tutorial:colorprovider [2019/10/25 17:48]
draylar
tutorial:colorprovider [2019/12/26 21:38] (current)
juuz use single-line lambdas for color providers and match params with yarn
Line 20: Line 20:
 To register a block to the block color provider, you'll need to use Fabric'​s ''​ColorProviderRegistry''​. There is an instance of the ''​BLOCK''​ and ''​ITEM''​ provider inside this class, which you can call register on. The register method takes an instance of your color provider and a varargs of every block you want to color with the provider. ​ To register a block to the block color provider, you'll need to use Fabric'​s ''​ColorProviderRegistry''​. There is an instance of the ''​BLOCK''​ and ''​ITEM''​ provider inside this class, which you can call register on. The register method takes an instance of your color provider and a varargs of every block you want to color with the provider. ​
 <code java [enable_line_numbers="​false"​]>​ <code java [enable_line_numbers="​false"​]>​
-ColorProviderRegistry.BLOCK.register(new BlockColorProvider() { +ColorProviderRegistry.BLOCK.register((state, ​view, pos, tintIndex-> 0x3495eb, MY_BLOCK);
-        @Override +
- public int getColor(BlockState ​state, ​ExtendedBlockView worldBlockPos ​pos, int layer+
- return ​0x3495eb+
-+
-}, MY_BLOCK);+
 </​code>​ </​code>​
  
-All we do here is say, "Hi, ''​MY_BLOCK''​ should be colored 0x3495eb,"​ which is a blue color. You have BlockState, World, and BlockPos context, which is how you can change colors based on biome or position. The final int is the layer; each one asks for a color individually,​ but in this case, we're always returning blue.+All we do here is say, "Hi, ''​MY_BLOCK''​ should be colored 0x3495eb,"​ which is a blue color. You have BlockState, World, and BlockPos context, which is how you can change colors based on biome or position. The final int is the tintIndex; each one asks for a color individually,​ but in this case, we're always returning blue.
  
 The model is also important: the main note here is that you are //​required//​ to define a tintindex for each portion of the model you want to hue. To see an example of this, check out ''​leaves.json'',​ which is the base model used for vanilla leaves. Here's the model used for our block: The model is also important: the main note here is that you are //​required//​ to define a tintindex for each portion of the model you want to hue. To see an example of this, check out ''​leaves.json'',​ which is the base model used for vanilla leaves. Here's the model used for our block:
Line 53: Line 48:
 } }
 </​code>​ </​code>​
-In this instance, we're adding a single tintindex, which is what would appear in the `layer` ​parameter (layer 0).+In this instance, we're adding a single tintindex, which is what would appear in the ''​tintIndex'' ​parameter (tint index 0).
  
 Here's the final result-- note that the original model used the ''​white_concrete''​ texture: Here's the final result-- note that the original model used the ''​white_concrete''​ texture:
Line 61: Line 56:
 Items are similar; the difference is the context provided. Instead of having a state, world, or position, you have access to the ''​ItemStack''​. Items are similar; the difference is the context provided. Instead of having a state, world, or position, you have access to the ''​ItemStack''​.
 <code java [enable_line_numbers="​false"​]>​ <code java [enable_line_numbers="​false"​]>​
-ColorProviderRegistry.ITEM.register((itemStacklayer) -> +ColorProviderRegistry.ITEM.register((stacktintIndex) -> 0x3495eb, COLORED_ITEM);​
- return ​0x3495eb+
-}, COLORED_ITEM);​+
 </​code>​ </​code>​
 This would hue the item in our inventory in the same fashion as the block. This would hue the item in our inventory in the same fashion as the block.
tutorial/colorprovider.1572025696.txt.gz · Last modified: 2019/10/25 17:48 by draylar