00:12 #2 进阶物品堆叠组件
1、物品属性组件(attribute_modifiers)
题目:获得一把拿在主手加144点伤害得钻石剑
解:/give @s diamond_sword[attribute_modifiers={modifiers:[{type:"generic.attack_damage",id:"no_name",amount:114,operation:"add_value",slot:"mainhand"}]}]
可见组件得值为一个复合标签,可以有这两对键值对,show_in_tooltip和modifiers,其中show_in_tooltip用于控制是否出现在物品提示框中,true是,false否,不填默认true,即显示;modifiers的值为一个列表,用于控制各个属性,列表中为若干个复合标签,每个复合标签控制一个属性,每个复合标签都由五对键值对构成
1.1、type:属性类型
generic.attack_damage:攻击伤害
generic.attack_speed:攻击速度
generic.max_health:最大生命值
generic.armor:盔甲值
generic.armor_toughness:盔甲韧性
generic.knockback_resistance:击退抗性
generic.movement_speed:移动速度
generic.scale:实体尺寸
generic.graviry:重力
player.entity_interaction_range:玩家实体交互距离
player.block_interaction_range:方块实体交互距离
1.2、id:命名空间
不可使用非(小写英文和下划线),用于区分各属性
1.3、amount:数值
整数型,如1;单精确度浮点型,如0.1;双精确度浮点型,如0.01,用于决定属性的具体数值
1.4、operation:运算类型
当初值为a,属性值为b,并且相同属性出现两次,则最终值等于:
add_value:加算(a+b+b)
add_multiplied_base:相加乘算(a×(b+b))
add_multiplied_total:分别乘算(a×(1+b)×(1+b))
1.5、slot:槽位
mainhand:主手
head:头盔槽
legs:护腿槽
offhand:副手
chest:胸甲槽
feet:靴子槽
any:全部
hand:双手
armor:(如马和狗的)盔甲槽
body:所有(玩家的)盔甲槽
测试:如何获得一把放在副手时增加100%尺寸(分别乘算)不显示在提示框中的木锄?(提示:木锄:wooden_hoe,副手:offhand,尺寸属性:generic.scale)
2、02:03 食物组件(food)
题目:获取一块饱食度2和饱和度4,返还一根线的羊毛为例
解:/give @s white_wool[food={nutrition:2,saturation:4,using_converts_to:{id:"string"}}] 1
可见该组件的值为一个复合标签,标签中可以存在这六对键值对
nutrition:饱食度(整数型)
saturation:饱和度(浮点型)
eat_seconds:食用所需时间(整数型,单位tick,如1秒为20tick)
can_always_eat:是否无视饱食度已满(布尔值)
using_converts_to:替换为物品
effects:药水效果
1.1、using_converts_to:替换为物品
如果食物吃完之后返回的物品,则值为复合标签有两个键值对可用,分别为id:物品类型和components:物品堆叠组件
1.2、effects:药水效果
用于决定食物吃完之后获得的药水效果,值为列表,列表中有若干个复合标签,每个复合标签拥有两个键值对,分别是:effect:药水效果,probability:用于决定这个药水效果产生的概率
1.2.1、effect:药水效果
effect的值是一个复合标签,中可以这五个键值对
id:药水类型(字符串)
amplifier:药水等级(整数型)
duration:持续时间(整数型)
show_particl:是否显示粒子(布尔型)
show_icon:是否显示图标(布尔型)
注意:药水等级从零开始,持续时间以tick为单位
测试:以获得一块饱食度5,饱和度8,返还一块草方块,25%获得虚弱III,并显示粒子;50%缓慢V30秒不显示粒子,无视饱食度得泥土为例
解:/give @s dirt[food={can_always_eat:true,nutrition:5,saturation:8,using_converts_to:{id:"grass_block"},effects:[{effect:{id:"weakness",duration:200,amplifier:2},probability:0.25},{effect:{id:"slowness",duration:600,amplifier:4,show_particle:false},probability:0.5}]}] 64
3、03:54 药水组件(potion_contents)
题目:获取一瓶有迅捷VII五秒急迫VI十秒得药水
解:/give @s potion[potion_contents={custom_effects:[{id:'speed',duration:100,amplifier:6},{id:"haste",duration:200,amplifier:5}]}]
可见这个组件的值是一个复合标签,复合标签中,有这三对可用键值对,
custom_color:自定义颜色(值为10进制RGB值)
custom_effects:自定义药水
potion:药水类型(具体药水的名字)
3.1、custom_color:自定义颜色
值为10进制RGB值 => 分别获取10进制RGB值(如R:128,G:64,B:205) => 分别把10十进制RGB值转化为16进制(如R:80,G:40,B:CD) => 把16进制RGB值连接起来和为16进制数(如8040CD) => 把16进制数转为十进制数,即为答案
3.2、custom_effects:用于自定义药水属性,复合标签的写法与food标签中类似
id:药水效果名(字符串)
amplifier:药水等级(整数型)
duration:持续时间(整数型)
show_particl:是否显示粒子(布尔型)
show_icon:是否显示图标(布尔型)
3.3、potion:药水类型
water:水瓶
swiftness:迅捷药水
strength:力量药水
leaping:跳跃药水
regeneration:生命恢复
healing:瞬间治疗
luck:幸运药水
wind_charged:蓄风药水
infested:虫蚀药水
harming:伤害药水
oozing:渗浆药水
weaving:织网药水
turtle_master:神龟药水
fire_resistance:抗火药水
invisibility:隐身药水
water_breaking:水肺药水
slowness:迟缓药水
slow_falling:缓降药水
night_vision:夜视药水
weakness:虚弱药水
posion:剧毒药水
以long_开头:时间延长(加了红石)
以strong_开头:加强(加了荧石)
测试:如何获取一瓶外表为瞬间治疗,瞬间伤害V,凋零III30秒的药水(提示瞬间治疗药水:healing,瞬间伤害:instant_damage,凋零:wither)
/give @s potion[potion_contents={potion:"healing",custom_effects:[{id:"instant_damage",duration:1,amplifier:
},{id:"wither",duration:600,amplifier:2}]}]
4、05:28 能放在/能破坏组件(can_place_on/can_break)
题目:获取一块在冒险模式下可以放在泥土和草方块上可以破坏白色羊毛和橡木木板的泥土
解:/give @s dirt[can_place_on={predicates:[{blocks:["dirt","grass_block"]}]},can_break={predicates:[{blocks:["white_wool","oak_planks"]}]}] 64
can_place_on和can_break的语法完全相同,此处以can_place_on为准,该组件的值是一个复合标签,其中predicates用于控制方块条件,其值是一个列表,列表中有若干个复合标签,每一个复合标签控制一组方块组。在复合标签中blocks来决定方块列表,在列表中为若干个字符串,每个字符串对应一种方块,例如:dirt和sand
扩展:一根木棒只能破坏橡木下半砖,不能破坏橡木上半砖
解:在blocks列表中,添加oak_slab,然后加入一组新的键值对:state,用于决定方块状态,这里指定下板砖对应的type:"bottom"
/give @s stick[can_break={predicates:[blocks:["oak_slab"],state:{type:bottom}]}]
扩展:如何获得一块只能破坏Z坐标为14箱子的钻石
解:在blocks列表中,添加chest箱子,然后加入nbt这对键值对用于控制方块的NBT属性,要求Z等于14
扩展“如何在功能不变的情况下不显示?
解:在can_place_on的跟标签下,添加show_in_tooltip这一键值对,值写为false则不显示
测试:如何获得一块能放在TNT上能破坏TNT且不显示在物品显示框中的TNT?
解:/give @s tnt[can_break={show_in_tooltip:false,predicates:[{blocks:["tnt"]}]},can_place_on={show_in_toopltip:false,predicates:[{blocks:["tnt"]}]}] 1
5、07:46 工具组件(tool)
题目:获取一个挖掘普通方块2倍速,挖掘圆石4倍速的金锭
解:/give @s gold_ingot[tool={default_mining_speed:2,rules[{blocks:[cobblestone],correct_for_drops:true,speed:4}]}]
可见该组件的值是一个复合标签,复合标签中有这两对键值类可用
default_mining_speed:2(用于决定普通方块的挖掘速度)
rules:用于决定挖掘规律
5.1、rules是一个列表,列表中有若干个复合标签,复合标签中有这两对键值对的
correct_for_drops:用于决定方块被破坏之后是否掉落
blocks:语法和con_place_on的block语法一致
测试:如何获得一块挖普通方块0.01倍速,挖黑曜石114514倍的煤炭?(提示:煤炭:coal,黑曜石:obsidian)
解:/give @s coal[tool={default_mining_speed:0.001,rules:[{blocks:[obsidian],correct_for_drops:true,speed:114514}]}]
6、08:43 最大堆叠数组件(max_stack_size)
题目:获得99个堆叠数为99的末影珍珠为例
解:/give @s ender_pearl[max_stack_size=99] 99
7、08:55 最大耐久组件(max_damage)
题目:获得一把耐久为999999999的木锄为例
解:/give @s minecraft:wooden_hoe[max_damage=999999999]
扩展:让原来不可堆叠的物品堆叠,就需要使用叹号将物品最大耐久给去除掉,在加入max_stack_size来使它可以堆叠
解:/give @s diamond_helmet[!max_damage,max_stack_size=64] 64
/give @s torch[!max_stack_size,max_damage=100,damage=1]