ArBan
Bu eklenti, Paper ve Folia 1.21+ sunucuları için geliştirilmiş olup Java 17 ve üzeri sürümleri gerektiren 3.8 versiyonlu bir sistemdir. Sunucu performansını ve işlevselliğini optimize etmeye odaklanan bu araç, güncel Minecraft altyapılarıyla tam uyumlu çalışır. Kurulum için belirtilen teknik gereksinimlerin karşılanması yeterlidir.
Özellikler
- Ceza Yönetimi — Ban, tempban, IP ban, mute, tempmute, IP mute, kick (süreli/kalıcı)
- Uyarı Sistemi — Süreli/kalıcı uyarı, otomatik eylem (belirli uyarı sayısında mute/ban), GUI ile görüntüleme
- Not Sistemi — Oyunculara yetkili notu ekleme, GUI ile görüntüleme ve silme
- Puan Sistemi — Ceza puanı ekleme/çıkarma, eşik aşımında otomatik ceza, decay (zaman aşımı)
- Alt Hesap Tespiti — IP geçmişi üzerinden otomatik alt hesap tespiti ve yetkili bildirimi
- Escalation Sistemi — Tekrarlayan ihlallerde otomatik artan ceza; mute, ban, IP ban ve kick action desteği
- Jail Sistemi — Oyuncuyu izole ortamda yetkiliyle karşı karşıya getirme, izole sohbet, sohbet loglama
- Freeze Mekaniği — Süreli veya kalıcı dondurma, BossBar geri sayım, veritabanı kalıcılığı (sunucu yeniden başlatmalarına dayanıklı)
- Zamanlanmış Ban — Belirli bir tarihte otomatik uygulanacak ban zamanlama, iptal etme ve listeleme
- Ceza Geri Alma (Rollback) — Bir yetkilinin belirli süre içindeki tüm cezalarını geri alma (dry-run desteği)
- Yetkili Koruma (Rate Limit) — Kısa sürede çok fazla ceza komutu kullanan yetkilileri sessiz bloke etme; kategori bazlı takip, ayrı Discord webhook kanalı
- GUI Arayüzleri — Oyuncu profili, ceza geçmişi (filtre/istatistik/sıralama/arama), alt hesap kontrolü, yetkili istatistikleri, uyarılar, notlar, puanlar, bildirim tercihleri, şablon yöneticisi
- Discord Webhook — Tüm moderasyon işlemlerini Discord'a detaylı embed olarak bildirme (rate limit bildirimleri ayrı kanala)
- PlaceholderAPI Entegrasyonu — Scoreboard, tab list ve chat pluginlerinde ArBan verilerini gösterme
- Ceza Şablonları — Önceden tanımlanmış ceza şablonları ile hızlı ceza uygulama
- Bitiş Bildirimleri — Yaklaşan ceza süre doluşlarını yetkililere önceden bildirme
- Veritabanı Desteği — SQLite ve MySQL desteği, otomatik yedekleme, import/export, MySQL deadlock koruması
- Çok Sunucu Desteği — Paylaşımlı MySQL ile ağ genelinde ceza yönetimi
- Folia Uyumluluğu — Folia uyumlu asenkron zamanlayıcı
- Harici Mesaj Dosyası — Tüm mesajlar
messages.ymldosyasında; kolay düzenleme ve Türkçe karakter desteği - Veri Beyaz Listesi — Belirli oyuncu ve IP'leri veri kaydından muaf tutma
- Kapsamlı Test Komutu — Tüm bileşenleri tek komutla 19 kategoride test etme (
/arban test) - Developer API — 44 metot (sorgulama + ceza uygulama/kaldırma) ve 4 olay (event) sınıfı ile diğer eklentiler için kapsamlı API
Gereksinimler
| Gereksinim | Minimum Versiyon | Not |
|---|---|---|
| Java | 17+ | |
| Paper / Folia | 1.21+ | |
| PlaceholderAPI | 2.11.6+ | Opsiyonel — yüklüyse otomatik aktif olur |
Kurulum
- Projeyi derleyin veya hazır JAR dosyasını indirin (
ArBan-3.8.jar) - JAR dosyasını sunucunuzun
plugins/klasörüne kopyalayın - Sunucuyu başlatın —
plugins/ArBan/config.ymlveplugins/ArBan/messages.ymlotomatik oluşturulur config.ymldosyasını ihtiyacınıza göre düzenleyin- Mesajları özelleştirmek için
messages.ymldosyasını düzenleyin /arban reloadkomutuyla değişiklikleri uygulayın
Komutlar
Ceza Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/ban <oyuncu> <sure|perma> [sebep] |
arban.ban |
Oyuncuyu banlar (süreli veya kalıcı) |
/ipban <oyuncu> <sure|perma> [sebep] |
arban.ipban |
Oyuncuyu ve IP adresini banlar |
/unban <oyuncu> |
arban.unban |
Ban ve IP banını kaldırır |
/mute <oyuncu> <sebep> |
arban.mute |
Oyuncuyu susturur (sebepten otomatik süre) |
/tempmute <oyuncu> <sure> [sebep] |
arban.tempmute |
Manuel süreli susturma |
/unmute <oyuncu> |
arban.unmute |
Susturmayı kaldırır |
/ipmute <oyuncu> <sure|perma> [sebep] |
arban.ipmute |
IP tabanlı susturma |
/unipmute <oyuncu> |
arban.unipmute |
IP susturmayı kaldırır |
/kick <oyuncu> [sebep] |
arban.kick |
Oyuncuyu sunucudan atar |
/kickall [sebep] |
arban.kickall |
Tüm oyuncuları sunucudan atar |
Uyarı Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/warn <oyuncu> <sebep> |
arban.warn |
Oyuncuya uyarı verir (varsayılan süre config'den) |
/tempwarn <oyuncu> <süre> <sebep> |
arban.warn |
Süreli uyarı verir |
/unwarn <oyuncu> [id] |
arban.unwarn |
Uyarı kaldırır (ID veya en son) |
/clearwarnings <oyuncu> |
arban.unwarn |
Tüm uyarıları temizler |
/warnings <oyuncu> |
arban.warnings |
Uyarıları GUI olarak gösterir |
Not Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/note <oyuncu> <not> |
arban.note |
Oyuncuya yetkili notu ekler |
/notes <oyuncu> |
arban.note |
Notları GUI olarak gösterir |
/delnote <oyuncu> <id> |
arban.note |
Belirli notu siler |
/clearnotes <oyuncu> |
arban.note |
Tüm notları siler |
Puan Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/addpoints <oyuncu> <miktar> [sebep] |
arban.points.add |
Ceza puanı ekler |
/removepoints <oyuncu> <miktar> [sebep] |
arban.points.remove |
Ceza puanı çıkarır |
/points <oyuncu> |
arban.points.view |
Puanları GUI olarak gösterir |
/clearpoints <oyuncu> |
arban.points.clear |
Tüm puanları siler |
Freeze & Jail Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/freeze <oyuncu> [süre] [sebep] |
arban.freeze |
Oyuncuyu dondurur (süreli veya kalıcı) |
/unfreeze <oyuncu> |
arban.unfreeze |
Dondurmayı kaldırır |
/jail <oyuncu> [sebep] |
arban.jail |
Oyuncuyu jail'e atar |
/unjail <oyuncu> |
arban.jail |
Oyuncuyu jail'den çıkarır |
/setjail |
arban.setjail |
Jail konumunu belirler |
/setjailstaff |
arban.setjail |
Jail'de yetkili konumunu belirler |
/setspawn |
arban.setjail |
Jail çıkışı spawn noktasını belirler |
Bilgi & Araştırma Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/check <oyuncu> |
arban.check |
Oyuncu profili GUI'sini açar |
/history [filtreler] |
arban.history |
Ceza geçmişini filtreli GUI olarak gösterir |
/alts <oyuncu> |
arban.alts |
Bilinen tüm alt hesapları listeler |
/checkalts <oyuncu> |
arban.checkalts |
Güncel IP üzerinden alt hesapları gösterir |
/checkaltsall <oyuncu> |
arban.checkaltsall |
Tüm IP geçmişi üzerinden alt hesapları gösterir |
/stats <oyuncu> |
arban.stats |
Ceza istatistiklerini gösterir |
/checkviolations <oyuncu> |
arban.checkviolations |
Aktif ihlal sayılarını gösterir |
/staffstats |
arban.staffstats |
Yetkili istatistikleri GUI'sini açar |
Alt Hesap Ceza Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/banalts <oyuncu> |
arban.banalts |
Güncel IP'deki alt hesapları banlar |
/banaltsall <oyuncu> |
arban.banaltsall |
Tüm IP geçmişindeki alt hesapları banlar |
Zamanlanmış Ban Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/scheduleban <oyuncu> <tarih> <süre> <sebep> |
arban.scheduleban |
Belirli tarihte uygulanacak ban zamanlar |
/cancelban <id|oyuncu> |
arban.scheduleban |
Zamanlanmış banı iptal eder (ID veya oyuncu ismi) |
/scheduledbans |
arban.scheduleban |
Bekleyen zamanlanmış banları listeler |
Tarih formatı: gg/AA/yyyy-SS:dd (örnek: 25/04/2026-15:30)
Rollback & Yetkili Koruma Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/rollback <yetkili> <süre> [--dry-run] |
arban.rollback |
Yetkilinin verdiği cezaları geri alır |
/unblock <yetkili> |
arban.unblock |
Blokeli yetkilinin blokesini kaldırır |
/blocklist |
arban.unblock |
Blokeli yetkilileri listeler |
Yönetim Komutları
| Komut | İzin | Açıklama |
|---|---|---|
/arban reload |
arban.admin |
Konfigürasyonu ve mesajları yeniden yükler |
/arban info |
arban.admin |
Plugin bilgilerini gösterir |
/arban backup [açıklama] |
arban.admin |
Manuel veritabanı yedeği oluşturur |
/arban export [oyuncu|all] |
arban.admin |
Verileri JSON olarak dışarı aktarır |
/arban import <kaynak> |
arban.admin |
JSON, SQLite veya EssentialsX'ten içeri aktarır |
/arban test |
arban.admin |
Tüm bileşenleri kapsamlı olarak test eder (19 kategori) |
/arban veri whitelist add <oyuncu> |
arban.admin |
Oyuncuyu veri kaydından muaf tutar |
/resetviolations <oyuncu> |
arban.resetviolations |
İhlal sayacını sıfırlar |
/notifysettings |
arban.notifysettings |
Bildirim tercihleri GUI'sini açar |
/templates |
arban.templates |
Ceza şablonları GUI'sini açar |
Komut Takma Adları
| Komut | Takma Adlar |
|---|---|
/checkviolations |
/checkvio, /violations |
/resetviolations |
/resetvio |
/clearwarnings |
/clearwarns |
/warnings |
/warns, /uyarilar |
/notes |
/notlar |
/points |
/puanlar, /puan |
/notifysettings |
/notify, /bildirimler, /notifygui, /notifyprefs |
/templates |
/templategui, /cezatemplates |
Tab Tamamlama
Tüm komutlar akıllı tab tamamlama desteği sunar:
- Oyuncu adı önerileri
- Süre önerileri:
10m,30m,1h,6h,12h,1d,3d,7d,14d,30d,perma - Mute sebep önerileri (config'den)
- Ban sebep önerileri (config'den)
- Zamanlanmış ban: tarih (yarın / gelecek hafta) ve süre önerileri
`/arban test` — Kapsamlı Bileşen Testi
Tüm plugin bileşenlerinin sağlığını tek komutla 19 kategoride kontrol eder. Her test ✓ (başarılı), ✗ (başarısız) veya ⚠ (uyarı) olarak raporlanır. Hata detayları sunucu konsoluna loglanır.
| # | Kategori | Kapsam |
|---|---|---|
| 1 | Veritabanı | Bağlantı, 11 tablo erişimi, yazma/okuma/silme testi |
| 2 | Konfigurasyon | Tüm config anahtarlarının tip ve değer kontrolü, duration doğrulama |
| 3 | Manager'lar | 18 manager'ın null kontrolü |
| 4 | Özellik Durumları | Tüm alt sistemlerin aktif/pasif durumları ve detayları |
| 5 | Komutlar | 45 komutun kayıt ve executor durumu |
| 6 | Entegrasyonlar | PlaceholderAPI, Folia uyumluluk, Java/sunucu versiyonu |
| 7 | Listener'lar | Toplam handler sayısı kontrolü |
| 8 | GUI Manager'lar | 9 GUI bileşeninin varlık kontrolü |
| 9 | Şablonlar | Her şablonun ID, tip, sebep ve duration geçerliliği |
| 10 | Cache & Performans | Player/staff/mute cache boyutları, frozen/jail oturum sayıları |
| 11 | Duration Parser | 11 format testi (s, m, h, d, w, mo, y, perma, permanent, geçersiz, boş) |
| 12 | Mesaj Sistemi | ~250 mesaj anahtarının varlığı, placeholder değiştirme, colorize, tarih/süre formatlama |
| 13 | Developer API | 27 null-safe metot testi (v3.9 yazma/okuma API dahil), ArBanApiProvider erişim testi |
| 14 | Güvenlik | DurationParser overflow koruması, auto-action whitelist, path traversal kontrolü |
| 15 | History Filter & İstatistik | HistoryFilter builder pattern, ascending/afterTimestamp, copy, HistoryStats tutarlılığı |
| 16 | Event Sistemi | 4 event sınıfının varlığı, 7 PunishmentType enum kontrolü |
| 17 | Warn Sistemi | Default duration, show-title, auto-action kuralları geçerliliği |
| 18 | Plugin.yml Doğrulama | Plugin adı, versiyon, API versiyon, 31 permission node kontrolü |
| 19 | History GUI Config | max-results ve default-date-filter değer doğrulama |
Örnek Çıktı
════════════════════════════════════
▸ VERİTABANI
✓ DatabaseManager yüklendi
✓ Bağlantı başarılı (MySQL)
✓ 11/11 tablo mevcut
✓ Yazma/okuma testi başarılı
▸ DEVELOPER API
✓ ArBanApi instance
✓ ArBanApiProvider.get() çalışıyor
✓ getActiveBan(null) = null
...
▸ GÜVENLİK
✓ DurationParser overflow koruması: 999999999y = -2
✓ storage.custom-path path traversal yok
...
════════════════════════════════════
TEST SONUCU
✓ Başarılı: 142
✗ Başarısız: 0
⚠ Uyarı: 1
════════════════════════════════════
İzinler
Ceza İzinleri
| İzin | Açıklama |
|---|---|
arban.ban |
Oyuncuları banlama |
arban.ipban |
IP ile banlama |
arban.unban |
Ban kaldırma |
arban.mute |
Susturma (sebepten otomatik süre) |
arban.tempmute |
Manuel süreli susturma |
arban.unmute |
Susturma kaldırma |
arban.ipmute |
IP ile susturma |
arban.unipmute |
IP susturma kaldırma |
arban.kick |
Sunucudan atma |
arban.kickall |
Tüm oyuncuları atma |
arban.freeze |
Dondurma |
arban.unfreeze |
Dondurma kaldırma |
arban.jail |
Jail'e atma ve çıkarma |
arban.setjail |
Jail/staff/spawn noktası ayarlama |
Uyarı / Not / Puan İzinleri
| İzin | Açıklama |
|---|---|
arban.warn |
Uyarı verme |
arban.unwarn |
Uyarı kaldırma ve temizleme |
arban.warnings |
Uyarıları görme |
arban.note |
Not ekleme, görme ve silme |
arban.points.add |
Ceza puanı ekleme |
arban.points.remove |
Ceza puanı çıkarma |
arban.points.view |
Ceza puanlarını görme |
arban.points.clear |
Ceza puanlarını temizleme |
arban.rollback |
Yetkili ceza geri alma |
Alt Hesap İzinleri
| İzin | Açıklama |
|---|---|
arban.alts |
Alt hesapları görme |
arban.checkalts |
Güncel IP'den alt hesap kontrolü |
arban.checkaltsall |
Tüm IP'lerden alt hesap kontrolü |
arban.banalts |
Güncel IP'deki alt hesapları banlama |
arban.banaltsall |
Tüm IP'lerdeki alt hesapları banlama |
arban.seeips |
IP adreslerini tam görme (yoksa maskelenir) |
Bilgi & Yönetim İzinleri
| İzin | Açıklama |
|---|---|
arban.check |
Oyuncu ceza durumunu görme |
arban.history |
Ceza geçmişini GUI olarak görme |
arban.stats |
Ceza istatistiklerini görme |
arban.checkviolations |
İhlal geçmişini görme |
arban.resetviolations |
İhlal geçmişini sıfırlama |
arban.staffstats |
Yetkili istatistiklerini görme |
arban.templates |
Ceza şablonlarını yönetme |
arban.notifysettings |
Bildirim tercih GUI'sini açma |
arban.admin |
Yönetim komutları (reload, backup, import, export, test) |
Zamanlanmış Ban & Koruma İzinleri
| İzin | Açıklama |
|---|---|
arban.scheduleban |
Zamanlanmış ban oluşturma, iptal etme ve listeleme |
arban.unblock |
Blokeli yetkilileri çözme ve listeleme |
arban.ratelimit.bypass |
Rate limit korumasından muaf olma |
Bildirim İzinleri
| İzin | Açıklama |
|---|---|
arban.notify |
Tüm ceza bildirimlerini görme |
arban.notify.ban |
Ban bildirimlerini görme |
arban.notify.ipban |
IP ban bildirimlerini görme |
arban.notify.mute |
Mute bildirimlerini görme |
arban.notify.ipmute |
IP mute bildirimlerini görme |
arban.notify.kick |
Kick bildirimlerini görme |
arban.notify.kickall |
KickAll bildirimlerini görme |
arban.notify.jail |
Jail bildirimlerini görme |
arban.notify.warn |
Uyarı bildirimlerini görme |
arban.notify.alts |
Alt hesap uyarı bildirimlerini görme |
arban.notify.expiry |
Ceza bitiş bildirimlerini görme |
arban.jailchat.see |
Aktif jail sohbet mesajlarını görme |
Yapılandırma
Plugin ilk çalıştığında iki yapılandırma dosyası otomatik oluşturulur:
| Dosya | Konum | İçerik |
|---|---|---|
config.yml |
plugins/ArBan/config.yml |
Genel ayarlar, veritabanı, escalation kuralları, webhook |
messages.yml |
plugins/ArBan/messages.yml |
Tüm oyuncu ve yetkili mesajları |
config.yml
Genel Ayarlar
# Chat prefix (hex renk desteği: &#RRGGBB)
prefix: "B00D6&lSunucu &7» "
# Veritabanı türü: "sqlite" veya "mysql"
storage:
type: sqlite
sqlite:
file: "arban.db"
mysql:
host: "localhost"
port: 3306
database: "arban"
username: "root"
password: "sifre"
pool-size: 10
settings:
default-reason: "Sebep yok."
server-name: "Sunucu"
protect-ops: true # OP'lara ceza verilmesini engeller
max-active-bans-per-player: 0 # 0 = limitsiz
max-active-mutes-per-player: 1
log-chat-on-mute: true # Mute atıldığında son mesajları loglar
broadcast: false # Ceza bildirimlerini tüm yetkililere gönder
block-commands: true # Mute'lu oyuncuların engellenecek komutları
blocked-commands:
- "/msg"
- "/tell"
- "/r"
- "/reply"
- "/w"
- "/whisper"
Uyarı Sistemi
warn:
# /warn ile verilen uyarıların varsayılan süresi (0 = kalıcı)
# Örnek: "1h" = 1 saat, "30m" = 30 dakika, "1d" = 1 gün
default-duration: "1h"
show-title: true
auto-actions:
enabled: false
rules:
- count: 3
action: "tempmute"
duration: "1h"
reason: "3 uyarı - otomatik susturma"
- count: 5
action: "tempban"
duration: "1d"
reason: "5 uyarı - otomatik ban"
Güvenlik: Auto-action'larda yalnızca şu komutlar çalıştırılabilir:
ban,tempban,ipban,mute,tempmute,ipmute,kick,freeze,jail,warn,tempwarn
Puan Sistemi
points-system:
enabled: false
decay-window: "7d" # Bu süreden eski puanlar sayılmaz (0 = kapalı)
points-per-type:
BAN: 5
MUTE: 2
KICK: 1
WARN: 1
auto-actions:
enabled: false
rules:
- threshold: 10
action: "tempban"
duration: "1d"
reason: "Puan eşiği aşıldı"
Ceza Geçmişi GUI
history:
max-results: 500 # GUI'de gösterilen maksimum ceza sayısı
default-date-filter: 0 # 0=tümü, 1=1gün, 2=7gün, 3=30gün
Bitiş Bildirimleri
expiry-notifications:
enabled: false
check-interval: "5m" # Kontrol aralığı
warn-before: "30m" # Bitişten ne kadar önce bildir
notify-types:
- BAN
- MUTE
Alt Hesap Tespiti
alt-detection:
enabled: true
exempt-ips:
- "192.168.1.1" # Muaf IP'ler (VPN, okul, kafe vb.)
Yedekleme
backup:
enabled: true
interval: "24h" # Otomatik yedekleme aralığı
max-backups: 7 # Eski yedekler otomatik silinir
on-shutdown: true # Sunucu kapanışında yedekle
Yetkili Koruma (Rate Limit)
rate-limit:
enabled: true
window-seconds: 60 # Bu süre içinde max-commands kadar komut kullanılabilir
max-commands: 6 # Pencere içinde max komut sayısı (aşılınca bloke)
block-duration: "1h" # Bloke süresi
Escalation (Otomatik Artan Ceza)
escalation:
enabled: true
decay-minutes: 1440 # 24 saat sonra ihlal sayacı sıfırlanır (0 = kapalı)
rules:
hakaret:
- count: 1
action: "tempmute"
duration: "1h"
- count: 2
action: "tempmute"
duration: "3h"
- count: 3
action: "tempban"
duration: "1d"
- count: 4
action: "ban"
duration: "perma"
Desteklenen action türleri: mute, tempmute, ban, tempban, ipban, kick
Discord Webhook
webhook:
enabled: true
url: "https://discord.com/api/webhooks/WEBHOOK_ID/WEBHOOK_TOKEN"
username: "ArBan"
avatar-url: ""
send-ban: true
send-mute: true
send-unban: true
send-unmute: true
send-kick: true
send-update: true
send-expire: true
send-jail: true
send-unjail: true
send-freeze: true
send-unfreeze: true
send-alt-detect: true
send-points-threshold: true
send-rollback: true
send-expiry-warn: true
chat-history-lines: 5
ratelimit:
enabled: true
url: "https://discord.com/api/webhooks/RATELIMIT_WEBHOOK_ID/TOKEN"
BossBar & Ses
bossbar:
enabled: true
show-reason: true
sounds:
enabled: true
volume: 1.0
pitch: 1.0
messages.yml
Tüm oyuncu ve yetkili mesajları messages.yml dosyasında saklanır. Türkçe karakter desteği sunar ve config.yml'den bağımsız olarak düzenlenebilir.
Not:
messages.ymldosyasında tek birgui:bloğu bulunmalıdır. Birden fazlagui:bloğu olursa YAML standartlarına göre sonuncusu öncekini ezer ve alt bölümler kaybolur.
/arban reload komutu hem config.yml hem messages.yml dosyasını yeniden yükler.
GUI Arayüzleri
Oyuncu Profili (/check <oyuncu>)
- Oyuncu durumu (çevrimiçi/çevrimdışı, son görülen)
- IP adresi ve konum bilgisi
- Ceza istatistikleri (ban, mute, kick, uyarı, puan)
- Aktif cezalar
- Yakın geçmiş ceza kayıtları
Ceza Geçmişi (/history)
- Sayfalandırılmış ceza kayıtları
- Tip filtresi — BAN, MUTE, KICK, IPBAN, IPMUTE, WARN arasında geçiş
- Durum filtresi — Tümü / Aktif / Pasif
- Tarih aralığı — Tümü / Son 1 Gün / Son 7 Gün / Son 30 Gün
- Sıralama — Yeni→Eski / Eski→Yeni
- İstatistik paneli — Toplam, aktif/pasif dağılımı, tip başına sayılar
- Arama — Sohbetten oyuncu adı yazarak hızlı arama
- Detay sayfası — Ceza olayları, kaldırma bilgisi (kim kaldırdı, ne zaman, nasıl)
Uyarılar (/warnings <oyuncu>)
- Aktif/süresi dolmuş/kaldırılmış uyarılar
- Tıklayarak uyarı kaldırma
- Toplam/aktif sayı özeti
Notlar (/notes <oyuncu>)
- Yetkili notları listesi
- Tıklayarak not silme
Puanlar (/points <oyuncu>)
- Puan geçmişi (pozitif/negatif)
- Toplam puan özeti
Alt Hesap Kontrolü (/alts <oyuncu>)
- Alt hesap listesi ve ban durumları
- IP adresi gösterimi (izin tabanlı maskeleme)
Yetkili İstatistikleri (/staffstats)
- Yetkili sıralama tablosu
- Yetkili başına ceza sayıları
Bildirim Tercihleri (/notifysettings)
- Bildirim kanallarını aç/kapat
- Kategori bazlı kontrol
Şablon Yöneticisi (/templates)
- Şablon oluşturma, düzenleme, silme
- Süre, sebep, görünen ad tanımlama
PlaceholderAPI Entegrasyonu
PlaceholderAPI yüklüyse ArBan otomatik olarak aşağıdaki placeholder'ları kaydeder:
| Placeholder | Açıklama | Örnek Çıktı |
|---|---|---|
%arban_is_banned% |
Oyuncu banlı mı | true / false |
%arban_is_muted% |
Oyuncu susturulmuş mu | true / false |
%arban_is_frozen% |
Oyuncu donmuş mu | true / false |
%arban_ban_reason% |
Aktif ban sebebi | Hile kullanımı |
%arban_mute_reason% |
Aktif mute sebebi | Spam |
%arban_ban_remaining% |
Ban kalan süre | 2 gün 5 saat |
%arban_mute_remaining% |
Mute kalan süre | 25 dakika |
%arban_ban_staff% |
Banlayan yetkili | Admin |
%arban_mute_staff% |
Muteleyen yetkili | Moderator |
%arban_total_bans% |
Toplam ban sayısı | 3 |
%arban_total_mutes% |
Toplam mute sayısı | 7 |
%arban_total_kicks% |
Toplam kick sayısı | 1 |
Developer API
Diğer eklentiler ArBan ile etkileşebilir. API, sorgulama ve (v3.9) ceza uygulama/kaldırma için 44 metot ve 4 olay sınıfı sunar.
API'ye Erişim
// Yöntem 1: Static provider
ArBanApi api = ArBanApiProvider.get();
// Yöntem 2: Plugin instance
ArBanPlugin plugin = (ArBanPlugin) Bukkit.getPluginManager().getPlugin("ArBan");
ArBanApi api = plugin.getApi();
API Metotları
public interface ArBanApi {
// Aktif ceza sorgulama
Punishment getActivePunishment(UUID uuid, PunishmentType type);
Punishment getActiveBan(UUID uuid);
Punishment getActiveMute(UUID uuid);
Punishment getActiveIpBan(String ip);
Punishment getActiveIpMute(String ip);
// Durum kontrolleri
boolean isPlayerBanned(UUID uuid);
boolean isPlayerMuted(UUID uuid);
boolean isPlayerFrozen(UUID uuid);
boolean isPlayerJailed(UUID uuid);
// Oyuncu bilgileri
String getLastKnownIp(UUID uuid);
String getLastKnownName(UUID uuid);
// Ceza geçmişi
List<Punishment> getPunishmentHistory(UUID uuid, int limit);
List<Punishment> getPunishmentHistory(UUID uuid, PunishmentType type, int limit);
Punishment getPunishmentById(long id);
List<Punishment> getStaffPunishments(String staffName, int limit);
List<Punishment> getRecentPunishments(int limit);
// Uyarı sistemi
int getActiveWarnCount(UUID uuid);
List<Punishment> getActiveWarns(UUID uuid);
List<Punishment> getAllWarns(UUID uuid);
// Puan sistemi
int getPlayerPoints(UUID uuid);
// İstatistikler
int getTotalPunishmentCount(UUID uuid);
int getActivePunishmentCount(UUID uuid);
int getStaffPunishmentCount(String staffName);
// === v3.9: Ceza uygulama (yazma) ===
// staffName cezayı veren gerçek yetkili olarak kaydedilir; duration "7d"/"perma"/null.
CompletableFuture<PunishmentResult> ban(UUID target, String staffName, String duration, String reason);
CompletableFuture<PunishmentResult> ipBan(UUID target, String staffName, String duration, String reason);
CompletableFuture<PunishmentResult> mute(UUID target, String staffName, String duration, String reason);
CompletableFuture<PunishmentResult> ipMute(UUID target, String staffName, String duration, String reason);
CompletableFuture<PunishmentResult> kick(UUID target, String staffName, String reason);
CompletableFuture<PunishmentResult> warn(UUID target, String staffName, String duration, String reason);
CompletableFuture<PunishmentResult> freeze(UUID target, String staffName, String duration, String reason);
CompletableFuture<PunishmentResult> jail(UUID target, String staffName, String reason);
CompletableFuture<PunishmentResult> punishWithTemplate(UUID target, String staffName, String templateId);
// === v3.9: Ceza kaldırma (yazma) ===
CompletableFuture<PunishmentResult> unban(UUID target, String staffName);
CompletableFuture<PunishmentResult> unmute(UUID target, String staffName);
CompletableFuture<PunishmentResult> unIpMute(UUID target, String staffName);
CompletableFuture<PunishmentResult> unfreeze(UUID target, String staffName);
CompletableFuture<PunishmentResult> unjail(UUID target, String staffName);
CompletableFuture<PunishmentResult> removeWarn(UUID target, long warnId, String staffName);
CompletableFuture<PunishmentResult> removePunishmentById(long id, String staffName, RemovalCause cause);
// === v3.9: Alt hesap & IP geçmişi (okuma) ===
CompletableFuture<List<UUID>> getKnownAlts(UUID uuid);
CompletableFuture<List<UUID>> getAltsByCurrentIp(UUID uuid);
CompletableFuture<List<String>> getIpHistory(UUID uuid);
// === v3.9: Şablon erişimi (okuma) ===
List<PunishmentTemplate> getTemplates();
PunishmentTemplate getTemplate(String id);
// === v3.9: Yetkili istatistik dökümü (okuma) ===
CompletableFuture<Map<PunishmentType, Integer>> getStaffPunishmentBreakdown(String staffName, long sinceEpochMillis);
}
Okuma metotları null-safe'dir; null parametrede null/false/0/boş liste döner.
v3.9 — Yazma API'si: Ceza uygulama/kaldırma metotları CompletableFuture<PunishmentResult> döndürür (Discord/JDA thread'lerinden async çağrı için uygundur); iş ArBan'ın Folia-uyumlu zamanlayıcısında yapılır, ana thread bloklanmaz. staffName cezayı veren gerçek yetkili olarak kaydedilir (CONSOLE değil). Yazma metotları komutlarla aynı servis katmanından geçer: mevcut event'ler, Discord webhook'u, escalation/puan sistemi ve korumalar (protect-ops, whitelist) otomatik işler — ayrı bir kod yolu yoktur.
PunishmentResult:
| Metot | Açıklama |
|---|---|
isSuccess() |
İşlem başarılı mı (status == SUCCESS) |
getStatus() |
SUCCESS, ALREADY_ACTIVE, NOT_FOUND, TARGET_EXEMPT, RATE_LIMITED, INVALID_DURATION, INVALID_TARGET, ERROR |
getPunishment() |
Başarılıysa oluşan/etkilenen ceza (freeze/jail/kick'te null); değilse null |
getErrorMessage() |
Başarısızsa insan-okur sebep; başarılıysa null |
Notlar:
freeze/jailonline oyuncu gerektirir (offline hedef →INVALID_TARGET). Aynı türde aktif ceza varsa ArBan günceller ve sonuçSUCCESSdöner.getPunishmentById(id), kaldırılmış cezalar için artıkgetRemovedBy()/getRemovedAt()/getRemovalCause()alanlarını da doldurur.
Olaylar (Events)
| Olay | Açıklama |
|---|---|
ArBanPunishmentAppliedEvent |
Ceza uygulandığında tetiklenir |
ArBanPunishmentUpdatedEvent |
Ceza güncellendiğinde tetiklenir |
ArBanPunishmentRemovedEvent |
Ceza kaldırıldığında tetiklenir |
// RemovalCause enum değerleri
enum RemovalCause {
UNBAN, UNMUTE, EXPIRE, DEACTIVATE, OTHER
}
Örnek Kullanım
// Event dinleme (mevcut)
@EventHandler
public void onPunishment(ArBanPunishmentAppliedEvent event) {
String oyuncu = event.getTargetName();
PunishmentType tur = event.getType();
String sebep = event.getReason();
// ...
}
// v3.9 — Ceza uygulama (örn. Discord botundan, gerçek yetkili adıyla)
api.ban(targetUuid, "ModAdi", "7d", "Hile kullanımı").thenAccept(result -> {
if (result.isSuccess()) {
long cezaId = result.getPunishment().getId();
// Discord'a başarı bildirimi gönder
} else {
switch (result.getStatus()) {
case TARGET_EXEMPT: /* OP/bypass korumalı */ break;
case INVALID_DURATION: /* süre hatalı */ break;
default: /* result.getErrorMessage() */ break;
}
}
});
Güvenlik
ArBan aşağıdaki güvenlik önlemlerini içerir:
| Önlem | Açıklama |
|---|---|
| PreparedStatement | Tüm SQL sorguları parameterized; SQL injection koruması |
| DurationParser overflow koruması | Aşırı büyük süre değerlerinde (max ~10 yıl) hata döner |
| Auto-action beyaz listesi | Warn auto-action'larda yalnızca izin verilen komutlar çalıştırılabilir |
| Path traversal koruması | SQLite custom-path ayarında .. içeren yollar engellenir |
| Rate limiting | Yetkili başına komut kullanım sınırı |
| IP maskeleme | arban.seeips izni olmayanlar için IP adresleri maskelenir |
| OP koruması | protect-ops: true ile OP'lara ceza verilmesi engellenir |
Süre Formatları
Tüm süre parametrelerinde kullanılabilecek birimler:
| Format | Birim | Örnek |
|---|---|---|
s |
Saniye | 30s |
m |
Dakika | 10m |
h |
Saat | 2h |
d |
Gün | 7d |
w |
Hafta | 2w |
mo |
Ay (30 gün) | 1mo |
y |
Yıl (365 gün) | 1y |
perma / permanent |
Kalıcı | perma |
Veritabanı
Desteklenen Motorlar
| Motor | Açıklama |
|---|---|
| SQLite | Dosya tabanlı, sıfır kurulum (varsayılan) |
| MySQL | Ağ üzerinden erişim, çok sunucu desteği |
Her iki motor da HikariCP bağlantı havuzu kullanır. MySQL deadlock durumları otomatik olarak yönetilir (3 deneme, üstel geri çekilme).
Tablolar
| Tablo | Amaç |
|---|---|
arban_punishments |
Ana ceza tablosu (ban, mute, kick, warn, ipban...) |
arban_punishment_events |
Ceza olay geçmişi (oluşturma, güncelleme, kaldırma) |
arban_ip_history |
Oyuncu IP geçmişi (alt hesap tespiti) |
arban_violations |
İhlal sayacı (escalation sistemi) |
arban_freeze_data |
Dondurulmuş oyuncular |
arban_jails |
Jail kayıtları ve sonuçları |
arban_notify_preferences |
Yetkili bildirim tercihleri |
arban_whitelist |
Oyuncu bazlı veri muafiyeti |
arban_whitelist_ips |
IP bazlı veri muafiyeti |
arban_scheduled_bans |
Zamanlanmış ban kayıtları |
arban_notes |
Yetkili notları |
arban_points |
Ceza puanları |
Import / Export
/arban export <oyuncu> # Tek oyuncunun verilerini JSON olarak aktar
/arban export all # Tüm verileri JSON olarak aktar
/arban import json # JSON dosyasından içe aktarma
/arban import sqlite # SQLite'dan MySQL'e aktarım
Desteklenen kaynaklar: JSON dosyaları, SQLite veritabanı, EssentialsX ban verileri
Mesaj Placeholder'ları
messages.yml dosyasındaki mesajlarda kullanılabilecek değişkenler:
| Placeholder | Açıklama |
|---|---|
%player% |
Oyuncu ismi |
%staff% |
Yetkili ismi |
%reason% |
Ceza sebebi |
%duration% |
Süre |
%expires% |
Bitiş tarihi |
%date% |
İşlem tarihi |
%ip% |
IP adresi |
%type% |
Ceza türü |
%count% |
Sayı |
%value% |
Genel değer |
%id% |
Ceza/uyarı/not ID'si |
%total% |
Toplam sayı |
%server% |
Sunucu adı |
Renk Desteği: &c (kırmızı), &a (yeşil), &#RRGGBB (hex)
Sorun Giderme (Troubleshooting)
Eklentiyle ilgili sorun yaşıyorsanız öncelikle sunucunuzun Java 17+ ve Paper/Folia 1.21+ sürümlerinde çalıştığından emin olun. Komutların çalışmaması durumunda yetkili izinlerini kontrol edin; "Yetkili Koruma (Rate Limit)" mekanizması, kısa sürede çok fazla işlem yapan yetkilileri otomatik olarak kısıtlayabilir. Discord bildirimleri gelmiyorsa webhook ayarlarınızı ve URL doğruluğunu gözden geçirin. Veritabanı veya ceza kalıcılığı sorunlarında, sunucu yeniden başlatmalarında verilerin korunup korunmadığını kontrol edin. Hatalı bir işlem yaptıysanız, "Ceza Geri Alma (Rollback)" özelliğini kullanarak belirli bir zaman dilimindeki işlemleri topluca iptal edebilirsiniz. Sorun devam ederse, konsol çıktılarını inceleyerek hata kayıtlarını kontrol edin.
Hata Kodları ve Log Analizi
ArBan, tüm moderasyon işlemlerini plugins/ArBan/logs dizininde detaylı metin dosyaları halinde saklar. Hatalı komut kullanımları, yetkili rate-limit tetiklenmeleri ve sistem çakışmaları konsol üzerinden [ArBan] etiketiyle raporlanır. Discord Webhook entegrasyonu aktif edildiğinde, tüm ceza işlemleri ve sistem uyarıları yapılandırılan kanallara anlık olarak iletilir. "Yetkili Koruma" mekanizması devreye girdiğinde, ilgili yetkilinin işlemleri geçici olarak askıya alınır ve bu durum loglarda "Rate Limit Exceeded" uyarısı ile belirtilir. Veritabanı veya GUI kaynaklı sorunlarda, /arban debug komutunu kullanarak sistemin mevcut durumunu ve son hata kayıtlarını konsola dökebilirsiniz.