Skip to content

Repository files navigation

Spring Spigot

Скачать последнюю версию плагина можно отсюда

Этот плагин позволяет использовать spring для написания майнкрафт плагинов.

Основное отличие от всех остальных spring spigot либ то, что это отдельный плагин, его не надо шейдить или ещё что либо делать, просто положил в plugins, а затем используешь в своих плагинах всю мощь спринга.

Чтобы иметь возможность использовать заготовленные классы из этой либы, нужно просто подключить её как compileOnly(ну или provided если вы любитель мавена) зависимость

repositories {
maven {
url = uri("https://repo.spliterash.ru/group/")
}
}
dependencies {
compileOnly("ru.spliterash:spring-spigot:1.0.7")
}

Дальше, нужно создать класс Spring приложения

@SpringBootApplication(scanBasePackages = "ru.yourpackage.plugin")
publicclassYourAmazingPluginApplication {
}

Затем, надо поменять главный класс вашего плагина, на следующее

publicclassYourAmazingPluginextendsSpringSpigotPlugin {
@OverrideprotectedClass<?> getAppClass() {
returnYourAmazingPluginApplication.class;
}
}

После этого, можете использовать всю мощь spring'а. Для каждого плагина создаётся свой spring context, поэтому можно спокойно использовать его в множестве плагинов

@ComponentpublicclassSomeService {
// CODE
}

Так же имеются удобства для майнкрафта

SpigotListener

Автоматически регистрирует класс в Bukkit.getPluginManager().registerEvents()

@SpigotListener@RequiredArgsConstructor// LombokpublicclassPlayerListenerimplementsListener {
privatefinalSomeServicesomeService;
@EventHandlerpublicvoidonMove(PlayerMoveEvente) {
someService.playerMove(e.getPlayer());
}
}

config.yml

Чтобы spring мог использовать config.yml как источник конфигурации, это надо указать в application.yml

spring-spigot:
config: config.yml

После этого вы можете получать значения из конфига через @Value

@ComponentpublicclassSomeService {
publicSomeService(@Value("${config.value}") Stringvalue) {
// CODE
}
}
@SpigotListener@ConditionalOnExpression("${pvp-handle.enable:false}")
// значение pvp.enable в конфиге true, если такого нет, то по дефолту falsepublicclassPvpListenerimplementsListener {
}

Command

Регистрирует обработчик команд в spigot

@SpigotCommand(command = "tp")
publicclassTpExecutorimplementsCommandExecutor {
// Реализация
}

Conditional

@ConditionalOnMinecraftVersion Создаст бин только в том случае, если версия майнкрафта попадает в диапазон

@Component@ConditionalOnMinecraftVersion(min = "1.13", max = "1.16.5")
publicclassPacketAdapter_13_16implementsPacketAdapter {
// Реализация отправки пакетов с версии 1.13 по 1.16.5
}

Application.yml

Есть возможность использовать MongoTemplate, для этого надо в файле application.yml, который лежит в ресурсах плагина указать

По умолчанию стоит false

spring-spigot.config отвечает за название файла спринговского конфига, который спринг загрузит в себе, и будет считать его за dataSource. По дефолту там ничего нет

spring-spigot:
config: spring-config.ymldb:
mongo: true # Включает mongo

Перезагрузка

Для того чтобы реализовать перезагрузку в своём плагине, достаточно сделать примерно следующее

@SpigotCommand(command = "plugin_name")
@RequiredArgsConstructorpublicclassPluginCommandimplementsCommandExecutor {
privatefinalPluginCallbackpluginCallback;
// ИлиprivatefinalYourAmazingPluginamazingPlugin;
@OverridepublicbooleanonCommand(CommandSendersender, Commandcommand, Stringlabel, String[] args) {
if (args.length == 0)
returntrue;
if (args[0].equals("reload"))
pluginCallback.reload();
returntrue;
}
}

Это завершит приложение spring, а затем заново создаст его, те все компоненты будут созданы заново

Можно повешать внутри них @PreDestroy, чтобы завершить игровые события при перезагрузке, или выключении сервера

Import компонентов из других SpringSpigot плагинов

Если у вас есть другой плагин, который работает через SpringSpigot, то вы можете легко импортировать компоненты из него

@ConditionalOnClass(AnotherSpringSpigotPlugin.class) // Optional@ImportSpringSpigotBeans(plugin = AnotherSpringSpigotPlugin.class, beans = {AnotherPluginBean1.class, AnotherPluginBean2.class})
publicclassSpringConfiguration {
}

About

spring api to spigot plugins

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages