تتعامل مكتبة Quilt مع قفل مخزون اللاعب. يمكن استخدامه أيضًا كنموذج مستقل، من خلال الأمر /locki
.
يجب تثبيت هذا الوضع على كل من الخادم والعميل ليعمل بشكل صحيح.
يمثل Locki فتحات تستخدم عقد المخزون . يتم تنظيم عقد المخزون على شكل شجرة، مما يسمح للأوامر أو التعديلات بقفل أو إلغاء قفل الأقسام بأكملها بسرعة مع الاحتفاظ بالتحكم في الوحدات الدقيقة. يتم تمثيل عقد المخزون كمسار مفصول بالنقاط، من السلف الأقل تحديدًا إلى العقدة الفرعية الأكثر تحديدًا. على سبيل المثال، يصف inventory
مخزون اللاعب بالكامل، بينما يصف inventory.armor.chest
فتحة لوحة الصدر الخاصة بالمخزون.
عندما يتم قفل عقدة المخزون، لا يزال من الممكن فتح العقد التابعة، مما يسمح لك باستبعاد فتحات معينة من حظر الوصول الواسع. على سبيل المثال، سيؤدي قفل inventory
ثم فتح inventory.armor.chest
إلى منع اللاعب من لمس أي عنصر في مخزونه باستثناء لوحة الصدر الخاصة به.
يضيف Locki الأمر /locki
، مما يسمح لمشغلي الخادم وصانعي الخرائط بالتفاعل مع واجهة برمجة التطبيقات من خلال الأوامر.
/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 );
}
}