ArStats

Versiyon: 1.0.0 Platform: Paper/Spigot 1.21.4+ Java Sürümü: 21

schedule
01

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.


02

Ö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

03

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

04

Kurulum

  1. ArStat-1.0.0.jar dosyasını sunucunuzun plugins/ klasörüne koyun.
  2. Sunucuyu başlatın veya yeniden başlatın.
  3. Eklenti otomatik olarak plugins/ArStat/arstat.db SQLite veritabanını oluşturacaktır.
  4. PlaceholderAPI placeholder desteği için PlaceholderAPI eklentisinin de yüklü olması gerekir.

05

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ı

06

İzinler

İzin Açıklama Varsayılan
arstat.admin Tüm /arstat komutlarına erişim op

07

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.


08

Nasıl Çalışır

Veri Toplama

ArStat, Bukkit olay dinleyicileri (event listener) kullanarak oyuncu eylemlerini izler:

  • Öldürme/Ölüm: PlayerDeathEvent olayında hem ölen oyuncuya ölüm hem de öldüren oyuncuya kill kaydedilir.
  • Blok Kırma/Koyma: BlockBreakEvent ve BlockPlaceEvent olayları 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ü

  1. Giriş (PlayerJoinEvent): Giriş zamanı kaydedilir, günlük istatistikler veritabanından önbelleğe yüklenir.
  2. Oyun Sırasında: Ölüm, öldürme ve blok olayları anlık olarak izlenir ve asenkron kaydedilir.
  3. Periyodik Aktarım: Her 5 dakikada oynama süresi diske yazılır ve oturum başlangıç zamanı sıfırlanır.
  4. Çıkış (PlayerQuitEvent): Kalan oynama süresi veritabanına yazılır, önbellek temizlenir.

09

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

auto_awesome Benzer Projeler