[Minecraft]RPG服务器用材质包制作
zytom
2021年12月05日 04:38

声明:所有素材来自网络,禁止商用

  这个素材包源于18年前后和朋友一起做的RPG服务器,因为想以纯插件的方式来实现各种酷炫的效果,所以决定做一个素材包,用高清修复的一个功能来实现不同材质的武器,物品。

  建筑、策划、材质包各种东西做得差不多了,奈何程序是个鸽子,一鸽就是四年。所以服务器最后也没做起来。建筑和材质包都是我的心血,也不想白白浪费所以打算分享出来供大家参考。建筑视频可以看我视频投稿。

  回到主题,先看下材质包的效果。

武器

物品

  因为我用了更多动作的一个mod,这个mod不同工具的挥舞动作不同,所以各种武器的模板也是根据这个mod动作来的,当然没有这个mod也完全没什么问题。

  下文提到的两个范例调用方法:

代码块
JavaScript
自动换行
复制代码
匕首:/give player minecraft:diamond_sword 1 20
复制成功

代码块
JavaScript
自动换行
复制代码
物品:/give player minecraft:clay_ball 1 0 {display:{Lore:["ui1"]}}
复制成功

  武器材质是利用工具、武器不同耐久度下的不同材质实现的。而物品的调用方式是给物品一个标签。

  我们先来讲讲武器部分。  

