[{"data":1,"prerenderedAt":64},["ShallowReactive",2],{"plugin-Him188\u002FGUI":3},{"api_version":4,"authors":5,"categories":10,"created_at":11,"dependencies":12,"description":13,"detection_confidence":14,"downloads":15,"gallery":16,"icon_url":7,"id":17,"license":18,"links":22,"manifest_path":23,"name":24,"primary_target":25,"server_version":21,"source":26,"stars":27,"summary":28,"targets":29,"updated_at":31,"versions":32},"1.0.0",[6],{"avatar_url":7,"name":8,"url":9},"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F12100985?v=4","Him188","https:\u002F\u002Fgithub.com\u002FHim188",[],1532334417,[],"**GUI - FormWindow tools**  \n**(中文版说明)**[**Chinese README**](https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002FREADME-chs.md)\n\n# Introduction\n\nThis plugin is made for developers.  \nBy using **GUI**, you can easily create forms.  \n**Contribution is welcomed**\n\n# Download\n- [TeamCity](http:\u002F\u002Fmamoe.net:2333\u002FviewType.html?buildTypeId=gui_Build)\n\n# Features\n\n## Kotlin DSL\n\nOnly available in Kotlin  \nLearn more in [](src\u002Fmain\u002Fjava\u002Fmoe\u002Fhim188\u002Fgui\u002Fkotlin\u002FFormWindowKt.kt)  \nSample for showing FormSimple\n\n```kotlin\nplayer.showFormSimple() {\n  title(\"Set title here\")\n  content(\"Set content here\")\n  \n  buttons(\"Button1\", \"Button2\", \"Vararg buttons\")\n\n  onClicked {\u002F\u002Fit: Int\n    player.sendMessage(\"You clicked a button whose id is $it\")\n  }\n  \n  onClosed {\u002F\u002Fit: Player\n    it.sendMessage(\"You closed the form\")\n  }\n}\n```\n\n## ResponseListener\n\n  ([ResponseListener.java](https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fmoe\u002Fhim188\u002Fgui\u002Fwindow\u002Flistener\u002Fresponse\u002FResponseListener.java))  \n    Sample:\n  ```java\n  class A extends ResponsibleFormWindowSimple {\n      A() {\n          super(\"Title\", \"Content\");\n          addButton(new ElementButton(\"Say Hi\"));\n          addButton(new ElementButton(\"Say Hello\"));\n      }\n      public void onClicked(int id, Player player) {\n          switch (id){\n              case 0:\n                  player.sendMessage(\"Hi\");\n                  break;\n              case 1:\n                  player.sendMessage(\"Hello\");\n                  break;\n          }\n      }\n      public void onClosed(Player player) {\n          player.sendMessage(\"You Closed\");\n      }\n  }\n  ```\n\n## Functional listeners\n\n  **Functional method(lambda) support**\n\n  You can send FormWindow and process only in one line  \n  Sample:  \n  `\n  player.showFormWindow(new FormModal(\"Tips\", \"Hello\", \"Yes\", \"No\")\n.onResponded(confirmation -> player.sendMessage(\"Your choice:\"+confirmation)));\n  `\n\n  [ResponsibleFormWindowSimpleAdvanced.java](https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fmoe\u002Fhim188\u002Fgui\u002Fwindow\u002FResponsibleFormWindowSimpleAdvanced.java):\n### Using Listeners\n\n  ResponseListener and Functional listeners can be used at the same time  \n  Notice that: **ResponseListener will be called before Functional listeners**\n\n## **ResponsibleButton**\n\n  **ResponsibleButton** for ResponsibleFormWindowSimple  \n  Sample:\n\n  ```java\n  class A extends ResponsibleFormWindowSimple {\n      A() {\n          super(\"Title\", \"Content\");\n          addButton(\"Say Hi\", player->player.sendMessage(\"Hi\"));\u002F\u002Ffast addButton\n          addButton(new ResponsibleElementButton(\"Say Hello\", player->player.sendMessage(\"Hello\")));\u002F\u002Fcommon addButton\n      }\n      public void onClosed(Player player) {\n          player.sendMessage(\"You Closed\");\n      }\n  }\n  ```\n\n## ResponsibleFormWindowSimpleAdvanced\n\n  ResponsibleFormWindowSimple**Advanced**  \n  This is a wonderful implement of ResponsibleFormWindowSimple!  \n   (I can't translate this paragraph into English)\n  ```text\n  高级版无需通过 id 自找数据, 一切的一切都由 GUI 帮你完成. 你只需要实现后续处理即可!\n  普通版里面, 点击事件函数参数1是 int, 是按钮的 ID.\n  并且需要使用 Simple 类型表单的情况, 一般是有一组同一类型的数据需要依次显示. 比如传送世界列表, 任务列表\n  在普通版构造器中, 你需要手动对数据遍历并添加按钮, 在普通版click事件中, 你又需要手动从数据(List,Map等)中取出第 n 项, 再处理.\n  如果再来一个窗口, 你又要枯燥地重复一切. 那么是时候使用高级版了!\n\n  高级版里面, 由java泛型支持, 你在构造器中需要传入一组数据和构造按钮的函数, 然后在点击事件中直接拿到按钮对应的数据进行处理\n  ```\n  Please use a minute to check the [source code](https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fmoe\u002Fhim188\u002Fgui\u002Fwindow\u002FResponsibleFormWindowSimpleAdvanced.java)\n\n## ResponsibleFormWindowTemplated\n\n  extends `ResponsibleFormWindow`  \n  By using it, you can get responses from your custom **key** such as `enum`, `String`  \n  The template has checkers(parsers) to `TemplateElementInput`, It can automatically check whether the input is correct.  \n  (I can't translate this paragraph into English)\n  ```\n  比如, 你设置ID为\"test\"的 Input 只能输入整数, 你在收到返回数据时, 可以通过ID \"test\" 直接获取玩家的输入内容. 而原本NK表单只有整数ID, 对于项目多达十几个的表单很不方便.\n  当玩家提交表单, 模板会将表单数据按照你预期希望的数据类型转换, 因此你可以直接取到整数型, 日期型, 甚至`Level`, `Player`, `Item`类型的数据!(不然, 试想10个输入框, 你需要花几十行判断和转换类型?)\n  如果玩家输入数据有误, 你可以选择性地处理错误. 我们提供了 `ExceptionConsumer` 来捕获错误. 也提供了默认的处理方法: 只处理一个错误, 处理每个错误, 集中处理全部https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fmoe\u002Fhim188\u002Fgui\u002Fwindow\u002FResponsibleFormWindowSimpleAdvanced.java错了一个就全没了?)\n  ```\n  Please check the [source code](https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fmoe\u002Fhim188\u002Fgui\u002Fwindow\u002FResponsibleFormWindowTemplated.java)  \n  Or fast know hot wo use: [template example](https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002FTemplateExample.md)\n\n## Backable\n\n  Each `ResponsibleFormWindow` supports directly back to the window which has been sent before.  \n  And you just need to code one line:\n  ```\n  window.goBack(player);\n  ```\n  You can also get players' latest windows, please view [Backable.java](https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Fblob\u002Fmaster\u002Fsrc\u002Fmain\u002Fjava\u002Fmoe\u002Fhim188\u002Fgui\u002Futils\u002FBackable.java)\n\n## How to use\n\n### Maven repository\n\n1. Add `repository` in `repositories`\n    ```xml\n    \u003Crepository>\n        \u003Cid>mamoe-repo\u003C\u002Fid>\n        \u003Curl>http:\u002F\u002Fmamoe.net:8081\u002Frepository\u002Fpublic\u002F\u003C\u002Furl>\n    \u003C\u002Frepository>\n    ```\n    This repo may permanently work.\n2. Add `dependency` in `build.dependencies`\n    ```xml\n    \u003Cdependency>\n        \u003CgroupId>moe.him188\u003C\u002FgroupId>\n        \u003CartifactId>gui\u003C\u002FartifactId>\n        \u003Cversion>LATEST\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    ```\n    Sometimes the 'LATEST' version signal does not work, in this case, you need to use the latest version, such as `1.14` instead.\n    And, you can get the latest version in `pom.xml`\n3. Don't forget to add `depend` into `plugin.yml`\n    ```yaml\n    depend:\n    - GUI\n    ```\n\n### Package JAR file\n\n1. Run command `mvn clean package` in project root path\n\n2. Find JAR in `target\u002F`\n","medium",0,[],"Him188\u002FGUI",{"id":19,"name":20,"url":21},"ARR","All Rights Reserved","",null,"src\u002Fmain\u002Fresources\u002Fplugin.yml","GUI","nkx","https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI",19,"Form window tools",[25,30],"nkmot",1655777699,[33,47],{"changelog":21,"downloads":15,"files":34,"name":21,"prerelease":44,"published_at":45,"version":46},[35,40],{"filename":36,"primary":37,"size":38,"url":39},"gui-1.15.1-sources.jar",true,49013,"https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Freleases\u002Fdownload\u002F1.15.1\u002Fgui-1.15.1-sources.jar",{"filename":41,"primary":37,"size":42,"url":43},"gui-1.15.1.jar",1702160,"https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Freleases\u002Fdownload\u002F1.15.1\u002Fgui-1.15.1.jar",false,1583994826,"1.15.1",{"changelog":48,"downloads":15,"files":49,"name":21,"prerelease":44,"published_at":62,"version":63},"Add Kotlin DSL for creating forms",[50,54,58],{"filename":51,"primary":37,"size":52,"url":53},"gui-1.15-sources.jar",48982,"https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Freleases\u002Fdownload\u002F1.15.0\u002Fgui-1.15-sources.jar",{"filename":55,"primary":37,"size":56,"url":57},"gui-1.15.jar",112545,"https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Freleases\u002Fdownload\u002F1.15.0\u002Fgui-1.15.jar",{"filename":59,"primary":37,"size":60,"url":61},"KotlinLib_1.0.jar",3556572,"https:\u002F\u002Fgithub.com\u002FHim188\u002FGUI\u002Freleases\u002Fdownload\u002F1.15.0\u002FKotlinLib_1.0.jar",1583903740,"1.15.0",1792698707088]