<本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。>

模型

出自Minecraft Wiki
前往: 導覽搜尋
Information icon.svg
此特性為Java版獨有。

方塊模型(Block Model)用於顯示遊戲裡的所有方塊,而物品模型(Item Model)用於顯示在玩家手上、頭上(頭盔欄)、地上、物品欄裡、物品展示框中和盔甲座上的物品。 因為某些方塊有不同的變種,方塊狀態(Block State)用來把不同狀態和對應模型聯繫起來。每個模型和方塊狀態擁有各自的.json格式檔案。用在物品欄的顯示狀態也在這些檔案中定義。

檔案路徑[編輯 | 編輯原始碼]

在JSON檔案中,使用形如命名空间:名称的命名空間ID(命名空間mincraft:可以省略)表示實際檔案路徑,詳見命名空間ID#實際檔案路徑

在模型檔案中,形如命名空间:名称的命名空間ID對應的實際路徑為assets/命名空间/对象类型/名称.后缀名,其中名称可以使用多級子資料夾,用/分隔各級檔案目錄。如namespace:foo/bar/baz(foo和bar是檔案目錄,baz是真正的檔案名)。

命名空間ID所指定的對象和其對應的对象类型后缀名如下:

對象 对象类型的值 后缀名的值
方塊狀態 blockstates json
模型 models json
材質 textures png

方塊狀態[編輯 | 編輯原始碼]

某些方塊擁有不同的變種(例如可以開關的),因此每個方塊有各自的方塊狀態檔案來列出所有存在的變種並連接到對應的模型。方塊也可以同時由不同的模型組合,稱為「multipart」。然後模型會根據當前的方塊狀態而被調用。

這些檔案儲存在assets/<namespace>/blockstates中。這些檔案會根據名稱來直接使用,因此不同名字的方塊狀態檔案不會影響其他的方塊狀態檔案。

  • 根標籤
    •  variants:設定變種與對應的模型,列出此方塊的所有變種。
      • 或者 一個變種鍵名為由逗號分隔的方塊狀態。只有一個變種的方塊狀態使用""為變種名。每個變種可以擁有單個模型或者模型的列表。如果使用列表,列表內使用不同的標籤指定不同模型,遊戲渲染時將會在列表內隨機選擇一個模型。物品展示框被視為方塊,用於無地圖物品展示框使用"map=false",帶有地圖的物品展示框使用"map=true"
        • 一個模型:同一個變種以列表形式指定多個模型時,才能使用該標籤。所有指定的模型在遊戲中隨機出現。標籤內指定模型的屬性。
          •  model:指定模型檔案的路徑,格式為命名空間ID
          •  x:模型相對於x軸的旋轉,增量90度。
          •  y:模型相對於y軸的旋轉,增量90度。
          •  uvlock:可為truefalse(預設)。設定為true將鎖定方塊材質的旋轉方向。這樣在使用上面的 x y標籤時材質將不會跟著方塊一起旋轉。
          •  weight:設定模型在遊戲中被選用的機率,預設為1(=100%)。如果多於一個模型被用在同一個變種,每個模型被選中的機率將會為此模型的weight值除以所有模型weight的總和。(例如,三個weight分別為1,1和2的模型。他們weight的總和為1+1+2=4。這三個模型被調用的機率則分別為1/4,1/4和2/4,也可以說為25%,25%和50%。)
        •  model:指定模型檔案的路徑,格式為命名空間ID
        •  x:模型相對於x軸的旋轉,增量90度。
        •  y:模型相對於y軸的旋轉,增量90度。
        •  uvlock:可為truefalse(預設)。設定為true將鎖定方塊材質的旋轉方向。這樣在使用上面的 x y標籤時材質將不會跟著方塊一起旋轉。
    •  multipart:取代了 variants,基於方塊狀態屬性以來組合模型。
      • 一種情況:確定一種情況,並決定應用在這種情況下的模型。
        •  when:列出該使用模型的必須滿足的情況。當未設定時,總是使用該模型。
          •  OR:如果該標籤包含的任意一個條件返回為true時匹配。不能同時設定其他單獨的情況。
            • 一個條件:列出方塊必須匹配才能返回true的情況。
              •  狀態:方塊狀態。一個鍵值對只能規定一個方塊狀態。但方塊狀態可以有多個值,由|來分隔,使得不同狀態均可以匹配。
          •  狀態:方塊狀態名稱。只能規定一個方塊狀態。但方塊狀態可以有多個值,由|來分隔,使得不同狀態均可以匹配。不能和 OR標籤同時出現。
        •  apply:指定使用的模型及其屬性。可以擁有單個模型或者模型的列表。如果使用列表,列表內使用不同的標籤指定不同模型,遊戲渲染時將會在列表內隨機選擇一個模型。
          • 一個模型:apply以列表形式指定多個模型時,才能使用該標籤。所有指定的模型在遊戲中隨機出現。標籤內指定模型的屬性。
        •  x:模型相對於x軸的旋轉,增量90度。
        •  y:模型相對於y軸的旋轉,增量90度。
        •  uvlock:可為truefalse(預設)。設定為true將鎖定方塊材質的旋轉方向。這樣在使用上面的 x y標籤時材質將不會跟著方塊一起旋轉。
            •  weight:設定模型在遊戲中被選用的機率,預設為1(=100%)。如果多於一個模型,每個模型被選中的機率將會為此模型的weight除以所有模型weight的總和。(例如,三個weight分別為1,1和2的模型。他們weight的總和為4(1+1+2)。這三個模型被調用的機率則分別為141424,也可以說為25%、25%和50%。)
        •  model:指定模型檔案的路徑,格式為命名空間ID
        •  x:模型相對於x軸的旋轉,增量90度。
        •  y:模型相對於y軸的旋轉,增量90度。
        •  uvlock:可為truefalse(預設)。設定為true將鎖定方塊材質的旋轉方向。這樣在使用上面的 x y標籤時材質將不會跟著方塊一起旋轉。
