ArdaNPCs WIKI & GUIDES
/
Návod 06 1.1.0

Skriptované předměty a bloky

Programování ohniska a anchoru, přiřazení programu, události a správa instancí.

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.

  1. Jako správce OP 2 otevřete editor NPC a Předměty a bloky.
  2. Zvolte Nový, zadejte krátké ID a jméno programu a druh item nebo block. Druh uloženého programu později nezměníte; pro jiný druh založte nové ID.
  3. Nastavte interval tick v sekundách (1–3600). Vyberte událost a vložte její tělo bez obalující funkce.
  4. Použijte Syntaxe, případně Test. Test neukládá data ani neprovádí efekty, questy nebo poštu.
  5. Program je zpočátku vypnutý. Přepněte jej na Zapnuto, zvolte Uložit a vyčkejte na potvrzení.
  6. V hlavní ruce držte přesně jeden odpovídající script_focus nebo script_anchor ze skupiny ArdaNPCs. Použijte Přiřadit ruce. Nejdříve musí být uložené všechny změny programu.
  7. 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í

HostUdálostiPodmínka
Předmětinit, use, use_block, use_entity, tick, timerHráč jej drží v hlavní ruce; use_entity míří na živou entitu.
Blokplace, interact, tick, timer, breakOvěř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.