Paste #12720: Current state of this

Date: 2015/01/10 05:12:05 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


###############################################################################################
###############################################################################################
#####                                                                                     #####
#####                             ~-~-~dViewer API v1.00~-~-~                             #####
#####              -The scripted replacement for the Denizen Viewer command-              #####
#####                                     by Morphan1                                     #####
#####                                                                                     #####
###############################################################################################
#####                                                                                     #####
#####                           To create a new dViewer, use...                           #####
#####       - run "s@dViewer Create" "def:ID|PLAYER|LOCATION|VIEWER_TYPE|SIGN_TYPE"       #####
#####  _________________________________________________________________________________  #####
##### | Definition   | Description                             | Example                | #####
##### |--------------|-----------------------------------------|------------------------| #####
##### | ID           | The ID of the dViewer, used for saving. | MyViewer               | #####
##### | PLAYER       | The player to track on the dViewer.     | p@Morphan1             | #####
##### | LOCATION     | The location to create the sign at.     | l@123,123,123,world    | #####
##### | VIEWER_TYPE  | The type of viewer to create.           | location OR logged_in  | #####
##### | SIGN_TYPE    | The material of the sign.               | sign_post OR wall_sign | #####
##### |_________________________________________________________________________________| #####
#####                                                                                     #####
#####                             To remove a dViewer, use...                             #####
#####                          - run "s@dViewer Remove" "def:ID"                          #####
#####  _________________________________________________________________________________  #####
##### | Definition   | Description                             | Example                | #####
##### |--------------|-----------------------------------------|------------------------| #####
##### | ID           | The ID of the dViewer to remove.        | MyViewer               | #####
##### |_________________________________________________________________________________| #####
#####                                                                                     #####
###############################################################################################
###############################################################################################
dViewer Events:
  type: world
  debug: false
  events:
    on server start:
    - foreach <server.flag[viewer-ids].as_list> {
      - run "s@dViewer Loop" "def:<def[value]>|<server.flag[viewers.<def[value]>.player]>|<server.flag[viewers.<def[value]>.location]>|<server.flag[viewers.<def[value]>.type]>|<server.flag[viewers.<def[value]>.sign]>"
      }
    on player breaks block:
    - foreach <server.flag[viewer-ids].as_list> {
      - if <context.location.block> == <server.flag[viewers.<def[value]>.location]> {
        - narrate "<red>You're not allowed to break that sign."
        - determine cancelled
        }
      }

dViewer Create:
  type: task
  debug: false
  definitions: id|player|location|type|sign
  script:
  - flag global "viewer-ids:->:<def[id]>"
  - flag global "viewers.<def[id]>.player:<def[player]>"
  - flag global "viewers.<def[id]>.location:<def[location].block>"
  - flag global "viewers.<def[id]>.type:<def[type]>"
  - flag global "viewers.<def[id]>.sign:<def[sign]>"
  - inject "s@dViewer Loop"

dViewer Remove:
  type: task
  debug: false
  definitions: id
  script:
  - flag global "viewer-ids:<-:<def[id]>"
  - queue "id:<server.flag[viewers.<def[id]>.queue]>" clear
  - modifyblock <server.flag[viewers.<def[id]>.location]> m@air
  - flag global "viewers.<def[id]>:!"

dViewer Loop:
  type: task
  debug: false
  definitions: id|player|location|type|sign
  script:
  - flag global "viewers.<def[id]>.queue:<queue.id>"
  - ^inject locally "path:<def[type]>" "player:<def[player]>"
  location:
  - wait 1t
  - ^define lines "<tern[<player.is_online>]:li@<player.location.block.x>|<player.location.block.y>|<player.location.block.z>|<player.location.world.name>||li@|Player '<player.name>'|is offline>"
  - ^sign "type:<def[sign]>" <def[lines]> <def[location]>
  - ^inject locally "path:location"
  logged_in:
  - wait 1t
  - ^sign "type:<def[sign]>" "li@|Player '<player.name>'|is <tern[<player.is_online>]:<green>online||<red>offline>" <def[location]>
  - ^inject locally "path:logged_in"

dViewer Command:
  type: command
  debug: false
  name: dviewer
  description: Creates a custom dViewer at your location.
  usage: /dviewer [create/remove] [<&lt>id<&gt>] [location/logged_in] (<&lt>player<&gt>)
  allowed help:
  - if <player> != null determine true
    else determine false
  script:
  - define action <context.args.get[1]||>
  - if <def[action]> == create {
    - define id <context.args.get[2].escaped||>
    - define type <context.args.get[3].escaped||>
    - define player <context.args.get[4]||<player.name>>
    - if <def[id].length> == 0 {
      - narrate "Invalid ID given. Usage<&co> <script.yaml_key[usage]>"
      - queue clear
      }
      else if <server.flag[viewer-ids].as_list.contains[<def[id]>]||false> {
      - narrate "ID '<def[id]>' is already taken! Please remove it first."
      - queue clear
      }
      else if <def[type].length> == 0 {
      - narrate "Invalid type of dViewer given. Usage<&co> <script.yaml_key[usage]>"
      - queue clear
      }
    - run "s@dViewer Create" "def:<def[id]>|<player>|<player.location>|<def[type]>|sign_post"
    }
    else if <def[action]> == remove {
    - define id <context.args.get[2]||>
    - if <def[id].length> == 0 {
      - narrate "Invalid ID given. Usage<&co> <script.yaml_key[usage]>"
      - queue clear
      }
      else if !<server.flag[viewer-ids].as_list.contains[<def[id]>]||false> {
      - narrate "ID '<def[id]>' does not exist. Perhaps it has already been removed?"
      - queue clear
      }
    - run "s@dViewer Remove" "def:<def[id]>"
    - narrate "dViewer '<def[id].unescaped>' has been removed."
    }