User Tools

Site Tools


zh_cn:tutorial:blocks

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:blocks [2024/08/26 01:21] solidblockzh_cn:tutorial:blocks [2024/12/08 14:23] (current) – [下一步] solidblock
Line 1: Line 1:
 ====== 添加方块 ====== ====== 添加方块 ======
  
-将方块添加到你的模组过程与[[zh_cn:tutorial:items|添加物品]]类似。你可以创建 ''Block'' 或自定义类的实例,然后将其注册到 ''Registries.BLOCK''(1.19.3 以上版本)或 ''Registry.BLOCK'' (1.19.2 以下)注册表。你还需要提供纹理和方块状态或模型文件以提供方块外观。如需了解方块模型格式的更多信息,请参考[[https://zh.minecraft.wiki/模型|Minecraft Wiki 模型页面]]。+将方块添加到你的模组过程与[[zh_cn:tutorial:items|添加物品]]类似。你可以创建 ''Block'' 或自定义类的实例,然后将其注册到 ''Registries.BLOCK''(1.19.3 以上版本)或 ''Registry.BLOCK''(1.19.2 以下)注册表。你还需要提供纹理和方块状态或模型文件以提供方块外观。如需了解方块模型格式的更多信息,请参考[[https://zh.minecraft.wiki/模型|Minecraft Wiki 模型页面]]。
  
 ===== 创建方块 ===== ===== 创建方块 =====
 +:!: 使用你使用的是 1.21.2 或者之后的版本,请直接看 [[#在 1.21.2+ 中注册方块]]。
  
 首先创建 ''Block'' 的实例。该实例可以存储在任何地方,但是我们会在 ''ModInitializer'' 的顶部开始。''Block'' 构造器函数需要一个 ''AbstractBlock.Settings'' 实例,也就是用于配置方块属性的构造器。Fabric 提供一个 ''FabricBlockSettings'' 构造器类以及更多可用的选项。 首先创建 ''Block'' 的实例。该实例可以存储在任何地方,但是我们会在 ''ModInitializer'' 的顶部开始。''Block'' 构造器函数需要一个 ''AbstractBlock.Settings'' 实例,也就是用于配置方块属性的构造器。Fabric 提供一个 ''FabricBlockSettings'' 构造器类以及更多可用的选项。
Line 24: Line 25:
     // 对于 1.20.5 以下版本:     // 对于 1.20.5 以下版本:
     // public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.create().strength(4.0f));     // public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.create().strength(4.0f));
-    // 对于自 1.20.5 之后的版本:+    // 对于自 1.20.5 之后、1.21.2 以前的版本:
     public static final Block EXAMPLE_BLOCK = new Block(Block.Settings.create().strength(4.0f));     public static final Block EXAMPLE_BLOCK = new Block(Block.Settings.create().strength(4.0f));
          
Line 46: Line 47:
     // 对于 1.20.5 以下版本:     // 对于 1.20.5 以下版本:
     // public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.create().strength(4.0f));     // public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.create().strength(4.0f));
-    // 对于自 1.20.5 之后的版本:+    // 对于自 1.20.5 之后、1.21.2 以前的版本:
     public static final Block EXAMPLE_BLOCK = new Block(Block.Settings.create().strength(4.0f));     public static final Block EXAMPLE_BLOCK = new Block(Block.Settings.create().strength(4.0f));
          
Line 72: Line 73:
     // 对于 1.20.5 以下版本:     // 对于 1.20.5 以下版本:
     // public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.create().strength(4.0f));     // public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.create().strength(4.0f));
-    // 对于自 1.20.5 之后的版本:+    // 对于自 1.20.5 之后、1.21.2 之前的版本:
     public static final Block EXAMPLE_BLOCK = new Block(Block.Settings.create().strength(4.0f));     public static final Block EXAMPLE_BLOCK = new Block(Block.Settings.create().strength(4.0f));
          
Line 89: Line 90:
  
 ===== 注册方块的最佳实践 ===== ===== 注册方块的最佳实践 =====
 +:!: 本段不适用于 1.21.2 之后的版本。
 +
 有时你的模组有许多方块。如果这样注册,你会为每个方块都写这样复杂的代码,代码就会显乱。所以,类似于注册物品,我们为方块创建单独的类,以及一个实用方法以注册方块和物品。 有时你的模组有许多方块。如果这样注册,你会为每个方块都写这样复杂的代码,代码就会显乱。所以,类似于注册物品,我们为方块创建单独的类,以及一个实用方法以注册方块和物品。
  
Line 115: Line 118:
 } }
 </code> </code>
 +
 +===== 在 1.21.2+ 中注册方块 =====
 +在 1.21.2+ 中,要把 ''RegistryKey'' 添加到方块的 ''AbstractBlock.Settings'' 中,和物品的 ''Item.Settings'' 一起。看上去有点麻烦,不过好在 Minecraft 的 ''Blocks.//register//'' 和 ''Items.//register//'' 可以帮你做这些。
 +
 +<code java>
 +public class ExampleMod implements ModInitializer {
 +  public static final Block EXAMPLE_BLOCK = register("example_block", Block::new, Block.Settings.create().strength(4.0f));
 +
 +  private static Block register(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);
 +
 +    final Block block = Blocks.register(registryKey, factory, settings);
 +    Items.register(block);
 +    return block;
 +  }
 +}
 +</code>
 +
 +上面的代码中,''Blocks.//register//'' 会帮助你将注册表键先写到 ''AbstractBlock.Settings'' 中,然后创建方块实例再注册。''Items.//register//'' 会直接创建简单的 ''BlockItem'' 实例,使用和方块一样的 ID,然后注册。如果需要更加复杂的制作,例如创建 ''BlockItem'' 的子类,可以调用其他一些也叫做 ''Items.//register//'' 但是有不同方法签名的方法。
  
 ===== 给予方块外观 ===== ===== 给予方块外观 =====
Line 195: Line 218:
 在 1.17,破坏方块有所改变,定义采集工具和采集等级需要使用标签,请参考[[zh_cn:tutorial:tags|标签教程]]。我们需要将方块添加到以下标签: 在 1.17,破坏方块有所改变,定义采集工具和采集等级需要使用标签,请参考[[zh_cn:tutorial:tags|标签教程]]。我们需要将方块添加到以下标签:
  
- * 采集工具:''src/main/resources/data/minecraft/tags/**block**/mineable/<tooltype>.json'',其中 ''<tooltype>'' 可以是 ''axe''、''pickaxe''、''shovel''、''hoe''(对于 1.21 以下的版本,把“//**block**//”替换为“//**blocks**//”) +  * 采集工具:''src/main/resources/data/minecraft/tags/**block**/mineable/<tooltype>.json'',其中 ''<tooltype>'' 可以是 ''axe''、''pickaxe''、''shovel''、''hoe''(对于 1.21 以下的版本,把“//**block**//”替换为“//**blocks**//”) 
- * 采集等级:''src/main/resources/data/minecraft/tags/**block**/needs_<tier>_tool.json'',其中 ''<tier>'' 可以是:''stone''、''iron''、''diamond''(//不包括// ''netherite'')(对于 1.21 以下的版本,把“//**block**//”替换为“//**blocks**//”)+  * 采集等级:''src/main/resources/data/minecraft/tags/**block**/needs_<tier>_tool.json'',其中 ''<tier>'' 可以是:''stone''、''iron''、''diamond''(//不包括// ''netherite'')(对于 1.21 以下的版本,把“//**block**//”替换为“//**blocks**//”)
  
 <code JavaScript src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json> <code JavaScript src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json>
Line 297: Line 320:
 [[zh_cn:tutorial:blockstate|向方块添加简单状态,例如整数和布尔值]]。 [[zh_cn:tutorial:blockstate|向方块添加简单状态,例如整数和布尔值]]。
  
-[[zh_cn:tutorial:blockentity|给块方块实体,使之能有物品栏之类的高级状态]]。此外,还需要像 GUI 和自定义方块渲染。+[[zh_cn:tutorial:blockentity|给块方块实体,使之能有物品栏之类的高级状态]]。此外,还需要像 GUI 和自定义方块渲染。
  
 要让方块可燃(也就是说,可以被火燃烧),可使用 ''FlammableBlockRegistry'' 要让方块可燃(也就是说,可以被火燃烧),可使用 ''FlammableBlockRegistry''
zh_cn/tutorial/blocks.1724635278.txt.gz · Last modified: 2024/08/26 01:21 by solidblock