Paste #67117: Untitled Paste

Date: 2020/04/07 19:05:55 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


lobbyJoinHandler:
  type: world
  debug: false
  events:
    on player joins:
    - if <player.has_flag[adminMode]>:
      - stop
    - wait 1t
    - teleport <player> <util.random.int[80].to[86].add[0.5]>,38,<util.random.int[40].to[46].add[0.5]>,-15,270,world_spawn
    - inventory set d:<player.inventory> o:in@lobbyplayerinventory
    - team name:lobby add:<player>
    - if <player.in_group[default]>:
      - cast invisibility <player> d:99999s
    - if <player.has_effect[invisibility]> && !<player.in_group[default]>:
      - cast invisibility remove <player> 
    - adjust <player> gamemode:adventure
    on system time [00:30]:
    - if <player.has_flag[adminMode]>:
      - stop
    - if <player.in_group[default]>:
      - cast invisibility <player> d:99999s
    - if <player.has_effect[invisibility]> && !<player.in_group[default]>:
      - cast invisibility remove <player>

lobbyPlayerInventory:
  type: inventory
  debug: false
  size: 36
  slots:
  - "[i@serverselector] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"

adminModeInventory:
  type: inventory
  debug: false
  size: 36
  slots:
  - "[i@compass] [i@wooden_axe] [i@wooden_shovel] [] [] [] [] [] [i@serverselector]"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"

serverselector:
  type: item
  debug: false
  material: i@ender_pearl
  display name: <&b><&l>Vail Crystal
  lore:
  - <&7>Use this crystal to travel to the realm!

vailShards:
  type: item
  debug: false
  material: i@ender_pearl
  display name: <&d>Vail Crystal Shard
  lore:
  - <&7>Use this crystal to travel to the realm!
  mechanisms:
    custom_model_data: 2

lobbyInventoryHandler:
  type: world
  debug: false
  events:
    on player drops serverselector:
    - determine cancelled
    on player clicks with serverselector using either_hand:
    - determine passively CANCELLED
    - foreach <bungee.list_servers.filter[starts_with[lobby]].alphanumeric> as:lobby:
      - ~bungeetag <server.list_online_players.size> server:<[lobby]> save:<[lobby]>Playercount
      - flag server <[lobby]>Playercount:<entry[<[lobby]>Playercount].result>
    - if <player.groups.contains_any[admin|advbuilder|builder|dev|mod|systemdev]> && <bungee.list_servers.contains_any[dev1|build1]>:
      - foreach <bungee.list_servers.filter[starts_with[dev]].alphanumeric> as:dev:
        - ~bungeetag <server.list_online_players.size> server:<[dev]> save:<[dev]>Playercount
        - flag server <[dev]>Playercount:<entry[<[dev]>Playercount].result>
      - foreach <bungee.list_servers.filter[starts_with[build]].alphanumeric> as:build:
        - ~bungeetag <server.list_online_players.size> server:<[build]> save:<[build]>Playercount
        - flag server <[build]>Playercount:<entry[<[build]>Playercount].result>
    - inventory open d:<inventory[lobbyInventory]>
    on player enters lobbyPortal:
    - determine passively CANCELLED
    - foreach <bungee.list_servers.filter[starts_with[lobby]].alphanumeric> as:lobby:
      - ~bungeetag <server.list_online_players.size> server:<[lobby]> save:<[lobby]>Playercount
      - flag server <[lobby]>Playercount:<entry[<[lobby]>Playercount].result>
    - if <player.groups.contains_any[admin|advbuilder|builder|dev|mod|systemdev]> && <bungee.list_servers.contains[starts_with[dev]]>:
      - foreach <bungee.list_servers.filter[starts_with[dev]].alphanumeric> as:dev:
        - ~bungeetag <server.list_online_players.size> server:dev1 save:devPlayercount
        - flag server <[dev]>Playercount:<entry[<[dev]>Playercount].result>
      - foreach <bungee.list_servers.filter[starts_with[build]].alphanumeric> as:build:
        - ~bungeetag <server.list_online_players.size> server:build1 save:buildPlayercount
        - flag server <[build]>Playercount:<entry[<[build]>Playercount].result>
    - shoot <player> destination:<player.location.sub[5,0,0]> speed:2 origin:<player.location> no_rotate
    - wait 2t
    - inventory open d:<inventory[lobbyInventory]>
    on player clicks in lobbyInventory:
    - determine cancelled
    on player drags in lobbyInventory:
    - determine cancelled
    on player clicks serverLobbyOnline in lobbyInventory:
    - bungeeexecute "send <player.name> <context.item.nbt[lobby]>"
    on player clicks serverDevOnline in lobbyInventory:
    - bungeeexecute "send <player.name> dev1"
    on player clicks serverBuildOnline in lobbyInventory:
    - bungeeexecute "send <player.name> build1"

