Rehber MineCraft Plugin Dersleri│Config ve DataBase YML/YAML Dosyası oluşturma, okuma-yazma!

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
S

Silinen üye 116132

Ziyaretçi
Merhaba, önceki konuları (ilk konu, ikinci konu) okumadıysanız okumanızı öneririm. Geçen konuda kodlamaya başlamıştık, bu konuda ise config ve database (ayarlar ve veritabanı) dosyalarını "<server>/plugin/pluginismi/dosya.yml" dizininde oluşturmayı; bu dosyadaki verileri okumayı, bu dosyaya veri eklemeyi ve var olan bir veriyi düzenlemeyi nasıl yapacağınızı anlatacağım.
Tabii, ilk önce IDE'yi (Ne demek olduğunu bilmiyorsanız önceki konuları okuyun!) açıp projemize giriyoruz ve AnaDosya.class'ımızın kodlarına bir göz atıyoruz. Geçen konuda plugin açıldığında/kapandığında konsola mesaj attırmıştık, onEnable() ve onDisable()'nin içine yazdığımız log ifadeleri sayesinde bunu yapıyorduk. Bugün ise konsola loglamanın yanı sıra config ve database dosyasını yüklemesini de sağlayacak kodlar yazacağız. Öncelikle şunu belirteyim, config de database de aynı dosyada olacak.

Evet, şimdi kodları vereyim; sonra birlikte inceleyelim.
Java:
package tr.mustafatarak.testplugin;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;

