Od programu k předmětu
Skriptované předměty a bloky používají stejné událostní tělo a API jako NPC. Používejte nová ID arda_npcs:script_focus a arda_npcs:script_anchor; staré vyřazené položky nejsou funkční náhradou.
- Jako správce OP 2 otevřete editor NPC a Předměty a bloky.
- Zvolte Nový, zadejte krátké ID a jméno programu a druh
itemneboblock. Druh uloženého programu později nezměníte; pro jiný druh založte nové ID. - Nastavte interval
tickv sekundách (1–3600). Vyberte událost a vložte její tělo bez obalující funkce. - Použijte Syntaxe, případně Test. Test neukládá data ani neprovádí efekty, questy nebo poštu.
- Program je zpočátku vypnutý. Přepněte jej na Zapnuto, zvolte Uložit a vyčkejte na potvrzení.
- V hlavní ruce držte přesně jeden odpovídající
script_focusneboscript_anchorze skupiny ArdaNPCs. Použijte Přiřadit ruce. Nejdříve musí být uložené všechny změny programu. - U blokového programu položte přiřazený blok. Přiřazení i položení vytváří ověřenou instanci; text programu zůstává uložený na serveru.
Kdy se program spustí
| Host | Události | Podmínka |
|---|---|---|
| Předmět | init, use, use_block, use_entity, tick, timer | Hráč jej drží v hlavní ruce; use_entity míří na živou entitu. |
| Blok | place, interact, tick, timer, break | Ověřený blok v načteném chunku. |
Předmět v truhle, batohu, na zemi nebo u odpojeného hráče neprovádí tick ani timery. Časovače čekají na způsobilý host a případného hráče. Blok sám neudržuje chunk načtený. init předmětu znamená první pozorování instance v procesu serveru, nikoli nový předmět při každém vybavení.
api.cancel() spotřebuje hráčskou interakci. Bez něj může Minecraft po použití na blok pokračovat také obecným use. Událost break oznamuje odstranění; zrušení v ní již rozbíjený blok neobnoví. Rozbitý anchor padá jako čistý nepřiřazený předmět a jeho staré timery nepřejdou na nové položení.
Příklad: zvukové ohnisko
Program druhu item, událost use:
api.message("Ohnisko se rozzářilo.");
api.sound("minecraft:block.amethyst_block.chime", 0.4, 1.0);
api.cancel();
Po uložení a přiřazení do script_focus jej držte v hlavní ruce a použijte ve vzduchu. Uslyšíte zvuk a dostanete zprávu; příklad nevytváří skutečný světelný zdroj.
Příklad: zvonící blok
Program druhu block, událost place:
api.timer("chime", 30, true);Do timer stejného programu:
if (event.timer === "chime") {
api.sound("minecraft:block.amethyst_block.chime", 0.3, 0.8);
}
Přiřaďte program do anchoru a položte jej. Dokud je blok načtený a hráč, který jej položil, je online, zazní každých přibližně 30 herních sekund. Timer vytvořený v place si pamatuje tohoto hráče, takže při jeho odpojení čeká i v načteném chunku. Při restartu timer pokračuje; vynechaná opakování se nehromadí.
Kontext a vlastník NPC
event.hostKind je item nebo block. event.hostId označuje instanci; event.npcId a npcName jsou u těchto hostů prázdné. Použití na blok přidává blockX, blockY, blockZ, blockId, side. Použití na entitu přidává textová targetId, targetType, targetName, nikoli objekt entity.
Pošta a questProgress vyžadují pole Vlastník NPC: UUID s existujícím NPC a aktuálního hráče. Quest musí patřit tomuto NPC. Souřadnice skutečného hosta získáte přes api.hostX(), hostY(), hostZ(); hráčské hodnoty přes api.playerX() a obdobně.
Správa instancí
Přes Programy znovu načtete uložený program. Při konfliktu revizí jej nejdříve načtěte znovu. V Instance vyberte UUID, prohlédněte Diagnostika nebo použijte Zneplatnit, chcete-li jeho běh zastavit. Skutečné předání předmětu zachovává stav; kopie dostává vlastní identitu a prázdná data. Hráčské proměnné jsou oddělené podle UUID hráče.
Limit je 128 programů a 2048 vydaných instancí. Zdroje, data, timery i výpočetní a efektové kvóty se řídí společnými limity skriptů. Každé přiřazení vytváří novou instanci, proto předmět nepřiřazujte opakovaně jen kvůli přesunu mezi hráči.