Свой сервер

Сплиф и TNT Run

Арена в воздухе одной командой и правила датапаком для Minecraft 1.21.9 — 26.3. В сплифе пол ломают лопатой под соперником, в TNT Run он исчезает сам под ногами. Упал ниже нижнего этажа — выбыл, последний на арене побеждает.

Игра

Лопатой ломают пол под соперниками.

Арена

Пол

Размер

Этажей

Этажи — через 6 блоков: провалился — летишь на нижний, ниже нижнего — выбыл.

Сплиф

Датапак · 1.21.9 — 26.3

1. Арена над вами (права оператора)

/function spleef:build

2. Начать или начать заново — любой игрок

/trigger spleef
  • Блок снега +20
Арена
25 × 25
Этажей
1
Ломают
алмазная лопата
Скачать датапак
Что внутри архива — 17 файлов

data/minecraft/tags/function/load.json

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

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

data/minecraft/tags/function/tick.json

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

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

data/spleef/function/load.mcfunction

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

scoreboard objectives add spleef_game dummy
scoreboard objectives add spleef trigger "Начать: Сплиф"
tellraw @a ["",{"text":"Сплиф загружен. Арена — "},{"text":"/function spleef:build","color":"aqua","click_event":{"action":"suggest_command","command":"/function spleef:build"}},{"text":", начать — "},{"text":"/trigger spleef","color":"gold","click_event":{"action":"run_command","command":"/trigger spleef"}},{"text":"."}]

data/spleef/function/tick.mcfunction

Каждый тик: старт по триггеру, кто упал и не остался ли один.

scoreboard players enable @a spleef
execute as @a[scores={spleef=1..}] run function spleef:start
execute if score #running spleef_game matches 2 at @e[type=minecraft:marker,tag=spleef_arena,limit=1] positioned ~-13 ~-64 ~-13 as @a[tag=spleef_player,dx=26,dy=81,dz=26] run function spleef:out
execute if score #running spleef_game matches 2 store result score #alive spleef_game if entity @a[tag=spleef_player]
execute if score #running spleef_game matches 2 if score #alive spleef_game matches ..1 run function spleef:finish

data/spleef/function/build.mcfunction

/function spleef:build — арена над вами (оператору), старая убирается.

execute at @e[type=minecraft:marker,tag=spleef_arena,limit=1] run function spleef:clear
kill @e[type=minecraft:marker,tag=spleef_arena]
execute align xyz positioned ~0.5 ~ ~0.5 run summon minecraft:marker ~ ~ ~ {Tags:["spleef_arena"]}
execute at @e[type=minecraft:marker,tag=spleef_arena,limit=1] run forceload add ~-13 ~-13 ~13 ~13
execute at @e[type=minecraft:marker,tag=spleef_arena,limit=1] run function spleef:walls
execute at @e[type=minecraft:marker,tag=spleef_arena,limit=1] run function spleef:floors
tellraw @s ["",{"text":"Арена 25 × 25 стоит в 20 блоках над вами, лобби — здесь. Начать — "},{"text":"/trigger spleef","color":"gold","click_event":{"action":"run_command","command":"/trigger spleef"}},{"text":"."}]

data/spleef/function/walls.mcfunction

Стены арены из стекла от нижнего этажа до верха.

fill ~-13 ~20 ~-13 ~13 ~23 ~-13 minecraft:glass
fill ~-13 ~20 ~13 ~13 ~23 ~13 minecraft:glass
fill ~-13 ~20 ~-13 ~-13 ~23 ~13 minecraft:glass
fill ~13 ~20 ~-13 ~13 ~23 ~13 minecraft:glass

data/spleef/function/floors.mcfunction

Пол всех этажей заново.

fill ~-12 ~20 ~-12 ~12 ~20 ~12 minecraft:snow_block

data/spleef/function/clear.mcfunction

Убрать старую арену и отпустить её чанки.

fill ~-13 ~20 ~-13 ~13 ~23 ~13 minecraft:air
forceload remove ~-13 ~-13 ~13 ~13

data/spleef/function/count/start.mcfunction

Старт отсчёта цифрами: 5 с.

title @a[tag=spleef_player] times 0 25 5
scoreboard players set #count spleef_game 5
function spleef:count/second

data/spleef/function/count/second.mcfunction

Раз в секунду: цифра на весь экран и щелчок.

execute if score #count spleef_game matches ..0 run return run function spleef:count/end
title @a[tag=spleef_player] title {"score":{"name":"#count","objective":"spleef_game"},"color":"gold"}
execute as @a[tag=spleef_player] at @s run playsound minecraft:block.note_block.hat master @s ~ ~ ~ 1 1
scoreboard players remove #count spleef_game 1
schedule function spleef:count/second 1s

data/spleef/function/count/end.mcfunction

Отсчёт кончился.

title @a[tag=spleef_player] clear
function spleef:go

data/spleef/function/start.mcfunction

Старт: пол заново, игроки — на верхний этаж, 5 секунд на месте.