"uvlock": true "uvlock": false
Uvlock true.png Uvlock false.png

示例:牆上的火把[編輯 | 編輯原始碼]

牆上的火把有若干個變種:朝向四個不同方向。以下這個示例取自檔案wall_torch.json,你能在assets/minecraft/blockstates路徑下找到該檔案。

wall_torch.json
{
    "variants": {
        "facing=east": { "model": "block/wall_torch" },
        "facing=south": { "model": "block/wall_torch", "y": 90 },
        "facing=west": { "model": "block/wall_torch", "y": 180 },
        "facing=north": { "model": "block/wall_torch", "y": 270 }
    }
}

牆上的火把能被插在方塊的四個側面上,所以需要四個不同的變種,每個側面都得有一個變種。這四個變種分別叫作"facing=east""facing=west""facing=south"以及"facing=north"。四個變種的模型都用的是"block/wall_torch", 但這個模型因"y"設定的數值而在y軸方向上旋轉了幾個90度,這樣被插在不同側面上的火把看起來才都十分協調。

示例:草地[編輯 | 編輯原始碼]

草地有兩個變種,第一個變種有四個不同的模型。以下這個示例取自檔案grass_block.json,你能在assets/minecraft/blockstates路徑下找到該檔案。

grass_block.json
{
    "variants": {
        "snowy=false": [
            { "model": "block/grass_block" },
            { "model": "block/grass_block", "y": 90 },
            { "model": "block/grass_block", "y": 180 },
            { "model": "block/grass_block", "y": 270 }
        ],
        "snowy=true":  { "model": "block/grass_block_snow" }
    }
}

不覆雪的草地 ("snowy=false") 擁有四個模型,這四個模型都使用的是同一個方塊模型,但模型被旋轉了幾個90度。因為有四個模型而其中任何一個都沒使用 weight標籤,所以在你放置一個(無雪的)草地的時候,每個模型都有1÷(1+1+1+1)=25%的機率被使用,也就是說這個草地朝向東南西北任何一個方向都有可能。

示例:橡木柵欄[編輯 | 編輯原始碼]

橡木柵欄使用了multipart這個格式.。以下這個示例取自assets/minecraft/blockstates路徑下的檔案fence.json

oak_fence.json
{
    "multipart": [
        {   "apply": { "model": "block/oak_fence_post" }},
        {   "when": { "north": "true" },
            "apply": { "model": "block/oak_fence_side", "uvlock": true }
        },
        {   "when": { "east": "true" },
            "apply": { "model": "block/oak_fence_side", "y": 90, "uvlock": true }
        },
        {   "when": { "south": "true" },
            "apply": { "model": "block/oak_fence_side", "y": 180, "uvlock": true }
        },
        {   "when": { "west": "true" },
            "apply": { "model": "block/oak_fence_side", "y": 270, "uvlock": true }
        }
    ]
}

第一個模型,柵欄柱,是一直使用著的,而其他模型只在某些條件下使用。柵欄橫帶板只有在其他方塊與該柵欄相鄰時才出現。可橫帶板是有朝向的,於是橫帶板的模型就被旋轉了幾個90度來用,這樣的話所需的模型數量就能減至兩個了,一個是柵欄柱,一個是橫帶板。與在Java版1.8中用到的5個模型、16個變種相比,這算是個相當大的改進了。

