TEcho Addon
Technicmans Origins Addon — простой аддон для apoli, дающий датапакерам origins новые типы способностей, которые изменяют и заменяют звуковые события. Новые способности: Replace Sound Emission
- Загрузчики
- FabricForge
- Скачиваний на Modrinth
- 3,4 тыс.
- Подписчиков на Modrinth
- 3
- версии
- 3
- Обновлён
- 22 февраля 202622 февр.
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
Основная цель этого мода — сделать лучшую замену силе custom_footstep из apugli, но я планирую расширять его новыми силами, действиями и условиями, когда придумаю что-нибудь крутое.
Позже я планирую сделать часть этого частью Apoli для Origins 1.20.1 :>
Возможности
Типы сил
- Замена звуковой эмиссии (
techo:replace_sound_emission) - Замена звукового восприятия (
techo:replace_sound_reception)
- Замена звуковой эмиссии (
Типы действий сущностей
- Воспроизведение звука (
techo:play_sound) — добавляет новые поля к оригинальному типу действия сущностиapoli:play_sound.
- Воспроизведение звука (
- Способ передавать значения силы Resource как униформы в постобрабатывающие шейдеры (через тип данных Resource Value Provider)
Типы сил
Замена звуковой эмиссии
Заменяет звук, издаваемый владельцем силы, на другой звук.
ID типа: techo:replace_sound_emission
Поля
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
sounds | Объект | Объект с парами "ключ": "значение", определяющими, какой звук ("ключ") будет заменён новым звуком ("значение"). «Значение» может быть строкой, взвешенным звуком или массивом взвешенных звуков. Поддерживает сопоставление по regex (со ссылками на захваченные группы в замене) и звуки из ресурспаков | |
replace | Boolean | true | Должен ли правильно сопоставленный звук заменить старый или проигрываться вместе с ним. Если false, будут проигрываться и старый, и новый звук |
entity_action | Действие сущности | опционально | Если указано, это действие будет выполнено на игроке при успешной замене (или сопоставлении) звука |
priority | Integer | 0 | Определяет приоритет применения силы. Если несколько сил соответствуют звуку, только сила с наивысшим 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
Поля
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
sounds | Object | Объект с парами "ключ": "значение", которые определяют, какой звук ("ключ") будет заменён на новый звук ("значение"). "Значение" может быть либо String, либо Weighted Sound, либо Array из Weighted Sounds. Поддерживает regex-сопоставление (со ссылками на захваченные группы в замене) и звуки из ресурспаков | |
replace | Boolean | true | Должен ли правильно сопоставленный звук заменить старый или проигрываться вместе с ним. Если false, будут проигрываться оба звука — старый и новый |
entity_action | Entity Action | опционально | Если указано, это действие будет выполнено на игроке при успешной замене (или сопоставлении) звука |
priority | Integer | 0 | Определяет приоритет применения силы. Если несколько сил соответствуют звуку, только сила с наивысшим 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).
Поля
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
sound | Identifier | ID звука для воспроизведения. | |
category | String | необязательно | Если указано, задаёт категорию и параметры, к которым относится звук. В противном случае используется категория, указанная в сущности, вызвавшей это действие. Принимает "master", "music", "record", "weather", "block", "hostile", "neutral", "players", "ambient" или "voice". |
volume | Float | 1.0 | Громкость звука. |
pitch | Float | 1.0 | Высота тона звука. |
follow_entity | Boolean | false | Должен ли звук слышаться исходящим из позиции сущности, когда она движется. |
global | Boolean | значение follow_entity | Должны ли все игроки в измерении регистрировать этот звук как воспроизводимый, даже если они вне его радиуса. Если false, игрок не услышит его, даже если войдёт в радиус. Примечание: Это не заставляет всех игроков слышать звук одинаково громко. |
internal | Boolean | false | Должна ли только сущность, воспроизводящая этот звук, слышать его. |
Примеры
"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 для предоставления замены звука.
Поля
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
id | Identifier | ID звука для воспроизведения. Может содержать обратные ссылки ($1, $2 и т. д.) на совпавшие группы регулярного выражения | |
volume | Float | 1.0 | Громкость звука. |
pitch | Float | 1.0 | Высота тона звука. |
weight | Positive Integer | 1 | Вес звука. Шанс выбора звука определяется делением веса на сумму всех весов (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 однородного вектора/матрицы в пост-шейдере
Поля
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
resource | Identifier | ID силы ресурса, из которой будет установлено значение униформы. | |
scale | Float | 0.01 | Может быть задано вместо пары min и max. Значение, на которое будет умножено значение, предоставленное ресурсом. |
min | Float | Значение, к которому должна быть привязана граница min ресурса. Если задано вместе с max, будет использоваться вместо scale. | |
max | Float | Значение, к которому должна быть привязана граница 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_tablepower из мода Apoli - за то, что позволил позаимствовать его код
Частые вопросы
Как установить TEcho Addon?
Установите Fabric под свою версию Minecraft, скачайте TEcho Addon под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть TEcho Addon?
У TEcho Addon есть сборки для Minecraft 1.20.1.
Нужен ли TEcho Addon на сервере?
Нужен и в игре, и на сервере