Initial commit
This commit is contained in:
26
scripts/liteprofilesutils/liteprofilesutils_command.dsc
Normal file
26
scripts/liteprofilesutils/liteprofilesutils_command.dsc
Normal file
@@ -0,0 +1,26 @@
|
||||
liteprofilesutils_command_profiles:
|
||||
debug: false
|
||||
type: command
|
||||
name: profiles
|
||||
description: Manage your profiles, neatly.
|
||||
aliases:
|
||||
- accountmenu
|
||||
- pfm
|
||||
usage: /profiles
|
||||
tab completions:
|
||||
1: <list[]>
|
||||
permission: liteprofilesutils.command.profiles
|
||||
script:
|
||||
- if <context.source_type> != player:
|
||||
- narrate "<&c>Run this command as a player"
|
||||
- stop
|
||||
- define player <player>
|
||||
- clickable save:accept usages:1 until:30s:
|
||||
- flag <[player]> liteprofiles_legacy_menu:!
|
||||
- run liteprofilesutils_show_menu def.player:<[player]>
|
||||
- narrate <empty>
|
||||
- narrate format:formats_prefix "Our profile system lets you own multiple 'unique accounts' by tricking the server to hand you new unique IDs, which may cause the server to incorrectly save your inventory, ranks, or other data."
|
||||
- narrate <empty>
|
||||
- narrate "<&c>[<&4><&l>!<&c>] <&7>Consider this feature <&6>experimental<&7>; take screenshots of your items and ranks if you are concerned."
|
||||
- narrate <element[<&a><&l>[ I UNDERSTAND ]].on_click[<entry[accept].command>]>
|
||||
- narrate <empty>
|
||||
12
scripts/liteprofilesutils/liteprofilesutils_data.dsc
Normal file
12
scripts/liteprofilesutils/liteprofilesutils_data.dsc
Normal file
@@ -0,0 +1,12 @@
|
||||
liteprofilesutils_data:
|
||||
debug: false
|
||||
type: data
|
||||
rank-sync:
|
||||
- owner
|
||||
- admin
|
||||
- media
|
||||
sync-op: true
|
||||
join-leave:
|
||||
join: <&8>[<&a>+<&8>] <&7><player.name>
|
||||
leave: <&8>[<&c>-<&8>] <&7><player.name>
|
||||
welcome: <&8>[<&6><&l>!<&8>] <&e>Welcome <player.name>!
|
||||
126
scripts/liteprofilesutils/liteprofilesutils_tasks.dsc
Normal file
126
scripts/liteprofilesutils/liteprofilesutils_tasks.dsc
Normal file
@@ -0,0 +1,126 @@
|
||||
liteprofilesutils_load_data:
|
||||
debug: false
|
||||
type: task
|
||||
script:
|
||||
- ~yaml load:../LiteProfiles/data.yml id:liteprofiles_data
|
||||
|
||||
liteprofilesutils_get_master_uuid:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player
|
||||
script:
|
||||
- determine <placeholder[liteprofiles_masteruuid].player[<[player]>]>
|
||||
|
||||
liteprofilesutils_get_profile_limit:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player
|
||||
script:
|
||||
- determine <placeholder[liteprofiles_limit].player[<[player]>]>
|
||||
|
||||
liteprofilesutils_get_profile_count:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player
|
||||
script:
|
||||
- determine <placeholder[liteprofiles_count].player[<[player]>].sub[1]>
|
||||
|
||||
liteprofilesutils_show_menu:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player
|
||||
script:
|
||||
- ~run liteprofilesutils_load_data
|
||||
- define masteruuid <proc[liteprofilesutils_get_master_uuid].context[<[player]>]>
|
||||
- define profilelimit <proc[liteprofilesutils_get_profile_limit].context[<[player]>]>
|
||||
- define profilecount <proc[liteprofilesutils_get_profile_count].context[<[player]>]>
|
||||
- define contents <list[]>
|
||||
# master uuid
|
||||
- define masteritem <item[emerald_block]>
|
||||
- define mastername <proc[character_get_name].context[<player[<[masteruuid]>]>]>
|
||||
- if <[mastername]> == null:
|
||||
- define mastername "Unnamed Character"
|
||||
- adjust def:masteritem display:<&f><[mastername]>
|
||||
- adjust def:masteritem lore:<list[<&6>Master Profile|<&f>|<&8>UUID:|<&8><[masteruuid]>]>
|
||||
- flag <[masteritem]> liteprofiles:<map[].with[type].as[master].with[value].as[<[masteruuid]>]>
|
||||
- define contents <[contents].include[<[masteritem]>]>
|
||||
# slave uuids
|
||||
- define sortedslaveitems <list[]>
|
||||
- foreach <yaml[liteprofiles_data].read[<[masteruuid]>].keys.exclude[active].exclude[<[masteruuid]>]> as:slaveuuid:
|
||||
- define slaveitem <item[emerald]>
|
||||
- define slavename <proc[character_get_name].context[<player[<[slaveuuid]>]>]>
|
||||
- if <[slavename]> == null:
|
||||
- define slavename "Unnamed Character"
|
||||
- adjust def:slaveitem display:<&f><[slavename]>
|
||||
- adjust def:slaveitem lore:<list[<&e>Alt Profile|<&f>|<&8>UUID:|<&8><[slaveuuid]>]>
|
||||
- flag <[slaveitem]> liteprofiles:<map[].with[type].as[slave].with[value].as[<[slaveuuid]>]>
|
||||
- define sortedslaveitems <[sortedslaveitems].include[<[slaveitem]>]>
|
||||
- define sortedslaveitems <[sortedslaveitems].sort_by_value[display]>
|
||||
- define contents <[contents].include[<[sortedslaveitems]>]>
|
||||
# free slots
|
||||
- if <[profilecount]> < <[profilelimit].sub[1]>:
|
||||
- define freeitem <item[light_blue_dye]>
|
||||
- adjust def:freeitem "display:<&b>Free Slot"
|
||||
- adjust def:freeitem lore:<list[<&f>Click here to create a new profile]>
|
||||
- flag <[freeitem]> liteprofiles:<map[].with[type].as[free]>
|
||||
- define contents <[contents].include[<[freeitem]>]>
|
||||
- repeat <[profilelimit].sub[<[profilecount]>]>:
|
||||
- define unuseditem <item[gray_dye]>
|
||||
- adjust def:unuseditem "display:<&7>Free Slot"
|
||||
- define contents <[contents].include[<[unuseditem]>]>
|
||||
# show
|
||||
- run liteprofiles_legacy_menus_open def.player:<[player]> def.id:liteprofiles def.page:0 def.contents:<[contents]>
|
||||
|
||||
# # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# LEGACY MENU LIBRARY PROVIDED IN LITEPROFILES #
|
||||
# # # # # # # # # # # # # # # # # # # # # # # # #
|
||||
# buttons
|
||||
liteprofiles_legacy_menus_button_previous:
|
||||
debug: false
|
||||
type: item
|
||||
material: ender_pearl
|
||||
display name: <&a><<><<>
|
||||
|
||||
liteprofiles_legacy_menus_button_next:
|
||||
debug: false
|
||||
type: item
|
||||
material: ender_eye
|
||||
display name: <&a><>><>>
|
||||
|
||||
# generate menu
|
||||
liteprofiles_legacy_menus_open:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|id|page|contents
|
||||
script:
|
||||
- define inventory <inventory[generic[title=<&f>邑邑邑邑鄈;size=18]]>
|
||||
- foreach <[contents].get[<[page].mul[9].add[1]>].to[<[page].add[1].mul[9]>].if_null[<list[]>]> as:item:
|
||||
- inventory set origin:<[item]> destination:<[inventory]> slot:<[loop_index]>
|
||||
- if <[page]> > 0:
|
||||
- inventory set origin:<item[liteprofiles_legacy_menus_button_previous]> destination:<[inventory]> slot:13
|
||||
- if <[contents].size> > <[page].add[1].mul[9]>:
|
||||
- inventory set origin:<item[liteprofiles_legacy_menus_button_next]> destination:<[inventory]> slot:15
|
||||
- flag <[player]> liteprofiles_legacy_menu:<map[].with[id].as[<[id]>].with[page].as[<[page]>].with[contents].as[<[contents]>]>
|
||||
- define profilelimit <proc[liteprofilesutils_get_profile_limit].context[<[player]>]>
|
||||
- inventory set origin:<item[paper[display=<&6>How to use;lore=<&7>Your master profile is your original UUID (your main account).|<&7>You will see your other profiles in the menu. Click on any button|<&7>to change to that profile.|<&f>|<&7>You may also create new profiles if you have free slots.|<&7>You currently own <&e><[profilelimit]> profiles<&7>. You may obtain more|<&7>with donation ranks or for animal characters.]]> destination:<[inventory]> slot:10
|
||||
- inventory open player:<[player]> destination:<[inventory]>
|
||||
|
||||
# menu button handler
|
||||
liteprofiles_legacy_menus_button_handler:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
on player clicks in inventory:
|
||||
- if <context.inventory.title> != <&f>邑邑邑邑鄈:
|
||||
- stop
|
||||
- determine cancelled passively
|
||||
# if air ignore, means button doesnt exist or is to be handled elsewhere
|
||||
# 13 prev 15 next everything else ignore
|
||||
- if <context.slot> == 13:
|
||||
- if <context.item.material.advanced_matches[ender_pearl]>:
|
||||
- define data <player.flag[liteprofiles_legacy_menu]>
|
||||
- run liteprofiles_legacy_menus_open def.player:<player> def.id:<[data].get[id]> def.page:<[data].get[page].sub[1]> def.contents:<[data].get[contents]>
|
||||
- if <context.slot> == 15:
|
||||
- if <context.item.material.advanced_matches[ender_eye]>:
|
||||
- define data <player.flag[liteprofiles_legacy_menu]>
|
||||
- run liteprofiles_legacy_menus_open def.player:<player> def.id:<[data].get[id]> def.page:<[data].get[page].add[1]> def.contents:<[data].get[contents]>
|
||||
95
scripts/liteprofilesutils/liteprofilesutils_world.dsc
Normal file
95
scripts/liteprofilesutils/liteprofilesutils_world.dsc
Normal file
@@ -0,0 +1,95 @@
|
||||
liteprofilesutils_world:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
## load YAML data
|
||||
after server start:
|
||||
- ~run liteprofilesutils_load_data
|
||||
## patch join/leave & rank sync
|
||||
on player quits:
|
||||
- define masteruuid <proc[liteprofilesutils_get_master_uuid].context[<player>]>
|
||||
- define profilelimit <placeholder[liteprofiles_limit]>
|
||||
#
|
||||
- flag server liteprofilesutils_lastseengroups:<server.flag[liteprofilesutils_lastseengroups].if_null[<map[]>].with[<[masteruuid]>].as[<player.groups>]>
|
||||
#
|
||||
- define lastbestlimit <server.flag[liteprofilesutils_lastbestlimit].if_null[<map[]>]>
|
||||
- flag server liteprofilesutils_lastbestlimit:<[lastbestlimit].with[<[masteruuid]>].as[<[profilelimit].max[<[lastbestlimit].get[<[masteruuid]>].if_null[1]>]>]>
|
||||
#
|
||||
- define joinleavedata <script[liteprofilesutils_data].data_key[join-leave]>
|
||||
- announce <[joinleavedata].get[leave].parsed>
|
||||
on player joins:
|
||||
- define masteruuid <proc[liteprofilesutils_get_master_uuid].context[<player>]>
|
||||
# sync groups, O(scary)
|
||||
- define syncgroupdata <script[liteprofilesutils_data].data_key[rank-sync]>
|
||||
- define lastseengroups <server.flag[liteprofilesutils_lastseengroups].get[<[masteruuid]>].if_null[<list[]>]>
|
||||
- if <[lastseengroups].is_empty>:
|
||||
- goto joinmessage
|
||||
- foreach <[lastseengroups].include[<player.groups>]> as:trygroup:
|
||||
- define ok false
|
||||
- foreach <[syncgroupdata]> as:matchgroup:
|
||||
- if <[trygroup].advanced_matches[<[matchgroup]>]>:
|
||||
- define ok true
|
||||
- foreach stop
|
||||
- if !<[ok]>:
|
||||
- foreach next
|
||||
- if <[lastseengroups].contains[<[trygroup]>]>:
|
||||
- if !<player.in_group[<[trygroup]>]>:
|
||||
- group add <[trygroup]>
|
||||
- else:
|
||||
- if <player.in_group[<[trygroup]>]>:
|
||||
- group remove <[trygroup]>
|
||||
- if !<player.in_group[default]>:
|
||||
- group add default
|
||||
# sync best perm level
|
||||
- define bestlimit <server.flag[liteprofilesutils_lastbestlimit].get[<[masteruuid]>].if_null[1]>
|
||||
- if !<player.has_permission[liteprofiles.limit.<[bestlimit]>]>:
|
||||
- permission add liteprofiles.limit.<[bestlimit]>
|
||||
# sync op
|
||||
- if <player[<[masteruuid]>].is_op>:
|
||||
- adjust <player> is_op:true
|
||||
- else:
|
||||
- adjust <player> is_op:false
|
||||
# sync whitelist
|
||||
- if <player[<[masteruuid]>].whitelisted>:
|
||||
- adjust <player> whitelisted:true
|
||||
- else:
|
||||
- adjust <player> whitelisted:false
|
||||
# adjust join message
|
||||
- mark joinmessage
|
||||
- define joinleavedata <script[liteprofilesutils_data].data_key[join-leave]>
|
||||
- if <player.uuid> == <[masteruuid]>:
|
||||
- if <server.flag[liteprofilesutils_welcome].if_null[<list[]>].contains[<player.uuid>]>:
|
||||
- announce <[joinleavedata].get[welcome].parsed>
|
||||
- flag server liteprofilesutils_welcome:<server.flag[liteprofilesutils_welcome].if_null[<list[]>].include[<player.uuid>]>
|
||||
- announce <[joinleavedata].get[join].parsed>
|
||||
## prevent /profile remove
|
||||
on command:
|
||||
- if <context.command.to_lowercase> == profile || <context.command.to_lowercase> == account || <context.command.to_lowercase> == pf:
|
||||
- if <context.args.get[1].to_lowercase.if_null[null]> == remove:
|
||||
- determine cancelled passively
|
||||
- narrate "<&c>You are forbidden from performing this operation."
|
||||
## GUI menu
|
||||
on player clicks in inventory bukkit_priority:low:
|
||||
- if <context.inventory.title> != <&f>邑邑邑邑鄈:
|
||||
- stop
|
||||
- if <player.flag[liteprofiles_legacy_menu].get[id].if_null[null]> != liteprofiles:
|
||||
- stop
|
||||
- if <context.slot> > 45:
|
||||
- stop
|
||||
- if <context.item.advanced_matches[air]>:
|
||||
- stop
|
||||
# logic
|
||||
- define data <context.item.flag[liteprofiles].if_null[null]>
|
||||
- if <[data]> == null:
|
||||
- stop
|
||||
- if <[data].get[type]> == master:
|
||||
- define value <[data].get[value]>
|
||||
- inventory close
|
||||
- execute as_player "profile use <[value]>"
|
||||
- else if <[data].get[type]> == slave:
|
||||
- define value <[data].get[value]>
|
||||
- inventory close
|
||||
- execute as_player "profile use <[value]>"
|
||||
- else if <[data].get[type]> == free:
|
||||
- execute as_player "profile add"
|
||||
- run liteprofilesutils_show_menu def.player:<player>
|
||||
Reference in New Issue
Block a user