scoreboard players set @s spleef 0
execute if score #running spleef_game matches 1.. run return run tellraw @s {"text":"Игра уже идёт."}
execute unless entity @e[type=minecraft:marker,tag=spleef_arena] run return run tellraw @s ["",{"text":"Сначала оператор ставит арену: "},{"text":"/function spleef:build","color":"aqua","click_event":{"action":"suggest_command","command":"/function spleef:build"}}]
execute store result score #n spleef_game if entity @a[gamemode=!spectator]
execute if score #n spleef_game matches ..1 run return run tellraw @s {"text":"Нужно хотя бы двое игроков не в режиме наблюдателя."}
kill @e[type=minecraft:marker,tag=spleef_fall]
execute at @e[type=minecraft:marker,tag=spleef_arena,limit=1] run function spleef:floors
tag @a[gamemode=!spectator] add spleef_player
gamemode adventure @a[tag=spleef_player]
effect give @a[tag=spleef_player] minecraft:resistance infinite 4 true
effect give @a[tag=spleef_player] minecraft:saturation infinite 0 true
execute at @e[type=minecraft:marker,tag=spleef_arena,limit=1] run spreadplayers ~ ~ 1 11 false @a[tag=spleef_player]
execute as @a[tag=spleef_player] run attribute @s minecraft:movement_speed base set 0
execute as @a[tag=spleef_player] run attribute @s minecraft:jump_strength base set 0
scoreboard players set #running spleef_game 1
function spleef:count/start

data/spleef/function/go.mcfunction

Отсчёт кончился: ноги вернулись, у каждого инструмент, которым ломается только пол.

scoreboard players set #running spleef_game 2
execute as @a[tag=spleef_player] run attribute @s minecraft:movement_speed base reset
execute as @a[tag=spleef_player] run attribute @s minecraft:jump_strength base reset
title @a[tag=spleef_player] title {"text":"Вперёд!","color":"green"}
give @a[tag=spleef_player] minecraft:diamond_shovel[minecraft:can_break={blocks:"minecraft:snow_block"},minecraft:enchantments={"minecraft:efficiency":5},minecraft:unbreakable={},minecraft:custom_data={spleef:1b}]

data/spleef/function/leave.mcfunction

Игрок уходит с арены: в лобби, режим выживания, без эффектов и без инструмента сплифа.

tag @s remove spleef_player
execute at @e[type=minecraft:marker,tag=spleef_arena,limit=1] run tp @s ~ ~ ~
gamemode survival @s
effect clear @s
attribute @s minecraft:movement_speed base reset
attribute @s minecraft:jump_strength base reset
clear @s *[minecraft:custom_data~{spleef:1b}]

data/spleef/function/out.mcfunction

Упал ниже нижнего этажа — выбыл.

function spleef:leave
tellraw @a ["",{"selector":"@s","color":"red"},{"text":" выбывает."}]

data/spleef/function/finish.mcfunction

Остался один: победитель на весь экран, все — в лобби.

scoreboard players set #running spleef_game 0
schedule clear spleef:count/start
schedule clear spleef:count/second
kill @e[type=minecraft:marker,tag=spleef_fall]
execute if entity @a[tag=spleef_player] run title @a title {"selector":"@a[tag=spleef_player]","color":"gold"}
execute if entity @a[tag=spleef_player] run title @a subtitle {"text":"побеждает!"}
execute unless entity @a[tag=spleef_player] run title @a title {"text":"Ничья"}
execute as @a[tag=spleef_player] run function spleef:leave
tellraw @a ["",{"text":"Ещё раз — "},{"text":"/trigger spleef","color":"gold","click_event":{"action":"run_command","command":"/trigger spleef"}},{"text":"."}]

data/spleef/function/stop.mcfunction

/function spleef:stop — остановить игру (оператору).

scoreboard players set #running spleef_game 0
schedule clear spleef:count/start
schedule clear spleef:count/second
kill @e[type=minecraft:marker,tag=spleef_fall]
execute as @a[tag=spleef_player] run function spleef:leave
tellraw @a {"text":"Игра остановлена."}

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

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

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

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

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

  3. Поставьте арену

    Встаньте, где будет лобби, и напишите /function spleef:build: арена встанет в 20 блоках над вами.

  4. Играйте

    /trigger spleef — все разлетятся по верхнему этажу, через 5 секунд — старт.

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

  • Ломается только пол. На время игры все в режиме приключения, а алмазная лопата с Эффективностью V ломает лишь снег арены — стены и чужой мир целы. После игры инструмент забирается, остальной инвентарь не трогается.
  • Падать не больно. У игроков на арене Сопротивление V и насыщение: провал между этажами не убивает, голод не мешает.
  • Выбывший — в лобби. Упавший ниже нижнего этажа переносится туда, где стоял строивший, в режиме выживания. Последний на арене побеждает, его имя — на весь экран.
  • Перезапуск — тем же триггером. /trigger spleef ставит пол всех этажей заново. Новое место — снова build, старая арена исчезнет сама.

Режимы серверов, сплиф и TNT Run в том числе, — в вики, серверы с мини-играми — в мониторинге. Ещё игры для друзей — Death Swap и лаки-блоки.

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

Как сделать сплиф в Майнкрафте?

Скачайте датапак, положите в мир и встаньте, где нужна арена: /function spleef:build поставит её над вами. Игру начинает /trigger spleef — у каждого лопата, которой ломается только снег.

Как сделать TNT Run в Майнкрафте?

Выберите режим TNT Run: арена из песка на ТНТ ставится командой /function tntrun:build, старт — /trigger tntrun. Блок под ногами исчезает через полсекунды, стоять на месте нельзя.

Как перезапустить арену?

Тем же /trigger: пол всех этажей ставится заново, игроки снова оказываются на верхнем этаже. Выбывшие ждут в лобби под ареной.