From 3a5ff77aea64a1669e9fd10af5a980c8d1f12e82 Mon Sep 17 00:00:00 2001 From: C4 <29991504+TheIllusiveC4@users.noreply.github.com> Date: Sat, 20 Jan 2024 10:07:48 +0000 Subject: [PATCH] deploy: 2b4cb3f48e6fc91b1fe74a3c65ba46fa1ba70a4f --- 1.18.x.html | 4 +- 1.18.x/category/champions.html | 4 +- 1.18.x/category/mod-integrations.html | 4 +- 1.18.x/champions/commands.html | 4 +- 1.18.x/champions/integration/gamestages.html | 4 +- .../champions/integration/scalinghealth.html | 4 +- 1.18.x/champions/loottable.html | 4 +- 1.18.x/champions/nbt.html | 4 +- 404.html | 4 +- assets/js/11c2ad6b.4f7a157d.js | 1 - assets/js/11c2ad6b.ca295aef.js | 1 + ...80e3d.43a95257.js => 78280e3d.2e42782f.js} | 2 +- ...e1db0.a3b380cc.js => 8dae1db0.fe5c8f4f.js} | 2 +- assets/js/935f2afb.4a824b12.js | 1 + assets/js/935f2afb.8e902340.js | 1 - assets/js/93ac1f71.8604f612.js | 1 + assets/js/ef6cb8ea.f35103d2.js | 1 - assets/js/ef6cb8ea.f6a75d36.js | 1 + assets/js/main.2f4bbb6a.js | 2 - assets/js/main.c26a9edd.js | 2 + ...CENSE.txt => main.c26a9edd.js.LICENSE.txt} | 0 assets/js/runtime~main.6b86d02d.js | 1 + assets/js/runtime~main.e39b26e3.js | 1 - category/curios.html | 6 +- category/diet.html | 4 +- .../APIs/renderer-interface.html | 6 +- .../curio-creation.html | 8 +-- .../data-generation.html | 63 +++++++++++++++++++ .../getting-started.html | 6 +- .../rendering-registry.html | 8 +-- curios/commands.html | 4 +- curios/curios-nbt.html | 4 +- curios/entity-register.html | 16 ++++- curios/preset-slots.html | 4 +- curios/slot-register.html | 6 +- curios/slot-textures.html | 4 +- diet/datapack-example.html | 4 +- diet/diet-groups.html | 4 +- diet/diet-suites.html | 4 +- diet/food-classification.html | 4 +- index.html | 4 +- sitemap.xml | 2 +- versions.html | 4 +- 43 files changed, 146 insertions(+), 72 deletions(-) delete mode 100644 assets/js/11c2ad6b.4f7a157d.js create mode 100644 assets/js/11c2ad6b.ca295aef.js rename assets/js/{78280e3d.43a95257.js => 78280e3d.2e42782f.js} (53%) rename assets/js/{8dae1db0.a3b380cc.js => 8dae1db0.fe5c8f4f.js} (91%) create mode 100644 assets/js/935f2afb.4a824b12.js delete mode 100644 assets/js/935f2afb.8e902340.js create mode 100644 assets/js/93ac1f71.8604f612.js delete mode 100644 assets/js/ef6cb8ea.f35103d2.js create mode 100644 assets/js/ef6cb8ea.f6a75d36.js delete mode 100644 assets/js/main.2f4bbb6a.js create mode 100644 assets/js/main.c26a9edd.js rename assets/js/{main.2f4bbb6a.js.LICENSE.txt => main.c26a9edd.js.LICENSE.txt} (100%) create mode 100644 assets/js/runtime~main.6b86d02d.js delete mode 100644 assets/js/runtime~main.e39b26e3.js create mode 100644 curios/Developing with Curios/data-generation.html diff --git a/1.18.x.html b/1.18.x.html index 6938074..d08b24c 100644 --- a/1.18.x.html +++ b/1.18.x.html @@ -4,8 +4,8 @@ Overview | Illusive Soulworks - - + +
Skip to main content
Version: 1.18.x

Overview

diff --git a/1.18.x/category/champions.html b/1.18.x/category/champions.html index f52994a..543f676 100644 --- a/1.18.x/category/champions.html +++ b/1.18.x/category/champions.html @@ -4,8 +4,8 @@ Champions | Illusive Soulworks - - + + diff --git a/1.18.x/category/mod-integrations.html b/1.18.x/category/mod-integrations.html index a755ee4..b84d71c 100644 --- a/1.18.x/category/mod-integrations.html +++ b/1.18.x/category/mod-integrations.html @@ -4,8 +4,8 @@ Mod Integrations | Illusive Soulworks - - + + diff --git a/1.18.x/champions/commands.html b/1.18.x/champions/commands.html index 3edcfca..e7c6249 100644 --- a/1.18.x/champions/commands.html +++ b/1.18.x/champions/commands.html @@ -4,8 +4,8 @@ Commands | Illusive Soulworks - - + +
Version: 1.18.x

Commands

diff --git a/1.18.x/champions/integration/gamestages.html b/1.18.x/champions/integration/gamestages.html index f6daaba..5940d6f 100644 --- a/1.18.x/champions/integration/gamestages.html +++ b/1.18.x/champions/integration/gamestages.html @@ -4,8 +4,8 @@ Game Stages | Illusive Soulworks - - + +
Version: 1.18.x

Game Stages

diff --git a/1.18.x/champions/integration/scalinghealth.html b/1.18.x/champions/integration/scalinghealth.html index e2f6345..3b1c535 100644 --- a/1.18.x/champions/integration/scalinghealth.html +++ b/1.18.x/champions/integration/scalinghealth.html @@ -4,8 +4,8 @@ Scaling Health | Illusive Soulworks - - + +
Version: 1.18.x

Scaling Health

diff --git a/1.18.x/champions/loottable.html b/1.18.x/champions/loottable.html index 72f8cb3..4667861 100644 --- a/1.18.x/champions/loottable.html +++ b/1.18.x/champions/loottable.html @@ -4,8 +4,8 @@ Loot | Illusive Soulworks - - + +
Version: 1.18.x

Loot

diff --git a/1.18.x/champions/nbt.html b/1.18.x/champions/nbt.html index 0a68917..1e88da8 100644 --- a/1.18.x/champions/nbt.html +++ b/1.18.x/champions/nbt.html @@ -4,8 +4,8 @@ NBT Tags | Illusive Soulworks - - + +
Version: 1.18.x

NBT Tags

