SpigotupDateChecker es una biblioteca simple pero poderosa para agregar un verificador de actualizaciones perfectamente que funcione a sus complementos. ¡Desplácese hasta el fondo para obtener información maven, javadocs y un complemento de ejemplo completo!
Autor: Mfnalex
Colaboradores: MRNEMO64
Hilo SpigotMC relacionado
Puede emitir cheques de actualización manuales y repetidos y enviar el resultado como mensaje de juego a jugadores específicos y/o hacer que se impriman en la consola.
Todos los cheques se realizan de manera asincrónica. Cuando se realiza el cheque, se llama a un evento personalizado. El comprobante de actualización en sí mismo lo escucha y puede notificar automáticamente a los operadores en unión o jugadores con un permiso específico.
Por supuesto, también puedes escuchar el UpdateCheckevent tú mismo para hacer lo que quieras una vez que se detecta una nueva versión.
También es posible definir dos enlaces de descarga si su complemento está disponible como una versión gratuita y pagada, y puede agregar enlaces a su página de donación y ChangeLog.
Puede proporcionar todos esos enlaces, incluido el punto final de la API, donde se verifica la última versión usted mismo, o simplemente proporcionar la ID de recurso SpigotMC de su complemento para el verificador de actualizaciones para obtener esos enlaces automáticamente.
Puntos finales de API compatibles para recuperar la información de la versión:
El UpdateChecker está disponible en mi repositorio público:
< 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 >
Tenga en cuenta que también tendrá que sombrear y reubicar el UpdateChecker en su archivo .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: " ))
}
}
}
No reubicar el paquete hará que el UpdateChecker organice una excepción, ¡así que reúnalo!
Para obtener un UpdateChecker que funcione, esto ya es suficiente:
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
}
}
El código anterior imprimirá un mensaje en la consola una vez que esté disponible una nueva versión y también enviará un mensaje a cada OP que se une al servidor. Si no se encuentra ninguna versión nueva, no se enviará ningún mensaje.
Por supuesto, hay muchas más opciones que puede usar. Por ejemplo:
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
}
}
Ahora imagine que tiene dos versiones de su complemento. Una versión gratuita y una versión paga con características adicionales, como mi complemento AngelChest Free y AngelChest Plus. Si ambos complementos comparten la misma base de código y solo deciden el tiempo de ejecución si desbloquear las características premium, puede hacer que algo así funcione:
Los usuarios de la versión gratuita obtendrán enlaces a ambas versiones, para que puedan ver las ventajas de su versión pagada, mientras que no queremos enviar el enlace de versión gratuito a los usuarios que ya compraron la versión paga. El comprobador de actualizaciones utiliza los marcadores de posición de recursos premium de SpigotMC para detectar si un servidor está utilizando la versión pagada, pero también puede anular esta detección utilizando UpdateChecker#setUsingPaidVersion (boolean) .
Para lograr esto, puedes hacer esto:
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 ();
}
}
Los usuarios de la versión gratuita ahora verán ambos enlaces:
Sin embargo, los usuarios de la versión pagada solo obtendrán el enlace de descarga de la versión paga, al igual que en las capturas de pantalla en la parte superior.
Puede usar a los consumidores para cambiar el comportamiento del verificador de actualizaciones.
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 ();
}
}
El .JAR publicado en mi repositorio público se ha ejecutado a través de Allatori para disminuir el tamaño del archivo en aproximadamente un 30%. No afecta el rendimiento de ninguna manera negativa. La configuración de ofuscación utilizada se permite en SpigotMC para complementos gratuitos y pagados.
Si le gusta construirlo usted mismo , simplemente comente la parte Maven-Exec-Plugin en su pom.xml (actualmente líneas 167 a 192).
Los javadocs están disponibles aquí: https://hub.jeff-media.com/javadocs/spigotupdateChecker/
Plugin de ejemplo: https://github.com/jeff-media-gbr/spigot-updateChecker-example
Mi biblioteca CustomBlockData proporciona un PersistentDatacontainer para cada bloque de su mundo: ¡guarde fácilmente cada información que desee dentro de los bloques, sin necesidad de ningún almacenamiento externo!
Agrega una tonelada de nuevos PersistentDatatypes para usar con el PersistentDatacontainer persistente de Bukkit.
Siéntase libre de unirse a mi discordia para obtener ayuda.