İtemClear

Bu eklenti, Paper 1.20.4 ile 1.21.8+ sürümleri arasındaki Minecraft sunucuları için geliştirilmiş olup Java 17 gereksinimiyle çalışmaktadır. 1.0.0 sürümüyle sunulan bu araç, belirtilen platformlarda kararlı bir performans sunmayı hedefler.

schedule
01

Açıklama

ItemPurger, Minecraft sunucuları için geliştirilmiş güçlü bir yönetici aracıdır. Belirli itemleri yasaklı listeye eklemenize, ardından tüm oyuncuların (hem online hem offline) envanterlerinden, ender chest'lerinden, zırh slotlarından, offhand slotlarından, shulker box içlerinden ve PlayerVaultsX vault'larından bu itemleri toplu olarak tarayıp silmenize olanak tanır.

Plugin, offline oyuncu verilerini doğrudan NMS (Net Minecraft Server) reflection ile NBT dosyalarından okuyup yazarak işler. Bu sayede sunucuya hiç bağlanmamış offline oyuncuların envanterleri bile taranabilir.


02

Özellikler

  • Yasaklı item yönetimi: Elinizdeki herhangi bir itemi yasaklı listeye ekleyip çıkarabilirsiniz.
  • Toplu purge (temizlik): Tek komutla tüm online ve offline oyunculardaki yasaklı itemleri siler.
  • Tek oyuncu purge: Belirli bir oyuncuyu hedefleyerek yasaklı itemlerini temizler.
  • Toplu tarama (scan all): Tüm oyuncuları tarayarak yasaklı item dağılımını silmeden raporlar.
  • Item tarama (scan): Elinizdeki itemin tüm teknik detaylarını (material, display name, lore, enchantment, custom model data, PDC, YAML serialization vb.) gösterir.
  • Offline oyuncu desteği: NMS reflection ile .dat dosyalarını okuyup yazarak offline oyuncuların envanterlerini de tarar ve temizler.
  • Çoklu NMS versiyon desteği: Paper 1.20.4'ten 1.21.8+'ya kadar farklı NMS stratejilerini (legacy, modern, codec) dinamik olarak algılar.
  • Shulker box taraması: Envanterdeki shulker box'ların içindeki itemler de taranır ve gerektiğinde silinir.
  • PlayerVaultsX entegrasyonu: Soft dependency olarak PlayerVaultsX vault'larını da tarar. Compile-time bağımlılığı gerektirmez; tamamı runtime reflection ile çalışır.
  • Batch işleme: Purge ve scan işlemleri tick başına sınırlı sayıda oyuncu işleyerek sunucu performansını korur.
  • Asenkron offline işleme: Offline oyuncu dosyaları asenkron olarak okunur, ana thread'i bloke etmez.
  • Detaylı loglama: Her purge/scan işlemi için konsola detaylı log yazılır (hangi oyuncu, hangi bölüm, hangi slot, kaç adet silindi).
  • İlerleme bildirimi: Büyük purge/scan işlemlerinde %10 aralıkla ilerleme mesajı gönderilir.
  • Çift katmanlı item eşleştirme: Öncelikle material kontrolü (hızlı red), ardından Bukkit YAML serialization ile birebir karşılaştırma yapılır. Bu yöntem tüm item meta verilerini (display name, lore, enchantment, custom model data, PDC, item flags, damage, unbreakable vb.) otomatik olarak kapsar.
  • Eşanlı işlem koruması: AtomicBoolean ile aynı anda birden fazla purge/scan işleminin çalışması engellenir.
  • Kalıcı depolama: Yasaklı item listesi items.yml dosyasına Bukkit serialization ile kaydedilir; sunucu yeniden başladığında liste kaybolmaz.
  • Yapılandırma desteği: Tüm mesajlar ve performans parametreleri config.yml üzerinden özelleştirilebilir.
  • Tab completion: Tüm alt komutlar, item ID'leri ve oyuncu isimleri için tab tamamlama desteği vardır.
  • Debug komutu: NMS reflection durumu, sunucu versiyonu, playerdata dizini ve NBT okuma testi gibi diyagnostik bilgileri gösterir.

