# In game it is possible to tag items and objects using the 'tagger'

on setup:
    log "root.setup"
    #restore "startsnapshot"
    position testpos 808 4 1903 0
    position lockeddoor 800 4 1903 0
    position exitposition 800 4 1900 0
    position changeblock 808 4 1900 0
    position tppos 820 4 1900 0
    position startblock 804 4 1900 0
    position mimicpos 810 4 1910 0

    area cube 817 4 1907 819 6 1909 0
    area destcube 817 4 1903 819 6 1905 0

    itemstack sword:
        name "minecraft:diamond_sword"

    mob enemy:
        name "minecraft:zombie"
        item sword
        helmet itemstack("minecraft:diamond_helmet")
        chestplate itemstack("minecraft:diamond_chestplate")
        leggings itemstack("minecraft:diamond_leggings")
        boots itemstack("minecraft:diamond_boots")
        hp 100


    blockstate diamond:
        name "minecraft:diamond_block"
        meta 0
    blockstate emerald:
        name "minecraft:emerald_block"
        meta 0
    blockstate gold:
        name "minecraft:gold_block"
    blockstate air:
        name "minecraft:air"
    blockstate planks:
        name "minecraft:planks"

    var score 0

    createparticles smoke:
        name "smoke"
        amount 100
        offset 0 0 0
        speed .20

    state changeblock diamond
    state goldgame waiting

    itemstack mysteriouskey:
        name "enigma:key"
        meta 1
        description "Mysterious key"

    itemstack goldcoin:
        name "enigma:coin"
        meta 0
        description "A Golden Coin"

block dotell:
    message "This is common code"
    log "And this too"


on init:
    log "root.init"

on activate:
    log "root.activate"
    var counter 0
    state main beginroom

on repeat 1000:
    spawn tppos enemy

pscope "weirdcolors" true:

    on repeat 400:
        fxanim colorandback 40  0 1 0 0   1 0 0 1

    on repeat 200:
        setblock up(destcube,2) air
        mimicarea cube destcube
        fxanim movemimic 40 destcube 0 2 0
        delay 80:
            moveblocks destcube up(mincorner(destcube),2)
            fxanim resetmimic up(destcube,2)


    on repeat 160:
        setmimic mimicpos planks
        setblock up(mimicpos,1) air
        fxanim movemimic 20 mimicpos 0 1 0
        delay 20:
            setblock mimicpos air
            setmimic up(mimicpos,1) planks
            fxanim movemimic 20 up(mimicpos,1) 0, -1, 0
        delay 40:
            setmimic mimicpos planks
            setblock up(mimicpos,1) air
            fxanim colormimic 30 mimicpos 1 1 1 0 0 0
        delay 70:
            fxanim colormimic 30 mimicpos 0 0 0 1 1 1
        delay 100:
            fxanim colormimic 30 mimicpos 1 1 1 0 0 1
        delay 130:
            fxanim colormimic 30 mimicpos 0 0 1 1 1 1


pscope "player" true:
    on repeat 50:
        if distance(tppos) < 5:
            message "Close!"

scope "diamond" state(changeblock) == diamond:
    on activate:
        log "diamond.activate"
    on rightclickposition changeblock:
        call dotell
        fxanim color 20 1 1 0 0 0 1 0 0
        log "diamond.rightclickblock"
        setblock changeblock emerald
        state changeblock emerald
        particle changeblock "smoke"
        cancel

scope "emerald" state(changeblock) == emerald:
    on activate:
        log "emerald.activate"
    on rightclickposition changeblock:
        call dotell
        log "emerald.rightclickblock"
        setblock changeblock diamond
        state changeblock diamond
        particle changeblock "smoke"
        cancel


on login:
    log "Player logged in!"
    message "Hoi player!"
    pstate health bad

pscope "playerhealth" pstate(health) == bad:
    on activate:
        message "Woot"
        log "Woot"

on rightclickitem goldcoin:
    message "Look at that block!"
    lookat changeblock

on rightclickitem mysteriouskey:
    message "This is a really mysterious key"
    message "you wonder what you can use it for"

scope "begin" state(main) == beginroom:
    on setup:
        log "begin.setup"
    on init:
        log "begin.init"
    on activate:
        log "begin.activate"
    on deactivate:
        log "begin.deactivate"

    on delay 80:
        log "We waited 4s!"

    on repeat 40:
        log "ping: " + $counter
        var counter $counter+1

    on rightclickposition testpos:
        message fmt_green() + fmt_bold() + "You receive a mysterious key" 20
        give mysteriouskey
        drop goldcoin up(lookat(3),5)
        drop goldcoin up(lookat(3),5)
        drop goldcoin up(lookat(3),5)
        cancel

    on rightclickposition lockeddoor:
        log "testtesttesttest"
        if hasitem(mysteriouskey):
            message "The door opens!"
            sound lockeddoor "enigma:locking"
            take mysteriouskey
        else:
            message "You need a key!"
        cancel

    on rightclickposition exitposition:
        state main theend
        cancel

scope "end" state(main) == theend:
    on setup:
        log "end.setup"
    on init:
        log "end.init"
    on activate:
        log "end.activate"
    on deactivate:
        log "end.deactivate"

    on rightclickitem mysteriouskey:
        local p playerpos()
        teleport up($p,10)

    on rightclickposition lockeddoor:
        fxanim move 20 playerpos() tppos
        fxanim rotate 20 yaw() pitch() yaw(tppos) pitch(tppos)
        teleport tppos
        sound tppos "minecraft:entity.endermen.teleport"


scope "waiting" state(goldgame) == waiting:

    on rightclickposition startblock:
        state goldgame game
        cancel

scope "gamescope" state(goldgame) == game:

    pscope "players_start" true:
        on activate:
            teleport tppos
            pvar score 0

    on delay 1000:
        state goldgame theend

    on rightclickblock gold:
        setblock $event_pos air
        pvar score $score+1
        sound $event_pos "entity.experience_orb.pickup"

scope "theend" state(goldgame) == theend:

    pscope "players_score" true:
        on activate:
            message fmt_green() + "You got a score of: " + fmt_blue() + $score + "!"

