[{"data":1,"prerenderedAt":897},["ShallowReactive",2],{"docs-navigation:\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Finstances":3,"docs-page-estimated-read-time:\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Finstances":399,"docs-page:\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Finstances":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",4,{"id":401,"title":402,"body":403,"description":890,"extension":891,"meta":892,"navigation":893,"path":216,"rawbody":894,"seo":895,"stem":217,"__hash__":896},"docs\u002Fdocs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F2.instances.md","About instanced game instances",{"type":404,"value":405,"toc":883},"minimark",[406,410,426,429,437,485,501,506,512,584,589,593,599,684,688,695,752,756,761,835,838,879],[407,408,215],"h1",{"id":409},"instances",[411,412,413,414,417,418,422,423,425],"p",{},"An instance is essentially a class that defines a single game.",[415,416],"br",{},"\nInstanced games are ",[419,420,421],"strong",{},"ALWAYS"," scoped to their very own world when you create one.",[415,424],{},"\nNew instance = new world.",[411,427,428],{},"This is to securely isolate your games from each other, and this is the basic mechanism that makes this whole shebang possible.",[411,430,431,432,436],{},"An instance will always be a class that extends ",[433,434,435],"code",{},"VitalMinigameInstance",".",[438,439,444],"pre",{"className":440,"code":441,"filename":442,"language":443,"meta":99,"style":99},"language-java shiki shiki-themes material-theme-lighter github-light github-dark","public class MyInstance extends VitalMinigameInstance {\n  \n}\n","MyInstance.java","java",[433,445,446,472,479],{"__ignoreMap":99},[447,448,451,455,458,462,465,468],"span",{"class":449,"line":450},"line",1,[447,452,454],{"class":453},"sbsja","public",[447,456,457],{"class":453}," class",[447,459,461],{"class":460},"sbgvK"," MyInstance",[447,463,464],{"class":453}," extends",[447,466,467],{"class":460}," VitalMinigameInstance",[447,469,471],{"class":470},"sP7_E"," {\n",[447,473,475],{"class":449,"line":474},2,[447,476,478],{"class":477},"su5hD","  \n",[447,480,482],{"class":449,"line":481},3,[447,483,484],{"class":470},"}\n",[486,487,488],"blockquote",{},[411,489,490,491,494,495,497,498,500],{},"Note that we are ",[419,492,493],{},"NOT"," annotating this class with anything.",[415,496],{},"\nThis is because an instance class will only be a blueprint for one game \"type\".",[415,499],{},"\nAnd for that reason we cannot make this class a Spring bean, because if it was, there would only be one single instance of this class. We want to have multiple.",[502,503,505],"h2",{"id":504},"event-handling","Event handling",[411,507,508,509,511],{},"Every instance will, by default, always be a listener and can therefore directly receive events.",[415,510],{},"\nYou can use the default Spigot event handlers in your states.",[438,513,515],{"className":440,"code":514,"filename":442,"language":443,"meta":99,"style":99},"public class MyInstance extends VitalMinigameInstance {\n  @EventHandler\n  public void onPlayerJoin(PlayerJoinEvent e) {\n    \u002F\u002F ...\n  }\n}\n",[433,516,517,531,539,567,573,579],{"__ignoreMap":99},[447,518,519,521,523,525,527,529],{"class":449,"line":450},[447,520,454],{"class":453},[447,522,457],{"class":453},[447,524,461],{"class":460},[447,526,464],{"class":453},[447,528,467],{"class":460},[447,530,471],{"class":470},[447,532,533,536],{"class":449,"line":474},[447,534,535],{"class":470},"  @",[447,537,538],{"class":453},"EventHandler\n",[447,540,541,544,547,551,554,558,562,565],{"class":449,"line":481},[447,542,543],{"class":453},"  public",[447,545,546],{"class":453}," void",[447,548,550],{"class":549},"sGLFI"," onPlayerJoin",[447,552,553],{"class":470},"(",[447,555,557],{"class":556},"s_bVq","PlayerJoinEvent",[447,559,561],{"class":560},"s99_P"," e",[447,563,564],{"class":470},")",[447,566,471],{"class":470},[447,568,569],{"class":449,"line":399},[447,570,572],{"class":571},"sutJx","    \u002F\u002F ...\n",[447,574,576],{"class":449,"line":575},5,[447,577,578],{"class":470},"  }\n",[447,580,582],{"class":449,"line":581},6,[447,583,484],{"class":470},[486,585,586],{},[411,587,588],{},"The event handlers that you define in your instances will only receive events if the event that occurred actually came from your instance world.",[502,590,592],{"id":591},"game-data","Game data",[411,594,595,596,598],{},"To keep all of your game data scoped to only a single instance, you should ALWAYS store it in your instance class.",[415,597],{},"\nThis way you never risk any game data leaking into other running games on the server.",[438,600,602],{"className":440,"code":601,"filename":442,"language":443,"meta":99,"style":99},"public class MyInstance extends VitalMinigameInstance {\n  private long playerKills = 0;\n  private List\u003CUUID> playersAlive = new ArrayList\u003C>();\n  \n  \u002F\u002F ...\n}\n",[433,603,604,618,640,671,675,680],{"__ignoreMap":99},[447,605,606,608,610,612,614,616],{"class":449,"line":450},[447,607,454],{"class":453},[447,609,457],{"class":453},[447,611,461],{"class":460},[447,613,464],{"class":453},[447,615,467],{"class":460},[447,617,471],{"class":470},[447,619,620,623,626,629,633,637],{"class":449,"line":474},[447,621,622],{"class":453},"  private",[447,624,625],{"class":453}," long",[447,627,628],{"class":477}," playerKills ",[447,630,632],{"class":631},"smGrS","=",[447,634,636],{"class":635},"srdBf"," 0",[447,638,639],{"class":470},";\n",[447,641,642,644,647,650,653,656,659,661,665,668],{"class":449,"line":481},[447,643,622],{"class":453},[447,645,646],{"class":556}," List",[447,648,649],{"class":470},"\u003C",[447,651,652],{"class":453},"UUID",[447,654,655],{"class":470},">",[447,657,658],{"class":477}," playersAlive ",[447,660,632],{"class":631},[447,662,664],{"class":663},"sVHd0"," new",[447,666,667],{"class":556}," ArrayList",[447,669,670],{"class":470},"\u003C>();\n",[447,672,673],{"class":449,"line":399},[447,674,478],{"class":477},[447,676,677],{"class":449,"line":575},[447,678,679],{"class":571},"  \u002F\u002F ...\n",[447,681,682],{"class":449,"line":581},[447,683,484],{"class":470},[502,685,687],{"id":686},"starting-a-game","Starting a game",[411,689,690,691,694],{},"To start a new game with the instance example shown above, simply use the ",[433,692,693],{},"VitalMinigameInstanceService"," bean that is globally available and can be injected into any of your other beans (commands, listeners, inventories, etc.).",[438,696,698],{"className":440,"code":697,"language":443,"meta":99,"style":99},"vitalMinigameInstanceService.registerInstance(\n  new MyInstance(),\n  (instance) -> {\n    \u002F\u002F Here we can perform an action that should happen just before the instance was actually registered in Vital (Before any `onRegister` lifecycle for our instance).\n  }\n);\n",[433,699,700,713,723,738,743,747],{"__ignoreMap":99},[447,701,702,705,707,710],{"class":449,"line":450},[447,703,704],{"class":477},"vitalMinigameInstanceService",[447,706,436],{"class":470},[447,708,709],{"class":549},"registerInstance",[447,711,712],{"class":470},"(\n",[447,714,715,718,720],{"class":449,"line":474},[447,716,717],{"class":663},"  new",[447,719,461],{"class":549},[447,721,722],{"class":470},"(),\n",[447,724,725,728,731,733,736],{"class":449,"line":481},[447,726,727],{"class":470},"  (",[447,729,730],{"class":477},"instance",[447,732,564],{"class":470},[447,734,735],{"class":453}," ->",[447,737,471],{"class":470},[447,739,740],{"class":449,"line":399},[447,741,742],{"class":571},"    \u002F\u002F Here we can perform an action that should happen just before the instance was actually registered in Vital (Before any `onRegister` lifecycle for our instance).\n",[447,744,745],{"class":449,"line":575},[447,746,578],{"class":470},[447,748,749],{"class":449,"line":581},[447,750,751],{"class":470},");\n",[502,753,755],{"id":754},"stopping-a-game","Stopping a game",[411,757,758,759,694],{},"To stop a currently running game, simply use the ",[433,760,693],{},[438,762,764],{"className":440,"code":763,"language":443,"meta":99,"style":99},"vitalMinigameInstanceService.unregisterInstance(\n  myInstance,\n  (instance) -> {\n    \u002F\u002F Here we can perform an action that should happen right before the instance world is deleted.\n  },\n  (instance) -> {\n    \u002F\u002F Here we can perform an action that should happen right after the instance world was successfully deleted.\n  }\n);\n",[433,765,766,777,785,797,802,807,819,825,830],{"__ignoreMap":99},[447,767,768,770,772,775],{"class":449,"line":450},[447,769,704],{"class":477},[447,771,436],{"class":470},[447,773,774],{"class":549},"unregisterInstance",[447,776,712],{"class":470},[447,778,779,782],{"class":449,"line":474},[447,780,781],{"class":477},"  myInstance",[447,783,784],{"class":470},",\n",[447,786,787,789,791,793,795],{"class":449,"line":481},[447,788,727],{"class":470},[447,790,730],{"class":477},[447,792,564],{"class":470},[447,794,735],{"class":453},[447,796,471],{"class":470},[447,798,799],{"class":449,"line":399},[447,800,801],{"class":571},"    \u002F\u002F Here we can perform an action that should happen right before the instance world is deleted.\n",[447,803,804],{"class":449,"line":575},[447,805,806],{"class":470},"  },\n",[447,808,809,811,813,815,817],{"class":449,"line":581},[447,810,727],{"class":470},[447,812,730],{"class":477},[447,814,564],{"class":470},[447,816,735],{"class":453},[447,818,471],{"class":470},[447,820,822],{"class":449,"line":821},7,[447,823,824],{"class":571},"    \u002F\u002F Here we can perform an action that should happen right after the instance world was successfully deleted.\n",[447,826,828],{"class":449,"line":827},8,[447,829,578],{"class":470},[447,831,833],{"class":449,"line":832},9,[447,834,751],{"class":470},[502,836,61],{"id":837},"lifecycles",[839,840,841,855],"table",{},[842,843,844],"thead",{},[845,846,847,852],"tr",{},[848,849,851],"th",{"align":850},"left","Lifecycle",[848,853,854],{"align":850},"Usage",[856,857,858,869],"tbody",{},[845,859,860,866],{},[861,862,863],"td",{"align":850},[433,864,865],{},"onRegister()",[861,867,868],{"align":850},"Perform an action when this instance is registered.",[845,870,871,876],{},[861,872,873],{"align":850},[433,874,875],{},"onUnregister()",[861,877,878],{"align":850},"Perform an action when this instance is unregistered.",[880,881,882],"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 .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .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 .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 .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}",{"title":99,"searchDepth":474,"depth":474,"links":884},[885,886,887,888,889],{"id":504,"depth":474,"text":505},{"id":591,"depth":474,"text":592},{"id":686,"depth":474,"text":687},{"id":754,"depth":474,"text":755},{"id":837,"depth":474,"text":61},"This page explains how you can create game-instances for your instanced-games using `vital-minigames`.","md",{},{"title":215},"---\ntitle: About instanced game instances\ndescription: This page explains how you can create game-instances for your instanced-games using `vital-minigames`.\nnavigation:\n  title: Instances\n---\n\n# Instances\n\nAn instance is essentially a class that defines a single game.  \nInstanced games are **ALWAYS** scoped to their very own world when you create one.  \nNew instance = new world.  \n\nThis is to securely isolate your games from each other, and this is the basic mechanism that makes this whole shebang possible.\n\nAn instance will always be a class that extends `VitalMinigameInstance`.  \n```java [MyInstance.java]\npublic class MyInstance extends VitalMinigameInstance {\n  \n}\n```\n\n> Note that we are **NOT** annotating this class with anything.  \n> This is because an instance class will only be a blueprint for one game \"type\".  \n> And for that reason we cannot make this class a Spring bean, because if it was, there would only be one single instance of this class. We want to have multiple.\n\n## Event handling\n\nEvery instance will, by default, always be a listener and can therefore directly receive events.  \nYou can use the default Spigot event handlers in your states.  \n\n```java [MyInstance.java]\npublic class MyInstance extends VitalMinigameInstance {\n  @EventHandler\n  public void onPlayerJoin(PlayerJoinEvent e) {\n    \u002F\u002F ...\n  }\n}\n```\n\n> The event handlers that you define in your instances will only receive events if the event that occurred actually came from your instance world.  \n\n## Game data\n\nTo keep all of your game data scoped to only a single instance, you should ALWAYS store it in your instance class.  \nThis way you never risk any game data leaking into other running games on the server.  \n\n```java [MyInstance.java]\npublic class MyInstance extends VitalMinigameInstance {\n  private long playerKills = 0;\n  private List\u003CUUID> playersAlive = new ArrayList\u003C>();\n  \n  \u002F\u002F ...\n}\n```\n\n## Starting a game\n\nTo start a new game with the instance example shown above, simply use the `VitalMinigameInstanceService` bean that is globally available and can be injected into any of your other beans (commands, listeners, inventories, etc.).  \n\n```java\nvitalMinigameInstanceService.registerInstance(\n  new MyInstance(),\n  (instance) -> {\n    \u002F\u002F Here we can perform an action that should happen just before the instance was actually registered in Vital (Before any `onRegister` lifecycle for our instance).\n  }\n);\n```\n\n## Stopping a game\n\nTo stop a currently running game, simply use the `VitalMinigameInstanceService` bean that is globally available and can be injected into any of your other beans (commands, listeners, inventories, etc.).  \n\n```java\nvitalMinigameInstanceService.unregisterInstance(\n  myInstance,\n  (instance) -> {\n    \u002F\u002F Here we can perform an action that should happen right before the instance world is deleted.\n  },\n  (instance) -> {\n    \u002F\u002F Here we can perform an action that should happen right after the instance world was successfully deleted.\n  }\n);\n```\n\n## Lifecycles\n\n| Lifecycle        | Usage                                                 |\n|:-----------------|:------------------------------------------------------|\n| `onRegister()`   | Perform an action when this instance is registered.   |\n| `onUnregister()` | Perform an action when this instance is unregistered. |\n",{"title":402,"description":890},"CFIKe2XBwV-bLvCYOn91TQNmWDriV-5cqMGTy-Z2JbU",1789308658758]