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

TEcho Addon

Technicmans Origins Addon — простой аддон для apoli, дающий датапакерам origins новые типы способностей, которые изменяют и заменяют звуковые события. Новые способности: Replace Sound Emission

FabricForge
Загрузчики
FabricForge
Скачиваний на Modrinth
3,4 тыс.
Подписчиков на Modrinth
3
версии
3
Обновлён
22 февраля 202622 февр.
Опубликован
в 2026

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

Работает на Fabric и Forge
Для Minecraft 1.20.1
Нужен и в игре, и на сервере
Последняя версия — 1.2.0 от 22 февраля 2026
Нужен Origins
Лицензия MIT — бесплатно
Где нужен
В игреобязателенНа сервереобязателен

Нужен и в игре, и на сервере

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

Основная цель этого мода — сделать лучшую замену силе custom_footstep из apugli, но я планирую расширять его новыми силами, действиями и условиями, когда придумаю что-нибудь крутое.

Позже я планирую сделать часть этого частью Apoli для Origins 1.20.1 :>

Возможности

  1. Типы сил

    • Замена звуковой эмиссии (techo:replace_sound_emission)
    • Замена звукового восприятия (techo:replace_sound_reception)
  2. Типы действий сущностей

    • Воспроизведение звука (techo:play_sound) — добавляет новые поля к оригинальному типу действия сущности apoli:play_sound.
  3. Способ передавать значения силы Resource как униформы в постобрабатывающие шейдеры (через тип данных Resource Value Provider)

Типы сил

Замена звуковой эмиссии

Заменяет звук, издаваемый владельцем силы, на другой звук.

ID типа: techo:replace_sound_emission

Поля

ПолеТипПо умолчаниюОписание
soundsОбъектОбъект с парами "ключ": "значение", определяющими, какой звук ("ключ") будет заменён новым звуком ("значение"). «Значение» может быть строкой, взвешенным звуком или массивом взвешенных звуков. Поддерживает сопоставление по regex (со ссылками на захваченные группы в замене) и звуки из ресурспаков
replaceBooleantrueДолжен ли правильно сопоставленный звук заменить старый или проигрываться вместе с ним. Если false, будут проигрываться и старый, и новый звук
entity_actionДействие сущностиопциональноЕсли указано, это действие будет выполнено на игроке при успешной замене (или сопоставлении) звука
priorityInteger0Определяет приоритет применения силы. Если несколько сил соответствуют звуку, только сила с наивысшим priority и replace равным true заменит звук, а силы с более высоким priority, но replace равным false, проиграют свой звук вместе

Примеры

{
    "type": "techo:replace_sound_emission",
    "sounds": {
        "minecraft:entity.player.burp": "empty",
        "entity.generic.eat": "minecraft:empty"
    }
}

Этот пример заменит звуковые события entity.player.burp и entity.generic.eat на empty, что заглушит все звуки еды, исходящие от владельца силы (пространство имён minecraft можно опустить).

{
    "type": "techo:replace_sound_emission",
    "sounds": {
        "block.([a-z|0-9|-|_]*).step": "block.$1.break"
    },
    "condition": {
        "type": "apoli:on_block",
        "inverted": true,
        "block_condition": {
            "type": "apoli:and",
            "conditions": [
                {
                    "type": "apoli:in_tag",
                    "tag": "minecraft:wool"
                }
            ]
        }
    }
}

Этот пример заменит любой звук шага, исходящий от владельца силы, на звук разрушения того же блока, по которому был сделан шаг (если только этот блок не является шерстью).

{
    "type": "techo:replace_sound_emission",
    "sounds": {
        "(.*)": {
            "id": "$1",
            "pitch": 0.5
        }
    }
}

Этот пример сделает так, что все звуки, издаваемые владельцем силы, будут иметь высоту тона 0.5, из-за чего они будут звучать медленно и низко.

{
    "type": "techo:replace_sound_emission",
    "sounds": {
        "entity.player.(hurt|death)": [
            {
                "id": "minecraft:entity.axolotl.$1",
                "volume": 2,
                "pitch": 0.5,
                "weight": 1
            },
            {
                "id": "minecraft:entity.wither.$1",
                "volume": 2,
                "pitch": 0.5,
                "weight": 1
            }
        ]
    },
    "entity_action": {
        "type": "apoli:execute_command",
        "command": "say bleh XP"
    },
    "priority": 1
}

Этот пример заменит звуки смерти и урона владельца силы на соответствующие звуки аксолотля или иссушителя (50% шанс на каждый). Получившиеся звуки будут замедлены на 50% ("pitch": 0.5) и будут слышны на расстоянии 32 блока ("volume": 2, то есть 2 * 16 = 32 блока)

История

ВерсияИзменение
1.0.0Добавлена сила
1.1.0Добавлены новые поля: replace, entity_action, priority. Значения в sounds теперь принимают Weighted Sounds

Replace Sound Reception

Заменяет звук, воспринимаемый владельцем силы, на другой звук.

Type ID: techo:replace_sound_reception

Поля

ПолеТипПо умолчаниюОписание
soundsObjectОбъект с парами "ключ": "значение", которые определяют, какой звук ("ключ") будет заменён на новый звук ("значение"). "Значение" может быть либо String, либо Weighted Sound, либо Array из Weighted Sounds. Поддерживает regex-сопоставление (со ссылками на захваченные группы в замене) и звуки из ресурспаков
replaceBooleantrueДолжен ли правильно сопоставленный звук заменить старый или проигрываться вместе с ним. Если false, будут проигрываться оба звука — старый и новый
entity_actionEntity ActionопциональноЕсли указано, это действие будет выполнено на игроке при успешной замене (или сопоставлении) звука
priorityInteger0Определяет приоритет применения силы. Если несколько сил соответствуют звуку, только сила с наивысшим priority и replace равным true заменит звук, а силы с более высоким priority, но с replace равным false, проиграют свой звук вместе

Примеры

{
    "type": "techo:replace_sound_reception",
    "sounds": {
        "(?!.*:ui\\.).*": "empty"
    }
}

Этот пример заглушит всё, что слышит владелец силы, кроме звуков интерфейса (например, он не заглушит minecraft:ui.button.click)

История

ВерсияИзменение
1.2.0Добавлена сила

Типы действий сущностей

Воспроизвести звук

Воспроизводит звук либо в позиции сущности, либо исходящий от сущности.

ID типа: techo:play_sound

!!! Примечание

Значение поля volume используется для умножения базовой дистанции звукового события, которая составляет 16 блоков (1.0).

Поля

ПолеТипПо умолчаниюОписание
soundIdentifierID звука для воспроизведения.
categoryStringнеобязательноЕсли указано, задаёт категорию и параметры, к которым относится звук. В противном случае используется категория, указанная в сущности, вызвавшей это действие. Принимает "master", "music", "record", "weather", "block", "hostile", "neutral", "players", "ambient" или "voice".
volumeFloat1.0Громкость звука.
pitchFloat1.0Высота тона звука.
follow_entityBooleanfalseДолжен ли звук слышаться исходящим из позиции сущности, когда она движется.
globalBooleanзначение follow_entityДолжны ли все игроки в измерении регистрировать этот звук как воспроизводимый, даже если они вне его радиуса. Если false, игрок не услышит его, даже если войдёт в радиус.
Примечание: Это не заставляет всех игроков слышать звук одинаково громко.
internalBooleanfalseДолжна ли только сущность, воспроизводящая этот звук, слышать его.

Примеры

"entity_action": {
    "type": "techo:play_sound",
    "sound": "music_disc.pigstep",
    "follow_entity": true
}

Этот пример проиграет музыкальную пластинку pigstep, которую услышат все игроки в измерении, где она была проиграна, если они достаточно близко к сущности, проигравшей этот звук.

"entity_action": {
    "type": "techo:play_sound",
    "sound": "block.end_portal.spawn",
    "volume": 1e9001
}

Этот пример проиграет звук создания портала Края по всему измерению, и все игроки услышат его одинаково громко (1e9001 даёт особое значение float: Infinity).

"entity_action": {
    "type": "techo:play_sound",
    "sound": "ambient.cave",
    "internal": true
}

Этот пример проигрывает пещерный эмбиент только для этой сущности.

История

ВерсияИзменение
1.0.0Добавлено действие
1.2.0Добавлено новое поле: internal

Типы данных

Weighted Sound

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

Используется в Replace Sound Emission для предоставления замены звука.

Поля

ПолеТипПо умолчаниюОписание
idIdentifierID звука для воспроизведения. Может содержать обратные ссылки ($1, $2 и т. д.) на совпавшие группы регулярного выражения
volumeFloat1.0Громкость звука.
pitchFloat1.0Высота тона звука.
weightPositive Integer1Вес звука. Шанс выбора звука определяется делением веса на сумму всех весов (weight / sumOfAllWeights = chance).

Примеры

[
    {
        "id": "entity.villager.yes",
        "weight": 1
    },
    {
        "id": "entity.villager.no",
        "weight": 1
    }
]

Этот пример вернёт либо entity.villager.yes, либо entity.villager.no с одинаковой вероятностью для обоих.

История

ВерсияИзменение
1.1.0Добавлен тип данных

Resource Value Provider

Предоставляет масштабированное значение из силы Resource (чтобы преобразовать целочисленное значение ресурса в дробное число float).

Может быть передан вместо любого значения float однородного вектора/матрицы в пост-шейдере

Поля

ПолеТипПо умолчаниюОписание
resourceIdentifierID силы ресурса, из которой будет установлено значение униформы.
scaleFloat0.01Может быть задано вместо пары min и max. Значение, на которое будет умножено значение, предоставленное ресурсом.
minFloatЗначение, к которому должна быть привязана граница min ресурса. Если задано вместе с max, будет использоваться вместо scale.
maxFloatЗначение, к которому должна быть привязана граница max ресурса. Если задано вместе с min, будет использоваться вместо scale.

Примеры

assets/example/shaders/post/chromatic_aberration.json

{
  "targets": [
    "swap"
  ],
  "passes": [
    {
      "name": "deconverge",
      "intarget": "minecraft:main",
      "outtarget": "swap",
      "uniforms": [
        {
          "name": "ConvergeX",
          "values": [ 0.0,  0.0,  0.0 ]
        },
        {
          "name": "ConvergeY",
          "values": [  0.0, 0.0,  0.0 ]
        },
        {
          "name": "RadialConvergeX",
          "values": [  {"resource": "example:intensity", "min": 0.9, "max": 1.0},  {"resource": "example:intensity", "min": 1.02, "max": 1.0},  {"resource": "example:intensity", "min": 1.02, "max": 1.0} ]
        },
        {
          "name": "RadialConvergeY",
          "values": [  {"resource": "example:intensity", "min": 0.9, "max": 1.0},  {"resource": "example:intensity", "min": 1.02, "max": 1.0},  {"resource": "example:intensity", "min": 1.02, "max": 1.0} ]
        }
      ]
    },
    {
      "name": "blit",
      "intarget": "swap",
      "outtarget": "minecraft:main"
    }
  ]
}

Этот пример позволит ресурсу example:intensity управлять интенсивностью шейдера хроматической аберрации

История

ВерсияИзменение
1.2.0Добавлен тип данных

Благодарности

  • Chris The Big! - за то, что вдохновил меня сделать этот мод (ему нужна была эта функциональность в одном из его датапаков)
  • Robin - за идею синтаксиса power
  • Overgrown - за идею списка звуков с весами (будет позже)
  • apoli:replace_loot_table power из мода Apoli - за то, что позволил позаимствовать его код

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

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

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

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

У TEcho Addon есть сборки для Minecraft 1.20.1.

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

Нужен и в игре, и на сервере

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

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