03

Gereksinimler

Gereksinim Detay
Sunucu Paper 1.20.4 veya üzeri (Paper fork'ları da desteklenir)
Java 17 veya üzeri
Opsiyonel PlayerVaultsX - Vault taraması için

Not: PlayerVaultsX yüklü değilse plugin sorunsuz çalışır; yalnızca vault taraması devre dışı kalır.


04

Kurulum

  1. Projeyi derleyin veya hazır ItemPurger-1.0.0.jar dosyasını kullanın.
  2. Oluşturulan .jar dosyasını sunucunuzun plugins/ klasörüne kopyalayın.
  3. Sunucuyu yeniden başlatın veya /reload confirm komutunu çalıştırın.
  4. Plugin ilk çalıştığında plugins/ItemPurger/config.yml otomatik olarak oluşturulacaktır.
  5. Gerekirse config.yml dosyasını düzenleyin ve /itempurger reload ile yeniden yükleyin.

05

Komutlar

Ana komut: /itempurger (takma adlar: /ip, /ipurger)

Komut Açıklama İzin
/itempurger add Elinizdeki itemi yasaklı listeye ekler itempurger.add
/itempurger list Yasaklı itemlerin listesini gösterir itempurger.add
/itempurger remove <id> Belirtilen ID'ye sahip itemi listeden kaldırır itempurger.add
/itempurger purge Tüm oyunculardan yasaklı itemleri tarar ve siler itempurger.purge
/itempurger purgeplayer <oyuncu> Belirli bir oyuncudan yasaklı itemleri siler itempurger.purge
/itempurger scan Elinizdeki itemin tüm teknik detaylarını gösterir itempurger.scan
/itempurger scanall Tüm oyuncuları tarar ve yasaklı item dağılımını raporlar (silmez) itempurger.scanall
/itempurger debug NMS reflection ve offline tarama diyagnostik bilgilerini gösterir itempurger.admin
/itempurger reload Yapılandırma dosyasını yeniden yükler itempurger.admin

06

İzinler

İzin Açıklama Varsayılan
itempurger.admin Tüm ItemPurger komutlarına erişim (üst izin) op
itempurger.add Item ekleme, kaldırma ve listeleme op
itempurger.purge Purge işlemlerini çalıştırma op
itempurger.scan Eldeki itemi tarama op
itempurger.scanall Tüm oyuncuları tarama (önizleme) op

itempurger.admin izni diğer tüm izinleri (itempurger.add, itempurger.purge, itempurger.scan, itempurger.scanall) içerir.


07

Yapılandırma (config.yml)

# Purge islemi sirasinda tick basina islenen oyuncu sayisi.
# Dusuk deger = daha az lag, yuksek deger = daha hizli tamamlanma.
batch-size: 10

# PlayerVaultsX vault taramasi aktif mi?
vault-support: true

# Taranan maksimum vault numarasi (1'den baslayarak).
max-vault-number: 99

# Mesajlar - Renk kodlari icin & kullanin.
messages:
  prefix: "&8[&cItemPurger&8] &7"
  item-added: "&aItem basariyla yasakli listeye eklendi. ID: &e{id}"
  item-removed: "&aItem basariyla listeden kaldirildi. ID: &e{id}"
  item-not-found: "&cBu ID ile kayitli item bulunamadi: &e{id}"
  list-header: "&6&m----------&r &cYasakli Itemler &6&m----------"
  list-entry: "&e{id}. &f{material} &7- &f{name} &7(x{amount})"
  list-empty: "&7Yasakli item listesi bos."
  purge-start: "&ePurge islemi baslatildi... Lutfen bekleyin."
  purge-complete: "&aPurge tamamlandi! &f{stacks} &ayigin (&f{items} &aadet) silindi. &f{players} &aoyuncu tarandi."
  no-item-in-hand: "&cElinizde bir item tutmaniz gerekiyor."
  no-permission: "&cBu komutu kullanma yetkiniz yok."
  no-banned-items: "&cYasakli item listesi bos. Once &e/itempurger add &cile item ekleyin."
  scan-header: "&6&m----------&r &cItem Tarama &6&m----------"
  reload-success: "&aKonfigurasyon basariyla yeniden yuklendi."
  purge-already-running: "&cBir purge islemi zaten devam ediyor. Lutfen bitmesini bekleyin."
  purgeplayer-start: "&e{player} &7icin purge baslatildi..."
  purgeplayer-complete: "&a{player} &7icin purge tamamlandi! &f{stacks} &ayigin (&f{items} &aadet) silindi."
  purgeplayer-not-found: "&cOyuncu bulunamadi: &e{player}"
  scanall-start: "&eTum oyuncular taraniyor... Lutfen bekleyin."
  scanall-header: "&6&m----------&r &cTarama Sonuclari &6&m----------"
  scanall-item-header: "&e#{id} &f{material} &7- &f{name}"
  scanall-item-detail: "&7  Toplam: &f{total} &7adet (&f{stacks} &7yigin) - &f{players} &7oyuncuda"
  scanall-player-detail: "&7    {player}: &f{amount} &7adet ({section})"
  scanall-no-match: "&7  Hicbir oyuncuda bulunamadi."
  scanall-summary: "&aTarama tamamlandi! &f{totalItems} &aadet yasakli item bulundu. &f{totalPlayers} &aoyuncu tarandi."
  scanall-already-running: "&cBir tarama/purge islemi zaten devam ediyor."
  unknown-command: "&cBilinmeyen alt komut. Kullanim: &e/itempurger <add|list|remove|purge|purgeplayer|scan|scanall|reload>"

Yapılandırma Parametreleri

Anahtar Tür Varsayılan Açıklama
batch-size int 10 Tick başına işlenen oyuncu sayısı. Düşük değer daha az lag oluşturur, yüksek değer purge işlemini hızlandırır.
vault-support boolean true PlayerVaultsX vault taramasını etkinleştirir/devre dışı bırakır.
max-vault-number int 99 Her oyuncu için taranan maksimum vault numarası (1'den başlar).
messages.* string - Tüm oyun içi mesajlar. & ile renk kodları, {placeholder} ile değişken yerleşimi desteklenir.

Kullanılabilir Placeholder'lar

Placeholder Kullanıldığı Mesajlar Açıklama
{id} item-added, item-removed, item-not-found, list-entry, scanall-item-header Item ID numarası
{material} list-entry, scanall-item-header Item material adı
{name} list-entry, scanall-item-header Item görünen adı
{amount} list-entry, scanall-player-detail Item miktarı
{stacks} purge-complete, purgeplayer-complete, scanall-item-detail Silinen/bulunan yığın sayısı
{items} purge-complete, purgeplayer-complete Silinen toplam item adedi
{players} purge-complete, scanall-item-detail Taranan/etkilenen oyuncu sayısı
{player} purgeplayer-start, purgeplayer-complete, purgeplayer-not-found, scanall-player-detail Oyuncu adı
{total} scanall-item-detail Bulunan toplam item adedi
{totalItems} scanall-summary Tüm yasaklı itemlerin toplam adedi
{totalPlayers} scanall-summary Taranan toplam oyuncu sayısı
{section} scanall-player-detail Bölüm adı (Envanter, Ender Chest, Vault #N vb.)

08

Nasıl Çalışır

Item Eşleştirme Motoru

Plugin, yasaklı itemleri tespit etmek için çift katmanlı bir eşleştirme sistemi kullanır:

  1. Hızlı red (Fast reject): Aday itemin material tipi yasaklı itemle karşılaştırılır. Uyuşmazlık varsa işlem anında atlanır.
  2. Tam eşleştirme: Her iki item de normalize edilir (miktar 1'e ayarlanır), ardından Bukkit'in YAML serialization mekanizmasıyla karşılaştırılır. Bu yöntem; display name, lore, enchantment, custom model data, PersistentDataContainer, item flags, damage, unbreakable gibi bilinen tüm item özelliklerini otomatik olarak kapsar.

Bu çift katmanlı yaklaşım sayesinde yanlış pozitif oranı minimuma indirilirken, performans da korunmuş olur.

Purge İşlemi Akışı

  1. Yasaklı item listesi kontrol edilir.
  2. Eşanlı işlem bayrağı (AtomicBoolean) kontrol edilir.
  3. Online oyuncular kuyruğa eklenir.
  4. Offline oyuncuların .dat dosyaları toplanır.
  5. PurgeBatchTask başlatılır:
    • Online oyuncular: Her tick'te en fazla 2 oyuncu işlenir. Envanter, zırh slotları, offhand, ender chest ve vault'lar taranır.
    • Offline oyuncular: Eşanlı en fazla 3 asenkron görev çalıştırılır. NMS reflection ile NBT dosyaları okunur, eşleşen itemler silinir ve değişiklik varsa dosya güvenli bir şekilde (geçici dosya + atomik taşınma) geri yazılır.
  6. %10 aralıkla ilerleme mesajı gönderilir.
  7. İşlem tamamlandığında özet rapor hem oyuncuya hem konsola yazılır.

Offline Oyuncu İşlemesi

Offline oyuncuların verileri sunucunun world/playerdata/ dizinindeki .dat dosyalarında saklanır. Plugin bu dosyaları NMS reflection ile okur:

  1. NbtIo.readCompressed() ile NBT verisi okunur.
  2. Inventory ve EnderItems NBT listeleri alınır.
  3. Her item NBT CompoundTag'den Bukkit ItemStack'e dönüştürülür.
  4. ItemMatcher ile yasaklı item karşılaştırması yapılır.
  5. Eşleşen itemler NBT listesinden çıkarılır.
  6. Değişiklik varsa NBT verisi geçici dosyaya yazılır ve atomik taşınma ile orijinal dosyanın yerine konur.

Çoklu NMS Versiyon Desteği

Plugin, farklı Minecraft/Paper sürümlerini dinamik olarak destekler:

Strateji Sürümler Yöntem
Legacy 1.20.4 ItemStack.of(CompoundTag)
Modern 1.20.5 - 1.21.4 ItemStack.parseOptional(HolderLookup.Provider, CompoundTag)
Codec 1.21.5+ / 1.21.8 ItemStack.CODEC.parse(RegistryOps, CompoundTag)

Metod isimleri hardcode edilmez; runtime'da reflection ile taranır. Bu sayede obfuscated veya yeniden adlandırılmış metodlar da otomatik olarak bulunur.

Shulker Box Desteği

Envanterdeki shulker box'lar tespit edildiğinde içleri de ayrıca taranır. Eşleşen item bulunursa shulker box'ın içinden silinir ve shulker box güncel haliyle geri kaydedilir. Bu işlem hem online hem offline oyuncular için geçerlidir.

PlayerVaultsX Entegrasyonu

PlayerVaultsX soft dependency olarak tanımlanmıştır. Plugin yüklü ve aktifse:

  1. VaultManager sınıfı reflection ile yüklenir.
  2. getVault() ve saveVault() metodları yakalanır.
  3. Her oyuncu için 1'den max-vault-number değerine kadar vault'lar taranır.
  4. Eşleşen itemler silinir ve vault kaydedilir.

PlayerVaultsX yüklü değilse bu adımlar sessizce atlanır.


auto_awesome Benzer Projeler