示例:紅石線[編輯 | 編輯原始碼]

紅石線模型使用multipart格式。以下這個示例取自assets/minecraft/blockstates路徑下的檔案redstone_wire.json

redstone_wire.json
{
    "multipart": [
        {   "when": { "OR": [
                {"north": "none", "east": "none", "south": "none", "west": "none"},
                {"north": "side|up", "east": "side|up" },
                {"east": "side|up", "south": "side|up" },
                {"south": "side|up", "west": "side|up"},
                {"west": "side|up", "north": "side|up"}
            ]},
            "apply": { "model": "block/redstone_dust_dot" }
        },
        {   "when": { "OR": [
                { "north": "side|up" },
                { "north": "none", "east": "none", "south": "side|up", "west": "none" }
            ]},
            "apply": { "model": "block/redstone_dust_side0" }
        },
        {   "when": { "OR": [
                { "south": "side|up" },
                { "north": "side|up", "east": "none", "south": "none", "west": "none" }
            ]},
            "apply": { "model": "block/redstone_dust_side_alt0" }
        },
        {   "when": { "OR": [
                { "east": "side|up" },
                { "north": "none", "east": "none", "south": "none", "west": "side|up" }
            ]},
            "apply": { "model": "block/redstone_dust_side_alt1", "y": 270 }
        },
        {   "when": { "OR": [
                { "west": "side|up" },
                { "north": "none", "east": "side|up", "south": "none", "west": "none" }
            ]},
            "apply": { "model": "block/redstone_dust_side1", "y": 270 }
        },
        {   "when": { "north": "up" },
            "apply": { "model": "block/redstone_dust_up" }
        },
        {   "when": { "east": "up" },
            "apply": { "model": "block/redstone_dust_up", "y": 90 }
        },
        {   "when": { "south": "up" },
            "apply": { "model": "block/redstone_dust_up", "y": 180 }
        },
        {   "when": { "west": "up" },
            "apply": { "model": "block/redstone_dust_up", "y": 270 }
        }
    ]
}

紅石粉的模型是一步步地創建的。第一個情況決定了紅石粉中心的點狀模型redstone_dot的使用條件:東、南、西、北四個方向都為「none」,或當兩個形成拐角的方向為upside時。

最後的四種情況檢查west是否為up,如果是,則應用模型redstone_up

方塊模型[編輯 | 編輯原始碼]

