複製鏈接
請複製以下鏈接發送給好友

資源包

鎖定
資源包(Resource Pack)系統為材質包系統的API替代品,允許玩家更深度地自定義自己的Minecraft體驗。資源包允許玩家自定義材質模型音樂聲音、語言文件、終末之詩、菜單界面UI、閃爍標語的顯示本和字體,而不用修改任何代碼 [1] 
中文名
資源包
外文名
Resource Pack
登場作品
Minecraft

目錄

資源包Java版

資源包行為

自Java版1.14起默認的資源包配置。
資源包的選擇菜單,展示了兩個已選的資源包(不包括默認資源包),一個不支持的資源包和其他各種可用的資源包。
資源包可以放置在.minecraft裏面的resourcepacks文件夾。每個資源包都是一個子文件夾或一個.zip文件,這個文件裏面有resourcepacks文件夾。它被放置在文件夾裏面後,就可以從選項菜單中添加資源包,這個資源包可以從“可用的資源包”移動到“已選的資源包”。“已選的資源包”下面的默認資源會始終存在,並且不能被移除。
資源包會按照列表上的順序加載它們的資源。最下面的資源包(總是“默認”的那個)將會首先加載,然後每個資源包會代替上一個相同名稱的資源。默認資源包[編輯 | 編輯源代碼]
首先將資源包打包為resources.zip,然後將這個zip文件放入地圖文件夾裏就可以與地圖捆綁在一起了。當遊玩這個地圖時,資源包會自動出現於默認資源包的右上方。
通過向服務器屬性文件裏面resource-pack=一行更改為一個.zip文件的下載鏈接就能在服務器上設置默認資源包了。用户仍然可以選擇使用或者選擇不下載這個資源包。
舊材質(材質更新前的)在名為“Programmer Art”的資源包中可用。

資源包文件結構

  • (資源包名稱)
    • pack.mcmeta
    • pack.png
    • assets
      • icons
        • icon_16x16.png
        • icon_32x32.png
        • minecraft.icns
      • (命名空間)
        • sounds.json
        • blockstates
          • (blockstate).json
        • font
          • (字體)
        • icons
          • icon_16x16.png
          • icon_32x32.png
          • minecraft.icns
        • lang
          • (語言).json
        • models
          • block
            • (模型).json
          • item
            • (模型).json
        • particles
          • (粒子).json
        • sounds
          • (聲音).ogg
        • shaders
          • post
            • (post).json
          • program
            • (fragment shader).fsh
            • (program).json
            • (vertex shader).vsh
        • texts
          • (文本).txt
        • textures
          • block
            • (材質).png
          • colormap
            • (材質).png
          • effect
            • (材質).png
          • entity
            • (材質).png
            • (實體種類)
              • (材質).png
          • environment
            • (材質).png
          • font
            • (材質).png
          • gui
            • (材質).png
            • advancements
              • (材質).png
              • backgrounds
                • (材質).png
            • container
              • (材質).png
              • creative_inventory
                • (材質).png
            • presets
              • (材質).png
            • title
              • (材質).png
              • background
                • (材質).png
          • item
            • (材質).png
          • map
            • (材質).png
          • misc
            • (材質).png
          • mob_effect
            • (材質).png
          • models
            • armor
              • (材質).png
          • painting
            • (材質).png
          • particle
            • (材質).png

資源包內容

Minecraft是通過根目錄裏的pack.mcmeta來識別一個資源包的,這個文件的格式為JSON格式。
  • 根標籤
    • pack:保存資源包的信息
      • pack_format:資源包版本。如果這個數值與當前需要的數值不匹配,則資源包就會顯示一個錯誤,進行附加確認後才能加載資源包。在1.6.1(13w24a)至1.8.9中需要的數值為1,在1.9(15w31a)至1.10.2中為2,在1.11(16w32a)至1.12.2(1.13:17w47b)中為3,在1.13(17w48a)至1.14.4(1.15:19w46b)中為4,在1.15(1.15-pre1)至1.16.1(1.16.2:1.16.2-pre3)中為5,在1.16.2(1.16.2-rc1)至1.16.5為6,在1.17(20w45a以上)則為7。
      • description:在資源包菜單裏要顯示的資源包名稱。該文字將會顯示為2行。如果文字太長,那麼超長的部分就會被砍掉。
      • description: 包含一個原始JSON文本對象,它將在資源包菜單中顯示為包描述。與string標籤description具有相同的行為,但是它們不能一起存在。
    • language:包含了要向語言菜單裏添加的附加語言。
      • A language 一個語言的語言代碼,其與文件夾裏.lang的名字相同assets/minecraft/lang。
        • name:語言的完整名稱。
        • region:國家或地區名稱。
        • bidirectional:若為true,語言將會從右到左顯示。
