抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

之前想和朋友一起玩生存,为了给游戏增加一些乐趣,就简单的做了这个东西,现在作为教程发出来。
要求:

建设抽奖机的区域必须是冒险模式

知道如何使用命令方块

拥有nbt编辑软件/插件

了解json基本语法

会使用翻译器

有陪你玩的朋友

一.制作抽奖机

抽奖机总共由四个命令方块和一个普通方块组成。

普通方块

可以是任意方块,但最好不是你周围建筑所使用的方块,可以选择符合奖品风格的方块(钻石块,铁块,苔石等等)

方块四周应该使用台阶包围起来,只将上表面暴露出来

第一个命令方块

脉冲,不受制约,红石激活,方向指向普通方块。

1
setblock ~ ~2 ~ air

目的:清除掉放置的按钮,避免一个按钮反复激活抽奖箱。

第二个命令方块

连锁,不受约制,保持开启,方向指向第一个命令方块。

1
particle minecraft:sonic_boom ~ ~3 ~

目的:生成一个粒子特效(你也可以将minecraft:sonic_boom换成其他粒子)

第三个命令方块

连锁,不受约制,保持开启,方向指向第二个命令方块。

1
loot spawn ~ ~4 ~ loot minecraft:chests/desert_pyramid

目的:生成随机奖励

这里的随机奖励可以从任意战利品表抽取,也可以使用自定义战利品表(需要数据包),如果你想要修改奖品列表,只需要将minecraft:chests/desert_pyramid替换为你想要的战利品表即可。如果你不知道战利品表所对应的物品,可以尝试将其翻译为中文。(例:minecraft:chests/desert_pyramid->沙漠神殿宝箱)

第四个命令方块

连锁,不受约制,保持开启,方向指向第三个命令方块。

1
playsound minecraft:entity.generic.explode block @p

目的:给抽奖玩家播放音效

如果你不嫌吵或者奖励比较稀有也可以给更多玩家播放音效

二.制作抽奖钥匙

首先手持一个普通的按钮(我以石头按钮为例),然后打开nbt编辑器,我们可以看到按钮的nbt是这样的:

1
2
3
4
{ 
count: 1,
id: "minecraft:stone_button"
}

现在我们需要修改nbt标签,使得按钮在冒险模式下也可以被放置在抽奖机上。
我们可以添加“minecraft:can_place_on”标签允许放置,添加“minecraft:custom_name”标签来设置按钮的名称。

1
2
3
4
5
6
7
8
{
components: {
"minecraft:can_place_on": { predicates: [{ blocks: "minecraft:sand" }] },
"minecraft:custom_name": '"§9沙漠宝箱钥匙"'
},
count: 1,
id: "minecraft:stone_button"
}

需要将“minecraft:sand”替换为你抽奖机上普通方块的命名空间ID,你可以在此网页查看全部方块的命名空间ID

三.制作钥匙商人

生成一只村民,然后放置工作方块赋予职业,将准星对准村民,打开聊天栏,输入“/kill “后按Tab即可查询到村民的uuid,打开nbt编辑器,找到村民的nbt,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
{
AbsorptionAmount: 0f,
Age: 0,
AgeLocked: 0b,
Air: 300s,
ArmorDropChances: [0.085f, 0.085f, 0.085f, 0.085f],
ArmorItems: [{ }, { }, { }, { }],
Attributes: [
{ Base: 20.0, Name: "minecraft:generic.max_health" },
{
Base: 48.0,
Modifiers: [
{
Amount: 0.07795398886231933,
Name: "Random spawn bonus",
Operation: 1,
UUID: [I; -2011272299, 1129336725, -1332969056, -10862197]
}
],
Name: "minecraft:generic.follow_range"
},
{ Base: 0.5, Name: "minecraft:generic.movement_speed" }
],
Brain: {
memories: {
"minecraft:job_site": { value: { dimension: "minecraft:main", pos: [I; 80, 147, 79] } }
}
},
Bukkit.Aware: 1b,
Bukkit.updateLevel: 2,
CanPickUpLoot: 1b,
DeathTime: 0s,
FallDistance: 0f,
FallFlying: 0b,
Fire: -1s,
FoodLevel: 0b,
ForcedAge: 0,
Gossips: [],
HandDropChances: [0.085f, 0.085f],
HandItems: [{ }, { }],
Health: 20f,
HurtByTimestamp: 0,
HurtTime: 0s,
Inventory: [],
Invulnerable: 0b,
LastGossipDecay: 4586907l,
LastRestock: 0l,
LeftHanded: 0b,
Motion: [0.0, -0.0784000015258789, 0.0],
Offers: {
Recipes: [
{
buy: {
components: {
"minecraft:attribute_modifiers": { modifiers: [] },
"minecraft:enchantments": { levels: { } },
"minecraft:lore": [],
"minecraft:max_stack_size": 64,
"minecraft:rarity": "common",
"minecraft:repair_cost": 0
},
count: 24,
id: "minecraft:paper"
},
maxUses: 16,
priceMultiplier: 0.05f,
sell: { count: 1, id: "minecraft:emerald" },
xp: 2
},
{
buy: {
components: {
"minecraft:attribute_modifiers": { modifiers: [] },
"minecraft:enchantments": { levels: { } },
"minecraft:lore": [],
"minecraft:max_stack_size": 64,
"minecraft:rarity": "common",
"minecraft:repair_cost": 0
},
count: 13,
id: "minecraft:emerald"
},
buyB: {
components: {
"minecraft:attribute_modifiers": { modifiers: [] },
"minecraft:enchantments": { levels: { } },
"minecraft:lore": [],
"minecraft:max_stack_size": 64,
"minecraft:rarity": "common",
"minecraft:repair_cost": 0
},
count: 1,
id: "minecraft:book"
},
maxUses: 12,
priceMultiplier: 0.2f,
sell: {
components: {
"minecraft:stored_enchantments": { levels: { "minecraft:sweeping_edge": 1 } }
},
count: 1,
id: "minecraft:enchanted_book"
}
}
]
},
OnGround: 1b,
PersistenceRequired: 0b,
PortalCooldown: 0,
Pos: [81.5, 147.0, 79.5],
RestocksToday: 0,
Rotation: [-39.224976f, 0f],
Spigot.ticksLived: 595,
UUID: [I; -1589767793, -1668658286, -1339993821, 1692720387],
VillagerData: { level: 1, profession: "minecraft:librarian", type: "minecraft:plains" },
WorldUUIDLeast: -7809880970929357240l,
WorldUUIDMost: -1858293845565683648l,
Xp: 0
}

警告:绝对不能改动UUID,WorldUUIDLeast和WorldUUIDMost项

完整的nbt非常长,但我们不需要这么多。首先,修改Offers项,这里存储的是村民售卖的内容,我们需要将它替换为我们的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Offers: {
Recipes: [
{
buy: { count: 64, id: "minecraft:sand" },
maxUses: 2100000000,
sell: {
components: {
"minecraft:can_place_on": { predicates: [{ blocks: "minecraft:sand" }] },
"minecraft:custom_name": '"§9沙漠宝箱钥匙"'
},
count: 1,
id: "minecraft:stone_button"
},
uses: 0
}
]
},

接下来分别讲解每一个项对应的内容:
buy:对应的是花费的内容,count表示花费的数量,id表示花费的物品。
maxUses:最多可以购买多少次,这里设置极大值即可,但最好小于int上线(21亿)。
sell: 出售的东西。这里直接复制你钥匙完整的nbt,然后粘贴在“sell: {”和“},”之间。
uses: 表示已经购买了多少次,不必理会,但可以定期设置成0,避免缺货(玩家不会购买21亿次吧)

Offers部分已经编写完成,下面来编写其他部分。

1
CustomName: '{"text":"","extra":[{"text":"兑换宝箱钥匙","obfuscated":false,"italic":false,"underlined":false,"strikethrough":false,"color":"dark_purple","bold":false}]}',

你可以将“兑换宝箱钥匙”设置为你想要的商人名字,“dark_purple”替换为名字的颜色。

添加以下两个项目,然后即可完成设置。

1
2
Invulnerable: 1b,
NoAI: 1b,

Invulnerable: 1b设置生物无敌,NoAI: 1b设置生物无AI。

你可能发现你仍然能杀死村民,因为Invulnerable项只对生存和冒险模式玩家有效。

五.大功告成!

快去邀请玩家测试吧!
如果有不理解的地方,可以评论/联系bilibili:2087825391。

评论