資料夾assets/<namespace>/models/block存有所有方塊狀態檔案指定的模型檔案。可以更改檔案的名稱,但必須與方塊狀態檔案中使用的名稱一致。

  • 根標籤
    •  parent:繼承其他模型檔案,格式為命名空間ID。如果同時設定了"parent""elements",那麼此模型的"elements"標籤將覆蓋父類模型"parent"下的"elements"標籤。
      • 可以設定為"builtin/generated"以使用從指定圖標創建的模型。請注意,僅支持一層,且只能通過方塊狀態檔案來實現旋轉。
    •  ambientocclusion:是否使用環境遮擋,預設為true。如果設定了"parent",則其父模型的ambientocclusion標籤會覆蓋該模型的ambientocclusion標籤。[1]
    •  display:列出物品模型於不同位置下的顯示設定。
      •  位置鍵名可以是thirdperson_righthandthirdperson_lefthandfirstperson_righthandfirstperson_lefthandguiheadgroundfixed。物品模型於不同位置下的顯示設定。分別設定旋轉,平移和縮放。fixed指的是當被擺放在物品展示框上時,其他的顯示位置如同其名。值得注意的是平移優先於旋轉。
        •  rotation:根據[x, y, z]格式,使模型相對於對應軸進行旋轉。
        •  translation:根據[x, y, z]格式,使模型相對於對應軸進行移動。如果值大於80,會作為80處理,小於-80時則看作-80。
        •  scale:根據[x, y, z]格式,使模型相對於對應軸進行縮放。當值大於4時,效果等同於4。
    •  textures:定義方塊粒子的材質以及模型所使用的材質變數。鍵值可以為材質檔案的路徑,格式為命名空間ID,也可以為另一個材質變數。
      •  particle:方塊對應的粒子的材質。玩家在地獄傳送門中時也會使用此材質。注意:所有非模型渲染的方塊的破壞可以為硬編碼。
      •  材質變數名定義一個材質變數。
    •  elements:列出模型的所有元素,這些元素只能為長方體形態。如果同時設定了"parent""elements",此模型的"elements"標籤將覆蓋父類模型"parent"下的"elements"標籤。
      • 一個元素:
        •  from:根據[x, y, z]格式,指定一個長方體的起始點。數值必須為-16到32之間。
        •  to:根據[x, y, z]格式,指定一個長方體的結束點。數值必須為-16到32之間。
        •  rotation:設定元素的旋轉。
          •  origin:根據坐標[x, y, z]設定旋轉中心。
          •  axis:旋轉的一個且只能為一個軸,可以為"x""y""z"
          •  angle:旋轉的角度。可以為45到-45度,以22.5度為增量。
          •  rescale:是否縮放為整個長方體大小。可以為"true""false"。預設為"false"
        •  shade:是否渲染陰影。可以為"true""false"。預設為"true"
        •  faces:包含單個"element"的所有面。若有一個面沒有定義,則不渲染此面。
          •  鍵名為downupnorthsouthwesteast。包含指定面的所有屬性。
            •  uv:根據[x1, y1, x2, y2]格式,指定所使用的材質圖片的區域。如果未設定,它的預設值等於元素的xyz位置。若此值低於0或高於16,則材質顯示將會不正常。若x1x2坐標對調,材質也將會被翻轉(例:從原本的0, 0, 16, 16變為16, 0, 0, 16)。UV為可選的,若未指定,則會自動根據元素的位置生成。
            •  texture:指定所使用的材質變數,變數前加上#。材質變數於上文的材质变量名定義。
            •  cullface:指定當方塊的指定面被渲染不透明方塊覆蓋時,父標籤 所定義的面是否不渲染。指定的面可以為:down, up, north, south, west, 或 east。也就是說,指定渲染時把這個面視為方塊的哪一個表面。同時,該面面的亮度計算等同於方塊的指定面, and if unset, defaults to the side.
            •  rotation:根據特定的角度旋轉材質。可以為0,90,180或270。預設為0。旋轉不會影響到uv所指定的材質部分,而是此部分的旋轉角度。
            •  tintindex:是否使用硬編碼對該材質進行重新著色。預設不使用著色和任何著色數值。注意只有特定方塊可以著色,其他方塊設定此項無效。

示例:直立的火把[編輯 | 編輯原始碼]

為簡單起見,此示例只介紹直立的火把,代碼由儲存於assets/minecraft/models/block中的檔案torch.jsontemplate_torch.json定義。

template_torch.json
{
    "ambientocclusion": false,
    "textures": {
        "particle": "#torch"
    },
    "elements": [
        {   "from": [ 7, 0, 7 ],
            "to": [ 9, 10, 9 ],
            "shade": false,
            "faces": {
                "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" },
                "up":   { "uv": [ 7,  6, 9,  8 ], "texture": "#torch" }
            }
        },
        {   "from": [ 7, 0, 0 ],
            "to": [ 9, 16, 16 ],
            "shade": false,
            "faces": {
                "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
                "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
            }
        },
        {   "from": [ 0, 0, 7 ],
            "to": [ 16, 16, 9 ],
            "shade": false,
            "faces": {
                "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
                "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
            }
        }
    ]
}

此文檔被用於創建火把的模型,此模型被普通火把、紅石火把靈魂火把使用。"elements"標籤下創建了三個元素,或者說三個長方體。因為只定義了兩個面,所以每個長方體只有兩個面會在遊戲裡被渲染。"uv"指定了材質所使用的區域。材質變數"#torch"用於指定方塊的粒子材質和元素的材質,雖然這裡的"#torch"還未定義路徑。

torch.json
{
    "parent": "block/template_torch",
    "textures": {
        "torch": "blocks/torch"
    }
}

此檔案為普通火把的地上擺放模型。會先讀取並繼承其父類檔案"parent"(torch.json)下的設定。然後為父檔案使用的材質變數的定義路徑,定義為普通火把的材質路徑。自此,這個普通火把的模型就為父類定義的模型,而材質和粒子材質則為自己定義的路徑材質。

示例: 標準方塊[編輯 | 編輯原始碼]

此示例為Minecraft裡大部分方塊的基本結構。這部分方塊使用同一個基本模型,以此模型使用他們的材質,如上例子。此cube.json示例取自assets/minecraft/models/block