根目錄也包含一個叫作pack.png的可選圖像,這個圖像將會在資源包選擇菜單中作為資源包的縮略圖顯示。

資源包語言

可以在資源包的assets/<命名空間>/lang文件夾內創建.json類型的語言文件。每個文件可以取代優先級低的或默認的同名文件,或者創建由pack.mcmeta定義的新語言。
.json文件裏的每一行都是標準的JSON格式"標識符":"名稱",其後緊接一個逗號。
標識符是遊戲尋找的某個特性的名稱,它不應該被更改。
名稱是顯示的名稱內容。例如,默認語言文件裏的石頭是"block.minecraft.stone":"Stone",其中
block.minecraft.stone
Stone是標識符,
是顯示的名稱。空行會被忽略。文件必須是正確的JSON語法,這意味着它以一個{開始,在每個鍵值對(最後一個除外)後有一個逗號,並以一個}結束。
語言文件只需要添加資源包確實要修改的內容。任何不在資源包內的名稱都會從下面的包中加載,或者如果沒有包修改了名稱,則從默認資源中加載。

資源包模型

模型是一些以JSON格式儲存的,擴展名為.json的文件,這些文件決定了方塊和物品的形狀和材質。
方塊使用assets/minecraft/blockstates的一個方塊狀態文件,來決定每個變種要從中加載的模型。同時,每個物品都有一個物品模型來決定它的模型,這個模型會從一個方塊模型里加載,包含了它自己自定義的模型,或者使用默認的“平面”或“實體”模型。
如果沒有被覆蓋,那麼在下面的資源包所使用的模型和方塊狀態仍然會被加載,這可能會導致一些材質和模型被上方的資源包使用,而沒有被再次加載。

資源包音效

資源包加載文件格式為.ogg或.fsb的附加音效。每個在資源包裏面的音效都會覆蓋下面的資源包。資源包包含一個sounds.json文件,其位置在assets/minecraft裏。與資源包其他的文件不同,sounds.json會合並其上一個資源包的音效,而不是完全覆蓋每個sounds.json文件。

資源包材質

要讓方塊或物品材質正常顯示,那麼它們的寬度和高度必須相等(如果是動態材質,那麼高度要是寬度的倍數);否則,只會顯示黑紫方格交錯的材質。對於其他多數材質,文件會被簡單的拉伸,以符合所需的尺寸。
多數固體方塊會把任何透明的地方變成完全不透明的。一些擁有類似於拼貼的透明區域方塊(類似於草),會把所有不透明度低於10%的像素變成全透明像素,其他像素變成完全不透明像素。其他方塊渲染材質會保留半透明區域。所有的半透明的物品和任何方塊/實體,都會默認支持半透明。
如果一個材質文件不存在於任何的資源包(包括默認資源包)中,那麼這個材質將會顯示為一個黑紫方格交錯的材質。

資源包動態材質

方塊和物品材質支持動態材質,在圖片的每一幀的下面放置另外一幀就能做成動態材質了。動態材質是被一個在相同目錄,相同名稱,以JSON格式存儲的.mcmeta文件進行控制。例如,stone.png的.mcmeta文件的文件名是stone.png.mcmeta。
  • 根標籤
    • animation:包含了動態材質的數據的標籤
      • interpolate:若為 true,Minecraft 將會在幀與幀之間生成一張間隔時間大於1的幀。默認為false。
      • width:方塊的寬度,以直接比例而不是像素為單位。這在原版中沒有使用,但是可以被mod使用以具有不是完整正方形的幀。
      • height:方塊的高度,以直接比例而不是像素為單位。這在原版中沒有使用,但是可以被mod使用以具有不是完整正方形的幀。
      • frametime:設置在每個遊戲刻內每一幀的時間增量。默認為1。
      • frames:一個幀列表。幀的顯示順序默認為從上至下。
        • 指定開始播放的幀的位置,最上面的一幀為 0
        • A frame 為每一幀指定附加數據
          • index:指定開始播放的幀的位置,最上面的一幀為 0
          • time:這一幀的顯示時間(單位:刻),覆蓋上面的“frametime”。
如果資源包裏沒有.mcmeta文件,並且材質是動態的,那麼遊戲將會認為這個材質不是動態材質,不會從下一個包繼續加載.mcmeta文件。如果一個維度不相同的材質沒有其對應的.mcmeta文件,那麼這個材質將會顯示為黑紫方格交錯的材質。

資源包村民

其材質assets/minecraft/textures/entity/villager
和assets/minecraft/textures/entity/zombie_villager裏。支持後綴名為.mcmeta的JSON格式文件用於指明可應用於帽子層的附加效果,位於相同目錄,與對應材質文件有相同名稱。例如,文件profession/farmer.png可以附帶具有一個名為profession/farmer.png.mcmeta的文件。
如果文件夾中不存在對應的.mcmeta文件,而材質文件中存在材質,則遊戲將加載默認設置,而不是從下方的資源包里加載.mcmeta文件。

