Пространство имён

Только для Java Edition и Bedrock Edition
|


Название данной статьи является предположением.
Субъекту статьи ещё не дано официальное название и оно может измениться в любое время. |


**Пространство имён идентификаторов** (также известно как **строки пространства имён**,[1] **расположение ресурсов**,[2] или **идентификаторы ресурса**[3]) — это обозначение и идентифицирование встроенных и определяемых пользователем игровые объекты в *Minecraft* без потенциальной двусмысленности или конфликтов.

## Использование

Пространство имён идентификаторов используется как простая строка, ссылающаяся на блоки, предметы, разновидности сущностей, рецепты, функции, достижения, теги, и другие объекты из обычного *Minecraft*. Стоит отметить, что состояния блоков не имеют своего собственного пространства имён.

Допустимый идентификатор пространства имён имеет формат `namespace: name`

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

Это список всех объектов игры, которые имеют пространство имён идентификаторов:

- Встроенные реестры
-
- Блоки
- Блоки-сущности
[*только для Java Edition*] - Жидкости
[*только для Java Edition*] - Предметы
- Сущности
- Интеллект мобов
[*только для Java Edition*] - Картины
[*только для Java Edition*] - Профессии деревенских жителей
[*только для Java Edition*] - Типы деревенских жителей
[*только для Java Edition*] - Эффекты
- Типы зелий
[*только для Java Edition*] - Чары
- Частицы
- Размеры
[*только для Java Edition*] - Биомы
- Статистика
[*только для Java Edition*] - Типы рецептов
[*только для Java Edition*] - Сериализация рецептов
[*только для Java Edition*] - Звуковое событие


- Содержимое пакета данных
[*только для Java Edition*] -
- Достижения
- Таблицы добычи
- Функции
- Файлы структур
- Рецепты
- Теги типов/функций блоков/жидкостей/предметов/сущностей


- Добавляемый контент
[*только для Bedrock Edition*] -
- Таблицы добычи
- Функции


- Содержимое пакетов ресурсов
[*только для Java Edition*] -
- Файлы состояний блоков
- Модели
- Текстуры
- Звуки
- Звуковые события


- Другой настраиваемый контент
[*только для Java Edition*] -
- Полоски здоровья боссов
- Запоминание команд


- Другое не настраиваемое (без модификаций) содержимое
-
- Функции добычи
- Условия добычи
- Типы добычи
- Типы аргументов команд


### Допустимые символы

#### Java Edition

Пространство имён и имена идентификаторов могут содержать только следующие символы:

`0123456789`

Цифры`abcdefghijklmnopqrstuvwxyz`

Строчные буквы`_`

Нижнее подчёркивание`-`

Дефис/минус

Следующие символы недопустимы в пространстве имён, но допустимы в самом имени:

`/`

Косая черта (слэш)- Разделитель каталогов

`.`

Точка- Разделитель наименования и расширения файлов.


Запись каждого пространства имён должна выглядеть следующим образом: `lower_case_with_underscores`

(нижний_регистр_с_нижним_подчёркиванием).

#### Bedrock Edition

Пространство имён и имена идентификаторов могут содержать все символы, кроме косых черт (слэша) и двоеточий.

Следующие символы недопустимы в пространстве имён, но допустимы в именах **таблиц добычи и функций**:

`/`

Косая черта (слэш)- Разделитель каталогов


Запись каждого пространства имён должна выглядеть следующим образом: `lower_case_with_underscores`

(нижний_регистр_с_нижним_подчёркиванием).

### Преобразование в строку

Идентификатор пространства имён преобразовывается в строку, если использовать `:`

(двоеточие) между ним и его пространством имён.

Примеры:

Пространство имён | Имя | Преобразование в строку |
---|---|---|

`minecraft` |
`diamond` |
`minecraft:diamond`
|

`foo` |
`bar.baz` |
`foo:bar.baz`
|

`minecraftwiki` |
`commands/minecraft_wiki` |
`minecraftwiki:commands/minecraft_wiki`
|


### Преобразование из строки

В отличие от идентификаторов пространства имён, которые могут быть преобразованы в строки, есть отдельные строки, которые, наоборот, не могут быть преобразованы в идентификаторы.

Есть несколько ограничений:

- Строка может иметь только один символ
`:`

(двоеточие) - Остальная часть строки должна соответствовать требованиям допустимых символов
- Если
`:`

присутствует, то часть строки перед`:`

(пространство имён) не должна содержать символы`/`