diff --git a/404.html b/404.html index 2e7a7f5..b196757 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Illusive Soulworks - - + +

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/js/11c2ad6b.4f7a157d.js b/assets/js/11c2ad6b.4f7a157d.js deleted file mode 100644 index 95cdc68..0000000 --- a/assets/js/11c2ad6b.4f7a157d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[456],{6135:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var n=t(5893),o=t(1151);const r={sidebar_position:2},s="Creating a Curio",a={id:"curios/Developing with Curios/curio-creation",title:"Creating a Curio",description:"A tutorial on how to attach curio capabilities to your items.",source:"@site/docs/curios/Developing with Curios/curio-creation.md",sourceDirName:"curios/Developing with Curios",slug:"/curios/Developing with Curios/curio-creation",permalink:"/curios/Developing with Curios/curio-creation",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/Developing with Curios/curio-creation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Setting Up the Development Environment",permalink:"/curios/Developing with Curios/getting-started"},next:{title:"Rendering a Curio",permalink:"/curios/Developing with Curios/rendering-registry"}},c={},l=[{value:"Overview",id:"overview",level:2},{value:"Attaching an ICurio capability",id:"attaching-an-icurio-capability",level:2},{value:"Implementing the ICurioItem interface",id:"implementing-the-icurioitem-interface",level:2},{value:"Registering an ICurioItem implementation",id:"registering-an-icurioitem-implementation",level:2},{value:"Priority",id:"priority",level:2}];function d(e){const i={admonition:"admonition",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"creating-a-curio",children:"Creating a Curio"}),"\n",(0,n.jsx)(i.p,{children:"A tutorial on how to attach curio capabilities to your items."}),"\n",(0,n.jsx)(i.h2,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"Curios comes with interfaces that you can attach to your items in order to define certain behaviors for those items when\ninteracting with curios slots. This includes events such as ticking while in a curio slot or triggering certain actions\nwhen equipped or unequipped into a curio slot."}),"\n",(0,n.jsxs)(i.p,{children:["There are three main ways to implement the capability on your item: directly attaching an ",(0,n.jsx)(i.code,{children:"ICurio"})," implementation as a\ncapability, extending the ",(0,n.jsx)(i.code,{children:"ICurioItem"})," interface on your item, or registering an ",(0,n.jsx)(i.code,{children:"ICurioItem"})," implementation to an item."]}),"\n",(0,n.jsxs)(i.p,{children:["Only ",(0,n.jsx)(i.strong,{children:"one"})," of these methods needs to be implemented for the curio item to work."]}),"\n",(0,n.jsxs)(i.h2,{id:"attaching-an-icurio-capability",children:["Attaching an ",(0,n.jsx)(i.code,{children:"ICurio"})," capability"]}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"This is recommended for mods that are Forge-oriented, due to the use of capabilities, and want to attach the\ncapability optionally to their own items or another mod's items."}),"\n",(0,n.jsxs)(i.p,{children:["To attach the capability to your own items, override the ",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," method:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"@Override\npublic ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag unused) {\n return CuriosApi.createCurioProvider(new ICurio() {\n \n @Override\n public ItemStack getStack() {\n return stack;\n }\n\n @Override\n public void curioTick(SlotContext slotContext) {\n // ticking logic here\n }\n });\n}\n"})}),"\n",(0,n.jsxs)(i.p,{children:["The ",(0,n.jsx)(i.code,{children:"ICurio"})," implementation in the example can be replaced or extended by your own custom implementation. The\nimplementation can also exist in a separate class altogether as long as the instantiation is still done in the\n",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," method."]}),"\n",(0,n.jsxs)(i.p,{children:["To attach the capability to any item, including vanilla's and other mods', subscribe to the\n",(0,n.jsx)(i.code,{children:"AttachCapabilitiesEvent"})," and use its methods:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"@SubscribeEvent\npublic void attachCapabilities(AttachCapabilitiesEvent evt) {\n ItemStack stack = evt.getObject();\n Item item = stack.getItem();\n evt.addCapability(CuriosCapability.ID_ITEM, CuriosApi.createCurioProvider(new ICurio() {\n \n @Override\n public ItemStack getStack() {\n return stack;\n }\n \n @Override\n public void curioTick(SlotContext slotContext) {\n // ticking logic here\n }\n }));\n}\n"})}),"\n",(0,n.jsx)(i.admonition,{type:"note",children:(0,n.jsxs)(i.p,{children:["You will need to pass in the ",(0,n.jsx)(i.code,{children:"ItemStack"})," from the ",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," argument or the\n",(0,n.jsx)(i.code,{children:"AttachCapabilitiesEvent#getObject"})," result to the return of ",(0,n.jsx)(i.code,{children:"ICurio#getStack"})," as shown in the example. This makes sure\nthat the implementation receives the correct ",(0,n.jsx)(i.code,{children:"ItemStack"})," for further curios logic. Technically, ",(0,n.jsx)(i.code,{children:"ICurio#getStack"})," can\nreturn any stack if proxies are needed, but the use-case for that is outside the scope of this documentation."]})}),"\n",(0,n.jsxs)(i.h2,{id:"implementing-the-icurioitem-interface",children:["Implementing the ",(0,n.jsx)(i.code,{children:"ICurioItem"})," interface"]}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"This is recommended for mods that want the simplest and most straightforward method, do not mind having Curios as a\nrequired dependency, and are only working with their own items."}),"\n",(0,n.jsxs)(i.p,{children:["To implement the ",(0,n.jsx)(i.code,{children:"ICurioItem"})," interface, simply implement it on your item class:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"public class CurioItem extends Item implements ICurioItem {\n\n public CurioItem() {\n super(new Item.Properties().stacksTo(1).defaultDurability(0));\n }\n\n @Override\n public void curioTick(SlotContext slotContext, ItemStack stack) {\n // ticking logic here\n }\n}\n"})}),"\n",(0,n.jsxs)(i.h2,{id:"registering-an-icurioitem-implementation",children:["Registering an ",(0,n.jsx)(i.code,{children:"ICurioItem"})," implementation"]}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"This is recommended for multi-loader mods as a platform-agnostic method of registering Curios behavior to their own\nitems or another mod's items that can be loaded optionally."}),"\n",(0,n.jsxs)(i.p,{children:["To register an ",(0,n.jsx)(i.code,{children:"ICurioItem"})," implementation, first create the implementation:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"public class CurioItem implements ICurioItem {\n\n @Override\n public void curioTick(SlotContext slotContext, ItemStack stack) {\n // ticking logic here\n }\n}\n"})}),"\n",(0,n.jsxs)(i.p,{children:["And then register it by using ",(0,n.jsx)(i.code,{children:"CurioApi#registerCurio"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"CuriosApi.registerCurio(CurioModItems.MY_ITEM, new CurioItem());\n"})}),"\n",(0,n.jsxs)(i.p,{children:["Registration can occur at any time, but for simplicity can be called during the ",(0,n.jsx)(i.code,{children:"FMLCommonSetupEvent"})," phase during mod\nloading:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:'@Mod("CurioMod")\npublic class CurioMod {\n \n public CurioMod() {\n final IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();\n eventBus.addListener(this::setup);\n }\n\n private void setup(final FMLCommonSetupEvent evt) {\n CuriosApi.registerCurio(CurioModItems.MY_ITEM, new CurioItem());\n }\n}\n'})}),"\n",(0,n.jsx)(i.h2,{id:"priority",children:"Priority"}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"In situations where multiple implementations are registered to the same item, there a few things to take note of:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Only one implementation will be used on any one item, any other implementations found will be ignored."}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"ICurio"})," capabilities initialized through ",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," will always be prioritized and other\nimplementations will be ignored."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"ICurioItem"})," implementations registered through ",(0,n.jsx)(i.code,{children:"CuriosApi#registerCurio"})," will be prioritized over ",(0,n.jsx)(i.code,{children:"ICurioItem"}),"\nimplementations directly on the item class."]}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,i,t)=>{t.d(i,{Z:()=>a,a:()=>s});var n=t(7294);const o={},r=n.createContext(o);function s(e){const i=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/11c2ad6b.ca295aef.js b/assets/js/11c2ad6b.ca295aef.js new file mode 100644 index 0000000..693c795 --- /dev/null +++ b/assets/js/11c2ad6b.ca295aef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[456],{6135:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var n=t(5893),o=t(1151);const r={sidebar_position:2},s="Creating a Curio",a={id:"curios/Developing with Curios/curio-creation",title:"Creating a Curio",description:"A tutorial on how to attach curio capabilities to your items.",source:"@site/docs/curios/Developing with Curios/curio-creation.md",sourceDirName:"curios/Developing with Curios",slug:"/curios/Developing with Curios/curio-creation",permalink:"/curios/Developing with Curios/curio-creation",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/Developing with Curios/curio-creation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Setting Up the Development Environment",permalink:"/curios/Developing with Curios/getting-started"},next:{title:"Data Generation",permalink:"/curios/Developing with Curios/data-generation"}},c={},l=[{value:"Overview",id:"overview",level:2},{value:"Attaching an ICurio capability",id:"attaching-an-icurio-capability",level:2},{value:"Implementing the ICurioItem interface",id:"implementing-the-icurioitem-interface",level:2},{value:"Registering an ICurioItem implementation",id:"registering-an-icurioitem-implementation",level:2},{value:"Priority",id:"priority",level:2}];function d(e){const i={admonition:"admonition",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"creating-a-curio",children:"Creating a Curio"}),"\n",(0,n.jsx)(i.p,{children:"A tutorial on how to attach curio capabilities to your items."}),"\n",(0,n.jsx)(i.h2,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"Curios comes with interfaces that you can attach to your items in order to define certain behaviors for those items when\ninteracting with curios slots. This includes events such as ticking while in a curio slot or triggering certain actions\nwhen equipped or unequipped into a curio slot."}),"\n",(0,n.jsxs)(i.p,{children:["There are three main ways to implement the capability on your item: directly attaching an ",(0,n.jsx)(i.code,{children:"ICurio"})," implementation as a\ncapability, extending the ",(0,n.jsx)(i.code,{children:"ICurioItem"})," interface on your item, or registering an ",(0,n.jsx)(i.code,{children:"ICurioItem"})," implementation to an item."]}),"\n",(0,n.jsxs)(i.p,{children:["Only ",(0,n.jsx)(i.strong,{children:"one"})," of these methods needs to be implemented for the curio item to work."]}),"\n",(0,n.jsxs)(i.h2,{id:"attaching-an-icurio-capability",children:["Attaching an ",(0,n.jsx)(i.code,{children:"ICurio"})," capability"]}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"This is recommended for mods that are Forge-oriented, due to the use of capabilities, and want to attach the\ncapability optionally to their own items or another mod's items."}),"\n",(0,n.jsxs)(i.p,{children:["To attach the capability to your own items, override the ",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," method:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"@Override\npublic ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag unused) {\n return CuriosApi.createCurioProvider(new ICurio() {\n \n @Override\n public ItemStack getStack() {\n return stack;\n }\n\n @Override\n public void curioTick(SlotContext slotContext) {\n // ticking logic here\n }\n });\n}\n"})}),"\n",(0,n.jsxs)(i.p,{children:["The ",(0,n.jsx)(i.code,{children:"ICurio"})," implementation in the example can be replaced or extended by your own custom implementation. The\nimplementation can also exist in a separate class altogether as long as the instantiation is still done in the\n",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," method."]}),"\n",(0,n.jsxs)(i.p,{children:["To attach the capability to any item, including vanilla's and other mods', subscribe to the\n",(0,n.jsx)(i.code,{children:"AttachCapabilitiesEvent"})," and use its methods:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"@SubscribeEvent\npublic void attachCapabilities(AttachCapabilitiesEvent evt) {\n ItemStack stack = evt.getObject();\n Item item = stack.getItem();\n evt.addCapability(CuriosCapability.ID_ITEM, CuriosApi.createCurioProvider(new ICurio() {\n \n @Override\n public ItemStack getStack() {\n return stack;\n }\n \n @Override\n public void curioTick(SlotContext slotContext) {\n // ticking logic here\n }\n }));\n}\n"})}),"\n",(0,n.jsx)(i.admonition,{type:"note",children:(0,n.jsxs)(i.p,{children:["You will need to pass in the ",(0,n.jsx)(i.code,{children:"ItemStack"})," from the ",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," argument or the\n",(0,n.jsx)(i.code,{children:"AttachCapabilitiesEvent#getObject"})," result to the return of ",(0,n.jsx)(i.code,{children:"ICurio#getStack"})," as shown in the example. This makes sure\nthat the implementation receives the correct ",(0,n.jsx)(i.code,{children:"ItemStack"})," for further curios logic. Technically, ",(0,n.jsx)(i.code,{children:"ICurio#getStack"})," can\nreturn any stack if proxies are needed, but the use-case for that is outside the scope of this documentation."]})}),"\n",(0,n.jsxs)(i.h2,{id:"implementing-the-icurioitem-interface",children:["Implementing the ",(0,n.jsx)(i.code,{children:"ICurioItem"})," interface"]}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"This is recommended for mods that want the simplest and most straightforward method, do not mind having Curios as a\nrequired dependency, and are only working with their own items."}),"\n",(0,n.jsxs)(i.p,{children:["To implement the ",(0,n.jsx)(i.code,{children:"ICurioItem"})," interface, simply implement it on your item class:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"public class CurioItem extends Item implements ICurioItem {\n\n public CurioItem() {\n super(new Item.Properties().stacksTo(1).defaultDurability(0));\n }\n\n @Override\n public void curioTick(SlotContext slotContext, ItemStack stack) {\n // ticking logic here\n }\n}\n"})}),"\n",(0,n.jsxs)(i.h2,{id:"registering-an-icurioitem-implementation",children:["Registering an ",(0,n.jsx)(i.code,{children:"ICurioItem"})," implementation"]}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"This is recommended for multi-loader mods as a platform-agnostic method of registering Curios behavior to their own\nitems or another mod's items that can be loaded optionally."}),"\n",(0,n.jsxs)(i.p,{children:["To register an ",(0,n.jsx)(i.code,{children:"ICurioItem"})," implementation, first create the implementation:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"public class CurioItem implements ICurioItem {\n\n @Override\n public void curioTick(SlotContext slotContext, ItemStack stack) {\n // ticking logic here\n }\n}\n"})}),"\n",(0,n.jsxs)(i.p,{children:["And then register it by using ",(0,n.jsx)(i.code,{children:"CurioApi#registerCurio"}),":"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:"CuriosApi.registerCurio(CurioModItems.MY_ITEM, new CurioItem());\n"})}),"\n",(0,n.jsxs)(i.p,{children:["Registration can occur at any time, but for simplicity can be called during the ",(0,n.jsx)(i.code,{children:"FMLCommonSetupEvent"})," phase during mod\nloading:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-java",children:'@Mod("CurioMod")\npublic class CurioMod {\n \n public CurioMod() {\n final IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();\n eventBus.addListener(this::setup);\n }\n\n private void setup(final FMLCommonSetupEvent evt) {\n CuriosApi.registerCurio(CurioModItems.MY_ITEM, new CurioItem());\n }\n}\n'})}),"\n",(0,n.jsx)(i.h2,{id:"priority",children:"Priority"}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"In situations where multiple implementations are registered to the same item, there a few things to take note of:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Only one implementation will be used on any one item, any other implementations found will be ignored."}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"ICurio"})," capabilities initialized through ",(0,n.jsx)(i.code,{children:"IForgeItem#initCapabilities"})," will always be prioritized and other\nimplementations will be ignored."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"ICurioItem"})," implementations registered through ",(0,n.jsx)(i.code,{children:"CuriosApi#registerCurio"})," will be prioritized over ",(0,n.jsx)(i.code,{children:"ICurioItem"}),"\nimplementations directly on the item class."]}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,i,t)=>{t.d(i,{Z:()=>a,a:()=>s});var n=t(7294);const o={},r=n.createContext(o);function s(e){const i=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/78280e3d.43a95257.js b/assets/js/78280e3d.2e42782f.js similarity index 53% rename from assets/js/78280e3d.43a95257.js rename to assets/js/78280e3d.2e42782f.js index 75607bc..9cc5fe6 100644 --- a/assets/js/78280e3d.43a95257.js +++ b/assets/js/78280e3d.2e42782f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[143],{8462:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=i(5893),s=i(1151);const r={sidebar_position:3},o="Adding Slot Types to Entities",l={id:"curios/entity-register",title:"Adding Slot Types to Entities",description:"A tutorial on how to add registered slot types to entities.",source:"@site/docs/curios/entity-register.md",sourceDirName:"curios",slug:"/curios/entity-register",permalink:"/curios/entity-register",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/entity-register.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Registering Slot Types",permalink:"/curios/slot-register"},next:{title:"Adding Custom Slot Textures",permalink:"/curios/slot-textures"}},a={},d=[{value:"Overview",id:"overview",level:2},{value:"Directory",id:"directory",level:2},{value:"Syntax",id:"syntax",level:2},{value:"Example",id:"example",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"adding-slot-types-to-entities",children:"Adding Slot Types to Entities"}),"\n",(0,n.jsx)(t.p,{children:"A tutorial on how to add registered slot types to entities."}),"\n",(0,n.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["Beginning in 1.20, the recommended way to add a registered slot type to an entity is through a datapack. If you are\nunfamiliar with datapacks, it is recommended to read through the ",(0,n.jsx)(t.a,{href:"https://minecraft.fandom.com/wiki/Data_pack",children:"wiki page"}),"\nin order to understand the concept and structure before proceeding to the rest of this page."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"/curios/slot-register",children:"Registered slot types"})," will all be available for use but will not appear in-game until they are\nadded to one or more entities."]}),"\n",(0,n.jsx)(t.h2,{id:"directory",children:"Directory"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["The file should be a ",(0,n.jsx)(t.code,{children:".json"})," file located in the ",(0,n.jsx)(t.code,{children:"~/data/(namespace)/curios/entities/"})," folder of the datapack."]}),"\n",(0,n.jsxs)(t.admonition,{type:"note",children:[(0,n.jsx)(t.p,{children:"The file can be named anything."}),(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"(namespace)"})," field should be replaced by the namespace chosen for this portion of the datapack. If this is a part\nof a mod, the namespace is usually the mod ID. If this is part of a user-defined datapack, then the namespace can be\nanything that is lowercased with no special characters."]})]}),"\n",(0,n.jsx)(t.h2,{id:"syntax",children:"Syntax"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["The structure of the ",(0,n.jsx)(t.code,{children:".json"})," file for the entity configuration consists of a top-level JSON object that holds two\npotential fields."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"entities"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"An array of registry names of entity types or entity type tags."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"slots"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["An array of ",(0,n.jsx)(t.code,{children:"identifier"})," names for registered slot types."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"All the listed slots will be associated to all the listed entities."}),"\n",(0,n.jsx)(t.admonition,{type:"caution",children:(0,n.jsxs)(t.p,{children:["Adding multiple of the same ",(0,n.jsx)(t.code,{children:"identifier"})," to the ",(0,n.jsx)(t.code,{children:"slots"})," array will ",(0,n.jsx)(t.strong,{children:"not"})," add multiple slots. Each entry in the ",(0,n.jsx)(t.code,{children:"slots"}),"\narray represents a ",(0,n.jsx)(t.a,{href:"/curios/slot-register",children:"registered slot type"})," and the entries do not stack, please refer to that page in\norder to change slot type behavior including default size."]})}),"\n",(0,n.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-json",children:'{\n "entities": ["player", "minecraft:zombie"],\n "slots": ["head", "back"]\n}\n'})}),"\n",(0,n.jsxs)(t.p,{children:["This configuration will give two slot types, ",(0,n.jsx)(t.code,{children:"head"})," and ",(0,n.jsx)(t.code,{children:"back"}),", to all players and all zombies."]})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>l,a:()=>o});var n=i(7294);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[143],{8462:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=i(5893),s=i(1151);const r={sidebar_position:3},o="Adding Slot Types to Entities",l={id:"curios/entity-register",title:"Adding Slot Types to Entities",description:"A tutorial on how to add registered slot types to entities.",source:"@site/docs/curios/entity-register.md",sourceDirName:"curios",slug:"/curios/entity-register",permalink:"/curios/entity-register",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/entity-register.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Registering Slot Types",permalink:"/curios/slot-register"},next:{title:"Adding Custom Slot Textures",permalink:"/curios/slot-textures"}},a={},d=[{value:"Overview",id:"overview",level:2},{value:"Directory",id:"directory",level:2},{value:"Syntax",id:"syntax",level:2},{value:"Example",id:"example",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"adding-slot-types-to-entities",children:"Adding Slot Types to Entities"}),"\n",(0,n.jsx)(t.p,{children:"A tutorial on how to add registered slot types to entities."}),"\n",(0,n.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["Beginning in 1.20, the recommended way to add a registered slot type to an entity is through a datapack. If you are\nunfamiliar with datapacks, it is recommended to read through the ",(0,n.jsx)(t.a,{href:"https://minecraft.fandom.com/wiki/Data_pack",children:"wiki page"}),"\nin order to understand the concept and structure before proceeding to the rest of this page."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"/curios/slot-register",children:"Registered slot types"})," will all be available for use but will not appear in-game until they are\nadded to one or more entities."]}),"\n",(0,n.jsx)(t.h2,{id:"directory",children:"Directory"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["The file should be a ",(0,n.jsx)(t.code,{children:".json"})," file located in the ",(0,n.jsx)(t.code,{children:"~/data/(namespace)/curios/entities/"})," folder of the datapack."]}),"\n",(0,n.jsxs)(t.admonition,{type:"note",children:[(0,n.jsx)(t.p,{children:"The file can be named anything."}),(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"(namespace)"})," field should be replaced by the namespace chosen for this portion of the datapack. If this is a part\nof a mod, the namespace is usually the mod ID. If this is part of a user-defined datapack, then the namespace can be\nanything that is lowercased with no special characters."]})]}),"\n",(0,n.jsx)(t.h2,{id:"syntax",children:"Syntax"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["The structure of the ",(0,n.jsx)(t.code,{children:".json"})," file for the entity configuration consists of a top-level JSON object that holds several\npotential fields."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"entities"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"An array of registry names of entity types or entity type tags."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"slots"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["An array of ",(0,n.jsx)(t.code,{children:"identifier"})," names for registered slot types."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"replace"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["A boolean, ",(0,n.jsx)(t.code,{children:"true"})," if the values listed in this file should replace values in lower-priority datapacks"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"conditions"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["An array of ",(0,n.jsx)(t.code,{children:"ICondition"})," implementations that must all pass before these slots are loaded into these entities"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"All the listed slots will be associated to all the listed entities."}),"\n",(0,n.jsx)(t.admonition,{type:"caution",children:(0,n.jsxs)(t.p,{children:["Adding multiple of the same ",(0,n.jsx)(t.code,{children:"identifier"})," to the ",(0,n.jsx)(t.code,{children:"slots"})," array will ",(0,n.jsx)(t.strong,{children:"not"})," add multiple slots. Each entry in the ",(0,n.jsx)(t.code,{children:"slots"}),"\narray represents a ",(0,n.jsx)(t.a,{href:"/curios/slot-register",children:"registered slot type"})," and the entries do not stack, please refer to that page in\norder to change slot type behavior including default size."]})}),"\n",(0,n.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-json",children:'{\n "entities": ["player", "minecraft:zombie"],\n "slots": ["head", "back"]\n}\n'})}),"\n",(0,n.jsxs)(t.p,{children:["This configuration will give two slot types, ",(0,n.jsx)(t.code,{children:"head"})," and ",(0,n.jsx)(t.code,{children:"back"}),", to all players and all zombies."]})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>l,a:()=>o});var n=i(7294);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8dae1db0.a3b380cc.js b/assets/js/8dae1db0.fe5c8f4f.js similarity index 91% rename from assets/js/8dae1db0.a3b380cc.js rename to assets/js/8dae1db0.fe5c8f4f.js index 8371a48..24de308 100644 --- a/assets/js/8dae1db0.a3b380cc.js +++ b/assets/js/8dae1db0.fe5c8f4f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[677],{2206:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>d,toc:()=>l});var i=r(5893),t=r(1151);const o={sidebar_position:8},s="Rendering a Curio",d={id:"curios/Developing with Curios/rendering-registry",title:"Rendering a Curio",description:"A tutorial on how to run rendering code when a specific curio item is equipped on an entity.",source:"@site/docs/curios/Developing with Curios/rendering-registry.md",sourceDirName:"curios/Developing with Curios",slug:"/curios/Developing with Curios/rendering-registry",permalink:"/curios/Developing with Curios/rendering-registry",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/Developing with Curios/rendering-registry.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Creating a Curio",permalink:"/curios/Developing with Curios/curio-creation"},next:{title:"ICurioRenderer",permalink:"/curios/Developing with Curios/APIs/renderer-interface"}},a={},l=[{value:"Create an ICurioRenderer",id:"create-an-icuriorenderer",level:2},{value:"Example",id:"example",level:3},{value:"Register your renderer",id:"register-your-renderer",level:2},{value:"Example",id:"example-1",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"rendering-a-curio",children:"Rendering a Curio"}),"\n",(0,i.jsx)(n.p,{children:"A tutorial on how to run rendering code when a specific curio item is equipped on an entity."}),"\n",(0,i.jsxs)(n.h2,{id:"create-an-icuriorenderer",children:["Create an ",(0,i.jsx)(n.code,{children:"ICurioRenderer"})]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.code,{children:"top.theillusivec4.curios.api.client"})," package, you'll find an interface called ",(0,i.jsx)(n.code,{children:"ICurioRenderer"}),". This interface\nneeds to be implemented on an object of your choice, as its ",(0,i.jsx)(n.code,{children:"render"})," method is what will be called to run your rendering\ncode later."]}),"\n",(0,i.jsxs)(n.p,{children:["For the full guide on the interface, see ",(0,i.jsx)(n.a,{href:"/curios/Developing%20with%20Curios/APIs/renderer-interface",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-java",children:"public class MyCurioRenderer implements ICurioRenderer {\n \n @Override\n public > void render(ItemStack stack,\n SlotContext slotContext,\n PoseStack matrixStack,\n RenderLayerParent renderLayerParent,\n MultiBufferSource renderTypeBuffer,\n int light, float limbSwing,\n float limbSwingAmount,\n float partialTicks,\n float ageInTicks,\n float netHeadYaw,\n float headPitch) {\n // Render code goes here\n }\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"register-your-renderer",children:"Register your renderer"}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsxs)(n.p,{children:["Once you have an implementation of ",(0,i.jsx)(n.code,{children:"ICurioRenderer"}),", you need to register an instance of that to an item. This is done\nby calling the ",(0,i.jsx)(n.code,{children:"register"})," method in ",(0,i.jsx)(n.code,{children:"top.theillusivec4.curios.api.client.CuriosRendererRegistry"})," during the\n",(0,i.jsx)(n.code,{children:"FMLClientSetupEvent"})," in mod loading."]}),"\n",(0,i.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-java",children:'@Mod("CurioMod")\npublic class CurioMod {\n \n public CurioMod() {\n final IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();\n eventBus.addListener(this::clientSetup);\n }\n\n private void clientSetup(final FMLClientSetupEvent evt) {\n CuriosRendererRegistry.register(CurioModItems.MY_ITEM, () -> new MyCurioRenderer());\n }\n}\n'})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Multiple items are allowed to share a renderer instance or type. This can be handy if your ",(0,i.jsx)(n.code,{children:"ICurioRenderer"}),"\nimplementation shares a lot of common code or if your items have very similar renders, in which case you may find it\nadvantageous to simply register those items with a single renderer rather than multiple."]})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>s});var i=r(7294);const t={},o=i.createContext(t);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[677],{2206:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var i=r(5893),t=r(1151);const o={sidebar_position:8},s="Rendering a Curio",a={id:"curios/Developing with Curios/rendering-registry",title:"Rendering a Curio",description:"A tutorial on how to run rendering code when a specific curio item is equipped on an entity.",source:"@site/docs/curios/Developing with Curios/rendering-registry.md",sourceDirName:"curios/Developing with Curios",slug:"/curios/Developing with Curios/rendering-registry",permalink:"/curios/Developing with Curios/rendering-registry",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/Developing with Curios/rendering-registry.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Data Generation",permalink:"/curios/Developing with Curios/data-generation"},next:{title:"ICurioRenderer",permalink:"/curios/Developing with Curios/APIs/renderer-interface"}},d={},l=[{value:"Create an ICurioRenderer",id:"create-an-icuriorenderer",level:2},{value:"Example",id:"example",level:3},{value:"Register your renderer",id:"register-your-renderer",level:2},{value:"Example",id:"example-1",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"rendering-a-curio",children:"Rendering a Curio"}),"\n",(0,i.jsx)(n.p,{children:"A tutorial on how to run rendering code when a specific curio item is equipped on an entity."}),"\n",(0,i.jsxs)(n.h2,{id:"create-an-icuriorenderer",children:["Create an ",(0,i.jsx)(n.code,{children:"ICurioRenderer"})]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.code,{children:"top.theillusivec4.curios.api.client"})," package, you'll find an interface called ",(0,i.jsx)(n.code,{children:"ICurioRenderer"}),". This interface\nneeds to be implemented on an object of your choice, as its ",(0,i.jsx)(n.code,{children:"render"})," method is what will be called to run your rendering\ncode later."]}),"\n",(0,i.jsxs)(n.p,{children:["For the full guide on the interface, see ",(0,i.jsx)(n.a,{href:"/curios/Developing%20with%20Curios/APIs/renderer-interface",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-java",children:"public class MyCurioRenderer implements ICurioRenderer {\n \n @Override\n public > void render(ItemStack stack,\n SlotContext slotContext,\n PoseStack matrixStack,\n RenderLayerParent renderLayerParent,\n MultiBufferSource renderTypeBuffer,\n int light, float limbSwing,\n float limbSwingAmount,\n float partialTicks,\n float ageInTicks,\n float netHeadYaw,\n float headPitch) {\n // Render code goes here\n }\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"register-your-renderer",children:"Register your renderer"}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsxs)(n.p,{children:["Once you have an implementation of ",(0,i.jsx)(n.code,{children:"ICurioRenderer"}),", you need to register an instance of that to an item. This is done\nby calling the ",(0,i.jsx)(n.code,{children:"register"})," method in ",(0,i.jsx)(n.code,{children:"top.theillusivec4.curios.api.client.CuriosRendererRegistry"})," during the\n",(0,i.jsx)(n.code,{children:"FMLClientSetupEvent"})," in mod loading."]}),"\n",(0,i.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-java",children:'@Mod("CurioMod")\npublic class CurioMod {\n \n public CurioMod() {\n final IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();\n eventBus.addListener(this::clientSetup);\n }\n\n private void clientSetup(final FMLClientSetupEvent evt) {\n CuriosRendererRegistry.register(CurioModItems.MY_ITEM, () -> new MyCurioRenderer());\n }\n}\n'})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Multiple items are allowed to share a renderer instance or type. This can be handy if your ",(0,i.jsx)(n.code,{children:"ICurioRenderer"}),"\nimplementation shares a lot of common code or if your items have very similar renders, in which case you may find it\nadvantageous to simply register those items with a single renderer rather than multiple."]})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>s});var i=r(7294);const t={},o=i.createContext(t);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.4a824b12.js b/assets/js/935f2afb.4a824b12.js new file mode 100644 index 0000000..9d428ba --- /dev/null +++ b/assets/js/935f2afb.4a824b12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"1.20.x","banner":null,"badge":true,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Overview","href":"/","docId":"intro","unlisted":false},{"type":"category","label":"Curios","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Registering Slot Types","href":"/curios/slot-register","docId":"curios/slot-register","unlisted":false},{"type":"link","label":"Adding Slot Types to Entities","href":"/curios/entity-register","docId":"curios/entity-register","unlisted":false},{"type":"link","label":"Adding Custom Slot Textures","href":"/curios/slot-textures","docId":"curios/slot-textures","unlisted":false},{"type":"link","label":"Preset Slot Types","href":"/curios/preset-slots","docId":"curios/preset-slots","unlisted":false},{"type":"link","label":"Curios Attribute Modifiers (NBT)","href":"/curios/curios-nbt","docId":"curios/curios-nbt","unlisted":false},{"type":"link","label":"Commands","href":"/curios/commands","docId":"curios/commands","unlisted":false},{"type":"category","label":"Developing with Curios","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Setting Up the Development Environment","href":"/curios/Developing with Curios/getting-started","docId":"curios/Developing with Curios/getting-started","unlisted":false},{"type":"link","label":"Creating a Curio","href":"/curios/Developing with Curios/curio-creation","docId":"curios/Developing with Curios/curio-creation","unlisted":false},{"type":"link","label":"Data Generation","href":"/curios/Developing with Curios/data-generation","docId":"curios/Developing with Curios/data-generation","unlisted":false},{"type":"link","label":"Rendering a Curio","href":"/curios/Developing with Curios/rendering-registry","docId":"curios/Developing with Curios/rendering-registry","unlisted":false},{"type":"category","label":"APIs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ICurioRenderer","href":"/curios/Developing with Curios/APIs/renderer-interface","docId":"curios/Developing with Curios/APIs/renderer-interface","unlisted":false}]}]}],"href":"/category/curios"},{"type":"category","label":"Diet","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Customizing Food Groups","href":"/diet/diet-groups","docId":"diet/diet-groups","unlisted":false},{"type":"link","label":"Categorizing Food to Groups","href":"/diet/food-classification","docId":"diet/food-classification","unlisted":false},{"type":"link","label":"Customizing Diet Suites","href":"/diet/diet-suites","docId":"diet/diet-suites","unlisted":false},{"type":"link","label":"Example Datapack","href":"/diet/datapack-example","docId":"diet/datapack-example","unlisted":false}],"href":"/category/diet"}]},"docs":{"curios/commands":{"id":"curios/commands","title":"Commands","description":"A tutorial on the various commands available through Curios.","sidebar":"tutorialSidebar"},"curios/curios-nbt":{"id":"curios/curios-nbt","title":"Curios Attribute Modifiers (NBT)","description":"A tutorial on how to edit a curio item\'s NBT data to add attribute modifiers when the item is worn in a curio slot.","sidebar":"tutorialSidebar"},"curios/Developing with Curios/APIs/renderer-interface":{"id":"curios/Developing with Curios/APIs/renderer-interface","title":"ICurioRenderer","description":"Methods","sidebar":"tutorialSidebar"},"curios/Developing with Curios/curio-creation":{"id":"curios/Developing with Curios/curio-creation","title":"Creating a Curio","description":"A tutorial on how to attach curio capabilities to your items.","sidebar":"tutorialSidebar"},"curios/Developing with Curios/data-generation":{"id":"curios/Developing with Curios/data-generation","title":"Data Generation","description":"A tutorial on how to programmatically generate the Curios data files.","sidebar":"tutorialSidebar"},"curios/Developing with Curios/getting-started":{"id":"curios/Developing with Curios/getting-started","title":"Setting Up the Development Environment","description":"A tutorial on how to set up your development workspace to work with Curios API interfaces and methods.","sidebar":"tutorialSidebar"},"curios/Developing with Curios/rendering-registry":{"id":"curios/Developing with Curios/rendering-registry","title":"Rendering a Curio","description":"A tutorial on how to run rendering code when a specific curio item is equipped on an entity.","sidebar":"tutorialSidebar"},"curios/entity-register":{"id":"curios/entity-register","title":"Adding Slot Types to Entities","description":"A tutorial on how to add registered slot types to entities.","sidebar":"tutorialSidebar"},"curios/preset-slots":{"id":"curios/preset-slots","title":"Preset Slot Types","description":"A list of commonly used slot types that are already defined in Curios for developers to use.","sidebar":"tutorialSidebar"},"curios/slot-register":{"id":"curios/slot-register","title":"Registering Slot Types","description":"A tutorial on how to register slot types that are recognized by Curios.","sidebar":"tutorialSidebar"},"curios/slot-textures":{"id":"curios/slot-textures","title":"Adding Custom Slot Textures","description":"A tutorial on how to add custom slot textures to slot types.","sidebar":"tutorialSidebar"},"diet/datapack-example":{"id":"diet/datapack-example","title":"Example Datapack","description":"An example datapack for configuring various diet mechanics, including adding a new food group and adding food to that","sidebar":"tutorialSidebar"},"diet/diet-groups":{"id":"diet/diet-groups","title":"Customizing Food Groups","description":"A tutorial on how to edit available food groups and their respective metadata.","sidebar":"tutorialSidebar"},"diet/diet-suites":{"id":"diet/diet-suites","title":"Customizing Diet Suites","description":"A tutorial on how to customize suites of food groups and diet effects.","sidebar":"tutorialSidebar"},"diet/food-classification":{"id":"diet/food-classification","title":"Categorizing Food to Groups","description":"Food classification into groups is done through item tags.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Overview","description":"WIP! Check back later for updates.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.8e902340.js b/assets/js/935f2afb.8e902340.js deleted file mode 100644 index 4b729fe..0000000 --- a/assets/js/935f2afb.8e902340.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"1.20.x","banner":null,"badge":true,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Overview","href":"/","docId":"intro","unlisted":false},{"type":"category","label":"Curios","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Registering Slot Types","href":"/curios/slot-register","docId":"curios/slot-register","unlisted":false},{"type":"link","label":"Adding Slot Types to Entities","href":"/curios/entity-register","docId":"curios/entity-register","unlisted":false},{"type":"link","label":"Adding Custom Slot Textures","href":"/curios/slot-textures","docId":"curios/slot-textures","unlisted":false},{"type":"link","label":"Preset Slot Types","href":"/curios/preset-slots","docId":"curios/preset-slots","unlisted":false},{"type":"link","label":"Curios Attribute Modifiers (NBT)","href":"/curios/curios-nbt","docId":"curios/curios-nbt","unlisted":false},{"type":"link","label":"Commands","href":"/curios/commands","docId":"curios/commands","unlisted":false},{"type":"category","label":"Developing with Curios","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Setting Up the Development Environment","href":"/curios/Developing with Curios/getting-started","docId":"curios/Developing with Curios/getting-started","unlisted":false},{"type":"link","label":"Creating a Curio","href":"/curios/Developing with Curios/curio-creation","docId":"curios/Developing with Curios/curio-creation","unlisted":false},{"type":"link","label":"Rendering a Curio","href":"/curios/Developing with Curios/rendering-registry","docId":"curios/Developing with Curios/rendering-registry","unlisted":false},{"type":"category","label":"APIs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ICurioRenderer","href":"/curios/Developing with Curios/APIs/renderer-interface","docId":"curios/Developing with Curios/APIs/renderer-interface","unlisted":false}]}]}],"href":"/category/curios"},{"type":"category","label":"Diet","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Customizing Food Groups","href":"/diet/diet-groups","docId":"diet/diet-groups","unlisted":false},{"type":"link","label":"Categorizing Food to Groups","href":"/diet/food-classification","docId":"diet/food-classification","unlisted":false},{"type":"link","label":"Customizing Diet Suites","href":"/diet/diet-suites","docId":"diet/diet-suites","unlisted":false},{"type":"link","label":"Example Datapack","href":"/diet/datapack-example","docId":"diet/datapack-example","unlisted":false}],"href":"/category/diet"}]},"docs":{"curios/commands":{"id":"curios/commands","title":"Commands","description":"A tutorial on the various commands available through Curios.","sidebar":"tutorialSidebar"},"curios/curios-nbt":{"id":"curios/curios-nbt","title":"Curios Attribute Modifiers (NBT)","description":"A tutorial on how to edit a curio item\'s NBT data to add attribute modifiers when the item is worn in a curio slot.","sidebar":"tutorialSidebar"},"curios/Developing with Curios/APIs/renderer-interface":{"id":"curios/Developing with Curios/APIs/renderer-interface","title":"ICurioRenderer","description":"Methods","sidebar":"tutorialSidebar"},"curios/Developing with Curios/curio-creation":{"id":"curios/Developing with Curios/curio-creation","title":"Creating a Curio","description":"A tutorial on how to attach curio capabilities to your items.","sidebar":"tutorialSidebar"},"curios/Developing with Curios/getting-started":{"id":"curios/Developing with Curios/getting-started","title":"Setting Up the Development Environment","description":"A tutorial on how to set up your development workspace to work with Curios API interfaces and methods.","sidebar":"tutorialSidebar"},"curios/Developing with Curios/rendering-registry":{"id":"curios/Developing with Curios/rendering-registry","title":"Rendering a Curio","description":"A tutorial on how to run rendering code when a specific curio item is equipped on an entity.","sidebar":"tutorialSidebar"},"curios/entity-register":{"id":"curios/entity-register","title":"Adding Slot Types to Entities","description":"A tutorial on how to add registered slot types to entities.","sidebar":"tutorialSidebar"},"curios/preset-slots":{"id":"curios/preset-slots","title":"Preset Slot Types","description":"A list of commonly used slot types that are already defined in Curios for developers to use.","sidebar":"tutorialSidebar"},"curios/slot-register":{"id":"curios/slot-register","title":"Registering Slot Types","description":"A tutorial on how to register slot types that are recognized by Curios.","sidebar":"tutorialSidebar"},"curios/slot-textures":{"id":"curios/slot-textures","title":"Adding Custom Slot Textures","description":"A tutorial on how to add custom slot textures to slot types.","sidebar":"tutorialSidebar"},"diet/datapack-example":{"id":"diet/datapack-example","title":"Example Datapack","description":"An example datapack for configuring various diet mechanics, including adding a new food group and adding food to that","sidebar":"tutorialSidebar"},"diet/diet-groups":{"id":"diet/diet-groups","title":"Customizing Food Groups","description":"A tutorial on how to edit available food groups and their respective metadata.","sidebar":"tutorialSidebar"},"diet/diet-suites":{"id":"diet/diet-suites","title":"Customizing Diet Suites","description":"A tutorial on how to customize suites of food groups and diet effects.","sidebar":"tutorialSidebar"},"diet/food-classification":{"id":"diet/food-classification","title":"Categorizing Food to Groups","description":"Food classification into groups is done through item tags.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Overview","description":"WIP! Check back later for updates.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/93ac1f71.8604f612.js b/assets/js/93ac1f71.8604f612.js new file mode 100644 index 0000000..55de3b5 --- /dev/null +++ b/assets/js/93ac1f71.8604f612.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[844],{9938:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>d,metadata:()=>o,toc:()=>a});var t=n(5893),r=n(1151);const d={sidebar_position:4},s="Data Generation",o={id:"curios/Developing with Curios/data-generation",title:"Data Generation",description:"A tutorial on how to programmatically generate the Curios data files.",source:"@site/docs/curios/Developing with Curios/data-generation.md",sourceDirName:"curios/Developing with Curios",slug:"/curios/Developing with Curios/data-generation",permalink:"/curios/Developing with Curios/data-generation",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/Developing with Curios/data-generation.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Creating a Curio",permalink:"/curios/Developing with Curios/curio-creation"},next:{title:"Rendering a Curio",permalink:"/curios/Developing with Curios/rendering-registry"}},l={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Getting Started",id:"getting-started",level:2},{value:"Slot Generation",id:"slot-generation",level:2},{value:"Example",id:"example",level:3},{value:"Entities Generation",id:"entities-generation",level:2},{value:"Example",id:"example-1",level:3},{value:"Criterion Triggers",id:"criterion-triggers",level:2},{value:"Example",id:"example-2",level:3}];function c(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"data-generation",children:"Data Generation"}),"\n",(0,t.jsx)(i.p,{children:"A tutorial on how to programmatically generate the Curios data files."}),"\n",(0,t.jsx)(i.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(i.hr,{}),"\n",(0,t.jsxs)(i.p,{children:["The documentation on this page was written with the assumption that readers are already familiar with basic data\ngeneration and its usages. If you are not, please prime yourself by learning about data generation on either ",(0,t.jsx)(i.a,{href:"https://forge.gemwire.uk/wiki/Datageneration",children:"Forge"}),"\nor ",(0,t.jsx)(i.a,{href:"https://docs.neoforged.net/docs/datagen/",children:"NeoForge"})," before proceeding further."]}),"\n",(0,t.jsx)(i.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,t.jsx)(i.hr,{}),"\n",(0,t.jsxs)(i.p,{children:["Slots and entities can be generated for a mod by constructing a new implementation of the\n",(0,t.jsx)(i.code,{children:"top.theillusivec4.curios.api.CuriosDataProvider"})," class, making sure to override the ",(0,t.jsx)(i.code,{children:"generate"})," method to run the\ngeneration code."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-java",children:"public class CuriosTestProvider extends CuriosDataProvider {\n\n public CuriosTestProvider(String modId, PackOutput output,\n ExistingFileHelper fileHelper,\n CompletableFuture registries) {\n super(modId, output, fileHelper, registries);\n }\n\n @Override\n public void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) {\n // Generation code here\n }\n}\n"})}),"\n",(0,t.jsxs)(i.p,{children:["A new instance of the implementation should be constructed in the ",(0,t.jsx)(i.code,{children:"GatherDataEvent"})," event on the MOD event bus."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-java",children:'// On the MOD event bus\n@SubscribeEvent\npublic void gatherData(GatherDataEvent event) {\n event.getGenerator().addProvider(\n // Tell generator to run only when server data are generating\n event.includeServer(),\n new CuriosTestProvider(\n "mod_id",\n event.getGenerator().getPackOutput(),\n event.getExistingFileHelper(),\n event.getLookupProvider()\n )\n );\n}\n'})}),"\n",(0,t.jsx)(i.h2,{id:"slot-generation",children:"Slot Generation"}),"\n",(0,t.jsx)(i.hr,{}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"CuriosDataProvider"})," has a ",(0,t.jsx)(i.code,{children:"createSlot"})," method to facilitate easy data generation of slot types, by taking in an initial\n",(0,t.jsx)(i.code,{children:"String"})," identifier/file name and allowing developers to chain additional parameters as needed."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-java",children:'@Override\npublic void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) {\n this.createSlot("test_slot"); // Create a slot with the identifier and file name "test_slot"\n}\n'})}),"\n",(0,t.jsxs)(i.p,{children:["Additional parameters can be added by calling methods on the ",(0,t.jsx)(i.code,{children:"ISlotData"})," returned by the ",(0,t.jsx)(i.code,{children:"createSlot"})," method call. Most\nof these parameters are linked to fields for ",(0,t.jsx)(i.code,{children:"ISlotType"}),", more information on how these fields are constructed and what\nthey represent can be found on the page for ",(0,t.jsx)(i.a,{href:"/curios/slot-register#-syntax",children:"slot registration"}),"."]}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Method"}),(0,t.jsx)(i.th,{children:"Parameters"}),(0,t.jsx)(i.th,{children:"Field"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"replace"})}),(0,t.jsx)(i.td,{children:"boolean"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"replace"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"size"})}),(0,t.jsx)(i.td,{children:"integer"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"size"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"operation"})}),(0,t.jsx)(i.td,{children:"string"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"operation"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"order"})}),(0,t.jsx)(i.td,{children:"integer"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"order"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"icon"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"ResourceLocation"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"icon"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"addCosmetic"})}),(0,t.jsx)(i.td,{children:"boolean"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"add_cosmetic"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"useNativeGui"})}),(0,t.jsx)(i.td,{children:"boolean"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"use_native_gui"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"renderToggle"})}),(0,t.jsx)(i.td,{children:"boolean"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"render_toggle"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"dropRule"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"ICurio$DropRule"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"drop_rule"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"addCondition"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"ICondition"})}),(0,t.jsx)(i.td,{children:"N/A"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"example",children:"Example"}),"\n",(0,t.jsxs)(i.p,{children:["The following example creates a slot file with the file name and identifier ",(0,t.jsx)(i.code,{children:"test_slot"}),", gives it a size of ",(0,t.jsx)(i.code,{children:"4"}),", sets the\ndrop rule to ",(0,t.jsx)(i.code,{children:'"ALWAYS_KEEP"'})," so that it is never dropped upon death, and gives it a cosmetic slot by setting ",(0,t.jsx)(i.code,{children:"addCosmetic"}),"\nto ",(0,t.jsx)(i.code,{children:"true"}),"."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-java",children:'@Override\npublic void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) {\n this.createSlot("test_slot")\n .size(4)\n .dropRule(ICurio.DropRule.ALWAYS_KEEP)\n .addCosmetic(true);\n}\n'})}),"\n",(0,t.jsx)(i.h2,{id:"entities-generation",children:"Entities Generation"}),"\n",(0,t.jsx)(i.hr,{}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"CuriosDataProvider"})," has a ",(0,t.jsx)(i.code,{children:"createEntities"})," method to facilitate easy data generation of adding slot types to entities,\nby taking in an initial ",(0,t.jsx)(i.code,{children:"String"})," file name and allowing developers to chain additional parameters as needed."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-java",children:'@Override\npublic void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) {\n this.createEntities("test_entities"); // Create an entities file with the name "test_entities"\n}\n'})}),"\n",(0,t.jsxs)(i.p,{children:["Additional parameters can be added by calling methods on the ",(0,t.jsx)(i.code,{children:"IEntitiesData"})," returned by the ",(0,t.jsx)(i.code,{children:"createEntities"})," method\ncall. All of these parameters correspond to JSON fields, more information on these can be found on the page for\n",(0,t.jsx)(i.a,{href:"/curios/entity-register#-syntax",children:"entity registration"}),"."]}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Method"}),(0,t.jsx)(i.th,{children:"Parameters"}),(0,t.jsx)(i.th,{children:"Field"}),(0,t.jsx)(i.th,{children:"Notes"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"replace"})}),(0,t.jsx)(i.td,{children:"boolean"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"replace"})}),(0,t.jsx)(i.td,{})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"addPlayer"})}),(0,t.jsx)(i.td,{children:"N/A"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"entities"})}),(0,t.jsxs)(i.td,{children:["Adds ",(0,t.jsx)(i.code,{children:'"minecraft:player"'})," to the ",(0,t.jsx)(i.code,{children:"entities"})," array"]})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"addEntities"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"EntityType[]"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"entities"})}),(0,t.jsx)(i.td,{})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"addSlots"})}),(0,t.jsx)(i.td,{children:"string[]"}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"slots"})}),(0,t.jsxs)(i.td,{children:["Adds each string as a slot identifier to the ",(0,t.jsx)(i.code,{children:"slots"})," array"]})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"addCondition"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"ICondition"})}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"conditions"})}),(0,t.jsx)(i.td,{})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"example-1",children:"Example"}),"\n",(0,t.jsxs)(i.p,{children:["The following example creates an entities file with the file name ",(0,t.jsx)(i.code,{children:"test_entities"}),", and assigns the ",(0,t.jsx)(i.code,{children:'"head"'}),", ",(0,t.jsx)(i.code,{children:'"ring"'}),",\nand ",(0,t.jsx)(i.code,{children:'"necklace"'})," slot types to the ",(0,t.jsx)(i.code,{children:'"minecraft:player"'})," and ",(0,t.jsx)(i.code,{children:'"minecraft:zombie"'})," entities."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-java",children:'@Override\npublic void generate(HolderLookup.Provider registries, ExistingFileHelper fileHelper) {\n this.createEntities("test_entities")\n .addPlayer()\n .addEntities(EntityType.ZOMBIE)\n .addSlots("head", "ring", "necklace");\n}\n'})}),"\n",(0,t.jsx)(i.h2,{id:"criterion-triggers",children:"Criterion Triggers"}),"\n",(0,t.jsxs)(i.p,{children:["Curios provides several helper methods in the ",(0,t.jsx)(i.code,{children:"top.theillusivec4.curios.api.CuriosTriggers"})," class to generate data\nassociated with criterion triggers used for advancements and other similar files."]}),"\n",(0,t.jsxs)(i.p,{children:["Currently, the only triggers available are ",(0,t.jsx)(i.code,{children:"equip"})," and ",(0,t.jsx)(i.code,{children:"equipAtLocation"})," for triggering when a certain item is equipped\ninto a curio slot."]}),"\n",(0,t.jsx)(i.h3,{id:"example-2",children:"Example"}),"\n",(0,t.jsxs)(i.p,{children:["The following example will create an advancement file, ",(0,t.jsx)(i.code,{children:"curiostest/test"}),", that adds a criteration called ",(0,t.jsx)(i.code,{children:'"test"'}),", that\nis triggered when a ",(0,t.jsx)(i.code,{children:'"minecraft:diamond"'})," item is equipped in the Badlands biome."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-java",children:'Advancement.Builder.advancement()\n .addCriterion("test",\n CuriosTriggers.equipAtLocation(\n ItemPredicate.Builder.item().of(Items.DIAMOND),\n LocationPredicate.Builder.location().setBiome(Biomes.BADLANDS)))\n .save(saver, new ResourceLocation("curiostest", "test"), existingFileHelper);\n'})})]})}function h(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>s});var t=n(7294);const r={},d=t.createContext(r);function s(e){const i=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(d.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef6cb8ea.f35103d2.js b/assets/js/ef6cb8ea.f35103d2.js deleted file mode 100644 index e61e2cc..0000000 --- a/assets/js/ef6cb8ea.f35103d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[969],{8329:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>a,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var i=s(5893),n=s(1151);const r={sidebar_position:1},d="Registering Slot Types",o={id:"curios/slot-register",title:"Registering Slot Types",description:"A tutorial on how to register slot types that are recognized by Curios.",source:"@site/docs/curios/slot-register.md",sourceDirName:"curios",slug:"/curios/slot-register",permalink:"/curios/slot-register",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/slot-register.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Curios",permalink:"/category/curios"},next:{title:"Adding Slot Types to Entities",permalink:"/curios/entity-register"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Directory",id:"directory",level:2},{value:"Syntax",id:"syntax",level:2},{value:"Example",id:"example",level:2},{value:"Modifying a Slot Type",id:"modifying-a-slot-type",level:2},{value:"Example",id:"example-1",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"registering-slot-types",children:"Registering Slot Types"}),"\n",(0,i.jsx)(t.p,{children:"A tutorial on how to register slot types that are recognized by Curios."}),"\n",(0,i.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.p,{children:["Beginning in 1.20, the recommended way to register a slot type is through a datapack. If you are unfamiliar with\ndatapacks, it is recommended to read through the ",(0,i.jsx)(t.a,{href:"https://minecraft.fandom.com/wiki/Data_pack",children:"wiki page"})," in order to\nunderstand the concept and structure before proceeding to the rest of this page."]}),"\n",(0,i.jsxs)(t.p,{children:["If using one of the ",(0,i.jsx)(t.a,{href:"./preset-slots",children:"Preset Slot Types"}),", this step can be skipped since Curios natively provides the\nneeded datapack registration."]}),"\n",(0,i.jsxs)(t.admonition,{type:"info",children:[(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Why are my registered slot types not appearing?"})}),(0,i.jsxs)(t.p,{children:["Registering slot types makes them available for use; however, they are ",(0,i.jsx)(t.em,{children:"not"})," added to any entities (including players)\nby default. In order to add them to an entity, please refer to ",(0,i.jsx)(t.a,{href:"/curios/entity-register",children:"the next step"})," on adding slot\ntypes to entities."]})]}),"\n",(0,i.jsx)(t.h2,{id:"directory",children:"Directory"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.p,{children:["The file should be a ",(0,i.jsx)(t.code,{children:".json"})," file with the ",(0,i.jsx)(t.code,{children:"identifier"})," for the slot type to be registered as the name. This file\nshould be located in the ",(0,i.jsx)(t.code,{children:"~/data/(namespace)/curios/slots/"})," folder of the datapack."]}),"\n",(0,i.jsxs)(t.p,{children:["Example: Registering a ",(0,i.jsx)(t.code,{children:"head"})," slot type requires creating a ",(0,i.jsx)(t.code,{children:"head.json"})," file located in ",(0,i.jsx)(t.code,{children:"~/data/(namespace)/curios/slots/"}),"\nso the final path should look like ",(0,i.jsx)(t.code,{children:"~/data/(namespace)/curios/slots/head.json"}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"(namespace)"})," field should be replaced by the namespace chosen for this portion of the datapack. If this is a part\nof a mod, the namespace is usually the mod ID. If this is part of a user-defined datapack, then the namespace can be\nanything that is lowercased with no special characters."]})}),"\n",(0,i.jsx)(t.h2,{id:"syntax",children:"Syntax"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.p,{children:["The structure of the ",(0,i.jsx)(t.code,{children:".json"})," file for the slot type consists of a top-level JSON object that holds various fields\nrelated to that slot type."]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Field"}),(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Default"}),(0,i.jsx)(t.th,{children:"Required"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Merge Behavior"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"replace"})}),(0,i.jsx)(t.td,{children:"boolean"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsxs)(t.td,{children:["When ",(0,i.jsx)(t.code,{children:"true"}),", replaces data from lower-priority datapacks"]}),(0,i.jsx)(t.td,{children:"N/A"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"size"})}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"1"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsx)(t.td,{children:"The number of slots of this slot type to give by default"}),(0,i.jsx)(t.td,{children:"The highest size will be used"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"operation"})}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:'"SET"'}),"|",(0,i.jsx)(t.code,{children:'"ADD"'}),"|",(0,i.jsx)(t.code,{children:'"REMOVE"'})]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:'"SET"'})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsxs)(t.td,{children:["Whether to use ",(0,i.jsx)(t.code,{children:"size"})," to set, add, or remove from the total number of slots"]}),(0,i.jsx)(t.td,{children:"N/A"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"order"})}),(0,i.jsx)(t.td,{children:"integer"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"1000"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsx)(t.td,{children:"The order the slots will appear in the native Curios GUI, lower numbers appear higher"}),(0,i.jsx)(t.td,{children:"The lowest order will be used"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"icon"})}),(0,i.jsx)(t.td,{children:"string"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"curios:slot/empty_curios_slot"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsx)(t.td,{children:"The location of the icon to use for the slot type"}),(0,i.jsx)(t.td,{children:"The last icon will be used"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"add_cosmetic"})}),(0,i.jsx)(t.td,{children:"boolean"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsxs)(t.td,{children:["When ",(0,i.jsx)(t.code,{children:"true"}),", adds a cosmetic slot next to the original that does not provide function but still renders its contents"]}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"true"})," if any add a cosmetic slot"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"use_native_gui"})}),(0,i.jsx)(t.td,{children:"boolean"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsxs)(t.td,{children:["When ",(0,i.jsx)(t.code,{children:"false"}),", does not add the slot type to the native Curios GUI"]}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"false"})," if any do not use the native GUI"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"render_toggle"})}),(0,i.jsx)(t.td,{children:"boolean"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"true"})}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"false"})}),(0,i.jsxs)(t.td,{children:["When ",(0,i.jsx)(t.code,{children:"false"}),", does not allow the slot type to toggle its rendering"]}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"false"})," if any do not allow render toggling"]})]})]})]}),"\n",(0,i.jsxs)(t.admonition,{type:"info",children:[(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["Which ",(0,i.jsx)(t.code,{children:"operation"})," value should I use?"]})}),(0,i.jsxs)(t.p,{children:["In most cases, ",(0,i.jsx)(t.code,{children:'"SET"'})," (also the default if no value is defined) will accomplish the desired result. It denotes that a\nslot type should have a certain amount of slots by default, with the highest value among all consumers being used.\n",(0,i.jsx)(t.code,{children:'"ADD"'}),"and ",(0,i.jsx)(t.code,{children:'"REMOVE"'})," are inherent slot modifiers and are based on the amount of slots specified by all ",(0,i.jsx)(t.code,{children:'"SET"'}),"\noperations, the result of which can change based on the mods/datapacks loaded."]})]}),"\n",(0,i.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'{\n "order": 20,\n "size": 4,\n "icon": "curios:slot/empty_custom_slot",\n "add_cosmetic": true\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["This slot type will have a relatively low order of 20, which will make it appear higher than most slots. It also has\nsize of 4 which means that it will register 4 slots to any given entity by default. For the GUI, it uses an icon\nlocated at ",(0,i.jsx)(t.code,{children:"curios:slot/empty_custom_slot"}),". It also has added a cosmetic slot so there will be an additional slot for\ncosmetic items next to it in the Curios GUI."]}),"\n",(0,i.jsx)(t.h2,{id:"modifying-a-slot-type",children:"Modifying a Slot Type"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsxs)(t.p,{children:["The process of modifying a slot type is identical to registering a new slot type, except using the same ",(0,i.jsx)(t.code,{children:"identifier"})," as\nthe existing slot type. All slot types that share an ",(0,i.jsx)(t.code,{children:"identifier"})," will be merged according to the ",(0,i.jsx)(t.strong,{children:"Merge Behavior"})," of\neach field as outlined above."]}),"\n",(0,i.jsx)(t.h3,{id:"example-1",children:"Example"}),"\n",(0,i.jsxs)(t.p,{children:["Curios natively provides data for the ",(0,i.jsx)(t.code,{children:"ring"})," slot, which defaults the size to 1. In order to increase the size to 2,\ncreate a ",(0,i.jsx)(t.code,{children:"ring.json"})," slot registration file in the datapack with the contents:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'{\n "size": 2\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This will merge the size data of this registration with the existing registration provided by Curios, keeping all of the\nother data intact while increasing the number of slots to 2."})]})}function a(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1151:(e,t,s)=>{s.d(t,{Z:()=>o,a:()=>d});var i=s(7294);const n={},r=i.createContext(n);function d(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef6cb8ea.f6a75d36.js b/assets/js/ef6cb8ea.f6a75d36.js new file mode 100644 index 0000000..4ff6901 --- /dev/null +++ b/assets/js/ef6cb8ea.f6a75d36.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[969],{8329:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>a,frontMatter:()=>d,metadata:()=>o,toc:()=>c});var i=t(5893),n=t(1151);const d={sidebar_position:1},r="Registering Slot Types",o={id:"curios/slot-register",title:"Registering Slot Types",description:"A tutorial on how to register slot types that are recognized by Curios.",source:"@site/docs/curios/slot-register.md",sourceDirName:"curios",slug:"/curios/slot-register",permalink:"/curios/slot-register",draft:!1,unlisted:!1,editUrl:"https://github.com/illusivesoulworks/docs/edit/main/docs/curios/slot-register.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Curios",permalink:"/category/curios"},next:{title:"Adding Slot Types to Entities",permalink:"/curios/entity-register"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Directory",id:"directory",level:2},{value:"Syntax",id:"syntax",level:2},{value:"Example",id:"example",level:2},{value:"Modifying a Slot Type",id:"modifying-a-slot-type",level:2},{value:"Example",id:"example-1",level:3}];function h(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"registering-slot-types",children:"Registering Slot Types"}),"\n",(0,i.jsx)(s.p,{children:"A tutorial on how to register slot types that are recognized by Curios."}),"\n",(0,i.jsx)(s.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsxs)(s.p,{children:["Beginning in 1.20, the recommended way to register a slot type is through a datapack. If you are unfamiliar with\ndatapacks, it is recommended to read through the ",(0,i.jsx)(s.a,{href:"https://minecraft.fandom.com/wiki/Data_pack",children:"wiki page"})," in order to\nunderstand the concept and structure before proceeding to the rest of this page."]}),"\n",(0,i.jsxs)(s.p,{children:["If using one of the ",(0,i.jsx)(s.a,{href:"./preset-slots",children:"Preset Slot Types"}),", this step can be skipped since Curios natively provides the\nneeded datapack registration."]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Why are my registered slot types not appearing?"})}),(0,i.jsxs)(s.p,{children:["Registering slot types makes them available for use; however, they are ",(0,i.jsx)(s.em,{children:"not"})," added to any entities (including players)\nby default. In order to add them to an entity, please refer to ",(0,i.jsx)(s.a,{href:"/curios/entity-register",children:"the next step"})," on adding slot\ntypes to entities."]})]}),"\n",(0,i.jsx)(s.h2,{id:"directory",children:"Directory"}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsxs)(s.p,{children:["The file should be a ",(0,i.jsx)(s.code,{children:".json"})," file with the ",(0,i.jsx)(s.code,{children:"identifier"})," for the slot type to be registered as the name. This file\nshould be located in the ",(0,i.jsx)(s.code,{children:"~/data/(namespace)/curios/slots/"})," folder of the datapack."]}),"\n",(0,i.jsxs)(s.p,{children:["Example: Registering a ",(0,i.jsx)(s.code,{children:"head"})," slot type requires creating a ",(0,i.jsx)(s.code,{children:"head.json"})," file located in ",(0,i.jsx)(s.code,{children:"~/data/(namespace)/curios/slots/"}),"\nso the final path should look like ",(0,i.jsx)(s.code,{children:"~/data/(namespace)/curios/slots/head.json"}),"."]}),"\n",(0,i.jsx)(s.admonition,{type:"note",children:(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.code,{children:"(namespace)"})," field should be replaced by the namespace chosen for this portion of the datapack. If this is a part\nof a mod, the namespace is usually the mod ID. If this is part of a user-defined datapack, then the namespace can be\nanything that is lowercased with no special characters."]})}),"\n",(0,i.jsx)(s.h2,{id:"syntax",children:"Syntax"}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsxs)(s.p,{children:["The structure of the ",(0,i.jsx)(s.code,{children:".json"})," file for the slot type consists of a top-level JSON object that holds various fields\nrelated to that slot type."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Field"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"}),(0,i.jsx)(s.th,{children:"Required"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Merge Behavior"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"replace"})}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsxs)(s.td,{children:["When ",(0,i.jsx)(s.code,{children:"true"}),", replaces data from lower-priority datapacks"]}),(0,i.jsx)(s.td,{children:"N/A"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"size"})}),(0,i.jsx)(s.td,{children:"integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"1"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsx)(s.td,{children:"The number of slots of this slot type to give by default"}),(0,i.jsx)(s.td,{children:"The highest size will be used"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"operation"})}),(0,i.jsxs)(s.td,{children:[(0,i.jsx)(s.code,{children:'"SET"'}),"|",(0,i.jsx)(s.code,{children:'"ADD"'}),"|",(0,i.jsx)(s.code,{children:'"REMOVE"'})]}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:'"SET"'})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsxs)(s.td,{children:["Whether to use ",(0,i.jsx)(s.code,{children:"size"})," to set, add, or remove from the total number of slots"]}),(0,i.jsx)(s.td,{children:"N/A"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"order"})}),(0,i.jsx)(s.td,{children:"integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"1000"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsx)(s.td,{children:"The order the slots will appear in the native Curios GUI, lower numbers appear higher"}),(0,i.jsx)(s.td,{children:"The lowest order will be used"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"icon"})}),(0,i.jsx)(s.td,{children:"string"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"curios:slot/empty_curios_slot"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsx)(s.td,{children:"The location of the icon to use for the slot type"}),(0,i.jsx)(s.td,{children:"The last icon will be used"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"add_cosmetic"})}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsxs)(s.td,{children:["When ",(0,i.jsx)(s.code,{children:"true"}),", adds a cosmetic slot next to the original that does not provide function but still renders its contents"]}),(0,i.jsxs)(s.td,{children:[(0,i.jsx)(s.code,{children:"true"})," if any add a cosmetic slot"]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"use_native_gui"})}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"true"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsxs)(s.td,{children:["When ",(0,i.jsx)(s.code,{children:"false"}),", does not add the slot type to the native Curios GUI"]}),(0,i.jsxs)(s.td,{children:[(0,i.jsx)(s.code,{children:"false"})," if any do not use the native GUI"]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"render_toggle"})}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"true"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsxs)(s.td,{children:["When ",(0,i.jsx)(s.code,{children:"false"}),", does not allow the slot type to toggle its rendering"]}),(0,i.jsxs)(s.td,{children:[(0,i.jsx)(s.code,{children:"false"})," if any do not allow render toggling"]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"drop_rule"})}),(0,i.jsxs)(s.td,{children:[(0,i.jsx)(s.code,{children:'"DEFAULT"'}),"|",(0,i.jsx)(s.code,{children:'"ALWAYS_DROP"'}),"|",(0,i.jsx)(s.code,{children:'"ALWAYS_KEEP"'}),"|",(0,i.jsx)(s.code,{children:'"DESTROY"'})]}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:'"DEFAULT"'})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsxs)(s.td,{children:["Whether to drop, keep, destroy, or follow the ",(0,i.jsx)(s.code,{children:"keepCurios"})," configuration"]}),(0,i.jsx)(s.td,{children:"N/A"})]})]})]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsx)(s.p,{children:(0,i.jsxs)(s.strong,{children:["Which ",(0,i.jsx)(s.code,{children:"operation"})," value should I use?"]})}),(0,i.jsxs)(s.p,{children:["In most cases, ",(0,i.jsx)(s.code,{children:'"SET"'})," (also the default if no value is defined) will accomplish the desired result. It denotes that a\nslot type should have a certain amount of slots by default, with the highest value among all consumers being used.\n",(0,i.jsx)(s.code,{children:'"ADD"'}),"and ",(0,i.jsx)(s.code,{children:'"REMOVE"'})," are inherent slot modifiers and are based on the amount of slots specified by all ",(0,i.jsx)(s.code,{children:'"SET"'}),"\noperations, the result of which can change based on the mods/datapacks loaded."]})]}),"\n",(0,i.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-json",children:'{\n "order": 20,\n "size": 4,\n "icon": "curios:slot/empty_custom_slot",\n "add_cosmetic": true\n}\n'})}),"\n",(0,i.jsxs)(s.p,{children:["This slot type will have a relatively low order of 20, which will make it appear higher than most slots. It also has\nsize of 4 which means that it will register 4 slots to any given entity by default. For the GUI, it uses an icon\nlocated at ",(0,i.jsx)(s.code,{children:"curios:slot/empty_custom_slot"}),". It also has added a cosmetic slot so there will be an additional slot for\ncosmetic items next to it in the Curios GUI."]}),"\n",(0,i.jsx)(s.h2,{id:"modifying-a-slot-type",children:"Modifying a Slot Type"}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsxs)(s.p,{children:["The process of modifying a slot type is identical to registering a new slot type, except using the same ",(0,i.jsx)(s.code,{children:"identifier"})," as\nthe existing slot type. All slot types that share an ",(0,i.jsx)(s.code,{children:"identifier"})," will be merged according to the ",(0,i.jsx)(s.strong,{children:"Merge Behavior"})," of\neach field as outlined above."]}),"\n",(0,i.jsx)(s.h3,{id:"example-1",children:"Example"}),"\n",(0,i.jsxs)(s.p,{children:["Curios natively provides data for the ",(0,i.jsx)(s.code,{children:"ring"})," slot, which defaults the size to 1. In order to increase the size to 2,\ncreate a ",(0,i.jsx)(s.code,{children:"ring.json"})," slot registration file in the datapack with the contents:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-json",children:'{\n "size": 2\n}\n'})}),"\n",(0,i.jsx)(s.p,{children:"This will merge the size data of this registration with the existing registration provided by Curios, keeping all of the\nother data intact while increasing the number of slots to 2."})]})}function a(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>r});var i=t(7294);const n={},d=i.createContext(n);function r(e){const s=i.useContext(d);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(d.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.2f4bbb6a.js b/assets/js/main.2f4bbb6a.js deleted file mode 100644 index a082054..0000000 --- a/assets/js/main.2f4bbb6a.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.2f4bbb6a.js.LICENSE.txt */ -(self.webpackChunkillusivesoulworks_docs=self.webpackChunkillusivesoulworks_docs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});n(7294);var r=n(8356),a=n.n(r),o=n(6887);const i={"09965537":[()=>n.e(131).then(n.t.bind(n,7616,19)),"~docs/default/category-tutorialsidebar-category-curios-11f.json",7616],"0e384e19":[()=>n.e(671).then(n.bind(n,7876)),"@site/docs/intro.md",7876],"11c2ad6b":[()=>n.e(456).then(n.bind(n,6135)),"@site/docs/curios/Developing with Curios/curio-creation.md",6135],"14eb3368":[()=>Promise.all([n.e(532),n.e(817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(918)]).then(n.bind(n,8688)),"@theme/DocItem",8688],"18c10e97":[()=>n.e(691).then(n.bind(n,6018)),"@site/docs/diet/diet-groups.md",6018],"21ef5f27":[()=>n.e(183).then(n.bind(n,1159)),"@site/docs/curios/preset-slots.md",1159],"247783bb":[()=>n.e(334).then(n.t.bind(n,3769,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"27236a1a":[()=>n.e(512).then(n.bind(n,8407)),"@site/docs/curios/Developing with Curios/APIs/renderer-interface.md",8407],"4c92833a":[()=>n.e(270).then(n.bind(n,1119)),"@site/docs/curios/commands.md",1119],"514a6b50":[()=>n.e(670).then(n.bind(n,169)),"@site/docs/curios/slot-textures.md",169],"5e95c892":[()=>n.e(661).then(n.bind(n,1892)),"@theme/DocsRoot",1892],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6c8344a3":[()=>n.e(933).then(n.bind(n,9580)),"@site/versioned_docs/version-1.18.x/champions/integration/gamestages.md",9580],"78280e3d":[()=>n.e(143).then(n.bind(n,8462)),"@site/docs/curios/entity-register.md",8462],"7ffb7c5f":[()=>n.e(551).then(n.bind(n,4250)),"@site/docs/diet/diet-suites.md",4250],"8dae1db0":[()=>n.e(677).then(n.bind(n,2206)),"@site/docs/curios/Developing with Curios/rendering-registry.md",2206],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"93c91ab0":[()=>n.e(58).then(n.t.bind(n,8504,19)),"~docs/default/category-118-x-tutorialsidebar-category-mod-integrations-a7b.json",8504],"93d27ab8":[()=>n.e(789).then(n.t.bind(n,6080,19)),"~docs/default/category-118-x-tutorialsidebar-category-champions-91c.json",6080],"94fad746":[()=>n.e(455).then(n.bind(n,8456)),"@site/versioned_docs/version-1.18.x/champions/nbt.md",8456],"96cf4fb7":[()=>n.e(495).then(n.bind(n,5880)),"@site/versioned_docs/version-1.18.x/champions/commands.md",5880],99097929:[()=>n.e(368).then(n.t.bind(n,1754,19)),"~docs/default/category-tutorialsidebar-category-diet-992.json",1754],a0145bdd:[()=>n.e(168).then(n.t.bind(n,3894,19)),"~docs/default/version-1-18-x-metadata-prop-3c6.json",3894],a54b83c5:[()=>n.e(842).then(n.bind(n,7345)),"@site/docs/diet/food-classification.md",7345],a7434565:[()=>n.e(645).then(n.t.bind(n,5745,19)),"/home/runner/work/docs/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],a7bd4aaa:[()=>n.e(518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a94703ab:[()=>Promise.all([n.e(532),n.e(107)]).then(n.bind(n,2674)),"@theme/DocRoot",2674],ab811e82:[()=>n.e(564).then(n.bind(n,7339)),"@site/versioned_docs/version-1.18.x/champions/integration/scalinghealth.md",7339],add24532:[()=>n.e(422).then(n.bind(n,2272)),"@site/docs/curios/curios-nbt.md",2272],bd58d19a:[()=>n.e(408).then(n.bind(n,5077)),"@site/docs/diet/datapack-example.md",5077],d8ef455a:[()=>n.e(904).then(n.bind(n,164)),"@site/versioned_docs/version-1.18.x/intro.md",164],dcc5fc19:[()=>n.e(162).then(n.bind(n,107)),"@site/docs/curios/Developing with Curios/getting-started.md",107],e380917f:[()=>n.e(335).then(n.bind(n,7515)),"@site/versioned_docs/version-1.18.x/champions/loottable.md",7515],ef6cb8ea:[()=>n.e(969).then(n.bind(n,8329)),"@site/docs/curios/slot-register.md",8329],fa17a3e5:[()=>n.e(181).then(n.bind(n,5111)),"@site/src/pages/versions.tsx",5111]};var l=n(5893);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(9670),c=n(226);function d(e,t){if("*"===e)return a()({loading:s,loader:()=>n.e(772).then(n.bind(n,1772)),modules:["@theme/NotFound"],webpack:()=>[1772],render(e,t){const n=e.default;return(0,l.jsx)(c.z,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],g=(0,u.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:s,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,l.jsx)(c.z,{value:i,children:(0,l.jsx)(o,{...a,...n})})}})}const f=[{path:"/versions",component:d("/versions","21c"),exact:!0},{path:"/",component:d("/","163"),routes:[{path:"/1.18.x",component:d("/1.18.x","8d6"),routes:[{path:"/1.18.x",component:d("/1.18.x","693"),routes:[{path:"/1.18.x",component:d("/1.18.x","a91"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1.18.x/category/champions",component:d("/1.18.x/category/champions","2e3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1.18.x/category/mod-integrations",component:d("/1.18.x/category/mod-integrations","5b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1.18.x/champions/commands",component:d("/1.18.x/champions/commands","5ab"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1.18.x/champions/integration/gamestages",component:d("/1.18.x/champions/integration/gamestages","196"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1.18.x/champions/integration/scalinghealth",component:d("/1.18.x/champions/integration/scalinghealth","8bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1.18.x/champions/loottable",component:d("/1.18.x/champions/loottable","0e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1.18.x/champions/nbt",component:d("/1.18.x/champions/nbt","05f"),exact:!0,sidebar:"tutorialSidebar"}]}]},{path:"/",component:d("/","ffd"),routes:[{path:"/",component:d("/","375"),routes:[{path:"/category/curios",component:d("/category/curios","4b6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/category/diet",component:d("/category/diet","ea0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/commands",component:d("/curios/commands","6be"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/curios-nbt",component:d("/curios/curios-nbt","a6b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/Developing with Curios/APIs/renderer-interface",component:d("/curios/Developing with Curios/APIs/renderer-interface","5ee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/Developing with Curios/curio-creation",component:d("/curios/Developing with Curios/curio-creation","d3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/Developing with Curios/getting-started",component:d("/curios/Developing with Curios/getting-started","cd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/Developing with Curios/rendering-registry",component:d("/curios/Developing with Curios/rendering-registry","c96"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/entity-register",component:d("/curios/entity-register","2eb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/preset-slots",component:d("/curios/preset-slots","b79"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/slot-register",component:d("/curios/slot-register","0dc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/curios/slot-textures",component:d("/curios/slot-textures","b8f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/diet/datapack-example",component:d("/diet/datapack-example","118"),exact:!0,sidebar:"tutorialSidebar"},{path:"/diet/diet-groups",component:d("/diet/diet-groups","09b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/diet/diet-suites",component:d("/diet/diet-suites","711"),exact:!0,sidebar:"tutorialSidebar"},{path:"/diet/food-classification",component:d("/diet/food-classification","d6e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/",component:d("/","96c"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(745),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790),f=n(5893);function p(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var g=n(5742),h=n(2263),m=n(4996),y=n(6668),b=n(1944),v=n(4711),w=n(9727),k=n(3320),x=n(8780),S=n(197);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,v.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(g.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,c.TH)();return e+(0,x.applyTrailingSlash)((0,m.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(g.Z,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(g.Z,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.h})]}),n&&(0,f.jsx)(b.d,{image:n}),(0,f.jsx)(_,{}),(0,f.jsx)(E,{}),(0,f.jsx)(S.Z,{tag:k.HX,locale:e}),(0,f.jsx)(g.Z,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const T=new Map;function N(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),j=n(8940),L=n(469);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(O,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(c.AW,{location:t,render:()=>e})})}}const F=I,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${D}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Q=n(9670);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Q.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(l.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(i.B6,{children:(0,f.jsx)(o.VK,{children:(0,f.jsx)(q,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},l=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};R(window.location.pathname).then(l)}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"1.20.x","isLast":true,"path":"/","mainDocId":"intro","docs":[{"id":"curios/commands","path":"/curios/commands","sidebar":"tutorialSidebar"},{"id":"curios/curios-nbt","path":"/curios/curios-nbt","sidebar":"tutorialSidebar"},{"id":"curios/Developing with Curios/APIs/renderer-interface","path":"/curios/Developing with Curios/APIs/renderer-interface","sidebar":"tutorialSidebar"},{"id":"curios/Developing with Curios/curio-creation","path":"/curios/Developing with Curios/curio-creation","sidebar":"tutorialSidebar"},{"id":"curios/Developing with Curios/getting-started","path":"/curios/Developing with Curios/getting-started","sidebar":"tutorialSidebar"},{"id":"curios/Developing with Curios/rendering-registry","path":"/curios/Developing with Curios/rendering-registry","sidebar":"tutorialSidebar"},{"id":"curios/entity-register","path":"/curios/entity-register","sidebar":"tutorialSidebar"},{"id":"curios/preset-slots","path":"/curios/preset-slots","sidebar":"tutorialSidebar"},{"id":"curios/slot-register","path":"/curios/slot-register","sidebar":"tutorialSidebar"},{"id":"curios/slot-textures","path":"/curios/slot-textures","sidebar":"tutorialSidebar"},{"id":"diet/datapack-example","path":"/diet/datapack-example","sidebar":"tutorialSidebar"},{"id":"diet/diet-groups","path":"/diet/diet-groups","sidebar":"tutorialSidebar"},{"id":"diet/diet-suites","path":"/diet/diet-suites","sidebar":"tutorialSidebar"},{"id":"diet/food-classification","path":"/diet/food-classification","sidebar":"tutorialSidebar"},{"id":"intro","path":"/","sidebar":"tutorialSidebar"},{"id":"/category/curios","path":"/category/curios","sidebar":"tutorialSidebar"},{"id":"/category/diet","path":"/category/diet","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/","label":"intro"}}}},{"name":"1.18.x","label":"1.18.x","isLast":false,"path":"/1.18.x","mainDocId":"intro","docs":[{"id":"champions/commands","path":"/1.18.x/champions/commands","sidebar":"tutorialSidebar"},{"id":"champions/integration/gamestages","path":"/1.18.x/champions/integration/gamestages","sidebar":"tutorialSidebar"},{"id":"champions/integration/scalinghealth","path":"/1.18.x/champions/integration/scalinghealth","sidebar":"tutorialSidebar"},{"id":"champions/loottable","path":"/1.18.x/champions/loottable","sidebar":"tutorialSidebar"},{"id":"champions/nbt","path":"/1.18.x/champions/nbt","sidebar":"tutorialSidebar"},{"id":"intro","path":"/1.18.x/","sidebar":"tutorialSidebar"},{"id":"/category/champions","path":"/1.18.x/category/champions","sidebar":"tutorialSidebar"},{"id":"/category/mod-integrations","path":"/1.18.x/category/mod-integrations","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/1.18.x/","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"3.0.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.0.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.0.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.0.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.0.1"}}}');var u=n(5893);const c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},d=r.createContext(c);function f(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(6040),s=n(5893);function u(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,s.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,s.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,s.jsx)(c,{error:t})]})}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)(p,{fallback:()=>(0,s.jsx)(u,{error:t,tryAgain:n}),children:[(0,s.jsx)(o.Z,{children:(0,s.jsx)("title",{children:"Page Error"})}),(0,s.jsx)(l.Z,{children:(0,s.jsx)(u,{error:t,tryAgain:n})})]})}const f=e=>(0,s.jsx)(d,{...e});class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(405),a=n(5893);function o(e){return(0,a.jsx)(r.ql,{...e})}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(3727),o=n(8780),i=n(2263),l=n(3919),s=n(412),u=n(5893);const c=r.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:g,isActive:h,"data-noBrokenLinkCheck":m,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,d.C)(),x=(0,r.useContext)(c),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=f||p;const _=(0,l.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(N=C,y&&(e=>e.startsWith("/"))(N)?k(N):N):void 0;var N;T&&_&&(T=(0,o.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const A=(0,r.useRef)(!1),j=n?a.OL:a.rU,L=s.Z.canUseIntersectionObserver,P=(0,r.useRef)(),O=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,r.useEffect)((()=>(!L&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{L&&P.current&&P.current.disconnect()})),[P,T,L,_]);const R=T?.startsWith("#")??!1,I=!T||!_||R;return I||m||x.collectLink(T),I?(0,u.jsx)("a",{ref:S,href:T,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,u.jsx)(j,{...b,onMouseEnter:O,onTouchStart:O,innerRef:e=>{S.current=e,L&&e&&_&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T,...n&&{isActive:h,activeClassName:g}})}const p=r.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u,I:()=>s});var r=n(7294),a=n(5893);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function l(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),l=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:l,children:t})}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>f,_r:()=>c,Jo:()=>m,zh:()=>d,yW:()=>g,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function g(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function m(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(2573),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(3163)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},7955:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(512),a=n(5999),o=n(6668),i=n(9960);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var s=n(5893);function u(e){let{as:t,id:n,...u}=e;const{navbar:{hideOnScroll:c}}=(0,o.L)();if("h1"===t||!n)return(0,s.jsx)(t,{...u,id:void 0});const d=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,s.jsxs)(t,{...u,className:(0,r.Z)("anchor",c?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,s.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d,children:"\u200b"})]})}},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(5893);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},6040:(e,t,n)=>{"use strict";n.d(t,{Z:()=>pt});var r=n(7294),a=n(512),o=n(4763),i=n(1944),l=n(6550),s=n(5999),u=n(5936),c=n(5893);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const g=(0,s.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??g,{containerRef:n,onClick:r}=p();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(5281),y=n(9727);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(h,{className:b.skipToContent})}var w=n(6668),k=n(9689);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function N(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:T.announcementBarPlaceholder}),(0,c.jsx)(C,{className:T.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var A=n(2961),j=n(2466);var L=n(902),P=n(3102);const O=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(O.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(O);if(!e)throw new L.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=F();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(2949),z=n(2389);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,z.Z)(),l=(0,s.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,a.Z)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,M.I)();return r?null:(0,c.jsx)(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var q=n(1327);function G(){return(0,c.jsx)(q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,A.e)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Q(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(G,{}),(0,c.jsx)(W,{className:"margin-right--md"}),(0,c.jsx)(Y,{})]})}var K=n(9960),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.Z)(r),f=(0,X.Z)(t),p=(0,X.Z)(a,{forcePrependBaseUrl:!0}),g=o&&a&&!(0,J.Z)(a),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,g&&(0,c.jsx)(te.Z,{...l&&{width:12,height:12}})]})};return a?(0,c.jsx)(K.Z,{href:s?p:a,...u,...h}):(0,c.jsx)(K.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...u,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(6043),le=n(8596),se=n(2263);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:o,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[u,d,g]),(0,c.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.Z)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),p()},children:s.children??s.label}),(0,c.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,c.jsx)(r,{...n})}var ge=n(4711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const me="iconLanguage_nlXk";var ye=n(1875);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.Z)(n,be.navbarSearchContainer),children:t})}var we=n(143),ke=n(2802);var xe=n(373);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,ge.l)(),{search:p,hash:g}=(0,l.TH)(),h=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],m=t?(0,s.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(pe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(he,{className:me}),m]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.Z,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.Iw)(r),i=(0,ke.vY)(t,r),l=o?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>l||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.Iw)(r),i=(0,ke.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ke.lO)(r)[0],i=t??o.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,l.TH)(),f=(0,we.Iw)(n),p=(0,we.gB)(n),{savePreferredVersionName:g}=(0,xe.J)(n),h=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...o],m=(0,ke.lO)(n)[0],y=t&&h.length>1?(0,s.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,b=t&&h.length>1?void 0:Se(m).path;return h.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(pe,{...i,mobile:t,label:y,to:b,items:h,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ee[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function Ce(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Te(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ne(){const e=0===(0,w.L)().navbar.items.length,t=F();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Te,{onClick:()=>t.hide()}),t.content]})}function Ae(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(D,{header:(0,c.jsx)(Q,{}),primaryMenu:(0,c.jsx)(Ce,{}),secondaryMenu:(0,c.jsx)(Ne,{})}):null}const je={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,A.e)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,j.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[je.navbarHideable,!d&&je.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Le,{onClick:i.toggle}),(0,c.jsx)(Ae,{})]})}var Oe=n(8780);const Re={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ie(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Fe(e){let{error:t}=e;const n=(0,Oe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Re.errorBoundaryError,children:n})}class De extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Me="right";function ze(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,A.e)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(ze,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(De,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(_e,{...e})},t)))})}function Ze(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function He(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Me)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(Ze,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(G,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(W,{className:$e.colorModeToggle}),!a&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.Z,{})})]})})}function Ve(){return(0,c.jsx)(Pe,{children:(0,c.jsx)(He,{})})}function We(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,l=(0,X.Z)(n),s=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(K.Z,{className:"footer__link-item",...r?{href:o?s:r}:{to:l},...i,children:[a,r&&!(0,J.Z)(r)&&(0,c.jsx)(te.Z,{})]})}function qe(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(We,{item:t})},t.href??t.to)}function Ge(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(qe,{item:e},t)))})]})}function Ye(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Ge,{column:e},t)))})}function Qe(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ke(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(We,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ke,{item:e}),t.length!==n+1&&(0,c.jsx)(Qe,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Ye,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(9965);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(K.Z,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function at(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function it(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(ot,{style:a,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(at,{copyright:t})})}const lt=r.memo(it),st=(0,L.Qc)([M.S,k.pl,j.OC,xe.L5,i.VC,function(e){let{children:t}=e;return(0,c.jsx)(P.n2,{children:(0,c.jsx)(A.M,{children:(0,c.jsx)(R,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(7955);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.Z,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(Ie,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Fe,{error:t})})]})})})}const ft={mainWrapper:"mainWrapper_z2l0"};function pt(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.t)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.d,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(N,{}),(0,c.jsx)(Ve,{}),(0,c.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,ft.mainWrapper,r),children:(0,c.jsx)(o.Z,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(9960),a=n(4996),o=n(2263),i=n(6668),l=n(9965),s=n(5893);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},i=(0,s.jsx)(l.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.Z)(),{navbar:{title:n,logo:l}}=(0,i.L)(),{imageClassName:c,titleClassName:d,...f}=e,p=(0,a.Z)(l?.href||"/"),g=n?"":t,h=l?.alt??g;return(0,s.jsxs)(r.Z,{to:p,...f,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:h,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(5742),a=n(5893);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},9965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),a=n(512),o=n(2389),i=n(2949);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(5893);function u(e){let{className:t,children:n}=e;const u=(0,o.Z)(),{colorMode:c}=(0,i.I)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>u,z:()=>y});var r=n(7294),a=n(412),o=n(469),i=n(1442),l=n(5893);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!a.Z.canUseDOM)return e?c:d}function h(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),(0,l.jsx)(t,{ref:c,style:u?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(c.current,n),i?.(n))},className:s,children:a})}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,o.Z)((()=>{t||i(!0)}),[t]),(0,o.Z)((()=>{a&&u(t)}),[a,t]),a?(0,l.jsx)(h,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?m:h;return(0,l.jsx)(r,{...n})}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>g});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668),s=n(5893);const u=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===u.get(),f=e=>u.set(String(e)),p=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(p.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>y,S:()=>m});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668),s=n(5893);const u=r.createContext(void 0),c="theme",d=(0,i.WA)(c),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,g=e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),h=e=>{d.set(p(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&h(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>y});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(2802),s=n(902),u=n(12),c=n(5893);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,u.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function h(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return(0,c.jsx)(g.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.cE?(0,c.jsx)(m,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function b(){const e=(0,r.useContext)(g);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>u,b:()=>s});var r=n(7294),a=n(902),o=n(5893);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>l});var r=n(7294),a=n(902),o=n(5893);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>g});var r=n(7294),a=n(3102),o=n(7524),i=n(6550),l=n(902);function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668),c=n(5893);const d=r.createContext(void 0);function f(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=f();return(0,c.jsx)(d.Provider,{value:n,children:t})}function g(){const e=r.useContext(d);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>u,n2:()=>l});var r=n(7294),a=n(902),o=n(5893);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=o,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){const[e,t]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){t(function(){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>i?o.desktop:o.mobile}())}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>T,LM:()=>g,_F:()=>b,cE:()=>f,jA:()=>h,xz:()=>p,SN:()=>C,lO:()=>S,vY:()=>_,oz:()=>E,s1:()=>x,f:()=>w});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(4477),u=n(1116);function c(e){return Array.from(new Set(e))}var d=n(8596);const f=!!i._r;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function g(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=g(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,a.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const m=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),y=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function x(){const e=(0,u.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>c([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,s.E)(),i=t.routes,l=i.find((e=>(0,a.LX)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.H)(i),sidebarName:u,sidebarItems:c}}function T(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!g(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>g});var r=n(7294),a=n(512),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);var c=n(5893);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.Z,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,c.jsx)("meta",{property:"og:image",content:f}),f&&(0,c.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),l=(0,a.Z)(i,t);return(0,c.jsxs)(f.Provider,{value:l,children:[(0,c.jsx)(o.Z,{children:(0,c.jsx)("html",{className:l})}),n]})}function g(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,a.Z)(r,o),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>l,Qc:()=>c,Ql:()=>u,i6:()=>s,zX:()=>i});var r=n(7294),a=n(469),o=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>u,RF:()=>f});var r=n(7294),a=n(412),o=n(2389),i=(n(469),n(902)),l=n(5893);const s=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(d()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),a=n(6550),o=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,a.TH)(),u=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>N,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,h(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=p(n);a&&a!==g&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),m=0;m{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},4779:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var g=e[i],h=n[2],m=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=h&&null!=g&&g!==h,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,_=y||b;r.push({name:m||o++,prefix:h||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?u(_):w?".*":"[^"+s(E)+"]+?"})}}return i{!function(e){var t={pattern:/((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}};e.languages.gradle=e.languages.extend("clike",{string:{pattern:/'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,greedy:!0},keyword:/\b(?:apply|def|dependencies|else|if|implementation|import|plugin|plugins|project|repositories|repository|sourceSets|tasks|val)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),e.languages.insertBefore("gradle","string",{shebang:{pattern:/#!.+/,alias:"comment",greedy:!0},"interpolation-string":{pattern:/"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}}}),e.languages.insertBefore("gradle","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),e.languages.insertBefore("gradle","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),t.inside.expression.inside=e.languages.gradle}(Prism)},2503:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},4277:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),g=f.indexOf(p);if(g>-1){++a;var h=f.substring(0,g),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(g+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(m),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},9930:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},3163:(e,t,n)=>{var r={"./prism-gradle":1565,"./prism-java":2503,"./prism-json":4277,"./prism-toml":9930};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=3163},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(3840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n