Spigot/Bukkit eklentileri için geliştirilmiş, Annotasyon tabanlı (Annotation-Driven), Reflection destekli ve Sürümden Bağımsız (Cross-Version) çalışan gelişmiş bir konfigürasyon yönetim kütüphanesi.
config.get("path") karmaşasına son verin. Java sınıflarınızı (POJO) doğrudan YAML dosyalarına bağlayın.
- Nesne Tabanlı Yönetim: Config dosyalarını Java sınıfları olarak yönetin.
- Otomatik Dönüştürücüler (Converters):
ItemStack(Hex Renkler, NBT, CustomModelData, İksirler, Deri Zırhlar dahil).Location(Dünya güvenli yükleme).Cuboid(Bölge ve Yön/Vektör destekli).Time("1h 30m" gibi süreleri saniyeye çevirir).
- Güçlü Validasyon:
@Validateile verilerinizi (Min/Max, Regex, NotNull) koruyun. Hatalı veri girilirse varsayılan değer korunur. - Sürüm Desteği (1.8 - 1.20+): Tek kod tabanı ile hem 1.8 sunucularda hem de son sürüm sunucularda (Hex renkler, Off-hand vb.) sorunsuz çalışır.
- Akıllı Reload Sistemi:
/reloadatıldığında "Dirty State" (eski verilerin kalması) sorunu yaşanmaz. Sınıf tamamen sıfırlanıp yeniden yüklenir. - Otomatik Yedekleme: Config dosyası bozulursa veya sürüm güncellenirse (
@ConfigVersion) otomatik yedek alır. - Yaşam Döngüsü Hook'ları: Yükleme sonrası (
@PostLoad) veya reload sırasında (@OnReload) özel kodlar çalıştırın.
Bu kütüphane tek bir paket altında toplanmıştır. com.bentahsin.configuration paketini projenizin src/main/java dizinine kopyalamanız yeterlidir.
Standart bir Java sınıfı oluşturun ve annotasyonlarla süsleyin.
import com.bentahsin.configuration.annotation.*;
import com.bentahsin.configuration.converter.impl.*;
import org.bukkit.Location;
import org.bukkit.inventory.ItemStack;
import java.util.List;
import java.util.Arrays;
@ConfigHeader({"BenTahsin Plugin Config", "Version 1.0"})
@ConfigVersion(1)
@Backup(enabled = true, onFailure = true, onMigration = true)
public class MainConfig {
@Comment("Plugin aktif mi?")
public boolean enabled = true;
@Comment("Sunucu ismi (Regex kontrolü var)")
@Validate(notNull = true, pattern = "^[a-zA-Z0-9 ]*$")
public String serverName = "Survival Sunucusu";
@Comment("AFK Süresi (Örn: 1h, 30m, 100s)")
@Transform(TimeConverter.class)
public long afkTime = 300; // Saniye olarak tutulur
@Comment("Başlangıç Eşyası")
@Transform(ItemStackConverter.class)
public ItemStack starterItem; // Config'den otomatik yüklenir
@Comment("Spawn Noktası")
@Transform(LocationConverter.class)
public Location spawnPoint;
@ConfigPath("database.settings") // Özel yol belirtme
public Database db = new Database();
// İç sınıflar MUTLAKA static olmalıdır
public static class Database {
public String host = "localhost";
public int port = 3306;
}
}public class MyPlugin extends JavaPlugin {
private Configuration configManager;
private MainConfig mainConfig;
@Override
public void onEnable() {
// Manager'ı başlat
this.configManager = new Configuration(this);
// Config nesnesini oluştur
this.mainConfig = new MainConfig();
// Yükle (Dosya yoksa oluşturur, varsa yükler)
this.configManager.init(mainConfig, "config.yml");
}
public void reload() {
// Reload işlemi (Verileri sıfırlar ve tekrar yükler)
this.configManager.reload(mainConfig, "config.yml");
}
}| Annotasyon | Hedef | Açıklama |
|---|---|---|
@ConfigPath("yol") |
Field | Değişkenin YAML dosyasındaki yolunu belirler. (Örn: settings.general.name) |
@Comment("mesaj") |
Field | Config dosyasına yorum satırı ekler. |
@Validate |
Field | Veri doğrulaması yapar (Min, Max, Regex, NotNull). Hatalı veri girilirse yüklenmez. |
@Transform(Class) |
Field | Özel bir dönüştürücü (Converter) kullanır. |
@Ignore |
Field | Bu değişkenin config dosyasına kaydedilmesini engeller. |
@ConfigHeader |
Class | Dosyanın en üstüne başlık/açıklama ekler. |
@ConfigVersion(int) |
Class | Dosya sürümünü takip eder. Sürüm artarsa migration tetikler. |
@Backup |
Class | Hata veya sürüm değişikliğinde dosyanın yedeğini alır. |
@PostLoad |
Method | Config yüklendikten hemen sonra çalışacak metodu belirler. |
@OnReload |
Method | /reload atıldığında çalışacak metodu belirler. |
Kütüphane içinde hazır gelen güçlü dönüştürücüler:
ItemStackConverter:- Destek: Enchantments, ItemFlags, Unbreakable, CustomModelData (1.14+), Hex Colors (1.16+), PotionData (1.9+), Leather Armor Colors, Skull Owners.
- Güvenlik: Eski sürümlerde (1.8) çalışırken yeni özellikler (Hex, Potion) hata vermez, yoksayılır.
TimeConverter:- String (
"1h 30m 10s") <-> Long (Saniye) dönüşümü yapar.
- String (
LocationConverter:"world,x,y,z,yaw,pitch"formatında saklar. Dünya yüklenmemişsenulldöner, çökmez.
CuboidConverter:- İki lokasyon arasındaki bölgeyi saklar. Başlangıç ve Bitiş noktalarının sırasını korur (Vektör/Yön işlemleri için uygundur).
- Constructor: Config sınıflarınızın parametresiz bir yapıcı metodu (
public Config() {}) olmalıdır. - Inner Classes: İç içe sınıf kullanıyorsanız
public static classolmak zorundadır. - Final: Config alanları
finalolmamalıdır.
Bu proje açık kaynaklıdır. Kendi projelerinizde özgürce kullanabilir ve değiştirebilirsiniz.
Developed by bentahsin