VeinMiner
Bu eklenti, Minecraft 1.21.11 sürümüyle uyumlu Paper ve Spigot sunucuları için geliştirilmiş olup Java 21 gerektirmektedir. 1.0.0 versiyonu ile sunulan bu araç, sunucu performansını ve işlevselliğini optimize etmeyi amaçlamaktadır. Kurulum için belirtilen platform ve Java gereksinimlerinin karşılanması yeterlidir.
Kısa Açıklama
Ultimine, FTB Ultimine modundan ilham alınarak geliştirilmiş bir Minecraft sunucu eklentisidir. Oyuncuların eğilip (sneak) sağ tıklayarak toplu madencilik modunu aktifleştirmesine olanak tanır. Aktifleştirildikten sonra eğilerek kırılan bloklar, seçilen şekil moduna göre (vein, cube, plane) çevresindeki blokları da otomatik olarak kırar. Performans dostu bir tick-bazlı kırma sistemiyle çalışır ve tam yapılandırılabilir bir altyapıya sahiptir.
Özellikler
- Üç farklı madencilik şekli:
- Vein (Damar): BFS algoritmasıyla kırılan blokla aynı türdeki bağlı blokları tespit eder ve kırar.
- Cube (Küp): Kırılan bloğun etrafında belirli bir yarıçapta küp şeklinde tüm blokları kırar.
- Plane (Düzlem): Oyuncunun baktığı yöne dik bir düzlemde blokları kırar.
- Toggle (aç/kapa) modu: Eğil + sağ tıkla ile ultimine modunu aç/kapat; sonrasında eğilerek blok kırdığında toplu madencilik devreye girer.
- ActionBar bildirimi: Mod açıldığında/kapandığında oyuncuya ActionBar mesajı gösterilir.
- Vein bağlantı tipi seçimi: 6 yönlü (FACES) veya 26 yönlü (ALL, köşeler dahil) komşu tarama.
- Oyuncu başına tercihler: Her oyuncu kendi şekil, yarıçap ve item toplama tercihini kaydedebilir; veriler
players.ymldosyasında saklanır. - Tick bazlı performanslı kırma: Bloklar tek seferde değil, her tick'te yapılandırılabilir sayıda kırılır (sunucu performansı korunur).
- Dayanıklılık (durability) sistemi: Her kırılan blok için alet dayanıklılığı düşer; Unbreaking büyüsü desteklenir.
- Alet kırılma kontrolü: Alet kırılırsa madencilik otomatik olarak durur ve kırılma sesi çalınır.
- Doğru alet kontrolü: Opsiyonel olarak blok türüne uygun alet gereksinimi (kazma, balta, kürek, çapa).
- İtem toplama noktası: Kırılan blok dropları isteğe bağlı olarak orijin noktasında veya her bloğun kendi konumunda düşürülür.
- BlockBreakEvent tetikleme: Diğer eklentilerle uyumluluk için her blok kırımında olay fırlatılır.
- Blok kara listesi: Bedrock, Barrier, Command Block gibi blokların kırılması engellenir.
- Dünya kara listesi: Belirli dünyalarda eklentinin çalışması devre dışı bırakılabilir.
- Bekleme süresi (cooldown): Art arda kullanımı sınırlamak için yapılandırılabilir bekleme süresi.
- MiniMessage desteği: Tüm mesajlar MiniMessage formatıyla özelleştirilebilir (renk, stil vb.).
- Tab tamamlama: Komutlarda tam tab-complete desteği.
- Canlı yeniden yükleme:
/ultimine reloadkomutuyla config anında yeniden yüklenebilir.
Gereksinimler
| Gereksinim | Minimum Sürüm |
|---|---|
| Minecraft Sunucu | Paper 1.21.11 (veya uyumlu fork) |
| Java | 21 |
| Maven | 3.x (sadece derleme için) |
Ek bir eklenti bağımlılığı yoktur. Tek bağımlılık paper-api olup provided kapsamındadır.
Kurulum
- Projeyi derleyin (aşağıdaki Derleme bölümüne bakın) veya hazır
Ultimine-1.0.0.jardosyasını edinin. - JAR dosyasını sunucunuzun
plugins/klasörüne kopyalayın. - Sunucuyu başlatın veya yeniden başlatın.
- Eklenti otomatik olarak
plugins/Ultimine/config.ymldosyasını oluşturacaktır. - Gerekirse
config.ymldosyasını düzenleyin ve/ultimine reloadkomutuyla yeniden yükleyin.
Komutlar ve İzinler
Komutlar
| Komut | Açıklama | İzin |
|---|---|---|
/ultimine |
Kullanım bilgisini gösterir | ultimine.use |
/ultimine shape <vein|cube|plane> |
Madencilik şeklini değiştirir | ultimine.use |
/ultimine radius <1-3> |
Madencilik yarıçapını değiştirir (maksimum değer config'den okunur) | ultimine.use |
/ultimine collect |
İtem toplama noktasını aç/kapat (orijin / blok konumu) | ultimine.use |
/ultimine reload |
Config dosyasını canlı olarak yeniden yükler | ultimine.admin |
İzinler
| İzin | Açıklama | Varsayılan |
|---|---|---|
ultimine.access |
Plugini kullanmak için zorunlu erişim izni. Bu izin olmadan plugin tamamen devre dışıdır (komut, sağ tık, blok kırma — hiçbiri çalışmaz). | false (kimseye verilmez) |
ultimine.use |
Ultimine özelliklerini kullanma izni | true (herkes) |
ultimine.admin |
Yönetim komutları (reload) izni — ultimine.access ve ultimine.use izinlerini de otomatik verir |
op (sadece operatörler) |
Not:
ultimine.accessizni varsayılan olarak hiç kimseye verilmez. LuckPerms gibi bir izin eklentisi ile veyaopyetkisi ile bu izni vermeniz gerekir. Aksi halde plugin hiçbir oyuncuda çalışmaz.
Kullanım
- Eğil (Sneak) + Sağ Tıkla yaparak ultimine modunu aç.
- ActionBar'da
ULTIMINE AKTİFmesajı görünür. - Eğilirken bir blok kırın; seçili şekle göre çevresindeki bloklar da otomatik kırılır.
- Modu kapatmak için tekrar Eğil + Sağ Tıkla yapın.
Yapılandırma (config.yml)
Aşağıda config.yml dosyasının tüm ayarları ve açıklamaları yer almaktadır:
# Eklentiyi tamamen etkinleştir/devre dışı bırak
enabled: true
# Aktivasyon ayarları
activation:
require-sneak: true # Eğilme (sneak) gerekli mi?
require-right-click: true # Sağ tıklama gerekli mi?
# Limitler
limits:
max-blocks-per-action: 128 # Tek seferde en fazla kaç blok kırılabilir
per-tick-break: 30 # Her sunucu tick'inde en fazla kaç blok kırılır
cooldown-ms: 150 # Kullanımlar arası bekleme süresi (milisaniye)
default-radius: 1 # Yeni oyuncular için varsayılan yarıçap
max-radius: 3 # İzin verilen maksimum yarıçap
# Davranış ayarları
behavior:
allow-all-blocks: true # Tüm blok türlerinde çalışsın mı?
durability-per-block: true # Her kırılan blok için alet dayanıklılığı düşsün mü?
require-correct-tool: false # Blok türüne uygun alet gerekli mi?
# Vein modu bağlantı tipi
# FACES: 6 yön (yukarı, aşağı, kuzey, güney, doğu, batı)
# ALL: 26 yön (köşeler dahil - çaprazlar da sayılır)
vein-connectivity: ALL
# Kırılamayacak bloklar (kara liste)
blacklist-blocks:
- BEDROCK
- BARRIER
- COMMAND_BLOCK
- CHAIN_COMMAND_BLOCK
- REPEATING_COMMAND_BLOCK
- STRUCTURE_BLOCK
- STRUCTURE_VOID
- END_PORTAL_FRAME
- END_PORTAL
- NETHER_PORTAL
- SPAWNER
- JIGSAW
# Eklentinin çalışmayacağı dünyalar
blacklist-worlds:
- lobby
- spawn
# Mesajlar (MiniMessage formatı desteklenir)
messages:
activated: "<green>ULTIMINE AKTİF"
deactivated: "<red>ULTIMINE KAPALI"
shape-changed: "<yellow>Shape değiştirildi: <white>{shape}"
radius-changed: "<yellow>Radius değiştirildi: <white>{radius}"
invalid-shape: "<red>Geçersiz shape! Kullanım: vein, cube, plane"
invalid-radius: "<red>Geçersiz radius! 1-{max} arası olmalı"
no-permission: "<red>Bu komutu kullanma izniniz yok!"
cooldown: "<red>Lütfen bekleyin..."
Yer Tutucular
| Yer Tutucu | Kullanıldığı Mesaj | Açıklama |
|---|---|---|
{shape} |
shape-changed |
Seçilen şekil adı (VEIN, CUBE, PLANE) |
{radius} |
radius-changed |
Seçilen yarıçap değeri |
{max} |
invalid-radius |
İzin verilen maksimum yarıçap |
Nasıl Çalışır
Aktivasyon Akışı
- Oyuncu eğilip sağ tıklar (
PlayerInteractEvent). - İzin, dünya kara listesi ve aktivasyon gereksinimleri kontrol edilir.
- Oyuncunun ultimine durumu toggle edilir (açıksa kapatılır, kapalıysa açılır).
- ActionBar üzerinden durum mesajı gösterilir.
Madencilik Akışı
- Oyuncu ultimine aktifken eğilerek bir blok kırar (
BlockBreakEvent). - Blok kara listesi, dünya kara listesi, cooldown ve izin kontrolleri yapılır.
- Opsiyonel olarak doğru alet kontrolü gerçekleştirilir.
- Oyuncunun seçili şekline göre uygun
MiningShapeimplementasyonu seçilir:VeinMiner: BFS (Breadth-First Search) algoritmasıyla aynı türdeki bağlı blokları bulur.CubeMiner: Yarıçap parametresine göre küp şeklinde tüm katı blokları toplar.PlaneMiner: Oyuncunun baktığı yönün baskın eksenine dik bir düzlemde blokları toplar.
- Bulunan bloklar
MiningTaskadlı birBukkitRunnablegörevine verilir. - Görev her tick'te
per-tick-breakkadar blok kırar. Her blok için:- Bloğun hava olup olmadığı kontrol edilir.
- Oyuncunun aletinin hala geçerli olup olmadığı kontrol edilir.
BlockBreakEventfırlatılarak diğer eklentilerin müdahale etmesi sağlanır.- Blok kırılır ve droplar uygun konumda düşürülür.
- Dayanıklılık düşürülür (Unbreaking büyüsü hesaba katılır).
- Deneyim puanı oyuncuya verilir.
- Tüm bloklar kırıldığında veya alet kırıldığında/oyuncu çıktığında görev iptal edilir.
Oyuncu Verileri
Her oyuncunun tercihleri (şekil, yarıçap, toplama noktası) plugins/Ultimine/players.yml dosyasında YAML formatında saklanır. Veriler ConcurrentHashMap ile thread-safe biçimde bellekte tutulur ve değişiklik anında diske yazılır.