{"id":18360177,"url":"https://github.com/denzelcode/formapi","last_synced_at":"2025-04-06T13:32:20.983Z","repository":{"id":216768809,"uuid":"296253338","full_name":"DenzelCode/FormAPI","owner":"DenzelCode","description":"FormAPI for Nukkit","archived":false,"fork":false,"pushed_at":"2022-07-28T19:42:45.000Z","size":56,"stargazers_count":7,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T01:25:16.890Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DenzelCode.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}},"created_at":"2020-09-17T07:35:39.000Z","updated_at":"2024-04-28T22:45:20.000Z","dependencies_parsed_at":"2024-01-12T18:12:05.110Z","dependency_job_id":"fd94b2b2-a95c-4dbc-8a84-5839b9c972d9","html_url":"https://github.com/DenzelCode/FormAPI","commit_stats":null,"previous_names":["denzelcode/formapi"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenzelCode%2FFormAPI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenzelCode%2FFormAPI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenzelCode%2FFormAPI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DenzelCode%2FFormAPI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DenzelCode","download_url":"https://codeload.github.com/DenzelCode/FormAPI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247488724,"owners_count":20946987,"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","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-05T22:26:53.669Z","updated_at":"2025-04-06T13:32:20.656Z","avatar_url":"https://github.com/DenzelCode.png","language":"Java","readme":"# FormAPI\nThe best form API provider for Nukkit Cloudburst.\n\n## What's FormAPI?\nFormAPI is an API that provides you everything that you need to enhance your plugins with the forms system implemented on Nukkit.\n\n\n## Download\nDownload the latest JAR: https://github.com/DenzelCode/FormAPI/releases/latest\n\n## Dependency for maven:\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.denzelcode.form\u003c/groupId\u003e\n    \u003cartifactId\u003eFormAPI\u003c/artifactId\u003e\n    \u003cversion\u003e2.2-SNAPSHOT\u003c/version\u003e\n    \u003csystemPath\u003e${project.basedir}/lib/FormAPI.jar\u003c/systemPath\u003e\n\u003c/dependency\u003e\n```\n\n## Installation:\n- Put the FormAPI.jar inside of /plugins. \n\nIn case you don't want to put it inside of plugins just execute this line of code inside of your plugin to run the EventListener:\n```\nimport com.denzelcode.form.FormAPI;\n\nFormAPI.init();\n```\n\n## Example:\n**Create form and send it to the client:**\n```java\npackage com.denzelcode.test;\n\nimport cn.nukkit.Player;\nimport cn.nukkit.command.Command;\nimport cn.nukkit.command.CommandSender;\nimport com.denzelcode.form.FormAPI;\n\npublic class TestCommand extends Command {\n    public TestCommand() {\n        super(\"test\");\n    }\n\n    @Override\n    public boolean execute(CommandSender sender, String label, String[] args) {\n        FormAPI.customWindowForm(\"login\", \"Custom Form\")\n                .addInput(\"username\", \"Username\", \"Enter your username\")\n                .addInput(\"password\", \"Password\", \"Enter your password\")\n                .addHandler((e) -\u003e System.out.println('Variable e is an instance of CustomFormSubmitEvent'))\n                .sendTo((Player) sender);\n\n        return true;\n    }\n}\n\n```\n**Event listener:**\n```java\npackage com.denzelcode.test;\n\nimport cn.nukkit.Player;\nimport cn.nukkit.event.EventHandler;\nimport cn.nukkit.event.EventPriority;\nimport cn.nukkit.event.Listener;\nimport com.denzelcode.form.FormAPI;\nimport com.denzelcode.form.element.Button;\nimport com.denzelcode.form.element.Input;\nimport com.denzelcode.form.event.CustomFormSubmitEvent;\nimport com.denzelcode.form.event.ModalFormSubmitEvent;\nimport com.denzelcode.form.event.SimpleFormButtonClickEvent;\nimport com.denzelcode.form.window.CustomWindowForm;\nimport com.denzelcode.form.window.ModalWindowForm;\nimport com.denzelcode.form.window.SimpleWindowForm;\n\npublic class EventListener implements Listener {\n\n    @EventHandler(priority = EventPriority.NORMAL)\n    public void onLoginFormSubmit(CustomFormSubmitEvent event) {\n        CustomWindowForm form = event.getForm();\n        Player player = event.getPlayer();\n\n        if (!event.isFormValid(\"login\")) return;\n\n        Input username = form.getElement(\"username\");\n        Input password = form.getElement(\"password\");\n\n        player.sendMessage(\"Player: \" + player.getName());\n        player.sendMessage(\"Form: \" + form.getName());\n        player.sendMessage(\"Username: \" + username.getValue());\n        player.sendMessage(\"Password: \" + password.getValue());\n\n        FormAPI.modalWindowForm(\n                \"login_remember\",\n                \"Remember\",\n                \"Do you want to remember your account in this device?\",\n                \"Yes\",\n                \"No\"\n        ).sendTo(player);\n    }\n\n    @EventHandler(priority = EventPriority.NORMAL)\n    public void onRememberFormSubmit(ModalFormSubmitEvent event) {\n        ModalWindowForm form = event.getForm();\n        Player player = event.getPlayer();\n\n        if (!event.isFormValid(\"login_remember\")) return;\n\n        boolean accepted = event.isAccepted();\n\n        player.sendMessage(\"Player: \" + player.getName());\n        player.sendMessage(\"Form: \" + form.getName());\n        player.sendMessage(\"Accepted: \" + (accepted ? \"Yes\" : \"No\"));\n\n        FormAPI.simpleWindowForm(\"minigames\", \"Minigames\", \"Select a minigame which you want to play!\")\n                .addButton(\"skywars\", \"SkyWars\")\n                .addButton(\"luckyislands\", \"LuckyIslands\")\n                .sendTo(player);\n    }\n\n    @EventHandler(priority = EventPriority.NORMAL)\n    public void onMinigameFormSubmit(SimpleFormButtonClickEvent event) {\n        SimpleWindowForm form = event.getForm();\n        Player player = event.getPlayer();\n        Button button = event.getButton();\n\n        if (!event.isFormValid(\"minigames\")) return;\n\n        player.sendMessage(\"Player: \" + player.getName());\n        player.sendMessage(\"Form: \" + form.getName());\n        player.sendMessage(\"Clicked button: \" + button.getName());\n\n        player.sendMessage(\"Successfully joined Minigame: \" + button.getText() + \"!\");\n    }\n}\n\n```\n\n- Run command /test and you will have this showed in-game:\n[Screenshot](https://imgur.com/a/lFqzhYq)\n\n## Form Types\nModal Example\n```java\nimport com.denzelcode.form.FormAPI;\n\nFormAPI.modalWindowForm(\"modal\", \"Custom Form\", \"This is a content\", \"Accept\", \"Decline\")\n    .addHandler((e) -\u003e System.out.println('Variable e is an instance of ModalFormSubmitEvent'))\n    .sendTo(player);\n```\nSimple Example\n```java\nimport com.denzelcode.form.FormAPI;\n\nFormAPI.simpleWindowForm(\"simple\", \"Simple Form\", \"This is a content\")\n    .addButton(\"name\", \"This is a button\")\n    .addButton(\"name1\", \"Hi, im a button\", \"https://i.imgur.com/PPvUcoW.png\")//ImageType is default URL in this case\n    .addButton(\"name2\", \"This is other button\", ImageType.PATH, \"textures/ui/feedIcon.png\")\n    .addHandler((e) -\u003e System.out.println('Variable e is an instance of SimpleFormButtonClickEvent'))\n    .sendTo(player);\n```\nCustom Example\n```java\nimport com.denzelcode.form.FormAPI;\n\nList\u003cString\u003e optionsDropdown = new ArrayList\u003cString\u003e(){{\n    add(\"Option 1\");\n    add(\"Option 2\");\n}};\n\nFormAPI.customWindowForm(\"custom\", \"Custom Form\")\n    .addInput(\"name\", \"Fill the input\", \"Hello, im the input\")\n    .addDropdown(\"name1\", \"text\", optionsDropdown)\n    .addLabel(\"name2\", \"This a label\")\n    .addSlider(\"name3\", \"This is a slider\", 1f, 10f)\n    .addToggle(\"name4\", \"This is a toggle\", false)\n    .addHandler((e) -\u003e System.out.println('Variable e is an instance of CustomFormSubmitEvent'))\n    .sendTo(player);\n```\n\n## Licensing information\nThis project is licensed under LGPL-3.0. Please see the [LICENSE](/LICENSE) file for details.\n\n## Donations\n* [PayPal](https://paypal.me/DenzelGiraldo)\n","funding_links":["https://paypal.me/DenzelGiraldo"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenzelcode%2Fformapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenzelcode%2Fformapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenzelcode%2Fformapi/lists"}