cube.json
{
  "elements": [
    {
      "from": [ 0, 0, 0 ],
      "to": [ 16, 16, 16 ],
      "faces": {
        "down":  { "texture": "#down", "cullface": "down" },
        "up":    { "texture": "#up", "cullface": "up" },
        "north": { "texture": "#north", "cullface": "north" },
        "south": { "texture": "#south", "cullface": "south" },
        "west":  { "texture": "#west", "cullface": "west" },
        "east":  { "texture": "#east", "cullface": "east" }
      }
    }
  ]
}

上文中提到過的將不會再朗讀。使用"cullface": "down"會在方塊底面有方塊遮擋時,不渲染此面。其他幾個面同理。

示例:樹苗[編輯 | 編輯原始碼]

此示例為所有樹苗使用的基本結構(還沒有為樹苗指定材質)。此模型為cross.json,材質會在例如oak_sapling.json之類的檔案裡定義。這兩個檔案都存放在assets/minecraft/models/block資料夾下。

cross.json
{
  "ambientocclusion": false,
  "textures": {
    "particle": "#cross"
  },
  "elements": [
    {
      "from": [ 0.8, 0, 8 ],
      "to": [ 15.2, 16, 8 ],
      "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
      "shade": false,
      "faces": {
        "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" },
        "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }
      }
    },
    {
      "from": [ 8, 0, 0.8 ],
      "to": [ 8, 16, 15.2 ],
      "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
      "shade": false,
      "faces": {
        "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" },
        "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }
      }
    }
  ]
}

一個普通的樹苗形狀,為兩個元素旋轉45度。因此要把原點和指定的旋轉軸設定為對應的數值,然后角度設為45,並把"rescale"設定為true"rescale": true的作用是讓旋轉之後的材質拉伸為旋轉前的寬度(見下圖)。

"rescale": true "rescale": false
Block model rescale true.png Block model rescale false.png

示例:將多個材質組合到一個檔案[編輯 | 編輯原始碼]

使用"uv"組合,材質可以從一個檔案讀取,檔案的不同部分用於方塊的不同面。"uv"不會按像素提取檔案,而是而是按照圖片大小的比例(以16為單位)。比如,使用"uv": [0,0, 16,8]會提取圖片的上半部分:從坐標(016, 016)也就是(0,0),即最左上方的像素,到(1616, 816)也就是(100%,50%),即右側中間的像素。因為是按百分比計算的,所以將材質圖片修改為到32x32、64x64等,都不需要更改模型檔案。

Fletching Table textures.png

在這個例子中,製箭台(如圖)用了組合材質(存儲於fletching_table.png):頂部的16×16像素(如果把材質修改為32像素寬,那就是頂部的32x32,依此類推,模型檔案不需要修改)作為方塊的頂部材質,中間的16x16像素作為方塊的前後兩面,底部16x16作為其他面。底部材質是birch_planks樺木木材)。對於以上三個材質,模型檔案可以這樣寫:

{
    "parent": "block/cube",
    "textures": {
        "particle": "block/fletching_table",
        "all": "block/fletching_table",
        "bottom": "block/birch_planks"
    },
    "elements": [
        {
           "from": [ 0, 0, 0 ],
            "to": [ 16, 16, 16 ],
            "faces": {
                "down":  { "texture": "#down", "cullface": "bottom" },
                "up":    { "uv": [0,0, 16,5.34], "texture": "#all", "cullface": "up" },
                "north": { "uv": [0,5.35, 16,10.66], "texture": "#all", "cullface": "north" },
                "south": { "uv": [0,5.35, 16,10.66], "texture": "#all", "cullface": "south" },
                "west":  { "uv": [0,10.67, 16,16], "texture": "#all", "cullface": "west" },
                "east":  { "uv": [0,10.67, 16,16], "texture": "#all", "cullface": "east" }
            }
        }
    ]
}
Bone Block textures.png

如右圖,在這個例子中,只有兩個材質置於一個檔案,構成骨塊。對於這兩個材質,模型檔案代碼可以這樣寫:

{
    "parent": "block/cube",
    "textures": {
        "particle": "block/bone_block",
        "all": "block/bone_block"
    },
    "elements": [
        {
           "from": [ 0, 0, 0 ],
            "to": [ 16, 16, 16 ],
            "faces": {
                "down":  { "uv": [0,0, 16,8], "texture": "#all", "cullface": "down" },
                "up":    { "uv": [0,0, 16,8], "texture": "#all", "cullface": "up" },
                "north": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "north" },
                "south": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "south" },
                "west":  { "uv": [0,8, 16,16], "texture": "#all", "cullface": "west" },
                "east":  { "uv": [0,8, 16,16], "texture": "#all", "cullface": "east" }
            }
        }
    ]
}
Barrel textures.png

