การสร้าง Custom Block

เรียนรู้วิธีสร้างบล็อกใหม่ที่มีลวดลายแตกต่างกันในแต่ละด้าน

Custom Blocks หรือ "บล็อกที่สร้างเอง" เป็นวิธีที่ยอดเยี่ยมในการเพิ่มเนื้อหาใหม่ๆ ให้กับเกม ในบทเรียนนี้ เราจะมาลองสร้าง "Die Block" (บล็อกลูกเต๋า) ซึ่งมีความพิเศษคือ แต่ละด้านของลูกเต๋าจะมีลวดลายไม่เหมือนกัน (เลข 1-6) และเมื่อถือในมือจะเปลี่ยนเป็นสีแดง!

Custom Die Block

สิ่งที่คุณต้องเตรียม

หลักการทำงาน: เราจะใช้ Behavior Pack เพื่อกำหนดคุณสมบัติของบล็อก (เช่น รูปร่าง, การตกแต่ง) และใช้ Resource Pack เพื่อเก็บรูปภาพและเสียง

โครงสร้างไฟล์ของคุณควรจะเป็นแบบนี้:

Navigate Behavior Packs

ส่วนที่ 1: Behavior Pack

เริ่มจากสร้างโฟลเดอร์สำหรับ Behavior Pack ใน development_behavior_packs ตั้งชื่อว่า custom_block_behavior_pack

1. สร้างไฟล์ Manifest

สร้างไฟล์ manifest.json และใส่โค้ดนี้:

{
    "format_version": 2,
    "header": {
        "description": "Behavior Pack สำหรับบล็อกลูกเต๋า",
        "name": "Die Block BP",
        "uuid": "<UUID ที่ 1>",
        "version": [1, 0, 0],
        "min_engine_version": [1, 21, 80]
    },
    "modules": [
        {
            "description": "Die Block BP",
            "type": "data",
            "uuid": "<UUID ที่ 2>",
            "version": [1, 0, 0]
        }
    ]
}

2. สร้างไฟล์นิยามบล็อก (Block JSON)

สร้างโฟลเดอร์ blocks ขึ้นมา แล้วข้างในสร้างไฟล์ชื่อ die.json ไฟล์นี้จะเป็นตัวกำหนดคุณสมบัติทั้งหมดของบล็อกเราครับ

ให้ก๊อปปี้โค้ดด้านล่างนี้ไปใส่ (โค้ดนี้กำหนดรูปร่างและลายพื้นผิวของแต่ละด้าน):

{
    "format_version": "1.21.80",
    "minecraft:block": {
        "description": {
            "identifier": "demo:die"
        },
        "components": {
            "minecraft:geometry": "minecraft:geometry.full_block",
            "minecraft:material_instances": {
                "north": { "texture": "die_3" },
                "south": { "texture": "die_4" },
                "east": { "texture": "die_2" },
                "west": { "texture": "die_5" },
                "up": { "texture": "die_1" },
                "down": { "texture": "die_6" }
            },
            "minecraft:item_visual": {
                "geometry": "minecraft:geometry.full_block",
                "material_instances": {
                    "*": {
                        "texture": "die_red",
                        "render_method": "opaque"
                    }
                }
            }
        }
    }
}

*สังเกตว่าเรากำหนด Texture ให้แต่ละทิศไม่เหมือนกัน และใช้ die_red เวลาถือไอเทม

ส่วนที่ 2: Resource Pack

สร้างโฟลเดอร์ custom_block_resource_pack ใน development_resource_packs

1. สร้างไฟล์ Manifest

สร้างไฟล์ manifest.json และใส่โค้ดนี้:

{
            "format_version": 2,
            "header": {
                "description": "Resource Pack สำหรับบล็อกลูกเต๋า",
                "name": "Die Block RP",
                "uuid": "<UUID ที่ 1>",
                "version": [1, 0, 0],
                "min_engine_version": [1, 21, 80]
            },
            "modules": [
                {
                    "description": "Die Block RP",
                    "type": "resources",
                    "uuid": "<UUID ที่ 2>",
                    "version": [1, 0, 0]
                }
            ]
        }

2. เตรียมรูปภาพ Textures

คุณต้องสร้างรูปภาพขนาด 16x16 พิกเซล จำนวน 7 รูป ดังนี้:

(สำหรับบทเรียนนี้คุณสามารถบันทึกรูปตัวอย่างได้ครับ)

นำรูปทั้งหมดไปวางไว้ที่: custom_block_resource_pack
/textures/blocks

3. กำหนดชื่อ Terrain Texture

สร้างไฟล์ textures/terrain_texture.json เพื่อบอกเกมว่าชื่อ "die_1" คือไฟล์ไหน ก๊อปปี้โค้ดนี้ไปวาง:

{
    "resource_pack_name": "custom_block_resource_pack",
    "texture_name": "atlas.terrain",
    "padding": 8,
    "num_mip_levels": 4,
    "texture_data": {
        "die_1": { "textures": "textures/blocks/die_1" },
        "die_2": { "textures": "textures/blocks/die_2" },
        "die_3": { "textures": "textures/blocks/die_3" },
        "die_4": { "textures": "textures/blocks/die_4" },
        "die_5": { "textures": "textures/blocks/die_5" },
        "die_6": { "textures": "textures/blocks/die_6" },
        "die_red": { "textures": "textures/blocks/die_red" }
    }
}

4. กำหนดเสียงให้บล็อก Blocks.json

สร้างไฟล์ชื่อ blocks.json ในโฟลเดอร์หลักของ Resource Pack (custom_block_resource_pack) เพื่อกำหนดเสียงเวลาวางหรือทุบบล็อก ในที่นี้เราจะให้มันเสียงเหมือน "หิน" (Stone)

{
            "format_version": "1.21.40",
            "demo:die": {
                "sound": "stone"
            }
        }

5. การตั้งชื่อ

สร้างไฟล์ texts/en_US.lang แล้วใส่ข้อความนี้:

tile.demo:die.name=Die Block

ทดสอบในเกม

เข้าเกม Minecraft สร้างโลกใหม่ (อย่าลืมเปิด Cheat และเปิดใช้งานทั้ง Resource และ Behavior Packs) จากนั้นพิมพ์คำสั่งเพื่อเสกบล็อกออกมา:

/give @s demo:die

คุณจะได้ลูกเต๋าสีแดงมาถือในมือ แต่พอมันวางลงไป มันจะกลายเป็นลูกเต๋าปกติที่มีเลข 1-6 รอบด้าน!

ปัญหาที่พบบ่อย

ถ้าหา Resource Pack หรือ Behavior Pack ไม่เจอ:

ถ้าพิมพ์หา demo:die ไม่เจอในเกม:

ถ้า Texture (รูปภาพ) โหลดไม่ถูกต้อง:

ผลลัพธ์ที่ควรเป็น:
ทีนี้ลองวางบล็อกตรงไหนก็ได้ที่คุณต้องการ ลูกเต๋าจะเป็น สีแดง เมื่อถือในมือหรืออยู่ในช่องเก็บของ (Hotbar) เพราะเราตั้งค่า carried_textures ให้ใช้บล็อกสีแดงไว้

แต่เมื่อวางลงไปบนพื้น ด้านต่างๆ จะกลายเป็นลูกเต๋าหลากสีตามที่เรากำหนด และเมื่อเดินเหยียบบนบล็อกก็จะมีเสียงเหมือน หิน (Stone) ครับ