lobbyInventory: 
  type: inventory 
  debug: false
  title: Vailcraft Servers<&co> Page 1
  size: 54
  procedural items:
  - foreach <bungee.list_servers.filter[starts_with[lobby]].alphanumeric> as:lobby:
    - define itemDName <s@serverNames.yaml_key[<[lobby]>.displayname]>
    - if <[lobby]> == <bungee.server>:
      - define itemLore "<server.flag[<[lobby]>Playercount]>|<&f>|<&7>You are connected|<&7>to this lobby."
    - else:
      - define itemLore "<server.flag[<[lobby]>Playercount]>|<&f>|<&7>Click to join..."
#   serverItemLobby is the actual item that you click on for each individual lobby.
    - define serverItemLobby "i@serverLobbyOnline[display_name=<&b><[itemDName]>;lore=<&9>Players<&co> <&7><[itemLore]>;nbt=lobby/<[lobby]>]"
#   serverListLobby is the collection (list) of serverItemLobby for each online lobby.
    - define serverListLobby:->:<[serverItemLobby]> 
# itemsLobby is the output from the foreach so that the full list can be used outside of the loop.
  - define itemsLobby <[serverListLobby]>
  - define whitelistLobby li@46|47|48|49|50|51|52
  - define whitelistDividers li@8|17|26|35|36|37|38|39|40|41|42|43|44|53
  - define dividers <list[].pad_right[14].with[i@black_stained_glass_pane]>
# outputLobby starts here as an empty list, adding 54 i@air spaces (the number of 
# spaces in a large chest) so that the list can be populated with lobbies. 
  - define outputLobby <list[].pad_right[54].with[air]>
  - foreach <[itemsLobby]>:
#   outputLobby starts here as a list of 54 i@air spaces, but then the items are added
#   to the slots that were whitelisted specifically for lobby items.
#   The `.get[<[loop_index]>]` is to specify which whitelistLobby space to fill first.
    - define outputLobby <[outputLobby].set[<[value]>].at[<[whitelistLobby].get[<[loop_index]>]>]>
  - foreach <[dividers]>:
    - define outputLobby <[outputLobby].set[<[value]>].at[<[whitelistDividers].get[<[loop_index]>]>]>
  - if <player.groups.contains_any[admin|advbuilder|builder|dev|mod|systemdev]>:
    - if <bungee.list_servers.contains[dev1]>:
      - define serverItemDev1 "i@serverDevOnline[lore=<&e>Players<&co> <&7><server.flag[dev1Playercount]>/50|<&f>|<&7>Click to join...;nbt=dev/dev1]"
      - define outputLobby <[outputLobby].set[<[serverItemDev1]>].at[45]>
    - if !<bungee.list_servers.contains[dev1]>:
      - define serverItemDev1 "i@serverDevOffline[lore=<&7>Offline...]"
      - define outputLobby <[outputLobby].set[<[serverItemDev1]>].at[45]>
    - if <bungee.list_servers.contains[build1]>:
      - define serverItemBuild1 "i@serverBuildOnline[lore=<&d>Players<&co> <&7><server.flag[build1Playercount]>/50|<&f>|<&7>Click to join...;nbt=build/build1]"
      - define outputLobby <[outputLobby].set[<[serverItemBuild1]>].at[54]>
    - if !<bungee.list_servers.contains[build1]>:
      - define serverItemBuild1 "i@serverBuildOffline[lore=<&7>Offline...]"
      - define outputLobby <[outputLobby].set[<[serverItemBuild1]>].at[54]>
  - determine <[outputLobby]>

