O SpigotUpDateChecker é uma biblioteca simples, mas poderosa, para adicionar um verificador de atualização perfeitamente funcional aos seus plugins. Role todo o caminho até o fundo para obter informações sobre o Maven, Javadocs e um plug -in completo de exemplo!
Autor: MfNalex
Colaboradores: MRNEMO64
Tópico SpigotMC relacionado
Você pode emitir verificações manuais e repetidas de atualização e enviar o resultado como uma mensagem de jogo para players específicos e/ou imprimi -los no console.
Todas as verificações são feitas de forma assíncrona. Quando a verificação é concluída, um evento personalizado é chamado. O próprio verificador de atualização ouve e pode notificar automaticamente os operadores em junção ou jogadores com uma permissão específica.
Obviamente, você também pode apenas ouvir o UpdateCheckevent para fazer o que quiser quando uma nova versão for detectada.
Também é possível definir dois links para download se o seu plug -in estiver disponível como uma versão gratuita e paga, e você poderá adicionar links à sua página de doação e Changelog.
Você pode fornecer todos esses links, inclusive para o endpoint da API, onde a versão mais recente é verificada ou apenas fornecer o ID do recurso SpigotMC do seu plug -in para o verificador de atualização para obter esses links automaticamente.
Pontos de extremidade da API suportados para recuperar informações da versão:
O UpdateChecker está disponível em meu repositório 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 >
Observe que você também terá que sombrear e realocar o UpdateChecker em seu arquivo .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: " ))
}
}
}
Deixar de realocar o pacote fará com que o UpdateChecker jogue uma exceção, então realoce -o!
Para obter um UpdateChecker de trabalho, isso já é 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
}
}
O código acima imprimirá uma mensagem para o console assim que uma nova versão estiver disponível e também enviará uma mensagem para cada OP ingressar no servidor. Se nenhuma versão nova for encontrada, nenhuma mensagem será enviada.
Obviamente, existem muitas outras opções que você pode usar. Por exemplo:
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
}
}
Agora imagine que você tem duas versões do seu plugin. Uma versão gratuita e uma versão paga com recursos extras, como o meu plug -in AngelChest Free e Angelchest Plus. Se ambos os plugins compartilharem a mesma base de código e decidirem apenas sobre o tempo de execução se devem desbloquear os recursos premium, você poderá facilmente obter algo assim funcionando:
Os usuários da versão gratuita receberão links para as duas versões, para que possam ver as vantagens da sua versão paga, enquanto não queremos enviar o link da versão gratuita para usuários que já compraram a versão paga. O verificador de atualização usa os espaços reservados para recursos premium do SpigotMC para detectar se um servidor está usando a versão paga, mas você também pode substituir essa detecção usando o UpdateChecker#setUsingPaidVersion (boolean) .
Para conseguir isso, você pode simplesmente fazer isso:
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 ();
}
}
Os usuários da versão gratuita agora verão os dois links:
Os usuários da versão paga, no entanto, receberão apenas o link de download da versão paga, assim como nas capturas de tela no topo.
Você pode usar os consumidores para alterar o comportamento do verificador de atualização.
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 ();
}
}
O .jar publicado em meu repositório público foi executado através do Allatori para diminuir o tamanho do arquivo em cerca de 30%. Não afeta o desempenho de maneira negativa. As configurações de ofuscação usada são permitidas no SpigotMC para plugins gratuitos e pagos.
Se você gosta de construí-lo , basta comentar a peça Maven-Exec-Plugin em seu Pom.xml (atualmente linhas 167 a 192).
Javadocs estão disponíveis aqui: https://hub.jeff-media.com/javadocs/spigotupdatechecker/
Exemplo Plugin: https://github.com/jeff-media-gbr/spigotupdatechecker-example
Minha biblioteca CustomBlockData fornece um PersistentDatAContAiner para cada bloco do seu mundo - economize facilmente todas as informações que você gosta interna, sem qualquer armazenamento externo necessário!
Adiciona uma tonelada de novos catatipos persistentes para usar com o PersistentDatAcontAiner de Bukkit.
Sinta -se à vontade para se juntar à minha discórdia em busca de ajuda.