Paste #19229: Untitled Paste

Date: 2015/08/11 03:53:43 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


# /doorkey   tier            reset
# /doorkey   tier            list
# /doorkey   tier           create                    hideflags
# /doorkey   tier            edit            display|material|lore|recipe        value
# /doorkey   tier            edit                       lore                      [#]          value
# /doorkey   tier            give                      player
# /doorkey   tier           remove

# lore: 1|2|3|4
# Enter as many values as you want. However they must be separated by |
# Optionally specify a lore line and then the value.
# recipe: 1|2|3|4|5|6|7|8|9
# Items are set up as below; make sure to use the correct name. For example: diamond_sword
# Separation works as with lores.
#  - i@1|i@2|i@3
#  - i@4|i@5|i@6
#  - i@7|i@8|i@9
# When creating an item use hideflags to remove the data shown on the item such as damage, splash effect or other. For example:
# /doorkey mykey create hideflags


DoorKeys:
  type: world
  events:
    on player clicks block:
    - if <context.location.material> !contains "door" {
      - queue clear
      }
    - foreach <server.list_flags> {
      - if <fl@%value%.as_list.contains[<context.location.block>]> {
        - goto is_locked
        }
      - if <def[loop_index]> == <server.list_flags.size> {
        - queue clear
        }
      }
    - mark is_locked
    - foreach <server.list_flags> {
      - if <fl@%value%.as_list.contains[<context.location.block>]> {
        - define tier <def[value].after[T]>
        }
      }
    - if !<context.item.display.contains[<def[tier]>]> {
      - narrate "<red>You need to use the tier <def[tier]> key to open this!"
      - determine cancelled
      } else {
      - narrate "<green>You have used the tier <def[tier]> key!"
      }

    on doorkey command:
    - determine fulfilled passively
    - if <player.is_op> || <context.server> {
      - goto pass
      } else {
      - narrate "<red>Must be Operator to use this command!"
      - queue clear
      }
    - mark pass
    - define tier <context.args.get[1]>
    - choose <context.args.get[2]>:
      - case "remove":
        - narrate "<red>Removed <def[tier]> key!"
        - yaml load:/scripts/doorkeys.dscript id:doorkeys
        - yaml set <def[tier]>:! id:doorkeys
        - queue clear
      - case "give":
        - narrate "<green>Giving <def[tier]> key!"
        - give i@<def[tier]> to:<context.args.get[3]||<player>>
        - queue clear
      - case "list":
        - narrate "<green>Tier <def[tier]> door keys are currently at<&co>"
        - narrate "<green><server.flag[doorkeys_t<def[tier]>]>"
        - queue clear
      - case "reset":
        - flag server doorkeys_t<def[tier]>:none
        - narrate "<green>Tier <def[tier]> door keys reset!"
        - queue clear
      - case "create":
        - if !<server.has_file[/scripts/doorkeys.dscript]> {
          - yaml create id:doorkeys
          - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
          }
        - yaml load:/scripts/doorkeys.dscript id:doorkeys
        - yaml set <def[tier]>.type:item id:doorkeys
        - if <context.args.get[3]> == hideflags {
          - yaml set "<def[tier]>.material:stone<proc[flags]>" id:doorkeys
          - yaml set "<def[tier]>.useflags:true" id:doorkeys
          } else {
          - yaml set "<def[tier]>.material:stone" id:doorkeys
          }
        - yaml set "<def[tier]>.display name:<def[tier]>" id:doorkeys
        - yaml set "<def[tier]>.lore:|:li@" id:doorkeys
        - yaml set "<def[tier]>.recipe:->:recipe1" id:doorkeys
        - yaml set "<def[tier]>.recipe:->:recipe2" id:doorkeys
        - yaml set "<def[tier]>.recipe:->:recipe3" id:doorkeys
        - narrate "<green><def[tier]> key created!"
        - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
        - execute as_server "denizen reload scripts"
        - queue clear
      - case "edit":
        - if !<yaml[doorkeys].contains[<def[tier]>]> {
          - narrate "<red>Key not found!"
          - queue clear
          }
        - if <context.args.get[4]> == null {
          - narrate "<red>Please enter a value!"
          - queue clear
          }
        - yaml load:/scripts/doorkeys.dscript id:doorkeys
        - define value <context.args.get[4]>
        - choose <context.args.get[3]>:
          - case "display":
            - yaml set "<def[tier]>.display name:<def[value]>" id:doorkeys
            - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
            - narrate "<green>Display of Key <def[tier]> set to<&co> <def[value]>!"
            - execute as_server "denizen reload scripts"
          - case "material":
            - if <def[tier].as_script.yaml_key[useflags]> == true {
              - yaml set <def[tier]>.material:<def[value]><proc[flags]> id:doorkeys
              } else {
              - yaml set <def[tier]>.material:<def[value]> id:doorKeys
              }
            - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
            - narrate "<green>Material of Key <def[tier]> set to<&co> <def[value]>!"
            - execute as_server "denizen reload scripts"
          - case "lore":
            - if <context.args.get[5]> !== null {
              - define lore <context.args.get[5]>
              - define line <def[value]>
              - if <yaml[doorkeys].read[<def[tier]>.lore].as_list.size> < <def[line]> {
                - repeat <def[value].sub[<yaml[doorkeys].read[<def[tier]>.lore].as_list.size>]> {
                  - yaml set "<def[tier]>.lore:->:<&sp>" id:doorkeys
                  }
                }
              - yaml set <def[tier]>.lore[<def[line]>]:<def[lore]> id:doorkeys
              - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
              - execute as_server "denizen reload scripts"
              - narrate "<green>Lore of Key <def[tier].lore> set to<&co> <def[value]>!"
              - queue clear
              }
            - yaml set <def[tier]>.lore:|:li@<def[value]> id:doorkeys
            - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
            - execute as_server "denizen reload scripts"
            - narrate "<green>Lore of Key <def[tier].lore> set to<&co> <def[value]>!"
          - case "recipe":
            - if <def[value].as_list.size> > 9 {
              - narrate "<red>Entered too many items!"
              } else if <def[value].as_list.size> < 9 {
              - narrate "<red>Not enough items entered!"
              } else {
              - define value <def[value].as_list>
              - yaml set <def[tier]>.recipe[1]:i@<def[value].get[1]><&pipe>i@<def[value].get[2]><&pipe>i@<def[value].get[3]> id:doorkeys
              - yaml set <def[tier]>.recipe[2]:i@<def[value].get[4]><&pipe>i@<def[value].get[5]><&pipe>i@<def[value].get[6]> id:doorkeys
              - yaml set <def[tier]>.recipe[3]:i@<def[value].get[7]><&pipe>i@<def[value].get[8]><&pipe>i@<def[value].get[9]> id:doorkeys
              - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
              - inventory open origin in@workbench[contents=li@i@stone]
              - narrate "<green>Current crafting recipe<&co>"
              - execute as_server "denizen reload scripts"
              }
        - queue clear
    - if <player.location.cursor_on[10].above.material> contains "door" {
      - define otherblock <player.location.cursor_on[10].above>
      - define text "& <player.location.cursor_on[10].above>"
      } else if <player.location.cursor_on[10].below.material> contains "door" {
      - define otherblock <player.location.cursor_on[10].below>
      - define text "& <player.location.cursor_on[10].below>"
      } else {
      - define otherblock none
      }
    - if <server.flag[doorkeys_t<def[tier]>].as_list> contains <player.location.cursor_on[10]> {
      - flag server doorkeys_t<def[tier]>:<-:<player.location.cursor_on[10]>
      - if <def[otherblock]> !== "none" {
        - flag server doorkeys_t<def[tier]>:<-:<def[otherblock]>
        }
      - narrate "<red><player.location.cursor_on[10].simple> <def[otherblock].simple> removed from the Tier <def[tier]> Door list!"
      } else {
      - flag server doorkeys_t<def[tier]>:->:<player.location.cursor_on[10]>
      - if <def[otherblock]> !== "none" {
        - flag server doorkeys_t<def[tier]>:->:<def[otherblock]>
        }
      - narrate "<green><player.location.cursor_on[10].simple> & <def[otherblock].simple> added to the Tier <def[tier]> Door list!"
      }

flags:
  type: procedure
  script:
  - determine "[flags=li@HIDE_ATTRIBUTES|HIDE_DESTROYS|HIDE_ENCHANTS|HIDE_PLACED_ON|HIDE_POTION_EFFECTS|HIDE_UNBREAKABLE]"