Свой сервер

Квесты: принеси и получи награду

До пяти заданий «собери 32 бревна — получи хлеб»: датапак сам заметит, что у игрока набралось, заберёт предметы и выдаст награду. Список заданий — /trigger quests. Для Minecraft 1.21.11 — 26.3, без плагинов.

Задание 1

Задание 2

Задание 3

Задание 4

Задание 5

Задания · пример

Датапак · 1.21.11 — 26.3
  1. Дубовое бревно ×32 Хлеб ×8
  2. Железный слиток ×16 Алмаз ×1 + 5 ур.
  3. Алмаз ×5 Элитры ×1 + 30 ур.

Игрок открывает список

/trigger quests
Скачать датапак
Что внутри архива — 9 файлов

data/minecraft/tags/function/load.json

Тег load: игра зовёт эти функции при загрузке мира и после /reload.

{
  "values": [
    "quests:load"
  ]
}

data/minecraft/tags/function/tick.json

Тег tick: эти функции идут каждый тик — 20 раз в секунду.

{
  "values": [
    "quests:tick"
  ]
}

data/quests/function/load.mcfunction

При загрузке мира: счёт, триггер списка и проверка раз в секунду.

scoreboard objectives add quests dummy
scoreboard objectives add quests trigger "Задания"
schedule function quests:check 1s

data/quests/function/tick.mcfunction

Каждый тик: /trigger quests открывает список.

scoreboard players enable @a quests
execute as @a[scores={quests=1..}] run function quests:list

data/quests/function/done/1.mcfunction

Задание 1 сдано: забрать 32, выдать награду.

clear @s minecraft:oak_log 32
give @s minecraft:bread 8
tag @s add quests_done_1
playsound minecraft:ui.toast.challenge_complete master @s
tellraw @a ["",{"selector":"@s"},{"text":" выполнил задание: Принеси: Дубовое бревно ×32 → Хлеб ×8","color":"green"}]

data/quests/function/done/2.mcfunction

Задание 2 сдано: забрать 16, выдать награду.

clear @s minecraft:iron_ingot 16
give @s minecraft:diamond 1
experience add @s 5 levels
tag @s add quests_done_2
playsound minecraft:ui.toast.challenge_complete master @s
tellraw @a ["",{"selector":"@s"},{"text":" выполнил задание: Принеси: Железный слиток ×16 → Алмаз ×1 и 5 ур. опыта","color":"green"}]

data/quests/function/done/3.mcfunction

Задание 3 сдано: забрать 5, выдать награду.

clear @s minecraft:diamond 5
give @s minecraft:elytra 1
experience add @s 30 levels
tag @s add quests_done_3
playsound minecraft:ui.toast.challenge_complete master @s
tellraw @a ["",{"selector":"@s"},{"text":" выполнил задание: Принеси: Алмаз ×5 → Элитры ×1 и 30 ур. опыта","color":"green"}]

data/quests/function/check.mcfunction

Раз в секунду: хватает ли предметов на несданные задания.

execute as @a[tag=!quests_done_1] store result score @s quests run clear @s minecraft:oak_log 0
execute as @a[tag=!quests_done_1,scores={quests=32..}] run function quests:done/1
execute as @a[tag=!quests_done_2] store result score @s quests run clear @s minecraft:iron_ingot 0
execute as @a[tag=!quests_done_2,scores={quests=16..}] run function quests:done/2
execute as @a[tag=!quests_done_3] store result score @s quests run clear @s minecraft:diamond 0
execute as @a[tag=!quests_done_3,scores={quests=5..}] run function quests:done/3
schedule function quests:check 1s

data/quests/function/list.mcfunction

/trigger quests — список заданий с галочками.

scoreboard players set @s quests 0
tellraw @s {"text":"Задания:","bold":true}
execute if entity @s[tag=quests_done_1] run tellraw @s {"text":"✔ Принеси: Дубовое бревно ×32 → Хлеб ×8","color":"green"}
execute unless entity @s[tag=quests_done_1] run tellraw @s {"text":"• Принеси: Дубовое бревно ×32 → Хлеб ×8"}
execute if entity @s[tag=quests_done_2] run tellraw @s {"text":"✔ Принеси: Железный слиток ×16 → Алмаз ×1 и 5 ур. опыта","color":"green"}
execute unless entity @s[tag=quests_done_2] run tellraw @s {"text":"• Принеси: Железный слиток ×16 → Алмаз ×1 и 5 ур. опыта"}
execute if entity @s[tag=quests_done_3] run tellraw @s {"text":"✔ Принеси: Алмаз ×5 → Элитры ×1 и 30 ур. опыта","color":"green"}
execute unless entity @s[tag=quests_done_3] run tellraw @s {"text":"• Принеси: Алмаз ×5 → Элитры ×1 и 30 ур. опыта"}

Как поставить

  1. Скачайте датапак

    Распаковывать не нужно: игра читает его прямо из zip.

  2. Положите в мир

    В одиночной игре — saves/<мир>/datapacks, на сервере — world/datapacks, потом /reload.

  3. Собирайте

    Набралось нужное в инвентаре — через секунду предметы заберутся, придёт награда и сообщение в чат.

Что нужно знать

  • Каждое задание — один раз. Сданное помечается у игрока, и второй раз за ту же награду его не сдать.
  • Забирается ровно сколько нужно. Лишние предметы остаются в инвентаре.
  • Предметы — по-русски или id. «Дубовое бревно» и oak_log — одно и то же. Только те, что есть и в 1.21.11: иначе пак не загрузится на старой версии.

Награду поинтереснее — предмет с чарами и именем — соберёт генератор /give, а меню с кнопками — генератор /dialog.

Частые вопросы

Как сделать квесты в Майнкрафте без плагинов?

Датапаком: впишите, что принести и что дать в награду. Пак сам заметит, что у игрока набралось, заберёт предметы и выдаст награду.

Как игроку посмотреть задания?

Командой /trigger quests — список заданий с галочками у сданных. Права оператора для неё не нужны.

Можно ли сдать задание дважды?

Нет: сданное помечается у игрока, второй раз за ту же награду его не сдать.