AntiAFK, modern Minecraft sunucuları için tasarlanmış, yeni nesil bir AFK (Away From Keyboard) yönetim aracıdır. Standart zamanlayıcıların yetersiz kaldığı durumlarda, en karmaşık botları ve AFK durumunu atlatmaya yönelik istismar girişimlerini proaktif olarak engellemek için çok katmanlı, sezgisel bir tespit mimarisi kullanır. Sunucu performansını ilk sıraya koyan tasarımıyla, en yoğun sunucularda bile fark edilmeden çalışır.
AntiAFK, AFK davranışlarını ve bunları taklit eden botları avlamak için dört katmanlı bir analiz uygular:
- Katman 1: Temel Aktivite İzleme
- Oyuncu hareketleri, kamera rotasyonu, sohbet, komut kullanımı, envanter etkileşimleri ve dünya ile etkileşimler dahil olmak üzere 10'dan fazla temel eylem türünü izler. Bu eylemler, temel AFK zamanlayıcısını sıfırlar.
- Katman 2: Anlamsız Eylem Analizi
- Katman 3: Makro ve İstismar Tespiti
- Auto-Clicker Analizi: Tıklamalar arasındaki zaman aralıklarının istatistiksel tutarlılığını analiz ederek insan dışı tıklama modellerini tespit eder.
- Konum Değiştirme İstismarı: Portallar veya komutlar aracılığıyla yapılan sık ve tekrarlı konum değişikliklerini bir AFK atlatma yöntemi olarak tanımlar.
- Katman 4: Asenkron Davranışsal Analiz
Bu sistem, önceden tanımlanmış hareket desenlerini veya rotaları takip eden gelişmiş AFK botlarını tespit etmek için makine öğrenmesi prensiplerinden yararlanır. Sunucu yöneticileri, şüpheli bir botun hareketlerini kaydederek sunucuya özel savunma desenleri oluşturabilir.
- Asenkron Desen Analizi: Bir eşleşme, farklı hızlarda gerçekleştirilseler bile iki hareket dizisini etkili bir şekilde karşılaştıran Dinamik Zaman Bükme (DTW) algoritması kullanılarak belirlenir. Bu yoğun işlem, sunucu performansını etkilememek için ana iş parçacığı (main thread) dışında çalışır.
- Yüksek Performanslı Tasarım: Bellek kullanımını optimize etmek için nesne havuzu (
Apache Commons Pool2
) ve verimli veri serileştirme (Kryo
,Gson
) gibi endüstri standardı kütüphaneler kullanılır. - Kapsamlı Desen Yönetimi:
/antiafk pattern
komut seti ile yöneticiler yeni desenleri kaydedebilir, listeleyebilir, silebilir ve formatlar arasında dönüştürebilir.
- Turing Testi (Captcha Doğrulaması)
- Şüpheli olarak işaretlenen oyunculara, insan doğrulamasını gerektiren, yapılandırılabilir bir soru-cevap testi sunulur.
- Şüpheli Mod: Bir test aktifken, oyuncunun düşük değerli aktiviteleri (hareket, tıklama) yoksayılır, bu da botların testi görmezden gelerek durumu sıfırlamasını engeller.
- Kademeli Ceza ve Sabıka Sistemi
- Oyuncuların AFK kaynaklı cezaları, toplam AFK süreleri ve Captcha istatistikleri kalıcı olarak bir SQLite veritabanında saklanır.
- Tekrar eden AFK davranışları için, ceza sayısına göre artan ciddiyette eylemler (uyarı, kick, geçici ban vb.) yapılandırılabilir.
- GUI Kontrol Paneli
- Yönetici Komutları
/antiafk check <oyuncu>
: Bir oyuncunun detaylı sabıka kaydını sorgular./antiafk top <time|punishments>
: AFK liderlik tablolarını gösterir./antiafk list
: Anlık AFK oyuncuları listeler./antiafk reload
: Yapılandırma dosyalarını yeniden yükler.
AntiAFK, sunucu performansı üzerindeki etkisini minimize etmek için aşağıdaki prensiplerle tasarlanmıştır:
- Asenkron Operasyonlar: Davranış analizi, desen tanıma ve tüm veritabanı işlemleri gibi potansiyel olarak yavaş operasyonlar, sunucunun ana iş parçacığı (main thread) dışında çalıştırılır.
- Akıllı Önbellekleme (Caffeine): Sık erişilen veriler (WorldGuard bölge bilgileri, oyuncu istatistikleri), veritabanı ve API çağrılarını azaltmak için verimli önbelleklerde tutulur.
- Dağıtılmış Yük: Periyodik görevler, işlemlerini bir saniyelik zaman dilimine eşit olarak yayarak, yüksek oyuncu sayılarında sunucuda ani performans düşüşlerinin (spikes) önüne geçer.
Test Ortamı: Paper 1.19.4, 1 online oyuncu, standart sunucu yükü.
// Sunucunun genel boşta kalma oranı (daha yüksek daha iyi)
Server thread: 100.00%
└── net.minecraft.server.MinecraftServer.waitUntilNextTick(): 85.37%
// Eklentinin ana iş parçacığı üzerindeki toplam etkisi
AntiAFK (v1.0.2)
└── Server thread: 0.24%
├── com.bentahsin.antiafk.tasks.AFKCheckTask.run(): 0.18%
├── com.bentahsin.antiafk.listeners.handlers.PlayerMovementListener.onPlayerMove(): 0.04%
└── Diğer (Komutlar, GUI, Captcha): 0.02%
Analiz: Eklentinin tüm bileşenlerinin ana iş parçacığı üzerindeki toplam etkisi, sadece ~0.24%'tür. Bu, istatistiksel olarak ihmal edilebilir bir değer olup, eklentinin en yoğun sunucularda bile TPS üzerinde fark edilebilir bir etki yaratmayacağını doğrular.
AntiAFK, sunucu sahiplerine tam kontrol sağlayan modüler bir hata ayıklama sistemi sunar. config.yml
üzerinden yalnızca ilgilendiğiniz modülün loglarını açarak konsol kirliliğini önleyebilir ve sorunları hedefe yönelik bir şekilde giderebilirsiniz.
Yeni config.yml
yapısı:
# HATA AYIKLAMA (DEBUG)
debug:
# Ana şalter: Bu 'false' ise, aşağıdaki hiçbir ayarın önemi kalmaz.
enabled: false
# Modül bazında debug ayarları
modules:
activity_listener: false # Hangi eylemin AFK sayacını sıfırladığını gösterir.
behavioral_analysis: false # Gelişmiş yörünge analizinin adımlarını loglar.
learning_mode: false # Desen tanıma (DTW) ve nesne havuzu durumunu gösterir.
command_registration: false # Komutların nasıl kaydedildiğini loglar.
database_queries: false # Veritabanı/Önbellek (Cache HIT/MISS) okumalarını gösterir.
AntiAFK, tam uluslararasılaştırma desteği sunar. Konsol ve sistem mesajlarının dili config.yml
üzerinden ayarlanabilirken, oyunculara gösterilen tüm mesajlar messages.yml
dosyasından düzenlenebilir.
Desteklenen Diller:
- Türkçe
- İngilizce
- İspanyolca
- Almanca
- Fransızca
- Rusça
- Lehçe
- WorldGuard: Bölge bazında özel AFK süreleri ve ceza eylemleri tanımlanmasını sağlar.
- PlaceholderAPI: Dinamik verileri (
%antiafk_tag%
,%antiafk_reason%
, vb.) diğer eklentilere sunar. - ProtocolLib (İsteğe Bağlı): GUI içindeki metin girişi gibi özellikler için daha gelişmiş bir kullanıcı deneyimi sunar.
- Son sürümü GitHub Releases sayfasından indirin.
.jar
dosyasını sunucunuzunplugins
klasörüne yerleştirin.- (Önerilen) WorldGuard, PlaceholderAPI, ProtocolLib eklentilerini kurun.
- Sunucuyu başlatarak varsayılan yapılandırma dosyalarının (
config.yml
,messages.yml
,questions.yml
,playerdata.db
) oluşturulmasını sağlayın. - Yapılandırma dosyalarını ihtiyaçlarınıza göre düzenleyin ve
/antiafk reload
komutunu kullanın.
Hata bildirimleri, özellik önerileri ve "pull request"ler memnuniyetle karşılanır. Lütfen bir tartışma başlatmak veya sorun bildirmek için GitHub Issues sayfasını kullanın.