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
zh_cn:tutorial:colorprovider [2021/09/27 15:09] – [提供颜色] 抵制机翻! solidblockzh_cn:tutorial:colorprovider [2023/11/18 08:37] (current) – [注册方块颜色提供器] solidblock
Line 17: Line 17:
  
 请记住,颜色提供器是客户端机制。确保将与其相关的所有代码放入客户端初始化器中。 请记住,颜色提供器是客户端机制。确保将与其相关的所有代码放入客户端初始化器中。
-===== 注册方块 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,每个都会单独为颜色获取一个,但是在此例中,我们返回蓝色。
  
-模型也重要:这里的主提示是//您需要//为要色调的模型的每个部分定义一个tintindex。 要查看此示例,请查看''leaves.json'',这是用于原版叶的基本模型。 这是用于我们块的模型: +如果你需要在颜色提供器中访问 ''BlockEntity'' 数据,你需要实现 ''RenderAttachmentBlockEntity'' 以返回你需要的数据。这是因为方块可以在单独的线程渲染,所以直接访问数据并不安全。而且,如果使用 ''getBlockState'' 查询方块,你无法查看整个世界——确保你只查询当前位置的 ±2 方块范围内的位置。 
-<code json [enable_line_numbers="false"]>+ 
 +模型也重要:这里注意的,你//一定要//为模型的每你需要着色的部分定义tintindex。要查看这个的,请参考 ''leaves.json'',这是原版使用的基本模型。这是我们使用的模型: 
 +<code javascript [enable_line_numbers="false"]>
 { {
   "parent": "block/block",   "parent": "block/block",
Line 39: Line 36:
   },   },
   "elements": [   "elements": [
-    {   "from": [ 0, 0, 0 ],+    { "from": [ 0, 0, 0 ],
       "to": [ 16, 16, 16 ],       "to": [ 16, 16, 16 ],
       "faces": {       "faces": {
Line 53: 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 66: Line 63:
 </code> </code>
  
-将色相相同的方块库存量项目+会以像方块那样的方你物品栏中物品提供色相
  
-=== 性 === +=== 限制 === 
-使用颜色提供程序的一个关键问题是项目提供程序中缺少上下文。 这就是为什么原版草不会根据您站立的位置改变存货颜色的原因。 为了实现诸如块的颜色变体(混凝土玻璃羊毛等)之类的东西,建议您为每个版本简单地提供单独的纹理。+使用颜色提供的一个关键问题是物品的提供中缺少上下文。这就是为什么原版草不会根据您站立的位置改变物品栏中的颜色的原因。为了实现诸如块的颜色变体(混凝土玻璃羊毛等)之类的东西,建议您为每个版本简单地提供单独的纹理。
zh_cn/tutorial/colorprovider.1632755386.txt.gz · Last modified: 2021/09/27 15:09 by solidblock