İ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.
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.
Ö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
.datdosyaları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ı:
AtomicBooleanile aynı anda birden fazla purge/scan işleminin çalışması engellenir. - Kalıcı depolama: Yasaklı item listesi
items.ymldosyası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.
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.
Kurulum
- Projeyi derleyin veya hazır
ItemPurger-1.0.0.jardosyasını kullanın. - Oluşturulan
.jardosyasını sunucunuzunplugins/klasörüne kopyalayın. - Sunucuyu yeniden başlatın veya
/reload confirmkomutunu çalıştırın. - Plugin ilk çalıştığında
plugins/ItemPurger/config.ymlotomatik olarak oluşturulacaktır. - Gerekirse
config.ymldosyasını düzenleyin ve/itempurger reloadile yeniden yükleyin.
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 |
İ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.
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.) |
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:
- 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.
- 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ışı
- Yasaklı item listesi kontrol edilir.
- Eşanlı işlem bayrağı (
AtomicBoolean) kontrol edilir. - Online oyuncular kuyruğa eklenir.
- Offline oyuncuların
.datdosyaları toplanır. PurgeBatchTaskbaş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.
- %10 aralıkla ilerleme mesajı gönderilir.
- İş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:
NbtIo.readCompressed()ile NBT verisi okunur.InventoryveEnderItemsNBT listeleri alınır.- Her item NBT CompoundTag'den Bukkit
ItemStack'e dönüştürülür. ItemMatcherile yasaklı item karşılaştırması yapılır.- Eşleşen itemler NBT listesinden çıkarılır.
- 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:
VaultManagersınıfı reflection ile yüklenir.getVault()vesaveVault()metodları yakalanır.- Her oyuncu için 1'den
max-vault-numberdeğerine kadar vault'lar taranır. - Eşleşen itemler silinir ve vault kaydedilir.
PlayerVaultsX yüklü değilse bu adımlar sessizce atlanır.