代码块
JavaScript
自动换行
复制代码
武器:匕首
diamond_sword.json(部分)
{
    "parent": "item/handheld",
    "textures": {
        "layer0": "items/diamond_sword"
    },

    "overrides": [
		{ "predicate": {"damaged": 0, "damage":	0.012804097	}, "model": "item/bs/bslv1"},
		{ "predicate": {"damaged": 0, "damage":	0.013444302	}, "model": "item/bs/bslv2"},
		{ "predicate": {"damaged": 0, "damage":	0.014084507	}, "model": "item/bs/bslv3"},
		{ "predicate": {"damaged": 0, "damage":	0.014724712	}, "model": "item/bs/bslv4"},
		{ "predicate": {"damaged": 0, "damage":	0.015364917	}, "model": "item/bs/bslv5"},
		{ "predicate": {"damaged": 0, "damage":	0.016005122	}, "model": "item/bs/bslv6"},
		{ "predicate": {"damaged": 0, "damage":	0.016645327	}, "model": "item/bs/bslv7"},
		{ "predicate": {"damaged": 0, "damage":	0.017285531	}, "model": "item/bs/bslv8"},
		{ "predicate": {"damaged": 0, "damage":	0.017925736	}, "model": "item/bs/bslv9"},
		{ "predicate": {"damaged": 0, "damage":	0.018565941	}, "model": "item/bs/bslv10"},
		{ "predicate": {"damaged": 0, "damage":	0.019206146	}, "model": "item/bs/bslv11"},
		{ "predicate": {"damaged": 0, "damage":	0.019846351	}, "model": "item/bs/bslv12"},
		{ "predicate": {"damaged": 0, "damage":	0.020486556	}, "model": "item/bs/bslv13"},
		{ "predicate": {"damaged": 0, "damage":	0.021126761	}, "model": "item/bs/bslv14"},
		{ "predicate": {"damaged": 0, "damage":	0.021766965	}, "model": "item/bs/bslv15"},
		{ "predicate": {"damaged": 0, "damage":	0.02240717	}, "model": "item/bs/bslv16"},
		{ "predicate": {"damaged": 0, "damage":	0.023047375	}, "model": "item/bs/bslv17"},
		{ "predicate": {"damaged": 0, "damage":	0.02368758	}, "model": "item/bs/bslv18"},
		{ "predicate": {"damaged": 0, "damage":	0.024327785	}, "model": "item/bs/bslv19"},
		{ "predicate": {"damaged": 0, "damage":	0.02496799	}, "model": "item/bs/bslv20"},
		{ "predicate": {"damaged": 0, "damage":	0.025608195	}, "model": "item/bs/bslv21"},
		{ "predicate": {"damaged": 0, "damage":	0.026248399	}, "model": "item/bs/bslv22"},
		{ "predicate": {"damaged": 0, "damage":	0.026888604	}, "model": "item/bs/bslv23"},
		{ "predicate": {"damaged": 0, "damage":	0.027528809	}, "model": "item/bs/bslv24"},
		{ "predicate": {"damaged": 0, "damage":	0.028169014	}, "model": "item/bs/bslv25"},
		

		
		{ "predicate": {"damaged": 0, "damage":	0.045454545	}, "model":	"item/dsj/dsjlv1"},
		{ "predicate": {"damaged": 0, "damage":	0.04609475	}, "model":	"item/dsj/dsjlv2"},
		{ "predicate": {"damaged": 0, "damage":	0.046734955	}, "model":	"item/dsj/dsjlv3"},
		{ "predicate": {"damaged": 0, "damage":	0.04737516	}, "model":	"item/dsj/dsjlv4"},
		{ "predicate": {"damaged": 0, "damage":	0.048015365	}, "model":	"item/dsj/dsjlv5"},
		{ "predicate": {"damaged": 0, "damage":	0.04865557	}, "model":	"item/dsj/dsjlv6"},
		{ "predicate": {"damaged": 0, "damage":	0.049295775	}, "model":	"item/dsj/dsjlv7"},
		{ "predicate": {"damaged": 0, "damage":	0.04993598	}, "model":	"item/dsj/dsjlv8"},
		{ "predicate": {"damaged": 0, "damage":	0.050576184	}, "model":	"item/dsj/dsjlv9"},
		{ "predicate": {"damaged": 0, "damage":	0.051216389	}, "model":	"item/dsj/dsjlv10"},
		{ "predicate": {"damaged": 0, "damage":	0.051856594	}, "model":	"item/dsj/dsjlv11"},
		{ "predicate": {"damaged": 0, "damage":	0.052496799	}, "model":	"item/dsj/dsjlv12"},
		{ "predicate": {"damaged": 0, "damage":	0.053137004	}, "model":	"item/dsj/dsjlv13"},
		{ "predicate": {"damaged": 0, "damage":	0.053777209	}, "model":	"item/dsj/dsjlv14"},
		{ "predicate": {"damaged": 0, "damage":	0.054417414	}, "model":	"item/dsj/dsjlv15"},
		{ "predicate": {"damaged": 0, "damage":	0.055057618	}, "model":	"item/dsj/dsjlv16"},
		{ "predicate": {"damaged": 0, "damage":	0.055697823	}, "model":	"item/dsj/dsjlv17"},
		{ "predicate": {"damaged": 0, "damage":	0.056338028	}, "model":	"item/dsj/dsjlv18"},
		{ "predicate": {"damaged": 0, "damage":	0.056978233	}, "model":	"item/dsj/dsjlv19"},
		{ "predicate": {"damaged": 0, "damage":	0.057618438	}, "model":	"item/dsj/dsjlv20"},
		{ "predicate": {"damaged": 0, "damage":	0.058258643	}, "model":	"item/dsj/dsjlv21"},
		{ "predicate": {"damaged": 0, "damage":	0.058898848	}, "model":	"item/dsj/dsjlv22"},
		{ "predicate": {"damaged": 0, "damage":	0.059539052	}, "model":	"item/dsj/dsjlv23"},
		{ "predicate": {"damaged": 0, "damage":	0.060179257	}, "model":	"item/dsj/dsjlv24"},
		{ "predicate": {"damaged": 0, "damage":	0.060819462	}, "model":	"item/dsj/dsjlv25"},
		{ "predicate": {"damaged": 0, "damage":	0.061459667	}, "model":	"item/dsj/dsjlv26"},
		{ "predicate": {"damaged": 0, "damage":	0.062099872	}, "model":	"item/dsj/dsjlv27"},
		{ "predicate": {"damaged": 0, "damage":	0.062740077	}, "model":	"item/dsj/dsjlv28"},
		{ "predicate": {"damaged": 0, "damage":	0.063380282	}, "model":	"item/dsj/dsjlv29"},
		{ "predicate": {"damaged": 0, "damage":	0.064020487	}, "model":	"item/dsj/dsjlv30"},
		{ "predicate": {"damaged": 0, "damage":	0.064660691	}, "model":	"item/dsj/dsjlv31"}
		
    ]
}
复制成功

  这串代码是放在材质包里用来定义的,文件名”diamond_sword”表示调用的钻石剑,“"damage": 0.012804097” 表示调用损耗度为"0.012804097*1561“(1561为钻石剑总耐久)=20,也就是耐久为1541/1561的钻石剑,当钻石剑耐久为1541时,调用模型"item/bs/bslv1"(其实不用精确到小数点后这么多位,只是我闲的蛋疼)

\assets\minecraft\models\item\diamond_sword.json

\assets\minecraft\textures\items\weapon\dagger_meow\bslv1.png

  这个时候我们在游戏中拿到一把1541/1561的钻石剑,它的样子就是这样的。

苦力怕:你干啥呢

  可以看到匕首真的像把匕首一样被握在手里,而不是像钻石剑一样的拿法,这个就需要另一个文件。

\assets\minecraft\models\item\bs\bslv1.json

代码块
JavaScript
自动换行
复制代码
{
  "parent": "item/handheld",
  "textures": {
      "layer0": "items/weapon/dagger_meow/bslv1"
  },
  "display": {
      "thirdperson_righthand": {
          "rotation": [ -80, 260, -40 ],
          "translation": [-0.7, 2.8, 1.5],
          "scale": [0.6,0.6,0.6 ]
      },
      "thirdperson_lefthand": {
          "rotation": [ -160, 260, -40 ],
          "translation": [ 0.2, -6, 1 ],
          "scale": [0.6,0.6,0.6 ]       
       },
          "firstperson_lefthand": {
              "rotation": [ 160, 90, -10 ],
              "translation": [ 1.13, -1, 1],
              "scale": [ 0.68, 0.68, 0.68 ]
      
  
  }
}
}
复制成功

  这个文件定义了这把武器的大小方向和坐标,稍加调整就可以把它握在手里。该模型文件表示调用材质为"items/weapon/dagger_meow/bslv1",display下面的代码表示该模型在左右手第一人称第三人称等不同情况下的显示方式,我已经设置好了矛、弓、弩、杖、剑、匕首、钝器、手持物品等模型的数据,直接使用即可。

