Bu doküman, Cloud Mod Manager (cmm) projesine eklenecek olan 8 yeni özelliğin mimari tasarımını, komut sözdizimlerini, kullanıcı deneyimi (UX) akışlarını, uç durum (edge-case) yönetimlerini ve teknik detaylarını kapsamaktadır.
Benzer ve birbiriyle ilişkili özellikler mantıksal olarak 3 ana grup altında toplanmıştır.
- Grup 1: Gelişmiş Mod ve Sürüm Yönetimi (
cmm update&cmm install) - Grup 2: Akıllı Sunucu Taraması ve Kesin Sürüm Tespiti (
cmm scan) - Grup 3: Yükleyici (Loader) ve Temel Ortam Yönetimi (
cmm loader&cmm mc-version) - Teknik Mimari ve Veri Yapıları Değişiklikleri
- Uç Durumlar (Edge Cases) ve Hata Yönetimi
- Mevcut Durum: Çıktıda yalnızca mod adı görünmekteydi (
- Sodium: 0.5.8 -> 0.5.11). - Yeni Tasarım: Modun Modrinth üzerindeki benzersiz tanımlayıcısı olan
slugbilgisi, adının hemen yanında parantez içinde açıkça yazılır. - Örnek Çıktı:
- Sodium (sodium): 0.5.8 -> 0.5.11 - Lithium (lithium): 0.11.2 -> 0.12.1 - Iris Shaders (iris): 1.7.0 -> 1.7.5
- Parametre:
--channel <release|beta|alpha>(Kısa yol:-c) - Varsayılan Değer:
release - Kanal Mantığı:
release: Sadece kararlı (Release) sürümleri kabul eder.beta: Hem kararlı hem de Beta sürümleri kabul eder (release+beta).alpha: Tüm kararlılık seviyelerini kabul eder (release+beta+alpha).
- Başlık Gösterimi: Komut çalıştırıldığında çıktının en başında hangi kanalın aktif olduğu açıkça belirtilir.
- Örnek Çıktı:
🔍 Checking for updates... [Channel: release] Found 2 available update(s): - Sodium (sodium): 0.5.8 -> 0.5.11 - Iris Shaders (iris): 1.7.0 -> 1.7.5 Apply updates? [y/N]:
- Kullanım:
cmm update [slug1] [slug2] [slug3] ...- Örn:
cmm update sodium iris lithium
- Örn:
- İşleyiş:
- Eğer argüman verilmezse (
cmm update), kurulu tüm modlar taranır. - Birden fazla slug verilirse, yalnızca bu modlar için hedef kanaldaki güncellemeler kontrol edilir.
- Kurulu olmayan veya bulunamayan bir slug girilirse kullanıcı bilgilendirilir.
- İndirme işlemi başlamadan önce güncellenecek tüm modlar listelenir ve tek bir toplu onay (
Apply updates? [y/N]:) istenir. Onay verilmezse hiçbir dosya değiştirilmez.
- Eğer argüman verilmezse (
cmm add ve cmm install komutları birbirinin tam alias'ı (eşdeğeri) olacak şekilde birleştirilir.
- Mod kurulumunda da
--channel release|beta|alphabayrağı desteklenir (varsayılan:release).
- Komut:
cmm install sodium(veyacmm add sodium) - İşleyiş:
- Seçilen kanaldaki (
release) son 10 sürüm numaralandırılarak tablo şeklinde sunulur. - Kullanıcı sürüm numarasını seçebilir,
n(sonraki sayfa) veyap(önceki sayfa) ile gezinebilir.
- Seçilen kanaldaki (
- Örnek Terminal Akışı:
🔍 Available versions for Sodium (sodium) [Channel: release, Loader: fabric, MC: 1.21.1]: [1] 0.5.11 (mc1.21.1) - sodium-fabric-0.5.11.jar (Published: 2024-08-15) [2] 0.5.10 (mc1.21.1) - sodium-fabric-0.5.10.jar (Published: 2024-07-28) [3] 0.5.9 (mc1.21.1) - sodium-fabric-0.5.9.jar (Published: 2024-07-02) [4] 0.5.8 (mc1.21.1) - sodium-fabric-0.5.8.jar (Published: 2024-06-14) ... [10] 0.5.0 (mc1.21.1) - sodium-fabric-0.5.0.jar (Published: 2024-04-10) Page 1/3 (Showing 1-10 of 28). [n] Next page, [q] Cancel Select version [1-10]: 1 Download and install sodium-fabric-0.5.11.jar? [Y/n]: y ⬇️ Downloading sodium-fabric-0.5.11.jar... ✅ Successfully installed Sodium (0.5.11)
- Komut:
cmm install sodium -v "0.5.11" - İşleyiş: İnteraktif menü açılmadan doğrudan belirtilen sürüm hedeflenir. İndirme öncesinde dosya adı onaylanır:
Target: Sodium (sodium) version 0.5.11 (File: sodium-fabric-0.5.11.jar) Install this version? [Y/n]: y
- Komut:
cmm install sodium iris lithium - İşleyiş:
- Terminal akışının bozulmaması için interaktif sürüm seçimi otomatik olarak devre dışı kalır.
- Seçilen kanaldaki (
release) en son kararlı sürümler Modrinth üzerinden çözümlenir. - Toplu özet tablosu basılarak tek bir son onay istenir:
📦 Preparing to install 3 mod(s) [Channel: release]: - Sodium (sodium) -> 0.5.11 (sodium-fabric-0.5.11.jar) - Iris Shaders (iris) -> 1.7.5 (iris-fabric-1.7.5.jar) - Lithium (lithium) -> 0.12.1 (lithium-fabric-0.12.1.jar) Proceed with installation? [Y/n]: y
- Eğer kurulmak istenen mod zaten
cmm.lockiçinde mevcutsa:⚠️ Mod 'Sodium' is already installed (Current: 0.5.8, Target: 0.5.11). Replace installed version with 0.5.11? [y/N]: y - Kullanıcı onaylarsa:
- Eski JAR dosyası diskten (
mods/sodium-fabric-0.5.8.jar) silinir. - Yeni JAR dosyası indirilir ve doğrulanır.
cmm.lockkaydı yeni sürüm, hash ve dosya adıyla güncellenir.
- Eski JAR dosyası diskten (
Mevcut tarama algoritması, tahmin hatalarını önlemek amacıyla 3 aşamalı hiyerarşik doğrulama modeline geçirilir:
- Server JAR İçeriği:
server.jarveya kökteki sunucu JAR dosyası ZIP olarak açılıp içindekiversion.jsonokunur ("id": "1.21.1"veya"id": "26.2"). - Fabric / Quilt Özellik Dosyaları:
fabric-server-launcher.properties(içindekiserverJar=hedefi) veya.fabric-installer. - İstemci Profil Manifestoları:
instance.json(Prism/MultiMC),minecraft.jsonveyamodrinth.index.json.
Kesin bir dosya bulunamazsa (yalnızca modların olduğu bir klasör tarandığında):
- Mod dosyalarından tespit edilen en popüler sürüm kullanıcıya önerilir:
Could not determine exact Minecraft version. Use detected version (26.2)? [Y/n]: - Eğer kullanıcı
nveyaNderse, serbest giriş istenir:Enter Minecraft version: 1.21.1 - Kullanıcının girdiği sürüm doğrulanır (
^[0-9]+(\.[0-9]+)+.*$) vecmm.tomldosyasına yazılır.
Loader tipi (Fabric, Forge, NeoForge, Quilt) ve sürümü için de aynı kesin dosya kontrolü yapılır; kesin bulunamazsa kullanıcıya onay sorulur:
Could not determine exact Loader version. Use detected version (0.16.10)? [Y/n]:
cmm update veya cmm scan çalıştırıldığında, ana işlem akışı kesintiye uğramadan arka planda mevcut loader'ın yeni bir versiyonu olup olmadığı sorgulanır.
- Kural: Çıktının ortasını bölmez; komutun tüm çıktıları bittikten sonra en son satırda tek satırlık bir bilgi notu olarak gösterilir.
- Örnek Çıktı:
... Successfully updated 3 mods. Notice: A new Fabric Loader version is available (v0.19.5). Run: cmm loader update
cmm loader update: Yapılandırılmış olan loader türü (örn: Fabric) için en güncel stabil sürümü Modrinth/Fabric meta API üzerinden kontrol eder.- Güncelleme varsa kullanıcıdan onay ister:
Current Fabric Loader: v0.16.9 Latest Fabric Loader: v0.16.10 Update Fabric Loader to v0.16.10? [y/N]: y
Açık ve çalışan bir Minecraft sunucusu veya istemcisi varken loader dosyalarını değiştirmek dosya bozulmasına ve kilitlenmelere yol açabilir.
- Kontrol Mekanizması:
- Linux/macOS üzerinde:
/proctablosu taranarak veyapgrep/süreç adı kontrolüyle aktifjava/minecraftsüreçleri aranır (özel olarak sunucu dizininde çalışan jar dosyaları kontrol edilir). - Windows üzerinde:
tasklistveyawmic processile eşleşen Java süreçleri tespit edilir.
- Linux/macOS üzerinde:
- Hata Durumu:
Eğer aktif bir süreç tespit edilirse işlem anında durdurulur:
Error: Server is currently running. Please stop the server before updating the loader (or use --force). - Bypass:
--forcebayrağı verilirse kontrol atlanır.
Minecraft sürümünü görüntülemek veya güvenle değiştirmek için özel CLI komutu.
cmm mc-version- Çıktı:
Configured Minecraft version: 26.2
cmm mc-version "26.1.2"- Format Doğrulama: Girilen değerin geçerli bir Minecraft versiyon formatında olup olmadığı (
regexp: ^(1\.[0-9]+(\.[0-9]+)?|2[0-9]\.[0-9]+|[0-9]{2}w[0-9]{2}[a-z])$) kontrol edilir. Geçersiz bir metin girilirse hata döndürülür (Error: invalid Minecraft version format 'xyz'). - Onay İsteme:
Change configured Minecraft version from 26.2 to 26.1.2? [y/N]: y Minecraft version updated to 26.1.2 in cmm.toml. - Sonuç:
cmm.tomldosyası temiz bir şekilde güncellenir. Kullanıcıya kilit dosyasını senkronize etmesi içincmm updateveyacmm syncçalıştırması hatırlatılır.
ReleaseChanneltipi eklenir:type ReleaseChannel string const ( ChannelRelease ReleaseChannel = "release" ChannelBeta ReleaseChannel = "beta" ChannelAlpha ReleaseChannel = "alpha" )
GetProjectVersionsmetodunachannel ReleaseChanneldesteği eklenir.releaseistendiğinde yalnızcaversion_type == "release"olanlar;betaistendiğindereleasevebeta;alphaistendiğinde hepsi filtrelenir.
CheckUpdatesMulti(slugs []string, channel string, force bool) ([]UpdateCandidate, []string, error)fonksiyonu eklenir.InstallModVersion(slug string, versionID string, channel string) (*AddResult, error)fonksiyonu eklenir.DetectProcessRunning(baseDir string) (bool, error)fonksiyonu eklenir (Cross-platform OS süreç taraması).
CheckLatestLoaderVersion(loaderName string, gameVersion string) (latestVer string, updateAvailable bool, err error)fonksiyonu eklenir.UpdateLoader(loaderName string, newVersion string) errorfonksiyonu eklenir.
| Uç Durum (Edge Case) | Beklenen Sistem Davranışı |
|---|---|
Seçili kanalda hiç sürüm olmaması (Örn: Mod sadece Alpha yayınlamış ama kanal --channel release) |
Mod atlanır ve "No compatible release versions found for mod 'X' (Try --channel beta or --channel alpha)" uyarısı verilir. |
| İnteraktif kurulumda geçersiz numara seçimi | Hata basılıp tekrar giriş istenir; q veya Ctrl+C ile güvenle iptal edilebilir. |
| Çoklu kurulumda modlardan birinin Modrinth'te bulunamaması | Bulunamayan mod hata olarak listelenir, diğer modların kurulum onay tablosu bozulmaz; kullanıcıya kalanları kurup kurmak istemediği sorulur. |
Sunucu çalışırken loader update çalıştırılması |
Süreç tespiti tetiklenir, işlem durdurulur ve --force önerilir. |
cmm mc-version ile geçersiz sürüm girilmesi |
Regex doğrulamasından geçemez; dosya değiştirilmeden açıklayıcı format hatası döndürülür. |
| Non-interactive / CI/CD Ortamları (stdin kapalıysa) | Onay isteyen ([y/N]) yerlerde --yes / -y bayrağı desteklenir; bayrak verilmemişse varsayılan değer (N) kabul edilir ve işlem güvenle sonlandırılır. |
Bu plan dokümanı, kullanıcı onayının ardından uygulama evresine geçildiğinde referans mimari olarak kullanılacaktır.