User Tools

Site Tools


zh_cn:tutorial:colorprovider

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
zh_cn:tutorial:colorprovider [2019/12/19 05:48] lightcolourzh_cn:tutorial:colorprovider [2022/03/29 13:23] – external edit 127.0.0.1
Line 1: Line 1:
-====== 提供颜色 ======+====== 颜色提供器 ======
  
-有没有想过,草和树叶如何根据生物群而改变色调,或者皮革甲如何具有看似无限的颜色模式? 颜色提供者见面后者让您根据位置NBT块状态等属性和项目模型纹理进行色调着色。+有没有想过,草和树叶如何根据生物群系(biome)而改变色调,或者皮革甲如何具有看似无限的颜色模式?答案是颜色提供这个以允许你根据位置NBT、方块状态等属性为方或物品的模型纹理设置色调或者着色。
  
 === 现有例子 === === 现有例子 ===
-首先,现有的哪些原版内容使用颜色提供程序? 一些示例包括:+首先,现有的哪些原版内容使用颜色提供?一些示例包括:
    *草    *草
    *树叶    *树叶
-   *皮革盔甲垂死+   *皮革盔甲着色
    *红石线    *红石线
-   *瓜类,甘蔗和睡莲等植物 +   *西甘蔗和睡莲等植物 
-   *+   *
  
-颜色提供程序功能强大,但是Mojang选择对混凝土羊毛和玻璃等有色块坚持使用单独的纹理。 此时的主要用例是针对生物群落阴影对现有纹理的细微调整,例如带尖的彩色末端。+颜色提供功能强大,但是Mojang选择对混凝土羊毛和玻璃等有色块坚持使用单独的纹理。此时的主要用例是针对生物群系的方,以及对现有纹理的细微调整,例如箭的彩色末端。
  
-颜色提供程序背后的概念很简单。 您向其注册块或项目,并在渲染该块或项目的模型时,颜色提供程序将色调调整应用于纹理的每一层。 两提供都可以访问模型的层,这意味着您可以分别对模型的每个部分进行色调设置,皮革盔甲和带尖头的就是这种情况。 当您只想更改几个像素而不是整个纹理时,这很有用。+颜色提供背后的概念很简单。你为之注册和物品,并在渲染该块或物品的模型时,颜色提供器对纹理的每一层应用色调调整。两提供都可以访问模型的层,这意味着您可以分别对模型的每个部分进行色调设置,皮革盔甲和箭就是这种情况。当您只想更改几个像素而不是整个纹理时,这很有用。
  
-请记住,提供颜色是客户端机制。 确保将与其相关的所有代码放入客户端初始化程序中。 +请记住,颜色提供器是客户端机制。确保将与其相关的所有代码放入客户端初始化中。 
- +===== 注册方块颜色提供器 ===== 
-===== 注册方块 Color Provider ===== +要将块注册到块颜色提供,您需要使用 Fabric 的 ''ColorProviderRegistry''。此类中有一个''BLOCK和''''ITEM''提供的实例,可以调用 register。register 方法接受您的颜色提供程序的一个实例,以及您要使用该提供程序进行着色的每个块的变量。
-要将块注册到块颜色提供程序,您需要使用Fabric的''ColorProviderRegistry''。 此类中有一个''BLOCK和''ITEM''提供程序的实例,可以调用register。 register方法接受您的颜色提供程序的一个实例,以及您要使用该提供程序进行着色的每个块的变量。+
 <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>
  
-我们在这里所做的只是说:"Hi,''MY_BLOCK''应被着色为0x3495eb"是蓝色。 您具有BlockStateWorld和BlockPos上下文,这是您可以根据生物群系或位置改颜色的方式。 最的int是图层; 每个要求一种颜色,但是在这种情况下,我们总是返回蓝色。+我们在这里所做的只是说:Hi,''MY_BLOCK'' 应被着色为 0x3495eb也就是蓝色。有 BlockStateWorld 和 BlockPos 的环境基于些环境的生物群系或位置等来颜色。最的 int 是 tintIndex,每个都会单独为颜色获取一个,但是在此例中,我们返回蓝色。 
 + 
 +如果你需要在颜色提供器中访问 ''BlockEntity'' 数据,你需要实现 ''RenderAttachmentBlockEntity'' 以返回你需要的数据。这是因为方块可以在单独的线程渲染,所以直接访问数据并不安全。而且,如果使用 ''getBlockState'' 查询方块,你无法查看整个世界——确保你只查询当前位置的+-2方块范围内的位置
  
-模型也重要:这里的主提示是//您需要//为要色调的模型的每个部分定义一个tintindex。 要查看此示例,请查看''leaves.json'',这是用于原版叶的基本模型。 这是用于我们块的模型: +模型也重要:这里注意的,你//一定要//为模型的每你需要着色的部分定义tintindex。要查看这个的,请参考 ''leaves.json'',这是原版使用的基本模型。这是我们使用的模型: 
-<code json [enable_line_numbers="false"]>+<code javascript [enable_line_numbers="false"]>
 { {
   "parent": "block/block",   "parent": "block/block",
Line 40: Line 36:
   },   },
   "elements": [   "elements": [
-    {   "from": [ 0, 0, 0 ],+    { "from": [ 0, 0, 0 ],
       "to": [ 16, 16, 16 ],       "to": [ 16, 16, 16 ],
       "faces": {       "faces": {
Line 54: Line 50:
 } }
 </code> </code>
-在这种情况下,我们添加了一个单一的tintindex,它会出现在`layer`参数(0+在这种情况下,我们添加了一个单一的 tintindex,出现在 ''tintIndex'' 参数着色索引0)。
  
-这是最终结果-请注意,原始模型使用了''white_concrete''纹理:+这是最终结果——请注意,原始模型使用了 ''white_concrete''(白色混凝土)纹理(下图使用了 imgur 图床)
 {{https://i.imgur.com/fZLS10g.png}} {{https://i.imgur.com/fZLS10g.png}}
  
-===== 注册颜色提供物品 ===== +===== 注册物品颜色提供器 ===== 
-项目相区别在于提供的上下文。 您无需访问状态世界位置,而可以访问''ItemStack''+物品是类的,区别在于提供的上下文。访问状态世界位置,而访问 ''ItemStack''
 <code java [enable_line_numbers="false"]> <code java [enable_line_numbers="false"]>
 ColorProviderRegistry.ITEM.register((itemStack, layer) -> { ColorProviderRegistry.ITEM.register((itemStack, layer) -> {
Line 67: Line 63:
 </code> </code>
  
-将色相相同的方块库存量项目+会以像方块那样的方你物品栏中物品提供色相
  
-=== 性 === +=== 限制 === 
-使用颜色提供程序的一个关键问题是项目提供程序中缺少上下文。 这就是为什么原版草不会根据您站立的位置改变存货颜色的原因。 为了实现诸如块的颜色变体(混凝土玻璃羊毛等)之类的东西,建议您为每个版本简单地提供单独的纹理。+使用颜色提供的一个关键问题是物品的提供中缺少上下文。这就是为什么原版草不会根据您站立的位置改变物品栏中的颜色的原因。为了实现诸如块的颜色变体(混凝土玻璃羊毛等)之类的东西,建议您为每个版本简单地提供单独的纹理。
zh_cn/tutorial/colorprovider.txt · Last modified: 2023/11/18 08:37 by solidblock