# Minecraft Modding - 簡單方塊
:::info
**記得使用 Minecraft 1.18.2 版本!**
:::
## Code
在模組路徑下的 `block` 資料夾下加入 `ModBlocks.java`,並加入程式碼:
```java=
class ModBlocks {
// 註冊「方塊」本身
private static Block registerBlock(String name, Block block) {
registerBlockItem(name, block); // 呼叫註冊方塊時,也註冊物品
return Registry.register(Registry.BLOCK, new Identifier(<主程式>.MOD_ID, name), block);
// ^^^^^^^^^^^^^^ 代表註冊(Rigister)的是方塊(BLOCK)
}
// 註冊方塊的「物品型態」(可有可無)
private static Item registerBlockItem(String name, Block block) {
// ⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄ 代表註冊(Rigister)的是物品(ITEM)
return Registry.register(Registry.ITEM, new Identifier(<主程式>.MOD_ID, name),
new BlockItem(block, new FabricItemSettings().group(ItemGroup.MISC)));
}
// 初始化函數
public static void registerModBlocks() {
System.out.println("Registering Mod Blocks for " + <主程式>.MOD_ID);
}
}
```
註冊方塊:
```java=
public static final Block RUBY_ORE = registerBlock("ruby_ore",
new Block(FabricBlockSettings.of(Material.STONE).strength(4.0f)
.breakByTool(FabricToolTags.PICKAXES, 2).requiresTool()));
```
其中,`breakByTool` 的第二個參數是工具等級,對照如下:
```
0 -> Wooden / Golden Pickaxe
1 -> Stone Pickaxe
2 -> Iron Pickaxe
3 -> Diamond Pickaxe
4 -> Netherite Pickaxe
```
常用 Settings:
```java=
of(Material.<material>) - 相當於<material>的材質
strength(<sec>f) - 挖掘時間
requiresTool() - 必須使用工具
```
最後記得在你的主程式呼叫**初始化函數**:
```java=
class <主程式> implement ModInitializer {
@Override
public void onInitialize() {
ModBlocks.registerModBlocks();
}
}
```
## Texture
檔案架構:
```
resource
└─ assets
└─ <ModId>
├─ blockstates
│ └─ <blockId>.json
├─ lang
│ └─ en_us.json
├─ models
│ ├─ block
│ │ └─ <blockId>.json
│ └─ item
│ └─ <blockId>.json
└─ textures
└─ block
└─ <blockId>.png
```
```json=
// blockstates/<blockId>.json
{
"variants": {
"": { "model": "testmod:block/ruby_ore" }
}
}
```
```json=
// models/block/<blockId>.json
{
"parent": "block/cube_all",
"textures": {
"all": "testmod:block/ruby_ore"
}
}
```
```json=
// models/item/<blockId>.json
{
"parent": "testmod:block/ruby_ore"
}
```
`blockstates` 主要是在描述一個方塊的六個面要用哪些 `models`;而 `models` 的檔案則是描述要從 `png` 檔取哪一個部分。
## 補充資料
[Block Models 教學](https://www.youtube.com/watch?v=3lECPqoSNeg&ab_channel=UncleJam)
[神的工具:Block Bench](https://www.blockbench.net/)
[進階方塊](https://hackmd.io/@Chocomint/FabricModding-Block)