プレイヤーのインベントリのロックを処理する Quilt ライブラリ。 /locki
コマンドを使用してスタンドアロン MOD としても使用できます。
この MOD が正しく動作するには、サーバーとクライアントの両方にインストールする必要があります。
Locki は、インベントリ ノードを使用してスロットを表します。インベントリ ノードはツリーとして構造化されており、コマンドや MOD がより細かい単位の制御を維持しながら、セクション全体をすばやくロックまたはロック解除できるようになります。インベントリ ノードは、最も特定性の低い祖先から最も特定性の高い子ノードまで、ドットで区切られたパスとして表されます。たとえば、 inventory
プレーヤーのインベントリ全体を記述し、 inventory.armor.chest
インベントリの胸当てスロットを記述します。
インベントリ ノードがロックされても、子孫ノードのロックを解除できるため、特定のスロットを広範なアクセス禁止から除外できます。たとえば、 inventory
ロックしてからinventory.armor.chest
のロックを解除すると、プレイヤーは胸当て以外のインベントリ内のアイテムに触れることはできなくなります。
Locki は/locki
コマンドを追加し、サーバー オペレーターとマップ作成者がコマンドを通じて API と対話できるようにします。
/locki lock <node> [<targets>] [<lock>]
: 1 人以上のプレイヤーのインベントリをロックします<node>
: 既知のインベントリ ノードを記述するフルパス。[<targets>]
(オプション) : 指定する場合は、プレーヤーのユーザー名またはターゲット セレクターのいずれかである必要があります。指定しない場合、デフォルトでコマンドを使用するプレーヤーが使用されます。コマンド ブロックで使用する場合、player はオプションではありません。[<lock>]
(オプション) : 指定する場合は、登録されたロックを参照する有効な識別子である必要があります。指定しない場合、デフォルトで汎用の「コマンド」ロックが使用されます。/locki unlock <node> [<targets>] [<lock>]
: 1 人以上のプレイヤーのインベントリのロックを解除します[<targets>]
(オプション) : 指定する場合は、プレーヤーのユーザー名またはターゲット セレクターのいずれかである必要があります。指定しない場合、デフォルトでコマンドを使用するプレーヤーが使用されます。コマンド ブロックで使用する場合、player はオプションではありません。[<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 );
}
}