public final class TestPlugin extends JavaPlugin {
    //PATH descriptions
    String ayarPath = "Settings.";//Dosyadaki ayarlar dizini
    String databasePath = "DataBase.";//Dosyadaki veritabanı dizini
    //
    FileConfiguration config;
    File configFile; //<server>/plugins/<pluginismi>/config.yml
    public void configYukle() {
        config = getConfig();
        config.addDefault(ayarPath+"Prefix", "[Pluginİsmi]:");
        config.addDefault(databasePath+"Para.ÖrnekOyuncu", 5);
        config.options().copyDefaults(true);
        //
        configFile = new File(getDataFolder(), "config.yml");
        saveConfig();
    }
    //
    public void onEnable() {
        configYukle();
        getLogger().info("Plugin aktif! Config Yüklendi!");
    }
    public void onDisable() {
        getLogger().info("Plugin deaktif!");
    }
}
Ehh, evet; önceki kodlara göre daha dolular :)
Şimdi tek tek açıklayarak gidelim; ilk satırda package ile dosyamızı belirttik, ondan sonra 7. satıra kadar olan import ile gerekli kütüphaneleri bildirdik ve Java bizim için onları hazırda tutuyor. 9. satırda ise geçen konumuzda bahsettiğimiz JavaPlugin'i kullanan TestPlugin ögesini oluşturduk. Hemen "String" ifadesi gözünüze çarpmış olabilir, geçen konuda bahsettiğimiz değişken tanımlamalarını kullandım sizin için =). ayarPath ve databasePath olmak üzere iki tane string değişkeni tanımladım. Bunları ileriki satırlarda kullanacağımız için hazırda durması iyi olabilir.
Şimdi bizim asıl konumuza geldik; FileConfiguration ile config değişkenini tanımladık, altta ise File ile configFile değişkenini tanımladık. Onlardan hemen sonra ise, bir fonksiyon tanımladık; configYukle(). Biz şuan bir yere, methoda, evente; configYukle(); yazarsak bu tanımladığımız fonksiyonu belirten {} arasındaki işlemleri yürütecektir. Biz şimdi bu fonksiyonun neler yapması gerektiğini konuşalım; config değişkenini getConfig() olarak tanımlıyoruz ki her yere getConfig yazmayalım. addDefault() ile gerekli değerleri ayarlıyoruz. Yani plugin dosyaya bunları yazacak, bunları olması zorunlu olacak şeyler olarak ayarlıyoruz. Bunu yaparken şu şekilde yaptığınızdan emin olun: getConfig().addDefault("dosyayolu", "bilgi").
Not: Eğer dosyayolu kısmına . ile bir şey koyarsanız "değer: noktadansonra" şeklinde olur. Birazdan örnek vereceğiz. Bilgi kısmına ise isterseniz integer (sayı yani " olmadan), isterseniz boolean (true ya da false " olmadan), ya da string (" vs. kullanarak) yazabilirsiniz. Bu sizin ihtiyacınıza göre değişir. Eğer sayı kaydetmeniz gerekiyorsa (önreğin banka plugini) integer (int) şeklinde kaydetmelisiniz.
getConfig().options().copyDefaults(true) ile de addDefault() ları yürütmesi gerektiğini bildiriyoruz. Bunu bir if/else şartı ile yükle ya da yükleme şeklinde yapmak isteyenler için true yerine false yazarsanız yüklemez. Haa, bu arada diğer birçok dilde olduğu gibi Java'da da // işaretinden sonra yazılanlar kod olarak algılanmaz ve çalıştırılmaz.
Evet; şimdi ise configFile değişkenini yeni bir File()'a atıyoruz, yukarıda "File configFile" da yapmıştık hatırlarsanız. "new File()" yaparken File() içine şu biçimde yazmalısınız: File("dosya (biz getDataFolder() kullandık.)", "dosya ismi.yml"). Biz bu satırda config.yml dosyasını configFile yazarak kullanabilmemiz için bir şey yapmış olduk ve config.yml dosyasına prefix ile para bilgisini kaydettik. Hemen plugini çalıştırdığımızda oluşan /plugins/pluginismi/config.yml dosyasının içeriğini atalım.
YAML:
Settings:
    Prefix: "[Pluginİsmi]:"
   
Database:
    Para:
        ÖrnekOyuncu: 5
Evet, görmüş olduğunuz gibi verileri kaydetmiş. Peki biz bu verileri nasıl kodlarda kullanacağız ya da nasıl düzenleyeceğiz?
- Öncelikle size
Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.
ile ilgili bir link veriyorum. Burada verileri nasıl çekeceğinizi göstermiş. Ben bu kodlarda bir para plugini altyapısı yaptığım için veriyi integer (int) yani bir sayı olarak kaydettim string olarak değil. Eğer string olsaydı .getString("Database.Para.ÖrnekOyuncu") olarak bir string değerini çekebilirdik ama bizimki integer olduğu için .getInteger("Database.Para.ÖrnekOyuncu") kullanıyoruz. Ve bu kod bize kaydettirdiğimiz 5 değerini verecektir. Peki biz buna nasıl sayı ekleriz? Mesela 3 para değeri daha ekleyelim; Int yeni = getInteger("yol")+3 ile yeni değerine kaydedilen değerden 3 fazla bir sayı atamış olduk. Bunu ise .set("yol", IntDegiskeni) olarak kaydettirebiliriz. Buradaki yol'umuz "Database.Para.ÖrnekOyuncu" olacak, IntDegiskeni'miz de yeni olarak ayarladığımız değişken olacak. Tabii ki; .set, .getInt gibi kodlardan önce getConfig() yazmamız gerektiğini unutmayalım, ama biz getConfig()'i config olarak ayarlamıştık; yani direk config.set() olarak da kullanılabilir.

Evet; nasıl başlangıç verisi kaydettireceğimizi, nasıl kayıtlı veriyi alacağımızı ve nasıl kayıtlı veriyi değiştireceğimizi öğrendik. Şimdi size bir link daha vermek istiyorum ve kaydedebileceğiniz türleri (boolean,string,int,list...) içeren siteye
Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.
tıklayarak gidebilirsiniz. Burada daha fazla örnek yer almaktadır.


Evet, bu konunun da sonuna geldik. Diğer konuları okumadıysanız konunun girişinde linkleri var. Okumanızı tavsiye ederim. Bir soru, sorun varsa ya da destek isterseniz discord üzerinden bana ulaşabilirsiniz, aşağıya bilgilerimi bırakıyorum.

Discord Sunucum: Maalesef atamıyorum :[
Discord Bilgilerim: Mustafa.TRK#9404 (ID: 670610274948218901)
Kişisel sitem:
Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.
 
Moderatör tarafından düzenlendi:
Başarılar Dilerim Arkadaşım.
 
Ve 3. serisi de gelmiş. :)
 
Görünüşe bakılırsa bu dediklerimi dikkate alıp, "Rehber" serisinin 3. konusunu açmışsınız ki size ne kadar da teşekkür etsem azdır. Bu 3. konuyu açmanız birlikte sahiden birçok şey öğrendim ki bana çok büyük katkılarınız dokunuyor. Daha devamı gelir mi bilmem ama gelirse çok iyi olur :)
 
Görünüşe bakılırsa bu dediklerimi dikkate alıp, "Rehber" serisinin 3. konusunu açmışsınız ki size ne kadar da teşekkür etsem azdır. Bu 3. konuyu açmanız birlikte sahiden birçok şey öğrendim ki bana çok büyük katkılarınız dokunuyor. Daha devamı gelir mi bilmem ama gelirse çok iyi olur :)
Zamanım olursa, yani Allah izin verirse en az iki konuluk daha malzeme var xD
Gönderi otomatik olarak birleştirildi:

