ArStats
Versiyon: 1.0.0 Platform: Paper/Spigot 1.21.4+ Java Sürümü: 21
Açıklama
ArStat, Minecraft sunucuları için geliştirilmiş kapsamlı bir oyuncu istatistik takip eklentisidir. Oyuncuların öldürme, ölüm, oynama süresi, kırılan blok ve koyulan blok istatistiklerini günlük, haftalık, aylık ve toplam olarak takip eder. Veriler SQLite veritabanında saklanır, PlaceholderAPI entegrasyonu ile skorboardlarda ve diğer eklentilerde kullanılabilir. Ayrıca diğer pluginlerin istatistik verilerine erişebilmesi için genel bir API sunar.
Özellikler
- 5 Farklı İstatistik Tipi: Öldürme, ölüm, oynama süresi, kırılan blok, koyulan blok
- 4 Zaman Periyodu: Günlük, haftalık, aylık ve toplam istatistikler
- SQLite Veritabanı: Harici veritabanı gerektirmez, hafif ve hızlı
- Önbellek Sistemi: Performans için stat değerleri ve liderlik tabloları bellekte önbelleklenir
- Asenkron Veritabanı İşlemleri: Veritabanı yazma işlemleri ana sunucu ipçiğini engellemez
- Oynama Süresi Takibi: Oyuncu oturum süresi hassas şekilde hesaplanır ve her 5 dakikada diske yazılır
- Liderlik Tabloları: Her stat ve periyot için ilk 10 oyuncunun sıralamasını tutar (her 2 dakikada yenilenir)
- PlaceholderAPI Entegrasyonu: Tüm istatistikler ve liderlik tablosu verileri placeholder olarak kullanılabilir
- Tab Tamamlama: Komutlarda akıllı tab tamamlama desteği
- Genel API: Diğer pluginlerin istatistik verilerine programatik olarak erişmesini sağlar
- Reload Desteği: Sunucu reload sırasında çevrimiçi oyuncuların verileri korunur
Gereksinimler
| Gereksinim | Detay |
|---|---|
| Sunucu | Paper 1.21.4 veya üstü |
| Java | 21 veya üstü |
| PlaceholderAPI | İsteğe bağlı (softdepend) - placeholder desteği için gerekli |
Kurulum
ArStat-1.0.0.jardosyasını sunucunuzunplugins/klasörüne koyun.- Sunucuyu başlatın veya yeniden başlatın.
- Eklenti otomatik olarak
plugins/ArStat/arstat.dbSQLite veritabanını oluşturacaktır. - PlaceholderAPI placeholder desteği için PlaceholderAPI eklentisinin de yüklü olması gerekir.
Komutlar
| Komut | Açıklama | Kullanım |
|---|---|---|
/arstat |
Yardım mesajını gösterir | /arstat |
/arstat reload |
Liderlik tablosu önbelleğini yeniler | /arstat reload |
/arstat top <stat> <periyot> |
Belirtilen stat ve periyot için sıralamayı gösterir | /arstat top kills daily |
/arstat player <oyuncu> |
Bir oyuncunun tüm istatistiklerini gösterir | /arstat player Steve |
Stat Tipleri
| Anahtar | Açıklama |
|---|---|
kills |
Oyuncu öldürmesi |
deaths |
Ölüm sayısı |
playtime |
Oynama süresi (dakika cinsinden) |
blocks_broken |
Kırılan blok sayısı |
blocks_placed |
Koyulan blok sayısı |
Periyot Tipleri
| Anahtar | Açıklama |
|---|---|
daily |
Günlük (bugünün verisi) |
weekly |
Haftalık (Pazartesi - Pazar) |
monthly |
Aylık (ayın 1'inden son gününe) |
total |
Tüm zamanların toplamı |
İzinler
| İzin | Açıklama | Varsayılan |
|---|---|---|
arstat.admin |
Tüm /arstat komutlarına erişim |
op |
PlaceholderAPI Kullanımı
ArStat, PlaceholderAPI yüklü olduğunda arstat placeholder öneki ile çalışan çeşitli placeholder'lar sunar.
Oyuncu İstatistiği
Format: %arstat_<stat>_<periyot>%
Örnekler:
%arstat_kills_daily%- Oyuncunun günlük öldürme sayısı%arstat_deaths_weekly%- Oyuncunun haftalık ölüm sayısı%arstat_playtime_total%- Oyuncunun toplam oynama süresi%arstat_blocks_broken_monthly%- Oyuncunun aylık kırılan blok sayısı%arstat_blocks_placed_total%- Oyuncunun toplam koyulan blok sayısı
Liderlik Tablosu (Değer)
Format: %arstat_<stat>_<periyot>_<sıra>%
Örnekler:
%arstat_kills_daily_1%- Günlük en çok öldüren 1. oyuncunun öldürme sayısı%arstat_playtime_weekly_3%- Haftalık en çok oynayan 3. oyuncunun süresi%arstat_blocks_broken_monthly_5%- Aylık en çok blok kıran 5. oyuncunun sayısı
Liderlik Tablosu (İsim)
Format: %arstat_<stat>_<periyot>_<sıra>_name%
Örnekler:
%arstat_kills_daily_1_name%- Günlük en çok öldüren 1. oyuncunun adı%arstat_playtime_total_1_name%- Tüm zamanların en çok oynayan oyuncusunun adı
Not: Sıra değeri 1 ile 10 arasında olmalıdır. Veri yoksa değer için
0, isim için---döner.
Nasıl Çalışır
Veri Toplama
ArStat, Bukkit olay dinleyicileri (event listener) kullanarak oyuncu eylemlerini izler:
- Öldürme/Ölüm:
PlayerDeathEventolayında hem ölen oyuncuya ölüm hem de öldüren oyuncuya kill kaydedilir. - Blok Kırma/Koyma:
BlockBreakEventveBlockPlaceEventolayları izlenir. - Oynama Süresi: Oyuncunun sunucuya giriş zamanı kaydedilir ve oturum süresi hesaplanır.
Veritabanı Yapısı
Tüm veriler tek bir daily_stats tablosunda saklanır:
| Sütun | Tip | Açıklama |
|---|---|---|
id |
INTEGER | Otomatik artan birincil anahtar |
uuid |
TEXT | Oyuncu UUID'si |
player_name |
TEXT | Oyuncu adı |
stat_type |
TEXT | İstatistik tipi (kills, deaths, vb.) |
value |
INTEGER | Değer |
date |
TEXT | Tarih (YYYY-MM-DD formatı) |
Her oyuncu-stat-tarih kombinasyonu benzersizdir (UNIQUE(uuid, stat_type, date)). Bu sayede günlük veriler doğru şekilde toplanır ve periyodik sorgular tarih aralıklarına göre yapılır.
Önbellek ve Performans
- Stat Önbelleği: Çevrimiçi oyuncuların günlük istatistikleri bellekte tutulur (
ConcurrentHashMap). Bu sayede PlaceholderAPI sorguları hızlı cevaplanır. - Liderlik Tablosu Önbelleği: Tüm stat tipleri ve periyotlar için ilk 10 oyuncu her 2 dakikada (2400 tick) asenkron olarak veritabanından çekilir ve önbelleklenir.
- Asenkron Yazma: Tüm veritabanı yazma işlemleri Bukkit zamanlayıcısı ile asenkron olarak çalışır, ana sunucu ipçiğini engellemez.
- Oynama Süresi Aktarımı: Her 5 dakikada (6000 tick) çevrimiçi oyuncuların birikimli oynama süreleri veritabanına yazılır.
Oyuncu Oturumu Yaşam Döngüsü
- Giriş (
PlayerJoinEvent): Giriş zamanı kaydedilir, günlük istatistikler veritabanından önbelleğe yüklenir. - Oyun Sırasında: Ölüm, öldürme ve blok olayları anlık olarak izlenir ve asenkron kaydedilir.
- Periyodik Aktarım: Her 5 dakikada oynama süresi diske yazılır ve oturum başlangıç zamanı sıfırlanır.
- Çıkış (
PlayerQuitEvent): Kalan oynama süresi veritabanına yazılır, önbellek temizlenir.
API Kullanımı
ArStat, diğer pluginlerin istatistik verilerine erişmesi için genel bir API sunar.
1. Bağımlılık Ekleme
pom.xml dosyanıza ekleyin:
<dependency>
<groupId>com.arcenia.arstat</groupId>
<artifactId>ArStat</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
2. plugin.yml Yapılandırması
depend:
- ArStat
3. API Erişimi
import com.arcenia.arstat.api.ArStatAPI;
import com.arcenia.arstat.api.ArStatProvider;
import com.arcenia.arstat.data.StatType;
import com.arcenia.arstat.data.TimePeriod;
// Güvenli erişim
if (getServer().getPluginManager().getPlugin("ArStat") != null) {
ArStatAPI api = ArStatProvider.getAPI();
if (api != null) {
int kills = api.getPlayerStat(playerUUID, "kills", "total");
}
}
Mevcut API Metodları
| Metod | Dönüş Tipi | Açıklama |
|---|---|---|
getPlayerStat(UUID, StatType, TimePeriod) |
int |
Oyuncunun stat değerini döner |
getPlayerStat(UUID, String, String) |
int |
String anahtarlarla stat değeri (-1: geçersiz anahtar) |
getAllPlayerStats(UUID, TimePeriod) |
Map<StatType, Integer> |
Oyuncunun tüm statlarını döner |
getTopPlayers(StatType, TimePeriod, int) |
List<Map.Entry<String, Integer>> |
Sıralama listesi (maks. 10) |
getStatTypes() |
StatType[] |
Mevcut stat tiplerini döner |
getTimePeriods() |
TimePeriod[] |
Mevcut zaman periyotlarını döner |
isPlayerTracked(UUID) |
boolean |
Oyuncu çevrimiçi ve takip ediliyor mu |