Библиотека Quilt, обеспечивающая блокировку инвентаря игрока. Также может использоваться как отдельный мод с помощью команды /locki
.
Для правильной работы этот мод должен быть установлен как на сервере, так и на клиенте.
Locki представляет слоты с помощью узлов инвентаря . Узлы инвентаря структурированы в виде дерева, что позволяет командам или модам быстро блокировать или разблокировать целые разделы, сохраняя при этом контроль над более мелкими единицами. Узлы инвентаризации представлены в виде пути, разделенного точками, от наименее конкретного предка до наиболее конкретного дочернего узла. Например, inventory
описывает весь инвентарь игрока, а inventory.armor.chest
описывает слот для нагрудника в инвентаре.
Когда узел инвентаря блокируется, узлы-потомки все равно могут быть разблокированы, что позволяет исключить определенные слоты из широкого запрета доступа. Например, если заблокировать inventory
, а затем разблокировать inventory.armor.chest
игрок не сможет прикоснуться к любому предмету в своем инвентаре, кроме нагрудника.
Locki добавляет команду /locki
, позволяющую операторам серверов и картографам взаимодействовать с API посредством команд.
/locki lock <node> [<targets>] [<lock>]
: блокирует инвентарь одного или нескольких игроков.<node>
: полный путь, описывающий известный узел инвентаризации .[<targets>]
(необязательно): если указано, это должно быть либо имя пользователя игрока, либо селектор цели. Если не указано, по умолчанию используется игрок, использующий команду. При использовании в командном блоке игрок не является обязательным.[<lock>]
(необязательно): если указано, это должен быть действительный идентификатор, ссылающийся на зарегистрированную блокировку. Если не указано, по умолчанию используется общая «командная» блокировка./locki unlock <node> [<targets>] [<lock>]
: разблокирует инвентарь одного или нескольких игроков.[<targets>]
(необязательно): если указано, это должно быть либо имя пользователя игрока, либо селектор цели. Если не указано, по умолчанию используется игрок, использующий команду. При использовании в командном блоке игрок не является обязательным.[<lock>]
(необязательно): если указано, это должен быть действительный идентификатор, который ранее использовался в качестве блокировки для воздействия на инвентарь игроков. Если не указать, по умолчанию используется общая «командная» блокировка. Если у вас установлен LuckPerms, приведенные выше команды могут использовать игроки с разрешением locki.command.lock
. Если вы предоставите locki.command.lock.self
только , игроки смогут использовать команды только на себе.
if ( Permissions . check ( player , "locki.access.inventory.armor.head" , true )) {
// nothing is locking the head slot
}
Список узлов инвентаризации по умолчанию см. в разделе DefaultInventoryNodes.java. Просто добавьте полный путь к нужному узлу с помощью locki.access.
перед проверкой.
Вы можете добавить библиотеку, вставив в свой build.gradle
следующее:
repositories {
maven {
name = " Ladysnake Mods "
url = " https://maven.ladysnake.org/releases "
content {
includeGroup ' io.github.ladysnake '
includeGroup ' org.ladysnake '
includeGroupByRegex ' (dev|io \ .github) \ .onyxstudios.* '
}
}
maven {
name = " Nexus Repository Manager "
url = ' https://oss.sonatype.org/content/repositories/snapshots '
}
}
dependencies {
modImplementation " org.ladysnake:locki: ${ locki_version } "
include " org.ladysnake:locki: ${ locki_version } "
// locki dependencies
include " me.lucko:fabric-permissions-api: ${ fpa_version } "
include " org.ladysnake.cardinal-components-api:cardinal-components-base: ${ cca_version } "
include " org.ladysnake.cardinal-components-api:cardinal-components-entity: ${ cca_version } "
}
Затем вы можете добавить версию библиотеки в файл gradle.properties
:
# Locki
locki_version = 0.x.y
# Fabric Permissions API
fpa_version = 0.1-SNAPSHOT
# Cardinal Components
cca_version = 2.x.y
Текущую версию Locki можно найти на вкладке релизов репозитория на Github, а последнюю версию CCA — в соответствующем репозитории.
public static boolean isMainHandLocked ( PlayerEntity player ) {
return InventoryKeeper . get ( player ). isLocked ( DefaultInventoryNodes . MAIN_HAND );
}
public static final InventoryLock MY_LOCK = Locki . registerLock ( "mymod" , "awesome_feature" );
public static void toggleInventoryExceptHands ( PlayerEntity player ) {
if ( MY_LOCK . isLocking ( player , DefaultInventoryNodes . INVENTORY )) {
MY_LOCK . unlockInventory ( player ); // equivalent to unlock(player, DefaultInventoryNodes.INVENTORY)
} else {
MY_LOCK . lockInventory ( player ); // equivalent to lock(player, DefaultInventoryNodes.INVENTORY)
MY_LOCK . unlock ( player , DefaultInventoryNodes . HANDS );
}
}