ArceniaDeger
Bu proje,
Açıklama
ArceniaWorth, Minecraft sunucuları için geliştirilmiş bir eşya değer ve satış sistemi eklentisidir. Oyuncular ellerindeki eşyaların değerlerini sorgulayabilir, eşyalarını tek tek veya toplu olarak satabilir ve grafiksel arayüz (GUI) üzerinden satış işlemlerini gerçekleştirebilir. Yöneticiler ise oyun içinden eşya fiyatlarını belirleyebilir. Eklenti, Folia uyumlu olarak tasarlanmıştır ve ProtocolLib sayesinde eşyaların değerlerini istemci tarafında lore (açıklama) satırı olarak gösterir.
Özellikler
- Eşya Değer Sorgulama: Oyuncular ellerindeki eşyanın birim fiyatını
/worthkomutuyla öğrenebilir. - Tekil Satış:
/sell handkomutuyla eldeki eşya anında satılır ve kazanç Vault ekonomisine eklenir. - Toplu Satış:
/sell allkomutuyla envanterdeki (slot 0-35) satılabilir tüm eşyalar tek seferde satılır. - GUI ile Satış:
/sell gui(veya sadece/sell) komutuyla açılan grafiksel menüden "Hepsini Sat" butonuna tıklanarak toplu satış yapılabilir. - Fiyat Belirleme: Yöneticiler
/setworth <fiyat>komutuyla ellerindeki eşyanın türüne fiyat atayabilir; değişiklikler anındaworth.ymldosyasına kaydedilir. - İstemci Tarafı Lore Gösterimi: ProtocolLib entegrasyonu sayesinde eşyaların üzerine gelindiğinde birim fiyat ve toplam değer bilgisi otomatik olarak lore satırı olarak görünür. Bu bilgi yalnızca istemci tarafında gösterilir, sunucu tarafındaki gerçek eşya verisi değişmez.
- Vault Ekonomi Entegrasyonu: Tüm para işlemleri Vault API üzerinden yapılır; EssentialsX Economy, CMI Economy gibi Vault destekli ekonomi eklentileriyle uyumludur.
- Folia Desteği: Eklenti
folia-supported: trueolarak işaretlenmiştir ve Folia sunucularda çalışacak şekilde tasarlanmıştır. - Tamamen Yapılandırılabilir: Tüm mesajlar, GUI düzeni, lore formatı ve eşya fiyatları yapılandırma dosyalarından düzenlenebilir.
- Anlık Yeniden Yükleme:
/arceniaworth reloadkomutuyla tüm yapılandırma dosyaları sunucuyu yeniden başlatmadan yüklenebilir. - ConcurrentHashMap ile Thread-Safe Fiyat Yönetimi: Eşya fiyatları
ConcurrentHashMapile tutulur, çoklu thread ortamlarında güvenli çalışır. - Adventure API Renk Desteği: Paper'ın native Adventure API'si ve
LegacyComponentSerializerkullanılarak&renk kodları desteklenir.
Gereksinimler
| Bağımlılık | Tür | Açıklama |
|---|---|---|
| Paper / Folia 1.21+ | Sunucu | Minecraft sunucu yazılımı |
| Java 21 | Çalışma Ortamı | Derleme ve çalıştırma için gerekli |
| Vault | Eklenti (soft-depend) | Ekonomi API sağlayıcısı |
| ProtocolLib 5.3.0+ | Eklenti (depend) | Paket dinleyici; istemci tarafı lore gösterimi için zorunlu |
| Bir Vault ekonomi eklentisi | Eklenti | EssentialsX Economy, CMI Economy vb. |
Not: Vault yüklü değilse eklenti otomatik olarak devre dışı kalır. ProtocolLib yüklü değilse eklenti çalışmaya devam eder ancak istemci tarafı lore özelliği devre dışı kalır.
Kurulum
- Projeyi derleyin veya hazır JAR dosyasını edinin (bkz. Derleme).
- Oluşan
ArceniaWorth-1.0-SNAPSHOT.jardosyasını sunucunuzunplugins/klasörüne kopyalayın. - Vault ve bir ekonomi eklentisinin (ör. EssentialsX) kurulu ve çalışır durumda olduğundan emin olun.
- ProtocolLib eklentisini
plugins/klasörüne ekleyin. - Sunucuyu başlatın. Eklenti otomatik olarak
plugins/ArceniaWorth/klasörü altındaconfig.ymlveworth.ymldosyalarını oluşturacaktır. worth.ymldosyasından eşya fiyatlarını,config.ymldosyasından mesajları ve GUI ayarlarını düzenleyebilirsiniz.- Değişikliklerden sonra
/arceniaworth reloadkomutuyla yapılandırmayı yeniden yükleyin.
Komutlar ve İzinler
Komutlar
| Komut | Açıklama | Kullanım |
|---|---|---|
/worth |
Elindeki eşyanın birim değerini gösterir. | /worth |
/sell hand |
Elindeki eşyayı satar. | /sell hand |
/sell all |
Envanterdeki satılabilir tüm eşyaları satar. | /sell all |
/sell gui |
Satış menüsünü (GUI) açar. | /sell gui veya /sell |
/setworth <fiyat> |
Elindeki eşyanın türüne fiyat belirler. | /setworth 100.0 |
/arceniaworth |
Eklenti bilgisini gösterir. | /arceniaworth |
/arceniaworth reload |
Yapılandırma dosyalarını yeniden yükler. | /arceniaworth reload |
İzinler
| İzin | Açıklama | Varsayılan |
|---|---|---|
arceniaworth.admin |
/setworth ve /arceniaworth reload komutlarını kullanma yetkisi |
op |
/worth,/sellkomutları herhangi bir izin gerektirmez ve tüm oyuncular tarafından kullanılabilir.
Yapılandırma
Eklenti iki yapılandırma dosyası kullanır:
config.yml
# ArceniaWorth Yapılandırması
messages:
prefix: "&e&lArceniaWorth &8» &7"
no-permission: "&cBu komutu kullanmak için yetkiniz yok."
must-be-player: "&cBu komut sadece oyuncular tarafından kullanılabilir."
item-no-worth: "&cBu eşyanın belirlenmiş bir değeri yok."
worth-check: "&e%item% &aeşyasının tanesi &6$%price% &adeğerinde."
sell-success: "&e%amount%x %item% &aeşyasını &6$%total% &akarşılığında sattınız."
nothing-to-sell: "&cSatılacak eşyanız yok."
price-set: "&e%item% &aeşyasının değeri &6$%price% &aolarak ayarlandı."
invalid-price: "&cGeçersiz fiyat girdiniz."
reload-success: "&aYapılandırma başarıyla yenilendi."
inventory-full: "&cEnvanteriniz dolu!"
usage-sell: "&cKullanım: /sell <hand|all|gui>"
usage-setworth: "&cKullanım: /setworth <fiyat>"
hold-item: "&cLütfen elinize bir eşya alın."
lore:
enabled: true # İstemci tarafı lore gösterimini aç/kapa
format:
- ""
- "&eDeğeri: &a$%total_worth%"
- "&7(Tanesi: $%unit_price%)"
gui:
title: "&8Satış Menüsü"
size: 27
fill-item: GRAY_STAINED_GLASS_PANE
sell-all-slot: 13
sell-all-item: EMERALD
sell-all-name: "&a&lHEPSİNİ SAT"
sell-all-lore:
- "&7Envanterindeki satılabilir tüm"
- "&7eşyaları satmak için tıkla."
Yapılandırma Açıklamaları
| Bölüm | Anahtar | Açıklama |
|---|---|---|
messages |
prefix |
Eklenti mesaj öneki |
messages |
no-permission |
Yetkisiz komut kullanımı mesajı |
messages |
must-be-player |
Konsoldan oyuncu komutu çalıştırılınca gösterilen mesaj |
messages |
item-no-worth |
Değeri olmayan eşya sorgulandığında gösterilen mesaj |
messages |
worth-check |
/worth komut çıktısı. Yer tutucular: %item%, %price% |
messages |
sell-success |
Satış başarılı mesajı. Yer tutucular: %amount%, %item%, %total% |
messages |
nothing-to-sell |
Satılacak eşya yokken gösterilen mesaj |
messages |
price-set |
Fiyat ayarlama onay mesajı. Yer tutucular: %item%, %price% |
messages |
invalid-price |
Geçersiz fiyat girişi mesajı |
messages |
reload-success |
Yapılandırma yeniden yükleme onay mesajı |
messages |
hold-item |
Elde eşya yokken gösterilen mesaj |
lore |
enabled |
true / false - ProtocolLib ile istemci tarafı lore gösterimini açar/kapar |
lore |
format |
Eşya açıklamasına eklenen satırlar. Yer tutucular: %total_worth%, %unit_price% |
gui |
title |
Satış GUI başlığı |
gui |
size |
GUI boyutu (satır sayisi x 9, varsayılan 27 = 3 satır) |
gui |
fill-item |
Boş slotları dolduran materyal |
gui |
sell-all-slot |
"Hepsini Sat" butonunun slot numarası |
gui |
sell-all-item |
"Hepsini Sat" buton materyali |
gui |
sell-all-name |
"Hepsini Sat" buton adı |
gui |
sell-all-lore |
"Hepsini Sat" buton açıklama satırları |
worth.yml
Eşya fiyatlarının tanımlandığı dosyadır. Her satır MATERYAL_ADI: fiyat formatındadır.
# Değerli Taşlar
DIAMOND: 100.0
EMERALD: 75.0
AMETHYST_SHARD: 15.0
LAPIS_LAZULI: 10.0
# Metaller
NETHERITE_INGOT: 500.0
GOLD_INGOT: 50.0
IRON_INGOT: 25.0
COPPER_INGOT: 5.0
# Bloklar
DIAMOND_BLOCK: 900.0
EMERALD_BLOCK: 675.0
GOLD_BLOCK: 450.0
IRON_BLOCK: 225.0
# Tarım Ürünleri
WHEAT: 2.0
CARROT: 3.0
POTATO: 3.0
# ... ve daha fazlası
Materyal adları Bukkit Material enum değerleriyle birebir eşleşmelidir. Tam liste: Spigot Material Javadoc
Yeni bir eşya eklemek için dosyayı düzenleyip /arceniaworth reload komutunu çalıştırabilir veya oyun içinde /setworth <fiyat> komutunu kullanabilirsiniz.
Nasıl Çalışır
Genel Akış
Başlatma: Eklenti yüklendiğinde Vault ekonomi sağlayıcısını kaydeder,
config.ymlveworth.ymldosyalarını okur, komutları ve olay dinleyicileri kaydeder. ProtocolLib mevcutsa paket dinleyicisi de aktif edilir.Fiyat Yönetimi (
WorthManager): Eşya fiyatlarıworth.ymldosyasından yüklenerek birConcurrentHashMap<Material, Double>yapısında saklanır. Bu sayede çoklu thread erişiminde veri tutarlılığı sağlanır. Fiyat sorgulamaları materyal türüne göre yapılır.Değer Sorgulama (
/worth): Oyuncunun ana elindeki eşyanın materyal türüWorthManagerüzerinden sorgulanır ve birim fiyat mesaj olarak gösterilir.Satış İşlemi (
/sell):hand: Eldeki eşya kaldırılır,Economy.depositPlayer()ile para yatırılır. İşlem başarısız olursa eşya geri verilir.all: Envanterin 0-35 slotları taranır, değeri olan eşyalar kaldırılır ve toplam tutar tek seferde yatırılır.gui: 27 slotluk bir GUI açılır. Ortadaki zümrüt butona tıklandığında/sell alltetiklenir.
İstemci Tarafı Lore (
PacketManager): ProtocolLib ileSET_SLOTveWINDOW_ITEMSpaketleri dinlenir. Sunucudan istemciye gönderilen her eşya paketi yakalanır; eşyanın değeri varsa lore satırlarına fiyat bilgisi eklenir. Bu değişiklik yalnızca paket düzeyindedir, sunucudaki gerçek eşya verisi etkilenmez.Yapılandırma Yenileme (
/arceniaworth reload):config.ymlveworth.ymldosyaları yeniden okunur; fiyat haritası güncellenir.Kapatma: Eklenti devre dışı kaldığında
WorthManager.saveDocs()çağrılarak güncel fiyatlarworth.ymldosyasına yazılır.
Sınıf Diyagramı
ArceniaWorthPlugin (Ana sınıf)
├── WorthManager - Fiyat yükleme, kaydetme, sorgulama
├── PacketManager - ProtocolLib paket dinleyicisi (istemci tarafı lore)
├── WorthCommand - /worth komutu
├── SellCommand - /sell komutu (hand, all, gui)
│ └── SellGuiHolder - GUI tanımlayıcı (InventoryHolder)
├── SetWorthCommand - /setworth komutu
├── ArceniaWorthCommand - /arceniaworth komutu (reload)
├── GuiListener - GUI tıklama olayları dinleyicisi
└── ColorUtil - Adventure API renk dönüştürücü yardımcı sınıf