{"id":19795289,"url":"https://github.com/spliterash/springspigot","last_synced_at":"2025-05-01T03:30:24.126Z","repository":{"id":47702375,"uuid":"458628555","full_name":"Spliterash/SpringSpigot","owner":"Spliterash","description":"spring api to spigot plugins","archived":false,"fork":false,"pushed_at":"2023-03-24T14:04:47.000Z","size":153,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-06T08:06:42.917Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Spliterash.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-12T20:12:26.000Z","updated_at":"2024-05-05T16:07:03.000Z","dependencies_parsed_at":"2023-02-04T08:46:39.224Z","dependency_job_id":null,"html_url":"https://github.com/Spliterash/SpringSpigot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spliterash%2FSpringSpigot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spliterash%2FSpringSpigot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spliterash%2FSpringSpigot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spliterash%2FSpringSpigot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Spliterash","download_url":"https://codeload.github.com/Spliterash/SpringSpigot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251817804,"owners_count":21648810,"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-12T07:15:57.608Z","updated_at":"2025-05-01T03:30:23.849Z","avatar_url":"https://github.com/Spliterash.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Spigot\n\nСкачать последнюю версию плагина\nможно [отсюда](https://jenkins.spliterash.ru/job/public/job/SpringSpigot/)\n\nЭтот плагин позволяет использовать spring для написания майнкрафт плагинов.\n\nОсновное отличие от всех остальных spring spigot либ то, что это отдельный плагин, его не надо шейдить или ещё что либо\nделать, просто положил в plugins, а затем используешь в своих плагинах всю мощь спринга.\n\nЧтобы иметь возможность использовать заготовленные классы из этой либы, нужно просто подключить её как compileOnly(ну\nили provided если вы любитель мавена) зависимость\n\n```groovy\nrepositories {\n    maven {\n        url = uri(\"https://repo.spliterash.ru/group/\")\n    }\n}\n\ndependencies {\n    compileOnly(\"ru.spliterash:spring-spigot:1.0.7\")\n}\n```\n\nДальше, нужно создать класс Spring приложения\n\n```java\n\n@SpringBootApplication(scanBasePackages = \"ru.yourpackage.plugin\")\npublic class YourAmazingPluginApplication {\n}\n```\n\nЗатем, надо поменять главный класс вашего плагина, на следующее\n\n```java\npublic class YourAmazingPlugin extends SpringSpigotPlugin {\n    @Override\n    protected Class\u003c?\u003e getAppClass() {\n        return YourAmazingPluginApplication.class;\n    }\n}\n```\n\nПосле этого, можете использовать всю мощь spring'а. Для каждого плагина создаётся свой spring context, поэтому можно\nспокойно использовать его в множестве плагинов\n\n```java\n\n@Component\npublic class SomeService {\n    // CODE\n}\n```\n\nТак же имеются удобства для майнкрафта\n\n### SpigotListener\n\nАвтоматически регистрирует класс в Bukkit.getPluginManager().registerEvents()\n\n```java\n\n@SpigotListener\n@RequiredArgsConstructor // Lombok\npublic class PlayerListener implements Listener {\n    private final SomeService someService;\n\n    @EventHandler\n    public void onMove(PlayerMoveEvent e) {\n        someService.playerMove(e.getPlayer());\n    }\n\n}\n```\n\n### config.yml\nЧтобы spring мог использовать config.yml как источник конфигурации, это надо указать в application.yml\n```yaml\nspring-spigot:\n  config: config.yml\n```\nПосле этого вы можете получать значения из конфига через `@Value`\n\n```java\n\n@Component\npublic class SomeService {\n    public SomeService(@Value(\"${config.value}\") String value) {\n        // CODE\n    }\n}\n\n@SpigotListener\n@ConditionalOnExpression(\"${pvp-handle.enable:false}\")\n// значение pvp.enable в конфиге true, если такого нет, то по дефолту false\npublic class PvpListener implements Listener {\n\n}\n```\n\n### Command\n\nРегистрирует обработчик команд в spigot\n\n```java\n\n@SpigotCommand(command = \"tp\")\npublic class TpExecutor implements CommandExecutor {\n    // Реализация\n}\n```\n\n### Conditional\n\n`@ConditionalOnMinecraftVersion` Создаст бин только в том случае, если версия майнкрафта попадает в диапазон\n\n```java\n\n@Component\n@ConditionalOnMinecraftVersion(min = \"1.13\", max = \"1.16.5\")\npublic class PacketAdapter_13_16 implements PacketAdapter {\n    // Реализация отправки пакетов с версии 1.13 по 1.16.5\n}\n```\n\n### Application.yml\n\nЕсть возможность использовать MongoTemplate, для этого надо в файле application.yml, который лежит в\nресурсах плагина указать\n\nПо умолчанию стоит false\n\n`spring-spigot.config` отвечает за название файла спринговского конфига, который спринг загрузит в себе, и будет считать\nего за dataSource. По дефолту там ничего нет\n```yaml\nspring-spigot:\n  config: spring-config.yml\n  db:\n    mongo: true # Включает mongo\n```\n\n### Перезагрузка\n\nДля того чтобы реализовать перезагрузку в своём плагине, достаточно сделать примерно следующее\n\n```java\n\n@SpigotCommand(command = \"plugin_name\")\n@RequiredArgsConstructor\npublic class PluginCommand implements CommandExecutor {\n    private final PluginCallback pluginCallback;\n    // Или\n    private final YourAmazingPlugin amazingPlugin;\n\n    @Override\n    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {\n        if (args.length == 0)\n            return true;\n\n        if (args[0].equals(\"reload\"))\n            pluginCallback.reload();\n        return true;\n    }\n}\n```\n\nЭто завершит приложение spring, а затем заново создаст его, те все компоненты будут созданы заново\n\nМожно повешать внутри них `@PreDestroy`, чтобы завершить игровые события при перезагрузке, или выключении сервера\n\n### Import компонентов из других SpringSpigot плагинов\n\nЕсли у вас есть другой плагин, который работает через SpringSpigot, то вы можете легко импортировать компоненты из него\n\n\n```java\n@ConditionalOnClass(AnotherSpringSpigotPlugin.class) // Optional\n@ImportSpringSpigotBeans(plugin = AnotherSpringSpigotPlugin.class, beans = {AnotherPluginBean1.class, AnotherPluginBean2.class})\npublic class SpringConfiguration {\n\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspliterash%2Fspringspigot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspliterash%2Fspringspigot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspliterash%2Fspringspigot/lists"}