[{"data":1,"prerenderedAt":888},["ShallowReactive",2],{"navigation":3,"reference-navigation":62,"\u002Fdocs\u002Fmaking-resource-packs":365,"\u002Fdocs\u002Fmaking-resource-packs-surround":883},[4,22,26,30,34,38,42,46,50,54,58],{"title":5,"path":6,"stem":7,"children":8},"Bundle Developer","\u002Fdocs\u002Fbundle-developer","1.docs\u002F1.bundle-developer\u002Findex",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Terminology","\u002Fdocs\u002Fbundle-developer\u002Fterminology","1.docs\u002F1.bundle-developer\u002F1.terminology",{"title":15,"path":16,"stem":17},"Prerequisites","\u002Fdocs\u002Fbundle-developer\u002Fprerequisites","1.docs\u002F1.bundle-developer\u002F2.prerequisites",{"title":19,"path":20,"stem":21},"Bundle Layout","\u002Fdocs\u002Fbundle-developer\u002Flayout","1.docs\u002F1.bundle-developer\u002F3.layout",{"title":23,"path":24,"stem":25},"Custom Registry Developer Guide","\u002Fdocs\u002Fcustom-registries","1.docs\u002Fcustom-registries",{"title":27,"path":28,"stem":29},"Defining Bundle Entities","\u002Fdocs\u002Fdefining-bundle-entities","1.docs\u002Fdefining-bundle-entities",{"title":31,"path":32,"stem":33},"Defining Bundle Sounds","\u002Fdocs\u002Fdefining-bundle-sounds","1.docs\u002Fdefining-bundle-sounds",{"title":35,"path":36,"stem":37},"Defining Bundle Tile Transitions","\u002Fdocs\u002Fdefining-bundle-tile-transitions","1.docs\u002Fdefining-bundle-tile-transitions",{"title":39,"path":40,"stem":41},"Defining Bundle Tiles","\u002Fdocs\u002Fdefining-bundle-tiles","1.docs\u002Fdefining-bundle-tiles",{"title":43,"path":44,"stem":45},"Defining Bundle Visuals","\u002Fdocs\u002Fdefining-bundle-visuals","1.docs\u002Fdefining-bundle-visuals",{"title":47,"path":48,"stem":49},"Bundle Event System Developer Guide","\u002Fdocs\u002Fevent-system","1.docs\u002Fevent-system",{"title":51,"path":52,"stem":53},"Getting Started with Selene Bundles","\u002Fdocs\u002Fgetting-started-bundles","1.docs\u002Fgetting-started-bundles",{"title":55,"path":56,"stem":57},"Making Resource Packs","\u002Fdocs\u002Fmaking-resource-packs","1.docs\u002Fmaking-resource-packs",{"title":59,"path":60,"stem":61},"Bundle Network API Developer Guide","\u002Fdocs\u002Fnetwork-apis","1.docs\u002Fnetwork-apis",[63,212,253],{"title":64,"path":65,"stem":66,"children":67,"page":121},"Modules","\u002Freference\u002Fmodules","2.reference\u002F1.modules",[68,122,167],{"title":69,"path":70,"stem":71,"children":72,"page":121},"Common","\u002Freference\u002Fmodules\u002Fcommon","2.reference\u002F1.modules\u002F1.common",[73,77,81,85,89,93,97,101,105,109,113,117],{"title":74,"path":75,"stem":76},"debug","\u002Freference\u002Fmodules\u002Fcommon\u002Fdebug","2.reference\u002F1.modules\u002F1.common\u002Fdebug",{"title":78,"path":79,"stem":80},"mathx","\u002Freference\u002Fmodules\u002Fcommon\u002Fmathx","2.reference\u002F1.modules\u002F1.common\u002Fmathx",{"title":82,"path":83,"stem":84},"os","\u002Freference\u002Fmodules\u002Fcommon\u002Fos","2.reference\u002F1.modules\u002F1.common\u002Fos",{"title":86,"path":87,"stem":88},"package","\u002Freference\u002Fmodules\u002Fcommon\u002Fpackage","2.reference\u002F1.modules\u002F1.common\u002Fpackage",{"title":90,"path":91,"stem":92},"selene.grid","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.grid","2.reference\u002F1.modules\u002F1.common\u002Fselene.grid",{"title":94,"path":95,"stem":96},"selene.http","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.http","2.reference\u002F1.modules\u002F1.common\u002Fselene.http",{"title":98,"path":99,"stem":100},"selene.i18n","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.i18n","2.reference\u002F1.modules\u002F1.common\u002Fselene.i18n",{"title":102,"path":103,"stem":104},"selene.registries","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.registries","2.reference\u002F1.modules\u002F1.common\u002Fselene.registries",{"title":106,"path":107,"stem":108},"selene.resources","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.resources","2.reference\u002F1.modules\u002F1.common\u002Fselene.resources",{"title":110,"path":111,"stem":112},"selene.schedules","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.schedules","2.reference\u002F1.modules\u002F1.common\u002Fselene.schedules",{"title":114,"path":115,"stem":116},"stringx","\u002Freference\u002Fmodules\u002Fcommon\u002Fstringx","2.reference\u002F1.modules\u002F1.common\u002Fstringx",{"title":118,"path":119,"stem":120},"tablex","\u002Freference\u002Fmodules\u002Fcommon\u002Ftablex","2.reference\u002F1.modules\u002F1.common\u002Ftablex",false,{"title":123,"path":124,"stem":125,"children":126,"page":121},"Server","\u002Freference\u002Fmodules\u002Fserver","2.reference\u002F1.modules\u002F2.server",[127,131,135,139,143,147,151,155,159,163],{"title":128,"path":129,"stem":130},"selene.attributes","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.attributes","2.reference\u002F1.modules\u002F2.server\u002Fselene.attributes",{"title":132,"path":133,"stem":134},"selene.config","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.config","2.reference\u002F1.modules\u002F2.server\u002Fselene.config",{"title":136,"path":137,"stem":138},"selene.dimensions","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.dimensions","2.reference\u002F1.modules\u002F2.server\u002Fselene.dimensions",{"title":140,"path":141,"stem":142},"selene.entities","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.entities","2.reference\u002F1.modules\u002F2.server\u002Fselene.entities",{"title":144,"path":145,"stem":146},"selene.map","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.map","2.reference\u002F1.modules\u002F2.server\u002Fselene.map",{"title":148,"path":149,"stem":150},"selene.network","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.network","2.reference\u002F1.modules\u002F2.server\u002Fselene.network",{"title":152,"path":153,"stem":154},"selene.players","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.players","2.reference\u002F1.modules\u002F2.server\u002Fselene.players",{"title":156,"path":157,"stem":158},"selene.saves","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.saves","2.reference\u002F1.modules\u002F2.server\u002Fselene.saves",{"title":160,"path":161,"stem":162},"selene.server","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.server","2.reference\u002F1.modules\u002F2.server\u002Fselene.server",{"title":164,"path":165,"stem":166},"selene.sounds","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.sounds","2.reference\u002F1.modules\u002F2.server\u002Fselene.sounds",{"title":168,"path":169,"stem":170,"children":171,"page":121},"Client","\u002Freference\u002Fmodules\u002Fclient","2.reference\u002F1.modules\u002F3.client",[172,176,179,183,187,190,194,197,200,204,208],{"title":173,"path":174,"stem":175},"selene.camera","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.camera","2.reference\u002F1.modules\u002F3.client\u002Fselene.camera",{"title":140,"path":177,"stem":178},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.entities","2.reference\u002F1.modules\u002F3.client\u002Fselene.entities",{"title":180,"path":181,"stem":182},"selene.game","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.game","2.reference\u002F1.modules\u002F3.client\u002Fselene.game",{"title":184,"path":185,"stem":186},"selene.input","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.input","2.reference\u002F1.modules\u002F3.client\u002Fselene.input",{"title":144,"path":188,"stem":189},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.map","2.reference\u002F1.modules\u002F3.client\u002Fselene.map",{"title":191,"path":192,"stem":193},"selene.movement.grid","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.movement.grid","2.reference\u002F1.modules\u002F3.client\u002Fselene.movement.grid",{"title":148,"path":195,"stem":196},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.network","2.reference\u002F1.modules\u002F3.client\u002Fselene.network",{"title":164,"path":198,"stem":199},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.sounds","2.reference\u002F1.modules\u002F3.client\u002Fselene.sounds",{"title":201,"path":202,"stem":203},"selene.textures","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.textures","2.reference\u002F1.modules\u002F3.client\u002Fselene.textures",{"title":205,"path":206,"stem":207},"selene.ui.lml","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.ui.lml","2.reference\u002F1.modules\u002F3.client\u002Fselene.ui.lml",{"title":209,"path":210,"stem":211},"selene.visuals","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.visuals","2.reference\u002F1.modules\u002F3.client\u002Fselene.visuals",{"title":213,"path":214,"stem":215,"children":216,"page":121},"Data","\u002Freference\u002Fdata","2.reference\u002F2.data",[217,241],{"title":69,"path":218,"stem":219,"children":220,"page":121},"\u002Freference\u002Fdata\u002Fcommon","2.reference\u002F2.data\u002F1.common",[221,225,229,233,237],{"title":222,"path":223,"stem":224},"Component Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fcomponentdefinition","2.reference\u002F2.data\u002F1.common\u002FComponentDefinition",{"title":226,"path":227,"stem":228},"Entity Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fentitydefinition","2.reference\u002F2.data\u002F1.common\u002FEntityDefinition",{"title":230,"path":231,"stem":232},"Sound Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fsounddefinition","2.reference\u002F2.data\u002F1.common\u002FSoundDefinition",{"title":234,"path":235,"stem":236},"Tile Definition","\u002Freference\u002Fdata\u002Fcommon\u002Ftiledefinition","2.reference\u002F2.data\u002F1.common\u002FTileDefinition",{"title":238,"path":239,"stem":240},"Transition Definition","\u002Freference\u002Fdata\u002Fcommon\u002Ftransitiondefinition","2.reference\u002F2.data\u002F1.common\u002FTransitionDefinition",{"title":168,"path":242,"stem":243,"children":244,"page":121},"\u002Freference\u002Fdata\u002Fclient","2.reference\u002F2.data\u002F3.client",[245,249],{"title":246,"path":247,"stem":248},"Audio Definition","\u002Freference\u002Fdata\u002Fclient\u002Faudiodefinition","2.reference\u002F2.data\u002F3.client\u002FAudioDefinition",{"title":250,"path":251,"stem":252},"Visual Definition","\u002Freference\u002Fdata\u002Fclient\u002Fvisualdefinition","2.reference\u002F2.data\u002F3.client\u002FVisualDefinition",{"title":254,"path":255,"stem":256,"children":257,"page":121},"Classes","\u002Freference\u002Fclasses","2.reference\u002F3.classes",[258,286,318],{"title":69,"path":259,"stem":260,"children":261,"page":121},"\u002Freference\u002Fclasses\u002Fcommon","2.reference\u002F3.classes\u002F1.common",[262,266,270,274,278,282],{"title":263,"path":264,"stem":265},"Coordinate","\u002Freference\u002Fclasses\u002Fcommon\u002Fcoordinate","2.reference\u002F3.classes\u002F1.common\u002FCoordinate",{"title":267,"path":268,"stem":269},"CustomRegistryObject","\u002Freference\u002Fclasses\u002Fcommon\u002Fcustomregistryobject","2.reference\u002F3.classes\u002F1.common\u002FCustomRegistryObject",{"title":271,"path":272,"stem":273},"LuaReference","\u002Freference\u002Fclasses\u002Fcommon\u002Fluareference","2.reference\u002F3.classes\u002F1.common\u002FLuaReference",{"title":275,"path":276,"stem":277},"Observable","\u002Freference\u002Fclasses\u002Fcommon\u002Fobservable","2.reference\u002F3.classes\u002F1.common\u002FObservable",{"title":279,"path":280,"stem":281},"RegistryObject","\u002Freference\u002Fclasses\u002Fcommon\u002Fregistryobject","2.reference\u002F3.classes\u002F1.common\u002FRegistryObject",{"title":283,"path":284,"stem":285},"Signal","\u002Freference\u002Fclasses\u002Fcommon\u002Fsignal","2.reference\u002F3.classes\u002F1.common\u002FSignal",{"title":123,"path":287,"stem":288,"children":289,"page":121},"\u002Freference\u002Fclasses\u002Fserver","2.reference\u002F3.classes\u002F2.server",[290,294,298,302,306,310,314],{"title":291,"path":292,"stem":293},"Dimension","\u002Freference\u002Fclasses\u002Fserver\u002Fdimension","2.reference\u002F3.classes\u002F2.server\u002FDimension",{"title":295,"path":296,"stem":297},"Entity","\u002Freference\u002Fclasses\u002Fserver\u002Fentity","2.reference\u002F3.classes\u002F2.server\u002FEntity",{"title":299,"path":300,"stem":301},"LoginQueueEntry","\u002Freference\u002Fclasses\u002Fserver\u002Floginqueueentry","2.reference\u002F3.classes\u002F2.server\u002FLoginQueueEntry",{"title":303,"path":304,"stem":305},"MapTree","\u002Freference\u002Fclasses\u002Fserver\u002Fmaptree","2.reference\u002F3.classes\u002F2.server\u002FMapTree",{"title":307,"path":308,"stem":309},"Player","\u002Freference\u002Fclasses\u002Fserver\u002Fplayer","2.reference\u002F3.classes\u002F2.server\u002FPlayer",{"title":311,"path":312,"stem":313},"ScopedChunkView","\u002Freference\u002Fclasses\u002Fserver\u002Fscopedchunkview","2.reference\u002F3.classes\u002F2.server\u002FScopedChunkView",{"title":315,"path":316,"stem":317},"TransientTile","\u002Freference\u002Fclasses\u002Fserver\u002Ftransienttile","2.reference\u002F3.classes\u002F2.server\u002FTransientTile",{"title":168,"path":319,"stem":320,"children":321,"page":121},"\u002Freference\u002Fclasses\u002Fclient","2.reference\u002F3.classes\u002F3.client",[322,326,330,334,337,341,345,349,353,357,361],{"title":323,"path":324,"stem":325},"Actor","\u002Freference\u002Fclasses\u002Fclient\u002Factor","2.reference\u002F3.classes\u002F3.client\u002FActor",{"title":327,"path":328,"stem":329},"Drawable","\u002Freference\u002Fclasses\u002Fclient\u002Fdrawable","2.reference\u002F3.classes\u002F3.client\u002FDrawable",{"title":331,"path":332,"stem":333},"DrawableVisual2D","\u002Freference\u002Fclasses\u002Fclient\u002Fdrawablevisual2d","2.reference\u002F3.classes\u002F3.client\u002FDrawableVisual2D",{"title":295,"path":335,"stem":336},"\u002Freference\u002Fclasses\u002Fclient\u002Fentity","2.reference\u002F3.classes\u002F3.client\u002FEntity",{"title":338,"path":339,"stem":340},"IsoVisualComponent","\u002Freference\u002Fclasses\u002Fclient\u002Fisovisualcomponent","2.reference\u002F3.classes\u002F3.client\u002FIsoVisualComponent",{"title":342,"path":343,"stem":344},"LuaTexture","\u002Freference\u002Fclasses\u002Fclient\u002Fluatexture","2.reference\u002F3.classes\u002F3.client\u002FLuaTexture",{"title":346,"path":347,"stem":348},"Skin","\u002Freference\u002Fclasses\u002Fclient\u002Fskin","2.reference\u002F3.classes\u002F3.client\u002FSkin",{"title":350,"path":351,"stem":352},"TextFieldTextFieldClickListener","\u002Freference\u002Fclasses\u002Fclient\u002Ftextfield.textfieldclicklistener","2.reference\u002F3.classes\u002F3.client\u002FTextField.TextFieldClickListener",{"title":354,"path":355,"stem":356},"Tile","\u002Freference\u002Fclasses\u002Fclient\u002Ftile","2.reference\u002F3.classes\u002F3.client\u002FTile",{"title":358,"path":359,"stem":360},"Visual2D","\u002Freference\u002Fclasses\u002Fclient\u002Fvisual2d","2.reference\u002F3.classes\u002F3.client\u002FVisual2D",{"title":362,"path":363,"stem":364},"Visual2DComponent","\u002Freference\u002Fclasses\u002Fclient\u002Fvisual2dcomponent","2.reference\u002F3.classes\u002F3.client\u002FVisual2DComponent",{"id":366,"title":55,"body":367,"description":877,"extension":878,"meta":879,"navigation":880,"path":56,"seo":881,"stem":57,"__hash__":882},"docs\u002F1.docs\u002Fmaking-resource-packs.md",{"type":368,"value":369,"toc":864},"minimark",[370,374,383,386,412,415,420,423,433,436,554,557,560,568,572,578,584,587,591,601,636,640,643,649,652,658,661,665,668,674,677,759,762,766,769,775,780,783,789,793,796,802,806,821,824,828,860],[371,372,55],"h1",{"id":373},"making-resource-packs",[375,376,377,378,382],"p",{},"Selene supports client-side overrides through the ",[379,380,381],"code",{},"global_client_bundles"," folder. Any bundle placed there is always loaded and can replace existing client assets or JSON definitions by using the same internal file path as the original.",[375,384,385],{},"You can override:",[387,388,389,397,403,409],"ul",{},[390,391,392,393,396],"li",{},"Textures (",[379,394,395],{},".png",")",[390,398,399,400,396],{},"Sounds (",[379,401,402],{},".ogg",[390,404,405,406,396],{},"Visual definitions (",[379,407,408],{},".json",[390,410,411],{},"Animations and grid settings",[375,413,414],{},"This also makes larger visual conversions possible, such as different isometric perspectives or higher-resolution assets.",[416,417,419],"h2",{"id":418},"how-overrides-work","How overrides work",[375,421,422],{},"Client bundles typically contain files such as:",[424,425,431],"pre",{"className":426,"code":428,"language":429,"meta":430},[427],"language-text","client\u002Fdata\u002Fvisuals.json\nclient\u002Ftextures\u002F...\n","text","",[379,432,428],{"__ignoreMap":430},[375,434,435],{},"For example, a visual definition may reference a texture like this:",[424,437,441],{"className":438,"code":439,"language":440,"meta":430,"style":430},"language-json shiki shiki-themes github-light github-dark","{\n  \"entries\": {\n    \"thirdparty:tile_cursor\": {\n      \"type\": \"simple\",\n      \"texture\": \"client\u002Ftextures\u002Fthirdparty\u002Fui\u002Fselect_map.png\",\n      \"offsetX\": 0,\n      \"offsetY\": -22,\n      \"sortLayerOffset\": 300\n    }\n  }\n}\n","json",[379,442,443,452,462,470,486,499,512,525,536,542,548],{"__ignoreMap":430},[444,445,448],"span",{"class":446,"line":447},"line",1,[444,449,451],{"class":450},"sVt8B","{\n",[444,453,455,459],{"class":446,"line":454},2,[444,456,458],{"class":457},"sj4cs","  \"entries\"",[444,460,461],{"class":450},": {\n",[444,463,465,468],{"class":446,"line":464},3,[444,466,467],{"class":457},"    \"thirdparty:tile_cursor\"",[444,469,461],{"class":450},[444,471,473,476,479,483],{"class":446,"line":472},4,[444,474,475],{"class":457},"      \"type\"",[444,477,478],{"class":450},": ",[444,480,482],{"class":481},"sZZnC","\"simple\"",[444,484,485],{"class":450},",\n",[444,487,489,492,494,497],{"class":446,"line":488},5,[444,490,491],{"class":457},"      \"texture\"",[444,493,478],{"class":450},[444,495,496],{"class":481},"\"client\u002Ftextures\u002Fthirdparty\u002Fui\u002Fselect_map.png\"",[444,498,485],{"class":450},[444,500,502,505,507,510],{"class":446,"line":501},6,[444,503,504],{"class":457},"      \"offsetX\"",[444,506,478],{"class":450},[444,508,509],{"class":457},"0",[444,511,485],{"class":450},[444,513,515,518,520,523],{"class":446,"line":514},7,[444,516,517],{"class":457},"      \"offsetY\"",[444,519,478],{"class":450},[444,521,522],{"class":457},"-22",[444,524,485],{"class":450},[444,526,528,531,533],{"class":446,"line":527},8,[444,529,530],{"class":457},"      \"sortLayerOffset\"",[444,532,478],{"class":450},[444,534,535],{"class":457},"300\n",[444,537,539],{"class":446,"line":538},9,[444,540,541],{"class":450},"    }\n",[444,543,545],{"class":446,"line":544},10,[444,546,547],{"class":450},"  }\n",[444,549,551],{"class":446,"line":550},11,[444,552,553],{"class":450},"}\n",[375,555,556],{},"To override it, place a replacement file in your own bundle using the exact same relative path.",[375,558,559],{},"You can replace either:",[387,561,562,565],{},[390,563,564],{},"The texture file itself",[390,566,567],{},"The JSON definition that references it",[416,569,571],{"id":570},"folder-structure","Folder structure",[375,573,574,575,577],{},"Place resource packs inside ",[379,576,381],{},":",[424,579,582],{"className":580,"code":581,"language":429,"meta":430},[427],"global_client_bundles\u002F\n  my-resource-pack\u002F\n    bundle.json\n    client\u002F\n      data\u002F\n      textures\u002F\n",[379,583,581],{"__ignoreMap":430},[375,585,586],{},"These bundles are local and client-only, making them ideal for visual customization.",[416,588,590],{"id":589},"minimal-bundle","Minimal bundle",[375,592,593,594,597,598,577],{},"Create a folder such as ",[379,595,596],{},"global_client_bundles\u002Fmy-resource-pack\u002F"," and add a ",[379,599,600],{},"bundle.json",[424,602,604],{"className":438,"code":603,"language":440,"meta":430,"style":430},"{\n  \"name\": \"my-resource-pack\",\n  \"description\": \"Local visual overrides.\"\n}\n",[379,605,606,610,622,632],{"__ignoreMap":430},[444,607,608],{"class":446,"line":447},[444,609,451],{"class":450},[444,611,612,615,617,620],{"class":446,"line":454},[444,613,614],{"class":457},"  \"name\"",[444,616,478],{"class":450},[444,618,619],{"class":481},"\"my-resource-pack\"",[444,621,485],{"class":450},[444,623,624,627,629],{"class":446,"line":464},[444,625,626],{"class":457},"  \"description\"",[444,628,478],{"class":450},[444,630,631],{"class":481},"\"Local visual overrides.\"\n",[444,633,634],{"class":446,"line":472},[444,635,553],{"class":450},[416,637,639],{"id":638},"replacing-textures","Replacing textures",[375,641,642],{},"If the original bundle contains:",[424,644,647],{"className":645,"code":646,"language":429,"meta":430},[427],"client\u002Ftextures\u002Fthirdparty\u002Fui\u002Fgui_chat.png\n",[379,648,646],{"__ignoreMap":430},[375,650,651],{},"then place your replacement texture at:",[424,653,656],{"className":654,"code":655,"language":429,"meta":430},[427],"global_client_bundles\u002F\n  my-resource-pack\u002F\n    client\u002F\n      textures\u002F\n        thirdparty\u002F\n          ui\u002F\n            gui_chat.png\n",[379,657,655],{"__ignoreMap":430},[375,659,660],{},"Because the path matches, Selene will load your version instead.",[416,662,664],{"id":663},"replacing-visual-definitions","Replacing visual definitions",[375,666,667],{},"You can also override JSON definitions by mirroring their path:",[424,669,672],{"className":670,"code":671,"language":429,"meta":430},[427],"global_client_bundles\u002F\n  my-resource-pack\u002F\n    client\u002F\n      data\u002F\n        thirdparty\u002F\n          visuals\u002F\n            example.json\n",[379,673,671],{"__ignoreMap":430},[375,675,676],{},"Example override:",[424,678,680],{"className":438,"code":679,"language":440,"meta":430,"style":430},"{\n  \"entries\": {\n    \"thirdparty:tile_cursor\": {\n      \"type\": \"simple\",\n      \"texture\": \"client\u002Ftextures\u002Fthirdparty\u002Fui\u002Fmy_select_map.png\",\n      \"offsetX\": 0,\n      \"offsetY\": -22,\n      \"sortLayerOffset\": 300\n    }\n  }\n}\n",[379,681,682,686,692,698,708,719,729,739,747,751,755],{"__ignoreMap":430},[444,683,684],{"class":446,"line":447},[444,685,451],{"class":450},[444,687,688,690],{"class":446,"line":454},[444,689,458],{"class":457},[444,691,461],{"class":450},[444,693,694,696],{"class":446,"line":464},[444,695,467],{"class":457},[444,697,461],{"class":450},[444,699,700,702,704,706],{"class":446,"line":472},[444,701,475],{"class":457},[444,703,478],{"class":450},[444,705,482],{"class":481},[444,707,485],{"class":450},[444,709,710,712,714,717],{"class":446,"line":488},[444,711,491],{"class":457},[444,713,478],{"class":450},[444,715,716],{"class":481},"\"client\u002Ftextures\u002Fthirdparty\u002Fui\u002Fmy_select_map.png\"",[444,718,485],{"class":450},[444,720,721,723,725,727],{"class":446,"line":501},[444,722,504],{"class":457},[444,724,478],{"class":450},[444,726,509],{"class":457},[444,728,485],{"class":450},[444,730,731,733,735,737],{"class":446,"line":514},[444,732,517],{"class":457},[444,734,478],{"class":450},[444,736,522],{"class":457},[444,738,485],{"class":450},[444,740,741,743,745],{"class":446,"line":527},[444,742,530],{"class":457},[444,744,478],{"class":450},[444,746,535],{"class":457},[444,748,749],{"class":446,"line":538},[444,750,541],{"class":450},[444,752,753],{"class":446,"line":544},[444,754,547],{"class":450},[444,756,757],{"class":446,"line":550},[444,758,553],{"class":450},[375,760,761],{},"This is useful when you need to change animations, offsets, or reference entirely new assets.",[416,763,765],{"id":764},"example-cursor-replacement","Example: cursor replacement",[375,767,768],{},"Suppose the original bundle contains:",[424,770,773],{"className":771,"code":772,"language":429,"meta":430},[427],"client\u002Fdata\u002Fvisuals.json\nclient\u002Ftextures\u002Fthirdparty\u002Fui\u002Fselect_map.png\n",[379,774,772],{"__ignoreMap":430},[776,777,779],"h3",{"id":778},"replace-only-the-texture","Replace only the texture",[375,781,782],{},"Use the existing JSON and swap the image:",[424,784,787],{"className":785,"code":786,"language":429,"meta":430},[427],"global_client_bundles\u002F\n  my-resource-pack\u002F\n    client\u002F\n      textures\u002F\n        thirdparty\u002F\n          ui\u002F\n            select_map.png\n",[379,788,786],{"__ignoreMap":430},[776,790,792],{"id":791},"replace-the-json-definition","Replace the JSON definition",[375,794,795],{},"Override the visual definition and point it to a custom texture:",[424,797,800],{"className":798,"code":799,"language":429,"meta":430},[427],"global_client_bundles\u002F\n  my-resource-pack\u002F\n    client\u002F\n      data\u002F\n        visuals.json\n      textures\u002F\n        thirdparty\u002F\n          ui\u002F\n            my_select_map.png\n",[379,801,799],{"__ignoreMap":430},[416,803,805],{"id":804},"recommended-workflow","Recommended workflow",[807,808,809,812,815,818],"ol",{},[390,810,811],{},"Find the original file inside an existing bundle.",[390,813,814],{},"Recreate the same path inside your resource pack.",[390,816,817],{},"Add your replacement file.",[390,819,820],{},"Launch Selene and verify the changes in-game.",[375,822,823],{},"When troubleshooting, compare your bundle structure directly against the original.",[416,825,827],{"id":826},"tips","Tips",[387,829,830,833,836,839,842,849],{},[390,831,832],{},"Keep resource packs client-only unless shared data is required.",[390,834,835],{},"Override one file at a time while testing.",[390,837,838],{},"Preserve folder structure and filenames exactly.",[390,840,841],{},"Replacing only the texture is usually simpler than overriding JSON.",[390,843,844,845,848],{},"You can reload all bundles by pressing ",[379,846,847],{},"F5"," to see your changes instantly.",[390,850,851,852,855,856,859],{},"You can set ",[379,853,854],{},"hotReload=true"," in ",[379,857,858],{},"client.properties"," to have bundle files automatically reload.",[861,862,863],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":430,"searchDepth":454,"depth":454,"links":865},[866,867,868,869,870,871,875,876],{"id":418,"depth":454,"text":419},{"id":570,"depth":454,"text":571},{"id":589,"depth":454,"text":590},{"id":638,"depth":454,"text":639},{"id":663,"depth":454,"text":664},{"id":764,"depth":454,"text":765,"children":872},[873,874],{"id":778,"depth":464,"text":779},{"id":791,"depth":464,"text":792},{"id":804,"depth":454,"text":805},{"id":826,"depth":454,"text":827},"Learn how to create client-side resource packs by overriding assets and visual definitions through bundles.","md",{},true,{"title":55,"description":877},"xbu5VePRDWSNU_7XSTk3598D0IuvCGWA6UsvAh0wljk",[884,886],{"title":51,"path":52,"stem":53,"description":885,"children":-1},"Learn how to create, structure, and package bundles for the Selene engine using the example bundles in this repository.",{"title":59,"path":60,"stem":61,"description":887,"children":-1},"Send custom payloads between Selene client and server bundle scripts with selene.network.",1792747966454]