資源包顏色圖

顏色圖是一個 256×256 像素的圖片,用於告訴遊戲在每個生物羣系要使用的顏色。它們的位置在assets/minecraft/textures/colormap裏。遊戲包含2張顏色圖,一張是foliage.png,指定植物如樹葉(除了樺木和雲杉木)和藤蔓的顏色;還有一張是grass.png,指定草和草方塊的顏色。顏色圖可以通過移除個別方塊上的tintindex標籤而被禁用。

資源包雜項

assets/minecraft/textures/misc裏的材質支持用一個以JSON格式儲存的.mcmeta文件來向材質應用附加效果。文件的位置與材質的位置處於同一目錄,與材質的文件名也一樣,除了.mcmeta後綴。例如,文件pumpkinblur.png對應的屬性文件的文件名為pumpkinblur.png.mcmeta。
  • 根標籤
    • texture:包含了材質的數據
      • blur:指定從近距離觀察時是否導致材質模糊。默認為false。
      • clamp:指定是否在原來的情況下以伸展材質代替平鋪材質。默認為false。
      • mipmaps:材質的自定義mipmap值。
如果資源包裏材質文件對應的.mcmeta文件缺失,那麼遊戲將會加載默認設置,而不是從下一個資源包中繼續加載.mcmeta文件。 [1] 

資源包文本

在assets/minecraft/texts裏的3個 UTF-8 格式的.txt文件儲存了遊戲要用來顯示的文本。
文件end.txt含有終末之詩的文本,使用了樣式代碼的顏色代碼來區分2個講話人,文本PLAYERNAME將會被玩家名稱代替。在展示完了這個文件的內容後,接着就會顯示credits.txt的內容。

資源包字體

字體文件指位於資源包中assets/<namespace>/font目錄下的JSON文件。該文件內含提供每個字符對應的資源位置和額外信息的列表。
minecraft:default給出了默認字體,而minecraft:alt給出了附魔台所用的默認字體。 提供字體時的資源位置應當包含文件擴展名。
  • 根標籤
    • providers: 提供加入該字體的信息的列表。
      • 提供字體的信息。內容取決於“type”標籤的值。
        • type: 該字體提供者的信息,可為以下選項之一。
          • bitmap: 位圖字體
            • file: 欲使用文件的資源位置,以assets/<namespace>/textures開始。
            • height: 可選。該字符的高度,以像素為單位。可以為負。該標籤與源材質中使用的區域不相關,僅用於重新調整顯示結果。
            • ascent: 該字體的上伸高度(基線至最高點的距離),以像素為單位。 這個值會使得字體的顯示結果出現垂直偏移。
            • chars: 一個字符串列表,包含該字體替換的字符及其在材質中的位置。列表所有元素的字符數必須相同。該列表中的一項元素對應材質等距分割的一行,每一個元素中的字符對應等距的一列。
          • legacy_unicode: 舊版Unicode字體。該字體格式已廢棄且僅在“強制Unicode字體”選項打開時才會優先使用。
            • sizes: assets/<namespace>/font目錄下的資源位置,給出一個描述每個字符的水平起訖位置(從0至15)的二進制文件。目標文件的拓展名必須為.bin。
            • template: assets/<namespace>/textures目錄下的資源位置,給出該字體應當使用的材質文件。遊戲會將該標籤中的%s 替換為被替換字符的十六進制代碼的前兩個字符,因此單個此種類的字體提供者可以指向多個貼圖文件。
          • ttf: TrueType字體.[需要更多信息]
            • file: assets/<namespace>/font目錄下的TrueType字體文件的資源位置。
            • shift: 該字體提供者的字體偏移。
              • 左側偏移
              • 下方偏移
            • size: 欲渲染的字體大小。
            • oversample: 欲渲染的分辨率。
            • skip: 欲排除的字符串或字符串數組。
字體材質表會基於每行中的字符個數自動縮放。為了與Unicode塊保持一致,部分材質表可能為16個字符寬。

資源包基岩版

與皮膚類似,可以在基岩版中購買或製作資源包。iOS用户截至Alpha 0.15.0可以使用.mcpack和.mcworld文件在系統上下載資源包。打開這些文件後,遊戲會自動導入它們,而無需使用文件管理應用。 [1] 

資源包你知道嗎

  • JavaAlpha v1.2.2到1.14使用的默認資源包的pack.png是Java版Alpha v1.2.2中種子3257840388504953787在座標約x=49,z=0的截圖,它在2020年9月5日 4:04(UTC)[5]被“Minecraft@Home”社區的玩家發現。此時,距離它的發佈已經過去了近10年的時間。[6]
參考資料