各种各样的武器

图片文件

素材

模型文件

  其中弓的模型文件有些区别,因为会有动画的存在(画了我好久=-=)所以素材需求也会更多,在这里也就不过多阐述了,可以下载文件自行研究。虽然有弩的模型和素材文件,但还是和弓一样的发射方式,毕竟那个就不是材质包能做到的事情了,程序又一直鸽我,所以暂是半成品状态。

  接下来是图标,物品类文件。

  这类文件的调用方式就更加简单粗暴一点,直接给物品一个nbt标签即可。

代码块
JavaScript
自动换行
复制代码
图标:方向键
ui1.properties
type=item
matchItems=337
texture=ui1
nbt.display.Lore.*=ui1
复制成功

  模板为337号物品,也就是黏土,调用了此文件所在文件夹的ui1.png图片,当nbt标签里有ui1时,显示为该材质。

\assets\minecraft\mcpatcher\cit\ui_meow

   下面是物品的定义文件:

代码块
JavaScript
自动换行
复制代码
粗布绷带:
  Id: 260
  Display: '&a粗布绷带'
  Lore:
      - '&8&m &8&m &8&m &8&m &8&m &8&m &8&m &8&m &f 「 道具说明 」 &8&m &8&m &8&m &8&m &8&m
        &8&m &8&m &8&m &1       &1'
     - '&7? &7类型: &f消耗品     &0y3'
      - '&7粗麻布简单撕成条状,便是一卷能用的绷带,恢复15%血量。'
复制成功

代码块
JavaScript
自动换行
复制代码
绷带:
  Id: 260
  Display: '&a绷带'
  Lore:
      - '&8&m &8&m &8&m &8&m &8&m &8&m &8&m &8&m &f 「 道具说明 」 &8&m &8&m &8&m &8&m &8&m
        &8&m &8&m &8&m &1       &1'
     - '&7? &7类型: &f消耗品     &0y4'
      - '&7麻布制成的绷带,接触伤口的部分抹上了药草,更好的的止血,恢复25%血量。'
复制成功

  这个文件是啥插件里的我也忘了,反正规定了几个物品的名称、模板、nbt标签。 这个方式可以更加隐蔽,其中"&0y4"表示了一个黑色的y4,这样在游戏中便看不到这个y4(其实还是看得到)

 现在才看到,更好的的止血什么鬼。

  素材定义方式如下:

代码块
JavaScript
自动换行
复制代码
type=item
matchItems=260
texture=y4
nbt.display.Lore.*=\u00A7y4
复制成功

  其中第二行是物品id,第三行是素材名称,第三行是nbt标签,当物品nbt标签里出现=后面的字符时物品显示第三行素材名的图片。\u00A7y4为转U码后的&0y4,因为特殊符号中文都没法识别所以需要转U码后使用。

后来改了命名方式

 

每个图片对应一个文件

  想要批量设置damage值,表格非常好用,写好公式一拉就完事了。批量命名图片的话 名字后面的数字会有括号,这个时候就需要一个神器。

代码块
JavaScript
自动换行
复制代码
[url=home.php?mod=space&uid=39305]@echo[/url] Off&SetLocal ENABLEDELAYEDEXPANSION
FOR %%a in (*) do (
set "name=%%a"
set "name=!name: (=!"
set "name=!name:)=!"
ren "%%a" "!name!"
)
exit
复制成功

  新建txt文件,把代码丢里面,然后把txt文件后缀改成bat,放在文件夹里执行一次就可以删除所有文件名里的括号,来自某个知乎大佬。

   ps:警告:json文件如果没有目标图片文件,请不要加入材质包中,有多少材质加多少个json文件,否则你将收获一堆错误报告,虽然没啥影响只是开游戏的时候卡点……     ps2:本材质包提供了各类武器,图标的材质,但都需要特殊方式调用,适合各类RPG服务器,插件服。     psp:本材质包为未完成品,想使用的需要自行设置,毕竟你想调用也得自己设置……     psv: 材质包内图标都使用了彩虹岛内的素材,仅供学习使用,请勿商用。

素材包链接:https://pan.baidu.com/s/1pSsVdB1MYFMnyqkatCy8pw 

提取码:MEOW

  大概就是这样了,这个本来是几年前发在某论坛的,但那论坛的帖子过一段时间就看不了,挺烦的。

  图片大多数也是那个时候截的,本来想进服务器在多弄点图,奈何。

  emm完全打不开,我也搞不懂咋搞,所以只有作罢。本来还有很多计划,比如UI界面:

UI图

  又比如原创素材:

棉花像素画

  奈何啊……

  强烈谴责鸽子王。