在這個例子中,四個材質都在同一個檔案中,以構成木桶。對於這4個材質,模型檔案可以這樣寫:

{
    "parent": "block/cube",
    "textures": {
        "particle": "block/barrel",
        "all": "block/barrel"
    },
    "elements": [
        {
           "from": [ 0, 0, 0 ],
            "to": [ 16, 16, 16 ],
            "faces": {
                "down":  { "uv": [8,8, 16,16], "texture": "#all", "cullface": "down" },
                "up":    { "uv": [8,0, 16,8], "texture": "#all", "cullface": "up" },
                "north": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "north" },
                "south": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "south" },
                "west":  { "uv": [0,8, 8,16], "texture": "#all", "cullface": "west" },
                "east":  { "uv": [0,8, 8,16], "texture": "#all", "cullface": "east" }
            }
        }
    ]
}

物品模型[編輯 | 編輯原始碼]

因為物品模型沒有變種,所以沒有設定變種的必要。檔案路徑assets/<namespace>/models/item下存放著所有的物品模型檔案。檔案的名字為硬編碼,因此不應修改檔案名。

  • 根標籤
    •  parent:繼承其他模型檔案,格式為命名空間ID。如果同時設定了"parent""elements",此模型的"elements"標籤將覆蓋前一個模型下的"elements"標籤。
    •  display:列出物品模型於不同位置下的顯示設定。
      •  位置鍵名可以是thirdperson_righthandthirdperson_lefthandfirstperson_righthandfirstperson_lefthandguiheadgroundfixed。物品模型於不同位置下的顯示設定。分別設定旋轉,平移和縮放。fixed指的是當被擺放在物品展示框上時,其他的顯示位置如同其名。值得注意的是平移優先於旋轉。
        •  rotation:根據[x, y, z]格式,使模型相對於對應軸進行旋轉。
        •  translation:根據[x, y, z]格式,使模型相對於對應軸進行移動。如果值大於80,會作為80處理,小於-80時則看作-80。
        •  scale:根據[x, y, z]格式,使模型相對於對應軸進行縮放。當值大於4時,效果等同於4。
    •  textures:定義物品粒子的材質以及模型所使用的材質變數。鍵值可以為材質檔案的路徑,格式為命名空間ID,也可以為另一個材質變數。
      •  layer數字僅用於指定在物品欄內使用的物品的圖標。允許有超過一層(比如生怪蛋),但是每個物品可能的層數都是硬編碼的。必須結合"builtin/generated"能用。
      •  particle:物品對應的粒子的材質。用於確定食物產生的碎屑粒子,以及確定屏障粒子(但它的破壞方塊可以總是永遠是items/barrier.png),否則將使用"layer0"。
      •  材質變數名定義一個材質變數並分配材質。
    •  gui_light:僅在gui中使用。可以是frontside。設為side,模型的光照為由左上至右下。設為front,模型的光照為由前至後。
    •  elements:列出模型的所有元素,這些元素只能為長方體形態。如果同時設定了"parent""elements",此模型的"elements"標籤將覆蓋父類模型"parent"下的"elements"標籤。
      • 一個元素:
        •  from:根據[x, y, z]格式,指定一個長方體的起始點。數值必須為-16到32之間。
        •  to:根據[x, y, z]格式,指定一個長方體的結束點。數值必須為-16到32之間。
        •  rotation:設定元素的旋轉。
          •  origin:根據坐標[x, y, z]設定旋轉中心。
          •  axis:旋轉的一個且只能為一個軸,可以為"x""y""z"
          •  angle:旋轉的角度。可以為45到-45度,以22.5度為增量。
          •  rescale:是否縮放為整個長方體大小。可以為"true""false"。預設為"false"
        •  faces:包含單個"element"的所有面。若有一個面沒有定義,則不渲染此面。
          •  鍵名為downupnorthsouthwesteast。包含指定面的所有屬性。
            •  uv:根據[x1, y1, x2, y2]格式,指定所使用的材質圖片的區域。如果沒指定,則預設根據此element的xyz坐標設定。若此值低於0或高於16,則材質顯示將會不正常。若x1x2坐標對調,材質也將會被翻轉(例:從原本的0, 0, 16, 16變為16, 0, 0, 16)。UV為可選的,若未指定,則會自動根據元素的位置生成。
            •  texture:指定所使用的材質變數,變數前加上#。材質變數於上文的材质变量名定義。
            •  cullface:指定的面可以為:down, up, north, south, west, 或 east。該面面的亮度計算等同於方塊的指定面, and if unset, defaults to the side.
            •  rotation:根據特定的角度旋轉材質。可以為0,90,180或270。預設為0。旋轉不會影響到uv所指定的材質部分,而是此部分的旋轉角度。
            •  tintindex:確定是否使用硬編碼對該材質進行重新著色。預設情況下不著色,任何數字都會決定著色器使用顏色(除了生怪蛋,設定為0會使它使用第一種顏色,設定為1會使它使用第二種顏色)。請注意,只有特定的物品或物品的特定層(例如藥水)可以著色,其他物品設定此項無效。
    •  overrides:指定基於物品情況標籤而覆寫不同模型的情況。所有情況都按從上到下的順序進行檢測,直到有完全匹配的述詞。但是,如果已經被覆寫過一次,則會忽略覆寫,這可以避免在覆寫到同一模型時出現遞歸。
      • 某一種情況。
        •  predicate:指定情況。
          •  情況標籤名一個情況標籤。參見物品標籤查閱所有可用的標籤。
        •  model:當符合情況時使用的模型檔案的路徑,格式為命名空間ID