serverNames:
  type: yaml data
  debug: false
  lobby1:
    displayname: Lobby 1
    stacksize: 1
  lobby2:
    displayname: Lobby 2
    stacksize: 2
  world1: World 1

serverLobbyOnline:
  type: item
  debug: false
  material: i@chest
  display name: <&4><&l>Test
  lore:
  - <&7>Click to connect...

serverLobbyFull:
  type: item
  debug: false
  material: i@red_concrete
  display name: <&4><&l>Server Select
  lore:
  - <&7>Server is full.

serverDevOnline:
  type: item
  debug: false
  material: i@crafting_table
  display name: <&6>Development Server
  lore:
  - <&7>Click to connect...

serverDevOffline:
  type: item
  debug: false
  material: i@stripped_spruce_wood
  display name: <&8>Development Server
  lore:
  - <&7>Offline...

serverBuildOnline:
  type: item
  debug: false
  material: i@grass_block
  display name: <&5>Building Server
  lore:
  - <&7>Click to connect...

serverBuildOffline:
  type: item
  debug: false
  material: i@podzol
  display name: <&8>Building Server
  lore:
  - <&7>Offline...

adminModeCommand:
  type: command
  debug: false
  name: Admin Handler
  description: Used to enter administrator mode on the server.
  usage: /adminmode
  aliases:
  - am
  permission: adminmode
  permission message: <&e>Type /help for a list of commands.
  allowed help:
  - determine <player.in_group[admin]||<context.server>>
  script:
  - if !<player.in_group[admin]||<context.server>>:
    - narrate "<&e>Type /help for a list of commands."
    - stop
  - if <player.has_flag[adminMode]>:
    - flag <player> adminModeGMExempt
    - narrate "<&4>[Admin] <&c>You have left admin mode."
    - flag player adminMode:!
    - flag server adminMode:<-:<player>
    - adjust <player> gamemode:adventure
    - adjust <player> show_to_players
    - inventory set d:<player.inventory> o:in@lobbyPlayerInventory
    - flag <player> adminModeGMExempt:!
    - stop
  - flag <player> adminModeGMExempt
  - narrate "<&4>[Admin] <&c>You have entered admin mode."
  - flag player adminMode
  - flag server adminMode:->:<player>
  - adjust <player> gamemode:creative
  - adjust <player> hide_from_players
  - define admin <server.list_online_players.filter[in_group[admin]]>
  - foreach <[admin]> as:adminOnline:
    - adjust <[adminOnline]> show_entity:<player>
  - inventory set d:<player.inventory> o:in@adminModeInventory
  - flag <player> adminModeGMExempt:!

adminModeHandler:
  type: world
  debug: true
  events:
    on player changes gamemode to creative:
      - if !<player.has_flag[adminModeGMExempt]> && !<player.has_flag[adminMode]>:
        - narrate "<&c>ABORTED<&co> Please use <&a>/adminmode<&c> to access creative mode."
        - determine cancelled
    on player changes gamemode:
      - if <player.has_flag[adminMode]> && !<player.has_flag[adminModeGMExempt]>:
        - narrate "<&e>NOTE<&co> You are still in <&4>Admin Mode<&e>. Use <&a>/adminmode<&e> again to exit."
    on player joins:
      - if !<server.has_flag[adminMode]>:
        - stop
      - if <player.in_group[admin]>:
        - wait 10t
        - foreach <server.flag[adminMode]> as:inAdminMode:
          - adjust <player> show_entity:<[inAdminMode].as_player>
      - if <player.has_flag[adminMode]>:
        - adjust <player> hide_from_players
        - define admin <server.list_online_players.filter[in_group[admin]]>
        - foreach <[admin]> as:adminOnline:
          - adjust <[adminOnline]> show_entity:<player>