[{"data":1,"prerenderedAt":837},["ShallowReactive",2],{"docs-navigation:\u002Fdocs\u002Fmodules\u002Fvital-players\u002Fplayers":3,"docs-page-estimated-read-time:\u002Fdocs\u002Fmodules\u002Fvital-players\u002Fplayers":399,"docs-page:\u002Fdocs\u002Fmodules\u002Fvital-players\u002Fplayers":400},[4,9,41,69,282],{"title":5,"path":6,"stem":7,"icon":8},"Welcome to the Vital docs","\u002Fdocs\u002Fabout","docs\u002F1.about","i-lucide-info",{"title":10,"path":11,"stem":12,"children":13,"icon":40},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F2.getting-started\u002F1.index",[14,16,35],{"title":15,"path":11,"stem":12,"icon":8},"What is Vital?",{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":34},"Installation","i-lucide-download","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F2.getting-started\u002F1.installation",[22,26,30],{"title":23,"path":24,"stem":25},"Using a starter project (~5 minutes)","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fstarter","docs\u002F2.getting-started\u002F1.installation\u002F2.starter",{"title":27,"path":28,"stem":29},"Manual configuration (~7-8 minutes)","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fmanual","docs\u002F2.getting-started\u002F1.installation\u002F3.manual",{"title":31,"path":32,"stem":33},"Using the initializer (~2-3 minutes)","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Finitializer","docs\u002F2.getting-started\u002F1.installation\u002F4.initializer",false,{"title":36,"path":37,"stem":38,"icon":39},"Main class","\u002Fdocs\u002Fgetting-started\u002Fmain-plugin-class","docs\u002F2.getting-started\u002F2.main-plugin-class","i-lucide-play","i-lucide-circle-play",{"title":42,"path":43,"stem":44,"children":45,"icon":68},"Conventions","\u002Fdocs\u002Fconventions","docs\u002F3.conventions\u002F1.index",[46,48,52,56,60,64],{"title":47,"path":43,"stem":44,"icon":8},"About",{"title":49,"path":50,"stem":51},"Spring","\u002Fdocs\u002Fconventions\u002Fspring","docs\u002F3.conventions\u002F2.spring",{"title":53,"path":54,"stem":55},"Platforms","\u002Fdocs\u002Fconventions\u002Fplatform-implementations","docs\u002F3.conventions\u002F3.platform-implementations",{"title":57,"path":58,"stem":59},"Metadata","\u002Fdocs\u002Fconventions\u002Fmetadata","docs\u002F3.conventions\u002F4.metadata",{"title":61,"path":62,"stem":63},"Lifecycles","\u002Fdocs\u002Fconventions\u002Flifecycles","docs\u002F3.conventions\u002F5.lifecycles",{"title":65,"path":66,"stem":67},"(Optional) Advanced class loading","\u002Fdocs\u002Fconventions\u002Fadvanced-classloading","docs\u002F3.conventions\u002F6.advanced-classloading","i-lucide-cog",{"title":70,"path":71,"stem":72,"children":73,"icon":281},"Modules","\u002Fdocs\u002Fmodules","docs\u002F4.modules\u002F1.index",[74,76,100,106,112,126,136,150,164,178,188,224,234,248,257,275],{"title":75,"path":71,"stem":72,"icon":8},"What are modules?",{"title":77,"path":78,"stem":79,"children":80,"icon":99},"vital-core","\u002Fdocs\u002Fmodules\u002Fvital-core","docs\u002F4.modules\u002F2.vital-core\u002F1.index",[81,83,87,91,95],{"title":82,"path":78,"stem":79,"icon":8},"About this module",{"title":84,"path":85,"stem":86},"Configuration","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Fconfiguration","docs\u002F4.modules\u002F2.vital-core\u002F2.configuration",{"title":88,"path":89,"stem":90},"Listeners","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Flisteners","docs\u002F4.modules\u002F2.vital-core\u002F3.listeners",{"title":92,"path":93,"stem":94},"Conditional beans","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Fconditional-beans","docs\u002F4.modules\u002F2.vital-core\u002F4.conditional-beans",{"title":96,"path":97,"stem":98},"Repositories","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Frepositories","docs\u002F4.modules\u002F2.vital-core\u002F5.repositories","",{"title":101,"path":102,"stem":103,"children":104,"icon":99},"vital-cloudnet4-bridge","\u002Fdocs\u002Fmodules\u002Fvital-cloudnet4-bridge","docs\u002F4.modules\u002Fvital-cloudnet4-bridge\u002F1.index",[105],{"title":82,"path":102,"stem":103,"icon":8},{"title":107,"path":108,"stem":109,"children":110,"icon":99},"vital-cloudnet4-driver","\u002Fdocs\u002Fmodules\u002Fvital-cloudnet4-driver","docs\u002F4.modules\u002Fvital-cloudnet4-driver\u002F1.index",[111],{"title":82,"path":108,"stem":109,"icon":8},{"title":113,"path":114,"stem":115,"children":116,"icon":99},"vital-commands","\u002Fdocs\u002Fmodules\u002Fvital-commands","docs\u002F4.modules\u002Fvital-commands\u002F1.index",[117,118,122],{"title":82,"path":114,"stem":115,"icon":8},{"title":119,"path":120,"stem":121},"Commands","\u002Fdocs\u002Fmodules\u002Fvital-commands\u002Fcommands","docs\u002F4.modules\u002Fvital-commands\u002Fcommands",{"title":123,"path":124,"stem":125},"Exception handling","\u002Fdocs\u002Fmodules\u002Fvital-commands\u002Fexception-handling","docs\u002F4.modules\u002Fvital-commands\u002Fexception-handling",{"title":127,"path":128,"stem":129,"children":130,"icon":99},"vital-configs","\u002Fdocs\u002Fmodules\u002Fvital-configs","docs\u002F4.modules\u002Fvital-configs\u002F1.index",[131,132],{"title":82,"path":128,"stem":129,"icon":8},{"title":133,"path":134,"stem":135},"Configs","\u002Fdocs\u002Fmodules\u002Fvital-configs\u002Fconfigs","docs\u002F4.modules\u002Fvital-configs\u002F2.configs",{"title":137,"path":138,"stem":139,"children":140,"icon":99},"vital-holograms","\u002Fdocs\u002Fmodules\u002Fvital-holograms","docs\u002F4.modules\u002Fvital-holograms\u002F1.index",[141,142,146],{"title":82,"path":138,"stem":139,"icon":8},{"title":143,"path":144,"stem":145},"Global holograms","\u002Fdocs\u002Fmodules\u002Fvital-holograms\u002Fglobal-holograms","docs\u002F4.modules\u002Fvital-holograms\u002F2.global-holograms",{"title":147,"path":148,"stem":149},"Player holograms","\u002Fdocs\u002Fmodules\u002Fvital-holograms\u002Fplayer-holograms","docs\u002F4.modules\u002Fvital-holograms\u002F3.player-holograms",{"title":151,"path":152,"stem":153,"children":154,"icon":99},"vital-inventories","\u002Fdocs\u002Fmodules\u002Fvital-inventories","docs\u002F4.modules\u002Fvital-inventories\u002F1.index",[155,156,160],{"title":82,"path":152,"stem":153,"icon":8},{"title":157,"path":158,"stem":159},"Normal inventories","\u002Fdocs\u002Fmodules\u002Fvital-inventories\u002Fnormal-inventories","docs\u002F4.modules\u002Fvital-inventories\u002F2.normal-inventories",{"title":161,"path":162,"stem":163},"Paged inventories","\u002Fdocs\u002Fmodules\u002Fvital-inventories\u002Fpaged-inventories","docs\u002F4.modules\u002Fvital-inventories\u002F3.paged-inventories",{"title":165,"path":166,"stem":167,"children":168,"icon":99},"vital-items","\u002Fdocs\u002Fmodules\u002Fvital-items","docs\u002F4.modules\u002Fvital-items\u002F1.index",[169,170,174],{"title":82,"path":166,"stem":167,"icon":8},{"title":171,"path":172,"stem":173},"Items","\u002Fdocs\u002Fmodules\u002Fvital-items\u002Fitems","docs\u002F4.modules\u002Fvital-items\u002F2.items",{"title":175,"path":176,"stem":177},"Item builders","\u002Fdocs\u002Fmodules\u002Fvital-items\u002Fitem-builders","docs\u002F4.modules\u002Fvital-items\u002F3.item-builders",{"title":179,"path":180,"stem":181,"children":182,"icon":99},"vital-localization","\u002Fdocs\u002Fmodules\u002Fvital-localization","docs\u002F4.modules\u002Fvital-localization\u002F1.index",[183,184],{"title":82,"path":180,"stem":181,"icon":8},{"title":185,"path":186,"stem":187},"Localization","\u002Fdocs\u002Fmodules\u002Fvital-localization\u002Flocalization","docs\u002F4.modules\u002Fvital-localization\u002F2.localization",{"title":189,"path":190,"stem":191,"children":192,"icon":99},"vital-minigames","\u002Fdocs\u002Fmodules\u002Fvital-minigames","docs\u002F4.modules\u002Fvital-minigames\u002F1.index",[193,194,208],{"title":82,"path":190,"stem":191,"icon":8},{"title":195,"path":196,"stem":197,"children":198,"icon":99},"Global games","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Fglobal-games","docs\u002F4.modules\u002Fvital-minigames\u002F2.global-games\u002F1.index",[199,200,204],{"title":47,"path":196,"stem":197,"icon":8},{"title":201,"path":202,"stem":203},"States","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Fglobal-games\u002Fstates","docs\u002F4.modules\u002Fvital-minigames\u002F2.global-games\u002F2.states",{"title":205,"path":206,"stem":207},"Countdown states","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Fglobal-games\u002Fcountdown-states","docs\u002F4.modules\u002Fvital-minigames\u002F2.global-games\u002F3.countdown-states",{"title":209,"path":210,"stem":211,"children":212,"icon":99},"Instanced games","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F1.index",[213,214,218,221],{"title":47,"path":210,"stem":211,"icon":8},{"title":215,"path":216,"stem":217},"Instances","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Finstances","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F2.instances",{"title":201,"path":219,"stem":220},"\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Fstates","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F3.states",{"title":205,"path":222,"stem":223},"\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Fcountdown-states","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F4.countdown-states",{"title":225,"path":226,"stem":227,"children":228,"icon":99},"vital-players","\u002Fdocs\u002Fmodules\u002Fvital-players","docs\u002F4.modules\u002Fvital-players\u002F1.index",[229,230],{"title":82,"path":226,"stem":227,"icon":8},{"title":231,"path":232,"stem":233},"Players","\u002Fdocs\u002Fmodules\u002Fvital-players\u002Fplayers","docs\u002F4.modules\u002Fvital-players\u002F2.players",{"title":235,"path":236,"stem":237,"children":238,"icon":99},"vital-scoreboards","\u002Fdocs\u002Fmodules\u002Fvital-scoreboards","docs\u002F4.modules\u002Fvital-scoreboards\u002F1.index",[239,240,244],{"title":82,"path":236,"stem":237,"icon":8},{"title":241,"path":242,"stem":243},"Global scoreboards","\u002Fdocs\u002Fmodules\u002Fvital-scoreboards\u002Fglobal-scoreboards","docs\u002F4.modules\u002Fvital-scoreboards\u002Fglobal-scoreboards",{"title":245,"path":246,"stem":247},"Player scoreboards","\u002Fdocs\u002Fmodules\u002Fvital-scoreboards\u002Fplayer-scoreboards","docs\u002F4.modules\u002Fvital-scoreboards\u002Fplayer-scoreboards",{"title":249,"path":250,"stem":251,"children":252,"icon":99},"vital-statistics","\u002Fdocs\u002Fmodules\u002Fvital-statistics","docs\u002F4.modules\u002Fvital-statistics\u002F1.index",[253,254],{"title":82,"path":250,"stem":251,"icon":8},{"title":84,"path":255,"stem":256},"\u002Fdocs\u002Fmodules\u002Fvital-statistics\u002Fconfiguration","docs\u002F4.modules\u002Fvital-statistics\u002F2.configuration",{"title":258,"path":259,"stem":260,"children":261,"icon":99},"vital-tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F1.index",[262,263,267,271],{"title":82,"path":259,"stem":260,"icon":8},{"title":264,"path":265,"stem":266},"Repeatable tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks\u002Frepeatable-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F2.repeatable-tasks",{"title":268,"path":269,"stem":270},"Countdown tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks\u002Fcountdown-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F3.countdown-tasks",{"title":272,"path":273,"stem":274},"Scheduled tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks\u002Fscheduled-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F4.scheduled-tasks",{"title":276,"path":277,"stem":278,"children":279,"icon":99},"vital-utils (Also for non Vital projects)","\u002Fdocs\u002Fmodules\u002Fvital-utils","docs\u002F4.modules\u002Fvital-utils\u002F1.index",[280],{"title":82,"path":277,"stem":278,"icon":8},"i-lucide-package",{"title":283,"path":284,"stem":285,"children":286,"icon":398},"Recipes","\u002Fdocs\u002Frecipes","docs\u002F5.recipes\u002F1.index",[287,289,301,305,317,330,341,344,368,371,384],{"title":288,"path":284,"stem":285,"icon":8},"What are recipes?",{"title":119,"path":290,"stem":291,"children":292,"page":34},"\u002Fdocs\u002Frecipes\u002Fcommands","docs\u002F5.recipes\u002Fcommands",[293,297],{"title":294,"path":295,"stem":296},"Command with arg exception handler","\u002Fdocs\u002Frecipes\u002Fcommands\u002Fcommands","docs\u002F5.recipes\u002Fcommands\u002Fcommands",{"title":298,"path":299,"stem":300},"Global command exception handler","\u002Fdocs\u002Frecipes\u002Fcommands\u002Fglobal-exception-handler","docs\u002F5.recipes\u002Fcommands\u002Fglobal-exception-handler",{"title":302,"path":303,"stem":304},"Config","\u002Fdocs\u002Frecipes\u002Fconfig","docs\u002F5.recipes\u002Fconfig",{"title":306,"path":307,"stem":308,"children":309,"page":34},"Holograms","\u002Fdocs\u002Frecipes\u002Fholograms","docs\u002F5.recipes\u002Fholograms",[310,314],{"title":311,"path":312,"stem":313},"Global hologram","\u002Fdocs\u002Frecipes\u002Fholograms\u002Fglobal-holograms","docs\u002F5.recipes\u002Fholograms\u002Fglobal-holograms",{"title":147,"path":315,"stem":316},"\u002Fdocs\u002Frecipes\u002Fholograms\u002Fplayer-holograms","docs\u002F5.recipes\u002Fholograms\u002Fplayer-holograms",{"title":318,"path":319,"stem":320,"children":321,"page":34},"Inventories","\u002Fdocs\u002Frecipes\u002Finventories","docs\u002F5.recipes\u002Finventories",[322,326],{"title":323,"path":324,"stem":325},"Normal inventory","\u002Fdocs\u002Frecipes\u002Finventories\u002Fnormal-inventory","docs\u002F5.recipes\u002Finventories\u002Fnormal-inventory",{"title":327,"path":328,"stem":329},"Paged inventory","\u002Fdocs\u002Frecipes\u002Finventories\u002Fpaged-inventory","docs\u002F5.recipes\u002Finventories\u002Fpaged-inventory",{"title":171,"path":331,"stem":332,"children":333,"page":34},"\u002Fdocs\u002Frecipes\u002Fitems","docs\u002F5.recipes\u002Fitems",[334,338],{"title":335,"path":336,"stem":337},"Interactable items","\u002Fdocs\u002Frecipes\u002Fitems\u002Finteractable-items","docs\u002F5.recipes\u002Fitems\u002Finteractable-items",{"title":175,"path":339,"stem":340},"\u002Fdocs\u002Frecipes\u002Fitems\u002Fitem-builders","docs\u002F5.recipes\u002Fitems\u002Fitem-builders",{"title":185,"path":342,"stem":343},"\u002Fdocs\u002Frecipes\u002Flocalization","docs\u002F5.recipes\u002Flocalization",{"title":345,"path":346,"stem":347,"children":348,"page":34},"Minigames","\u002Fdocs\u002Frecipes\u002Fminigames","docs\u002F5.recipes\u002Fminigames",[349,353,357,361,365],{"title":350,"path":351,"stem":352},"Global minigame countdown states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Fglobal-countdown-states","docs\u002F5.recipes\u002Fminigames\u002Fglobal-countdown-states",{"title":354,"path":355,"stem":356},"Global minigame states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Fglobal-states","docs\u002F5.recipes\u002Fminigames\u002Fglobal-states",{"title":358,"path":359,"stem":360},"Instance countdown states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Finstance-countdown-states","docs\u002F5.recipes\u002Fminigames\u002Finstance-countdown-states",{"title":362,"path":363,"stem":364},"Instance states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Finstance-states","docs\u002F5.recipes\u002Fminigames\u002Finstance-states",{"title":215,"path":366,"stem":367},"\u002Fdocs\u002Frecipes\u002Fminigames\u002Finstances","docs\u002F5.recipes\u002Fminigames\u002Finstances",{"title":231,"path":369,"stem":370},"\u002Fdocs\u002Frecipes\u002Fplayers","docs\u002F5.recipes\u002Fplayers",{"title":372,"path":373,"stem":374,"children":375,"page":34},"Scoreboards","\u002Fdocs\u002Frecipes\u002Fscoreboards","docs\u002F5.recipes\u002Fscoreboards",[376,380],{"title":377,"path":378,"stem":379},"Global scoreboard","\u002Fdocs\u002Frecipes\u002Fscoreboards\u002Fglobal-scoreboard","docs\u002F5.recipes\u002Fscoreboards\u002Fglobal-scoreboard",{"title":381,"path":382,"stem":383},"Player scoreboard","\u002Fdocs\u002Frecipes\u002Fscoreboards\u002Fplayer-scoreboard","docs\u002F5.recipes\u002Fscoreboards\u002Fplayer-scoreboard",{"title":385,"path":386,"stem":387,"children":388,"page":34},"Tasks","\u002Fdocs\u002Frecipes\u002Ftasks","docs\u002F5.recipes\u002Ftasks",[389,392,395],{"title":268,"path":390,"stem":391},"\u002Fdocs\u002Frecipes\u002Ftasks\u002Fcountdown-tasks","docs\u002F5.recipes\u002Ftasks\u002Fcountdown-tasks",{"title":264,"path":393,"stem":394},"\u002Fdocs\u002Frecipes\u002Ftasks\u002Frepeatable-tasks","docs\u002F5.recipes\u002Ftasks\u002Frepeatable-tasks",{"title":272,"path":396,"stem":397},"\u002Fdocs\u002Frecipes\u002Ftasks\u002Fscheduled-tasks","docs\u002F5.recipes\u002Ftasks\u002Fscheduled-tasks","i-lucide-cooking-pot",2,{"id":401,"title":231,"body":402,"description":830,"extension":831,"meta":832,"navigation":833,"path":232,"rawbody":834,"seo":835,"stem":233,"__hash__":836},"docs\u002Fdocs\u002F4.modules\u002Fvital-players\u002F2.players.md",{"type":403,"value":404,"toc":828},"minimark",[405,409,422,515,518,627,642,678,694,697,812,815,818,824],[406,407,231],"h1",{"id":408},"players",[410,411,412,413,416,417,421],"p",{},"Here's how it works.",[414,415],"br",{},"\nYou create your own custom player class that extends from ",[418,419,420],"code",{},"VitalPlayer",".",[423,424,429],"pre",{"className":425,"code":426,"filename":427,"language":428,"meta":99,"style":99},"language-java shiki shiki-themes material-theme-lighter github-light github-dark","public class MyPlayer extends VitalPlayer.Spigot {\n  public MyPlayer(Player player) {\n    super(player);\n  }\n}\n","MyPlayer.java","java",[418,430,431,463,487,503,509],{"__ignoreMap":99},[432,433,436,440,443,447,450,453,456,459],"span",{"class":434,"line":435},"line",1,[432,437,439],{"class":438},"sbsja","public",[432,441,442],{"class":438}," class",[432,444,446],{"class":445},"sbgvK"," MyPlayer",[432,448,449],{"class":438}," extends",[432,451,452],{"class":445}," VitalPlayer",[432,454,421],{"class":455},"stp6e",[432,457,458],{"class":445},"Spigot",[432,460,462],{"class":461},"sP7_E"," {\n",[432,464,465,468,471,474,478,482,485],{"class":434,"line":399},[432,466,467],{"class":438},"  public",[432,469,446],{"class":470},"sGLFI",[432,472,473],{"class":461},"(",[432,475,477],{"class":476},"s_bVq","Player",[432,479,481],{"class":480},"s99_P"," player",[432,483,484],{"class":461},")",[432,486,462],{"class":461},[432,488,490,494,496,500],{"class":434,"line":489},3,[432,491,493],{"class":492},"s_hVV","    super",[432,495,473],{"class":461},[432,497,499],{"class":498},"su5hD","player",[432,501,502],{"class":461},");\n",[432,504,506],{"class":434,"line":505},4,[432,507,508],{"class":461},"  }\n",[432,510,512],{"class":434,"line":511},5,[432,513,514],{"class":461},"}\n",[410,516,517],{},"Then in this class you can define whatever custom data you want, e.g.:",[423,519,521],{"className":425,"code":520,"filename":427,"language":428,"meta":99,"style":99},"public class MyPlayer extends VitalPlayer.Spigot {\n  private String myCustomString;\n  private boolean myCustomBoolean;\n  \u002F\u002F ...\n  \n  public MyPlayer(Player player) {\n    super(player);\n  }\n  \n  \u002F\u002F Getters and setters...\n}\n",[418,522,523,541,555,567,573,578,595,606,611,616,622],{"__ignoreMap":99},[432,524,525,527,529,531,533,535,537,539],{"class":434,"line":435},[432,526,439],{"class":438},[432,528,442],{"class":438},[432,530,446],{"class":445},[432,532,449],{"class":438},[432,534,452],{"class":445},[432,536,421],{"class":455},[432,538,458],{"class":445},[432,540,462],{"class":461},[432,542,543,546,549,552],{"class":434,"line":399},[432,544,545],{"class":438},"  private",[432,547,548],{"class":476}," String",[432,550,551],{"class":498}," myCustomString",[432,553,554],{"class":461},";\n",[432,556,557,559,562,565],{"class":434,"line":489},[432,558,545],{"class":438},[432,560,561],{"class":438}," boolean",[432,563,564],{"class":498}," myCustomBoolean",[432,566,554],{"class":461},[432,568,569],{"class":434,"line":505},[432,570,572],{"class":571},"sutJx","  \u002F\u002F ...\n",[432,574,575],{"class":434,"line":511},[432,576,577],{"class":498},"  \n",[432,579,581,583,585,587,589,591,593],{"class":434,"line":580},6,[432,582,467],{"class":438},[432,584,446],{"class":470},[432,586,473],{"class":461},[432,588,477],{"class":476},[432,590,481],{"class":480},[432,592,484],{"class":461},[432,594,462],{"class":461},[432,596,598,600,602,604],{"class":434,"line":597},7,[432,599,493],{"class":492},[432,601,473],{"class":461},[432,603,499],{"class":498},[432,605,502],{"class":461},[432,607,609],{"class":434,"line":608},8,[432,610,508],{"class":461},[432,612,614],{"class":434,"line":613},9,[432,615,577],{"class":498},[432,617,619],{"class":434,"line":618},10,[432,620,621],{"class":571},"  \u002F\u002F Getters and setters...\n",[432,623,625],{"class":434,"line":624},11,[432,626,514],{"class":461},[410,628,629,630,633,634,637,638,641],{},"Then you must tell Vital to use this class in your application configuration (",[418,631,632],{},"application.yaml",", ",[418,635,636],{},"application.properties",", etc.) in your project's ",[418,639,640],{},"src\u002Fmain\u002Fresources"," location.",[423,643,648],{"className":644,"code":645,"filename":646,"language":647,"meta":99,"style":99},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","vital:\n  players:\n    player-class-name: fully.qualified.class.name.MyPlayer\n","src\u002Fmain\u002Fresources\u002Fapplication.yaml","yaml",[418,649,650,659,666],{"__ignoreMap":99},[432,651,652,656],{"class":434,"line":435},[432,653,655],{"class":654},"sQzsp","vital",[432,657,658],{"class":461},":\n",[432,660,661,664],{"class":434,"line":399},[432,662,663],{"class":654},"  players",[432,665,658],{"class":461},[432,667,668,671,674],{"class":434,"line":489},[432,669,670],{"class":654},"    player-class-name",[432,672,673],{"class":461},":",[432,675,677],{"class":676},"s_sjI"," fully.qualified.class.name.MyPlayer\n",[410,679,680,681,684,685,687,688,421,691,693],{},"Now, when any player joins your server, Vital will automatically create an instance of ",[418,682,683],{},"MyPlayer"," for each player.",[414,686],{},"\nEvery instance of those custom players is stored in ",[418,689,690],{},"VitalPlayerRepository",[414,692],{},"\nUse this repository in any of your other Spring beans to retrieve your custom player instance for any of your players.",[410,695,696],{},"E.g., when the player joins, you might want to initialize some data:",[423,698,701],{"className":425,"code":699,"filename":700,"language":428,"meta":99,"style":99},"@EventHandler\npublic void onPlayerJoin(PlayerJoinEvent e) {\n  final var myPlayer = vitalPlayerRepository.findById(MyPlayer.class, e.getPlayer().getUniqueId());\n  myPlayer.setMyCustomString(...);\n  myPlayer.setMyCustomBoolean(...);\n}\n","MyListener.java",[418,702,703,711,733,784,797,808],{"__ignoreMap":99},[432,704,705,708],{"class":434,"line":435},[432,706,707],{"class":461},"@",[432,709,710],{"class":438},"EventHandler\n",[432,712,713,715,718,721,723,726,729,731],{"class":434,"line":399},[432,714,439],{"class":438},[432,716,717],{"class":438}," void",[432,719,720],{"class":470}," onPlayerJoin",[432,722,473],{"class":461},[432,724,725],{"class":476},"PlayerJoinEvent",[432,727,728],{"class":498}," e",[432,730,484],{"class":461},[432,732,462],{"class":461},[432,734,735,738,741,744,748,751,753,756,758,760,762,765,768,770,772,775,778,781],{"class":434,"line":489},[432,736,737],{"class":438},"  final",[432,739,740],{"class":438}," var",[432,742,743],{"class":498}," myPlayer ",[432,745,747],{"class":746},"smGrS","=",[432,749,750],{"class":498}," vitalPlayerRepository",[432,752,421],{"class":461},[432,754,755],{"class":470},"findById",[432,757,473],{"class":461},[432,759,683],{"class":498},[432,761,421],{"class":461},[432,763,764],{"class":498},"class",[432,766,767],{"class":461},",",[432,769,728],{"class":498},[432,771,421],{"class":461},[432,773,774],{"class":470},"getPlayer",[432,776,777],{"class":461},"().",[432,779,780],{"class":470},"getUniqueId",[432,782,783],{"class":461},"());\n",[432,785,786,789,791,794],{"class":434,"line":505},[432,787,788],{"class":498},"  myPlayer",[432,790,421],{"class":461},[432,792,793],{"class":470},"setMyCustomString",[432,795,796],{"class":461},"(...);\n",[432,798,799,801,803,806],{"class":434,"line":511},[432,800,788],{"class":498},[432,802,421],{"class":461},[432,804,805],{"class":470},"setMyCustomBoolean",[432,807,796],{"class":461},[432,809,810],{"class":434,"line":580},[432,811,514],{"class":461},[410,813,814],{},"When a player leaves, Vital automatically cleans up your custom player instance so you don't have to.",[816,817],"hr",{},[410,819,820,821,823],{},"This is especially useful to store typed session-data for your players.",[414,822],{},"\nE.g., scores in a minigame, etc.",[825,826,827],"style",{},"html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stp6e, html code.shiki .stp6e{--shiki-light:#39ADB5;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_bVq, html code.shiki .s_bVq{--shiki-light:#9C3EDA;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":99,"searchDepth":399,"depth":399,"links":829},[],"This page explains how to use the `vital-players` module to create custom players.","md",{},{"title":231},"---\ntitle: Players\ndescription: This page explains how to use the `vital-players` module to create custom players.\nnavigation:\n  title: Players\n---\n\n# Players\n\nHere's how it works.  \nYou create your own custom player class that extends from `VitalPlayer`.\n```java [MyPlayer.java]\npublic class MyPlayer extends VitalPlayer.Spigot {\n  public MyPlayer(Player player) {\n    super(player);\n  }\n}\n```\n\nThen in this class you can define whatever custom data you want, e.g.:\n```java [MyPlayer.java]\npublic class MyPlayer extends VitalPlayer.Spigot {\n  private String myCustomString;\n  private boolean myCustomBoolean;\n  \u002F\u002F ...\n  \n  public MyPlayer(Player player) {\n    super(player);\n  }\n  \n  \u002F\u002F Getters and setters...\n}\n```\n\nThen you must tell Vital to use this class in your application configuration (`application.yaml`, `application.properties`, etc.) in your project's `src\u002Fmain\u002Fresources` location.\n```yaml [src\u002Fmain\u002Fresources\u002Fapplication.yaml]\nvital:\n  players:\n    player-class-name: fully.qualified.class.name.MyPlayer\n```\n\nNow, when any player joins your server, Vital will automatically create an instance of `MyPlayer` for each player.  \nEvery instance of those custom players is stored in `VitalPlayerRepository`.  \nUse this repository in any of your other Spring beans to retrieve your custom player instance for any of your players.\n\nE.g., when the player joins, you might want to initialize some data:\n```java [MyListener.java]\n@EventHandler\npublic void onPlayerJoin(PlayerJoinEvent e) {\n  final var myPlayer = vitalPlayerRepository.findById(MyPlayer.class, e.getPlayer().getUniqueId());\n  myPlayer.setMyCustomString(...);\n  myPlayer.setMyCustomBoolean(...);\n}\n```\n\nWhen a player leaves, Vital automatically cleans up your custom player instance so you don't have to.\n\n---\n\nThis is especially useful to store typed session-data for your players.  \nE.g., scores in a minigame, etc.\n",{"title":231,"description":830},"m5f6iS-cB47e1Ip20J3vKo_vkCq6nQVFeJYOGL6ACPQ",1789308658758]