簡單示例:平面床[編輯 | 編輯原始碼]

這個例子用舊版本Java版找到的材質替換物品床的渲染,比如Red Bed 2D.png。這個檔案位於assets/minecraft/models/item資料夾下的「red_bed.json」:

{
    "parent": "item/generated",
    "textures": {
        "layer0": "item/red_bed"
    }
}

此處的例子中,parent被設定為item/generated,表示這個物品模型是平坦的材質。在textures中,layer0被設定為這個物品的應有材質;此處即為red_bed,其路徑為assets/minecraft/textures/item資料夾。「red」可以被替換為其他顏色的床,但必須被放在不同的JSON檔案(示例:black_bed.json、 green_bed.json,以此類推)。在textures/item資料夾中必須有物品材質檔案(layer0所要求的內容);可以使用下列材質:

可將上述檔案重命名為<颜色>_bed(保留擴展名.png)並放入assets/minecraft/textures/item資料夾。請注意與layer0中引用的材質名稱相匹配。

物品標籤[編輯 | 編輯原始碼]

有些物品可以使用額外的標籤進行模型覆寫的判斷。以下為可用的標籤列表。

  • "angle":角度,判斷羅盤的角度,以十進位小於1的數值表達。
  • "blocking":格擋,判斷盾牌是否為格擋狀態。格擋時為1
  • "broken":破損,判斷鞘翅是否破損。破損時為1
  • "cast":拋擲,判斷釣竿是否已拋出。已拋出時為1
  • "cooldown":冷卻,判斷終界珍珠/歌萊果的剩餘冷卻時間,以十進位、0到1之間的數值表達。
  • "damage":損傷值,判斷擁有耐久值的物品的已受損程度,以十進位、0到1之間的數值表達。
  • "damaged":受損,判斷擁有耐久值的物品是否為已受損狀態。已受損時為1。若物品擁有Unbreakable標籤時,此數值為0,且"damage"標籤的數值可以不為0。
  • "lefthanded":指定被左手玩家使用的模型,會影響其在物品欄的顯示樣式,以及玩家拿起或穿在身上時的視覺樣式。
  • "pull":拉伸程度,判斷弓被拉伸的程度,以十進位,0到1之間的數值表達。沒被拉伸時為0,被完全拉伸時為1
  • "pulling":拉伸,判斷弓是否被拉伸。被拉伸時為1
  • "throwing":用於三叉戟以判斷三叉戟是否即將被玩家扔出。如果為1,則三叉戟準備扔出。
  • "time":時間,判斷時鐘的時間,以十進位,0到1之間的數值表達。
  • "custom_model_data": 自訂模型,用於使用自訂模型的物品,用整數表達。

示例:火把[編輯 | 編輯原始碼]

此例子是火把作為物品時的顯示模型。模型為存放在assets/minecraft/models/item下的torch.json

torch.json
{
  "parent": "item/generated",
  "textures": {
    "layer0": "block/torch"
  },
  "display": {
    "thirdperson_righthand": {
      "rotation": [ -90, 0, 0 ],
      "translation": [ 0, 1, -3 ],
      "scale": [ 0.55, 0.55, 0.55 ]
    },
    "firstperson_lefthand": {
      "rotation": [ 0, -135, 25 ],
      "translation": [ 0, 4, 2 ],
      "scale": [ 1.7, 1.7, 1.7 ]
    }
  }
}

因為"parent"標籤所使用的父類模型為"builtin/generated",所以物品形態的火把模型使用遊戲內置生成的2D圖像模型。而生成所使用的圖像由"layer0"標籤定義,這個物品模型使用的材質圖片同時也是方塊模型使用的材質。因為硬編碼規定火把只有一個圖層,所以給予火把添加額外的圖層是沒用的。此外,通過設定display屬性,可以保證此物品模型在不同情況下的正確顯示。火把不能放在玩家的頭上,也在物品欄中使用平面圖標,所以沒必要定義戴在頭上時和GUI中的display設定。為了使模型在第一人稱視角和第三人稱視角中與玩家的左手或右手對齊,需要旋轉,平移和縮放模型,這是針對兩種情況分別進行的。

示例:釣竿[編輯 | 編輯原始碼]

此處以釣竿為例。模型為存放在assets/minecraft/models/item下的fishing_rod.json

fishing_rod.json
{
  "parent": "item/handheld_rod",
  "textures": {
    "layer0": "item/fishing_rod_uncast"
  },
  "overrides": [
    {
      "predicate": {
        "cast": 1
      },
      "model": "item/fishing_rod_cast"
    }
  ]
}
fishing_rod_cast.json
{
    "parent": "item/fishing_rod",
    "textures": {
        "layer0": "item/fishing_rod_cast"
    }
}

此釣竿的材質在非拋擲的情況下為layer0所指向的材質路徑檔案fishing_rod_uncast.png。當投擲出去後(cast1時),改為使用"item/fishing_rod_cast"路徑下的物品模型和此模型下的定義材質路徑"items/fishing_rod_cast"

歷史[編輯 | 編輯原始碼]

Clock.png
此條目需要更新。

條目中某些信息已經不符合當前版本情況。

Java版
1.7.213w36a花現在被放置時像高草一樣不會位於方塊中間。
1.814w06a加入了自訂方塊模型。
14w07a重寫模型格式。現在不僅有「平面」,還有「平面」和「長方體」。對象的旋轉也被限制為每個對象以22.5度遞增的方向旋轉。
14w11a固體方塊上的光照不再使方塊內部的部分完全變黑。
14w11b通用方塊現在載入模型,而不是預設的形狀。
2014年4月12日TheMogMiner發布了關於模型格式即將更改的文章。
14w17a將剩餘的大部分固體方塊轉換為模型格式。
添加"rotateVariantTextures"通過旋轉保存uv細節。
14w25a從uv定義中移除方向屬性,並將其替換為顯式材質引用。"textureFacing""texture"參數替換,其前綴為井號(#)。
"useAmbientOcclusion"重命名為"ambientocclusion"。
"rotateVariantTextures"重命名為"UV lock"。
"cull"重命名為"cullface",指定選擇的相鄰面的反面。
旋轉變得更加冗長,現在它變得更清晰因為它只能發生在一個軸上。"cross"模型的兩個面之一的旋轉現在是:"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
刪除了資料夾models/blocks/meshes,模型檔案現在存儲在models/block
添加了方塊狀態資料夾,並在models/block存儲了以前在其中找到的模型選擇檔案。
模型格式現在支持自訂物品模型。
14w27a用能夠更好地顯示內部數據的數據替換方塊狀態名。現在還沒有顯示某些方塊的所有數據。將在將來的版本中切換到使用實際存儲的數據,為此,數值化數據值將完全刪除,方塊狀態替代。
14w27b方塊狀態檔案現在支持隨機模型的模型數據。
14w30a加入了物品模型"builtin/entity"
1.8.2pre5標籤"translation"現在被限制在-24到24之間。
標籤"scale"現在被限制在4或更少。
1.915w31aUV現在是可選的,如果沒有提供,它將根據元素的位置自動生成。
不同的模型/材質對於不同的損害值,物品狀態,以及玩家是否是左撇子。這種方法適用於羅盤、時鐘和任何有耐久度的物體。它還包含弓和釣竿的附加標籤。
模型現在可以基於方塊狀態屬性(比如柵欄)組合在一起。因此,普通方塊模型集削減了近300個模型。
現在方塊模型JSON更嚴格了,不允許使用注釋和無引用標識符。
"display"標籤預設設定已經更改,"thirdperson""firstperson"標籤替換為"thirdperson_righthand""thirdperson_lefthand""firstperson_righthand",和"firstperson_lefthand"
"parent"和"elements"標籤現在可以共存,儘管頂級元素標籤覆蓋了以前的所有標籤。
刪除禁用備用方塊模型的選項。
1.1418w43a加入了新的物品模型屬性"custom_model_data"