SpigotupDatechecker adalah perpustakaan yang sederhana namun kuat untuk menambahkan pemeriksa pembaruan yang berfungsi dengan sempurna ke plugin Anda. Gulir sampai ke bawah untuk informasi Maven, Javadocs, dan plugin contoh lengkap!
Penulis: Mfnalex
Kontributor: Mrnemo64
Thread spigotmc terkait
Anda dapat mengeluarkan cek pembaruan manual dan berulang dan mengirim hasilnya sebagai pesan ingame kepada pemain tertentu dan/atau membuatnya dicetak ke konsol.
Semua cek dilakukan secara tidak sinkron. Ketika cek selesai, acara khusus dipanggil. Pemeriksa pembaruan itu sendiri mendengarkannya dan secara otomatis dapat memberi tahu operator untuk bergabung atau pemain dengan izin tertentu.
Tentu saja, Anda juga dapat mendengarkan diri sendiri untuk melakukan apa pun yang Anda suka setelah versi baru terdeteksi.
Dimungkinkan juga untuk menentukan dua tautan unduhan jika plugin Anda tersedia sebagai keduanya, versi gratis dan berbayar, dan Anda dapat menambahkan tautan ke halaman donasi dan changelog Anda.
Anda dapat menyediakan semua tautan itu, termasuk ke titik akhir API di mana versi terbaru diperiksa sendiri, atau hanya menyediakan ID sumber daya spigotmc dari plugin Anda untuk Pemeriksa Pembaruan untuk mendapatkan tautan tersebut secara otomatis.
Titik akhir API yang didukung untuk mengambil informasi versi:
UpdateChecker tersedia di repositori publik saya:
< 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 >
Harap dicatat bahwa Anda juga harus menaungi dan memindahkan UpdateChecker ke file .jar Anda:
< 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: " ))
}
}
}
Gagal merelokasi paket akan membuat pembaruan lempar pengecualian, jadi pindah!
Untuk mendapatkan UpdateChecker yang berfungsi, ini sudah cukup:
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
}
}
Kode di atas akan mencetak pesan ke konsol setelah versi baru tersedia dan juga mengirim pesan ke setiap OP yang bergabung dengan server. Jika tidak ada versi baru yang ditemukan, tidak ada pesan yang akan dikirim.
Tentu saja, ada lebih banyak opsi yang dapat Anda gunakan. Misalnya:
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
}
}
Sekarang bayangkan Anda memiliki dua versi plugin Anda. Satu versi gratis dan versi berbayar dengan fitur tambahan, seperti plugin Angelchest Free dan Angelchest Plus saya. Jika kedua plugin berbagi basis kode yang sama dan hanya memutuskan runtime apakah akan membuka kunci fitur premium, Anda dapat dengan mudah mendapatkan sesuatu seperti ini berfungsi:
Pengguna versi gratis akan mendapatkan tautan ke kedua versi, sehingga mereka dapat melihat keunggulan versi berbayar Anda, sementara kami tidak ingin mengirim tautan versi gratis ke pengguna yang sudah membeli versi berbayar. Pemeriksa Pembaruan menggunakan placeholder sumber daya premium SpigotMC untuk mendeteksi apakah server menggunakan versi berbayar, tetapi Anda juga dapat mengganti deteksi ini menggunakan UpdateChecker#SetusingPaidVersion (Boolean) .
Untuk mencapai ini, Anda bisa melakukan ini:
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 ();
}
}
Pengguna versi gratis sekarang akan melihat kedua tautan:
Namun pengguna versi berbayar hanya akan mendapatkan tautan unduhan versi berbayar, seperti di tangkapan layar di atas.
Anda dapat menggunakan konsumen untuk mengubah perilaku pemeriksa pembaruan.
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 yang diterbitkan di repositori publik saya telah dijalankan melalui AllatorI untuk mengurangi ukuran file sekitar 30%. Itu tidak mempengaruhi kinerja dengan cara negatif apa pun. Pengaturan kebingungan yang digunakan diizinkan pada spigotmc untuk plugin gratis dan berbayar.
Jika Anda suka membangunnya sendiri , cukup komentari bagian Maven-Exec-Plugin di pom.xml Anda (saat ini baris 167 hingga 192).
Javadocs tersedia di sini: https://hub.jeff-media.com/javadocs/spigotupdatechecker/
Contoh plugin: https://github.com/jeff-media-gbr/spigot-pdatechecker-example
Perpustakaan CustomBlockData saya menyediakan persistentDataContainer untuk setiap blok di dunia Anda - dengan mudah menyimpan setiap informasi yang Anda sukai di dalam blok, tanpa diperlukan penyimpanan eksternal!
Menambahkan satu ton PersistentDatatypes baru untuk digunakan dengan persistentDataContainer Bukkit.
Jangan ragu untuk bergabung dengan perselisihan saya untuk mendapatkan bantuan.