Cidden takip etmeye çalışan ve öğrenmek isteyenlere listener ve event mantıkları ile ilgili çalışmalarını söyleyebilirim, iyi günler
 
Zamanım olursa, yani Allah izin verirse en az iki konuluk daha malzeme var xD
Gönderi otomatik olarak birleştirildi:

Cidden takip etmeye çalışan ve öğrenmek isteyenlere listener ve event mantıkları ile ilgili çalışmalarını söyleyebilirim, iyi günler
ikiden fazlasını bekliyorum ben haberin olsun :)
 
bazılarının aksine en azından field, class ve paket isimlerini insan gibi yazabiliyorsun :)
 
bazılarının aksine en azından field, class ve paket isimlerini insan gibi yazabiliyorsun :)
Pek anlamadım ama sanırım övgüydü, teşekkür ederim

EDIT: Eğer bu konularda iyiyseniz gelin görüşelim belki birşeyler katarsınız :)
 
Pek anlamadım ama sanırım övgüydü, teşekkür ederim

EDIT: Eğer bu konularda iyiyseniz gelin görüşelim belki birşeyler katarsınız :)
övgüydü, ayrıca anlatım biraz hatalı, aslında anlatımdan çok kodda config.yml dışında başka nasıl dosya oluşturulur bunu göstermiyorsun, new File kısmında config dosyası yoksa oluşturma yapmıyorsun, bu anlatım sadece config.yml'i kapsıyor ki zaten saveDeafaultConfig(); yapsanız şu yazdığını kodun tamamını kapsıycaktır.
 
övgüydü, ayrıca anlatım biraz hatalı, aslında anlatımdan çok kodda config.yml dışında başka nasıl dosya oluşturulur bunu göstermiyorsun, new File kısmında config dosyası yoksa oluşturma yapmıyorsun, bu anlatım sadece config.yml'i kapsıyor ki zaten saveDeafaultConfig(); yapsanız şu yazdığını kodun tamamını kapsıycaktır.
Eğer tamamını okusaydınız başta "database de config de aynı dosyada yer alacak" dediğimi görürdünüz diye düşünüyorum. Anlatımda bir hata göremedim, varsa açıkca yazarsanız düzeltebiliriz :). Ayrıca kod geçen bölümden kalan onEnable onDisable bilgilerini de içeriyor. O yüzden gereğinden biraz uzun kodlar. Fakat dediğiniz gibi saveDefaultConfig() yapılırsa bir default bilgi belirtmediğiniz sürece herhangi bir işleve yaramaz. Ayrıca konuda, kaydedilen veriyi alma yöntemleri, veriyi düzenleme ve yeni veri ekleme hakkında bilgiler içeriyor. Ayrıca attığım linkleri incelediyseniz orada yazılan her şey gerekli fakat YENİ başlayanlar için hepsini bir konuda anlatamam, unutmayın plugin dersleri hakkında konu yazıyorum ve abartılı, içeriği fazlaca olan konular yerine başlangıç düzeyindeki kişilerin anlayabileceği ve kullanılabilecek, lazım olan tüm içeriği aktarmaya çalışıyorum. Yorumunuz için teşekkür ederim :]
 
Ellerine sağlık.

File file = new File(this.getdatafolder()+"/lang.yml");
FileConfiguration lang = YamlConfiguration.load(file);
Gibi bir dosya yolu yaratilabilir aslinda bir çok seçenek mevcut bence bu rehberden sonraki rehberin komut üzerine olmali başarilar.
 
Ellerine sağlık.

File file = new File(this.getdatafolder()+"/lang.yml");
FileConfiguration lang = YamlConfiguration.load(file);
Gibi bir dosya yolu yaratilabilir aslinda bir çok seçenek mevcut bence bu rehberden sonraki rehberin komut üzerine olmali başarilar.
Haklısınız bir şeyin birden fazla yolu ve yöntemi var.
Ben de komutlar ve farklı bir CLASS'da yazılan kodları nasıl diğer classlarda kullanabileceğimiz üzerine bir konu yazmak istiyorum, müsait olursam :)
Gönderi otomatik olarak birleştirildi:

Merhaba, bu aralar pek müsait olamayacağım gibi duruyor; bana sorularınız için: BU MAİLDEN ulaşabilirsiniz!
 
Moderatör tarafından düzenlendi:
Bende plugin yazmaya çalışıyordum bu tarz konuları bize öğrettiğinizden dolayı teşekkürler.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst