V této lekci si ukážeme, jak pomocí příkazu execute vytvořit výbušný šíp.

Získání informací o entitě

Pomocí příkazu data si můžeme zjistit, jaké informace o šípu máme dostupné

/data get entity <cíl>
  • entita musí být jen jedna, proto nemůžeme použít jen samostatné @e, ale entitu musíme upřesnit typem, počtem,…
    • např. pro získání informací o nejbližším šípu můžeme použít @e[type=minecraft:arrow, limit=1]
    • výsledek vždy musíme omezit na 1 entitu, proto vždy používáme limit=1

Po spuštění příkazu se nám vypíše spoustu informací. Jsou to veškeré informace, které tato entita (šíp) obsahuje. Všechny tyto informace můžeme dále využít pro určení konkrétní entity. Tyto informace se označují jako nbt data.

Pro náš příklad nás bude zajímat, jestli je šíp v něčem zabodnutý. To nám říká vlastnost inGround.

  • je typu pravdivostní hodnota (boolean)
  • má hodnotu 0 - nepravda nebo 1 - pravda

Výběr entity pomocí nbt dat

Tyto informace můžeme dále použit k výběru entity a to tak, že je uvedeme jako hodnotu pro značku nbt - např:

@e[nbt={vlastnost:hodnota}
  • dvojici uvádíme stejně, jak je uvedená ve výpisu vlastností - tedy i s typem hodnoty

Pokud tedy chceme vybrat šíp zabodnutý v zemi, použijeme označení

@e[type=minecraft:arrow, nbt= {inGround:1b}

Vytvoření výbuchu

Dále budeme potřebovat vytvořit výbuch. Nejjednodušší způsob je spawnout aktivované TNT. Na to můžeme použít příkaz /summon

Příkaz summon

/summon <entita> [<pozice>] [<nbt>]
  • entita
    • ID entity, kterou chceme spawnout
  • pozice
    • volitelné
    • pozice, kde chceme entitu spawnout
  • nbt
    • nbt data, které má mít entita nastavené

Například pro aktivované TNT můžeme použít příkaz /summon minecraft:tnt

Pokud bychom chtěli zároveň nastavit i délku výbuchu (fuse), tak už musíme uvést i souřadnice a nbt data

/summon minecraft:tnt ~ ~ ~ {fuse:20}

Příkaz kill

Poslední příkaz, který budeme potřebovat je příkaz /kill. Tento příkaz používáme na zničení (zabití) entity.

/kill [<cíl>]
  • cíl
    • entita, kterou chceme zničit
    • pokud neuvedeme žádnou entitu, tak příkaz zabije hráče, který příkaz spustil

Příklad

Na samotné výbušný šíp budeme potřebovat 2 příkazy.

  1. příkaz pomocí kterého spawneme aktivované TNT na místě šípu, který je zapíchnutý v zemi (má vlastnost inGround s hodnotou 1b)
  2. příkaz, který zničí šíp zabodnutý v zemi
    • Pokud bychom šíp nezničili, tak se budou TNT spawnovat dokud šíp nezmizí

Řešení

Použijeme 2 příkazové bloky:

Na detekci šípu v zemi a následné spawnutí TNT použijeme příkaz execute, pomocí kterého nastavíme spuštění příkazu na souřadnice všech šípů, které mají nbt s vlastností inGround a hodnotou 1b. Na souřadnicích těchto šípů spawneme aktivované TNT s dobou výbuchu 0.

/execute at @e[type=minecraft:arrow,nbt={inGround:1b}] run summon minecraft:tnt ~ ~ ~ {fuse:0}
  • příkazový blok nastavíme na opakovací a klidně můžeme použít vždy aktivní

Na zničení šípu použijeme příkaz kill, kde opět vybereme šíp s vlastností inGround a hodnotou 1b

/kill @e[type=minecraft:arrow,nbt={inGround:1b}]
  • příkazový blok nastavíme na řetězový, podmíněný a vždy aktivní
    • bude se tedy spouštět pouze pokud se úspěšně provede příkaz v prvním příkazovém bloku