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.

schedule
01

Ö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.yml dosyası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

02

Gereksinimler

Gereksinim Minimum Versiyon Not
Java 17+
Paper / Folia 1.21+
PlaceholderAPI 2.11.6+ Opsiyonel — yüklüyse otomatik aktif olur

03

Kurulum

  1. Projeyi derleyin veya hazır JAR dosyasını indirin (ArBan-3.8.jar)
  2. JAR dosyasını sunucunuzun plugins/ klasörüne kopyalayın
  3. Sunucuyu başlatın — plugins/ArBan/config.yml ve plugins/ArBan/messages.yml otomatik oluşturulur
  4. config.yml dosyasını ihtiyacınıza göre düzenleyin
  5. Mesajları özelleştirmek için messages.yml dosyasını düzenleyin
  6. /arban reload komutuyla değişiklikleri uygulayın

04

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

05

`/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
════════════════════════════════════

06

İ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

07

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: "&#6B00D6&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.yml dosyasında tek bir gui: bloğu bulunmalıdır. Birden fazla gui: 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.


08

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

09

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

10

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/jail online oyuncu gerektirir (offline hedef → INVALID_TARGET). Aynı türde aktif ceza varsa ArBan günceller ve sonuç SUCCESS döner. getPunishmentById(id), kaldırılmış cezalar için artık getRemovedBy() / 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;
        }
    }
});

11

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

12

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

13

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ı

14

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


15

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)


16

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.

17

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.

auto_awesome Benzer Projeler