Paste #51095: Untitled Paste

Date: 2018/12/11 09:36:45 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


BlastProofGlassLogic:
    type: world
    debug: true
    events:
        on entity explodes:
        # Disallow the destruction of non-whitelisted blocks
        - define blocklist <context.blocks>
        - foreach <context.blocks>:
            - if !<server.flag[BreakableBlocks].contains[<def[value].material.name>]>:
                - determine passively cancelled

            # Determine orientation between explosion and block.
            #- define origin <context.location.simple.replace[,world].with[]>
            #- define Block <def[value].replace[,world].with[]>
            #- announce "Source: <def[origin]>, Block <def[Block]>.<&nl>Difference:<def[Block].sub[<context.location.x.round_down>,<context.location.y.round_down>,<context.location.z.round_down>]>"

            # Check if there is glass between <context.block> and <context.location>
#######################################################################################################################################

            - choose <def[Block].sub[<context.location.x.round_down>,<context.location.y.round_down>,<context.location.z.round_down>]>:
                # Explosion was two blocks above the to-be-destroyed block's location.
                - case l@0.0,-2.0,0.0:
                    # Determine if there is glass inbetween.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was two blocks below the to-be-destroyed block's location.
                - case l@0.0,2.0,0.0:
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

#######################################################################################################################################

                # Explosion was two blocks to the North-side of the to-be-destroyed block's location on equal Y.
                - case l@0.0,0.0,2.0:
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was two blocks to the East-side of the to-be-destroyed block's location on equal Y.
                - case l@-2.0,0.0,0.0:
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was two blocks to the South-side of the to-be-destroyed block's location on equal Y.
                - case l@0.0,0.0,-2.0:
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,0,1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was two blocks to the West-side of the to-be-destroyed block's location on equal Y.
                - case l@2.0,0.0,0.0:
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

#######################################################################################################################################

                # Explosion was directly diagonally to the NE of the to-be-destroyed block's location on equal Y.
                - case l@-1.0,0.0,1.0:
                    # check if there is a block to the North AND East.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly diagonally to the SE of the to-be-destroyed block's location on equal Y.
                - case l@-1.0,0.0,-1.0:
                    # check if there is a block to the South AND East.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,0,1].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly diagonally to the SW of the to-be-destroyed block's location on equal Y.
                - case l@1.0,0.0,-1.0:
                    # check if there is a block to the South AND West.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,0,1].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly diagonally to the NW of the to-be-destroyed block's location on equal Y.
                - case l@1.0,0.0,1.0:
                    # check if there is a block to the North AND West.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

#######################################################################################################################################

                # Explosion was directly north of the to-be-destroyed block's location on Y+1.
                - case l@0.0,-1.0,1.0:
                    # check if there is a block to the Above AND to the North.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly East of the to-be-destroyed block's location on Y+1.
                - case l@-1.0,-1.0,0.0:
                    # check if there is a block to the Above AND to the East.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly South of the to-be-destroyed block's location on Y+1.
                - case l@0.0,-1.0,-1.0:
                    # check if there is a block to the Above AND to the South.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,01].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly West of the to-be-destroyed block's location on Y+1.
                - case l@1.0,-1.0,0.0:
                    # check if there is a block to the Above AND to the West.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

#######################################################################################################################################

                # Explosion was directly north of the to-be-destroyed block's location on Y-1.
                - case l@0.0,1.0,1.0:
                    # check if there is a block to the Above AND to the North.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly East of the to-be-destroyed block's location on Y-1.
                - case l@-1.0,1.0,0.0:
                    # check if there is a block to the Above AND to the East.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly South of the to-be-destroyed block's location on Y-1.
                - case l@0.0,1.0,-1.0:
                    # check if there is a block to the Above AND to the South.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,01].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly West of the to-be-destroyed block's location on Y-1.
                - case l@1.0,1.0,0.0:
                    # check if there is a block to the Above AND to the West.
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

#######################################################################################################################################

                # Explosion was directly NE of the to-be-destroyed block's location on Y+1.
                - case l@-1.0,-1.0,1.0:
                    # check if there is a block to the Above AND West AND EAST
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly SE of the to-be-destroyed block's location on Y+1.
                - case l@-1.0,-1.0,-1.0:
                    # check if there is a block to the Above AND South AND EAST
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly SW of the to-be-destroyed block's location on Y+1.
                - case l@1.0,-1.0,-1.0:
                    # check if there is a block to the Above AND South AND West
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly NW of the to-be-destroyed block's location on Y+1.
                - case l@1.0,-1.0,1.0:
                    # check if there is a block to the Above AND North AND West
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

#######################################################################################################################################

                # Explosion was directly NE of the to-be-destroyed block's location on Y-1.
                - case l@-1.0,1.0,1.0:
                    # check if there is a block to the Above AND West AND EAST
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly SE of the to-be-destroyed block's location on Y-1.
                - case l@-1.0,1.0,-1.0:
                    # check if there is a block to the Above AND South AND EAST
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly SW of the to-be-destroyed block's location on Y-1.
                - case l@1.0,1.0,-1.0:
                    # check if there is a block to the Above AND South AND West
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

                # Explosion was directly NW of the to-be-destroyed block's location on Y-1.
                - case l@1.0,1.0,1.0:
                    # check if there is a block to the Above AND North AND West
                    - if <server.flag[BlastProofGlass].contains[<def[value].add[0,-1,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[-1,0,0].material.name>]> && <server.flag[BlastProofGlass].contains[<def[value].add[0,0,-1].material.name>]>:
                        - define blocklist <def[blocklist].exclude[<def[value]>]>

#######################################################################################################################################

        # Determine updated blocklist.
        - determine <def[blocklist]>