Свой сервер
Lifesteal в Майнкрафте датапаком
Датапак Lifesteal для Minecraft 1.21.9 — 26.3: убил игрока — забрал его сердце, умер — потерял своё. Сердце можно вынуть предметом, отдать другу или скрафтить, а у кого сердца кончились — выбывает. Ставится в готовый мир или на сервер, без плагинов.
Сердца
На старте
Максимум
Сердце сверх максимума падает в инвентарь предметом — его отдают другу.
Смерть
Сердце теряется
Минимум
Сердца кончились
На нуле игрок выбывает и смотрит наблюдателем.
Предмет «Сердце»
Вынуть своё сердце предметом — /trigger withdraw, съесть — ПКМ. Сердце возрождения возвращает выбывшего друга с 3 сердцами.
Сердца в игре
Датапак · 1.21.9 — 26.3- Старт
- 10
- Максимум
- 20
- Ноль
- выбывание
Вынуть сердце — любой игрок
/trigger withdrawНовый сезон (права оператора)
/function lifesteal:resetЧто внутри архива — 22 файла
data/minecraft/tags/function/load.json
Тег load: игра зовёт эти функции при загрузке мира и после /reload.
{
"values": [
"lifesteal:load"
]
}
data/minecraft/tags/function/tick.json
Тег tick: эти функции идут каждый тик — 20 раз в секунду.
{
"values": [
"lifesteal:tick"
]
}
data/lifesteal/function/load.mcfunction
При загрузке мира: счета, триггер и сердца в списке игроков.
scoreboard objectives add lifesteal dummy {"text":"❤","color":"red"}
scoreboard objectives add ls_season dummy
scoreboard objectives add ls_hp dummy
scoreboard objectives add ls_deaths deathCount
scoreboard objectives add ls_kills playerKillCount
scoreboard objectives add ls_eat minecraft.used:minecraft.nether_star
scoreboard objectives add withdraw trigger "Вынуть сердце"
scoreboard objectives add ls_revive minecraft.used:minecraft.heart_of_the_sea
scoreboard objectives setdisplay list lifesteal
scoreboard objectives setdisplay below_name lifesteal
execute unless score #season lifesteal matches 1.. run scoreboard players set #season lifesteal 1
tellraw @a ["",{"text":"Lifesteal загружен. ","color":"red"},{"text":"Убил игрока — забрал сердце, умер — потерял. Вынуть сердце — "},{"text":"/trigger withdraw","color":"gold","click_event":{"action":"run_command","command":"/trigger withdraw"}},{"text":"."}]
data/lifesteal/function/tick.mcfunction
Каждый тик: новички, убийства, смерти, сердца из рук и здоровье.
scoreboard players enable @a withdraw
execute as @a unless score @s ls_season = #season lifesteal run function lifesteal:join
execute as @a[scores={ls_kills=1..}] run function lifesteal:kill
execute as @a[scores={ls_deaths=1..}] run function lifesteal:died
execute as @a[scores={withdraw=1..}] run function lifesteal:withdraw
execute as @a[scores={ls_eat=1..}] run function lifesteal:eat
execute as @a[scores={ls_revive=1..}] run function lifesteal:revive
execute as @e[type=player,tag=!ls_out,scores={lifesteal=1..}] run function lifesteal:sync
data/lifesteal/function/join.mcfunction
Новый игрок или новый сезон: 10 сердец.
scoreboard players operation @s ls_season = #season lifesteal
scoreboard players set @s lifesteal 10
scoreboard players reset @s ls_kills
scoreboard players reset @s ls_deaths
execute if entity @s[tag=ls_out] run gamemode survival @s
tag @s remove ls_out
tellraw @s ["",{"text":"У вас "},{"text":"10 сердец","color":"red"},{"text":". Больше 20 не бывает."}]
data/lifesteal/function/sync.mcfunction
Здоровье — сердца × 2: сверить атрибут со счётом.
execute store result score @s ls_hp run attribute @s minecraft:max_health base get
scoreboard players operation #want lifesteal = @s lifesteal
scoreboard players operation #want lifesteal += @s lifesteal
execute unless score @s ls_hp = #want lifesteal run function lifesteal:apply
data/lifesteal/function/apply.mcfunction
Поставить здоровье по счёту сердец.
execute store result storage lifesteal:hp value int 2 run scoreboard players get @s lifesteal
function lifesteal:apply/set with storage lifesteal:hp
data/lifesteal/function/apply/set.mcfunction
Макрос: база максимального здоровья.
$attribute @s minecraft:max_health base set $(value)
data/lifesteal/function/kill.mcfunction
Убил игрока: +1 сердце, на 20 — предмет «Сердце».
scoreboard players remove @s ls_kills 1
execute if score @s ls_kills matches 1.. run function lifesteal:kill
execute if score @s lifesteal matches 20.. run return run function lifesteal:spare
scoreboard players add @s lifesteal 1
playsound minecraft:entity.player.levelup master @s ~ ~ ~ 1 1.5
tellraw @s ["",{"text":"+1 сердце","color":"red"},{"text":" — теперь "},{"score":{"name":"@s","objective":"lifesteal"},"color":"red"},{"text":"."}]
data/lifesteal/function/spare.mcfunction
Сердце сверх максимума — предметом.
give @s minecraft:nether_star[minecraft:custom_name={"text":"Сердце","color":"red","italic":false},minecraft:lore=[{"text":"ПКМ — +1 сердце к здоровью","color":"gray","italic":false}],minecraft:custom_data={"lifesteal":"heart"},minecraft:enchantment_glint_override=true,minecraft:consumable={"consume_seconds":1.0,"animation":"bow","sound":"minecraft:block.beacon.power_select","has_consume_particles":false}]
tellraw @s ["",{"text":"Больше 20 сердец не бывает — "},{"text":"Сердце","color":"red"},{"text":" в инвентаре: отдайте другу."}]
data/lifesteal/function/died.mcfunction
Смерть: −1 сердце, на нуле — выбывание.
scoreboard players reset @s ls_deaths
scoreboard players remove @s lifesteal 1
tellraw @s ["",{"text":"−1 сердце","color":"red"},{"text":" — осталось "},{"score":{"name":"@s","objective":"lifesteal"},"color":"red"},{"text":"."}]
execute if score @s lifesteal matches ..0 run function lifesteal:out
data/lifesteal/function/out.mcfunction
Ноль сердец: наблюдатель.
tag @s add ls_out
gamemode spectator @s
title @s title {"text":"Сердца кончились","color":"red"}
title @s subtitle {"text":"Друг может вернуть вас Сердцем возрождения"}
tellraw @a ["",{"selector":"@s","color":"red"},{"text":" теряет последнее сердце и выбывает."}]
data/lifesteal/function/revive.mcfunction
Съел «Сердце возрождения»: вернуть ближайшего выбывшего.
scoreboard players reset @s ls_revive
execute unless entity @a[tag=ls_out] run return run function lifesteal:revive/none
tag @s add ls_saver
execute at @s as @a[tag=ls_out,sort=nearest,limit=1] run function lifesteal:revive/back
tag @s remove ls_saver
data/lifesteal/function/revive/none.mcfunction
Возвращать некого — предмет обратно.
give @s minecraft:heart_of_the_sea[minecraft:custom_name={"text":"Сердце возрождения","color":"aqua","italic":false},minecraft:lore=[{"text":"ПКМ — вернуть ближайшего выбывшего","color":"gray","italic":false}],minecraft:custom_data={"lifesteal":"revive"},minecraft:enchantment_glint_override=true,minecraft:consumable={"consume_seconds":1.0,"animation":"bow","sound":"minecraft:block.beacon.power_select","has_consume_particles":false}]
tellraw @s {"text":"Выбывших нет — Сердце возрождения вернулось."}
data/lifesteal/function/revive/back.mcfunction
Выбывший — обратно в выживание к спасителю, 3 сердца.
tag @s remove ls_out
scoreboard players set @s lifesteal 3
gamemode survival @s
tp @s @a[tag=ls_saver,limit=1]
tellraw @a ["",{"selector":"@s","color":"green"},{"text":" возвращается в игру с 3 сердцами."}]
data/lifesteal/function/withdraw.mcfunction
/trigger withdraw — вынуть своё сердце предметом (прав не нужно).
scoreboard players set @s withdraw 0
execute if score @s lifesteal matches ..1 run return run tellraw @s {"text":"Вынуть нельзя: последнее сердце остаётся.","color":"gray"}
scoreboard players remove @s lifesteal 1
give @s minecraft:nether_star[minecraft:custom_name={"text":"Сердце","color":"red","italic":false},minecraft:lore=[{"text":"ПКМ — +1 сердце к здоровью","color":"gray","italic":false}],minecraft:custom_data={"lifesteal":"heart"},minecraft:enchantment_glint_override=true,minecraft:consumable={"consume_seconds":1.0,"animation":"bow","sound":"minecraft:block.beacon.power_select","has_consume_particles":false}]
tellraw @s ["",{"text":"Сердце вынуто — осталось "},{"score":{"name":"@s","objective":"lifesteal"},"color":"red"},{"text":". Съесть обратно — ПКМ."}]
data/lifesteal/function/eat.mcfunction
Съел «Сердце»: +1 сердце.
scoreboard players reset @s ls_eat
execute if score @s lifesteal matches 20.. run return run function lifesteal:full
scoreboard players add @s lifesteal 1
tellraw @s ["",{"text":"+1 сердце","color":"red"},{"text":" — теперь "},{"score":{"name":"@s","objective":"lifesteal"},"color":"red"},{"text":"."}]
data/lifesteal/function/full.mcfunction
Сердце на максимуме — обратно в инвентарь.
give @s minecraft:nether_star[minecraft:custom_name={"text":"Сердце","color":"red","italic":false},minecraft:lore=[{"text":"ПКМ — +1 сердце к здоровью","color":"gray","italic":false}],minecraft:custom_data={"lifesteal":"heart"},minecraft:enchantment_glint_override=true,minecraft:consumable={"consume_seconds":1.0,"animation":"bow","sound":"minecraft:block.beacon.power_select","has_consume_particles":false}]
tellraw @s {"text":"У вас уже 20 сердец — больше не бывает. Сердце вернулось."}
data/lifesteal/function/give.mcfunction
/function lifesteal:give — сердце себе (оператору).
give @s minecraft:nether_star[minecraft:custom_name={"text":"Сердце","color":"red","italic":false},minecraft:lore=[{"text":"ПКМ — +1 сердце к здоровью","color":"gray","italic":false}],minecraft:custom_data={"lifesteal":"heart"},minecraft:enchantment_glint_override=true,minecraft:consumable={"consume_seconds":1.0,"animation":"bow","sound":"minecraft:block.beacon.power_select","has_consume_particles":false}]
data/lifesteal/function/reset.mcfunction
/function lifesteal:reset — новый сезон: всем по 10 сердец (оператору).
scoreboard players add #season lifesteal 1
tellraw @a ["",{"text":"Новый сезон Lifesteal: ","color":"red"},{"text":"у всех снова 10 сердец."}]
data/lifesteal/recipe/heart.json
Рецепт: «Сердце» на верстаке.
{
"type": "minecraft:crafting_shaped",
"pattern": [
"ABA",
"BCB",
"ABA"
],
"key": {
"A": "minecraft:diamond_block",
"B": "minecraft:gold_block",
"C": "minecraft:netherite_ingot"
},
"result": {
"id": "minecraft:nether_star",
"count": 1,
"components": {
"minecraft:custom_name": {
"text": "Сердце",
"color": "red",
"italic": false
},
"minecraft:lore": [
{
"text": "ПКМ — +1 сердце к здоровью",
"color": "gray",
"italic": false
}
],
"minecraft:custom_data": {
"lifesteal": "heart"
},
"minecraft:enchantment_glint_override": true,
"minecraft:consumable": {
"consume_seconds": 1.0,
"animation": "bow",
"sound": "minecraft:block.beacon.power_select",
"has_consume_particles": false
}
}
}
}
data/lifesteal/recipe/revive.json
Рецепт: «Сердце возрождения» на верстаке.
{
"type": "minecraft:crafting_shaped",
"pattern": [
"ABA",
"BCB",
"ABA"
],
"key": {
"A": "minecraft:diamond_block",
"B": "minecraft:nether_star",
"C": "minecraft:totem_of_undying"
},
"result": {
"id": "minecraft:heart_of_the_sea",
"count": 1,
"components": {
"minecraft:custom_name": {
"text": "Сердце возрождения",
"color": "aqua",
"italic": false
},
"minecraft:lore": [
{
"text": "ПКМ — вернуть ближайшего выбывшего",
"color": "gray",
"italic": false
}
],
"minecraft:custom_data": {
"lifesteal": "revive"
},
"minecraft:enchantment_glint_override": true,
"minecraft:consumable": {
"consume_seconds": 1.0,
"animation": "bow",
"sound": "minecraft:block.beacon.power_select",
"has_consume_particles": false
}
}
}
}
Крафт сердца
Рецепты добавляет датапак — они появятся в книге рецептов. Сердце с верстака такое же, как вынутое: ПКМ — и +1 сердце.
Как поставить
- Скачайте датапак
Распаковывать не нужно: игра читает его прямо из zip.
- Положите в мир
В одиночной игре (по сети) — saves/<мир>/datapacks, на сервере — world/datapacks. Подойдёт и уже созданный мир.
- Перезагрузите
/reload — у каждого игрока станет 10 сердец, число видно в списке игроков и под ником.
Что нужно знать
- Убийство засчитывает игра. Сердце забирает и тот, кто столкнул в лаву или с обрыва: игра помнит, кто ударил последним в ближайшие секунды.
- Сердце отнимает любая смерть — от мобов, лавы и падения тоже. Только убийство игроком отдаёт его убийце.
- «Сердце» — звезда Незера с подписью. Обычная звезда от Иссушителя не съедается, а сердце из пака на максимуме возвращается в инвентарь.
- Возрождение. Выбывший подлетает наблюдателем к другу, тот съедает Сердце возрождения — и ближайший выбывший возвращается рядом в выживание с 3 сердцами.
- Новый сезон. /function lifesteal:reset — у всех снова 10 сердец, в том числе у тех, кто сейчас не в игре: они начнут заново при входе.
Сыграть в Lifesteal с сотнями людей — на серверах Lifesteal в мониторинге, что значит этот режим — в вики. Здоровье и урон руками — генератор атрибутов, ещё игра для друзей — Мардер Мистери.
Частые вопросы
Как сделать Lifesteal в Майнкрафте без плагинов?
Скачайте датапак и положите его в папку datapacks мира или сервера, затем /reload. У каждого игрока появится запас сердец: убийство игрока забирает у него сердце, смерть отнимает своё.
Как вынуть сердце в Lifesteal?
Командой /trigger withdraw — права оператора не нужны. Сердце становится предметом: его отдают другу или съедают обратно правой кнопкой мыши. Последнее сердце вынуть нельзя.
Что будет, когда кончатся сердца?
Игрок выбывает и смотрит наблюдателем. Друг может вернуть его Сердцем возрождения из пака. Можно выбрать и бан — кнопкой для оператора — или минимум: тогда сердца не кончаются совсем.
