Перейти к содержимому

Tupenter

Отправляй чат и команды по нажатию клавиши, а потом даже скриптуй их: цепочки через &&, встроенная математика, переменные, циклы, условия и свои собственные команды с настоящим автодополнением. Всё на стороне клиента, отправляются обычные ванильные команды.

Fabric
Загрузчики
Fabric
Скачиваний на Modrinth
466
Подписчиков на Modrinth
8
версий
29
Обновлён
11 октября 202611 окт.
Опубликован
в 2026
Become a walking repeating command block — The resend key allows you to quickly execute your last sent command 20x/sec! · свайп

Коротко о моде

Работает на Fabric
Для Minecraft 1.21.5–26.3
Ставится только в игру; на сервер ставить не нужно
Последняя версия — 26.3.X-v1.2.0 от 11 октября 2026
Лицензия MIT — бесплатно
Где нужен
В игреобязателенНа серверене нужен

Ставится только в игру; на сервер ставить не нужно

Версии игры1.21.5–26.3
Описание переведено автоматическиПоказать оригинал (EN)

Tupenter

Tupenter — клиентский мод для Fabric, работающий как помощник команд. Он позволяет повторно отправлять команды или сообщения по нажатию клавиши, использовать встроенную математику и скриптинг, а также создавать собственные команды и скрипты с автодополнением!

Работает он так: весь кастомный скриптинг и синтаксис преобразуются в чистые ванильные команды, выстраиваются в цепочку и отправляются на сервер по порядку — если вообще отправляются. (Многие чисто вычислительные скрипты лишь выводят или показывают сообщение клиенту и больше ничего). Сервер видит только чистые команды /setblock, даже если мод выполняет настоящие вычисления, чтобы превратить это в радужную спираль.

Повторная отправка

Название мода пошло от того, что мне вечно приходилось жать T + вверх + enter, чтобы повторно отправить команды, но теперь Tupenter записывает то, что вы отправляете, и воспроизводит это по нажатию клавиши (по умолчанию R):

  • Режим Нажать и держать для быстрой очереди или Переключатель для работы без рук.
  • Пакетная отправка последних N сообщений в любом порядке, с задержками для каждого сообщения и для всего пакета, готовыми списками сообщений и подавлением обратной связи команд.
  • Мод очень гибко настраивается в mod menu: переключатель и настройки почти для всех функций мода.

Скриптинг

Полный справочник (каждая директива, функция, тип параметра и переменная) смотрите в SCRIPTING.md в исходниках на GitHub или выполните /tupenter reference в игре, чтобы скопировать его в буфер обмена.*

В моде есть три основных типа синтаксиса:

СинтаксисЗначение
$...$Выражения: можно использовать прямо в строке с ванильным синтаксисом. Они вычисляются и подставляются перед отправкой.
#wordДирективы: инструкции для Tupenter. Основа для условий, циклов и изменения истории. Никогда не отправляются на сервер.
(...)Группировка: после директивы в скобках заключается условие или группа операторов, как в #if (...) (...). Внутри выражений они работают как код — для вызовов функций вроде list(...) и blockset(...) и для математики вроде $(2 + 3) * 4$. В обычном тексте команды это просто символы.

Цепочки команд

Простейший встроенный скриптинг и тот, которым я пользуюсь чаще всего, — это объединение команд через &&. Каждая команда получает своё автодополнение brigadier и подсветку синтаксиса. Поскольку всё разрешается до отправки на сервер, это совместимо с такими модами, как WorldEdit.

/time set day && /weather clear && /say ready

//undo 2 && //replacenear 30 oak_planks spruce_planks && //replacenear 30 oak_stairs ^spruce_stairs

Комментирование

##, за которым идёт пробел, начинает заметку, которая никогда не выполняется. Она заканчивается на следующем && или в конце строки, так что даже однострочник может нести заметки между своими операторами:

## bottom left && /activate 1 2 3 && ## the other one && /activate 2 3 4

Вычисления прямо в строке

Выражения позволяют как простой, так и сложной математике существовать прямо внутри обычных ванильных команд.

/give @s stick $32 + 5$
/give @s diamond $3s$                        (s = стаки по 64)
/summon $pick("zombie", "skeleton")$
/tp @s ~ ~$client.pos.y > 60 ? 10 : 0$ ~

Математика точная: 1/3 остаётся третью, без дрейфа с плавающей точкой.

Списки бывают двух видов: через запятую вычисляется каждый элемент, а через вертикальную черту элементы берутся точно как написаны, так что названия блоков и предметов не нуждаются в кавычках.

list(1, 2 + 3)
list(oak_log | birch_log | spruce_log)

/calc <выражение> выводит любой результат локально, ничего не отправляя, — удобно проверить выражение перед использованием.