или`.`


Когда `:`

присутствует, часть строки перед `:`

становится пространством имён, а после `:`

— именем.

Когда `:`

отсутствует, то `minecraft`

становится пространством имён, а вся строка становится именем.[ только для Java Edition]

Рекомендуется всегда включать `:`

в строковый формат идентификаторов пространств имён.

- Примеры

Строка | Допустимое пространство имен | Допустимое имя | Во что преобразует игра |
---|---|---|---|

`bar:code` |
`bar` |
`code` |
`bar:code`
|

`minecraft:zombie` |
`minecraft` |
`zombie` |
`minecraft:zombie`
|

`diamond` |
`minecraft` [только для Java Edition]Ничего [только для Bedrock Edition] |
`diamond` |
`minecraft:diamond` [только для Java Edition]`diamond` [
только для Bedrock Edition] |

`foo/bar:coal` |
Недопустимый символ `/` |
||

`minecraft/villager` |
`minecraft` [только для Java Edition]None [только для Bedrock Edition] |
`minecraft/villager` |
`minecraft:minecraft/villager` [только для Java Edition]`minecraft/villager` [
только для Bedrock Edition] |

`mypack_recipe` |
`minecraft` [только для Java Edition]Ничего [только для Bedrock Edition] |
`mypack_recipe` |
`minecraft:mypack_recipe` [только для Java Edition]`mypack_recipe` [
только для Bedrock Edition] |

`mymap:schrödingers_var` |
`mymap` |
Недопустимый символ `ö` [только для Java Edition]`schrödingers_var` [только для Bedrock Edition] |
`mymap:schrödingers_var` [
только для Bedrock Edition] |

`custom_pack:Capital` |
`custom_pack` |
Недопустимый символ `C` [только для Java Edition]`Capital` [только для Bedrock Edition] |
`custom_pack:Capital` [
только для Bedrock Edition] |


### Размещение содержимого в пакетах[*только для Java Edition*]

*только для Java Edition*]

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

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

, где все символы *pack_type*/*namespace*/*object_type*/*name*.*suffix*`/`

(слэш) (может быть частью

или *object_type*

) заменяется разделителем каталогов, зависящим от операционной системы.
*name*

Мапирование происходит из типа объекта в переменные

, *pack_type*

, и *object_type**suffix*

Тип объекта | Пакет объекта | Вместо
|
Вместо
|
Вместо
|
---|---|---|---|---|

Состояния блока | Пакет ресурсов | `assets` |
`blockstates` |
`json`
|

Модели | Пакет ресурсов | `assets` |
`models` |
`json`
|

Частицы | Пакет ресурсов | `assets` |
`particles` |
`json`
|

Текстуры | Пакет ресурсов | `assets` |
`textures` |
`png`
|

Достижения | Пакет данных | `data` |
`advancements` |
`json`
|

Функции | Пакет данных | `data` |
`functions` |
`mcfunction`
|

Таблицы добычи | Пакет данных | `data` |
`loot_tables` |
`json`
|

Рецепты | Пакет данных | `data` |
`recipes` |
`json`
|

Структуры | Пакет данных | `data` |
`structures` |
`nbt`
|

Теги блоков | Пакет данных | `data` |
`tags/blocks` |
`json`
|

Теги типов сущностей | Пакет данных | `data` |
`tags/entity_types` |
`json`
|

Теги предметов | Пакет данных | `data` |
`tags/items` |
`json`
|

Теги жидкостей | Пакет данных | `data` |
`tags/fluids` |
`json`
|

Теги функций | Пакет данных | `data` |
`tags/functions` |
`json`
|


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

Учитывая тип содержимого, можно найти соответствующие файлы

, *pack_type*

и *object_type*

. Затем их можно заменить и узнать окончательное расположение содержимого.
*suffix*

- Примеры

Идентификаторы пространства имён | Тип содержимого |
|
|
|
Окончательное расположение |
---|---|---|---|---|---|

`my_texture_pack:diamonds` |
Текстуры | `assets` |
`textures` |
`png` |
`assets/my_texture_pack/textures/diamonds.png`
|

`abc:run_game` |
Функции | `data` |
`functions` |
`mcfunction` |
`data/abc/functions/run_game.mcfunction`
|

`block/torch` (то же, что и `minecraft:block/torch` ) |
Модель | `assets` |
`models` |
`json` |
`assets/minecraft/models/block/torch.json`
|

`load` (то же, что и `minecraft:load` ) |
Тег функции | `data` |
`tags/functions` |
`json` |
`data/minecraft/tags/functions/load.json`
|

`rocket_pack:industry/start_of_story` |
Достижения | `data` |
`advancements` |
`json` |
`data/rocket_pack/advancements/industry/start_of_story.json`
|


## Пространство имён

“ |
|
„ | |

— Dinnerbone о пространстве имён
[4] |


Пространство имён — это домен для содержимого. Это делается для предотвращения потенциальных конфликтов содержимого или непреднамеренных переопределений объекта с таким же именем.

Например, два пакета данных добавляют два механизма мини-игр в *Minecraft*; они оба имеют функцию, называемую `start`

. Без пространств имён эти две функции стали бы конфликтовать, а мини-игры просто бы не работали. Если добавляемые объекты имеют разные пространства имён: `minigame_one`

и `minigame_two`

, то функции будут выглядеть следующим образом: `minigame_one:start`

и `minigame_two:start`

— такие функции не конфликтуют друг с другом.

### Пользовательское пространство имён

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

Чтобы предотвратить возможные конфликты, пространства имён должны быть максимально конкретными.

- Следует избегать алфавитных супов. Например, проект, названный «ядерный корабль», не должен использовать пространство имён
`nc`

, так как это слишком неоднозначное имя. - Следует избегать слишком «расплывчатых» слов. Имя
`battle_royale`

не выглядит столь информативно, поэтому имя

выглядит намного лучше и более информативно.*player_name*_battle_royale

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

### Пространство имён `minecraft`



*Minecraft* имеет пространство имён `minecraft`

; если пространство имён не указано, идентификатор по умолчанию будет установлен на `minecraft`

[ только для Java Edition]. Пространство имён

`minecraft`

должно использоваться только создателями контента, изменяющего уже существующие данные *Minecraft*, например добавление новой функции к другим тегам функции

`minecraft:load`

.
### Другие встроенные пространства имён

По умолчанию пакет ресурсов *Minecraft* использует для Realms языковые файлы в пространстве имён `realms`

(расположенном в `assets/realms/lang/`

) и связанные с игрой языковые файлы в пространстве имён *<языковой-код>*.json`minecraft`

, даже если ключи перевода не являются идентификаторами пространства имён. Сам Realms.jar тоже использует свой собственный языковой файл `ru_ru.JSON`

и текстуры в пространстве имён `realms`

.

В идентификаторах типов аргументов команд, пространство имён `brigadier`

также используется для типов аргументов, которые тесно связаны с Brigadier.[5]

## История

Официальный выпуск Java Edition | |||||
---|---|---|---|---|---|

? | ? | Добавлено использование идентификаторов после префикса `minecraft` . | |||

1.7.2 | ? | Команды теперь работают с текстовым форматом идентификаторов, помимо числового. | |||

1.11 | 16w32a | Идентификаторы пространства имён теперь имеют ограничение символов. | |||

Запрещенны символы верхнего регистра в идентификаторах пространства имён. | |||||

1.13 | 17w47a | После выравнивания, идентификаторы пространства имён являются единственной принятой формой идентификации. | |||

1.14.4 | pre1 | Пространство имён Realms добавлено во встроенный пакет ресурсов Client.jar. | |||

Альфа-версия Pocket Edition | |||||

0.16.0 | build 1 | Добавлены команды, поддерживающие идентификаторы в виде строк. Однако эти идентификаторы ещё не были помещены в пространство имён. | |||

Официальный выпуск Bedrock Edition | |||||

1.12.0 | beta 1.12.0.2 | Идентификаторы теперь размещаются в пространстве имён с помощью префикса `minecraft` для поддержки пользовательских предметов, добавляемых через дополнения. |


## См. также

## Примечания

- ↑ DataFixerUpper/NamespacedStringType.java at 8b5f82ab78b30ff5813b3a7f3906cd3f4f732acf · Mojang/DataFixerUpper — GitHub
- ↑ Minecraft Java Edition 1.13 changes — GitHub Gist
- ↑ "Minecraft Snapshot 19w39a" — Minecraft.net, 27 сентября 2019 года
- ↑ "Minecraft Snapshot 17w43a" — Minecraft.net
- ↑ Minecraft Java Edition 1.13 changes — GitHub Gist

## Ссылки

- Использование пространства имён также объясняется на странице "Minecraft Snapshot 17w43a" — Minecraft.net.