Spigotupdatechecker - это простая, но мощная библиотека, чтобы добавить идеально работающую проверку обновления в ваши плагины. Прокрутите вниз до дна для информации Maven, Javadocs и полного примера плагина!
Автор: mfnalex
Авторы: mrnemo64
Связанный поток Spigotmc
Вы можете выпустить ручные и повторяющиеся проверки обновлений и отправить результат в качестве сообщества в качестве ингументального сообщения конкретным игрокам и/или напечатать их на консоли.
Все чеки сделаны асинхронно. Когда проверка будет сделана, вызывается пользовательское событие. Сама проверка обновлений слушает его и может автоматически уведомлять операторов на Join или игроков с определенным разрешением.
Конечно, вы также можете просто послушать UpdateCheckevent, чтобы сделать все, что вам нравится после обнаружения новой версии.
Также возможно определить две ссылки загрузки, если ваш плагин доступен в качестве оба, бесплатную и платную версию, и вы можете добавить ссылки на страницу пожертвований и Changelog.
Вы можете либо предоставить все эти ссылки, в том числе в конечную точку API, где сами проверяется последняя версия, либо просто предоставить идентификатор ресурса SPIGOTMC вашего плагина для автоматического получения этих ссылок.
Поддерживаемые конечные точки API для получения информации о версии:
UpdateChecker доступен в моем публичном хранилище:
< repositories >
< repository >
< id >jeff-media-public</ id >
< url >https://repo.jeff-media.com/public/</ url >
</ repository >
</ repositories >
< dependencies >
< dependency >
< groupId >com.jeff_media</ groupId >
< artifactId >SpigotUpdateChecker</ artifactId >
< version >3.0.3</ version >
< scope >compile</ scope >
</ dependency >
</ dependencies >
Обратите внимание, что вам также придется затенять и переместить UpdateChecker в свой файл .jar:
< build >
...
< plugins >
...
< plugin >
< groupId >org.apache.maven.plugins</ groupId >
< artifactId >maven-shade-plugin</ artifactId >
< version >3.3.0</ version >
< configuration >
< relocations >
<!-- Using the maven-shade-plugin to shade and relocate the UpdateChecker -->
<!-- Replace "your.package" with your plugin's package name -->
< relocation >
< pattern >com.jeff_media.updatechecker</ pattern >
< shadedPattern >your.package.updatechecker</ shadedPattern >
</ relocation >
</ relocations >
</ configuration >
< executions >
< execution >
< phase >package</ phase >
< goals >
< goal >shade</ goal >
</ goals >
</ execution >
</ executions >
</ plugin >
</ plugins >
</ build >
plugins {
id( " com.github.johnrengelman.shadow " ) version " x.x.x " // Used for shading
}
repositories {
maven(url = " https://repo.jeff-media.com/public/ " )
}
dependencies {
implementation( " com.jeff_media:SpigotUpdateChecker:3.0.3 " )
}
tasks.named< ShadowJar >( " shadowJar " ) {
dependencies {
relocate( " com.jeff_media " , " your.package.lib " ) {
include(dependency( " com.jeff_media: " ))
}
}
}
Неспособность переместить пакет заставит UpdateChecker бросить исключение, так что переместите его!
Чтобы получить рабочую UpdateChecker, этого уже достаточно:
public class MyPlugin extends JavaPlugin {
// To get the Resource ID, look at the number at the end of the URL of your plugin's SpigotMC page
private static final String SPIGOT_RESOURCE_ID = "59773" ;
@ Override
public void onEnable () {
new UpdateChecker ( this , UpdateCheckSource . SPIGOT , SPIGOT_RESOURCE_ID ) // You can also use Spiget instead of Spigot - Spiget's API is usually much faster up to date.
. checkEveryXHours ( 24 ) // Check every 24 hours
. checkNow (); // And check right now
}
}
Приведенный выше код будет распечатать сообщение в консоли после доступной новой версии, а также отправит сообщение на каждый соединение OP, соединяющего сервер. Если новая версия не найдена, сообщения не будет отправлено.
Конечно, есть еще много вариантов, которые вы можете использовать. Например:
import com . jeff_media . updatechecker . UpdateCheckSource ;
public class MyPlugin extends JavaPlugin {
private static final String SPIGOT_RESOURCE_ID = "59773" ;
@ Override
public void onEnable () {
new UpdateChecker ( this , UpdateCheckSource . CUSTOM_URL , "https://api.jeff-media.de/chestsort/latest-version.txt" ) // A link to a URL that contains the latest version as String
. setDownloadLink ( "https://www.chestsort.de" ) // You can either use a custom URL or the Spigot Resource ID
. setDonationLink ( "https://paypal.me/mfnalex" )
. setChangelogLink ( SPIGOT_RESOURCE_ID ) // Same as for the Download link: URL or Spigot Resource ID
. setNotifyOpsOnJoin ( true ) // Notify OPs on Join when a new version is found (default)
. setNotifyByPermissionOnJoin ( "myplugin.updatechecker" ) // Also notify people on join with this permission
. setUserAgent ( new UserAgentBuilder (). addPluginNameAndVersion ())
. checkEveryXHours ( 0.5 ) // Check every 30 minutes
. checkNow (); // And check right now
}
}
Теперь представьте, что у вас есть две версии вашего плагина. Одна бесплатная версия и платная версия с дополнительными функциями, например, мой Angelchest Free и Angelchest Plus. Если оба плагина обмениваются одной и той же кодовой базой и определитесь только на среде выполнения, будь то разблокировка премиальных функций, вы можете легко получить что -то подобное:
Пользователи бесплатной версии получат ссылки на обе версии, поэтому они могут увидеть преимущества вашей платной версии, в то время как мы не хотим отправлять ссылку на бесплатную версию пользователям, которые уже купили платную версию. Проверка обновлений использует заполнители Prerice Resource Spigotmc для определения того, использует ли сервер платную версию, но вы также можете переопределить это обнаружение, используя UpdateChecker#setusingPaidversion (boolean) .
Чтобы достичь этого, вы можете просто сделать это:
import com . jeff_media . updatechecker . UpdateCheckSource ;
public class MyPlugin extends JavaPlugin {
private static final int ANGELCHEST_FREE = 60383 ;
private static final int ANGELCHEST_PLUS = 88214 ;
private final boolean usingPaidVersion = howEverYouDetectIt ();
@ Override
public void onEnable () {
new UpdateChecker ( this , UpdateCheckSource . CUSTOM_URL , "https://api.jeff-media.de/angelchest/latest-version.txt" )
. setFreeDownloadLink ( ANGELCHEST_FREE )
. setPaidDownloadLink ( ANGELCHEST_PLUS )
. setNameFreeVersion ( "Free" ) // Optional. It's the suffix for the download links
. setNamePaidVersion ( "Plus" ) // when both links are shown.
. checkNow ();
}
}
Пользователи бесплатной версии теперь увидят обе ссылки:
Пользователи платной версии, однако, получат только платную версию ссылки на загрузку, как на скриншотах вверху.
Вы можете использовать потребителей для изменения поведения проверки обновления.
import com . jeff_media . updatechecker . UpdateCheckSource ;
public class MyPlugin extends JavaPlugin {
@ Override
public void onEnable () {
new UpdateChecker ( this , UpdateCheckSource . CUSTOM_URL , "https://api.jeff-media.de/angelchest/latest-version.txt" )
. setDownloadLink ( "https://www.chestsort.de" )
. onSuccess (( commandSenders , latestVersion ) -> {
for ( CommandSender sender : commandSenders ) {
sender . sendMessage ( "This code will run after the update check was successfull." );
}
})
. onFail (( commandSenders , exception ) -> {
for ( CommandSender sender : commandSenders ) {
sender . sendMessage ( "This code will run after the update check failed." );
}
})
. setNotifyRequesters ( false ) // Do not show the default messages, instead only run our custom consumers
. checkNow ();
}
}
.JAR, опубликованный в моем общественном хранилище, был проведен через Allatori, чтобы уменьшить размер файла примерно на 30%. Это не влияет на производительность каким -либо негативным способом. Используемые настройки запутывания допускаются на SPIGOTMC как для бесплатных, так и для платных плагинов.
Если вы любите создавать его самостоятельно , просто прокомментируйте часть Maven-Exec-Plugin в вашем pom.xml (в настоящее время строки с 167 по 192).
Javadocs доступны здесь: https://hub.jeff-media.com/javadocs/spigotupdatechecker/
Пример плагина: https://github.com/jeff-media-gbr/spigot-updatechecker-example
Моя библиотека CustomBlockData предоставляет PersistentDataContainer для каждого блока в вашем мире - легко сохранять каждую информацию, которая вам нравится внутри блоков, без какого -либо внешнего хранилища!
Добавляет кучу новых PersistentDatypes для использования с PersistentDataContainer Буккита.
Не стесняйтесь присоединиться к моему разногласию за помощью.