Чтение мира

Более девяноста живых переменных: позиция, здоровье, биом, уровень освещения, предмет в руке, то, на что наведён прицел, погода, сущность, на которую вы смотрите, её NBT.

/echo standing on $block(client.blockpos.x, client.blockpos.y - 1, client.blockpos.z)$
#if (client.target.hit == "block") (/tp @s $client.target.blockpos$)

А многие переменные, которых нет среди встроенных, всё равно доступны напрямую через NBT-пути:

/echo elytra damage: $entity("self", "nbt.equipment.chest.components.minecraft:damage", 0)$

/echo $client.target.nbt.Health$

Используй /tupenter dump, чтобы просмотреть дерево NBT и найти нужный путь.


### Переменные, циклы, условия

Tupenter позволяет создавать одноразовые локальные переменные (#local), переменные, живущие в течение сессии (#set), переменные, сохраняемые между сессиями, с помощью /tupenter var save \<var\>, и #setdefault, который создаёт переменную только если её ещё нет.

#set spawn = "100 64 -200" #local roll = rand(1, 10) && /give @s stick $roll$ && /say I got $roll$! #local c:blockpos = blockpos(-10, 20, 85) && /tp $c$ #repeat 5 (/say tick $i$) #for $x$ in 1..10 step 2 (/summon zombie ~$x$ ~ ~) #foreach $mob$ in list(zombie | skeleton | creeper) (/summon $mob$ ~ ~ ~) #foreach $b$ in blockset(#minecraft:wool) (/give @s $b$) #if (client.health < 6) (/effect give @s regeneration 5 1) #setdefault runs = 0 && #set runs += 1 && /say run number $runs$


Теги реестров разрешаются через активное подключение, а при вводе `#` внутри
`blockset(...)` автодополнение по Tab показывает теги, доступные на этом сервере.

### Ожидания

Используй #wait <время> в тиках, секундах, минутах или игровых днях, чтобы создавать задержки между действиями Tupenter. По умолчанию отсчитывается игровое время, поэтому ожидание ускоряется во время /tick sprint и останавливается, когда игра заморожена или на паузе. Скрипты вычисляются лениво: значение, прочитанное после #wait, видит мир таким, какой он сейчас, а не каким он был в момент нажатия Enter.

Ожидание не мешает будущим командам выполняться параллельно. По умолчанию Tupenter позволяет запускать 8 скриптов одновременно. /tupenter running показывает все активные команды и скрипты и их pid, а /tupenter abort <pid> позволяет их убить.

/say ready && #wait 3s && /say GO #wait 5m realtime && /echohud &ecows are ready to be fed! /echo you're at y=$client.pos.y$ && #wait 3s && /echo now you're at y=$client.pos.y$



### Тишина, приватность, локальный вывод

#silent /time set day && /weather clear (вся строка) #repeat 5 (#silent (/give @s stick) && /say hi) (только часть) #norecord /msg friend secret (не попадает в историю повторной отправки) /echo &amy y is &e$client.pos.y$ (видно только тебе, ничего не отправляется; &-коды задают цвет) #unstage 2 (убрать 2 последние записи из истории повторной отправки)


`#silent` скрывает вещи на *твоём* экране: отклик команды и уведомления, которые Tupenter печатает, когда `#set` создаёт или обновляет переменную. Команды всё равно выполняются как обычно, и всё, что увидели бы другие игроки, до них доходит — например, отклик от команды /setblock.

### Создавай свои команды

/customcommand, а также вкладка пользовательских команд, доступная через меню мода и /tupenter menu, позволяют создавать свои команды, использующие ванильные команды и синтаксис Tupenter. Их легко редактировать или удалять, и они автоматически обновляются в автодополнении Brigadier от Mojang, так что никогда не устаревают.

/customcommand add waves <count:int> <mob:entity> = #repeat $count$ (/summon $mob$ ~ ~ ~) /waves 5 zombie


Вот как определена предустановленная `/blink`. (`add` отказывается принимать уже существующее имя, так что дай своей версии новое имя или измени существующую через `/customcommand update`.)

/customcommand add blink <maxdistance:int=100> "teleport to where you're looking" = #silent #local hit = raycast(maxdistance) && #if (hit == "miss") (/tp @s ^ ^ ^$maxdistance$) #else (/tp @s $hit$)


`/blink` — настоящая команда с настоящим автодополнением, типизированными параметрами и
необязательными аргументами. Предустановленная `/portalcalc` — ещё одна:

/customcommand add portalcalc <p:blockpos=~ ~ ~> <dim:to_overworld,to_nether=$client.dimension == "minecraft:the_nether" ? "to_overworld" : "to_nether"$> = /echo $dim$: $floor(dim == "to_nether" ? p.x / 8 : p.x * 8)$ $p.y$ $floor(dim == "to_nether" ? p.z / 8 : p.z * 8)$

/portalcalc без аргументов подскажет, куда ведёт твой парный портал в другом измерении, и сам определит направление пересчёта по тому, где ты стоишь. На сервер при этом не отправляется вообще ничего. /echo — это клиентский способ Tupenter отправить сообщение только отправителю и никому больше.

Есть ещё и кастомные функции — для значений, которые хочется переиспользовать внутри $...$. Функция вычисляет значение и ничего не отправляет — для этого и нужны кастомные команды:

/customfunction add midpoint <a:vec3> <b:vec3> = scale(vadd(a, b), 0.5)
/tp @s $midpoint(client.pos, spawn)$

Скрипты, выполняющиеся каждый тик

Mod Menu → Tupenter → Scripts хранит однострочные скрипты, которые выполняются каждый тик, пока включён главный переключатель. Каждая включённая строка оборачивается в цикл, так что это один долгоиграющий скрипт, а не новый разбор каждый тик: значения #set сохраняются между тиками, а #wait работает естественно.

Скрипты включаются отдельно для каждого мира, так что скрипт, написанный для креатива, никогда не сработает на твоём выживательном сервере, а мир, который ты не настраивал, не запустит ничего. /tupenter scripts показывает, что включено там, где ты стоишь, а /tupenter abort all — это аварийная кнопка: она останавливает все скрипты и выключает главный переключатель.

Поскольку скрипт — это цикл, события — это флаги на один тик, которые ты проверяешь:

#if (client.just_died) (/echo died at $client.blockpos$)
#if (client.keypress.g) (/togglenightvision)

Предупреждение об использовании скриптов: незащищённая команда в тик-скрипте будет срабатывать 20 раз в секунду, что на мультиплеерном сервере превратится в спам в чате. Защищай её через #if, как в примерах выше.

Предоставленные команды и скрипты

После скачивания мода в нём уже будет список кастомных команд и скриптов. Это те, что я считаю полезными или забавными, и они демонстрируют многие аспекты функциональности мода. Их легко удалить, а скрипты по умолчанию отключены.

Команды, готовые к использованию:

КомандаЧто делает
/blink [maxdistance]телепортирует туда, куда ты смотришь, останавливаясь у стен
/ironkitполный набор железной экипировки
/portalcalc [pos] [dim]пересчитывает координаты между Nether и Overworld
/tickfreezeпереключает /tick freeze
`/launch [speed] [no_gravity]`швыряет сущность туда, куда ты смотришь

Скрипты, все отключены, пока ты их не включишь:

СкриптЧто делает
rainbowTunnelнажми ] и лети — за твоим движением последует спиральный туннель из шерсти, освещённый светокамнем
itemDespawnTimerотмечает место твоей смерти и отсчитывает пять минут до исчезновения предметов, приостанавливаясь, когда этот чанк не симулируется
creeperAlertодин раз предупреждает с указанием расстояния, когда Creeper подбирается ближе 8 блоков
elytraWarningпредупреждает о прочности, прежде чем твоя Elytra сломается
restockReminderжители пополняют товары на рассвете

Удобства

  • Подсветка синтаксиса в строке чата: каждый сегмент && окрашивается по своему типу; команды получают раскраску по аргументам из собственного разбора
  • Автодополнение с учётом цепочек: /time set day && /weather cl⇥ дополнит вторую команду
  • Выделяемый чат: выделяй сообщения кликом и перетаскиванием, Ctrl+C для копирования
  • /unroll: пробный прогон любой строки — покажет, что именно она отправит, ничего не отправляя
  • /tupenter vars выводит список твоих переменных, а `/tupenter var save|delete ` управляет сохранёнными
  • /tupenter menu открывает экран настроек из чата; добавь customcommands или scripts, чтобы сразу попасть на нужную вкладку
  • У каждой функции есть переключатель вкл/выкл в Mod Menu

Документация

  • /tupenter help: каждая команда, директива, функция и переменная документируют себя прямо в игре, с примерами для запуска
  • /tupenter reference: копирует всю справку в буфер обмена
  • SCRIPTING.md: та же справка на GitHub: модель, каждая директива, каждая функция, каждый тип параметра, каждая переменная и подводные камни

Документация генерируется из тех же реестров, что использует код, поэтому она не может устареть, пока я обновляю мод.

Лицензия

Лицензия MIT, подробности в исходниках на github.

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

Как установить Tupenter?

Установите Fabric под свою версию Minecraft, скачайте Tupenter под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть Tupenter?

У Tupenter есть сборки для Minecraft 1.21.5–26.3.

Нужен ли Tupenter на сервере?

Ставится только в игру; на сервер ставить не нужно

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее