{"owner":"godotengine","repo":"godot-demo-projects","hasSkills":true,"totalSkillsCount":6,"totalTokensCount":2779,"categories":["plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["plugins/addons/custom_node/README.md","plugins/README.md","plugins/addons/README.md","plugins/addons/main_screen/README.md","plugins/addons/simple_import_plugin/README.md","plugins/addons/material_creator/README.md"],"skills":{"plugins/addons/custom_node/README.md":"# Custom Node Plugin Demo\n\nThis plugin demo shows one way to create a custom node type in Godot.\nFor more information, see this documentation article: https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-node\n\nA custom node type:\n\n* Derives from an existing node type.\n\n* Shows up in the type list when adding a new node.\n\n* Has a script attached to add new behavior.\n\n* May have a custom icon.\n\nThe way it works in this plugin is using the `add_custom_type` and `remove_custom_type` in the plugin script file.\nUsing this method you can specify any name, base type, script, and icon for your custom node.\n\nThere is also another way to add custom node types, which is using the `class_name` keyword in a script,\nor [using the `[GlobalClass]` attribute above a class declaration in C#](https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_global_classes.html).\n","plugins/README.md":"# Plugin Demos\n\nThis contains multiple plugin demos, all placed in a project for convenience.\n\nSee the [documentation on editor plugins](https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html)\nfor more information.\n\nLanguage: GDScript\n\nRenderer: Compatibility\n\nCheck out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/plugin-demo/\n\n# How does it work?\n\nThis project contains 4 plugins:\n\n- The custom node plugin shows how to create a custom node type\n  using `add_custom_type`. [More info](addons/custom_node).\n\n- The main screen plugin is a minimal example of how to create a plugin\n  with a main screen. [More info](addons/main_screen).\n\n- The material creator plugin shows how to add a custom dock with some\n  simple functionality, and shows how to create a custom Resource type\n  with custom loading, saving, importing, and exporting logic,\n  including editor integrations. [More info](addons/material_creator).\n\n- The simple import plugin shows how to make a simple plugin handle importing\n  a custom file type (`*.mtxt`). [More info](addons/simple_import_plugin).\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project, and then\nenable them in the project settings menu.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n\n## Screenshots\n\n![Heart Custom Node](screenshots/heart_custom_node.webp)\n\n![Main Screen Plugin](screenshots/main_screen_plugin.webp)\n\n![Material Creator Plugin](screenshots/material_creator_plugin_applied.webp)\n\n![Simple Import Plugin](screenshots/simple_import_plugin.webp)\n","plugins/addons/README.md":"# How to use\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n","plugins/addons/main_screen/README.md":"# Main Screen Plugin Demo\n\nThis plugin demo shows how to make a main screen plugin.\nThe main screen appears as a button next to the \"2D\", \"3D\", \"Script\", and\n\"AssetLib\" buttons. It also shows up when a Node it `handles` is selected.\n\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_main_screen_plugins.html\n\nIf you would like to see a more complete example of what main screen plugins\nare capable of, check out the [2.5D demo project](../../../misc/2.5d).\n","plugins/addons/simple_import_plugin/README.md":"# Material Import Plugin Demo\n\nThis plugin demo shows how a custom import system can\nbe added to the editor. In this case, it imports a material.\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html\n\nIn the editor, try opening `test.mtxt`. Godot will recognize\nit and import it as a material because of this plugin.\n","plugins/addons/material_creator/README.md":"# Material Creator Plugin Demo\n\nThis plugin demo demonstrates these things:\n\n- How to create a custom dock in the Godot editor with basic functionality.\n  Custom docks are made of Control nodes, they run in the\n  editor, and any behavior must be done through `@tool` scripts.\n  For more information, see this documentation article:\n  https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dock\n\n- How to create a custom Resource type, and provide logic for\n  serializing, deserializing, and converting this Resource type.\n\n- Editor integration with classes for loading, saving, and importing\n  this Resource type, including optional import customization.\n\nFor a more comprehensive example, see the GLTF module in Godot's source code.\n\nFor a less comprehensive example, see the \"simple_import_plugin\" folder.\n\n## Importing vs Loading\n\nThe custom Resource type in this demo is supplemented by two different\nsets of editor classes:\n\n- [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)\n  in the `importers/` folder, which allow customizing how\n  files are imported into Godot as Resources of different\n  types and optionally with import settings.\n  Imported files have `.import` files generated next to them.\n\n- [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\n  and [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html)\n  in the `load_and_save/` folder, which allow easily\n  editing files in the inspector and saving them back.\n  Resource files have `.uid` files generated next to them.\n\nThese two approaches are mutually exclusive.\nYou may only use one approach at a time for a given file extension.\nThis demo showcases both by using 2 different file extensions.\n\nIn actual projects, you should either choose [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)(s)\nfor a configurable import, OR [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\nfor a writeable resource load.\nThe choice depends on if you treat the file as an external source asset\nwhich should be imported and may be customized at import\n([EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)),\nor if you treat the file as an internal Godot resource meant to be natively\nand directly edited within Godot\n([ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)).\n\nFor example, a glTF file may be generated by Blender, and therefore\nis not intended to be edited directly in Godot, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nSimilarly, a PNG file is typically generated by an image editor, and Godot\nneeds to convert it to a different internal format, like a `.ctex` file\nfor a VRAM-compressed texture, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nHowever, files like `.tres` and `.tscn` are Godot-native formats meant to be\nedited directly in Godot, so they should use\n[ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n\nOnce you choose one approach, create scripts deriving the appropriate classes,\noverride their callback functions, and register them in your plugin's\n[`*_plugin.gd`](material_plugin.gd) script.\n\n## Example Files\n\nThe [`examples/`](examples/) folder contains several example files:\n\n- `blue.tres`: Directly saving a SillyMaterialResource using Godot's built-in `.tres` format,\n  without any custom loader/saver logic or import/export logic, available for all Resource types.\n  This can be edited in Godot's inspector and saved back.\n\n- `cyan.silly_mat_loadable`: Storing a SillyMaterialResource as a custom format,\n  such as via [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html), which is loaded back using a custom [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n  This can be edited in Godot's inspector and saved back.\n\n- `green_as_standard_mat.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a StandardMaterial3D using custom import/export logic. This shows how\n  importers can import files as any Resource type, converting custom files to data Godot can use.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow_tinted_red.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n\n  - This file has the same exact contents as `yellow.silly_mat_importable`, but the\n    corresponding `.import` file has a flag set to tint the albedo color towards red,\n\twhich makes the material appear orange instead of yellow.\n    This demonstrates how importers can use import settings to modify data during import.\n    After import, imported files are read-only and cannot be edited in the inspector.\n\n  - If you try to load this file using \"Load Imported Material (EditorImportPlugin)\" in the editor,\n    or call `ResourceLoader.load()` in GDScript, it will load the imported version, which\n\tincludes the red tint, so the albedo color will be orange. If you try to import this\n\tfile using \"Import Material (directly at runtime)\" in the editor, or call\n\t`SillyMaterialResource.read_from_file()` in GDScript, it will directly read the original\n\tfile's contents, ignoring the import process, so the albedo color will be yellow.\n\tThis demonstrates how files can be loaded within Godot's import process (editor only),\n\tor bypass the import process entirely (works in editor and at runtime).\n\n![Material Creator Plugin Imported File is Read-Only](../../screenshots/material_creator_plugin_imported_file_is_read_only.webp)\n\n## Editor Buttons\n\nThe material creator dock has these 6 buttons:\n\n- \"Apply Material\": Applies the current material to all selected MeshInstance3D nodes in the editor.\n\n- \"Save Material (ResourceFormatSaver)\": Saves the current\n  material to a `.silly_mat_loadable` file using the custom\n  [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html),\n  or to a `.tres` file using Godot's built-in ResourceFormatSaverText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Export Material (directly at runtime)\": Exports the current material\n  to a `.silly_mat_*` file using the functions on SillyMaterialResource.\n  This works for files outside of the `res://` folder, and can be done at runtime.\n\n- \"Load Material (ResourceFormatLoader)\": Loads a\n  `.silly_mat_loadable` file using the custom\n  [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html),\n  or loads a `.tres` file using Godot's built-in ResourceFormatLoaderText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Load Imported Material (EditorImportPlugin)\": Loads a\n  `.silly_mat_importable` that was imported by an\n  [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\n  The loaded data actually comes from the corresponding\n  imported file saved as `res://.godot/imported/something.silly_mat_importable-hash.res`.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- \"Import Material (directly at runtime)\": Imports a `.silly_mat_*` directly from the\n  source file, performing an import on request instead of loading data the editor imported earlier.\n  This ignores any editor import settings, works for files outside of the `res://` folder,\n  and can be done at runtime.\n\n![Material Creator Plugin Dock](../../screenshots/material_creator_plugin_dock.webp)\n"},"files":{"plugins/addons/custom_node/README.md":"# Custom Node Plugin Demo\n\nThis plugin demo shows one way to create a custom node type in Godot.\nFor more information, see this documentation article: https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-node\n\nA custom node type:\n\n* Derives from an existing node type.\n\n* Shows up in the type list when adding a new node.\n\n* Has a script attached to add new behavior.\n\n* May have a custom icon.\n\nThe way it works in this plugin is using the `add_custom_type` and `remove_custom_type` in the plugin script file.\nUsing this method you can specify any name, base type, script, and icon for your custom node.\n\nThere is also another way to add custom node types, which is using the `class_name` keyword in a script,\nor [using the `[GlobalClass]` attribute above a class declaration in C#](https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_global_classes.html).\n","plugins/README.md":"# Plugin Demos\n\nThis contains multiple plugin demos, all placed in a project for convenience.\n\nSee the [documentation on editor plugins](https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html)\nfor more information.\n\nLanguage: GDScript\n\nRenderer: Compatibility\n\nCheck out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/plugin-demo/\n\n# How does it work?\n\nThis project contains 4 plugins:\n\n- The custom node plugin shows how to create a custom node type\n  using `add_custom_type`. [More info](addons/custom_node).\n\n- The main screen plugin is a minimal example of how to create a plugin\n  with a main screen. [More info](addons/main_screen).\n\n- The material creator plugin shows how to add a custom dock with some\n  simple functionality, and shows how to create a custom Resource type\n  with custom loading, saving, importing, and exporting logic,\n  including editor integrations. [More info](addons/material_creator).\n\n- The simple import plugin shows how to make a simple plugin handle importing\n  a custom file type (`*.mtxt`). [More info](addons/simple_import_plugin).\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project, and then\nenable them in the project settings menu.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n\n## Screenshots\n\n![Heart Custom Node](screenshots/heart_custom_node.webp)\n\n![Main Screen Plugin](screenshots/main_screen_plugin.webp)\n\n![Material Creator Plugin](screenshots/material_creator_plugin_applied.webp)\n\n![Simple Import Plugin](screenshots/simple_import_plugin.webp)\n","plugins/addons/README.md":"# How to use\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n","plugins/addons/main_screen/README.md":"# Main Screen Plugin Demo\n\nThis plugin demo shows how to make a main screen plugin.\nThe main screen appears as a button next to the \"2D\", \"3D\", \"Script\", and\n\"AssetLib\" buttons. It also shows up when a Node it `handles` is selected.\n\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_main_screen_plugins.html\n\nIf you would like to see a more complete example of what main screen plugins\nare capable of, check out the [2.5D demo project](../../../misc/2.5d).\n","plugins/addons/simple_import_plugin/README.md":"# Material Import Plugin Demo\n\nThis plugin demo shows how a custom import system can\nbe added to the editor. In this case, it imports a material.\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html\n\nIn the editor, try opening `test.mtxt`. Godot will recognize\nit and import it as a material because of this plugin.\n","plugins/addons/material_creator/README.md":"# Material Creator Plugin Demo\n\nThis plugin demo demonstrates these things:\n\n- How to create a custom dock in the Godot editor with basic functionality.\n  Custom docks are made of Control nodes, they run in the\n  editor, and any behavior must be done through `@tool` scripts.\n  For more information, see this documentation article:\n  https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dock\n\n- How to create a custom Resource type, and provide logic for\n  serializing, deserializing, and converting this Resource type.\n\n- Editor integration with classes for loading, saving, and importing\n  this Resource type, including optional import customization.\n\nFor a more comprehensive example, see the GLTF module in Godot's source code.\n\nFor a less comprehensive example, see the \"simple_import_plugin\" folder.\n\n## Importing vs Loading\n\nThe custom Resource type in this demo is supplemented by two different\nsets of editor classes:\n\n- [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)\n  in the `importers/` folder, which allow customizing how\n  files are imported into Godot as Resources of different\n  types and optionally with import settings.\n  Imported files have `.import` files generated next to them.\n\n- [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\n  and [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html)\n  in the `load_and_save/` folder, which allow easily\n  editing files in the inspector and saving them back.\n  Resource files have `.uid` files generated next to them.\n\nThese two approaches are mutually exclusive.\nYou may only use one approach at a time for a given file extension.\nThis demo showcases both by using 2 different file extensions.\n\nIn actual projects, you should either choose [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)(s)\nfor a configurable import, OR [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\nfor a writeable resource load.\nThe choice depends on if you treat the file as an external source asset\nwhich should be imported and may be customized at import\n([EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)),\nor if you treat the file as an internal Godot resource meant to be natively\nand directly edited within Godot\n([ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)).\n\nFor example, a glTF file may be generated by Blender, and therefore\nis not intended to be edited directly in Godot, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nSimilarly, a PNG file is typically generated by an image editor, and Godot\nneeds to convert it to a different internal format, like a `.ctex` file\nfor a VRAM-compressed texture, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nHowever, files like `.tres` and `.tscn` are Godot-native formats meant to be\nedited directly in Godot, so they should use\n[ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n\nOnce you choose one approach, create scripts deriving the appropriate classes,\noverride their callback functions, and register them in your plugin's\n[`*_plugin.gd`](material_plugin.gd) script.\n\n## Example Files\n\nThe [`examples/`](examples/) folder contains several example files:\n\n- `blue.tres`: Directly saving a SillyMaterialResource using Godot's built-in `.tres` format,\n  without any custom loader/saver logic or import/export logic, available for all Resource types.\n  This can be edited in Godot's inspector and saved back.\n\n- `cyan.silly_mat_loadable`: Storing a SillyMaterialResource as a custom format,\n  such as via [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html), which is loaded back using a custom [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n  This can be edited in Godot's inspector and saved back.\n\n- `green_as_standard_mat.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a StandardMaterial3D using custom import/export logic. This shows how\n  importers can import files as any Resource type, converting custom files to data Godot can use.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow_tinted_red.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n\n  - This file has the same exact contents as `yellow.silly_mat_importable`, but the\n    corresponding `.import` file has a flag set to tint the albedo color towards red,\n\twhich makes the material appear orange instead of yellow.\n    This demonstrates how importers can use import settings to modify data during import.\n    After import, imported files are read-only and cannot be edited in the inspector.\n\n  - If you try to load this file using \"Load Imported Material (EditorImportPlugin)\" in the editor,\n    or call `ResourceLoader.load()` in GDScript, it will load the imported version, which\n\tincludes the red tint, so the albedo color will be orange. If you try to import this\n\tfile using \"Import Material (directly at runtime)\" in the editor, or call\n\t`SillyMaterialResource.read_from_file()` in GDScript, it will directly read the original\n\tfile's contents, ignoring the import process, so the albedo color will be yellow.\n\tThis demonstrates how files can be loaded within Godot's import process (editor only),\n\tor bypass the import process entirely (works in editor and at runtime).\n\n![Material Creator Plugin Imported File is Read-Only](../../screenshots/material_creator_plugin_imported_file_is_read_only.webp)\n\n## Editor Buttons\n\nThe material creator dock has these 6 buttons:\n\n- \"Apply Material\": Applies the current material to all selected MeshInstance3D nodes in the editor.\n\n- \"Save Material (ResourceFormatSaver)\": Saves the current\n  material to a `.silly_mat_loadable` file using the custom\n  [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html),\n  or to a `.tres` file using Godot's built-in ResourceFormatSaverText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Export Material (directly at runtime)\": Exports the current material\n  to a `.silly_mat_*` file using the functions on SillyMaterialResource.\n  This works for files outside of the `res://` folder, and can be done at runtime.\n\n- \"Load Material (ResourceFormatLoader)\": Loads a\n  `.silly_mat_loadable` file using the custom\n  [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html),\n  or loads a `.tres` file using Godot's built-in ResourceFormatLoaderText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Load Imported Material (EditorImportPlugin)\": Loads a\n  `.silly_mat_importable` that was imported by an\n  [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\n  The loaded data actually comes from the corresponding\n  imported file saved as `res://.godot/imported/something.silly_mat_importable-hash.res`.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- \"Import Material (directly at runtime)\": Imports a `.silly_mat_*` directly from the\n  source file, performing an import on request instead of loading data the editor imported earlier.\n  This ignores any editor import settings, works for files outside of the `res://` folder,\n  and can be done at runtime.\n\n![Material Creator Plugin Dock](../../screenshots/material_creator_plugin_dock.webp)\n"},"items":[{"name":"README.md","path":"plugins/addons/custom_node/README.md","rawUrl":"https://raw.githubusercontent.com/godotengine/godot-demo-projects/HEAD/plugins/addons/custom_node/README.md","title":"custom_node Documentation","category":"plugin-manifest","format":"markdown","content":"# Custom Node Plugin Demo\n\nThis plugin demo shows one way to create a custom node type in Godot.\nFor more information, see this documentation article: https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-node\n\nA custom node type:\n\n* Derives from an existing node type.\n\n* Shows up in the type list when adding a new node.\n\n* Has a script attached to add new behavior.\n\n* May have a custom icon.\n\nThe way it works in this plugin is using the `add_custom_type` and `remove_custom_type` in the plugin script file.\nUsing this method you can specify any name, base type, script, and icon for your custom node.\n\nThere is also another way to add custom node types, which is using the `class_name` keyword in a script,\nor [using the `[GlobalClass]` attribute above a class declaration in C#](https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_global_classes.html).\n","isInternal":false,"tokens":212,"sizeBytes":921},{"name":"README.md","path":"plugins/addons/main_screen/README.md","rawUrl":"https://raw.githubusercontent.com/godotengine/godot-demo-projects/HEAD/plugins/addons/main_screen/README.md","title":"main_screen Documentation","category":"plugin-manifest","format":"markdown","content":"# Main Screen Plugin Demo\n\nThis plugin demo shows how to make a main screen plugin.\nThe main screen appears as a button next to the \"2D\", \"3D\", \"Script\", and\n\"AssetLib\" buttons. It also shows up when a Node it `handles` is selected.\n\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_main_screen_plugins.html\n\nIf you would like to see a more complete example of what main screen plugins\nare capable of, check out the [2.5D demo project](../../../misc/2.5d).\n","isInternal":false,"tokens":130,"sizeBytes":533},{"name":"README.md","path":"plugins/addons/material_creator/README.md","rawUrl":"https://raw.githubusercontent.com/godotengine/godot-demo-projects/HEAD/plugins/addons/material_creator/README.md","title":"material_creator Documentation","category":"plugin-manifest","format":"markdown","content":"# Material Creator Plugin Demo\n\nThis plugin demo demonstrates these things:\n\n- How to create a custom dock in the Godot editor with basic functionality.\n  Custom docks are made of Control nodes, they run in the\n  editor, and any behavior must be done through `@tool` scripts.\n  For more information, see this documentation article:\n  https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dock\n\n- How to create a custom Resource type, and provide logic for\n  serializing, deserializing, and converting this Resource type.\n\n- Editor integration with classes for loading, saving, and importing\n  this Resource type, including optional import customization.\n\nFor a more comprehensive example, see the GLTF module in Godot's source code.\n\nFor a less comprehensive example, see the \"simple_import_plugin\" folder.\n\n## Importing vs Loading\n\nThe custom Resource type in this demo is supplemented by two different\nsets of editor classes:\n\n- [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)\n  in the `importers/` folder, which allow customizing how\n  files are imported into Godot as Resources of different\n  types and optionally with import settings.\n  Imported files have `.import` files generated next to them.\n\n- [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\n  and [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html)\n  in the `load_and_save/` folder, which allow easily\n  editing files in the inspector and saving them back.\n  Resource files have `.uid` files generated next to them.\n\nThese two approaches are mutually exclusive.\nYou may only use one approach at a time for a given file extension.\nThis demo showcases both by using 2 different file extensions.\n\nIn actual projects, you should either choose [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)(s)\nfor a configurable import, OR [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\nfor a writeable resource load.\nThe choice depends on if you treat the file as an external source asset\nwhich should be imported and may be customized at import\n([EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)),\nor if you treat the file as an internal Godot resource meant to be natively\nand directly edited within Godot\n([ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)).\n\nFor example, a glTF file may be generated by Blender, and therefore\nis not intended to be edited directly in Godot, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nSimilarly, a PNG file is typically generated by an image editor, and Godot\nneeds to convert it to a different internal format, like a `.ctex` file\nfor a VRAM-compressed texture, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nHowever, files like `.tres` and `.tscn` are Godot-native formats meant to be\nedited directly in Godot, so they should use\n[ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n\nOnce you choose one approach, create scripts deriving the appropriate classes,\noverride their callback functions, and register them in your plugin's\n[`*_plugin.gd`](material_plugin.gd) script.\n\n## Example Files\n\nThe [`examples/`](examples/) folder contains several example files:\n\n- `blue.tres`: Directly saving a SillyMaterialResource using Godot's built-in `.tres` format,\n  without any custom loader/saver logic or import/export logic, available for all Resource types.\n  This can be edited in Godot's inspector and saved back.\n\n- `cyan.silly_mat_loadable`: Storing a SillyMaterialResource as a custom format,\n  such as via [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html), which is loaded back using a custom [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n  This can be edited in Godot's inspector and saved back.\n\n- `green_as_standard_mat.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a StandardMaterial3D using custom import/export logic. This shows how\n  importers can import files as any Resource type, converting custom files to data Godot can use.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow_tinted_red.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n\n  - This file has the same exact contents as `yellow.silly_mat_importable`, but the\n    corresponding `.import` file has a flag set to tint the albedo color towards red,\n\twhich makes the material appear orange instead of yellow.\n    This demonstrates how importers can use import settings to modify data during import.\n    After import, imported files are read-only and cannot be edited in the inspector.\n\n  - If you try to load this file using \"Load Imported Material (EditorImportPlugin)\" in the editor,\n    or call `ResourceLoader.load()` in GDScript, it will load the imported version, which\n\tincludes the red tint, so the albedo color will be orange. If you try to import this\n\tfile using \"Import Material (directly at runtime)\" in the editor, or call\n\t`SillyMaterialResource.read_from_file()` in GDScript, it will directly read the original\n\tfile's contents, ignoring the import process, so the albedo color will be yellow.\n\tThis demonstrates how files can be loaded within Godot's import process (editor only),\n\tor bypass the import process entirely (works in editor and at runtime).\n\n![Material Creator Plugin Imported File is Read-Only](../../screenshots/material_creator_plugin_imported_file_is_read_only.webp)\n\n## Editor Buttons\n\nThe material creator dock has these 6 buttons:\n\n- \"Apply Material\": Applies the current material to all selected MeshInstance3D nodes in the editor.\n\n- \"Save Material (ResourceFormatSaver)\": Saves the current\n  material to a `.silly_mat_loadable` file using the custom\n  [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html),\n  or to a `.tres` file using Godot's built-in ResourceFormatSaverText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Export Material (directly at runtime)\": Exports the current material\n  to a `.silly_mat_*` file using the functions on SillyMaterialResource.\n  This works for files outside of the `res://` folder, and can be done at runtime.\n\n- \"Load Material (ResourceFormatLoader)\": Loads a\n  `.silly_mat_loadable` file using the custom\n  [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html),\n  or loads a `.tres` file using Godot's built-in ResourceFormatLoaderText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Load Imported Material (EditorImportPlugin)\": Loads a\n  `.silly_mat_importable` that was imported by an\n  [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\n  The loaded data actually comes from the corresponding\n  imported file saved as `res://.godot/imported/something.silly_mat_importable-hash.res`.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- \"Import Material (directly at runtime)\": Imports a `.silly_mat_*` directly from the\n  source file, performing an import on request instead of loading data the editor imported earlier.\n  This ignores any editor import settings, works for files outside of the `res://` folder,\n  and can be done at runtime.\n\n![Material Creator Plugin Dock](../../screenshots/material_creator_plugin_dock.webp)\n","isInternal":false,"tokens":1833,"sizeBytes":8196},{"name":"README.md","path":"plugins/addons/README.md","rawUrl":"https://raw.githubusercontent.com/godotengine/godot-demo-projects/HEAD/plugins/addons/README.md","title":"addons Documentation","category":"plugin-manifest","format":"markdown","content":"# How to use\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n","isInternal":false,"tokens":103,"sizeBytes":438},{"name":"README.md","path":"plugins/addons/simple_import_plugin/README.md","rawUrl":"https://raw.githubusercontent.com/godotengine/godot-demo-projects/HEAD/plugins/addons/simple_import_plugin/README.md","title":"simple_import_plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# Material Import Plugin Demo\n\nThis plugin demo shows how a custom import system can\nbe added to the editor. In this case, it imports a material.\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html\n\nIn the editor, try opening `test.mtxt`. Godot will recognize\nit and import it as a material because of this plugin.\n","isInternal":false,"tokens":87,"sizeBytes":401},{"name":"README.md","path":"plugins/README.md","rawUrl":"https://raw.githubusercontent.com/godotengine/godot-demo-projects/HEAD/plugins/README.md","title":"plugins Documentation","category":"plugin-manifest","format":"markdown","content":"# Plugin Demos\n\nThis contains multiple plugin demos, all placed in a project for convenience.\n\nSee the [documentation on editor plugins](https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html)\nfor more information.\n\nLanguage: GDScript\n\nRenderer: Compatibility\n\nCheck out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/plugin-demo/\n\n# How does it work?\n\nThis project contains 4 plugins:\n\n- The custom node plugin shows how to create a custom node type\n  using `add_custom_type`. [More info](addons/custom_node).\n\n- The main screen plugin is a minimal example of how to create a plugin\n  with a main screen. [More info](addons/main_screen).\n\n- The material creator plugin shows how to add a custom dock with some\n  simple functionality, and shows how to create a custom Resource type\n  with custom loading, saving, importing, and exporting logic,\n  including editor integrations. [More info](addons/material_creator).\n\n- The simple import plugin shows how to make a simple plugin handle importing\n  a custom file type (`*.mtxt`). [More info](addons/simple_import_plugin).\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project, and then\nenable them in the project settings menu.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n\n## Screenshots\n\n![Heart Custom Node](screenshots/heart_custom_node.webp)\n\n![Main Screen Plugin](screenshots/main_screen_plugin.webp)\n\n![Material Creator Plugin](screenshots/material_creator_plugin_applied.webp)\n\n![Simple Import Plugin](screenshots/simple_import_plugin.webp)\n","isInternal":false,"tokens":414,"sizeBytes":1878}],"systemPromptSnippet":"<yakaai_skills repo=\"godotengine/godot-demo-projects\">\n<!-- File: plugins/addons/custom_node/README.md (Tokens: ~212 | Category: plugin-manifest) -->\n# Custom Node Plugin Demo\n\nThis plugin demo shows one way to create a custom node type in Godot.\nFor more information, see this documentation article: https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-node\n\nA custom node type:\n\n* Derives from an existing node type.\n\n* Shows up in the type list when adding a new node.\n\n* Has a script attached to add new behavior.\n\n* May have a custom icon.\n\nThe way it works in this plugin is using the `add_custom_type` and `remove_custom_type` in the plugin script file.\nUsing this method you can specify any name, base type, script, and icon for your custom node.\n\nThere is also another way to add custom node types, which is using the `class_name` keyword in a script,\nor [using the `[GlobalClass]` attribute above a class declaration in C#](https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_global_classes.html).\n\n<!-- File: plugins/addons/main_screen/README.md (Tokens: ~130 | Category: plugin-manifest) -->\n# Main Screen Plugin Demo\n\nThis plugin demo shows how to make a main screen plugin.\nThe main screen appears as a button next to the \"2D\", \"3D\", \"Script\", and\n\"AssetLib\" buttons. It also shows up when a Node it `handles` is selected.\n\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_main_screen_plugins.html\n\nIf you would like to see a more complete example of what main screen plugins\nare capable of, check out the [2.5D demo project](../../../misc/2.5d).\n\n<!-- File: plugins/addons/material_creator/README.md (Tokens: ~1833 | Category: plugin-manifest) -->\n# Material Creator Plugin Demo\n\nThis plugin demo demonstrates these things:\n\n- How to create a custom dock in the Godot editor with basic functionality.\n  Custom docks are made of Control nodes, they run in the\n  editor, and any behavior must be done through `@tool` scripts.\n  For more information, see this documentation article:\n  https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dock\n\n- How to create a custom Resource type, and provide logic for\n  serializing, deserializing, and converting this Resource type.\n\n- Editor integration with classes for loading, saving, and importing\n  this Resource type, including optional import customization.\n\nFor a more comprehensive example, see the GLTF module in Godot's source code.\n\nFor a less comprehensive example, see the \"simple_import_plugin\" folder.\n\n## Importing vs Loading\n\nThe custom Resource type in this demo is supplemented by two different\nsets of editor classes:\n\n- [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)\n  in the `importers/` folder, which allow customizing how\n  files are imported into Godot as Resources of different\n  types and optionally with import settings.\n  Imported files have `.import` files generated next to them.\n\n- [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\n  and [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html)\n  in the `load_and_save/` folder, which allow easily\n  editing files in the inspector and saving them back.\n  Resource files have `.uid` files generated next to them.\n\nThese two approaches are mutually exclusive.\nYou may only use one approach at a time for a given file extension.\nThis demo showcases both by using 2 different file extensions.\n\nIn actual projects, you should either choose [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)(s)\nfor a configurable import, OR [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)\nfor a writeable resource load.\nThe choice depends on if you treat the file as an external source asset\nwhich should be imported and may be customized at import\n([EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html)),\nor if you treat the file as an internal Godot resource meant to be natively\nand directly edited within Godot\n([ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html)).\n\nFor example, a glTF file may be generated by Blender, and therefore\nis not intended to be edited directly in Godot, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nSimilarly, a PNG file is typically generated by an image editor, and Godot\nneeds to convert it to a different internal format, like a `.ctex` file\nfor a VRAM-compressed texture, so it should use\n[EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\nHowever, files like `.tres` and `.tscn` are Godot-native formats meant to be\nedited directly in Godot, so they should use\n[ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n\nOnce you choose one approach, create scripts deriving the appropriate classes,\noverride their callback functions, and register them in your plugin's\n[`*_plugin.gd`](material_plugin.gd) script.\n\n## Example Files\n\nThe [`examples/`](examples/) folder contains several example files:\n\n- `blue.tres`: Directly saving a SillyMaterialResource using Godot's built-in `.tres` format,\n  without any custom loader/saver logic or import/export logic, available for all Resource types.\n  This can be edited in Godot's inspector and saved back.\n\n- `cyan.silly_mat_loadable`: Storing a SillyMaterialResource as a custom format,\n  such as via [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html), which is loaded back using a custom [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html).\n  This can be edited in Godot's inspector and saved back.\n\n- `green_as_standard_mat.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a StandardMaterial3D using custom import/export logic. This shows how\n  importers can import files as any Resource type, converting custom files to data Godot can use.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- `yellow_tinted_red.silly_mat_importable`: Storing a SillyMaterialResource as a custom format,\n  which is imported as a SillyMaterialResource using custom import/export logic.\n\n  - This file has the same exact contents as `yellow.silly_mat_importable`, but the\n    corresponding `.import` file has a flag set to tint the albedo color towards red,\n\twhich makes the material appear orange instead of yellow.\n    This demonstrates how importers can use import settings to modify data during import.\n    After import, imported files are read-only and cannot be edited in the inspector.\n\n  - If you try to load this file using \"Load Imported Material (EditorImportPlugin)\" in the editor,\n    or call `ResourceLoader.load()` in GDScript, it will load the imported version, which\n\tincludes the red tint, so the albedo color will be orange. If you try to import this\n\tfile using \"Import Material (directly at runtime)\" in the editor, or call\n\t`SillyMaterialResource.read_from_file()` in GDScript, it will directly read the original\n\tfile's contents, ignoring the import process, so the albedo color will be yellow.\n\tThis demonstrates how files can be loaded within Godot's import process (editor only),\n\tor bypass the import process entirely (works in editor and at runtime).\n\n![Material Creator Plugin Imported File is Read-Only](../../screenshots/material_creator_plugin_imported_file_is_read_only.webp)\n\n## Editor Buttons\n\nThe material creator dock has these 6 buttons:\n\n- \"Apply Material\": Applies the current material to all selected MeshInstance3D nodes in the editor.\n\n- \"Save Material (ResourceFormatSaver)\": Saves the current\n  material to a `.silly_mat_loadable` file using the custom\n  [ResourceFormatSaver](https://docs.godotengine.org/en/stable/classes/class_resourceformatsaver.html),\n  or to a `.tres` file using Godot's built-in ResourceFormatSaverText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Export Material (directly at runtime)\": Exports the current material\n  to a `.silly_mat_*` file using the functions on SillyMaterialResource.\n  This works for files outside of the `res://` folder, and can be done at runtime.\n\n- \"Load Material (ResourceFormatLoader)\": Loads a\n  `.silly_mat_loadable` file using the custom\n  [ResourceFormatLoader](https://docs.godotengine.org/en/stable/classes/class_resourceformatloader.html),\n  or loads a `.tres` file using Godot's built-in ResourceFormatLoaderText.\n  This can be edited in Godot's inspector and saved back.\n\n- \"Load Imported Material (EditorImportPlugin)\": Loads a\n  `.silly_mat_importable` that was imported by an\n  [EditorImportPlugin](https://docs.godotengine.org/en/stable/classes/class_editorimportplugin.html).\n  The loaded data actually comes from the corresponding\n  imported file saved as `res://.godot/imported/something.silly_mat_importable-hash.res`.\n  Imported files are read-only and cannot be edited in the inspector.\n\n- \"Import Material (directly at runtime)\": Imports a `.silly_mat_*` directly from the\n  source file, performing an import on request instead of loading data the editor imported earlier.\n  This ignores any editor import settings, works for files outside of the `res://` folder,\n  and can be done at runtime.\n\n![Material Creator Plugin Dock](../../screenshots/material_creator_plugin_dock.webp)\n\n<!-- File: plugins/addons/README.md (Tokens: ~103 | Category: plugin-manifest) -->\n# How to use\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n\n<!-- File: plugins/addons/simple_import_plugin/README.md (Tokens: ~87 | Category: plugin-manifest) -->\n# Material Import Plugin Demo\n\nThis plugin demo shows how a custom import system can\nbe added to the editor. In this case, it imports a material.\nFor more information, see this documentation article:\nhttps://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html\n\nIn the editor, try opening `test.mtxt`. Godot will recognize\nit and import it as a material because of this plugin.\n\n<!-- File: plugins/README.md (Tokens: ~414 | Category: plugin-manifest) -->\n# Plugin Demos\n\nThis contains multiple plugin demos, all placed in a project for convenience.\n\nSee the [documentation on editor plugins](https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html)\nfor more information.\n\nLanguage: GDScript\n\nRenderer: Compatibility\n\nCheck out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/plugin-demo/\n\n# How does it work?\n\nThis project contains 4 plugins:\n\n- The custom node plugin shows how to create a custom node type\n  using `add_custom_type`. [More info](addons/custom_node).\n\n- The main screen plugin is a minimal example of how to create a plugin\n  with a main screen. [More info](addons/main_screen).\n\n- The material creator plugin shows how to add a custom dock with some\n  simple functionality, and shows how to create a custom Resource type\n  with custom loading, saving, importing, and exporting logic,\n  including editor integrations. [More info](addons/material_creator).\n\n- The simple import plugin shows how to make a simple plugin handle importing\n  a custom file type (`*.mtxt`). [More info](addons/simple_import_plugin).\n\nTo use these plugins in another project, copy any of these\nfolders to the `addons/` folder in a Godot project, and then\nenable them in the project settings menu.\n\nFor example, the path would look like: `addons/custom_node`\n\nPlugins can be distributed and installed from the UI.\nIf you make a ZIP archive that contains the folder, Godot will recognize\nit as a plugin and will allow you to install it.\n\nThis can be done via the terminal: `zip -r custom_node.zip custom_node/*`\n\n## Screenshots\n\n![Heart Custom Node](screenshots/heart_custom_node.webp)\n\n![Main Screen Plugin](screenshots/main_screen_plugin.webp)\n\n![Material Creator Plugin](screenshots/material_creator_plugin_applied.webp)\n\n![Simple Import Plugin](screenshots/simple_import_plugin.webp)\n</yakaai_skills>"}