ArInventoryRollback
Versiyon: 1.0.0-SNAPSHOT Platform: Paper 1.21.4+ Java: 21
Kısa Açıklama
ArInventoryRollback, Minecraft sunucuları için geliştirilmiş profesyonel bir envanter yedekleme ve geri yükleme pluginidir. Oyuncuların envanterlerini otomatik veya manuel olarak yedekler, artımlı (incremental) yedekleme ile disk alanından tasarruf sağlar ve zengin bir GUI arayüzü üzerinden tüm işlemleri kolayca yönetmenize olanak tanır. Ölüm, giriş, çıkış, dünya değişikliği, oyun modu değişikliği, ender sandık etkileşimi ve sandık açma/kapama gibi çok sayıda tetikleyici destekler. SQLite, MySQL ve YAML olmak üzere üç farklı depolama yöntemiyle çalışır.
Özellikler
Yedekleme
- Otomatik yedekleme -- Ölüm, giriş, çıkış, dünya değişikliği, oyun modu değişikliği, ender sandık etkileşimi, sandık açma/kapama ve zamanlayıcı tetikleyicileriyle otomatik yedek oluşturma
- Manuel yedekleme --
/iade saveveya/backupkomutuyla anlık yedek alma, opsiyonel etiketleme desteği - Toplu yedekleme --
/iade saveallile sunucudaki tüm çevrimiçi oyuncuların envanterini tek seferde yedekleme - Artımlı (incremental) yedekleme -- Sadece değişen slotları kaydederek disk ve veritabanı tasarrufu sağlama
- Değişiklik algılama -- Envanterde hiçbir değişiklik yoksa yedek almayı atlama (
skip-unchanged) - Bekleme süresi (cooldown) -- Otomatik tetikleyiciler arasında yapılandırılabilir bekleme süresi
Geri Yükleme
- Tam geri yükleme -- Envanter, zırh, yan el, ender sandık, XP, sağlık, açlık, tokluk ve iksir etkileri dahil tüm verileri geri yükleme
- Kısmi geri yükleme -- Sadece zırh, hotbar, ana envanter, ender sandık, XP veya seçili slotlar gibi belirli kapsamlarda geri yükleme
- Shulker kutusuna geri yükleme -- Yedekteki eşyaları oyuncunun elindeki shulker kutusuna aktarma
- Geri alma (undo) -- Geri yükleme işlemini geri alabilme, yapılandırılabilir zincir uzunluğu
- Toplu geri yükleme -- Belirli bir zaman damgasına göre birden fazla oyuncunun envanterini aynı anda geri yükleme
- Çevrimdışı oyuncu desteği -- Çevrimdışı oyuncular için geri yükleme kaydı tutma, giriş yaptığında otomatik uygulama
Güvenlik
- SHA-256 bütünlük kontrolü -- Her yedeğe hash atanarak veri bozulması algılama
- Karantina sistemi -- Bozuk veya şüpheli yedekleri karantinaya alma, inceleme ve kalıcı silme
- Denetim kaydı (audit log) -- Tüm işlemlerin kayıt altına alınması, veritabanına opsiyonel loglama
- Yedek kilitleme -- Önemli yedekleri kilitleyerek yanlışlıkla silinmesini önleme
GUI Arayüzü
- Ana menü -- Tüm işlemlere erişim sağlayan merkezi arayüz
- Yedek kategorileri -- Tetikleyici tipine göre yedekleri filtreleme ve görüntüleme
- Zaman çizelgesi (timeline) -- Yedekleri kronolojik sırayla görüntüleme
- Isı haritası -- Envanter slotlarının değişim sıklığını görsel olarak gösterme
- Karşılaştırma -- İki yedeği yan yana karşılaştırma, farkları vurgulama
- Önizleme -- Geri yükleme öncesi sonucu önizleme
- Arama ve filtreleme -- Eşya adına, tetikleyici tipine, tarihe ve etikete göre arama
- Şablon yönetimi -- Envanter şablonları oluşturma, kaydetme ve uygulama
- Dışa/İçe aktarma -- JSON ve YAML formatlarında yedek aktarma
- Admin paneli -- Genel bakış, istatistik raporu, işlem geçmişi, karantina yönetimi, toplu restore, zamanlayıcı ayarları ve oyuncu seçici
Entegrasyonlar
- Discord webhook -- Geri yükleme, silme, bozulma tespiti ve toplu geri yükleme olaylarını Discord kanalına bildirim olarak gönderme
- Geliştirici API -- Dış pluginlerin yedekleme, geri yükleme, sorgulama ve karşılaştırma işlemlerini yapabilmesi için rate limit korumalı API
- Bukkit Event sistemi --
BackupCreateEvent,BackupDeleteEvent,BackupRestoreEvent,BulkRestoreStartEvent,BulkRestoreCompleteEventözel eventleri
Depolama
- SQLite -- Varsayılan, tek dosya tabanlı hafif veritabanı
- MySQL -- HikariCP bağlantı havuzu ile yüksek performanslı uzak veritabanı desteği
- YAML -- Dosya tabanlı yedekleme (küçük sunucular için)
- Veri taşıma -- Depolama türleri arasında toplu veri aktarımı
Diğer
- Zamanlayıcı --
interval: 1h,daily: 00:00,weekly: monday 12:00formatlarında otomatik periyodik yedekleme - Otomatik temizlik -- Belirli gün sayısından eski yedekleri otomatik silme
- Etiketleme -- Yedeklere özel etiket/not ekleme
- Çoklu dil desteği -- Tüm mesajlar
messages.ymldosyasından özelleştirilebilir, HEX renk kodu desteği (&#RRGGBB) - Debug modu -- Detaylı log çıktısı ile sorun giderme
Gereksinimler
| Gereksinim | Minimum Versiyon |
|---|---|
| Java | 21 |
| Paper | 1.21.4+ |
| MySQL (opsiyonel) | 5.7+ / MariaDB 10.2+ |
Not: Bu plugin Paper API'ye bağımlıdır. Spigot veya CraftBukkit üzerinde çalışmaz.
Kurulum
- Projeyi derleyin veya hazır
.jardosyasını edinin (bkz. Derleme bölümü). - Oluşan
ArInventoryRollback-1.0.0-SNAPSHOT.jardosyasını sunucunuzunplugins/klasörüne kopyalayın. - Sunucuyu başlatın veya yeniden başlatın.
plugins/ArInventoryRollback/config.ymldosyası otomatik olarak oluşturulacaktır.- Yapılandırma dosyasını ihtiyaçlarınıza göre düzenleyin ve
/iade reloadkomutuyla yeniden yükleyin.
Komutlar
Ana Komut: /iade
| Komut | Takma Ad | Açıklama | Yetki |
|---|---|---|---|
/iade |
/envanter, /inv |
GUI ana menüsünü açar | iade.use |
/iade help |
yardim |
Yardım mesajını gösterir | iade.use |
/iade info |
bilgi |
Sistem istatistiklerini gösterir | iade.use |
/iade save [oyuncu] [etiket] |
kaydet |
Manuel yedek oluşturur | iade.backup |
/iade saveall [etiket] |
tumunukaydet |
Tüm çevrimiçi oyuncuları yedekler | iade.admin.bulkrestore |
/iade restore <oyuncu> |
yukle |
Oyuncunun son yedeğini geri yükler | iade.restore.full |
/iade undo [oyuncu] |
geral |
Son geri yüklemeyi geri alır | iade.restore.full |
/iade list [oyuncu] [sayfa] |
liste |
Yedekleri listeler | iade.view |
/iade clear <oyuncu> [onay] |
temizle |
Oyuncunun tüm yedeklerini siler | iade.admin.others |
/iade clearall [onay] |
tumunusil |
Tüm yedekleri siler | iade.admin.migrate |
/iade purge <gün> |
temizlik |
Belirtilen günden eski yedekleri siler | iade.admin.others |
/iade admin |
- | Admin panelini açar (GUI) | iade.admin.dashboard |
/iade reload |
yenile |
Yapılandırmayı yeniden yükler | iade.admin.reload |
/iade <oyuncu> |
- | Oyuncunun yedeklerini GUI'de açar | iade.admin.others |
Hızlı Yedekleme: /backup
| Komut | Açıklama | Yetki |
|---|---|---|
/backup [etiket] |
Hızlı manuel envanter yedeği alır | iade.backup |
İzinler
Genel İzinler
| İzin | Açıklama | Varsayılan |
|---|---|---|
iade.* |
Tüm iade yetkileri | OP |
iade.use |
/iade komutunu kullanma |
Herkes |
iade.view |
Yedekleri görüntüleme | Herkes |
iade.compare |
Yedekleri karşılaştırma | Herkes |
iade.backup |
/backup ve /iade save komutlarını kullanma |
Herkes |
iade.restore.partial |
Kısmi geri yükleme | OP |
iade.restore.full |
Tam geri yükleme | OP |
iade.export |
Yedek dışa aktarma | OP |
iade.import |
Yedek içe aktarma | OP |
iade.delete |
Yedek silme | OP |
iade.teleport |
Ölüm noktasına ışınlanma | OP |
iade.audit |
İşlem kayıtlarını görme | OP |
Admin İzinleri
| İzin | Açıklama | Varsayılan |
|---|---|---|
iade.admin.* |
Tüm admin yetkileri | OP |
iade.admin.dashboard |
Admin paneli erişimi | OP |
iade.admin.bulkrestore |
Toplu restore ve saveall yapma | OP |
iade.admin.others |
Başka oyuncuların yedeklerine erişim, clear, purge | OP |
iade.admin.quarantine |
Karantina yönetimi | OP |
iade.admin.lock |
Yedek kilitleme | OP |
iade.admin.scheduler |
Zamanlayıcı yönetimi | OP |
iade.admin.migrate |
Veri taşıma ve clearall | OP |
iade.admin.reload |
Config yeniden yükleme | OP |
Yapılandırma
Plugin ilk çalıştırıldığında plugins/ArInventoryRollback/config.yml dosyası oluşturulur. Yeni sürümlerde eklenen eksik ayarlar otomatik olarak varsayılan değerleriyle eklenir.
config.yml Açıklaması
# Debug modu - detaylı log mesajlarını konsola yazdırır.
debug: false
# Depolama ayarları
storage:
# Depolama tipi: sqlite, mysql, yaml
type: sqlite
sqlite:
file: data.db # SQLite veritabanı dosya adı
mysql:
host: localhost # MySQL sunucu adresi
port: 3306 # MySQL portu
database: arinventory # Veritabanı adı
username: root # Kullanıcı adı
password: "" # Şifre
pool-size: 10 # HikariCP bağlantı havuzu boyutu
yaml:
directory: backups # YAML yedek klasörü
# Yedekleme ayarları
backup:
triggers:
death: true # Ölüm anında yedek al
login: true # Giriş yapınca yedek al
logout: true # Çıkış yapınca yedek al
world-change: true # Dünya değişiminde yedek al
gamemode-change: true # Oyun modu değişiminde yedek al
timer: true # Zamanlayıcı ile periyodik yedek al
ender-chest: true # Ender sandık etkileşiminde yedek al
chest-open: false # Sandık açmada yedek al
chest-close: false # Sandık kapamada yedek al
incremental: true # Artımlı yedekleme (sadece değişen slotlar)
skip-unchanged: true # Değişiklik yoksa yedek almayı atla
cooldown-seconds: 5 # Tetikleyiciler arası bekleme süresi (sn)
# Zamanlayıcı ayarları
scheduler:
enabled: true
# Desteklenen formatlar:
# "interval: 1h" - Her 1 saatte bir
# "daily: 00:00" - Her gün gece yarısı
# "weekly: monday 12:00" - Her Pazartesi öğle
expression: "interval: 1h"
# Otomatik temizlik
auto-purge:
enabled: true
days: 30 # Kaç günden eski yedekler silinsin
# Geri yükleme ayarları
restore:
undo-max-chain: 5 # Maksimum geri alma zinciri uzunluğu
allow-extra-shulkers: true # Shulker kutusuna geri yükleme izni
offline-restore: true # Çevrimdışı oyunculara geri yükleme
# Güvenlik ayarları
security:
log-to-database: false # Denetim kayıtlarını veritabanına da yaz
hash-algorithm: SHA-256 # Bütünlük kontrol algoritması
# Discord webhook ayarları
discord:
enabled: false
webhook-url: ""
events:
restore: true # Geri yükleme bildirimi
delete: true # Silme bildirimi
corruption: true # Bozulma tespiti bildirimi
bulk-restore: true # Toplu geri yükleme bildirimi
# GUI ayarları
gui:
items-per-page: 28 # Sayfa başına gösterilecek yedek sayısı
animation-enabled: true # GUI animasyonları (diff yanıp sönme vb.)
# Geliştirici API ayarları
api:
rate-limit-per-minute: 10 # Dakika başına maks API çağrısı (oyuncu başına)
# Veri taşıma ayarları
migration:
batch-size: 1000 # Toplu veri taşıma parti boyutu
messages.yml
Tüm plugin mesajları plugins/ArInventoryRollback/messages.yml dosyasından özelleştirilebilir. HEX renk kodları (&#RRGGBB) ve eski Minecraft renk kodları (&a, &c vb.) desteklenir. Placeholder'lar {değişken_adı} formatında kullanılır.
Nasıl Çalışır
Yedekleme Akışı
- Bir tetikleyici olayı gerçekleşir (ölüm, giriş, çıkış, zamanlayıcı vb.) veya oyuncu manuel yedek alır.
- Cooldown kontrolü yapılır -- aynı oyuncu için son yedekten bu yana yeterli süre geçip geçmediği kontrol edilir.
IncrementalEngine, oyuncunun mevcut envanterini yakalar (ana envanter 36 slot, zırh 4 slot, yan el, ender sandık 27 slot, XP, sağlık, açlık, tokluk, iksir etkileri).- Artımlı yedekleme aktifse, önceki yedekle karşılaştırılır ve sadece değişen slotlar kaydedilir. Değişmeyen slotlar
nullolarak işaretlenir. skip-unchangedaktifse ve hiçbir slot değişmemişse yedek oluşturma atlanır.- SHA-256 hash hesaplanarak veri bütünlüğü sağlanır.
- Yedek, seçilen depolama sağlayıcısına (SQLite/MySQL/YAML) kaydedilir.
- Slot değişim sayaçları güncellenir (ısı haritası için).
Geri Yükleme Akışı
- Yedek ID'si ile depolama sağlayıcısından yedek verisi alınır.
- Artımlı zincir çözümlenir --
nullolan slotlar önceki yedeklerden geriye doğru izlenerek doldurulur. - Geri alma (undo) için oyuncunun mevcut envanterinin anlık görüntüsü kaydedilir.
- Seçilen kapsama (
RestoreScope) göre veriler ana thread üzerinde oyuncuya uygulanır. - Kapsam seçenekleri: tam, sadece zırh, sadece hotbar, ana envanter, ender sandık, sadece XP, zırh+hotbar, envanter+zırh, seçili slotlar.
Artımlı Yedekleme
Artımlı yedekleme, her yedekte sadece önceki yedeğe göre değişen slotları kaydeder. Bu, depolama alanını önemli ölçüde azaltır. Her yedek, önceki yedeğin ID'sini (previousBackupId) referans olarak tutar. Geri yükleme sırasında, zincir geriye doğru takip edilerek tüm slotlar birleştirilerek tam veri elde edilir.
Güvenlik Mekanizmaları
- Bütünlük kontrolü: Her yedek kaydedilirken SHA-256 hash hesaplanır. Geri yükleme veya tarama sırasında hash doğrulanarak veri bozulması tespit edilir.
- Karantina: Bütünlük kontrolünden geçemeyen yedekler otomatik olarak karantinaya alınır ve normal işlemlerden izole edilir.
- Denetim kaydı: Tüm önemli işlemler (geri yükleme, silme, kilitleme vb.) kayıt altına alınır.
- Yedek kilitleme: Kilitli yedekler silinemez ve otomatik temizlik tarafından atlanır.