User Tools

Site Tools


zh_cn:tutorial:crops

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:crops [2024/08/27 04:55] solidblockzh_cn:tutorial:crops [2025/04/01 12:05] (current) – fix typo solidblock
Line 55: Line 55:
 ===== 注册你的作物和种子物品 ===== ===== 注册你的作物和种子物品 =====
  
-现在需要注册作物和用作种子的物品。种子模型和类(包括为方便而用的静态 ''static'' 方法)本页不作介绍,请参考 [[items]] 和 [[blocks]] 页面。特别要注意,要添加 ''AliasedBlockItem'' 以确保您的种子物品绑定到作物方块+现在需要注册作物和用作种子的物品。种子模型和类(包括为方便而用的静态 ''static'' 方法)本页不作介绍,请参考 [[items]] 和 [[blocks]] 页面。要注意的是,种子虽然是作物对应的方块物品,但是其名称不是直接使用作物的名称,而是有单独的名称,因此对于 1.21.2 之前的版本使用 ''AliasedBlockItem'' 而非 ''BlockItem'',对于 1.21.2 及之后的版本需要调用 ''useItemPrefixedTranslationKey()''
  
 <code java [enable_line_numbers="true"] TutorialBlocks.java> <code java [enable_line_numbers="true"] TutorialBlocks.java>
 +    // 对于 1.21.2 之前的版本:
     public static final CropBlock CUSTOM_CROP = register("custom_crop", new CustomCropBlock(AbstractBlock.Settings.create().nonOpaque().noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)));     public static final CropBlock CUSTOM_CROP = register("custom_crop", new CustomCropBlock(AbstractBlock.Settings.create().nonOpaque().noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)));
 +    
 +    // 对于 1.21.2 及之后的版本:
 +    public static final Block CUSTOM_CROP = register("custom_crop", CustomCropBlock::new, AbstractBlock.Settings.create().nonOpaque().noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP));
 </code> </code>
  
 <code java [enable_line_numbers="true"] TutorialItems.java> <code java [enable_line_numbers="true"] TutorialItems.java>
 +    // 对于 1.21.2 之前的版本:
     public static final Item CUSTOM_SEEDS = register("custom_seeds", new AliasedBlockItem(TutorialBlocks.CUSTOM_CROP, new Item.Settings()));     public static final Item CUSTOM_SEEDS = register("custom_seeds", new AliasedBlockItem(TutorialBlocks.CUSTOM_CROP, new Item.Settings()));
 +    
 +    // 对于 1.21.2 及之后的版本:
 +    public static final Item CUSTOM_SEEDS = register("custom_seeds", settings -> new BlockItem(TutorialBlocks.CUSTOM_CROP, settings), new Item.Settings().useItemPrefixedTranslationKey());
 +</code>
 +
 +> 在[[blocks|添加方块]]教程中,我们写的 ''register'' 方法默认会为每个方块创建一个对应的物品。因此这里会在创建的 ''custom_seeds'' 的同时,还注册了名为 ''custom_crop'' 的物品。如果不需要创建这个物品,可以像这样创建个不注册物品的 ''registerBlockOnly'' 方法,或者给 ''register'' 方法添加个参数以决定是否注册物品。
 +> <code java TutorialBlocks.java>
 +  // ...
 +  public static final Block CUSTOM_CROP = registerBlockOnly("custom_crop", CustomCropBlock::new, AbstractBlock.Settings.create().nonOpaque().noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP));
 +  
 +  // ...
 +  
 +  private static Block registerBlockOnly(String path, Function<AbstractBlock.Settings, Block> factory, AbstractBlock.Settings settings) {
 +    final Identifier identifier = Identifier.of("tutorial", path);
 +    final RegistryKey<Block> registryKey = RegistryKey.of(RegistryKeys.BLOCK, identifier);
 +
 +    return Blocks.register(registryKey, factory, settings);
 +  }
 </code> </code>
  
-你很可能还需要 ''BlockRenderMapLayer'',这样你的作物才会显示为透明裁切的格式。在客户端初始化器中:+你很可能还需要 ''BlockRenderMapLayer'',这样你的作物才会显示为透明裁切的格式(参见 [[blockappearance]])。在客户端初始化器中:
  
 <code java [enable_line_numbers="true"] TutorialModClient.class> <code java [enable_line_numbers="true"] TutorialModClient.class>
Line 92: Line 115:
 </code> </code>
  
-最后,您还需要为您的作物创建方块状态,以给作物的每个生长阶段都注册单独的模型。+最后,您还需要为您的作物创建方块状态映射,以给作物的每个生长阶段都分配单独的模型。
  
 <code JavaScript src/main/resources/assets/tutorial/blockstates/custom_crop.json> <code JavaScript src/main/resources/assets/tutorial/blockstates/custom_crop.json>
Line 124: Line 147:
 } }
 </code> </code>
 +
 +> 种子物品也需要对应的物品模型和物品模型映射(对于 1.21.4 及之后的版本),具体做法参见 [[items]],这里不作详细描述。
  
 ===== 战利品表 ===== ===== 战利品表 =====
zh_cn/tutorial/crops.1724734505.txt.gz · Last modified: 2024/08/27 04:55 by solidblock