{"id":16379498,"url":"https://github.com/maxlego08/zvillagerfight","last_synced_at":"2026-06-20T03:31:49.889Z","repository":{"id":106314513,"uuid":"361489087","full_name":"Maxlego08/zVillagerFight","owner":"Maxlego08","description":null,"archived":false,"fork":false,"pushed_at":"2022-09-21T10:58:48.000Z","size":285,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-21T13:17:25.962Z","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":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Maxlego08.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}},"created_at":"2021-04-25T17:08:11.000Z","updated_at":"2022-06-25T10:12:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"bbc4dcad-eb8b-41b9-bf69-641d8e9b3df6","html_url":"https://github.com/Maxlego08/zVillagerFight","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Maxlego08/zVillagerFight","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maxlego08%2FzVillagerFight","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maxlego08%2FzVillagerFight/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maxlego08%2FzVillagerFight/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maxlego08%2FzVillagerFight/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Maxlego08","download_url":"https://codeload.github.com/Maxlego08/zVillagerFight/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maxlego08%2FzVillagerFight/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34556494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"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-10-11T03:48:49.928Z","updated_at":"2026-06-20T03:31:49.871Z","avatar_url":"https://github.com/Maxlego08.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Template Plugin\n\nHere is a simple project for the quick creation of minecraft plugin.\nWorks from version 1.7.10 to version 1.15.2\n\n## Features\n\n* Commands\n* TabCompleter\n* Inventories\n* Json file\n* Useful function (in the class ZUtils)\n* ItemBuilder\n* CooldownBuilder\n* TimerBuilder\n* Pagination\n* Inventory button\n* Custom Event\n* YML Loader (itemstack and button)\n* Scoreboard (https://github.com/MrMicky-FR/FastBoard)\n\n## Command example:\nAdd a command\u003cbr\u003e\nYou will create a command with the addCommand (command, class extant VCommand), this will save your command and add its executor in the class CommandManager \u003cbr\u003e\nTo add a command with an argument you must pass in setting the parent class\n```java\naddCommand(\"test\", new CommandTest());\nregister(\"test\", new CommandTest());\n```\nYou can directly add command from the main class:\n```java\nthis.registerCommand(\"command\", new CommandTest(), \"myaliaisase\");\n```\n\n* CommandTest\n```java\npublic class CommandTest extends VCommand {\n\n\tpublic CommandTest() {\n\t\tthis.addSubCommand(new CommanndTestSub());\n\t}\n\t\n\t@Override\n\tpublic CommandType perform(Template main) {\n\t\t\n\t\tModuleTest.getInstance().test(sender);\n\t\t\n\t\treturn CommandType.SUCCESS;\n\t}\n}\n```\n* CommandTestSub\n```java\npublic class CommanndTestSub extends VCommand {\n\n\tpublic CommanndTestSub() {\n\t\tthis.addSubCommand(\"sub\");\n\t\tthis.addRequireArg(\"location\");\n\t}\n\n\t@Override\n\tpublic CommandType perform(Template main) {\n\n\t\tLocation location = argAsLocation(0);\n\t\tplayer.teleport(location);\n\t\t\n\t\treturn CommandType.SUCCESS;\n\t}\n\n}\n```\n* Add custom tab\n```java\npublic class CommandTest extends VCommand {\n\n\tpublic CommandTest() {\n\t\tthis.addSubCommand(new CommanndTestSub());\n\t\tthis.setTabCompletor();\n\t}\n\t\n\t@Override\n\tpublic CommandType perform(Template main) {\n\t\t\n\t\tModuleTest.getInstance().test(sender);\n\t\t\n\t\treturn CommandType.SUCCESS;\n\t}\n\t\n\t@Override\n\tpublic List\u003cString\u003e toTab(Template plugin, CommandSender sender, String[] args) {\n\n\t\tif (args.length == 3) {\n\n\t\t\tString startWith = args[2];\n\n\t\t\tList\u003cString\u003e entities = new ArrayList\u003cString\u003e();\n\t\t\tfor (EntityType type : EntityType.values()) {\n\t\t\t\tif (type.isAlive() \u0026\u0026 !type.equals(EntityType.PLAYER)) {\n\t\t\t\t\tif (startWith.length() == 0 || type.name().toLowerCase().startsWith(startWith))\n\t\t\t\t\t\tentities.add(name(type.name()));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn entities;\n\n\t\t}\n\n\t\treturn null;\n\t}\n}\n```\n\n## Inventories\nYou can create inventories with the same principle as for commands.\u003cbr\u003e\nSo, you will create your class that will be extended from VInventory and then add it to the InventoryManager class with a unique ID\n\n```java\naddInventory(Inventory.INVENTORY_TEST, new InventoryExample());\n```\n* InventoryExample \u003cbr\u003e\nSo you have the three most common vents for menu use that will be called by the class\n\n```java\npublic class InventoryExample extends VInventory {\n\n\t@Override\n\tpublic InventoryResult openInventory(Template main, Player player, int page, Object... args)\n\t\t\tthrows InventoryOpenException {\n\t\t\n\t\tcreateInventory(\"myInventory\", 54);\n\t\t\n\t\tItemBuilder builder = new ItemBuilder(Material.DIAMOND);\n\t\taddItem(35, builder).setLeftClick(event -\u003e {\n\t\t\t//When a player clicks left\n\t\t}).setRightClick(event -\u003e {\n\t\t\t//When a player right clicks\n\t\t}).setMiddleClick(event -\u003e {\n\t\t\t//When a player middle clicks\n\t\t}).setClick(event -\u003e {\n\t\t\t//When the player clicks, whether it's left, right or middle\n\t\t});\n\t\t\n\t\treturn InventoryResult.SUCCESS;\n\t}\n\n\t@Override\n\tprotected void onClose(InventoryCloseEvent event, Template plugin, Player player) {\n\n\t}\n\n\t@Override\n\tprotected void onDrag(InventoryDragEvent event, Template plugin, Player player) {\n\n\t}\n\n}\n```\n* InventoryPagination \u003cbr\u003e\nWith this you will be able to create several pages based on a list, everything is managed automatically by the plugin.\nIn this example, there will be several pages depending on an itemstack\n```java\npublic class InventoryExample extends PaginateInventory\u003cItemStack\u003e {\n\n\tpublic InventoryExample() {\n\t\tsuper(\"My cystom name %p%/%mp%\", InventorySize.FULL_INVENTORY);\n\t}\n\n\t@Override\n\tpublic ItemStack buildItem(ItemStack object) {\n\t\treturn object;\n\t}\n\n\t@Override\n\tpublic void onClick(ItemStack object, ItemButton button) {\n\t\tmessage(player, \"§eYou click on \" + getItemName(object));\n\t}\n\n\t@Override\n\tpublic List\u003cItemStack\u003e preOpenInventory() {\n\t\t//You must put your list here\n\t\treturn Arrays.asList(new ItemStack(Material.DIAMOND), new ItemStack(Material.EMERALD));\n\t}\n\n\t@Override\n\tpublic void postOpenInventory() {\n\t\t// TODO Auto-generated method stub\n\t\t\n\t}\n\n\t@Override\n\tprotected void onClose(InventoryCloseEvent event, Template plugin, Player player) {\n\t\t// TODO Auto-generated method stub\n\t\t\n\t}\n\n\t@Override\n\tprotected void onDrag(InventoryDragEvent event, Template plugin, Player player) {\n\t\t// TODO Auto-generated method stub\n\t\t\n\t}\n\t\n\t//To avoid problems directly make your own clone of the class\n\t@Override\n\tprotected InventoryExample clone() {\n\t\treturn new InventoryExample();\n\t}\n\n}\n```\n\nHere is an example of use in the \u003ca href=\"https://www.spigotmc.org/resources/69465/\"\u003ezSpawner\u003c/a\u003e plugin.\nThe inventory will create several pages based on a spawner list. \n```java\npublic class InventorySpawnerPaginate extends PaginateInventory\u003cSpawner\u003e {\n\n\tprivate PlayerSpawner playerSpawner;\n\n\tpublic InventorySpawnerPaginate() {\n\t\tsuper(Config.inventoryName, Config.inventorySize);\n\t}\n\n\t@Override\n\tpublic ItemStack buildItem(Spawner object) {\n\t\treturn object.getItemStack();\n\t}\n\n\t@Override\n\tpublic void onClick(Spawner object, ItemButton button) {\n\n\t\tif (object.isPlace()) {\n\n\t\t\tobject.delete(manager.getBoard());\n\t\t\tmessage(player, Message.REMOVE_SPAWNER);\n\t\t\tcreateInventory(player, Inventory.INVENTORY_SPAWNER_PAGINATE, getPage(), playerSpawner);\n\n\t\t\treturn;\n\t\t}\n\n\t\tSpawnerPrePlaceEvent event = new SpawnerPrePlaceEvent(player, object, playerSpawner);\n\t\tevent.callEvent();\n\n\t\tif (event.isCancelled())\n\t\t\treturn;\n\n\t\tplayerSpawner.setCurrentPlacingSpawner(object);\n\t\tplayer.closeInventory();\n\t\tmessage(player, Message.PLACE_SPAWNER_START);\n\n\t}\n\n\t@Override\n\tpublic List\u003cSpawner\u003e preOpenInventory() {\n\t\t//The list is retrieved according to an argument sent during the opening of the inventory\n\t\tplayerSpawner = (PlayerSpawner) args[0];\n\t\treturn playerSpawner.getShortSpawners();\n\t}\n\n\t@Override\n\tpublic void postOpenInventory() {\n\n\t\tif (Config.displayInformation) {\n\t\t\tButton button = Config.buttonInformation;\n\t\t\tint slot1 = button.getSlot() \u003e inventorySize ? infoSlot : button.getSlot();\n\t\t\taddItem(slot1, button.toItemStack(playerSpawner)).setClick(event -\u003e {\n\t\t\t\tplayerSpawner.toggleShort();\n\t\t\t\tcreateInventory(player, Inventory.INVENTORY_SPAWNER_PAGINATE, getPage(), playerSpawner);\n\t\t\t});\n\t\t}\n\t\t\n\t\tif (Config.displayRemoveAllButton) {\n\t\t\tButton button = Config.buttonRemoveAll;\n\t\t\tint slot1 = button.getSlot() \u003e inventorySize ? removeAllSlot : button.getSlot();\n\t\t\taddItem(slot1, button.toItemStack(playerSpawner)).setClick(event -\u003e {\n\t\t\t\tplayerSpawner.deleteAllSpawners(manager.getBoard());\n\t\t\t\tcreateInventory(player, Inventory.INVENTORY_SPAWNER_PAGINATE, getPage(), playerSpawner);\n\t\t\t});\n\t\t}\n\n\t}\n\n\t@Override\n\tprotected void onClose(InventoryCloseEvent event, ZSpawnerPlugin plugin, Player player) {\n\n\t}\n\n\t@Override\n\tprotected void onDrag(InventoryDragEvent event, ZSpawnerPlugin plugin, Player player) {\n\n\t}\n\n\t@Override\n\tprotected InventorySpawnerPaginate clone() {\n\t\treturn new InventorySpawnerPaginate();\n\t}\n\n}\n```\n\nYou can directly add inventory from the main class:\n```java\nthis.registerInventory(Inventory.INVENTORY_TEST, new InventoryExample());\n```\n\n## Json Saver\n\nYou will be able to create class to save anything in json very simply\n```java\npublic class Config implements Saveable {\n\n\tpublic static String version = \"0.0.0.1\";\n\t\n\t@Override\n\tpublic void save(Persist persist) {\n\t\tpersist.save(this, \"config\");\n\t}\n\n\t@Override\n\tpublic void load(Persist persist) {\n\t\tpersist.loadOrSaveDefault(this, Config.class, \"config\");\n\t}\n}\n```\nYou must then add the class like this in the main class\n```java\naddSave(new ConfigExample());\n```\n\n## Pagination\n\nYou can easily make list or map pagination\n\n* Create a pagination\n```java\nPagination\u003cT\u003e pagination = new Pagination\u003cT\u003e();\n```\n\n* Simple pagination\n```java\nList\u003cT\u003e list = pagination.paginate(List\u003cT\u003e list, int size, int page)\nList\u003cT\u003e list = pagination.paginate(Map\u003c?, T\u003e map, int size, int page)\n```\n\n* Reverse pagination\n```java\nList\u003cT\u003e list = pagination.paginateReverse(List\u003cT\u003e list, int size, int page)\nList\u003cT\u003e list = pagination.paginateReverse(Map\u003c?, T\u003e map, int size, int page)\n```\n\n## YML Loader\n\n* ItemStack\nYou will be able to recover and save an itemstack according to a YamlConfiguration and a path\n```java\nLoader\u003cItemStack\u003e loader = new ItemStackYAMLoader();\nItemStack item = loader.load(configuration, path);\nloader.save(item, configuration, path);\n```\n\n## Scoreboard (https://github.com/MrMicky-FR/FastBoard)\nYou will be able to manage scoreboards very simply with the ScoreBoardManager class. It is initialized directly in the main class but you will have to make additions to make the scoreboard work\n\n* Update lines\n\nYou will be able to add a consumer which will update the lines according to a Player, you can also activate a task to manage the automatic update\n```java\nscoreboardManager.setLines(player -\u003e {\n\tList\u003cString\u003e lines = new ArrayList\u003c\u003e();\n\t\n\tlines.add(\"\"); // Empty line\n\tlines.add(\"Hey \" + player.getName());\n\tlines.add(\"\"); // Empty line\n\tlines.add(\"Online: \" + getServer().getOnlinePlayers().size());\n\t\n\treturn lines;\n});\n```\nTo start the task you have two choices, either the `` scoreboardManager.schedule (); `` or the `` scoreboardManager.setLines (player -\u003e {return lines};``\n\n* Update title\n\n```java\nscoreboardManager.updateTitle(player, title);\n```\n\n* Update line\n\nYou will be able to modify just one line according to its index\n```java\nscoreboardManager.updateLine(player, line, string);\n```\n\n* Delete scoreboard\n\n```java\nscoreboardManager.delete(player);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxlego08%2Fzvillagerfight","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxlego08%2Fzvillagerfight","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxlego08%2Fzvillagerfight/lists"}