{"id":21812795,"url":"https://github.com/forestoflight/canopy-extension-example","last_synced_at":"2025-10-10T15:05:39.660Z","repository":{"id":254197821,"uuid":"845791038","full_name":"ForestOfLight/Canopy-Extension-Example","owner":"ForestOfLight","description":"An example Canopy Extension behavior pack.","archived":false,"fork":false,"pushed_at":"2025-03-26T21:11:36.000Z","size":194,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-19T19:02:41.180Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ForestOfLight.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-08-21T23:52:35.000Z","updated_at":"2025-03-26T21:11:40.000Z","dependencies_parsed_at":"2024-08-29T22:42:04.840Z","dependency_job_id":"21fce510-5e84-47d7-899a-d8e4edeeba91","html_url":"https://github.com/ForestOfLight/Canopy-Extension-Example","commit_stats":null,"previous_names":["forestoflight/canopy-extension-example"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/ForestOfLight/Canopy-Extension-Example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForestOfLight%2FCanopy-Extension-Example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForestOfLight%2FCanopy-Extension-Example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForestOfLight%2FCanopy-Extension-Example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForestOfLight%2FCanopy-Extension-Example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ForestOfLight","download_url":"https://codeload.github.com/ForestOfLight/Canopy-Extension-Example/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ForestOfLight%2FCanopy-Extension-Example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279004563,"owners_count":26083734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-27T14:20:06.398Z","updated_at":"2025-10-10T15:05:39.653Z","avatar_url":"https://github.com/ForestOfLight.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"./pack_icon.png\"\u003e\n        \u003cimg src=\"./pack_icon.png\" alt=\"Canopy Extension Example Icon\" width=\"100\" height=\"100\"\u003e\n    \u003c/a\u003e\n    \u003cp\u003e\u003cb\u003eCanopy Extension Example\u003c/b\u003e\u003c/p\u003e\n\n[![Codacy Quality](https://app.codacy.com/project/badge/Grade/10040a714ad84a2f912d4dae9d3f6e57)](https://app.codacy.com/gh/ForestOfLight/Canopy-Extension-Example/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n[![Minecraft - Version](https://img.shields.io/badge/Minecraft-v1.21.70_(Bedrock)-brightgreen)](https://feedback.minecraft.net/hc/en-us/sections/360001186971-Release-Changelogs)\n[![GitHub License](https://img.shields.io/github/license/forestoflight/canopy-extension-example)](LICENSE)\n[![Discord](https://badgen.net/discord/members/9KGche8fxm?icon=discord\u0026label=Discord\u0026list=what)](https://discord.gg/9KGche8fxm)\n\u003c/div\u003e\n\n---\n\nExtensions?! In a behavior pack?! Yep! This repo contains an example pack designed to teach you how to create your own extensions for **Canopy**. All extensions must be added to the same world as **Canopy** (the dependencies in the `manifest.json` should ensure that).\n\n## How this example pack functions ingame\n\nWhat **Canopy** handles:\n\n**`./canopy \u003crule\u003e [true/false]`**  \n**Canopy** will automatically include the names of your rules in the `./canopy` command.\n\n**`./help`**  \n**Canopy** will automatically include a Rules and a Commands help page for your extension.\n\n![Help Page](./example_help.png)\n\nWhat the extension handles:\n\n**`./example [message]`**  \nThis command sends a message to the chat. It also has a default message if no message is provided. (Alias: `./ex`)\n\n**`commandExample`**  \nThis rule will enable the `./example` command.\n\n**`exampleRule`**  \nThis rule will enable a message in chat when you push a button.\n\n## How to create an extension\n\n1. Clone this repo.   \n```sh\ngit clone https://github.com/ForestOfLight/canopy-extension-example.git\n```\n2. Remove all files that are not the `pack_icon.png`, the `manifest.json` file, or in the `scripts/` folder.\n3. Rename the folder to your extension's name.   \n```sh\nmv canopy-extension-example your-extension-name\n```\n4. Open the folder in your favorite code editor.\n5. Edit the `manifest.json` file to match your extension's information.\n6. Replace the `pack_icon.png` with your extension's icon.\n7. Edit the `main.js` file to add your extension's functionality.\n\n\u003e [!TIP]\n\u003e Most information about how to code a **Canopy Extension** can be found in the `main.js` file.\n\n## How to use an extension\n\n1. Add the extension pack to the same world as the **Canopy** RP \u0026 BP.\n2. Profit.\n\n**Canopy** will automatically detect the extension and load it!\n\n## How does this work?\n\n**Canopy** and its extensions all communicate using scriptevents! The vanilla `/scriptevent` command allows for sending strings to Behavior Packs and the `ScriptEventCommandMessage` event allows for recieving them. **Canopy** uses [MCBE-IPC](https://https://github.com/OmniacDev/MCBE-IPC), a library that streamlines the process of sending and recieving scriptevents.  \n**Canopy Extensions** use these to communicate with **Canopy** when new rules and commands are added. **Canopy** uses these as well to get rule data, set rule data, and call command callbacks from extensions.  \n\n## Issues \u0026 Suggestions\n\nIf you have any issues or suggestions, please open an issue on this repo. Additionally, if you're interested in contributing to the project, feel free to open a pull request! \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforestoflight%2Fcanopy-extension-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforestoflight%2Fcanopy-extension-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforestoflight%2Fcanopy-extension-example/lists"}